diff options
Diffstat (limited to 'recipes')
-rw-r--r-- | recipes/binutils/binutils-2.17.50.0.12/binutils-nios2-files.patch | 41015 | ||||
-rw-r--r-- | recipes/binutils/binutils-2.17.50.0.12/binutils-nios2.patch | 576 | ||||
-rw-r--r-- | recipes/binutils/binutils_2.17.50.0.12.bb | 5 | ||||
-rw-r--r-- | recipes/gcc/gcc-4.1.2.inc | 6 | ||||
-rw-r--r-- | recipes/gcc/gcc-4.1.2/gcc-config-nios2.patch | 41 | ||||
-rw-r--r-- | recipes/gcc/gcc-4.1.2/gcc-nios2.patch | 11017 | ||||
-rw-r--r-- | recipes/gcc/gcc-4.1.2/nios2-lib-flags.patch | 10 | ||||
-rw-r--r-- | recipes/glibc/glibc-2.5/nios2-elf.patch | 87 | ||||
-rw-r--r-- | recipes/glibc/glibc-2.5/nios2-iconv.patch | 85 | ||||
-rw-r--r-- | recipes/glibc/glibc-2.5/nios2-ld-collate.patch | 308 | ||||
-rw-r--r-- | recipes/glibc/glibc-2.5/sysdeps-nios2.patch | 4028 | ||||
-rw-r--r-- | recipes/glibc/glibc_2.5.bb | 9 | ||||
-rw-r--r-- | recipes/linux-libc-headers/linux-libc-headers_2.6.34.bb | 35 | ||||
-rw-r--r-- | recipes/linux/linux-nios2-2.6.34/defconfig | 589 | ||||
-rw-r--r-- | recipes/linux/linux-nios2_2.6.34.bb | 35 | ||||
-rw-r--r-- | recipes/tgt/tgt_1.0.6.bb | 6 |
16 files changed, 57849 insertions, 3 deletions
diff --git a/recipes/binutils/binutils-2.17.50.0.12/binutils-nios2-files.patch b/recipes/binutils/binutils-2.17.50.0.12/binutils-nios2-files.patch new file mode 100644 index 0000000000..fc77ca2fea --- /dev/null +++ b/recipes/binutils/binutils-2.17.50.0.12/binutils-nios2-files.patch @@ -0,0 +1,41015 @@ +Index: binutils-2.17.50.0.12/bfd/cpu-nios2.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/bfd/cpu-nios2.c 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,71 @@ ++/* NOT ASSIGNED TO FSF. COPYRIGHT ALTERA. */ ++/* bfd back-end for Altera Nios II support ++ ++ Copyright (C) 2003 ++ by Nigel Gray (ngray@altera.com). ++ ++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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ++ ++#include "bfd.h" ++#include "sysdep.h" ++#include "libbfd.h" ++ ++static const bfd_arch_info_type *nios2_compatible ++ (const bfd_arch_info_type *, const bfd_arch_info_type *); ++ ++/* The default routine tests bits_per_word, which is wrong on mips as ++ mips word size doesn't correlate with reloc size. */ ++ ++static const bfd_arch_info_type * ++nios2_compatible (const bfd_arch_info_type *a, const bfd_arch_info_type *b) ++{ ++ if (a->arch != b->arch) ++ return NULL; ++ ++ /* Machine compatibility is checked in ++ _bfd_mips_elf_merge_private_bfd_data. */ ++ ++ return a; ++} ++ ++#define N(BITS_WORD, BITS_ADDR, NUMBER, PRINT, DEFAULT, NEXT) \ ++ { \ ++ BITS_WORD, /* bits in a word */ \ ++ BITS_ADDR, /* bits in an address */ \ ++ 8, /* 8 bits in a byte */ \ ++ bfd_arch_nios2, \ ++ NUMBER, \ ++ "nios2", \ ++ PRINT, \ ++ 3, \ ++ DEFAULT, \ ++ nios2_compatible, \ ++ bfd_default_scan, \ ++ NEXT, \ ++ } ++ ++#define NN(index) (&arch_info_struct[(index) + 1]) ++ ++static const bfd_arch_info_type arch_info_struct[] = ++{ ++ N (32, 32, bfd_mach_nios2, "nios2", FALSE, 0), ++}; ++ ++/* There is only one architecture - but we give the default a machine number of 0 ++ so the linker can distinguish it */ ++const bfd_arch_info_type bfd_nios2_arch = ++N (32, 32, 0, "nios2", TRUE, &arch_info_struct[0]); +Index: binutils-2.17.50.0.12/bfd/elf32-nios2.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/bfd/elf32-nios2.c 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,4992 @@ ++/* NOT ASSIGNED TO FSF. COPYRIGHT ALTERA. */ ++/* New Jersey-specific support for 32-bit ELF ++ ++ Copyright (C) 2005 ++ by Nigel Gray (ngray@altera.com). ++ ++ Copyright (C) 2008, CodeSourcery 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ++ ++/* This file handles Altera New Jersey ELF targets */ ++ ++#include "bfd.h" ++#include "sysdep.h" ++#include "libbfd.h" ++#include "bfdlink.h" ++#include "genlink.h" ++#include "elf-bfd.h" ++#include "elf/nios2.h" ++#include "opcode/nios2.h" ++ ++/* Use RELA relocations. */ ++#ifndef USE_RELA ++#define USE_RELA ++#endif ++ ++#ifdef USE_REL ++#undef USE_REL ++#endif ++ ++/* Function prototypes. */ ++ ++static reloc_howto_type *nios2_elf32_bfd_reloc_type_lookup ++ (bfd *, bfd_reloc_code_real_type); ++ ++static bfd_boolean nios2_elf32_relax_section ++ (bfd *, asection *, struct bfd_link_info *, bfd_boolean *); ++#if 0 ++static bfd_boolean nios2_elf32_relax_delete_bytes ++ (bfd *, asection *, bfd_vma, int); ++#endif ++static reloc_howto_type *nios2_elf32_rtype_to_howto ++ (unsigned int r_type, bfd_boolean rela_p); ++ ++static void nios2_elf32_info_to_howto ++ (bfd * abfd, arelent * cache_ptr, Elf_Internal_Rela * dst); ++ ++static bfd_boolean nios2_elf32_relocate_section ++ (bfd * output_bfd, struct bfd_link_info * info, bfd * input_bfd, ++ asection * input_section, bfd_byte * contents, ++ Elf_Internal_Rela * relocs, Elf_Internal_Sym * local_syms, ++ asection ** local_sections); ++ ++static reloc_howto_type *lookup_howto (unsigned int rtype); ++ ++static bfd_reloc_status_type nios2_elf_final_gp ++ (bfd *, asymbol *, bfd_boolean, char **, bfd_vma *, ++ struct bfd_link_info *); ++ ++static bfd_boolean nios2_elf_assign_gp ++ (bfd *, bfd_vma *, struct bfd_link_info *); ++ ++static bfd_reloc_status_type nios2_elf32_ignore_reloc ++ (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); ++ ++static bfd_reloc_status_type nios2_elf32_hi16_relocate ++ (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); ++ ++static bfd_reloc_status_type nios2_elf32_lo16_relocate ++ (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); ++ ++static bfd_reloc_status_type nios2_elf32_hiadj16_relocate ++ (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); ++ ++static bfd_reloc_status_type nios2_elf32_pcrel_lo16_relocate ++ (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); ++ ++static bfd_reloc_status_type nios2_elf32_pcrel_hiadj16_relocate ++ (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); ++ ++static bfd_reloc_status_type nios2_elf32_pcrel16_relocate ++ (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); ++ ++static bfd_reloc_status_type nios2_elf32_call26_relocate ++ (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); ++ ++static bfd_reloc_status_type nios2_elf32_gprel_relocate ++ (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); ++ ++static bfd_reloc_status_type nios2_elf32_ujmp_relocate ++ (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); ++ ++static bfd_reloc_status_type nios2_elf32_cjmp_relocate ++ (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); ++ ++static bfd_reloc_status_type nios2_elf32_callr_relocate ++ (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); ++ ++static bfd_reloc_status_type nios2_elf32_do_hi16_relocate ++ (bfd *, reloc_howto_type *, asection *, ++ bfd_byte *, bfd_vma, bfd_vma, bfd_vma); ++ ++static bfd_reloc_status_type nios2_elf32_do_lo16_relocate ++ (bfd *, reloc_howto_type *, asection *, ++ bfd_byte *, bfd_vma, bfd_vma, bfd_vma); ++ ++static bfd_reloc_status_type nios2_elf32_do_hiadj16_relocate ++ (bfd *, reloc_howto_type *, asection *, ++ bfd_byte *, bfd_vma, bfd_vma, bfd_vma); ++ ++static bfd_reloc_status_type nios2_elf32_do_pcrel_lo16_relocate ++ (bfd *, reloc_howto_type *, asection *, ++ bfd_byte *, bfd_vma, bfd_vma, bfd_vma); ++ ++static bfd_reloc_status_type nios2_elf32_do_pcrel_hiadj16_relocate ++ (bfd *, reloc_howto_type *, asection *, ++ bfd_byte *, bfd_vma, bfd_vma, bfd_vma); ++ ++static bfd_reloc_status_type nios2_elf32_do_pcrel16_relocate ++ (bfd *, reloc_howto_type *, asection *, ++ bfd_byte *, bfd_vma, bfd_vma, bfd_vma); ++ ++static bfd_reloc_status_type nios2_elf32_do_call26_relocate ++ (bfd *, reloc_howto_type *, asection *, ++ bfd_byte *, bfd_vma, bfd_vma, bfd_vma); ++ ++static bfd_reloc_status_type nios2_elf32_do_gprel_relocate ++ (bfd *, reloc_howto_type *, asection *, ++ bfd_byte *, bfd_vma, bfd_vma, bfd_vma); ++ ++static bfd_reloc_status_type nios2_elf32_do_ujmp_relocate ++ (bfd *, reloc_howto_type *, asection *, ++ bfd_byte *, bfd_vma, bfd_vma, bfd_vma); ++ ++static bfd_reloc_status_type nios2_elf32_do_cjmp_relocate ++ (bfd *, reloc_howto_type *, asection *, ++ bfd_byte *, bfd_vma, bfd_vma, bfd_vma); ++ ++static bfd_reloc_status_type nios2_elf32_do_callr_relocate ++ (bfd *, reloc_howto_type *, asection *, ++ bfd_byte *, bfd_vma, bfd_vma, bfd_vma); ++ ++static bfd_boolean nios2_elf32_section_from_shdr ++ (bfd *, Elf_Internal_Shdr *, const char *name, int shindex); ++ ++static bfd_boolean nios2_elf32_section_flags ++ (flagword *, const Elf_Internal_Shdr *); ++ ++static bfd_boolean nios2_elf32_fake_sections ++ (bfd *, Elf_Internal_Shdr *, asection *); ++ ++ ++ ++static bfd_boolean nios2_elf32_check_relocs ++ (bfd *, struct bfd_link_info *, asection *, ++ const Elf_Internal_Rela *); ++ ++static asection *nios2_elf32_gc_mark_hook (asection * sec, ++ struct bfd_link_info * ++ info, ++ Elf_Internal_Rela * rel, ++ struct elf_link_hash_entry ++ * h, ++ Elf_Internal_Sym * sym); ++ ++void ++_bfd_set_link_info (struct bfd_link_info *info); ++ ++void ++_bfd_set_force_make_executable (bfd_boolean force); ++ ++ ++/* Target vector. */ ++extern const bfd_target bfd_elf32_littlenios2_vec; ++extern const bfd_target bfd_elf32_bignios2_vec; ++ ++/* Offset of tp and dtp pointers from start of TLS block. */ ++#define TP_OFFSET 0x7000 ++#define DTP_OFFSET 0x8000 ++ ++/* The relocation table used for SHT_REL sections. */ ++ ++static reloc_howto_type elf_nios2_howto_table_rel[] = { ++ /* No relocation. */ ++ HOWTO (R_NIOS2_NONE, /* type */ ++ 0, /* rightshift */ ++ 0, /* size (0 = byte, 1 = short, 2 = long) */ ++ 0, /* bitsize */ ++ FALSE, /* pc_relative */ ++ 0, /* bitpos */ ++ complain_overflow_dont, /* complain_on_overflow */ ++ bfd_elf_generic_reloc, /* special_function */ ++ "R_NIOS2_NONE", /* name */ ++ FALSE, /* partial_inplace */ ++ 0, /* src_mask */ ++ 0, /* dst_mask */ ++ FALSE), /* pcrel_offset */ ++ ++ /* 16-bit signed immediate relocation */ ++ HOWTO (R_NIOS2_S16, /* type */ ++ 0, /* rightshift */ ++ 2, /* size (0 = byte, 1 = short, 2 = long) */ ++ 16, /* bitsize */ ++ FALSE, /* pc_relative */ ++ 6, /* bitpos */ ++ complain_overflow_signed, /* complain on overflow */ ++ bfd_elf_generic_reloc, /* special function */ ++ "R_NIOS2_S16", /* name */ ++ FALSE, /* partial_inplace */ ++ 0x003fffc0, /* src_mask */ ++ 0x003fffc0, /* dest_mask */ ++ FALSE), /* pcrel_offset */ ++ ++ /* 16-bit unsigned immediate relocation */ ++ HOWTO (R_NIOS2_U16, /* type */ ++ 0, /* rightshift */ ++ 2, /* size (0 = byte, 1 = short, 2 = long) */ ++ 16, /* bitsize */ ++ FALSE, /* pc_relative */ ++ 6, /* bitpos */ ++ complain_overflow_unsigned, /* complain on overflow */ ++ bfd_elf_generic_reloc, /* special function */ ++ "R_NIOS2_U16", /* name */ ++ FALSE, /* partial_inplace */ ++ 0x003fffc0, /* src_mask */ ++ 0x003fffc0, /* dest_mask */ ++ FALSE), /* pcrel_offset */ ++ ++ HOWTO (R_NIOS2_PCREL16, /* type */ ++ 0, /* rightshift */ ++ 2, /* size (0 = byte, 1 = short, 2 = long) */ ++ 16, /* bitsize */ ++ TRUE, /* pc_relative */ ++ 6, /* bitpos */ ++ complain_overflow_signed, /* complain on overflow */ ++ nios2_elf32_pcrel16_relocate, /* special function */ ++ "R_NIOS2_PCREL16", /* name */ ++ FALSE, /* partial_inplace */ ++ 0x003fffc0, /* src_mask */ ++ 0x003fffc0, /* dest_mask */ ++ TRUE), /* pcrel_offset */ ++ ++ HOWTO (R_NIOS2_CALL26, /* type */ ++ 2, /* rightshift */ ++ 2, /* size (0 = byte, 1 = short, 2 = long) */ ++ 26, /* bitsize */ ++ FALSE, /* pc_relative */ ++ 6, /* bitpos */ ++ complain_overflow_dont, /* complain on overflow */ ++ nios2_elf32_call26_relocate, /* special function */ ++ "R_NIOS2_CALL26", /* name */ ++ FALSE, /* partial_inplace */ ++ 0xffffffc0, /* src_mask */ ++ 0xffffffc0, /* dst_mask */ ++ FALSE), /* pcrel_offset */ ++ ++ HOWTO (R_NIOS2_IMM5, ++ 0, ++ 2, ++ 5, ++ FALSE, ++ 6, ++ complain_overflow_bitfield, ++ bfd_elf_generic_reloc, ++ "R_NIOS2_IMM5", ++ FALSE, ++ 0x000007c0, ++ 0x000007c0, ++ FALSE), ++ ++ HOWTO (R_NIOS2_CACHE_OPX, ++ 0, ++ 2, ++ 5, ++ FALSE, ++ 22, ++ complain_overflow_bitfield, ++ bfd_elf_generic_reloc, ++ "R_NIOS2_CACHE_OPX", ++ FALSE, ++ 0x07c00000, ++ 0x07c00000, ++ FALSE), ++ ++ HOWTO (R_NIOS2_IMM6, ++ 0, ++ 2, ++ 6, ++ FALSE, ++ 6, ++ complain_overflow_bitfield, ++ bfd_elf_generic_reloc, ++ "R_NIOS2_IMM6", ++ FALSE, ++ 0x00000fc0, ++ 0x00000fc0, ++ FALSE), ++ ++ HOWTO (R_NIOS2_IMM8, ++ 0, ++ 2, ++ 8, ++ FALSE, ++ 6, ++ complain_overflow_bitfield, ++ bfd_elf_generic_reloc, ++ "R_NIOS2_IMM8", ++ FALSE, ++ 0x00003fc0, ++ 0x00003fc0, ++ FALSE), ++ ++ HOWTO (R_NIOS2_HI16, ++ 0, ++ 2, ++ 32, ++ FALSE, ++ 6, ++ complain_overflow_dont, ++ nios2_elf32_hi16_relocate, ++ "R_NIOS2_HI16", ++ FALSE, ++ 0x003fffc0, ++ 0x003fffc0, ++ FALSE), ++ ++ HOWTO (R_NIOS2_LO16, ++ 0, ++ 2, ++ 32, ++ FALSE, ++ 6, ++ complain_overflow_dont, ++ nios2_elf32_lo16_relocate, ++ "R_NIOS2_LO16", ++ FALSE, ++ 0x003fffc0, ++ 0x003fffc0, ++ FALSE), ++ ++ HOWTO (R_NIOS2_HIADJ16, ++ 0, ++ 2, ++ 32, ++ FALSE, ++ 6, ++ complain_overflow_dont, ++ nios2_elf32_hiadj16_relocate, ++ "R_NIOS2_HIADJ16", ++ FALSE, ++ 0x003fffc0, ++ 0x003fffc0, ++ FALSE), ++ ++ HOWTO (R_NIOS2_BFD_RELOC_32, ++ 0, ++ 2, /* long */ ++ 32, ++ FALSE, ++ 0, ++ complain_overflow_dont, ++ bfd_elf_generic_reloc, ++ "R_NIOS2_BFD_RELOC32", ++ FALSE, ++ 0xffffffff, ++ 0xffffffff, ++ FALSE), ++ ++ HOWTO (R_NIOS2_BFD_RELOC_16, ++ 0, ++ 1, /* short */ ++ 16, ++ FALSE, ++ 0, ++ complain_overflow_bitfield, ++ bfd_elf_generic_reloc, ++ "R_NIOS2_BFD_RELOC16", ++ FALSE, ++ 0x0000ffff, ++ 0x0000ffff, ++ FALSE), ++ ++ HOWTO (R_NIOS2_BFD_RELOC_8, ++ 0, ++ 0, /* byte */ ++ 8, ++ FALSE, ++ 0, ++ complain_overflow_bitfield, ++ bfd_elf_generic_reloc, ++ "R_NIOS2_BFD_RELOC8", ++ FALSE, ++ 0x000000ff, ++ 0x000000ff, ++ FALSE), ++ ++ HOWTO (R_NIOS2_GPREL, ++ 0, ++ 2, ++ 32, ++ FALSE, ++ 6, ++ complain_overflow_dont, ++ nios2_elf32_gprel_relocate, ++ "R_NIOS2_GPREL", ++ FALSE, ++ 0x003fffc0, ++ 0x003fffc0, ++ FALSE), ++ ++ HOWTO (R_NIOS2_GNU_VTINHERIT, ++ 0, ++ 2, /* short */ ++ 0, ++ FALSE, ++ 0, ++ complain_overflow_dont, ++ NULL, ++ "R_NIOS2_GNU_VTINHERIT", ++ FALSE, ++ 0, ++ 0, ++ FALSE), ++ ++ HOWTO (R_NIOS2_GNU_VTENTRY, ++ 0, ++ 2, /* byte */ ++ 0, ++ FALSE, ++ 0, ++ complain_overflow_dont, ++ _bfd_elf_rel_vtable_reloc_fn, ++ "R_NIOS2_GNU_VTENTRY", ++ FALSE, ++ 0, ++ 0, ++ FALSE), ++ ++ HOWTO (R_NIOS2_UJMP, ++ 0, ++ 2, ++ 32, ++ FALSE, ++ 6, ++ complain_overflow_dont, ++ nios2_elf32_ujmp_relocate, ++ "R_NIOS2_UJMP", ++ FALSE, ++ 0x003fffc0, ++ 0x003fffc0, ++ FALSE), ++ ++ HOWTO (R_NIOS2_CJMP, ++ 0, ++ 2, ++ 32, ++ FALSE, ++ 6, ++ complain_overflow_dont, ++ nios2_elf32_cjmp_relocate, ++ "R_NIOS2_CJMP", ++ FALSE, ++ 0x003fffc0, ++ 0x003fffc0, ++ FALSE), ++ ++ HOWTO (R_NIOS2_CALLR, ++ 0, ++ 2, ++ 32, ++ FALSE, ++ 6, ++ complain_overflow_dont, ++ nios2_elf32_callr_relocate, ++ "R_NIOS2_CALLR", ++ FALSE, ++ 0x003fffc0, ++ 0x003fffc0, ++ FALSE), ++ ++ HOWTO (R_NIOS2_ALIGN, ++ 0, ++ 2, ++ 0, ++ FALSE, ++ 0, ++ complain_overflow_dont, ++ nios2_elf32_ignore_reloc, ++ "R_NIOS2_ALIGN", ++ FALSE, ++ 0, ++ 0, ++ TRUE), ++ ++ ++ HOWTO (R_NIOS2_GOT16, ++ 0, ++ 2, ++ 16, ++ FALSE, ++ 6, ++ complain_overflow_bitfield, ++ bfd_elf_generic_reloc, ++ "R_NIOS2_GOT16", ++ FALSE, ++ 0x003fffc0, ++ 0x003fffc0, ++ FALSE), ++ ++ HOWTO (R_NIOS2_CALL16, ++ 0, ++ 2, ++ 16, ++ FALSE, ++ 6, ++ complain_overflow_bitfield, ++ bfd_elf_generic_reloc, ++ "R_NIOS2_CALL16", ++ FALSE, ++ 0x003fffc0, ++ 0x003fffc0, ++ FALSE), ++ ++ HOWTO (R_NIOS2_GOTOFF_LO, ++ 0, ++ 2, ++ 16, ++ FALSE, ++ 6, ++ complain_overflow_dont, ++ bfd_elf_generic_reloc, ++ "R_NIOS2_GOTOFF_LO", ++ FALSE, ++ 0x003fffc0, ++ 0x003fffc0, ++ FALSE), ++ ++ HOWTO (R_NIOS2_GOTOFF_HA, ++ 0, ++ 2, ++ 16, ++ FALSE, ++ 6, ++ complain_overflow_dont, ++ bfd_elf_generic_reloc, ++ "R_NIOS2_GOTOFF_HA", ++ FALSE, ++ 0x003fffc0, ++ 0x003fffc0, ++ FALSE), ++ ++ HOWTO (R_NIOS2_PCREL_LO, ++ 0, ++ 2, ++ 16, ++ TRUE, ++ 6, ++ complain_overflow_dont, ++ nios2_elf32_pcrel_lo16_relocate, ++ "R_NIOS2_PCREL_LO", ++ FALSE, ++ 0x003fffc0, ++ 0x003fffc0, ++ TRUE), ++ ++ HOWTO (R_NIOS2_PCREL_HA, ++ 0, ++ 2, ++ 16, ++ FALSE, /* This is a PC-relative relocation, but we need to subtract ++ PC ourselves before the HIADJ. */ ++ 6, ++ complain_overflow_dont, ++ nios2_elf32_pcrel_hiadj16_relocate, ++ "R_NIOS2_PCREL_HA", ++ FALSE, ++ 0x003fffc0, ++ 0x003fffc0, ++ TRUE), ++ ++ HOWTO (R_NIOS2_TLS_GD16, ++ 0, ++ 2, ++ 16, ++ FALSE, ++ 6, ++ complain_overflow_bitfield, ++ bfd_elf_generic_reloc, ++ "R_NIOS2_TLS_GD16", ++ FALSE, ++ 0x003fffc0, ++ 0x003fffc0, ++ FALSE), ++ ++ HOWTO (R_NIOS2_TLS_LDM16, ++ 0, ++ 2, ++ 16, ++ FALSE, ++ 6, ++ complain_overflow_bitfield, ++ bfd_elf_generic_reloc, ++ "R_NIOS2_TLS_LDM16", ++ FALSE, ++ 0x003fffc0, ++ 0x003fffc0, ++ FALSE), ++ ++ HOWTO (R_NIOS2_TLS_LDO16, ++ 0, ++ 2, ++ 16, ++ FALSE, ++ 6, ++ complain_overflow_bitfield, ++ bfd_elf_generic_reloc, ++ "R_NIOS2_TLS_LDO16", ++ FALSE, ++ 0x003fffc0, ++ 0x003fffc0, ++ FALSE), ++ ++ HOWTO (R_NIOS2_TLS_IE16, ++ 0, ++ 2, ++ 16, ++ FALSE, ++ 6, ++ complain_overflow_bitfield, ++ bfd_elf_generic_reloc, ++ "R_NIOS2_TLS_IE16", ++ FALSE, ++ 0x003fffc0, ++ 0x003fffc0, ++ FALSE), ++ ++ HOWTO (R_NIOS2_TLS_LE16, ++ 0, ++ 2, ++ 16, ++ FALSE, ++ 6, ++ complain_overflow_bitfield, ++ bfd_elf_generic_reloc, ++ "R_NIOS2_TLS_LE16", ++ FALSE, ++ 0x003fffc0, ++ 0x003fffc0, ++ FALSE), ++ ++ HOWTO (R_NIOS2_TLS_DTPMOD, ++ 0, ++ 2, ++ 32, ++ FALSE, ++ 0, ++ complain_overflow_dont, ++ bfd_elf_generic_reloc, ++ "R_NIOS2_TLS_DTPMOD", ++ FALSE, ++ 0xffffffff, ++ 0xffffffff, ++ FALSE), ++ ++ HOWTO (R_NIOS2_TLS_DTPREL, ++ 0, ++ 2, ++ 32, ++ FALSE, ++ 0, ++ complain_overflow_dont, ++ bfd_elf_generic_reloc, ++ "R_NIOS2_TLS_DTPREL", ++ FALSE, ++ 0xffffffff, ++ 0xffffffff, ++ FALSE), ++ ++ HOWTO (R_NIOS2_TLS_TPREL, ++ 0, ++ 2, ++ 32, ++ FALSE, ++ 0, ++ complain_overflow_dont, ++ bfd_elf_generic_reloc, ++ "R_NIOS2_TLS_TPREL", ++ FALSE, ++ 0xffffffff, ++ 0xffffffff, ++ FALSE), ++ ++ HOWTO (R_NIOS2_COPY, ++ 0, ++ 2, ++ 32, ++ FALSE, ++ 0, ++ complain_overflow_dont, ++ bfd_elf_generic_reloc, ++ "R_NIOS2_COPY", ++ FALSE, ++ 0, ++ 0, ++ FALSE), ++ ++ HOWTO (R_NIOS2_GLOB_DAT, ++ 0, ++ 2, ++ 32, ++ FALSE, ++ 0, ++ complain_overflow_dont, ++ bfd_elf_generic_reloc, ++ "R_NIOS2_GLOB_DAT", ++ FALSE, ++ 0xffffffff, ++ 0xffffffff, ++ FALSE), ++ ++ HOWTO (R_NIOS2_JUMP_SLOT, ++ 0, ++ 2, ++ 32, ++ FALSE, ++ 0, ++ complain_overflow_dont, ++ bfd_elf_generic_reloc, ++ "R_NIOS2_JUMP_SLOT", ++ FALSE, ++ 0xffffffff, ++ 0xffffffff, ++ FALSE), ++ ++ HOWTO (R_NIOS2_RELATIVE, ++ 0, ++ 2, ++ 32, ++ FALSE, ++ 0, ++ complain_overflow_dont, ++ bfd_elf_generic_reloc, ++ "R_NIOS2_RELATIVE", ++ FALSE, ++ 0xffffffff, ++ 0xffffffff, ++ FALSE), ++ ++ HOWTO (R_NIOS2_GOTOFF, ++ 0, ++ 2, ++ 32, ++ FALSE, ++ 0, ++ complain_overflow_dont, ++ bfd_elf_generic_reloc, ++ "R_NIOS2_GOTOFF", ++ FALSE, ++ 0xffffffff, ++ 0xffffffff, ++ FALSE), ++ ++/* Add other relocations here. */ ++}; ++ ++static unsigned char elf_code_to_howto_index[R_NIOS2_ILLEGAL + 1]; ++ ++static reloc_howto_type * ++lookup_howto (unsigned int rtype) ++{ ++ static int initialized = 0; ++ int i; ++ int howto_tbl_size = (int) (sizeof (elf_nios2_howto_table_rel) ++ / sizeof (elf_nios2_howto_table_rel[0])); ++ ++ if (!initialized) ++ { ++ initialized = 1; ++ memset (elf_code_to_howto_index, 0xff, ++ sizeof (elf_code_to_howto_index)); ++ for (i = 0; i < howto_tbl_size; i++) ++ elf_code_to_howto_index[elf_nios2_howto_table_rel[i].type] = i; ++ } ++ ++ BFD_ASSERT (rtype <= R_NIOS2_ILLEGAL); ++ i = elf_code_to_howto_index[rtype]; ++ if (i >= howto_tbl_size) ++ return 0; ++ return elf_nios2_howto_table_rel + i; ++} ++ ++/* Map for converting BFD reloc types to New Jersey reloc types. */ ++struct elf_reloc_map ++{ ++ bfd_reloc_code_real_type bfd_val; ++ enum elf_nios2_reloc_type elf_val; ++}; ++ ++static const struct elf_reloc_map nios2_reloc_map[] = { ++ {BFD_RELOC_NIOS2_S16, R_NIOS2_S16}, ++ {BFD_RELOC_NIOS2_U16, R_NIOS2_U16}, ++ {BFD_RELOC_16_PCREL, R_NIOS2_PCREL16}, ++ {BFD_RELOC_NIOS2_CALL26, R_NIOS2_CALL26}, ++ {BFD_RELOC_NIOS2_IMM5, R_NIOS2_IMM5}, ++ {BFD_RELOC_NIOS2_CACHE_OPX, R_NIOS2_CACHE_OPX}, ++ {BFD_RELOC_NIOS2_IMM6, R_NIOS2_IMM6}, ++ {BFD_RELOC_NIOS2_IMM8, R_NIOS2_IMM8}, ++ {BFD_RELOC_NIOS2_HI16, R_NIOS2_HI16}, ++ {BFD_RELOC_NIOS2_LO16, R_NIOS2_LO16}, ++ {BFD_RELOC_NIOS2_HIADJ16, R_NIOS2_HIADJ16}, ++ {BFD_RELOC_32, R_NIOS2_BFD_RELOC_32}, ++ {BFD_RELOC_16, R_NIOS2_BFD_RELOC_16}, ++ {BFD_RELOC_8, R_NIOS2_BFD_RELOC_8}, ++ {BFD_RELOC_NIOS2_GPREL, R_NIOS2_GPREL}, ++ {BFD_RELOC_VTABLE_INHERIT, R_NIOS2_GNU_VTINHERIT}, ++ {BFD_RELOC_VTABLE_ENTRY, R_NIOS2_GNU_VTENTRY}, ++ {BFD_RELOC_NIOS2_UJMP, R_NIOS2_UJMP}, ++ {BFD_RELOC_NIOS2_CJMP, R_NIOS2_CJMP}, ++ {BFD_RELOC_NIOS2_CALLR, R_NIOS2_CALLR}, ++ {BFD_RELOC_NIOS2_ALIGN, R_NIOS2_ALIGN}, ++ {BFD_RELOC_NIOS2_GOT16, R_NIOS2_GOT16}, ++ {BFD_RELOC_NIOS2_CALL16, R_NIOS2_CALL16}, ++ {BFD_RELOC_NIOS2_GOTOFF_LO, R_NIOS2_GOTOFF_LO}, ++ {BFD_RELOC_NIOS2_GOTOFF_HA, R_NIOS2_GOTOFF_HA}, ++ {BFD_RELOC_NIOS2_PCREL_LO, R_NIOS2_PCREL_LO}, ++ {BFD_RELOC_NIOS2_PCREL_HA, R_NIOS2_PCREL_HA}, ++ {BFD_RELOC_NIOS2_TLS_GD16, R_NIOS2_TLS_GD16}, ++ {BFD_RELOC_NIOS2_TLS_LDM16, R_NIOS2_TLS_LDM16}, ++ {BFD_RELOC_NIOS2_TLS_LDO16, R_NIOS2_TLS_LDO16}, ++ {BFD_RELOC_NIOS2_TLS_IE16, R_NIOS2_TLS_IE16}, ++ {BFD_RELOC_NIOS2_TLS_LE16, R_NIOS2_TLS_LE16}, ++ {BFD_RELOC_NIOS2_TLS_DTPMOD, R_NIOS2_TLS_DTPMOD}, ++ {BFD_RELOC_NIOS2_TLS_DTPREL, R_NIOS2_TLS_DTPREL}, ++ {BFD_RELOC_NIOS2_TLS_TPREL, R_NIOS2_TLS_TPREL}, ++ {BFD_RELOC_NIOS2_COPY, R_NIOS2_COPY}, ++ {BFD_RELOC_NIOS2_GLOB_DAT, R_NIOS2_GLOB_DAT}, ++ {BFD_RELOC_NIOS2_JUMP_SLOT, R_NIOS2_JUMP_SLOT}, ++ {BFD_RELOC_NIOS2_RELATIVE, R_NIOS2_RELATIVE}, ++ {BFD_RELOC_NIOS2_GOTOFF, R_NIOS2_GOTOFF} ++}; ++ ++/* The Nios II linker needs to keep track of the number of relocs that it ++ decides to copy as dynamic relocs in check_relocs for each symbol. ++ This is so that it can later discard them if they are found to be ++ unnecessary. We store the information in a field extending the ++ regular ELF linker hash table. */ ++ ++struct elf32_nios2_dyn_relocs ++{ ++ struct elf32_nios2_dyn_relocs *next; ++ ++ /* The input section of the reloc. */ ++ asection *sec; ++ ++ /* Total number of relocs copied for the input section. */ ++ bfd_size_type count; ++ ++ /* Number of pc-relative relocs copied for the input section. */ ++ bfd_size_type pc_count; ++}; ++ ++/* Nios II ELF linker hash entry. */ ++ ++struct elf32_nios2_link_hash_entry ++{ ++ struct elf_link_hash_entry root; ++ ++ /* Track dynamic relocs copied for this symbol. */ ++ struct elf32_nios2_dyn_relocs *dyn_relocs; ++ ++#define GOT_UNKNOWN 0 ++#define GOT_NORMAL 1 ++#define GOT_TLS_GD 2 ++#define GOT_TLS_IE 4 ++ unsigned char tls_type; ++ ++ /* We need to detect and take special action for symbols which are only ++ referenced with %call() and not with %got(). Such symbols do not need ++ a dynamic GOT reloc in shared objects, only a dynamic PLT reloc. Lazy ++ linking will not work if the dynamic GOT reloc exists. ++ To check for this condition efficiently, we compare got_types_used against ++ CALL16_USED, meaning ++ (got_types_used & (GOT16_USED | CALL16_USED)) == CALL16_USED. */ ++#define GOT16_USED 1 ++#define CALL16_USED 2 ++ unsigned char got_types_used; ++}; ++ ++#define elf32_nios2_hash_entry(ent) \ ++ ((struct elf32_nios2_link_hash_entry *) (ent)) ++ ++/* Get the Nios II elf linker hash table from a link_info structure. */ ++#define elf32_nios2_hash_table(info) \ ++ ((struct elf32_nios2_link_hash_table *) ((info)->hash)) ++ ++/* Nios II ELF linker hash table. */ ++struct elf32_nios2_link_hash_table ++ { ++ /* The main hash table. */ ++ struct elf_link_hash_table root; ++ ++ /* Short-cuts to get to dynamic linker sections. */ ++ asection *sgot; ++ asection *sgotplt; ++ asection *srelgot; ++ asection *splt; ++ asection *srelplt; ++ asection *sdynbss; ++ asection *srelbss; ++ asection *sbss; ++ ++ union { ++ bfd_signed_vma refcount; ++ bfd_vma offset; ++ } tls_ldm_got; ++ ++ /* Small local sym to section mapping cache. */ ++ struct sym_sec_cache sym_sec; ++ ++ bfd_vma res_n_size; ++ }; ++ ++struct nios2_elf32_obj_tdata ++{ ++ struct elf_obj_tdata root; ++ ++ /* tls_type for each local got entry. */ ++ char *local_got_tls_type; ++ ++ /* TRUE if TLS GD relocs have been seen for this object. */ ++ bfd_boolean has_tlsgd; ++}; ++ ++#define elf32_nios2_tdata(abfd) \ ++ ((struct nios2_elf32_obj_tdata *) (abfd)->tdata.any) ++ ++#define elf32_nios2_local_got_tls_type(abfd) \ ++ (elf32_nios2_tdata (abfd)->local_got_tls_type) ++ ++/* The name of the dynamic interpreter. This is put in the .interp ++ section. */ ++ ++#define ELF_DYNAMIC_INTERPRETER "/lib/ld.so.1" ++ ++/* PLT implementation for position-dependent code. */ ++ ++static const bfd_vma nios2_plt_entry[] = { /* .PLTn: */ ++ 0x03c00034, /* movhi r15, %hiadj(plt_got_slot_address) */ ++ 0x7bc00017, /* ldw r15, %lo(plt_got_slot_address)(r15) */ ++ 0x7800683a /* jmp r15 */ ++}; ++ ++static const bfd_vma nios2_plt0_entry[] = { /* .PLTresolve */ ++ 0x03800034, /* movhi r14, %hiadj(res_0) */ ++ 0x73800004, /* addi r14, r14, %lo(res_0) */ ++ 0x7b9fc83a, /* sub r15, r15, r14 */ ++ 0x03400034, /* movhi r13, %hiadj(_GLOBAL_OFFSET_TABLE_) */ ++ 0x6b800017, /* ldw r14, %lo(_GLOBAL_OFFSET_TABLE_+4)(r13) */ ++ 0x6b400017, /* ldw r13, %lo(_GLOBAL_OFFSET_TABLE_+8)(r13) */ ++ 0x6800683a /* jmp r13 */ ++}; ++ ++/* PLT implementation for position-independent code. */ ++ ++static const bfd_vma nios2_so_plt_entry[] = { /* .PLTn */ ++ 0x03c00034, /* movhi r15, %hiadj(index * 4) */ ++ 0x7bc00004, /* addi r15, r15, %lo(index * 4) */ ++ 0x00000006 /* br .PLTresolve */ ++}; ++ ++static const bfd_vma nios2_so_plt0_entry[] = { /* .PLTresolve */ ++ 0x001ce03a, /* nextpc r14 */ ++ 0x03400034, /* movhi r13, %hiadj(_GLOBAL_OFFSET_TABLE_) */ ++ 0x6b9b883a, /* add r13, r13, r14 */ ++ 0x6b800017, /* ldw r14, %lo(_GLOBAL_OFFSET_TABLE_+4)(r13) */ ++ 0x6b400017, /* ldw r13, %lo(_GLOBAL_OFFSET_TABLE_+8)(r13) */ ++ 0x6800683a /* jmp r13 */ ++}; ++ ++/* Support for core dump NOTE sections */ ++static bfd_boolean ++nios2_grok_prstatus (bfd *abfd, Elf_Internal_Note *note) ++{ ++ int offset; ++ size_t size; ++ ++ switch (note->descsz) ++ { ++ default: ++ return FALSE; ++ ++ case 212: /* Linux/Nios II */ ++ /* pr_cursig */ ++ elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12); ++ ++ /* pr_pid */ ++ elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 24); ++ ++ /* pr_reg */ ++ offset = 72; ++ size = 136; ++ ++ break; ++ } ++ ++ /* Make a ".reg/999" section. */ ++ return _bfd_elfcore_make_pseudosection (abfd, ".reg", ++ size, note->descpos + offset); ++} ++ ++static bfd_boolean ++nios2_grok_psinfo (bfd *abfd, Elf_Internal_Note *note) ++{ ++ switch (note->descsz) ++ { ++ default: ++ return FALSE; ++ ++ case 124: /* Linux/Nios II elf_prpsinfo */ ++ elf_tdata (abfd)->core_program ++ = _bfd_elfcore_strndup (abfd, note->descdata + 28, 16); ++ elf_tdata (abfd)->core_command ++ = _bfd_elfcore_strndup (abfd, note->descdata + 44, 80); ++ } ++ ++ /* Note that for some reason, a spurious space is tacked ++ onto the end of the args in some (at least one anyway) ++ implementations, so strip it off if it exists. */ ++ ++ { ++ char *command = elf_tdata (abfd)->core_command; ++ int n = strlen (command); ++ ++ if (0 < n && command[n - 1] == ' ') ++ command[n - 1] = '\0'; ++ } ++ ++ return TRUE; ++} ++ ++/* Create an entry in a Nios II ELF linker hash table. */ ++ ++static struct bfd_hash_entry * ++link_hash_newfunc (struct bfd_hash_entry *entry, ++ struct bfd_hash_table *table, const char *string) ++{ ++ /* Allocate the structure if it has not already been allocated by a ++ subclass. */ ++ if (entry == NULL) ++ { ++ entry = bfd_hash_allocate (table, ++ sizeof (struct elf32_nios2_link_hash_entry)); ++ if (entry == NULL) ++ return entry; ++ } ++ ++ /* Call the allocation method of the superclass. */ ++ entry = _bfd_elf_link_hash_newfunc (entry, table, string); ++ if (entry != NULL) ++ { ++ struct elf32_nios2_link_hash_entry *eh; ++ ++ eh = (struct elf32_nios2_link_hash_entry *) entry; ++ eh->dyn_relocs = NULL; ++ eh->tls_type = GOT_UNKNOWN; ++ eh->got_types_used = 0; ++ } ++ ++ return entry; ++} ++ ++/* Given a BFD reloc type, return a howto structure. */ ++ ++static reloc_howto_type * ++nios2_elf32_bfd_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED, ++ bfd_reloc_code_real_type code) ++{ ++ int i; ++ for (i = 0; ++ i < (int) (sizeof (nios2_reloc_map) / sizeof (struct elf_reloc_map)); ++ ++i) ++ { ++ if (nios2_reloc_map[i].bfd_val == code) ++ return &elf_nios2_howto_table_rel[(int) nios2_reloc_map[i].elf_val]; ++ } ++ ++ return NULL; ++} ++ ++/* Given a reloc name, return a howto structure. */ ++ ++static reloc_howto_type * ++nios2_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, ++ const char *r_name) ++{ ++ unsigned int i; ++ for (i = 0; ++ i < (sizeof (elf_nios2_howto_table_rel) ++ / sizeof (elf_nios2_howto_table_rel[0])); ++ i++) ++ if (elf_nios2_howto_table_rel[i].name != NULL ++ && strcasecmp (elf_nios2_howto_table_rel[i].name, r_name) == 0) ++ return &elf_nios2_howto_table_rel[i]; ++ ++ return NULL; ++} ++ ++/* Helper function for nios2_elf32_info_to_howto. */ ++ ++static reloc_howto_type * ++nios2_elf32_rtype_to_howto (unsigned int r_type, ++ bfd_boolean rela_p ATTRIBUTE_UNUSED) ++{ ++ BFD_ASSERT (r_type < R_NIOS2_ILLEGAL); ++ return &elf_nios2_howto_table_rel[r_type]; ++} ++ ++/* Given a ELF32 relocation, fill in a arelent structure. */ ++ ++static void ++nios2_elf32_info_to_howto (bfd * abfd ATTRIBUTE_UNUSED, arelent * cache_ptr, ++ Elf_Internal_Rela * dst) ++{ ++ unsigned int r_type; ++ ++ r_type = ELF32_R_TYPE (dst->r_info); ++ cache_ptr->howto = nios2_elf32_rtype_to_howto (r_type, FALSE); ++ ++ /* FIXME - do we need to do anything else here??? */ ++} ++ ++/* Return the base VMA address which should be subtracted from real addresses ++ when resolving @dtpoff relocation. ++ This is PT_TLS segment p_vaddr. */ ++ ++static bfd_vma ++dtpoff_base (struct bfd_link_info *info) ++{ ++ /* If tls_sec is NULL, we should have signalled an error already. */ ++ if (elf_hash_table (info)->tls_sec == NULL) ++ return 0; ++ return elf_hash_table (info)->tls_sec->vma; ++} ++ ++/* Return the relocation value for @tpoff relocation ++ if STT_TLS virtual address is ADDRESS. */ ++ ++static bfd_vma ++tpoff (struct bfd_link_info *info, bfd_vma address) ++{ ++ struct elf_link_hash_table *htab = elf_hash_table (info); ++ ++ /* If tls_sec is NULL, we should have signalled an error already. */ ++ if (htab->tls_sec == NULL) ++ return 0; ++ return address - htab->tls_sec->vma; ++} ++ ++/* The assembler has output long jmp/call sequences for all calls ++ and pc-relative branches that it cannot guarantee are within ++ range, so the linker must attempt to "relax" these sequences to ++ short branches and calls if it can. We avoid having to re-relax by ++ replacing redundant instructions with nops instead of deleting them. */ ++static bfd_boolean ++nios2_elf32_relax_section (bfd * abfd, ++ asection * sec, ++ struct bfd_link_info *link_info, bfd_boolean * again) ++{ ++ Elf_Internal_Shdr *symtab_hdr; ++ Elf_Internal_Rela *internal_relocs; ++ Elf_Internal_Rela *irel, *irelend; ++ bfd_byte *contents = NULL; ++ Elf_Internal_Sym *isymbuf = NULL; ++ ++#define OP_MATCH_NOP 0x0001883a ++ ++ /* Assume nothing changes. */ ++ *again = FALSE; ++ ++ /* We don't have to do anything for a relocatable link, if ++ this section does not have relocs, or if this is not a ++ code section. */ ++ if (link_info->relocatable ++ || (sec->flags & SEC_RELOC) == 0 ++ || sec->reloc_count == 0 || (sec->flags & SEC_CODE) == 0) ++ return TRUE; ++ ++ /* If this is the first time we have been called for this section, ++ initialize the cooked size. */ ++ if (sec->size == 0) ++ sec->size = sec->rawsize; ++ ++ symtab_hdr = &elf_tdata (abfd)->symtab_hdr; ++ ++ /* Get a copy of the native relocations. */ ++ internal_relocs = (_bfd_elf_link_read_relocs ++ (abfd, sec, (void *) NULL, (Elf_Internal_Rela *) NULL, ++ link_info->keep_memory)); ++ if (internal_relocs == NULL) ++ goto error_return; ++ ++ /* Walk through them looking for relaxing opportunities. */ ++ irelend = internal_relocs + sec->reloc_count; ++ for (irel = internal_relocs; irel < irelend; irel++) ++ { ++ bfd_vma symval; ++ ++ /* If this isn't something that can be relaxed, then ignore ++ this reloc. */ ++ if (ELF32_R_TYPE (irel->r_info) != (int) R_NIOS2_UJMP ++ && ELF32_R_TYPE (irel->r_info) != (int) R_NIOS2_CJMP ++ && ELF32_R_TYPE (irel->r_info) != (int) R_NIOS2_CALLR) ++ { ++ continue; ++ } ++ ++ /* Get the section contents if we haven't done so already. */ ++ if (contents == NULL) ++ { ++ /* Get cached copy if it exists. */ ++ if (elf_section_data (sec)->this_hdr.contents != NULL) ++ contents = elf_section_data (sec)->this_hdr.contents; ++ else ++ { ++ /* Go get them off disk. */ ++ contents = (bfd_byte *) bfd_malloc (sec->rawsize); ++ if (contents == NULL) ++ goto error_return; ++ ++ if (!bfd_get_section_contents (abfd, sec, contents, ++ (file_ptr) 0, sec->rawsize)) ++ goto error_return; ++ } ++ } ++ ++ /* Read this BFD's local symbols if we haven't done so already. */ ++ if (isymbuf == NULL && symtab_hdr->sh_info != 0) ++ { ++ isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents; ++ if (isymbuf == NULL) ++ isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr, ++ symtab_hdr->sh_info, 0, ++ NULL, NULL, NULL); ++ if (isymbuf == NULL) ++ goto error_return; ++ } ++ ++ /* Get the value of the symbol referred to by the reloc. */ ++ if (ELF32_R_SYM (irel->r_info) < symtab_hdr->sh_info) ++ { ++ /* A local symbol. */ ++ Elf_Internal_Sym *isym; ++ asection *sym_sec; ++ ++ isym = isymbuf + ELF32_R_SYM (irel->r_info); ++ if (isym->st_shndx == SHN_UNDEF) ++ sym_sec = bfd_und_section_ptr; ++ else if (isym->st_shndx == SHN_ABS) ++ sym_sec = bfd_abs_section_ptr; ++ else if (isym->st_shndx == SHN_COMMON) ++ sym_sec = bfd_com_section_ptr; ++ else ++ sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx); ++ symval = (isym->st_value ++ + sym_sec->output_section->vma + sym_sec->output_offset); ++ } ++ else ++ { ++ unsigned long indx; ++ struct elf_link_hash_entry *h; ++ ++ /* An external symbol. */ ++ indx = ELF32_R_SYM (irel->r_info) - symtab_hdr->sh_info; ++ h = elf_sym_hashes (abfd)[indx]; ++ BFD_ASSERT (h != NULL); ++ if (h->root.type != bfd_link_hash_defined ++ && h->root.type != bfd_link_hash_defweak) ++ { ++ /* This appears to be a reference to an undefined ++ symbol. Just ignore it--it will be caught by the ++ regular reloc processing. */ ++ continue; ++ } ++ ++ symval = (h->root.u.def.value ++ + h->root.u.def.section->output_section->vma ++ + h->root.u.def.section->output_offset); ++ } ++ ++ /* For simplicity of coding, we are going to modify the section ++ contents, the section relocs, and the BFD symbol table. We ++ must tell the rest of the code not to free up this ++ information. It would be possible to instead create a table ++ of changes which have to be made, as is done in coff-mips.c; ++ that would be more work, but would require less memory when ++ the linker is run. */ ++ ++ /* try to turn : ++ * movhi at, %hi(symbol) ++ * movui at, %lo(symbol) ++ * callr at ++ * into: ++ * call symbol ++ */ ++ if (ELF32_R_TYPE (irel->r_info) == (int) R_NIOS2_CALLR) ++ { ++ bfd_vma targ_addr = symval + irel->r_addend; ++ bfd_vma curr_addr = (sec->output_section->vma + sec->output_offset); ++ bfd_vma targ_page, curr_page; ++ targ_page = targ_addr & 0xf0000000; ++ curr_page = curr_addr & 0xf0000000; ++ ++ if (targ_page == curr_page) ++ { ++ /* change the opcode to a call */ ++ bfd_put_32 (abfd, OP_MATCH_CALL, contents + irel->r_offset); ++ /* Note that we've changed the relocs, section contents, etc. */ ++ elf_section_data (sec)->relocs = internal_relocs; ++ elf_section_data (sec)->this_hdr.contents = contents; ++ symtab_hdr->contents = (unsigned char *) isymbuf; ++ ++ /* Fix the relocation's type. */ ++ irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info), ++ R_NIOS2_CALL26); ++ ++ /* replace next two instructions with nops */ ++ bfd_put_32 (abfd, OP_MATCH_NOP, contents + irel->r_offset + 4); ++ bfd_put_32 (abfd, OP_MATCH_NOP, contents + irel->r_offset + 8); ++ } ++ } ++ ++ /* try to turn : ++ * movhi at, %hi(symbol) ++ * movui at, %lo(symbol) ++ * jmp at ++ * into: ++ * br symbol ++ */ ++ if (ELF32_R_TYPE (irel->r_info) == (int) R_NIOS2_UJMP) ++ { ++ bfd_vma pcrel_offset; ++ Elf_Internal_Rela *irelalign = NULL; ++ Elf_Internal_Rela *irela = elf_section_data (sec)->relocs; ++ Elf_Internal_Rela *irelend = irel + sec->reloc_count; ++ ++ for (; irela < irelend; irela++) ++ { ++ if (ELF32_R_TYPE (irela->r_info) == (int) R_NIOS2_ALIGN ++ && irela->r_offset > irel->r_offset + 4 ++ && 8 < (1 << irela->r_addend)) ++ { ++ irelalign = irela; ++ break; ++ } ++ } ++ ++ /* calculate the pcrelative offset from current location */ ++ pcrel_offset = symval; ++ pcrel_offset -= (sec->output_section->vma + sec->output_offset); ++ pcrel_offset += irel->r_addend; ++ ++ /* we need to compute the pcrel_offset from the next instruction */ ++ pcrel_offset -= (irel->r_offset + 4); ++ ++ /* does this value fit in 16 bits */ ++ if ((irelalign == NULL && (long) pcrel_offset <= 0x8004 ++ && (long) pcrel_offset >= -0x8000) || (irelalign != NULL ++ && (long) pcrel_offset ++ <= 0x7ffc ++ && (long) pcrel_offset ++ >= -0x8000)) ++ { ++ /* change the opcode to an unconditional branch */ ++ bfd_put_32 (abfd, OP_MATCH_BR, contents + irel->r_offset); ++ /* Note that we've changed the relocs, section contents, etc. */ ++ elf_section_data (sec)->relocs = internal_relocs; ++ elf_section_data (sec)->this_hdr.contents = contents; ++ symtab_hdr->contents = (unsigned char *) isymbuf; ++ ++ /* Fix the relocation's type. */ ++ irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info), ++ R_NIOS2_PCREL16); ++ ++ /* replace next two instructions with nops */ ++ bfd_put_32 (abfd, OP_MATCH_NOP, contents + irel->r_offset + 4); ++ bfd_put_32 (abfd, OP_MATCH_NOP, contents + irel->r_offset + 8); ++ } ++ } ++ ++ /* try to turn : ++ * b{cond} a, b skip ++ * movhi at, %hi(symbol) ++ * movui at, %lo(symbol) ++ * jmp at ++ * skip: ++ * ... ++ * into: ++ * br{opp_cond} a, b, symbol ++ */ ++ if (ELF32_R_TYPE (irel->r_info) == (int) R_NIOS2_CJMP) ++ { ++ bfd_vma pcrel_offset; ++ Elf_Internal_Rela *irelalign = NULL; ++ Elf_Internal_Rela *irela = elf_section_data (sec)->relocs; ++ Elf_Internal_Rela *irelend = irel + sec->reloc_count; ++ ++ for (; irela < irelend; irela++) ++ { ++ if (ELF32_R_TYPE (irela->r_info) == (int) R_NIOS2_ALIGN ++ && irela->r_offset > irel->r_offset + 4 ++ && 8 < (1 << irela->r_addend)) ++ { ++ irelalign = irela; ++ break; ++ } ++ } ++ ++ /* calculate the pcrelative offset from current location */ ++ pcrel_offset = symval; ++ pcrel_offset -= (sec->output_section->vma + sec->output_offset); ++ pcrel_offset += irel->r_addend; ++ ++ /* we need to compute the pcrel_offset from this instruction ++ * ie the movhi */ ++ pcrel_offset -= (irel->r_offset); ++ ++ /* does this value fit in 16 bits */ ++ if ((irelalign == NULL && (long) pcrel_offset <= 0x8008 ++ && (long) pcrel_offset >= -0x8000) || (irelalign != NULL ++ && (long) pcrel_offset ++ <= 0x7ffc ++ && (long) pcrel_offset ++ >= -0x8000)) ++ { ++ unsigned long opcode, op_a, op_b; ++ /* get the conditional branch opcode */ ++ opcode = bfd_get_32 (abfd, contents + irel->r_offset - 4); ++ /* reverse the condition */ ++ switch (opcode & OP_MASK_OP) ++ { ++ case OP_MATCH_BEQ: ++ opcode = (opcode & ~OP_MASK_OP) | OP_MATCH_BNE; ++ break; ++ case OP_MATCH_BNE: ++ opcode = (opcode & ~OP_MASK_OP) | OP_MATCH_BEQ; ++ break; ++ case OP_MATCH_BGE: ++ case OP_MATCH_BGEU: ++ case OP_MATCH_BLT: ++ case OP_MATCH_BLTU: ++ /* swap the operands */ ++ op_a = (opcode & OP_MASK_RRT) << 5; ++ op_b = (opcode & OP_MASK_RRS) >> 5; ++ opcode = ++ (opcode & ~(OP_MASK_RRS | OP_MASK_RRT)) | op_a | op_b; ++ break; ++ default: ++ fprintf (stderr, ++ "relaxation error - expecting conditional branch, " ++ "aborting\n"); ++ abort (); ++ break; ++ } ++ ++ /* We must set the branch target to zero so that the skip over ++ the jmp doesn't get added to the jmp. */ ++ opcode = opcode & (~OP_MASK_IMM16); ++ ++ /* Change the opcode to the reversed conditional branch. */ ++ bfd_put_32 (abfd, opcode, contents + irel->r_offset - 4); ++ /* Note that we've changed the relocs, section contents, etc. */ ++ elf_section_data (sec)->relocs = internal_relocs; ++ elf_section_data (sec)->this_hdr.contents = contents; ++ symtab_hdr->contents = (unsigned char *) isymbuf; ++ ++ /* Fix the relocation's type. */ ++ irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info), ++ R_NIOS2_PCREL16); ++ ++ /* This relocation's offset has also been reduced by 4 bytes. */ ++ irel->r_offset -= 4; ++ ++ /* Replace next two instructions with nops. */ ++ bfd_put_32 (abfd, OP_MATCH_NOP, contents + irel->r_offset + 4); ++ bfd_put_32 (abfd, OP_MATCH_NOP, contents + irel->r_offset + 8); ++ bfd_put_32 (abfd, OP_MATCH_NOP, contents + irel->r_offset + 12); ++ } ++ } ++ ++ /* Otherwise, leave alone. */ ++ } ++ ++ if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf) ++ { ++ if (!link_info->keep_memory) ++ free (isymbuf); ++ else ++ { ++ /* Cache the symbols for elf_link_input_bfd. */ ++ symtab_hdr->contents = (unsigned char *) isymbuf; ++ } ++ } ++ ++ if (contents != NULL ++ && elf_section_data (sec)->this_hdr.contents != contents) ++ { ++ if (!link_info->keep_memory) ++ free (contents); ++ else ++ { ++ /* Cache the section contents for elf_link_input_bfd. */ ++ elf_section_data (sec)->this_hdr.contents = contents; ++ } ++ } ++ ++ if (internal_relocs != NULL ++ && elf_section_data (sec)->relocs != internal_relocs) ++ free (internal_relocs); ++ ++ ++ return TRUE; ++ ++error_return: ++ if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf) ++ free (isymbuf); ++ if (contents != NULL ++ && elf_section_data (sec)->this_hdr.contents != contents) ++ free (contents); ++ if (internal_relocs != NULL ++ && elf_section_data (sec)->relocs != internal_relocs) ++ free (internal_relocs); ++ ++ return FALSE; ++} ++#if 0 ++/* Delete some bytes from a section while relaxing. ++ * Copied from mn10200 port */ ++ ++static bfd_boolean ++nios2_elf32_relax_delete_bytes (bfd * abfd, ++ asection * sec, bfd_vma addr, int count) ++{ ++ Elf_Internal_Shdr *symtab_hdr; ++ unsigned int sec_shndx; ++ bfd_byte *contents; ++ Elf_Internal_Rela *irel, *irelend; ++ Elf_Internal_Rela *irelalign; ++ bfd_vma toaddr; ++ Elf_Internal_Sym *isym; ++ Elf_Internal_Sym *isymend; ++ struct elf_link_hash_entry **sym_hashes; ++ struct elf_link_hash_entry **end_hashes; ++ unsigned int symcount; ++ asection *asec; ++ ++ sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec); ++ ++ contents = elf_section_data (sec)->this_hdr.contents; ++ ++ /* The deletion must stop at the next ALIGN reloc for an aligment ++ power larger than the number of bytes we are deleting. */ ++ ++ irelalign = NULL; ++ /* +1 because we need to readjust symbols at end of section */ ++ toaddr = sec->size + 1; ++ ++ irel = elf_section_data (sec)->relocs; ++ irelend = irel + sec->reloc_count; ++ ++ for (; irel < irelend; irel++) ++ { ++ if (ELF32_R_TYPE (irel->r_info) == (int) R_NIOS2_ALIGN ++ && irel->r_offset > addr && count < (1 << irel->r_addend)) ++ { ++ irelalign = irel; ++ /* +1 because we need to readjust symbols at end of section */ ++ toaddr = irel->r_offset + 1; ++ break; ++ } ++ } ++ ++ ++ /* Actually delete the bytes. */ ++ memmove (contents + addr, contents + addr + count, ++ (size_t) ((toaddr - 1) - addr - count)); ++ ++ if (irelalign == NULL) ++ sec->size -= count; ++ else ++ { ++ int i; ++ ++#define NOP_OPCODE (0x0001883a) ++ ++ BFD_ASSERT ((count & 3) == 0); ++ for (i = 0; i < count; i += 4) ++ bfd_put_32 (abfd, (bfd_vma) NOP_OPCODE, ++ contents + (toaddr - 1) - count + i); ++ } ++ ++ /* get the symbol table */ ++ symtab_hdr = &elf_tdata (abfd)->symtab_hdr; ++ isym = (Elf_Internal_Sym *) symtab_hdr->contents; ++ ++ /* Adjust all the reloc offsets in this section. */ ++ for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++) ++ { ++ /* Get the new reloc address. */ ++ if ((irel->r_offset > addr && irel->r_offset < toaddr)) ++ irel->r_offset -= count; ++ } ++ ++ /* Adjust relocations against targets in this section whose positions ++ * have moved as a result of the relaxation */ ++ ++ for (asec = abfd->sections; asec; asec = asec->next) ++ { ++ irelend = elf_section_data (asec)->relocs + asec->reloc_count; ++ for (irel = elf_section_data (asec)->relocs; irel < irelend; irel++) ++ { ++ Elf_Internal_Sym *sym; ++ /* if the symbol which this reloc is against doesn't change ++ * we need to change the reloc addend */ ++ ++ sym = isym + ELF32_R_SYM (irel->r_info); ++ if (sym->st_shndx == sec_shndx ++ && !(sym->st_value > addr && sym->st_value < toaddr) ++ && sym->st_value + irel->r_addend > addr ++ && sym->st_value + irel->r_addend < toaddr) ++ { ++ irel->r_addend -= count; ++ } ++ ++ } ++ } ++ ++ /* Adjust the local symbols defined in this section. */ ++ for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++) ++ { ++ if (isym->st_shndx == sec_shndx ++ && isym->st_value > addr && isym->st_value < toaddr) ++ isym->st_value -= count; ++ ++ ++ } ++ ++ /* Now adjust the global symbols defined in this section. */ ++ symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym) ++ - symtab_hdr->sh_info); ++ sym_hashes = elf_sym_hashes (abfd); ++ end_hashes = sym_hashes + symcount; ++ for (; sym_hashes < end_hashes; sym_hashes++) ++ { ++ struct elf_link_hash_entry *sym_hash = *sym_hashes; ++ if ((sym_hash->root.type == bfd_link_hash_defined ++ || sym_hash->root.type == bfd_link_hash_defweak) ++ && sym_hash->root.u.def.section == sec ++ && sym_hash->root.u.def.value > addr ++ && sym_hash->root.u.def.value < toaddr) ++ { ++ sym_hash->root.u.def.value -= count; ++ } ++ } ++ ++ return TRUE; ++} ++#endif ++struct bfd_link_info *nios2_link_info = NULL; ++ ++void ++_bfd_set_link_info (struct bfd_link_info *info) ++{ ++ nios2_link_info = info; ++} ++ ++bfd_boolean linker_force_make_executable = FALSE; ++ ++void ++_bfd_set_force_make_executable (bfd_boolean force) ++{ ++ linker_force_make_executable = force; ++} ++ ++/* Set the GP value for OUTPUT_BFD. Returns FALSE if this is a ++ dangerous relocation. */ ++ ++static bfd_boolean ++nios2_elf_assign_gp (bfd *output_bfd, bfd_vma *pgp, struct bfd_link_info *info) ++{ ++ ++ bfd_boolean gp_found; ++ struct bfd_hash_entry *h; ++ struct bfd_link_hash_entry *lh; ++ ++ /* If we've already figured out what GP will be, just return it. */ ++ *pgp = _bfd_get_gp_value (output_bfd); ++ if (*pgp) ++ return TRUE; ++ ++ h = bfd_hash_lookup (&info->hash->table, "_gp", FALSE, FALSE); ++ lh = (struct bfd_link_hash_entry *) h; ++lookup: ++ if (lh) ++ { ++ switch (lh->type) ++ { ++ case bfd_link_hash_undefined: ++ case bfd_link_hash_undefweak: ++ case bfd_link_hash_common: ++ gp_found = FALSE; ++ break; ++ case bfd_link_hash_defined: ++ case bfd_link_hash_defweak: ++ gp_found = TRUE; ++ *pgp = lh->u.def.value; ++ break; ++ case bfd_link_hash_indirect: ++ case bfd_link_hash_warning: ++ lh = lh->u.i.link; ++ /* @@FIXME ignoring warning for now */ ++ goto lookup; ++ case bfd_link_hash_new: ++ default: ++ abort (); ++ } ++ } ++ else ++ gp_found = FALSE; ++ ++ if (!gp_found) ++ { ++ /* Only get the error once. */ ++ *pgp = 4; ++ _bfd_set_gp_value (output_bfd, *pgp); ++ return FALSE; ++ } ++ ++ _bfd_set_gp_value (output_bfd, *pgp); ++ ++ return TRUE; ++} ++ ++/* We have to figure out the gp value, so that we can adjust the ++ symbol value correctly. We look up the symbol _gp in the output ++ BFD. If we can't find it, we're stuck. We cache it in the ELF ++ target data. We don't need to adjust the symbol value for an ++ external symbol if we are producing relocatable output. */ ++ ++static bfd_reloc_status_type ++nios2_elf_final_gp (bfd *output_bfd, asymbol *symbol, bfd_boolean relocatable, ++ char **error_message, bfd_vma *pgp, ++ struct bfd_link_info *info) ++{ ++ if (bfd_is_und_section (symbol->section) && !relocatable) ++ { ++ *pgp = 0; ++ return bfd_reloc_undefined; ++ } ++ ++ *pgp = _bfd_get_gp_value (output_bfd); ++ if (*pgp == 0 && (!relocatable || (symbol->flags & BSF_SECTION_SYM) != 0)) ++ { ++ /* if this is called without link_info, then ++ we cannot be doing a final link */ ++ if (info == NULL) ++ relocatable = TRUE; ++ ++ if (relocatable) ++ { ++ /* Make up a value. */ ++ *pgp = symbol->section->output_section->vma + 0x4000; ++ _bfd_set_gp_value (output_bfd, *pgp); ++ } ++ else if (!nios2_elf_assign_gp (output_bfd, pgp, info)) ++ { ++ *error_message = ++ (char *) ++ _("global pointer relative relocation when _gp not defined"); ++ return bfd_reloc_dangerous; ++ } ++ } ++ ++ return bfd_reloc_ok; ++} ++ ++ ++/* Relocations that require special handling */ ++ ++/* This is for relocations used only when relaxing to ensure ++ changes in size of section don't screw up .align. */ ++static bfd_reloc_status_type ++nios2_elf32_ignore_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry, ++ asymbol *symbol ATTRIBUTE_UNUSED, ++ void *data ATTRIBUTE_UNUSED, asection *input_section, ++ bfd *output_bfd, ++ char **error_message ATTRIBUTE_UNUSED) ++{ ++ if (output_bfd != NULL) ++ reloc_entry->address += input_section->output_offset; ++ return bfd_reloc_ok; ++} ++ ++static bfd_reloc_status_type ++nios2_elf32_hi16_relocate (bfd *abfd, arelent *reloc_entry, asymbol *symbol, ++ void *data, asection *input_section, ++ bfd *output_bfd, ++ char **error_message ATTRIBUTE_UNUSED) ++{ ++ /* This part is from bfd_elf_generic_reloc. */ ++ if (output_bfd != (bfd *) NULL ++ && (symbol->flags & BSF_SECTION_SYM) == 0 ++ && (!reloc_entry->howto->partial_inplace || reloc_entry->addend == 0)) ++ { ++ reloc_entry->address += input_section->output_offset; ++ return bfd_reloc_ok; ++ } ++ ++ if (output_bfd != NULL) ++ /* FIXME: See bfd_perform_relocation. Is this right? */ ++ return bfd_reloc_ok; ++ ++ return nios2_elf32_do_hi16_relocate (abfd, reloc_entry->howto, ++ input_section, ++ data, reloc_entry->address, ++ (symbol->value ++ + symbol->section->output_section->vma ++ + symbol->section->output_offset), ++ reloc_entry->addend); ++} ++ ++static bfd_reloc_status_type ++nios2_elf32_lo16_relocate (bfd *abfd, arelent *reloc_entry, asymbol *symbol, ++ void *data, asection *input_section, ++ bfd *output_bfd, ++ char **error_message ATTRIBUTE_UNUSED) ++{ ++/* This part is from bfd_elf_generic_reloc. */ ++ if (output_bfd != (bfd *) NULL ++ && (symbol->flags & BSF_SECTION_SYM) == 0 ++ && (!reloc_entry->howto->partial_inplace || reloc_entry->addend == 0)) ++ { ++ reloc_entry->address += input_section->output_offset; ++ return bfd_reloc_ok; ++ } ++ ++ if (output_bfd != NULL) ++ /* FIXME: See bfd_perform_relocation. Is this right? */ ++ return bfd_reloc_ok; ++ ++ return nios2_elf32_do_lo16_relocate (abfd, reloc_entry->howto, ++ input_section, ++ data, reloc_entry->address, ++ (symbol->value ++ + symbol->section->output_section->vma ++ + symbol->section->output_offset), ++ reloc_entry->addend); ++} ++ ++static bfd_reloc_status_type ++nios2_elf32_hiadj16_relocate (bfd *abfd, arelent *reloc_entry, asymbol *symbol, ++ void *data, asection *input_section, ++ bfd *output_bfd, ++ char **error_message ATTRIBUTE_UNUSED) ++{ ++ /* This part is from bfd_elf_generic_reloc. */ ++ if (output_bfd != (bfd *) NULL ++ && (symbol->flags & BSF_SECTION_SYM) == 0 ++ && (!reloc_entry->howto->partial_inplace || reloc_entry->addend == 0)) ++ { ++ reloc_entry->address += input_section->output_offset; ++ return bfd_reloc_ok; ++ } ++ ++ if (output_bfd != NULL) ++ /* FIXME: See bfd_perform_relocation. Is this right? */ ++ return bfd_reloc_ok; ++ ++ return nios2_elf32_do_hiadj16_relocate (abfd, reloc_entry->howto, ++ input_section, ++ data, reloc_entry->address, ++ (symbol->value ++ + ++ symbol->section->output_section-> ++ vma + ++ symbol->section->output_offset), ++ reloc_entry->addend); ++} ++ ++static bfd_reloc_status_type ++nios2_elf32_pcrel_lo16_relocate (bfd *abfd, arelent *reloc_entry, ++ asymbol *symbol, void *data, ++ asection *input_section, bfd *output_bfd, ++ char **error_message ATTRIBUTE_UNUSED) ++{ ++ /* This part is from bfd_elf_generic_reloc. */ ++ if (output_bfd != (bfd *) NULL ++ && (symbol->flags & BSF_SECTION_SYM) == 0 ++ && (!reloc_entry->howto->partial_inplace || reloc_entry->addend == 0)) ++ { ++ reloc_entry->address += input_section->output_offset; ++ return bfd_reloc_ok; ++ } ++ ++ if (output_bfd != NULL) ++ /* FIXME: See bfd_perform_relocation. Is this right? */ ++ return bfd_reloc_ok; ++ ++ return nios2_elf32_do_pcrel_lo16_relocate ( ++ abfd, reloc_entry->howto, input_section, data, reloc_entry->address, ++ (symbol->value + symbol->section->output_section->vma + ++ symbol->section->output_offset), ++ reloc_entry->addend); ++} ++ ++static bfd_reloc_status_type ++nios2_elf32_pcrel_hiadj16_relocate (bfd *abfd, arelent *reloc_entry, ++ asymbol *symbol, void *data, ++ asection *input_section, bfd *output_bfd, ++ char **error_message ATTRIBUTE_UNUSED) ++{ ++ /* This part is from bfd_elf_generic_reloc. */ ++ if (output_bfd != (bfd *) NULL ++ && (symbol->flags & BSF_SECTION_SYM) == 0 ++ && (!reloc_entry->howto->partial_inplace || reloc_entry->addend == 0)) ++ { ++ reloc_entry->address += input_section->output_offset; ++ return bfd_reloc_ok; ++ } ++ ++ if (output_bfd != NULL) ++ /* FIXME: See bfd_perform_relocation. Is this right? */ ++ return bfd_reloc_ok; ++ ++ return nios2_elf32_do_pcrel_hiadj16_relocate ( ++ abfd, reloc_entry->howto, input_section, data, reloc_entry->address, ++ (symbol->value + symbol->section->output_section->vma + ++ symbol->section->output_offset), ++ reloc_entry->addend); ++} ++ ++static bfd_reloc_status_type ++nios2_elf32_pcrel16_relocate (bfd *abfd, arelent *reloc_entry, asymbol *symbol, ++ void *data, asection *input_section, ++ bfd *output_bfd, ++ char **error_message ATTRIBUTE_UNUSED) ++{ ++ /* This part is from bfd_elf_generic_reloc. */ ++ if (output_bfd != (bfd *) NULL ++ && (symbol->flags & BSF_SECTION_SYM) == 0 ++ && (!reloc_entry->howto->partial_inplace || reloc_entry->addend == 0)) ++ { ++ reloc_entry->address += input_section->output_offset; ++ return bfd_reloc_ok; ++ } ++ ++ if (output_bfd != NULL) ++ /* FIXME: See bfd_perform_relocation. Is this right? */ ++ return bfd_reloc_ok; ++ ++ return nios2_elf32_do_pcrel16_relocate (abfd, reloc_entry->howto, ++ input_section, ++ data, reloc_entry->address, ++ (symbol->value ++ + ++ symbol->section->output_section-> ++ vma + ++ symbol->section->output_offset), ++ reloc_entry->addend); ++} ++ ++static bfd_reloc_status_type ++nios2_elf32_call26_relocate (bfd *abfd, arelent *reloc_entry, asymbol *symbol, ++ void *data, asection *input_section, ++ bfd *output_bfd, ++ char **error_message ATTRIBUTE_UNUSED) ++{ ++ /* This part is from bfd_elf_generic_reloc. */ ++ if (output_bfd != (bfd *) NULL ++ && (symbol->flags & BSF_SECTION_SYM) == 0 ++ && (!reloc_entry->howto->partial_inplace || reloc_entry->addend == 0)) ++ { ++ reloc_entry->address += input_section->output_offset; ++ return bfd_reloc_ok; ++ } ++ ++ if (output_bfd != NULL) ++ /* FIXME: See bfd_perform_relocation. Is this right? */ ++ return bfd_reloc_ok; ++ ++ return nios2_elf32_do_call26_relocate (abfd, reloc_entry->howto, ++ input_section, ++ data, reloc_entry->address, ++ (symbol->value ++ + ++ symbol->section->output_section-> ++ vma + ++ symbol->section->output_offset), ++ reloc_entry->addend); ++} ++ ++static bfd_reloc_status_type ++nios2_elf32_gprel_relocate (bfd *abfd, arelent *reloc_entry, asymbol *symbol, ++ void *data, asection *input_section, ++ bfd *output_bfd, char **msg) ++{ ++ bfd_vma relocation; ++ bfd_vma gp; ++ bfd_reloc_status_type r; ++ ++ ++ /* This part is from bfd_elf_generic_reloc. */ ++ if (output_bfd != (bfd *) NULL ++ && (symbol->flags & BSF_SECTION_SYM) == 0 ++ && (!reloc_entry->howto->partial_inplace || reloc_entry->addend == 0)) ++ { ++ reloc_entry->address += input_section->output_offset; ++ return bfd_reloc_ok; ++ } ++ ++ if (output_bfd != NULL) ++ /* FIXME: See bfd_perform_relocation. Is this right? */ ++ return bfd_reloc_ok; ++ ++ relocation = symbol->value ++ + symbol->section->output_section->vma + symbol->section->output_offset; ++ ++ if ((r = ++ nios2_elf_final_gp (abfd, symbol, FALSE, msg, &gp, ++ nios2_link_info)) == bfd_reloc_ok) ++ { ++ relocation = relocation + reloc_entry->addend - gp; ++ reloc_entry->addend = 0; ++ if ((signed) relocation < -32768 || (signed) relocation > 32767) ++ { ++ *msg = _("global pointer relative address out of range"); ++ r = bfd_reloc_outofrange; ++ } ++ else ++ { ++ r = nios2_elf32_do_gprel_relocate (abfd, reloc_entry->howto, ++ input_section, ++ data, reloc_entry->address, ++ relocation, reloc_entry->addend); ++ } ++ } ++ ++ return r; ++} ++ ++static bfd_reloc_status_type ++nios2_elf32_ujmp_relocate (bfd *abfd, arelent *reloc_entry, asymbol *symbol, ++ void *data, asection *input_section, ++ bfd *output_bfd, char **msg ATTRIBUTE_UNUSED) ++{ ++ /* This part is from bfd_elf_generic_reloc. */ ++ if (output_bfd != (bfd *) NULL ++ && (symbol->flags & BSF_SECTION_SYM) == 0 ++ && (!reloc_entry->howto->partial_inplace || reloc_entry->addend == 0)) ++ { ++ reloc_entry->address += input_section->output_offset; ++ return bfd_reloc_ok; ++ } ++ ++ if (output_bfd != NULL) ++ /* FIXME: See bfd_perform_relocation. Is this right? */ ++ return bfd_reloc_ok; ++ ++ return nios2_elf32_do_ujmp_relocate (abfd, reloc_entry->howto, ++ input_section, ++ data, reloc_entry->address, ++ (symbol->value ++ + symbol->section->output_section->vma ++ + symbol->section->output_offset), ++ reloc_entry->addend); ++} ++ ++static bfd_reloc_status_type ++nios2_elf32_cjmp_relocate (bfd *abfd, arelent *reloc_entry, asymbol *symbol, ++ void *data, asection *input_section, ++ bfd *output_bfd, char **msg ATTRIBUTE_UNUSED) ++{ ++ /* This part is from bfd_elf_generic_reloc. */ ++ if (output_bfd != (bfd *) NULL ++ && (symbol->flags & BSF_SECTION_SYM) == 0 ++ && (!reloc_entry->howto->partial_inplace || reloc_entry->addend == 0)) ++ { ++ reloc_entry->address += input_section->output_offset; ++ return bfd_reloc_ok; ++ } ++ ++ if (output_bfd != NULL) ++ /* FIXME: See bfd_perform_relocation. Is this right? */ ++ return bfd_reloc_ok; ++ ++ return nios2_elf32_do_cjmp_relocate (abfd, reloc_entry->howto, ++ input_section, ++ data, reloc_entry->address, ++ (symbol->value ++ + symbol->section->output_section->vma ++ + symbol->section->output_offset), ++ reloc_entry->addend); ++} ++ ++static bfd_reloc_status_type ++nios2_elf32_callr_relocate (bfd *abfd, arelent *reloc_entry, asymbol *symbol, ++ void *data, asection *input_section, ++ bfd *output_bfd, char **msg ATTRIBUTE_UNUSED) ++{ ++ /* This part is from bfd_elf_generic_reloc. */ ++ if (output_bfd != (bfd *) NULL ++ && (symbol->flags & BSF_SECTION_SYM) == 0 ++ && (!reloc_entry->howto->partial_inplace || reloc_entry->addend == 0)) ++ { ++ reloc_entry->address += input_section->output_offset; ++ return bfd_reloc_ok; ++ } ++ ++ if (output_bfd != NULL) ++ /* FIXME: See bfd_perform_relocation. Is this right? */ ++ return bfd_reloc_ok; ++ ++ ++ return nios2_elf32_do_callr_relocate (abfd, reloc_entry->howto, ++ input_section, ++ data, reloc_entry->address, ++ (symbol->value ++ + ++ symbol->section->output_section-> ++ vma + ++ symbol->section->output_offset), ++ reloc_entry->addend); ++} ++ ++/* Do the relocations which require special handling. */ ++ ++static bfd_reloc_status_type ++nios2_elf32_do_hi16_relocate (bfd *abfd, reloc_howto_type *howto, ++ asection *input_section ATTRIBUTE_UNUSED, ++ bfd_byte *data, bfd_vma offset, ++ bfd_vma symbol_value, bfd_vma addend) ++{ ++ symbol_value = symbol_value + addend; ++ addend = 0; ++ symbol_value = (symbol_value >> 16) & 0xffff; ++ return _bfd_final_link_relocate (howto, abfd, input_section, ++ data, offset, symbol_value, addend); ++} ++ ++ ++static bfd_reloc_status_type ++nios2_elf32_do_lo16_relocate (bfd *abfd, reloc_howto_type *howto, ++ asection *input_section ATTRIBUTE_UNUSED, ++ bfd_byte *data, bfd_vma offset, ++ bfd_vma symbol_value, bfd_vma addend) ++{ ++ symbol_value = symbol_value + addend; ++ addend = 0; ++ symbol_value = symbol_value & 0xffff; ++ return _bfd_final_link_relocate (howto, abfd, input_section, ++ data, offset, symbol_value, addend); ++} ++ ++/* The usual way of loading a 32-bit constant into a Nios II register is to ++ load the high 16 bits in one instruction and then add the low 16 bits with ++ a signed add. This means that the high halfword needs to be adjusted to ++ compensate for the sign bit of the low halfword. This function returns the ++ adjusted high halfword for a given 32-bit constant. */ ++ ++static bfd_vma hiadj(bfd_vma symbol_value) ++{ ++ return ++ (((symbol_value >> 16) & 0xffff) + ((symbol_value >> 15) & 0x01)) & 0xffff; ++} ++ ++static bfd_reloc_status_type ++nios2_elf32_do_hiadj16_relocate (bfd *abfd, reloc_howto_type *howto, ++ asection *input_section ATTRIBUTE_UNUSED, ++ bfd_byte *data, bfd_vma offset, ++ bfd_vma symbol_value, bfd_vma addend) ++{ ++ symbol_value = symbol_value + addend; ++ addend = 0; ++ symbol_value = hiadj(symbol_value); ++ return _bfd_final_link_relocate (howto, abfd, input_section, data, offset, ++ symbol_value, addend); ++} ++ ++static bfd_reloc_status_type ++nios2_elf32_do_pcrel_lo16_relocate (bfd *abfd, reloc_howto_type *howto, ++ asection *input_section ATTRIBUTE_UNUSED, ++ bfd_byte *data, bfd_vma offset, ++ bfd_vma symbol_value, bfd_vma addend) ++{ ++ symbol_value = symbol_value + addend; ++ addend = 0; ++ symbol_value = symbol_value & 0xffff; ++ return _bfd_final_link_relocate (howto, abfd, input_section, ++ data, offset, symbol_value, addend); ++} ++ ++static bfd_reloc_status_type ++nios2_elf32_do_pcrel_hiadj16_relocate (bfd *abfd, reloc_howto_type *howto, ++ asection *input_section ++ ATTRIBUTE_UNUSED, ++ bfd_byte *data, bfd_vma offset, ++ bfd_vma symbol_value, bfd_vma addend) ++{ ++ symbol_value = symbol_value + addend; ++ symbol_value -= (input_section->output_section->vma + ++ input_section->output_offset); ++ symbol_value -= offset; ++ addend = 0; ++ symbol_value = hiadj(symbol_value); ++ return _bfd_final_link_relocate (howto, abfd, input_section, data, offset, ++ symbol_value, addend); ++} ++ ++static bfd_reloc_status_type ++nios2_elf32_do_pcrel16_relocate (bfd *abfd, reloc_howto_type *howto, ++ asection *input_section ATTRIBUTE_UNUSED, ++ bfd_byte *data, bfd_vma offset, ++ bfd_vma symbol_value, bfd_vma addend) ++{ ++ /* NIOS2 pc relative relocations are relative to the next 32-bit instruction ++ so we need to subtract 4 before doing a final_link_relocate. */ ++ symbol_value = symbol_value + addend - 4; ++ addend = 0; ++ return _bfd_final_link_relocate (howto, abfd, input_section, ++ data, offset, symbol_value, addend); ++} ++ ++static bfd_reloc_status_type ++nios2_elf32_do_call26_relocate (bfd *abfd, reloc_howto_type *howto, ++ asection *input_section ATTRIBUTE_UNUSED, ++ bfd_byte *data, bfd_vma offset, ++ bfd_vma symbol_value, bfd_vma addend) ++{ ++ /* Check that the relocation is in the same page as the current address. */ ++ if (((symbol_value + addend) & 0xf0000000) ++ != ((input_section->output_section->vma + offset) & 0xf0000000)) ++ return bfd_reloc_overflow; ++ ++ return _bfd_final_link_relocate (howto, abfd, input_section, ++ data, offset, symbol_value, addend); ++} ++ ++ ++static bfd_reloc_status_type ++nios2_elf32_do_gprel_relocate (bfd *abfd, reloc_howto_type *howto, ++ asection *input_section ATTRIBUTE_UNUSED, ++ bfd_byte *data, bfd_vma offset, ++ bfd_vma symbol_value, bfd_vma addend) ++{ ++ /* Because we need the output_bfd, the special handling is done ++ in nios2_elf32_relocate_section or in nios2_elf32_gprel_relocate. */ ++ return _bfd_final_link_relocate (howto, abfd, input_section, ++ data, offset, symbol_value, addend); ++} ++ ++static bfd_reloc_status_type ++nios2_elf32_do_ujmp_relocate (bfd *abfd, reloc_howto_type *howto, ++ asection *input_section ATTRIBUTE_UNUSED, ++ bfd_byte *data, bfd_vma offset, ++ bfd_vma symbol_value, bfd_vma addend) ++{ ++ bfd_vma symbol_lo16, symbol_hi16; ++ bfd_reloc_status_type r; ++ symbol_value = symbol_value + addend; ++ addend = 0; ++ symbol_hi16 = (symbol_value >> 16) & 0xffff; ++ symbol_lo16 = symbol_value & 0xffff; ++ ++ r = _bfd_final_link_relocate (howto, abfd, input_section, ++ data, offset, symbol_hi16, addend); ++ ++ if (r == bfd_reloc_ok) ++ return _bfd_final_link_relocate (howto, abfd, input_section, ++ data, offset + 4, symbol_lo16, addend); ++ ++ return r; ++} ++ ++static bfd_reloc_status_type ++nios2_elf32_do_cjmp_relocate (bfd *abfd, reloc_howto_type *howto, ++ asection *input_section ATTRIBUTE_UNUSED, ++ bfd_byte *data, bfd_vma offset, ++ bfd_vma symbol_value, bfd_vma addend) ++{ ++ bfd_vma symbol_lo16, symbol_hi16; ++ bfd_reloc_status_type r; ++ symbol_value = symbol_value + addend; ++ addend = 0; ++ symbol_hi16 = (symbol_value >> 16) & 0xffff; ++ symbol_lo16 = symbol_value & 0xffff; ++ ++ r = _bfd_final_link_relocate (howto, abfd, input_section, ++ data, offset, symbol_hi16, addend); ++ ++ if (r == bfd_reloc_ok) ++ return _bfd_final_link_relocate (howto, abfd, input_section, ++ data, offset + 4, symbol_lo16, addend); ++ ++ return r; ++} ++ ++static bfd_reloc_status_type ++nios2_elf32_do_callr_relocate (bfd *abfd, reloc_howto_type *howto, ++ asection *input_section ATTRIBUTE_UNUSED, ++ bfd_byte *data, bfd_vma offset, ++ bfd_vma symbol_value, bfd_vma addend) ++{ ++ bfd_vma symbol_lo16, symbol_hi16; ++ bfd_reloc_status_type r; ++ symbol_value = symbol_value + addend; ++ addend = 0; ++ symbol_hi16 = (symbol_value >> 16) & 0xffff; ++ symbol_lo16 = symbol_value & 0xffff; ++ ++ r = _bfd_final_link_relocate (howto, abfd, input_section, ++ data, offset, symbol_hi16, addend); ++ ++ if (r == bfd_reloc_ok) ++ return _bfd_final_link_relocate (howto, abfd, input_section, ++ data, offset + 4, symbol_lo16, addend); ++ ++ return r; ++} ++ ++/* The function nios2_elf32_relocate_section is used by the linker ++ to perform relocations. */ ++static bfd_boolean ++nios2_elf32_relocate_section (bfd * output_bfd, ++ struct bfd_link_info *info, ++ bfd * input_bfd, ++ asection * input_section, ++ bfd_byte * contents, ++ Elf_Internal_Rela * relocs, ++ Elf_Internal_Sym * local_syms, ++ asection ** local_sections) ++{ ++ Elf_Internal_Shdr *symtab_hdr; ++ struct elf_link_hash_entry **sym_hashes; ++ Elf_Internal_Rela *rel; ++ Elf_Internal_Rela *relend; ++ struct elf32_nios2_link_hash_table *htab; ++ asection *sgot; ++ asection *splt; ++ asection *sreloc = NULL; ++ bfd_vma *local_got_offsets; ++ bfd *dynobj = NULL; ++ ++ symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; ++ sym_hashes = elf_sym_hashes (input_bfd); ++ relend = relocs + input_section->reloc_count; ++ ++ htab = elf32_nios2_hash_table (info); ++ sgot = htab->sgot; ++ splt = htab->splt; ++ local_got_offsets = elf_local_got_offsets (input_bfd); ++ ++ dynobj = elf_hash_table (info)->dynobj; ++ ++#if 0 ++ size_t psymalloc = 0; ++ _bfd_generic_link_output_symbols(output_bfd, input_bfd, info, &psymalloc); ++#endif ++ for (rel = relocs; rel < relend; rel++) ++ { ++ reloc_howto_type *howto; ++ unsigned long r_symndx; ++ Elf_Internal_Sym *sym; ++ asection *sec; ++ struct elf_link_hash_entry *h; ++ struct elf32_nios2_link_hash_entry *eh; ++ bfd_vma relocation; ++ bfd_vma gp; ++ bfd_vma reloc_address; ++ bfd_reloc_status_type r = bfd_reloc_ok; ++ const char *name = NULL; ++ int r_type; ++ const char *format; ++ char msgbuf[256]; ++ const char* msg = (const char*) NULL; ++ bfd_boolean unresolved_reloc; ++ bfd_vma off; ++ int use_plt; ++ ++ ++ ++ r_type = ELF32_R_TYPE (rel->r_info); ++ ++ r_symndx = ELF32_R_SYM (rel->r_info); ++ ++ if (info->relocatable) ++ { ++ /* This is a relocatable link. We don't have to change ++ anything, unless the reloc is against a section symbol, ++ in which case we have to adjust according to where the ++ section symbol winds up in the output section. */ ++ if (r_symndx < symtab_hdr->sh_info) ++ { ++ sym = local_syms + r_symndx; ++ ++ if (ELF_ST_TYPE (sym->st_info) == STT_SECTION) ++ { ++ sec = local_sections[r_symndx]; ++ rel->r_addend += sec->output_offset + sym->st_value; ++ } ++ } ++ continue; ++ } ++ ++ /* This is a final link. */ ++ howto = lookup_howto ((unsigned) ELF32_R_TYPE (rel->r_info)); ++ h = NULL; ++ sym = NULL; ++ sec = NULL; ++ ++ if (r_symndx < symtab_hdr->sh_info) ++ { ++ sym = local_syms + r_symndx; ++ sec = local_sections[r_symndx]; ++ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel); ++ } ++ else ++ { ++ bfd_boolean warned; ++ ++ RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel, ++ r_symndx, symtab_hdr, sym_hashes, ++ h, sec, relocation, ++ unresolved_reloc, warned); ++ } ++ ++ if (sec != NULL && elf_discarded_section (sec)) ++ { ++ /* For relocs against symbols from removed linkonce sections, ++ or sections discarded by a linker script, we just want the ++ section contents zeroed. Avoid any special processing. */ ++ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset); ++ rel->r_info = 0; ++ rel->r_addend = 0; ++ continue; ++ } ++ ++ if (sec && sec->output_section != NULL) ++ reloc_address = sec->output_section->vma + sec->output_offset + ++ rel->r_offset; ++ else ++ reloc_address = 0; ++ ++ if (howto != NULL) ++ { ++ switch (howto->type) ++ { ++ case R_NIOS2_HI16: ++ r = ++ nios2_elf32_do_hi16_relocate (input_bfd, howto, input_section, ++ contents, rel->r_offset, ++ relocation, rel->r_addend); ++ break; ++ case R_NIOS2_LO16: ++ r = ++ nios2_elf32_do_lo16_relocate (input_bfd, howto, input_section, ++ contents, rel->r_offset, ++ relocation, rel->r_addend); ++ break; ++ case R_NIOS2_PCREL_LO: ++ r = ++ nios2_elf32_do_pcrel_lo16_relocate (input_bfd, howto, ++ input_section, contents, ++ rel->r_offset, relocation, ++ rel->r_addend); ++ break; ++ case R_NIOS2_HIADJ16: ++ r = ++ nios2_elf32_do_hiadj16_relocate (input_bfd, howto, ++ input_section, contents, ++ rel->r_offset, relocation, ++ rel->r_addend); ++ break; ++ case R_NIOS2_PCREL_HA: ++ r = ++ nios2_elf32_do_pcrel_hiadj16_relocate (input_bfd, howto, ++ input_section, contents, ++ rel->r_offset, ++ relocation, ++ rel->r_addend); ++ break; ++ case R_NIOS2_PCREL16: ++ r = ++ nios2_elf32_do_pcrel16_relocate (input_bfd, howto, ++ input_section, contents, ++ rel->r_offset, relocation, ++ rel->r_addend); ++ break; ++ case R_NIOS2_GPREL: ++ /* Turns an absolute address into a gp-relative address. */ ++ if (!nios2_elf_assign_gp (output_bfd, &gp, info)) ++ { ++ format = _("global pointer relative relocation at address " ++ "0x%08x when _gp not defined\n"); ++ sprintf(msgbuf, format, reloc_address); ++ msg = msgbuf; ++ r = bfd_reloc_dangerous; ++ } ++ else ++ { ++ bfd_vma symbol_address = rel->r_addend + relocation; ++ relocation = relocation + rel->r_addend - gp; ++ rel->r_addend = 0; ++ if ((signed) relocation < -32768 ++ || (signed) relocation > 32767) ++ { ++ format = _("Unable to reach %s (at 0x%08x) from the " ++ "global pointer (at 0x%08x) because the " ++ "offset (%d) is out of the allowed range, " ++ "-32678 to 32767.\n" ); ++ sprintf(msgbuf, format, name, symbol_address, gp, ++ (signed)relocation); ++ msg = msgbuf; ++ r = bfd_reloc_outofrange; ++ } ++ else ++ { ++ r = ++ _bfd_final_link_relocate (howto, input_bfd, ++ input_section, contents, ++ rel->r_offset, relocation, ++ rel->r_addend); ++ } ++ } ++ ++ break; ++ case R_NIOS2_UJMP: ++ r = ++ nios2_elf32_do_ujmp_relocate (input_bfd, howto, input_section, ++ contents, rel->r_offset, ++ relocation, rel->r_addend); ++ break; ++ case R_NIOS2_CJMP: ++ r = ++ nios2_elf32_do_cjmp_relocate (input_bfd, howto, input_section, ++ contents, rel->r_offset, ++ relocation, rel->r_addend); ++ break; ++ case R_NIOS2_CALLR: ++ r = ++ nios2_elf32_do_callr_relocate (input_bfd, howto, ++ input_section, contents, ++ rel->r_offset, relocation, ++ rel->r_addend); ++ break; ++ case R_NIOS2_CALL26: ++ /* Handle relocations which should use the PLT entry. ++ NIOS2_BFD_RELOC_32 relocations will use the symbol's value, ++ which may point to a PLT entry, but we don't need to handle ++ that here. If we created a PLT entry, all branches in this ++ object should go to it. */ ++ if (h != NULL && splt != NULL && h->plt.offset != (bfd_vma) -1) ++ { ++ /* If we've created a .plt section, and assigned a PLT entry ++ to this function, it should not be known to bind locally. ++ If it were, we would have cleared the PLT entry. */ ++ BFD_ASSERT (!SYMBOL_CALLS_LOCAL (info, h)); ++ ++ relocation = (splt->output_section->vma ++ + splt->output_offset ++ + h->plt.offset); ++ ++ unresolved_reloc = FALSE; ++ } ++ r = ++ nios2_elf32_do_call26_relocate (input_bfd, howto, ++ input_section, contents, ++ rel->r_offset, relocation, ++ rel->r_addend); ++ break; ++ case R_NIOS2_ALIGN: ++ r = bfd_reloc_ok; ++ /* For symmetry this would be ++ r = nios2_elf32_do_ignore_reloc (input_bfd, howto, ++ input_section, contents, ++ rel->r_offset, relocation, ++ rel->r_addend); ++ but do_ignore_reloc would do no more than return bfd_reloc_ok. ++ */ ++ break; ++ ++ case R_NIOS2_GOT16: ++ case R_NIOS2_CALL16: ++ /* Relocation is to the entry for this symbol in the ++ global offset table. */ ++ if (sgot == NULL) ++ { ++ r = bfd_reloc_notsupported; ++ break; ++ } ++ ++ use_plt = 0; ++ ++ if (h != NULL) ++ { ++ bfd_boolean dyn; ++ ++ eh = (struct elf32_nios2_link_hash_entry *)h; ++ use_plt = (eh->got_types_used == CALL16_USED && ++ h->plt.offset != (bfd_vma) -1); ++ ++ off = h->got.offset; ++ BFD_ASSERT (off != (bfd_vma) -1); ++ dyn = elf_hash_table (info)->dynamic_sections_created; ++ if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) ++ || (info->shared ++ && SYMBOL_REFERENCES_LOCAL (info, h)) ++ || (ELF_ST_VISIBILITY (h->other) ++ && h->root.type == bfd_link_hash_undefweak)) ++ { ++ /* This is actually a static link, or it is a -Bsymbolic ++ link and the symbol is defined locally. We must ++ initialize this entry in the global offset table. ++ Since the offset must always be a multiple of 4, we ++ use the least significant bit to record whether we ++ have initialized it already. ++ ++ When doing a dynamic link, we create a .rela.got ++ relocation entry to initialize the value. This is ++ done in the finish_dynamic_symbol routine. */ ++ if ((off & 1) != 0) ++ off &= ~1; ++ else ++ { ++ bfd_put_32 (output_bfd, relocation, ++ sgot->contents + off); ++ h->got.offset |= 1; ++ } ++ } ++ else ++ unresolved_reloc = FALSE; ++ } ++ else ++ { ++ BFD_ASSERT (local_got_offsets != NULL && ++ local_got_offsets[r_symndx] != (bfd_vma) -1); ++ ++ off = local_got_offsets[r_symndx]; ++ ++ /* The offset must always be a multiple of 4. We use the ++ least significant bit to record whether we have already ++ generated the necessary reloc. */ ++ if ((off & 1) != 0) ++ off &= ~1; ++ else ++ { ++ bfd_put_32 (output_bfd, relocation, ++ sgot->contents + off); ++ ++ if (info->shared) ++ { ++ asection * srelgot; ++ Elf_Internal_Rela outrel; ++ bfd_byte *loc; ++ ++ srelgot = htab->srelgot; ++ BFD_ASSERT (srelgot != NULL); ++ ++ outrel.r_addend = relocation; ++ outrel.r_offset = (sgot->output_section->vma ++ + sgot->output_offset ++ + off); ++ outrel.r_info = ELF32_R_INFO (0, R_NIOS2_RELATIVE); ++ loc = srelgot->contents; ++ loc += (srelgot->reloc_count++ * ++ sizeof (Elf32_External_Rela)); ++ bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc); ++ } ++ ++ local_got_offsets[r_symndx] |= 1; ++ } ++ } ++ ++ if (use_plt && info->shared) ++ { ++ off = ((h->plt.offset - 24) / 12 + 3) * 4; ++ relocation = htab->sgotplt->output_offset + off; ++ } ++ else ++ relocation = sgot->output_offset + off; ++ ++ /* This relocation does not use the addend. */ ++ rel->r_addend = 0; ++ ++ r = _bfd_final_link_relocate (howto, input_bfd, input_section, ++ contents, rel->r_offset, ++ relocation, rel->r_addend); ++ break; ++ ++ case R_NIOS2_GOTOFF_LO: ++ case R_NIOS2_GOTOFF_HA: ++ case R_NIOS2_GOTOFF: ++ /* Relocation is relative to the start of the ++ global offset table. */ ++ ++ BFD_ASSERT (sgot != NULL); ++ if (sgot == NULL) ++ { ++ r = bfd_reloc_notsupported; ++ break; ++ } ++ ++ /* Note that sgot->output_offset is not involved in this ++ calculation. We always want the start of .got. If we ++ define _GLOBAL_OFFSET_TABLE in a different way, as is ++ permitted by the ABI, we might have to change this ++ calculation. */ ++ relocation -= sgot->output_section->vma; ++ switch (howto->type) ++ { ++ case R_NIOS2_GOTOFF_LO: ++ r = nios2_elf32_do_lo16_relocate (input_bfd, howto, ++ input_section, contents, ++ rel->r_offset, relocation, ++ rel->r_addend); ++ break; ++ case R_NIOS2_GOTOFF_HA: ++ r = nios2_elf32_do_hiadj16_relocate (input_bfd, howto, ++ input_section, contents, ++ rel->r_offset, ++ relocation, ++ rel->r_addend); ++ break; ++ default: ++ r = _bfd_final_link_relocate (howto, input_bfd, ++ input_section, contents, ++ rel->r_offset, relocation, ++ rel->r_addend); ++ break; ++ } ++ break; ++ ++ case R_NIOS2_TLS_LDO16: ++ relocation -= dtpoff_base (info) + DTP_OFFSET; ++ ++ r = _bfd_final_link_relocate (howto, input_bfd, input_section, ++ contents, rel->r_offset, ++ relocation, rel->r_addend); ++ break; ++ case R_NIOS2_TLS_LDM16: ++ { ++ bfd_vma off; ++ ++ if (htab->sgot == NULL) ++ abort (); ++ ++ off = htab->tls_ldm_got.offset; ++ ++ if ((off & 1) != 0) ++ off &= ~1; ++ else ++ { ++ /* If we don't know the module number, create a relocation ++ for it. */ ++ if (info->shared) ++ { ++ Elf_Internal_Rela outrel; ++ bfd_byte *loc; ++ ++ if (htab->srelgot == NULL) ++ abort (); ++ ++ outrel.r_addend = 0; ++ outrel.r_offset = (htab->sgot->output_section->vma ++ + htab->sgot->output_offset ++ + off); ++ outrel.r_info = ELF32_R_INFO (0, R_NIOS2_TLS_DTPMOD); ++ ++ loc = htab->srelgot->contents; ++ loc += (htab->srelgot->reloc_count++ ++ * sizeof (Elf32_External_Rela)); ++ bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc); ++ } ++ else ++ bfd_put_32 (output_bfd, 1, ++ htab->sgot->contents + off); ++ ++ htab->tls_ldm_got.offset |= 1; ++ } ++ ++ relocation = (htab->sgot->output_offset + off); ++ ++ r = _bfd_final_link_relocate (howto, input_bfd, ++ input_section, contents, ++ rel->r_offset, relocation, ++ rel->r_addend); ++ } ++ ++ break; ++ case R_NIOS2_TLS_GD16: ++ case R_NIOS2_TLS_IE16: ++ { ++ bfd_vma off; ++ int indx; ++ char tls_type; ++ ++ if (htab->sgot == NULL) ++ abort (); ++ ++ indx = 0; ++ if (h != NULL) ++ { ++ bfd_boolean dyn; ++ dyn = htab->root.dynamic_sections_created; ++ if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) ++ && (!info->shared ++ || !SYMBOL_REFERENCES_LOCAL (info, h))) ++ { ++ unresolved_reloc = FALSE; ++ indx = h->dynindx; ++ } ++ off = h->got.offset; ++ tls_type = (((struct elf32_nios2_link_hash_entry *) h) ++ ->tls_type); ++ } ++ else ++ { ++ if (local_got_offsets == NULL) ++ abort (); ++ off = local_got_offsets[r_symndx]; ++ tls_type = (elf32_nios2_local_got_tls_type (input_bfd) ++ [r_symndx]); ++ } ++ ++ if (tls_type == GOT_UNKNOWN) ++ abort (); ++ ++ if ((off & 1) != 0) ++ off &= ~1; ++ else ++ { ++ bfd_boolean need_relocs = FALSE; ++ Elf_Internal_Rela outrel; ++ bfd_byte *loc = NULL; ++ int cur_off = off; ++ ++ /* The GOT entries have not been initialized yet. Do it ++ now, and emit any relocations. If both an IE GOT and a ++ GD GOT are necessary, we emit the GD first. */ ++ ++ if ((info->shared || indx != 0) ++ && (h == NULL ++ || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT ++ || h->root.type != bfd_link_hash_undefweak)) ++ { ++ need_relocs = TRUE; ++ if (htab->srelgot == NULL) ++ abort (); ++ loc = htab->srelgot->contents; ++ loc += (htab->srelgot->reloc_count * ++ sizeof (Elf32_External_Rela)); ++ } ++ ++ if (tls_type & GOT_TLS_GD) ++ { ++ if (need_relocs) ++ { ++ outrel.r_addend = 0; ++ outrel.r_offset = (htab->sgot->output_section->vma ++ + htab->sgot->output_offset ++ + cur_off); ++ outrel.r_info = ELF32_R_INFO (indx, ++ R_NIOS2_TLS_DTPMOD); ++ ++ bfd_elf32_swap_reloca_out (output_bfd, &outrel, ++ loc); ++ htab->srelgot->reloc_count++; ++ loc += sizeof (Elf32_External_Rela); ++ ++ if (indx == 0) ++ bfd_put_32 (output_bfd, ++ (relocation - dtpoff_base (info) - ++ DTP_OFFSET), ++ htab->sgot->contents + cur_off + 4); ++ else ++ { ++ outrel.r_addend = 0; ++ outrel.r_info = ELF32_R_INFO (indx, ++ R_NIOS2_TLS_DTPREL); ++ outrel.r_offset += 4; ++ ++ bfd_elf32_swap_reloca_out (output_bfd, &outrel, ++ loc); ++ htab->srelgot->reloc_count++; ++ loc += sizeof (Elf32_External_Rela); ++ } ++ } ++ else ++ { ++ /* If we are not emitting relocations for a ++ general dynamic reference, then we must be in a ++ static link or an executable link with the ++ symbol binding locally. Mark it as belonging ++ to module 1, the executable. */ ++ bfd_put_32 (output_bfd, 1, ++ htab->sgot->contents + cur_off); ++ bfd_put_32 (output_bfd, (relocation - ++ dtpoff_base (info) - ++ DTP_OFFSET), ++ htab->sgot->contents + cur_off + 4); ++ } ++ ++ cur_off += 8; ++ } ++ ++ if (tls_type & GOT_TLS_IE) ++ { ++ if (need_relocs) ++ { ++ if (indx == 0) ++ outrel.r_addend = (relocation - ++ dtpoff_base (info)); ++ else ++ outrel.r_addend = 0; ++ outrel.r_offset = (htab->sgot->output_section->vma ++ + htab->sgot->output_offset ++ + cur_off); ++ outrel.r_info = ELF32_R_INFO (indx, ++ R_NIOS2_TLS_TPREL); ++ ++ bfd_elf32_swap_reloca_out (output_bfd, &outrel, ++ loc); ++ htab->srelgot->reloc_count++; ++ loc += sizeof (Elf32_External_Rela); ++ } ++ else ++ bfd_put_32 (output_bfd, (tpoff (info, relocation) ++ - TP_OFFSET), ++ htab->sgot->contents + cur_off); ++ cur_off += 4; ++ } ++ ++ if (h != NULL) ++ h->got.offset |= 1; ++ else ++ local_got_offsets[r_symndx] |= 1; ++ } ++ ++ if ((tls_type & GOT_TLS_GD) && r_type != R_NIOS2_TLS_GD16) ++ off += 8; ++ relocation = (htab->sgot->output_offset + off); ++ ++ r = _bfd_final_link_relocate (howto, input_bfd, input_section, ++ contents, rel->r_offset, ++ relocation, rel->r_addend); ++ } ++ ++ break; ++ case R_NIOS2_TLS_LE16: ++ if (info->shared) ++ { ++ (*_bfd_error_handler) ++ (_("%B(%A+0x%lx): R_NIOS2_TLS_LE16 relocation not " ++ "permitted in shared object"), ++ input_bfd, input_section, ++ (long) rel->r_offset, howto->name); ++ return FALSE; ++ } ++ else ++ relocation = tpoff (info, relocation) - TP_OFFSET; ++ ++ r = _bfd_final_link_relocate (howto, input_bfd, input_section, ++ contents, rel->r_offset, ++ relocation, rel->r_addend); ++ break; ++ ++ case R_NIOS2_BFD_RELOC_32: ++ if (info->shared ++ && (input_section->flags & SEC_ALLOC) != 0 ++ && (h == NULL ++ || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT ++ || h->root.type != bfd_link_hash_undefweak)) ++ { ++ Elf_Internal_Rela outrel; ++ bfd_byte *loc; ++ bfd_boolean skip, relocate; ++ ++ /* When generating a shared object, these relocations ++ are copied into the output file to be resolved at run ++ time. */ ++ ++ skip = FALSE; ++ relocate = FALSE; ++ ++ outrel.r_offset = ++ _bfd_elf_section_offset (output_bfd, info, input_section, ++ rel->r_offset); ++ if (outrel.r_offset == (bfd_vma) -1) ++ skip = TRUE; ++ else if (outrel.r_offset == (bfd_vma) -2) ++ skip = TRUE, relocate = TRUE; ++ outrel.r_offset += (input_section->output_section->vma ++ + input_section->output_offset); ++ ++ if (skip) ++ memset (&outrel, 0, sizeof outrel); ++ else if (h != NULL ++ && h->dynindx != -1 ++ && (!info->shared ++ || !info->symbolic ++ || !h->def_regular)) ++ { ++ outrel.r_info = ELF32_R_INFO (h->dynindx, r_type); ++ outrel.r_addend = rel->r_addend; ++ } ++ else ++ { ++ /* This symbol is local, or marked to become local. */ ++ outrel.r_addend = relocation + rel->r_addend; ++ relocate = TRUE; ++ outrel.r_info = ELF32_R_INFO (0, R_NIOS2_RELATIVE); ++ } ++ ++ sreloc = elf_section_data (input_section)->sreloc; ++ if (sreloc == NULL) ++ abort (); ++ ++ loc = sreloc->contents; ++ loc += sreloc->reloc_count++ * sizeof (Elf32_External_Rela); ++ bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc); ++ ++ /* This reloc will be computed at runtime, so there's no ++ need to do anything now, except for R_NIOS2_BFD_RELOC_32 ++ relocations that have been turned into ++ R_NIOS2_RELATIVE. */ ++ if (!relocate) ++ break; ++ } ++ ++ r = _bfd_final_link_relocate (howto, input_bfd, ++ input_section, contents, ++ rel->r_offset, relocation, ++ rel->r_addend); ++ break; ++ ++ case R_NIOS2_TLS_DTPREL: ++ relocation -= dtpoff_base (info); ++ /* Fall through. */ ++ ++ default: ++ r = _bfd_final_link_relocate (howto, input_bfd, ++ input_section, contents, ++ rel->r_offset, relocation, ++ rel->r_addend); ++ break; ++ } ++ } ++ else ++ { ++ r = bfd_reloc_notsupported; ++ } ++ ++ if (r != bfd_reloc_ok) ++ { ++ if (h != NULL) ++ name = h->root.root.string; ++ else ++ { ++ name = (bfd_elf_string_from_elf_section ++ (input_bfd, symtab_hdr->sh_link, sym->st_name)); ++ if (name == NULL || *name == '\0') ++ name = bfd_section_name (input_bfd, sec); ++ } ++ ++ switch (r) ++ { ++ case bfd_reloc_overflow: ++ r = info->callbacks->reloc_overflow ++ (info, NULL, name, howto->name, (bfd_vma) 0, ++ input_bfd, input_section, rel->r_offset); ++ break; ++ ++ case bfd_reloc_undefined: ++ r = info->callbacks->undefined_symbol ++ (info, name, input_bfd, input_section, rel->r_offset, TRUE); ++ break; ++ ++ case bfd_reloc_outofrange: ++ if (msg == NULL) ++ msg = _("relocation out of range"); ++ break; ++ ++ case bfd_reloc_notsupported: ++ if (msg == NULL) ++ msg = _("unsupported relocation"); ++ break; ++ ++ case bfd_reloc_dangerous: ++ if (msg == NULL) ++ msg = _("dangerous relocation"); ++ break; ++ ++ default: ++ if (msg == NULL) ++ msg = _("unknown error"); ++ break; ++ } ++ ++ if (msg) ++ { ++ r = info->callbacks->warning ++ (info, msg, name, input_bfd, input_section, rel->r_offset); ++ return linker_force_make_executable; ++ } ++ } ++ } ++ return TRUE; ++} ++ ++ ++ ++/* Handle an NIOS2 specific section when reading an object file. This ++ is called when elfcode.h finds a section with an unknown type. ++ FIXME: We need to handle the SHF_NIOS2_GPREL flag. */ ++ ++static bfd_boolean ++nios2_elf32_section_from_shdr (bfd *abfd, ++ Elf_Internal_Shdr *hdr, const char *name, int shindex) ++{ ++ asection *newsect; ++ ++ /* NG - I'm keeping this code commented out at the moment ++ in case we add a .mdebug section. */ ++ ++ /* ++ switch (hdr->sh_type) ++ { ++ case SHT_NIOS2_DEBUG: ++ if (strcmp (name, ".mdebug") != 0) ++ return FALSE; ++ break; ++ default: ++ return FALSE; ++ } ++ */ ++ ++ if (!_bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex)) ++ return FALSE; ++ ++ newsect = hdr->bfd_section; ++ ++ /* ditto */ ++ /* ++ if (hdr->sh_type == SHT_NIOS2_DEBUG) ++ { ++ if (! bfd_set_section_flags (abfd, newsect, ++ (bfd_get_section_flags (abfd, newsect) ++ | SEC_DEBUGGING))) ++ return FALSE; ++ } ++ */ ++ return TRUE; ++} ++ ++/* Convert NIOS2 specific section flags to bfd internal section flags. */ ++ ++static bfd_boolean ++nios2_elf32_section_flags (flagword *flags, const Elf_Internal_Shdr *hdr) ++{ ++ if (hdr->sh_flags & SHF_NIOS2_GPREL) ++ *flags |= SEC_SMALL_DATA; ++ ++ return TRUE; ++} ++ ++/* Set the correct type for an NIOS2 ELF section. We do this by the ++ section name, which is a hack, but ought to work. */ ++ ++static bfd_boolean ++nios2_elf32_fake_sections (bfd *abfd ATTRIBUTE_UNUSED, ++ Elf_Internal_Shdr *hdr, asection *sec) ++{ ++ register const char *name; ++ ++ name = bfd_get_section_name (abfd, sec); ++ ++ if (strcmp (name, ".mdebug") == 0) ++ { ++ /* we don't yet have an .mdebug section, but I'm leaving this here ++ in case we ever do ++ hdr->sh_type = SHT_NIOS2_DEBUG; ++ ++ if ((abfd->flags & DYNAMIC) != 0 ) ++ hdr->sh_entsize = 0; ++ else ++ hdr->sh_entsize = 1; ++ */ ++ } ++ else if ((sec->flags & SEC_SMALL_DATA) ++ || strcmp (name, ".sdata") == 0 ++ || strcmp (name, ".sbss") == 0 ++ || strcmp (name, ".lit4") == 0 || strcmp (name, ".lit8") == 0) ++ hdr->sh_flags |= SHF_NIOS2_GPREL; ++ ++ return TRUE; ++} ++ ++/* Create .got, .gotplt, and .rela.got sections in DYNOBJ, and set up ++ shortcuts to them in our hash table. */ ++ ++static bfd_boolean ++create_got_section (bfd *dynobj, struct bfd_link_info *info) ++{ ++ struct elf32_nios2_link_hash_table *htab; ++ ++ htab = elf32_nios2_hash_table (info); ++ ++ if (! _bfd_elf_create_got_section (dynobj, info)) ++ return FALSE; ++ ++ htab->sgot = bfd_get_section_by_name (dynobj, ".got"); ++ htab->sgotplt = bfd_get_section_by_name (dynobj, ".got.plt"); ++ if (!htab->sgot || !htab->sgotplt) ++ abort (); ++ ++ /* In order for the two loads in .PLTresolve to share the same %hiadj, ++ _GLOBAL_OFFSET_TABLE_ must be aligned to a 16-byte boundary. */ ++ if (!bfd_set_section_alignment (dynobj, htab->sgotplt, 4)) ++ return FALSE; ++ ++ htab->srelgot = bfd_make_section_with_flags (dynobj, ++ ".rela.got", ++ (SEC_ALLOC | SEC_LOAD ++ | SEC_HAS_CONTENTS ++ | SEC_IN_MEMORY ++ | SEC_LINKER_CREATED ++ | SEC_READONLY)); ++ if (htab->srelgot == NULL ++ || ! bfd_set_section_alignment (dynobj, htab->srelgot, 2)) ++ return FALSE; ++ return TRUE; ++} ++ ++/* Create .plt, .rela.plt, .got, .got.plt, .rela.got, .dynbss, and ++ .rela.bss sections in DYNOBJ, and set up shortcuts to them in our ++ hash table. */ ++ ++static bfd_boolean ++nios2_elf32_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info) ++{ ++ struct elf32_nios2_link_hash_table *htab; ++ ++ htab = elf32_nios2_hash_table (info); ++ if (!htab->sgot && !create_got_section (dynobj, info)) ++ return FALSE; ++ ++ _bfd_elf_create_dynamic_sections (dynobj, info); ++ ++ htab->splt = bfd_get_section_by_name (dynobj, ".plt"); ++ ++ /* In order for the two loads in a shared object .PLTresolve to share the ++ same %hiadj, the start of the PLT (as well as the GOT) must be aligned ++ to a 16-byte boundary. This is because the addresses for these loads ++ include the -(.plt+4) PIC correction. */ ++ if (!bfd_set_section_alignment (dynobj, htab->splt, 4)) ++ return FALSE; ++ ++ htab->srelplt = bfd_get_section_by_name (dynobj, ".rela.plt"); ++ htab->sdynbss = bfd_get_section_by_name (dynobj, ".dynbss"); ++ if (!htab->splt || !htab->srelplt || !htab->sdynbss) ++ return FALSE; ++ if (!info->shared) ++ { ++ htab->srelbss = bfd_get_section_by_name (dynobj, ".rela.bss"); ++ if (!htab->srelbss) ++ return FALSE; ++ } ++ ++ return TRUE; ++} ++ ++/* Copy the extra info we tack onto an elf_link_hash_entry. */ ++ ++static void ++nios2_elf32_copy_indirect_symbol (struct bfd_link_info *info, ++ struct elf_link_hash_entry *dir, ++ struct elf_link_hash_entry *ind) ++{ ++ struct elf32_nios2_link_hash_entry *edir, *eind; ++ ++ edir = (struct elf32_nios2_link_hash_entry *) dir; ++ eind = (struct elf32_nios2_link_hash_entry *) ind; ++ ++ if (eind->dyn_relocs != NULL) ++ { ++ if (edir->dyn_relocs != NULL) ++ { ++ struct elf32_nios2_dyn_relocs **pp; ++ struct elf32_nios2_dyn_relocs *p; ++ ++ /* Add reloc counts against the indirect sym to the direct sym ++ list. Merge any entries against the same section. */ ++ for (pp = &eind->dyn_relocs; (p = *pp) != NULL; ) ++ { ++ struct elf32_nios2_dyn_relocs *q; ++ ++ for (q = edir->dyn_relocs; q != NULL; q = q->next) ++ if (q->sec == p->sec) ++ { ++ q->pc_count += p->pc_count; ++ q->count += p->count; ++ *pp = p->next; ++ break; ++ } ++ if (q == NULL) ++ pp = &p->next; ++ } ++ *pp = edir->dyn_relocs; ++ } ++ ++ edir->dyn_relocs = eind->dyn_relocs; ++ eind->dyn_relocs = NULL; ++ } ++ ++ if (ind->root.type == bfd_link_hash_indirect ++ && dir->got.refcount <= 0) ++ { ++ edir->tls_type = eind->tls_type; ++ eind->tls_type = GOT_UNKNOWN; ++ } ++ ++ edir->got_types_used |= eind->got_types_used; ++ ++ _bfd_elf_link_hash_copy_indirect (info, dir, ind); ++} ++ ++/* Look through the relocs for a section during the first phase. */ ++ ++static bfd_boolean ++nios2_elf32_check_relocs (bfd *abfd, struct bfd_link_info *info, ++ asection *sec, const Elf_Internal_Rela *relocs) ++{ ++ bfd *dynobj; ++ Elf_Internal_Shdr *symtab_hdr; ++ struct elf_link_hash_entry **sym_hashes, **sym_hashes_end; ++ const Elf_Internal_Rela *rel; ++ const Elf_Internal_Rela *rel_end; ++ struct elf32_nios2_link_hash_table *htab; ++ asection *sgot; ++ asection *srelgot; ++ asection *sreloc = NULL; ++ bfd_signed_vma *local_got_refcounts; ++ ++ if (info->relocatable) ++ return TRUE; ++ ++ dynobj = elf_hash_table (info)->dynobj; ++ symtab_hdr = &elf_tdata (abfd)->symtab_hdr; ++ sym_hashes = elf_sym_hashes (abfd); ++ sym_hashes_end = ++ sym_hashes + symtab_hdr->sh_size / sizeof (Elf32_External_Sym); ++ if (!elf_bad_symtab (abfd)) ++ sym_hashes_end -= symtab_hdr->sh_info; ++ local_got_refcounts = elf_local_got_refcounts (abfd); ++ ++ htab = elf32_nios2_hash_table (info); ++ sgot = htab->sgot; ++ srelgot = htab->srelgot; ++ ++ rel_end = relocs + sec->reloc_count; ++ for (rel = relocs; rel < rel_end; rel++) ++ { ++ unsigned int r_type; ++ struct elf_link_hash_entry *h; ++ unsigned long r_symndx; ++ ++ r_symndx = ELF32_R_SYM (rel->r_info); ++ if (r_symndx < symtab_hdr->sh_info) ++ h = NULL; ++ else ++ { ++ h = sym_hashes[r_symndx - symtab_hdr->sh_info]; ++ while (h->root.type == bfd_link_hash_indirect ++ || h->root.type == bfd_link_hash_warning) ++ h = (struct elf_link_hash_entry *) h->root.u.i.link; ++ } ++ ++ r_type = ELF32_R_TYPE (rel->r_info); ++ ++ switch (r_type) ++ { ++ case R_NIOS2_GOT16: ++ case R_NIOS2_CALL16: ++ case R_NIOS2_TLS_GD16: ++ case R_NIOS2_TLS_IE16: ++ /* This symbol requires a global offset table entry. */ ++ { ++ int tls_type, old_tls_type; ++ ++ switch (r_type) ++ { ++ default: ++ case R_NIOS2_GOT16: ++ case R_NIOS2_CALL16: ++ tls_type = GOT_NORMAL; ++ break; ++ case R_NIOS2_TLS_GD16: ++ tls_type = GOT_TLS_GD; ++ break; ++ case R_NIOS2_TLS_IE16: ++ tls_type = GOT_TLS_IE; ++ break; ++ } ++ ++ if (dynobj == NULL) ++ { ++ /* Create the .got section. */ ++ elf_hash_table (info)->dynobj = dynobj = abfd; ++ nios2_elf32_create_dynamic_sections (dynobj, info); ++ } ++ ++ if (sgot == NULL) ++ { ++ sgot = htab->sgot; ++ BFD_ASSERT (sgot != NULL); ++ } ++ ++ if (srelgot == NULL ++ && (h != NULL || info->shared)) ++ { ++ srelgot = bfd_get_section_by_name (dynobj, ".rela.got"); ++ BFD_ASSERT (srelgot != NULL); ++ } ++ ++ if (h != NULL) ++ { ++ struct elf32_nios2_link_hash_entry *eh = ++ (struct elf32_nios2_link_hash_entry *)h; ++ h->got.refcount++; ++ old_tls_type = elf32_nios2_hash_entry(h)->tls_type; ++ if (r_type == R_NIOS2_CALL16) ++ { ++ /* Make sure a plt entry is created for this symbol if it ++ turns out to be a function defined by a dynamic object. ++ */ ++ h->plt.refcount++; ++ ++ h->needs_plt = 1; ++ ++ h->type = STT_FUNC; ++ ++ eh->got_types_used |= CALL16_USED; ++ } ++ else ++ eh->got_types_used |= GOT16_USED; ++ } ++ else ++ { ++ /* This is a global offset table entry for a local symbol. */ ++ if (local_got_refcounts == NULL) ++ { ++ bfd_size_type size; ++ ++ size = symtab_hdr->sh_info; ++ size *= (sizeof (bfd_signed_vma) + sizeof(char)); ++ local_got_refcounts = ((bfd_signed_vma *) ++ bfd_zalloc (abfd, size)); ++ if (local_got_refcounts == NULL) ++ return FALSE; ++ elf_local_got_refcounts (abfd) = local_got_refcounts; ++ elf32_nios2_local_got_tls_type (abfd) = ++ (char *) (local_got_refcounts + symtab_hdr->sh_info); ++ } ++ local_got_refcounts[r_symndx]++; ++ old_tls_type = ++ elf32_nios2_local_got_tls_type (abfd) [r_symndx]; ++ } ++ ++ /* We will already have issued an error message if there is a ++ TLS / non-TLS mismatch, based on the symbol type. We don't ++ support any linker relaxations. So just combine any TLS ++ types needed. */ ++ if (old_tls_type != GOT_UNKNOWN && old_tls_type != GOT_NORMAL ++ && tls_type != GOT_NORMAL) ++ tls_type |= old_tls_type; ++ ++ if (old_tls_type != tls_type) ++ { ++ if (h != NULL) ++ elf32_nios2_hash_entry (h)->tls_type = tls_type; ++ else ++ elf32_nios2_local_got_tls_type (abfd) [r_symndx] = tls_type; ++ } ++ } ++ /* Fall through */ ++ case R_NIOS2_TLS_LDM16: ++ if (r_type == R_NIOS2_TLS_LDM16) ++ htab->tls_ldm_got.refcount++; ++ ++ if (htab->sgot == NULL) ++ { ++ if (htab->root.dynobj == NULL) ++ htab->root.dynobj = abfd; ++ if (!create_got_section (htab->root.dynobj, info)) ++ return FALSE; ++ } ++ break; ++ ++ /* This relocation describes the C++ object vtable hierarchy. ++ Reconstruct it for later use during GC. */ ++ case R_NIOS2_GNU_VTINHERIT: ++ if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset)) ++ return FALSE; ++ break; ++ ++ /* This relocation describes which C++ vtable entries are actually ++ used. Record for later use during GC. */ ++ case R_NIOS2_GNU_VTENTRY: ++ if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) ++ return FALSE; ++ break; ++ ++ case R_NIOS2_BFD_RELOC_32: ++ case R_NIOS2_CALL26: ++ case R_NIOS2_HIADJ16: ++ case R_NIOS2_LO16: ++ ++ if (h != NULL) ++ { ++ /* If this reloc is in a read-only section, we might ++ need a copy reloc. We can't check reliably at this ++ stage whether the section is read-only, as input ++ sections have not yet been mapped to output sections. ++ Tentatively set the flag for now, and correct in ++ adjust_dynamic_symbol. */ ++ if (!info->shared) ++ h->non_got_ref = 1; ++ ++ /* Make sure a plt entry is created for this symbol if it ++ turns out to be a function defined by a dynamic object. */ ++ h->plt.refcount++; ++ ++ if (r_type == R_NIOS2_CALL26) ++ h->needs_plt = 1; ++ } ++ ++ /* If we are creating a shared library, we need to copy the ++ reloc into the shared library. */ ++ if (info->shared ++ && (sec->flags & SEC_ALLOC) != 0 ++ && (r_type == R_NIOS2_BFD_RELOC_32 ++ || (h != NULL && ! h->needs_plt ++ && (! info->symbolic || ! h->def_regular)))) ++ { ++ struct elf32_nios2_dyn_relocs *p; ++ struct elf32_nios2_dyn_relocs **head; ++ ++ /* When creating a shared object, we must copy these ++ reloc types into the output file. We create a reloc ++ section in dynobj and make room for this reloc. */ ++ if (sreloc == NULL) ++ { ++ const char *name; ++ ++ name = (bfd_elf_string_from_elf_section ++ (abfd, ++ elf_elfheader (abfd)->e_shstrndx, ++ elf_section_data (sec)->rel_hdr.sh_name)); ++ if (name == NULL) ++ return FALSE; ++ ++ BFD_ASSERT (CONST_STRNEQ (name, ".rela") ++ && strcmp (bfd_get_section_name (abfd, sec), ++ name + 5) == 0); ++ ++ sreloc = bfd_get_section_by_name (dynobj, name); ++ if (sreloc == NULL) ++ { ++ sreloc = bfd_make_section_with_flags ( ++ dynobj, ++ name, ++ (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | ++ SEC_IN_MEMORY | SEC_LINKER_CREATED | SEC_READONLY)); ++ if (sreloc == NULL || ++ !bfd_set_section_alignment (dynobj, sreloc, 2)) ++ return FALSE; ++ } ++ elf_section_data (sec)->sreloc = sreloc; ++ } ++ ++ /* If this is a global symbol, we count the number of ++ relocations we need for this symbol. */ ++ if (h != NULL) ++ head = &((struct elf32_nios2_link_hash_entry *) h)->dyn_relocs; ++ else ++ { ++ /* Track dynamic relocs needed for local syms too. ++ We really need local syms available to do this ++ easily. Oh well. */ ++ ++ asection *s; ++ void *vpp; ++ ++ s = bfd_section_from_r_symndx (abfd, &htab->sym_sec, ++ sec, r_symndx); ++ if (s == NULL) ++ return FALSE; ++ ++ vpp = &elf_section_data (s)->local_dynrel; ++ head = (struct elf32_nios2_dyn_relocs **) vpp; ++ } ++ ++ p = *head; ++ if (p == NULL || p->sec != sec) ++ { ++ bfd_size_type amt = sizeof *p; ++ p = ((struct elf32_nios2_dyn_relocs *) ++ bfd_alloc (htab->root.dynobj, amt)); ++ if (p == NULL) ++ return FALSE; ++ p->next = *head; ++ *head = p; ++ p->sec = sec; ++ p->count = 0; ++ p->pc_count = 0; ++ } ++ ++ p->count += 1; ++ ++ } ++ break; ++ } ++ } ++ ++ return TRUE; ++} ++ ++ ++/* Return the section that should be marked against GC for a given ++ relocation. */ ++ ++asection * ++nios2_elf32_gc_mark_hook (asection *sec, ++ struct bfd_link_info *info ATTRIBUTE_UNUSED, ++ Elf_Internal_Rela *rel, ++ struct elf_link_hash_entry *h, ++ Elf_Internal_Sym *sym) ++{ ++ if (h != NULL) ++ switch (ELF32_R_TYPE (rel->r_info)) ++ { ++ case R_NIOS2_GNU_VTINHERIT: ++ case R_NIOS2_GNU_VTENTRY: ++ return NULL; ++ } ++ return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym); ++} ++ ++/* Update the got entry reference counts for the section being removed. */ ++ ++static bfd_boolean ++nios2_elf32_gc_sweep_hook (bfd *abfd, ++ struct bfd_link_info *info, ++ asection *sec, ++ const Elf_Internal_Rela *relocs) ++{ ++ Elf_Internal_Shdr *symtab_hdr; ++ struct elf_link_hash_entry **sym_hashes; ++ bfd_signed_vma *local_got_refcounts; ++ const Elf_Internal_Rela *rel, *relend; ++ bfd *dynobj; ++ asection *sgot; ++ asection *srelgot; ++ struct elf32_nios2_link_hash_table *htab; ++ ++ htab = elf32_nios2_hash_table (info); ++ sgot = htab->sgot; ++ srelgot = htab->srelgot; ++ ++ elf_section_data (sec)->local_dynrel = NULL; ++ ++ dynobj = elf_hash_table (info)->dynobj; ++ if (dynobj == NULL) ++ return TRUE; ++ ++ symtab_hdr = &elf_tdata (abfd)->symtab_hdr; ++ sym_hashes = elf_sym_hashes (abfd); ++ local_got_refcounts = elf_local_got_refcounts (abfd); ++ ++ relend = relocs + sec->reloc_count; ++ for (rel = relocs; rel < relend; rel++) ++ { ++ unsigned long r_symndx; ++ struct elf_link_hash_entry *h = NULL; ++ int r_type; ++ ++ r_symndx = ELF32_R_SYM (rel->r_info); ++ if (r_symndx >= symtab_hdr->sh_info) ++ { ++ h = sym_hashes[r_symndx - symtab_hdr->sh_info]; ++ while (h->root.type == bfd_link_hash_indirect ++ || h->root.type == bfd_link_hash_warning) ++ h = (struct elf_link_hash_entry *) h->root.u.i.link; ++ } ++ ++ r_type = ELF32_R_TYPE (rel->r_info); ++ switch (r_type) ++ { ++ case R_NIOS2_GOT16: ++ case R_NIOS2_CALL16: ++ if (h != NULL) ++ { ++ if (h->got.refcount > 0) ++ --h->got.refcount; ++ } ++ else if (local_got_refcounts != NULL) ++ { ++ if (local_got_refcounts[r_symndx] > 0) ++ --local_got_refcounts[r_symndx]; ++ } ++ break; ++ ++ case R_NIOS2_PCREL_LO: ++ case R_NIOS2_PCREL_HA: ++ case R_NIOS2_BFD_RELOC_32: ++ case R_NIOS2_CALL26: ++ if (h != NULL) ++ { ++ struct elf32_nios2_link_hash_entry *eh; ++ struct elf32_nios2_dyn_relocs **pp; ++ struct elf32_nios2_dyn_relocs *p; ++ ++ eh = (struct elf32_nios2_link_hash_entry *) h; ++ ++ if (h->plt.refcount > 0) ++ --h->plt.refcount; ++ ++ if (r_type == R_NIOS2_PCREL_LO || r_type == R_NIOS2_PCREL_HA || ++ r_type == R_NIOS2_BFD_RELOC_32) ++ { ++ for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ++ pp = &p->next) ++ if (p->sec == sec) ++ { ++ p->count -= 1; ++ if (p->count == 0) ++ *pp = p->next; ++ break; ++ } ++ } ++ } ++ break; ++ ++ default: ++ break; ++ } ++ } ++ ++ return TRUE; ++} ++ ++/* Install 16-bit immediate value VALUE at offset OFFSET into section SEC. */ ++ ++static void ++nios2_elf32_install_imm16 (asection *sec, bfd_vma offset, bfd_vma value) ++{ ++ bfd_vma word = bfd_get_32 (sec->owner, sec->contents + offset); ++ ++ BFD_ASSERT(value <= 0xffff); ++ ++ bfd_put_32 (sec->owner, word | ((value & 0xffff) << 6), ++ sec->contents + offset); ++} ++ ++/* Install COUNT 32-bit values DATA starting at offset OFFSET into section SEC. ++ */ ++ ++static void ++nios2_elf32_install_data (asection *sec, const bfd_vma *data, bfd_vma offset, ++ int count) ++{ ++ while (count--) ++ { ++ bfd_put_32 (sec->owner, *data, sec->contents + offset); ++ offset += 4; ++ ++data; ++ } ++} ++ ++ ++/* Finish up dynamic symbol handling. We set the contents of various ++ dynamic sections here. */ ++ ++static bfd_boolean ++nios2_elf32_finish_dynamic_symbol (bfd * output_bfd, ++ struct bfd_link_info * info, ++ struct elf_link_hash_entry * h, ++ Elf_Internal_Sym * sym) ++{ ++ struct elf32_nios2_link_hash_table *htab; ++ struct elf32_nios2_link_hash_entry *eh = ++ (struct elf32_nios2_link_hash_entry *)h; ++ bfd *dynobj; ++ int use_plt; ++ ++ htab = elf32_nios2_hash_table (info); ++ ++ dynobj = elf_hash_table (info)->dynobj; ++ ++ if (h->plt.offset != (bfd_vma) -1) ++ { ++ asection *splt; ++ asection *sgotplt; ++ asection *srela; ++ bfd_vma plt_index; ++ bfd_vma got_offset; ++ Elf_Internal_Rela rela; ++ bfd_byte *loc; ++ bfd_vma got_address; ++ ++ /* This symbol has an entry in the procedure linkage table. Set ++ it up. */ ++ ++ BFD_ASSERT (h->dynindx != -1); ++ ++ splt = htab->splt; ++ sgotplt = htab->sgotplt; ++ srela = htab->srelplt; ++ BFD_ASSERT (splt != NULL && sgotplt != NULL && srela != NULL); ++ ++ /* Emit the PLT entry. */ ++ if (info->shared) ++ { ++ nios2_elf32_install_data (splt, nios2_so_plt_entry, h->plt.offset, ++ 3); ++ plt_index = (h->plt.offset - 24) / 12; ++ got_offset = (plt_index + 3) * 4; ++ nios2_elf32_install_imm16 (splt, h->plt.offset, ++ hiadj(plt_index * 4)); ++ nios2_elf32_install_imm16 (splt, h->plt.offset + 4, ++ (plt_index * 4) & 0xffff); ++ nios2_elf32_install_imm16 (splt, h->plt.offset + 8, ++ 0xfff4 - h->plt.offset); ++ got_address = (sgotplt->output_section->vma + sgotplt->output_offset ++ + got_offset); ++ ++ /* Fill in the entry in the global offset table. There are no ++ res_n slots for a shared object PLT, instead the .got.plt entries ++ point to the PLT entries. */ ++ bfd_put_32 (output_bfd, ++ splt->output_section->vma + splt->output_offset ++ + h->plt.offset, sgotplt->contents + got_offset); ++ } ++ else ++ { ++ plt_index = (h->plt.offset - 28 - htab->res_n_size) / 12; ++ got_offset = (plt_index + 3) * 4; ++ ++ nios2_elf32_install_data (splt, nios2_plt_entry, h->plt.offset, 3); ++ got_address = (sgotplt->output_section->vma + sgotplt->output_offset ++ + got_offset); ++ nios2_elf32_install_imm16 (splt, h->plt.offset, hiadj(got_address)); ++ nios2_elf32_install_imm16 (splt, h->plt.offset + 4, ++ got_address & 0xffff); ++ ++ /* Fill in the entry in the global offset table. */ ++ bfd_put_32 (output_bfd, ++ splt->output_section->vma + splt->output_offset ++ + plt_index * 4, sgotplt->contents + got_offset); ++ } ++ ++ /* Fill in the entry in the .rela.plt section. */ ++ rela.r_offset = got_address; ++ rela.r_info = ELF32_R_INFO (h->dynindx, R_NIOS2_JUMP_SLOT); ++ rela.r_addend = 0; ++ loc = srela->contents + plt_index * sizeof (Elf32_External_Rela); ++ bfd_elf32_swap_reloca_out (output_bfd, &rela, loc); ++ ++ if (!h->def_regular) ++ { ++ /* Mark the symbol as undefined, rather than as defined in ++ the .plt section. Leave the value alone. */ ++ sym->st_shndx = SHN_UNDEF; ++ /* If the symbol is weak, we do need to clear the value. ++ Otherwise, the PLT entry would provide a definition for ++ the symbol even if the symbol wasn't defined anywhere, ++ and so the symbol would never be NULL. */ ++ if (!h->ref_regular_nonweak) ++ sym->st_value = 0; ++ } ++ } ++ ++ use_plt = (eh->got_types_used == CALL16_USED && ++ h->plt.offset != (bfd_vma) -1); ++ ++ if (!use_plt && h->got.offset != (bfd_vma) -1 ++ && (elf32_nios2_hash_entry (h)->tls_type & GOT_TLS_GD) == 0 ++ && (elf32_nios2_hash_entry (h)->tls_type & GOT_TLS_IE) == 0) ++ { ++ asection *sgot; ++ asection *srela; ++ Elf_Internal_Rela rela; ++ bfd_byte *loc; ++ bfd_vma offset; ++ ++ /* This symbol has an entry in the global offset table. Set it ++ up. */ ++ ++ sgot = htab->sgot; ++ srela = htab->srelgot; ++ BFD_ASSERT (sgot != NULL && srela != NULL); ++ ++ offset = (h->got.offset & ~(bfd_vma) 1); ++ rela.r_offset = (sgot->output_section->vma ++ + sgot->output_offset + offset); ++ ++ /* If this is a -Bsymbolic link, and the symbol is defined ++ locally, we just want to emit a RELATIVE reloc. Likewise if ++ the symbol was forced to be local because of a version file. ++ The entry in the global offset table will already have been ++ initialized in the relocate_section function. */ ++ ++ if (info->shared && SYMBOL_REFERENCES_LOCAL (info, h)) ++ { ++ rela.r_info = ELF32_R_INFO (0, R_NIOS2_RELATIVE); ++ rela.r_addend = bfd_get_signed_32 (output_bfd, ++ (sgot->contents + offset)); ++ bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + offset); ++ } ++ else ++ { ++ bfd_put_32 (output_bfd, (bfd_vma) 0, ++ sgot->contents + offset); ++ rela.r_info = ELF32_R_INFO (h->dynindx, R_NIOS2_GLOB_DAT); ++ rela.r_addend = 0; ++ } ++ ++ loc = srela->contents; ++ loc += srela->reloc_count++ * sizeof (Elf32_External_Rela); ++ bfd_elf32_swap_reloca_out (output_bfd, &rela, loc); ++ } ++ ++ if (use_plt && h->got.offset != (bfd_vma) -1) ++ { ++ bfd_vma offset = (h->got.offset & ~(bfd_vma) 1); ++ asection *sgot = htab->sgot; ++ asection *splt = htab->splt; ++ bfd_put_32 (output_bfd, (splt->output_section->vma + splt->output_offset ++ + h->plt.offset), sgot->contents + offset); ++ } ++ ++ if (h->needs_copy) ++ { ++ asection *s; ++ Elf_Internal_Rela rela; ++ bfd_byte *loc; ++ ++ /* This symbol needs a copy reloc. Set it up. */ ++ ++ BFD_ASSERT (h->dynindx != -1 ++ && (h->root.type == bfd_link_hash_defined ++ || h->root.type == bfd_link_hash_defweak)); ++ ++ s = bfd_get_section_by_name (h->root.u.def.section->owner, ++ ".rela.bss"); ++ BFD_ASSERT (s != NULL); ++ ++ rela.r_offset = (h->root.u.def.value ++ + h->root.u.def.section->output_section->vma ++ + h->root.u.def.section->output_offset); ++ rela.r_info = ELF32_R_INFO (h->dynindx, R_NIOS2_COPY); ++ rela.r_addend = 0; ++ loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela); ++ bfd_elf32_swap_reloca_out (output_bfd, &rela, loc); ++ } ++ ++ /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute. */ ++ if (strcmp (h->root.root.string, "_DYNAMIC") == 0 ++ || h == elf_hash_table (info)->hgot) ++ sym->st_shndx = SHN_ABS; ++ ++ return TRUE; ++} ++ ++/* Finish up the dynamic sections. */ ++ ++static bfd_boolean ++nios2_elf32_finish_dynamic_sections (bfd * output_bfd, ++ struct bfd_link_info * info) ++{ ++ bfd *dynobj; ++ asection *sgotplt; ++ asection *sdyn; ++ struct elf32_nios2_link_hash_table *htab; ++ ++ htab = elf32_nios2_hash_table (info); ++ ++ dynobj = elf_hash_table (info)->dynobj; ++ ++ sgotplt = htab->sgotplt; ++ BFD_ASSERT (sgotplt != NULL); ++ sdyn = bfd_get_section_by_name (dynobj, ".dynamic"); ++ ++ if (elf_hash_table (info)->dynamic_sections_created) ++ { ++ asection *splt; ++ Elf32_External_Dyn *dyncon, *dynconend; ++ ++ splt = htab->splt; ++ BFD_ASSERT (splt != NULL && sdyn != NULL); ++ ++ dyncon = (Elf32_External_Dyn *) sdyn->contents; ++ dynconend = (Elf32_External_Dyn *) (sdyn->contents + sdyn->size); ++ for (; dyncon < dynconend; dyncon++) ++ { ++ Elf_Internal_Dyn dyn; ++ const char *name; ++ asection *s; ++ ++ bfd_elf32_swap_dyn_in (dynobj, dyncon, &dyn); ++ ++ switch (dyn.d_tag) ++ { ++ default: ++ break; ++ ++ case DT_PLTGOT: ++ name = ".got"; ++ goto get_vma; ++ case DT_JMPREL: ++ name = ".rela.plt"; ++ get_vma: ++ s = bfd_get_section_by_name (output_bfd, name); ++ BFD_ASSERT (s != NULL); ++ dyn.d_un.d_ptr = s->vma; ++ bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); ++ break; ++ ++ case DT_PLTRELSZ: ++ s = bfd_get_section_by_name (output_bfd, ".rela.plt"); ++ BFD_ASSERT (s != NULL); ++ dyn.d_un.d_val = s->size; ++ bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); ++ break; ++ ++ case DT_RELASZ: ++ /* The procedure linkage table relocs (DT_JMPREL) should ++ not be included in the overall relocs (DT_RELA). ++ Therefore, we override the DT_RELASZ entry here to ++ make it not include the JMPREL relocs. Since the ++ linker script arranges for .rela.plt to follow all ++ other relocation sections, we don't have to worry ++ about changing the DT_RELA entry. */ ++ s = bfd_get_section_by_name (output_bfd, ".rela.plt"); ++ if (s != NULL) ++ dyn.d_un.d_val -= s->size; ++ bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); ++ break; ++ ++ case DT_NIOS2_GP: ++ s = bfd_get_section_by_name (output_bfd, ".got"); ++ BFD_ASSERT (s != NULL); ++ dyn.d_un.d_ptr = s->vma + 0x7ff0; ++ bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); ++ break; ++ } ++ } ++ ++ /* Fill in the first entry in the procedure linkage table. */ ++ if (splt->size > 0) ++ { ++ bfd_vma got_address = (sgotplt->output_section->vma + ++ sgotplt->output_offset); ++ if (info->shared) ++ { ++ bfd_vma corrected = got_address - (splt->output_section->vma + ++ splt->output_offset + 4); ++ nios2_elf32_install_data (splt, nios2_so_plt0_entry, 0, 6); ++ nios2_elf32_install_imm16 (splt, 4, hiadj (corrected)); ++ nios2_elf32_install_imm16 (splt, 12, (corrected & 0xffff) + 4); ++ nios2_elf32_install_imm16 (splt, 16, (corrected & 0xffff) + 8); ++ ++ elf_section_data (splt->output_section)->this_hdr.sh_entsize ++ = 24; ++ } ++ else ++ { ++ /* Divide by 4 here, not 3 because we already corrected for the ++ res_N branches. */ ++ bfd_vma res_size = (splt->size - 28) / 4; ++ bfd_vma res_start = (splt->output_section->vma + ++ splt->output_offset); ++ bfd_vma res_offset; ++ ++ for (res_offset = 0; res_offset < res_size; res_offset += 4) ++ bfd_put_32 (output_bfd, ++ 6 | ((res_size - (res_offset + 4)) << 6), ++ splt->contents + res_offset); ++ ++ nios2_elf32_install_data (splt, nios2_plt0_entry, res_size, 7); ++ nios2_elf32_install_imm16 (splt, res_size, hiadj (res_start)); ++ nios2_elf32_install_imm16 (splt, res_size + 4, ++ res_start & 0xffff); ++ nios2_elf32_install_imm16 (splt, res_size + 12, ++ hiadj (got_address)); ++ nios2_elf32_install_imm16 (splt, res_size + 16, ++ (got_address & 0xffff) + 4); ++ nios2_elf32_install_imm16 (splt, res_size + 20, ++ (got_address & 0xffff) + 8); ++ ++ elf_section_data (splt->output_section)->this_hdr.sh_entsize ++ = 28 + res_size; ++ } ++ } ++ } ++ /* Fill in the first three entries in the global offset table. */ ++ if (sgotplt->size > 0) ++ { ++ if (sdyn == NULL) ++ bfd_put_32 (output_bfd, (bfd_vma) 0, sgotplt->contents); ++ else ++ bfd_put_32 (output_bfd, ++ sdyn->output_section->vma + sdyn->output_offset, ++ sgotplt->contents); ++ bfd_put_32 (output_bfd, (bfd_vma) 0, sgotplt->contents + 4); ++ bfd_put_32 (output_bfd, (bfd_vma) 0, sgotplt->contents + 8); ++ } ++ ++ elf_section_data (sgotplt->output_section)->this_hdr.sh_entsize = 4; ++ ++ return TRUE; ++} ++ ++/* Adjust a symbol defined by a dynamic object and referenced by a ++ regular object. The current definition is in some section of the ++ dynamic object, but we're not including those sections. We have to ++ change the definition to something the rest of the link can ++ understand. */ ++ ++static bfd_boolean ++nios2_elf32_adjust_dynamic_symbol (struct bfd_link_info * info, ++ struct elf_link_hash_entry * h) ++{ ++ struct elf32_nios2_link_hash_table *htab; ++ bfd *dynobj; ++ asection *s; ++ unsigned align2; ++ ++ htab = elf32_nios2_hash_table (info); ++ dynobj = elf_hash_table (info)->dynobj; ++ ++ /* Make sure we know what is going on here. */ ++ BFD_ASSERT (dynobj != NULL ++ && (h->needs_plt ++ || h->u.weakdef != NULL ++ || (h->def_dynamic ++ && h->ref_regular ++ && !h->def_regular))); ++ ++ /* If this is a function, put it in the procedure linkage table. We ++ will fill in the contents of the procedure linkage table later, ++ when we know the address of the .got section. */ ++ if (h->type == STT_FUNC ++ || h->needs_plt) ++ { ++ if (h->plt.refcount <= 0 ++ || SYMBOL_CALLS_LOCAL (info, h) ++ || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT ++ && h->root.type == bfd_link_hash_undefweak)) ++ { ++ /* This case can occur if we saw a PLT reloc in an input ++ file, but the symbol was never referred to by a dynamic ++ object, or if all references were garbage collected. In ++ such a case, we don't actually need to build a procedure ++ linkage table, and we can just do a PCREL reloc instead. */ ++ h->plt.offset = (bfd_vma) -1; ++ h->needs_plt = 0; ++ } ++ ++ return TRUE; ++ } ++ ++ /* Reinitialize the plt offset now that it is not used as a reference ++ count any more. */ ++ h->plt.offset = (bfd_vma) -1; ++ ++ /* If this is a weak symbol, and there is a real definition, the ++ processor independent code will have arranged for us to see the ++ real definition first, and we can just use the same value. */ ++ if (h->u.weakdef != NULL) ++ { ++ BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined ++ || h->u.weakdef->root.type == bfd_link_hash_defweak); ++ h->root.u.def.section = h->u.weakdef->root.u.def.section; ++ h->root.u.def.value = h->u.weakdef->root.u.def.value; ++ return TRUE; ++ } ++ ++ /* If there are no non-GOT references, we do not need a copy ++ relocation. */ ++ if (!h->non_got_ref) ++ return TRUE; ++ ++ /* This is a reference to a symbol defined by a dynamic object which ++ is not a function. */ ++ ++ /* If we are creating a shared library, we must presume that the ++ only references to the symbol are via the global offset table. ++ For such cases we need not do anything here; the relocations will ++ be handled correctly by relocate_section. */ ++ if (info->shared) ++ return TRUE; ++ ++ if (h->size == 0) ++ { ++ (*_bfd_error_handler) (_("dynamic variable `%s' is zero size"), ++ h->root.root.string); ++ return TRUE; ++ } ++ ++ /* We must allocate the symbol in our .dynbss section, which will ++ become part of the .bss section of the executable. There will be ++ an entry for this symbol in the .dynsym section. The dynamic ++ object will contain position independent code, so all references ++ from the dynamic object to this symbol will go through the global ++ offset table. The dynamic linker will use the .dynsym entry to ++ determine the address it must put in the global offset table, so ++ both the dynamic object and the regular object will refer to the ++ same memory location for the variable. */ ++ ++ s = htab->sdynbss; ++ BFD_ASSERT (s != NULL); ++ ++ /* We must generate a R_NIOS2_COPY reloc to tell the dynamic linker to ++ copy the initial value out of the dynamic object and into the ++ runtime process image. We need to remember the offset into the ++ .rela.bss section we are going to use. */ ++ if ((h->root.u.def.section->flags & SEC_ALLOC) != 0) ++ { ++ asection *srel; ++ ++ srel = htab->srelbss; ++ BFD_ASSERT (srel != NULL); ++ srel->size += sizeof (Elf32_External_Rela); ++ h->needs_copy = 1; ++ } ++ ++ align2 = bfd_log2 (h->size); ++ if (align2 > h->root.u.def.section->alignment_power) ++ align2 = h->root.u.def.section->alignment_power; ++ ++ /* align dynbss */ ++ s->size = BFD_ALIGN (s->size, (bfd_size_type)1 << align2); ++ if (align2 > bfd_get_section_alignment (dynobj, s) ++ && !bfd_set_section_alignment (dynobj, s, align2)) ++ return FALSE; ++ ++ /* Define the symbol as being at this point in the section. */ ++ h->root.u.def.section = s; ++ h->root.u.def.value = s->size; ++ ++ /* Increment the section size to make room for the symbol. */ ++ s->size += h->size; ++ ++ return TRUE; ++} ++ ++static bfd_boolean ++adjust_dynrelocs (struct elf_link_hash_entry *h, PTR inf) ++{ ++ struct bfd_link_info *info; ++ struct elf32_nios2_link_hash_table *htab; ++ ++ if (h->root.type == bfd_link_hash_indirect) ++ return TRUE; ++ ++ if (h->root.type == bfd_link_hash_warning) ++ /* When warning symbols are created, they **replace** the "real" ++ entry in the hash table, thus we never get to see the real ++ symbol in a hash traversal. So look at it now. */ ++ h = (struct elf_link_hash_entry *) h->root.u.i.link; ++ ++ info = (struct bfd_link_info *) inf; ++ htab = elf32_nios2_hash_table (info); ++ ++ if (h->plt.offset != (bfd_vma)-1) ++ h->plt.offset += htab->res_n_size; ++ if (htab->splt == h->root.u.def.section) ++ h->root.u.def.value += htab->res_n_size; ++ ++ return TRUE; ++} ++ ++/* Allocate space in .plt, .got and associated reloc sections for ++ dynamic relocs. */ ++ ++static bfd_boolean ++allocate_dynrelocs (struct elf_link_hash_entry *h, PTR inf) ++{ ++ struct bfd_link_info *info; ++ struct elf32_nios2_link_hash_table *htab; ++ struct elf32_nios2_link_hash_entry *eh; ++ struct elf32_nios2_dyn_relocs *p; ++ int use_plt; ++ ++ if (h->root.type == bfd_link_hash_indirect) ++ return TRUE; ++ ++ if (h->root.type == bfd_link_hash_warning) ++ /* When warning symbols are created, they **replace** the "real" ++ entry in the hash table, thus we never get to see the real ++ symbol in a hash traversal. So look at it now. */ ++ h = (struct elf_link_hash_entry *) h->root.u.i.link; ++ ++ info = (struct bfd_link_info *) inf; ++ htab = elf32_nios2_hash_table (info); ++ ++ if (htab->root.dynamic_sections_created ++ && h->plt.refcount > 0) ++ { ++ /* Make sure this symbol is output as a dynamic symbol. ++ Undefined weak syms won't yet be marked as dynamic. */ ++ if (h->dynindx == -1 ++ && !h->forced_local) ++ { ++ if (! bfd_elf_link_record_dynamic_symbol (info, h)) ++ return FALSE; ++ } ++ ++ if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info->shared, h)) ++ { ++ asection *s = htab->splt; ++ ++ /* Allocate room for the header. */ ++ if (s->size == 0) ++ { ++ if (info->shared) ++ s->size = 24; ++ else ++ s->size = 28; ++ } ++ ++ h->plt.offset = s->size; ++ ++ /* If this symbol is not defined in a regular file, and we are ++ not generating a shared library, then set the symbol to this ++ location in the .plt. This is required to make function ++ pointers compare as equal between the normal executable and ++ the shared library. */ ++ if (! info->shared ++ && !h->def_regular) ++ { ++ h->root.u.def.section = s; ++ h->root.u.def.value = h->plt.offset; ++ } ++ ++ /* Make room for this entry. */ ++ s->size += 12; ++ ++ /* We also need to make an entry in the .rela.plt section. */ ++ htab->srelplt->size += sizeof (Elf32_External_Rela); ++ ++ /* And the .got.plt section. */ ++ htab->sgotplt->size += 4; ++ } ++ else ++ { ++ h->plt.offset = (bfd_vma) -1; ++ h->needs_plt = 0; ++ } ++ } ++ else ++ { ++ h->plt.offset = (bfd_vma) -1; ++ h->needs_plt = 0; ++ } ++ ++ eh = (struct elf32_nios2_link_hash_entry *) h; ++ use_plt = (eh->got_types_used == CALL16_USED && ++ h->plt.offset != (bfd_vma) -1); ++ ++ if (h->got.refcount > 0) ++ { ++ asection *s; ++ bfd_boolean dyn; ++ int tls_type = eh->tls_type; ++ int indx; ++ ++ /* Make sure this symbol is output as a dynamic symbol. ++ Undefined weak syms won't yet be marked as dynamic. */ ++ if (h->dynindx == -1 ++ && !h->forced_local) ++ { ++ if (! bfd_elf_link_record_dynamic_symbol (info, h)) ++ return FALSE; ++ } ++ ++ s = htab->sgot; ++ h->got.offset = s->size; ++ ++ if (tls_type == GOT_UNKNOWN) ++ abort (); ++ ++ if (tls_type == GOT_NORMAL) ++ /* Non-TLS symbols need one GOT slot. */ ++ s->size += 4; ++ else ++ { ++ if (tls_type & GOT_TLS_GD) ++ /* R_NIOS2_TLS_GD16 needs 2 consecutive GOT slots. */ ++ s->size += 8; ++ if (tls_type & GOT_TLS_IE) ++ /* R_NIOS2_TLS_IE16 needs one GOT slot. */ ++ s->size += 4; ++ } ++ ++ dyn = htab->root.dynamic_sections_created; ++ ++ indx = 0; ++ if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) ++ && (!info->shared ++ || !SYMBOL_REFERENCES_LOCAL (info, h))) ++ indx = h->dynindx; ++ ++ if (tls_type != GOT_NORMAL ++ && (info->shared || indx != 0) ++ && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT ++ || h->root.type != bfd_link_hash_undefweak)) ++ { ++ if (tls_type & GOT_TLS_IE) ++ htab->srelgot->size += sizeof (Elf32_External_Rela); ++ ++ if (tls_type & GOT_TLS_GD) ++ htab->srelgot->size += sizeof (Elf32_External_Rela); ++ ++ if ((tls_type & GOT_TLS_GD) && indx != 0) ++ htab->srelgot->size += sizeof (Elf32_External_Rela); ++ } ++ else if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT ++ || h->root.type != bfd_link_hash_undefweak) ++ && !use_plt && (info->shared ++ || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h))) ++ htab->srelgot->size += sizeof (Elf32_External_Rela); ++ } ++ else ++ h->got.offset = (bfd_vma) -1; ++ ++ if (eh->dyn_relocs == NULL) ++ return TRUE; ++ ++ /* In the shared -Bsymbolic case, discard space allocated for ++ dynamic pc-relative relocs against symbols which turn out to be ++ defined in regular objects. For the normal shared case, discard ++ space for pc-relative relocs that have become local due to symbol ++ visibility changes. */ ++ ++ if (info->shared) ++ { ++ if (h->def_regular ++ && (h->forced_local ++ || info->symbolic)) ++ { ++ struct elf32_nios2_dyn_relocs **pp; ++ ++ for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) ++ { ++ p->count -= p->pc_count; ++ p->pc_count = 0; ++ if (p->count == 0) ++ *pp = p->next; ++ else ++ pp = &p->next; ++ } ++ } ++ ++ /* Also discard relocs on undefined weak syms with non-default ++ visibility. */ ++ if (eh->dyn_relocs != NULL ++ && h->root.type == bfd_link_hash_undefweak) ++ { ++ if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT) ++ eh->dyn_relocs = NULL; ++ ++ /* Make sure undefined weak symbols are output as a dynamic ++ symbol in PIEs. */ ++ else if (h->dynindx == -1 ++ && !h->forced_local) ++ { ++ if (! bfd_elf_link_record_dynamic_symbol (info, h)) ++ return FALSE; ++ } ++ } ++ } ++ else ++ { ++ /* For the non-shared case, discard space for relocs against ++ symbols which turn out to need copy relocs or are not ++ dynamic. */ ++ ++ if (!h->non_got_ref ++ && ((h->def_dynamic ++ && !h->def_regular) ++ || (htab->root.dynamic_sections_created ++ && (h->root.type == bfd_link_hash_undefweak ++ || h->root.type == bfd_link_hash_undefined)))) ++ { ++ /* Make sure this symbol is output as a dynamic symbol. ++ Undefined weak syms won't yet be marked as dynamic. */ ++ if (h->dynindx == -1 ++ && !h->forced_local) ++ { ++ if (! bfd_elf_link_record_dynamic_symbol (info, h)) ++ return FALSE; ++ } ++ ++ /* If that succeeded, we know we'll be keeping all the ++ relocs. */ ++ if (h->dynindx != -1) ++ goto keep; ++ } ++ ++ eh->dyn_relocs = NULL; ++ ++ keep: ; ++ } ++ ++ /* Finally, allocate space. */ ++ for (p = eh->dyn_relocs; p != NULL; p = p->next) ++ { ++ asection *sreloc = elf_section_data (p->sec)->sreloc; ++ sreloc->size += p->count * sizeof (Elf32_External_Rela); ++ } ++ ++ return TRUE; ++} ++ ++/* Set the sizes of the dynamic sections. */ ++ ++static bfd_boolean ++nios2_elf32_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, ++ struct bfd_link_info *info) ++{ ++ bfd *dynobj; ++ asection *s; ++ bfd_boolean plt; ++ bfd_boolean got; ++ bfd_boolean relocs; ++ bfd *ibfd; ++ struct elf32_nios2_link_hash_table *htab; ++ ++ htab = elf32_nios2_hash_table (info); ++ dynobj = elf_hash_table (info)->dynobj; ++ BFD_ASSERT (dynobj != NULL); ++ ++ htab->res_n_size = 0; ++ if (elf_hash_table (info)->dynamic_sections_created) ++ { ++ /* Set the contents of the .interp section to the interpreter. */ ++ if (info->executable) ++ { ++ s = bfd_get_section_by_name (dynobj, ".interp"); ++ BFD_ASSERT (s != NULL); ++ s->size = sizeof ELF_DYNAMIC_INTERPRETER; ++ s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER; ++ } ++ } ++ else ++ { ++ /* We may have created entries in the .rela.got section. ++ However, if we are not creating the dynamic sections, we will ++ not actually use these entries. Reset the size of .rela.got, ++ which will cause it to get stripped from the output file ++ below. */ ++ s = htab->srelgot; ++ if (s != NULL) ++ s->size = 0; ++ } ++ ++ /* Set up .got offsets for local syms, and space for local dynamic ++ relocs. */ ++ for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next) ++ { ++ bfd_signed_vma *local_got; ++ bfd_signed_vma *end_local_got; ++ char *local_tls_type; ++ bfd_size_type locsymcount; ++ Elf_Internal_Shdr *symtab_hdr; ++ asection *srel; ++ ++ if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour) ++ continue; ++ ++ for (s = ibfd->sections; s != NULL; s = s->next) ++ { ++ struct elf32_nios2_dyn_relocs *p; ++ ++ for (p = elf_section_data (s)->local_dynrel; p != NULL; p = p->next) ++ { ++ if (!bfd_is_abs_section (p->sec) ++ && bfd_is_abs_section (p->sec->output_section)) ++ { ++ /* Input section has been discarded, either because ++ it is a copy of a linkonce section or due to ++ linker script /DISCARD/, so we'll be discarding ++ the relocs too. */ ++ } ++ else if (p->count != 0) ++ { ++ srel = elf_section_data (p->sec)->sreloc; ++ srel->size += p->count * sizeof (Elf32_External_Rela); ++ if ((p->sec->output_section->flags & SEC_READONLY) != 0) ++ info->flags |= DF_TEXTREL; ++ } ++ } ++ } ++ ++ local_got = elf_local_got_refcounts (ibfd); ++ if (!local_got) ++ continue; ++ ++ symtab_hdr = &elf_tdata (ibfd)->symtab_hdr; ++ locsymcount = symtab_hdr->sh_info; ++ end_local_got = local_got + locsymcount; ++ local_tls_type = elf32_nios2_local_got_tls_type (ibfd); ++ s = htab->sgot; ++ srel = htab->srelgot; ++ for (; local_got < end_local_got; ++local_got, ++local_tls_type) ++ { ++ if (*local_got > 0) ++ { ++ *local_got = s->size; ++ if (*local_tls_type & GOT_TLS_GD) ++ /* TLS_GD relocs need an 8-byte structure in the GOT. */ ++ s->size += 8; ++ if (*local_tls_type & GOT_TLS_IE) ++ s->size += 4; ++ if (*local_tls_type == GOT_NORMAL) ++ s->size += 4; ++ ++ if (info->shared || *local_tls_type == GOT_TLS_GD) ++ srel->size += sizeof (Elf32_External_Rela); ++ } ++ else ++ *local_got = (bfd_vma) -1; ++ } ++ } ++ ++ if (htab->tls_ldm_got.refcount > 0) ++ { ++ /* Allocate two GOT entries and one dynamic relocation (if necessary) ++ for R_NIOS2_TLS_LDM16 relocations. */ ++ htab->tls_ldm_got.offset = htab->sgot->size; ++ htab->sgot->size += 8; ++ if (info->shared) ++ htab->srelgot->size += sizeof (Elf32_External_Rela); ++ } ++ else ++ htab->tls_ldm_got.offset = -1; ++ ++ /* Allocate global sym .plt and .got entries, and space for global ++ sym dynamic relocs. */ ++ elf_link_hash_traverse (& htab->root, allocate_dynrelocs, info); ++ ++ /* The check_relocs and adjust_dynamic_symbol entry points have ++ determined the sizes of the various dynamic sections. Allocate ++ memory for them. */ ++ plt = FALSE; ++ got = FALSE; ++ relocs = FALSE; ++ for (s = dynobj->sections; s != NULL; s = s->next) ++ { ++ const char *name; ++ ++ if ((s->flags & SEC_LINKER_CREATED) == 0) ++ continue; ++ ++ /* It's OK to base decisions on the section name, because none ++ of the dynobj section names depend upon the input files. */ ++ name = bfd_get_section_name (dynobj, s); ++ ++ if (strcmp (name, ".plt") == 0) ++ { ++ /* Remember whether there is a PLT. */ ++ plt = s->size != 0; ++ ++ /* Correct for the number of res_N branches. */ ++ if (plt && !info->shared) ++ { ++ htab->res_n_size = (s->size-28) / 3; ++ s->size += htab->res_n_size; ++ } ++ } ++ else if (CONST_STRNEQ (name, ".rela")) ++ { ++ if (s->size != 0) ++ { ++ relocs = TRUE; ++ ++ /* We use the reloc_count field as a counter if we need ++ to copy relocs into the output file. */ ++ s->reloc_count = 0; ++ } ++ } ++ else if (CONST_STRNEQ (name, ".got")) ++ got = s->size != 0; ++ else if (strcmp (name, ".dynbss") != 0) ++ { ++ /* It's not one of our sections, so don't allocate space. */ ++ continue; ++ } ++ ++ if (s->size == 0) ++ { ++ /* If we don't need this section, strip it from the ++ output file. This is mostly to handle .rela.bss and ++ .rela.plt. We must create both sections in ++ create_dynamic_sections, because they must be created ++ before the linker maps input sections to output ++ sections. The linker does that before ++ adjust_dynamic_symbol is called, and it is that ++ function which decides whether anything needs to go ++ into these sections. */ ++ s->flags |= SEC_EXCLUDE; ++ continue; ++ } ++ ++ if ((s->flags & SEC_HAS_CONTENTS) == 0) ++ continue; ++ ++ /* Allocate memory for the section contents. */ ++ /* FIXME: This should be a call to bfd_alloc not bfd_zalloc. ++ Unused entries should be reclaimed before the section's contents ++ are written out, but at the moment this does not happen. Thus in ++ order to prevent writing out garbage, we initialise the section's ++ contents to zero. */ ++ s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->size); ++ if (s->contents == NULL) ++ return FALSE; ++ } ++ ++ /* Adjust dynamic symbols that point to the plt to account for the ++ now-known number of resN slots. */ ++ if (htab->res_n_size) ++ elf_link_hash_traverse (& htab->root, adjust_dynrelocs, info); ++ ++ if (elf_hash_table (info)->dynamic_sections_created) ++ { ++ /* Add some entries to the .dynamic section. We fill in the ++ values later, in elf_nios2_finish_dynamic_sections, but we ++ must add the entries now so that we get the correct size for ++ the .dynamic section. The DT_DEBUG entry is filled in by the ++ dynamic linker and used by the debugger. */ ++#define add_dynamic_entry(TAG, VAL) \ ++ _bfd_elf_add_dynamic_entry (info, TAG, VAL) ++ ++ if (!info->shared) ++ { ++ if (!add_dynamic_entry (DT_DEBUG, 0)) ++ return FALSE; ++ } ++ ++ if (got) ++ if (!add_dynamic_entry (DT_PLTGOT, 0)) ++ return FALSE; ++ ++ if (plt) ++ if (!add_dynamic_entry (DT_PLTRELSZ, 0) ++ || !add_dynamic_entry (DT_PLTREL, DT_RELA) ++ || !add_dynamic_entry (DT_JMPREL, 0)) ++ return FALSE; ++ ++ if (relocs) ++ { ++ if (!add_dynamic_entry (DT_RELA, 0) ++ || !add_dynamic_entry (DT_RELASZ, 0) ++ || !add_dynamic_entry (DT_RELAENT, sizeof (Elf32_External_Rela))) ++ return FALSE; ++ } ++ ++ if (!info->shared) ++ { ++ if (!add_dynamic_entry (DT_NIOS2_GP, 0)) ++ return FALSE; ++ } ++ ++ if ((info->flags & DF_TEXTREL) != 0) ++ { ++ if (!add_dynamic_entry (DT_TEXTREL, 0)) ++ return FALSE; ++ } ++ } ++#undef add_dynamic_entry ++ ++ return TRUE; ++} ++ ++/* Create a Nios II elf linker hash table. */ ++ ++static struct bfd_link_hash_table * ++nios2_elf32_link_hash_table_create (bfd *abfd) ++{ ++ struct elf32_nios2_link_hash_table *ret; ++ bfd_size_type amt = sizeof (struct elf32_nios2_link_hash_table); ++ ++ ret = bfd_malloc (amt); ++ if (ret == NULL) ++ return NULL; ++ ++ if (!_bfd_elf_link_hash_table_init (& ret->root, abfd, ++ link_hash_newfunc, ++ sizeof (struct ++ elf32_nios2_link_hash_entry))) ++ { ++ free (ret); ++ return NULL; ++ } ++ ++ ret->sgot = NULL; ++ ret->sgotplt = NULL; ++ ret->srelgot = NULL; ++ ret->splt = NULL; ++ ret->srelplt = NULL; ++ ret->sdynbss = NULL; ++ ret->srelbss = NULL; ++ ret->sbss = NULL; ++ ret->tls_ldm_got.refcount = 0; ++ ret->sym_sec.abfd = NULL; ++ return &ret->root.root; ++} ++ ++static enum elf_reloc_type_class ++nios2_elf32_reloc_type_class (const Elf_Internal_Rela *rela) ++{ ++ switch ((int) ELF32_R_TYPE (rela->r_info)) ++ { ++ case R_NIOS2_RELATIVE: ++ return reloc_class_relative; ++ case R_NIOS2_JUMP_SLOT: ++ return reloc_class_plt; ++ case R_NIOS2_COPY: ++ return reloc_class_copy; ++ default: ++ return reloc_class_normal; ++ } ++} ++ ++/* Return 1 if target is one of ours. */ ++ ++static bfd_boolean ++is_nios2_elf_target (const struct bfd_target *targ) ++{ ++ return (targ == &bfd_elf32_littlenios2_vec ++ || targ == &bfd_elf32_bignios2_vec); ++} ++ ++/* Hook called by the linker routine which adds symbols from an object ++ file. We use it to put .comm items in .sbss, and not .bss. */ ++ ++static bfd_boolean ++nios2_elf_add_symbol_hook (bfd *abfd, ++ struct bfd_link_info *info, ++ Elf_Internal_Sym *sym, ++ const char **namep ATTRIBUTE_UNUSED, ++ flagword *flagsp ATTRIBUTE_UNUSED, ++ asection **secp, ++ bfd_vma *valp) ++{ ++ bfd *dynobj; ++ ++ if (sym->st_shndx == SHN_COMMON ++ && !info->relocatable ++ && sym->st_size <= elf_gp_size (abfd) ++ && is_nios2_elf_target (info->hash->creator)) ++ { ++ /* Common symbols less than or equal to -G nn bytes are automatically ++ put into .sbss. */ ++ struct elf32_nios2_link_hash_table *htab; ++ ++ htab = elf32_nios2_hash_table (info); ++ if (htab->sbss == NULL) ++ { ++ flagword flags = SEC_IS_COMMON | SEC_LINKER_CREATED; ++ ++ dynobj = elf_hash_table (info)->dynobj; ++ if (!dynobj) ++ dynobj = abfd; ++ ++ htab->sbss = bfd_make_section_anyway_with_flags (dynobj, ".sbss", ++ flags); ++ if (htab->sbss == NULL) ++ return FALSE; ++ } ++ ++ *secp = htab->sbss; ++ *valp = sym->st_size; ++ } ++ ++ return TRUE; ++} ++ ++/* Decide whether to attempt to turn absptr or lsda encodings in ++ shared libraries into pcrel within the given input section. */ ++ ++static bfd_boolean ++nios2_elf32_can_make_relative_eh_frame(bfd *input_bfd ATTRIBUTE_UNUSED, ++ struct bfd_link_info *info ++ ATTRIBUTE_UNUSED, ++ asection *eh_frame_section ++ ATTRIBUTE_UNUSED) ++{ ++ /* We can't use PC-relative encodings in the .eh_frame section. */ ++ return FALSE; ++} ++ ++#define ELF_ARCH bfd_arch_nios2 ++#define ELF_MACHINE_CODE EM_ALTERA_NIOS2 ++ ++/* The Nios II MMU uses a 4K page size. */ ++ ++#define ELF_MAXPAGESIZE 0x1000 ++ ++#define bfd_elf32_bfd_link_hash_table_create \ ++ nios2_elf32_link_hash_table_create ++ ++/* Relocation table lookup macros. */ ++ ++#define bfd_elf32_bfd_reloc_type_lookup nios2_elf32_bfd_reloc_type_lookup ++#define bfd_elf32_bfd_reloc_name_lookup nios2_elf32_bfd_reloc_name_lookup ++ ++/* JUMP_TABLE_LINK macros. */ ++ ++#define bfd_elf32_bfd_relax_section nios2_elf32_relax_section ++ ++/* elf_info_to_howto (using RELA relocations). */ ++ ++#define elf_info_to_howto nios2_elf32_info_to_howto ++ ++/* elf backend functions. */ ++ ++#define elf_backend_can_gc_sections 1 ++#define elf_backend_can_refcount 1 ++#define elf_backend_plt_readonly 1 ++#define elf_backend_want_got_plt 1 ++ ++#define elf_backend_relocate_section nios2_elf32_relocate_section ++#define elf_backend_section_from_shdr nios2_elf32_section_from_shdr ++#define elf_backend_section_flags nios2_elf32_section_flags ++#define elf_backend_fake_sections nios2_elf32_fake_sections ++#define elf_backend_check_relocs nios2_elf32_check_relocs ++ ++#define elf_backend_gc_mark_hook nios2_elf32_gc_mark_hook ++#define elf_backend_gc_sweep_hook nios2_elf32_gc_sweep_hook ++#define elf_backend_create_dynamic_sections \ ++ nios2_elf32_create_dynamic_sections ++#define elf_backend_finish_dynamic_symbol nios2_elf32_finish_dynamic_symbol ++#define elf_backend_finish_dynamic_sections \ ++ nios2_elf32_finish_dynamic_sections ++#define elf_backend_adjust_dynamic_symbol nios2_elf32_adjust_dynamic_symbol ++#define elf_backend_reloc_type_class nios2_elf32_reloc_type_class ++#define elf_backend_size_dynamic_sections nios2_elf32_size_dynamic_sections ++#define elf_backend_add_symbol_hook nios2_elf_add_symbol_hook ++#define elf_backend_copy_indirect_symbol nios2_elf32_copy_indirect_symbol ++ ++#define elf_backend_grok_prstatus nios2_grok_prstatus ++#define elf_backend_grok_psinfo nios2_grok_psinfo ++ ++#undef elf_backend_can_make_relative_eh_frame ++#define elf_backend_can_make_relative_eh_frame \ ++ nios2_elf32_can_make_relative_eh_frame ++ ++/* Support for SGI-ish mips targets. */ ++#define TARGET_LITTLE_SYM bfd_elf32_littlenios2_vec ++#define TARGET_LITTLE_NAME "elf32-littlenios2" ++#define TARGET_BIG_SYM bfd_elf32_bignios2_vec ++#define TARGET_BIG_NAME "elf32-bignios2" ++ ++#define elf_backend_got_header_size 12 ++ ++#include "elf32-target.h" +Index: binutils-2.17.50.0.12/gas/config/tc-nios2.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/config/tc-nios2.c 2010-07-05 14:50:39.000000000 +0200 +@@ -0,0 +1,3361 @@ ++/* NOT ASSIGNED TO FSF. COPYRIGHT ALTERA. */ ++/* tc-nios2.c -- assemble code for a New Jersey processor. ++ ++ Copyright (C) 2003 ++ by Nigel Gray (ngray@altera.com). ++ ++ ++ This file is part of GAS. ++ ++ GAS is free software; you can 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. ++ ++ GAS is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with GAS; see the file COPYING. If not, write to the Free ++ Software Foundation, 59 Temple Place - Suite 330, Boston, MA ++ 02111-1307, USA. */ ++ ++ ++#include <stdio.h> ++#include <limits.h> ++#include <string.h> ++#include <stdlib.h> ++#include "as.h" ++#include "opcode/nios2.h" ++#include "elf/nios2.h" ++#include "tc-nios2.h" ++#include "bfd.h" ++#include "dwarf2dbg.h" ++#include "subsegs.h" ++#include "safe-ctype.h" ++#include "dw2gencfi.h" ++ ++/* We can choose our endianness at run-time, regardless of configuration. */ ++extern int target_big_endian; ++ ++#ifndef OBJ_ELF ++ /* We are not supporting any other target ++ so we throw a compile time error. */ ++OBJ_ELF not defined ++#endif ++ typedef enum ++{ ++ relax_section = 0, ++ relax_none, ++ relax_all ++} ++relax_optionT; ++ ++ ++/* Struct contains all assembler options set with .set. */ ++struct ++{ ++ /* .set noat -> noat = 1 allows assembly code to use at without warning ++ and macro expansions will generate a warning. ++ .set at -> noat = 0, assembly code using at will warn ++ macro expansions will not generate warnings. */ ++ bfd_boolean noat; ++ ++ /* .set nobreak -> nobreak = 1 allows assembly code to use ba,bt without ++ warning. ++ .set break -> nobreak = 0, assembly code using ba,bt will warn. */ ++ bfd_boolean nobreak; ++ ++ /* .cmd line option -relax-all allows all branches and calls to be replaced ++ with longer versions. ++ -no-relax inhibits branch/call conversion. ++ default value is relax_section, which relaxes branches within a section. ++ */ ++ relax_optionT relax; ++ ++} ++nios2_as_options = ++{ ++FALSE, FALSE, relax_section}; ++ ++ ++typedef struct nios2_insn_reloc ++{ ++ /* Any expression in the instruction is parsed into ++ this field which is passed to fix_new_exp() to ++ generate a fixup. */ ++ expressionS reloc_expression; ++ ++ /* The type of the relocation to be applied. */ ++ bfd_reloc_code_real_type reloc_type; ++ ++ /* pc relative. */ ++ unsigned int reloc_pcrel; ++ ++ /* The next relocation to be applied to the instruction. */ ++ struct nios2_insn_reloc *reloc_next; ++} ++nios2_insn_relocS; ++ ++ ++/* ------------------------------------------------------------------ ++ This struct is used by the functions in tc-nios2.c to assemble an ++ instruction ++ ------------------------------------------------------------------*/ ++ ++typedef struct nios2_insn_info ++{ ++ /* Assembled instruction. */ ++ unsigned long insn_code; ++ /* Pointer to the relevant bit of the opcode table. */ ++ const struct nios2_opcode *insn_nios2_opcode; ++ /* After parsing ptrs to the tokens in the instruction fill this array ++ it is terminated with a null pointer (hence the first +1). ++ The second +1 is because in some parts of the code the opcode ++ is not counted as a token, but still placed in this array. */ ++ const char *insn_tokens[NIOS2_MAX_INSN_TOKENS + 1 + 1]; ++ ++ /* This holds information used to generate fixups ++ and eventually relocations if it is not null. */ ++ nios2_insn_relocS *insn_reloc; ++} ++nios2_insn_infoS; ++ ++ ++/* This struct associates an argument assemble function with ++ an argument syntax string. Used by the assembler to find out ++ how to parse and assemble a set of instruction operands and ++ return the instruction field values. */ ++ ++typedef struct nios2_arg_info ++{ ++ const char *args; ++ void (*assemble_args_func) (nios2_insn_infoS * insn_info); ++} ++nios2_arg_infoS; ++ ++/* This struct is used to convert New Jersey pseudo-ops into the ++ corresponding real op. */ ++typedef struct nios2_ps_insn_info ++{ ++ const char *pseudo_insn; ++ const char *insn; ++ const char *arg_modifier; ++ void (*arg_modifer_func) (const char *arg, char **parsedArgs, int numArg, ++ int startIndex); ++ int num; ++ int index; ++} ++nios2_ps_insn_infoS; ++ ++ ++ ++/* Function prototypes. */ ++static void NIOS2_CHECK_ASSEMBLY (unsigned int opcode, ++ const char *exp_opcode); ++static void s_nios2_sdata (int); ++void nios2_assemble_args_dst (nios2_insn_infoS * insn_info); ++void nios2_assemble_args_tsi (nios2_insn_infoS * insn_info); ++void nios2_assemble_args_tsu (nios2_insn_infoS * insn_info); ++void nios2_assemble_args_o (nios2_insn_infoS * insn_info); ++void nios2_assemble_args_m (nios2_insn_infoS * insn_info); ++void nios2_assemble_args_s (nios2_insn_infoS * insn_info); ++void nios2_assemble_args_tis (nios2_insn_infoS * insn_info); ++void nios2_assemble_args_dc (nios2_insn_infoS * insn_info); ++void nios2_assemble_args_cs (nios2_insn_infoS * insn_info); ++void nios2_assemble_args_ldst (nios2_insn_infoS * insn_info); ++void nios2_assemble_args_none (nios2_insn_infoS * insn_info); ++void nios2_assemble_args_dsj (nios2_insn_infoS * insn_info); ++void nios2_assemble_args_is (nios2_insn_infoS * insn_info); ++void nios2_assemble_args_sto (nios2_insn_infoS * insn_info); ++void nios2_assemble_args_d (nios2_insn_infoS * insn_info); ++void nios2_assemble_args_b (nios2_insn_infoS * insn_info); ++ ++nios2_insn_relocS *nios2_insn_reloc_new (bfd_reloc_code_real_type reloc_type, ++ unsigned int pcrel); ++void nios2_insn_reloc_destroy (nios2_insn_relocS * reloc); ++unsigned long nios2_assemble_expression (const char *exprstr, ++ nios2_insn_infoS * insn, ++ nios2_insn_relocS * prev_reloc, ++ bfd_reloc_code_real_type reloc_type, ++ unsigned int pcrel); ++char *nios2_consume_separator (char *argStr, const char *separator); ++char *nios2_consume_arg (char *argStr, const char *argType); ++void nios2_parse_args (char *argStr, const char *parseStr, char **parsedArgs); ++ ++void nios2_modify_arg (const char *modifier, char **parsedArgs, int unused, ++ int index); ++void nios2_append_arg (const char *append, char **parsedArgs, int numAppend, ++ int startIndex); ++void nios2_insert_arg (const char *insert, char **parsedArgs, int numInsert, ++ int startIndex); ++void nios2_swap_args (const char *unused, char **parsedArgs, int index_1, ++ int index_2); ++void nios2_negate_arg (const char *modifier ATTRIBUTE_UNUSED, ++ char **parsedArgs, int unused ATTRIBUTE_UNUSED, ++ int index); ++void nios2_translate_pseudo_insn (nios2_insn_infoS * insn); ++void md_apply_fix (fixS * fixP, valueT * valP, segT seg ATTRIBUTE_UNUSED); ++valueT md_chars_to_number (char *buf, int n); ++void md_number_to_imm (char *buf, valueT val, int n); ++void md_number_to_disp (char *buf, valueT val, int n); ++void md_number_to_field (char *buf, valueT val, int n); ++static void nios2_align (int log_size, const char *pfill, symbolS * sym); ++static void s_nios2_ucons (int nbytes); ++static void s_nios2_set (int equiv); ++static void s_nios2_align (int ignore); ++static void s_nios2_text (int); ++static void s_nios2_data (int); ++static void s_nios2_section (int); ++static bfd_boolean nios2_coproc_reg (const char *reg_name); ++static void output_insn (void); ++static void output_ubranch (void); ++static void output_cbranch (void); ++static void output_call (void); ++static void output_movia (void); ++static void output_andi (void); ++static void output_addi (void); ++static void output_ori (void); ++static void output_xori (void); ++static int can_evaluate_expr (void); ++static int get_expr_value (void); ++ ++ ++bfd_boolean nios2_check_overflow (valueT fixup, reloc_howto_type * howto); ++ ++/* The known current alignment of the current section. */ ++static int nios2_current_align; ++static segT nios2_current_align_seg; ++ ++/* The last seen label in the current section. This is used to auto-align ++ labels preceeding instructions. */ ++static symbolS *nios2_last_label; ++ ++ ++static int nios2_auto_align_on = 1; ++ ++/* This array holds the chars that always start a comment. If the ++ pre-processor is disabled, these aren't very useful. */ ++const char comment_chars[] = "#"; ++ ++/* This array holds the chars that only start a comment at the beginning of ++ a line. If the line seems to have the form '# 123 filename' ++ .line and .file directives will appear in the pre-processed output. */ ++/* Note that input_file.c hand checks for '#' at the beginning of the ++ first line of the input file. This is because the compiler outputs ++ #NO_APP at the beginning of its output. */ ++/* Also note that C style comments are always supported. */ ++const char line_comment_chars[] = "#"; ++ ++/* This array holds machine specific line separator characters. */ ++const char line_separator_chars[] = ";"; ++ ++/* Chars that can be used to separate mant from exp in floating point nums. */ ++const char EXP_CHARS[] = "eE"; ++ ++/* Chars that mean this number is a floating point constant. */ ++/* As in 0f12.456 */ ++/* or 0d1.2345e12 */ ++const char FLT_CHARS[] = "rRsSfFdDxXpP"; ++ ++/* Also be aware that MAXIMUM_NUMBER_OF_CHARS_FOR_FLOAT may have to be ++ changed in read.c. Ideally it shouldn't have to know about it at all, ++ but nothing is ideal around here. */ ++ ++/* Handle of the OPCODE hash table. */ ++static struct hash_control *nios2_opcode_hash = NULL; ++ ++/* Handle of the Register hash table. */ ++static struct hash_control *nios2_reg_hash = NULL; ++ ++/* Handle of the parse args hash table. */ ++static struct hash_control *nios2_arg_hash = NULL; ++ ++/* Pseudo-op hash table. */ ++static struct hash_control *nios2_ps_hash = NULL; ++ ++#ifdef OBJ_ELF ++/* Pre-defined "_GLOBAL_OFFSET_TABLE_" */ ++symbolS * GOT_symbol; ++#endif ++ ++#define streq(a, b) (strcmp (a, b) == 0) ++ ++/* Mode of the assembler. */ ++typedef enum ++{ ++ NIOS2_MODE_ASSEMBLE, /* Ordinary operation. */ ++ NIOS2_MODE_TEST /* Hidden mode used for self testing. */ ++} ++NIOS2_MODE; ++ ++static NIOS2_MODE nios2_mode = NIOS2_MODE_ASSEMBLE; ++ ++/* This function is used to in self-checking mode ++ to check the assembled instruction ++ opcode should be the assembled opcode, and exp_opcode ++ the parsed string representing the expected opcode. */ ++void ++NIOS2_CHECK_ASSEMBLY (unsigned int opcode, const char *exp_opcode) ++{ ++ if (nios2_mode == NIOS2_MODE_TEST) ++ { ++ if ((exp_opcode) == NULL) ++ { ++ as_bad (_("expecting opcode string in self test mode")); ++ } ++ else if ((opcode) != strtoul ((exp_opcode), NULL, 16)) ++ { ++ as_bad (_("assembly 0x%08x, expected %s"), (opcode), (exp_opcode)); ++ } ++ } ++} ++ ++/* Machine-dependent command-line options. */ ++ ++const char *md_shortopts = "r"; ++ ++struct option md_longopts[] = { ++#define OPTION_RELAX_ALL (OPTION_MD_BASE + 0) ++ {"relax-all", no_argument, NULL, OPTION_RELAX_ALL}, ++#define OPTION_NORELAX (OPTION_MD_BASE + 1) ++ {"no-relax", no_argument, NULL, OPTION_NORELAX}, ++#define OPTION_RELAX_SECTION (OPTION_MD_BASE + 2) ++ {"relax-section", no_argument, NULL, OPTION_RELAX_SECTION}, ++#define OPTION_EB (OPTION_MD_BASE + 3) ++ {"EB", no_argument, NULL, OPTION_EB}, ++#define OPTION_EL (OPTION_MD_BASE + 4) ++ {"EL", no_argument, NULL, OPTION_EL} ++}; ++ ++size_t md_longopts_size = sizeof (md_longopts); ++ ++/* Machine dependent pseudo-ops. ++ These are actually assembler directives. ++ Format of each entry is: ++ ++ { "directive", handler_func, param } */ ++const pseudo_typeS md_pseudo_table[] = { ++ {"align", s_nios2_align, 0}, ++ {"text", s_nios2_text, 0}, ++ {"data", s_nios2_data, 0}, ++ {"section", s_nios2_section, 0}, ++ {"section.s", s_nios2_section, 0}, ++ {"sect", s_nios2_section, 0}, ++ {"sect.s", s_nios2_section, 0}, ++ /* .dword and .half are included for compatibility with MIPS. */ ++ {"dword", cons, 8}, ++ {"half", cons, 2}, ++ /* NIOS2 native word size is 4 bytes, so we override ++ the GAS default of 2. */ ++ {"word", cons, 4}, ++ /* Explicitly unaligned directives. */ ++ {"2byte", s_nios2_ucons, 2}, ++ {"4byte", s_nios2_ucons, 4}, ++ {"8byte", s_nios2_ucons, 8}, ++ {"16byte", s_nios2_ucons, 16}, ++#ifdef OBJ_ELF ++ {"sdata", s_nios2_sdata, 0}, ++#endif ++ {"set", s_nios2_set, 0}, ++ {NULL, NULL, 0} ++}; ++ ++#define BYTE_F 32764 ++#define BYTE_B -32768 ++#define ABS (long)0xffffffff /* Special value to indicate ++ non-pc relative jmp. */ ++ ++#define UBRANCH 1 ++#define UJMP 2 ++#define CBRANCH 3 ++#define CJMP 4 ++ ++ ++#define RELAX_MAX_SIZE(type) nios2_relax_table[nios2_relax_table[type \ ++ ].rlx_more].rlx_length ++#define RELAX_SIZE(type) nios2_relax_table[type].rlx_length ++#define RELAX_SUBSTATE(type) type ++ ++/* Machine dependent relaxations. */ ++struct relax_type nios2_relax_table[] = { ++ /* First entry unused (ends relaxation sequence). */ ++ {1, 1, 0, 0}, ++ /* Unconditional branch. */ ++ {BYTE_F, BYTE_B, 4, 2}, /* br label (label is in range) */ ++ /* Unconditional jmp. */ ++ {ABS, ABS, 12, 0}, /* movhi at, %hi(label) ; ++ ori at, %lo(label) ; jmp at */ ++ /* Conditional branch. */ ++ {BYTE_F, BYTE_B, 4, 4}, /* br{cond} label (label is in range) */ ++ /* Conditional jmp. */ ++ {ABS, ABS, 16, 0}, /* br{opp_cond} skip ; movhi at, %hi(label) ; ++ ori at, %lo(label) ; jmp at ; skip: } */ ++}; ++ ++ ++/* This is just the generic relax_frag function but ++ amended to include absolute jmps in the relax table. */ ++ ++long ++nios2_relax_frag (segT segment, fragS * fragP, long stretch) ++{ ++ const relax_typeS *this_type; ++ const relax_typeS *start_type; ++ relax_substateT next_state; ++ relax_substateT this_state; ++ long growth; ++ offsetT aim; ++ addressT target; ++ addressT address; ++ symbolS *symbolP; ++ const relax_typeS *table; ++ ++ target = fragP->fr_offset; ++ address = fragP->fr_address; ++ table = nios2_relax_table; ++ this_state = fragP->fr_subtype; ++ start_type = this_type = table + this_state; ++ symbolP = fragP->fr_symbol; ++ ++ if (symbolP) ++ { ++ fragS *sym_frag; ++ ++ sym_frag = symbol_get_frag (symbolP); ++ ++#ifndef DIFF_EXPR_OK ++#if 0 ++#if !defined (MANY_SEGMENTS) && !defined (BFD_ASSEMBLER) ++ know ((S_GET_SEGMENT (symbolP) == SEG_ABSOLUTE) ++ || (S_GET_SEGMENT (symbolP) == SEG_DATA) ++ || (S_GET_SEGMENT (symbolP) == SEG_BSS) ++ || (S_GET_SEGMENT (symbolP) == SEG_TEXT)); ++#endif ++#endif ++ know (sym_frag != NULL); ++#endif ++ know (!(S_GET_SEGMENT (symbolP) == absolute_section) ++ || sym_frag == &zero_address_frag); ++ target += S_GET_VALUE (symbolP); ++ ++ /* If frag has yet to be reached on this pass, ++ assume it will move by STRETCH just as we did. ++ If this is not so, it will be because some frag ++ between grows, and that will force another pass. */ ++ ++ if (stretch != 0 ++ && sym_frag->relax_marker != fragP->relax_marker ++ && S_GET_SEGMENT (symbolP) == segment) ++ { ++ target += stretch; ++ } ++ } ++ ++ ++ /* NG we subtract 4 because all pc relative branches are ++ from the next instruction. */ ++ aim = target - address - fragP->fr_fix - 4; ++ ++ if (aim < 0) ++ { ++ /* Look backwards. */ ++ for (next_state = this_type->rlx_more; next_state;) ++ { ++ if (aim >= this_type->rlx_backward ++ || this_type->rlx_backward == ABS) ++ next_state = 0; ++ else ++ { ++ /* Grow to next state. */ ++ this_state = next_state; ++ this_type = table + this_state; ++ next_state = this_type->rlx_more; ++ } ++ } ++ } ++ else ++ { ++ /* Look forwards. */ ++ ++ for (next_state = this_type->rlx_more; next_state;) ++ { ++ if (aim <= this_type->rlx_forward || this_type->rlx_forward == ABS) ++ next_state = 0; ++ else ++ { ++ /* Grow to next state. */ ++ this_state = next_state; ++ this_type = table + this_state; ++ next_state = this_type->rlx_more; ++ } ++ } ++ } ++ ++ ++ growth = this_type->rlx_length - start_type->rlx_length; ++ ++ if (growth != 0) ++ fragP->fr_subtype = this_state; ++ ++ return growth; ++} ++ ++/*-------------------------------------------------------------------------------- ++ The next table associates pointers to functions which parse the arguments to an ++ instruction and fill in the relevant fields of the instruction ++ --------------------------------------------------------------------------------*/ ++ ++const nios2_arg_infoS nios2_arg_info_structs[] = { ++ /* args, assemble_args_func */ ++ {"d,s,t", nios2_assemble_args_dst}, ++ {"d,s,t,E", nios2_assemble_args_dst}, ++ {"t,s,i", nios2_assemble_args_tsi}, ++ {"t,s,i,E", nios2_assemble_args_tsi}, ++ {"t,s,u", nios2_assemble_args_tsu}, ++ {"t,s,u,E", nios2_assemble_args_tsu}, ++ {"s,t,o", nios2_assemble_args_sto}, ++ {"s,t,o,E", nios2_assemble_args_sto}, ++ {"o", nios2_assemble_args_o}, ++ {"o,E", nios2_assemble_args_o}, ++ {"s", nios2_assemble_args_s}, ++ {"s,E", nios2_assemble_args_s}, ++ {"", nios2_assemble_args_none}, ++ {"E", nios2_assemble_args_none}, ++ {"i(s)", nios2_assemble_args_is}, ++ {"i(s)E", nios2_assemble_args_is}, ++ {"m", nios2_assemble_args_m}, ++ {"m,E", nios2_assemble_args_m}, ++ {"t,i(s)", nios2_assemble_args_tis}, ++ {"t,i(s)E", nios2_assemble_args_tis}, ++ {"d,c", nios2_assemble_args_dc}, ++ {"d,c,E", nios2_assemble_args_dc}, ++ {"c,s", nios2_assemble_args_cs}, ++ {"c,s,E", nios2_assemble_args_cs}, ++ {"l,d,s,t", nios2_assemble_args_ldst}, ++ {"l,d,s,t,E", nios2_assemble_args_ldst}, ++ {"d,s,j", nios2_assemble_args_dsj}, ++ {"d,s,j,E", nios2_assemble_args_dsj}, ++ {"d", nios2_assemble_args_d}, ++ {"d,E", nios2_assemble_args_d}, ++ {"b", nios2_assemble_args_b}, ++ {"b,E", nios2_assemble_args_b} ++}; ++ ++#define NIOS2_NUM_ARGS \ ++ ((sizeof(nios2_arg_info_structs)/sizeof(nios2_arg_info_structs[0]))) ++const int nios2_num_arg_info_structs = NIOS2_NUM_ARGS; ++ ++ ++const nios2_ps_insn_infoS nios2_ps_insn_info_structs[] = { ++ /* pseudo-op, real-op, arg, arg_modifier_func, num, index */ ++ {"mov", "add", "zero", nios2_append_arg, 1, 3}, ++ {"movi", "addi", "zero", nios2_insert_arg, 1, 2}, ++ {"movhi", "orhi", "zero", nios2_insert_arg, 1, 2}, ++ {"movui", "ori", "zero", nios2_insert_arg, 1, 2}, ++ {"movia", "orhi", "zero", nios2_insert_arg, 1, 2}, ++ {"nop", "add", "zero", nios2_append_arg, 3, 1}, ++ {"bgt", "blt", "", nios2_swap_args, 1, 2}, ++ {"bgtu", "bltu", "", nios2_swap_args, 1, 2}, ++ {"ble", "bge", "", nios2_swap_args, 1, 2}, ++ {"bleu", "bgeu", "", nios2_swap_args, 1, 2}, ++ {"cmpgt", "cmplt", "", nios2_swap_args, 2, 3}, ++ {"cmpgtu", "cmpltu", "", nios2_swap_args, 2, 3}, ++ {"cmple", "cmpge", "", nios2_swap_args, 2, 3}, ++ {"cmpleu", "cmpgeu", "", nios2_swap_args, 2, 3}, ++ {"cmpgti", "cmpgei", "+1", nios2_modify_arg, 0, 3}, ++ {"cmpgtui", "cmpgeui", "+1", nios2_modify_arg, 0, 3}, ++ {"cmplei", "cmplti", "+1", nios2_modify_arg, 0, 3}, ++ {"cmpleui", "cmpltui", "+1", nios2_modify_arg, 0, 3}, ++ {"subi", "addi", "", nios2_negate_arg, 0, 3} ++ /* Add further pseudo-ops here. */ ++}; ++ ++#define NIOS2_NUM_PSEUDO_INSNS \ ++ ((sizeof(nios2_ps_insn_info_structs)/ \ ++ sizeof(nios2_ps_insn_info_structs[0]))) ++const int nios2_num_ps_insn_info_structs = NIOS2_NUM_PSEUDO_INSNS; ++ ++/* Special relocation directive strings. */ ++ ++struct nios2_special_relocS ++{ ++ const char *string; ++ bfd_reloc_code_real_type reloc_type; ++}; ++ ++struct nios2_special_relocS nios2_special_reloc[] = { ++ {"%hiadj", BFD_RELOC_NIOS2_HIADJ16}, ++ {"%hi", BFD_RELOC_NIOS2_HI16}, ++ {"%lo", BFD_RELOC_NIOS2_LO16}, ++ {"%gprel", BFD_RELOC_NIOS2_GPREL}, ++ {"%call", BFD_RELOC_NIOS2_CALL16}, ++ {"%gotoff_lo", BFD_RELOC_NIOS2_GOTOFF_LO}, ++ {"%gotoff_hiadj", BFD_RELOC_NIOS2_GOTOFF_HA}, ++ {"%tls_gd", BFD_RELOC_NIOS2_TLS_GD16}, ++ {"%tls_ldm", BFD_RELOC_NIOS2_TLS_LDM16}, ++ {"%tls_ldo", BFD_RELOC_NIOS2_TLS_LDO16}, ++ {"%tls_ie", BFD_RELOC_NIOS2_TLS_IE16}, ++ {"%tls_le", BFD_RELOC_NIOS2_TLS_LE16}, ++ {"%gotoff", BFD_RELOC_NIOS2_GOTOFF}, ++ {"%got", BFD_RELOC_NIOS2_GOT16} ++}; ++ ++#define NIOS2_NUM_SPECIAL_RELOCS \ ++ (sizeof(nios2_special_reloc)/sizeof(nios2_special_reloc[0])) ++const int nios2_num_special_relocs = NIOS2_NUM_SPECIAL_RELOCS; ++ ++/* The function nios2_modify_arg appends the string modifier to the string ++ contained in the argument at index in the array parsedArgs[]. */ ++void ++nios2_modify_arg (const char *modifier, ++ char **parsedArgs, int unused ATTRIBUTE_UNUSED, int index) ++{ ++ assert (index < NIOS2_MAX_INSN_TOKENS); ++ ++ /* We can't just strcat here because strcat will free the memory pointed ++ to by the first argument and allocate new memory - but at this stage, ++ parsedArgs[index] may point into the middle of a block of allocated ++ memory, so trying to free it will cause a seg fault. */ ++ char *tmp = parsedArgs[index]; ++ parsedArgs[index] = ++ (char *) malloc (strlen (parsedArgs[index]) + strlen (modifier) + 1); ++ strcpy (parsedArgs[index], tmp); ++ strcat (parsedArgs[index], modifier); ++} ++ ++ ++void ++nios2_negate_arg (const char *modifier ATTRIBUTE_UNUSED, ++ char **parsedArgs, int unused ATTRIBUTE_UNUSED, int index) ++{ ++ char *tmp = parsedArgs[index]; ++ parsedArgs[index] = ++ (char *) malloc (strlen ("~(") + strlen (parsedArgs[index]) + ++ strlen (")+1") + 1); ++ ++ strcpy (parsedArgs[index], "~("); ++ strcat (parsedArgs[index], tmp); ++ strcat (parsedArgs[index], ")+1"); ++} ++ ++/* The function nios2_swap_args swaps the pointers at indices index_1 and ++ index_2 in the array parsedArgs[] - this is used for operand swapping ++ for comparison operations. */ ++void ++nios2_swap_args (const char *unused ATTRIBUTE_UNUSED, ++ char **parsedArgs, int index_1, int index_2) ++{ ++ char *tmp; ++ assert (index_1 < NIOS2_MAX_INSN_TOKENS && index_2 < NIOS2_MAX_INSN_TOKENS); ++ tmp = parsedArgs[index_1]; ++ parsedArgs[index_1] = parsedArgs[index_2]; ++ parsedArgs[index_2] = tmp; ++} ++ ++/* This function appends the string append to the array of strings in ++ parsedArgs numAppend times starting at index startIndex in the array. */ ++void ++nios2_append_arg (const char *append, char **parsedArgs, int numAppend, ++ int startIndex) ++{ ++ int i, count; ++ char *tmp; ++ ++ assert ((startIndex + numAppend) < NIOS2_MAX_INSN_TOKENS); ++ i = startIndex; ++ count = numAppend; ++ ++ if (nios2_mode == NIOS2_MODE_TEST) ++ tmp = parsedArgs[startIndex]; ++ else ++ tmp = NULL; ++ ++ while (count > 0) ++ { ++ parsedArgs[i] = (char *) append; ++ ++i; ++ --count; ++ } ++ ++ assert (i == (startIndex + numAppend)); ++ parsedArgs[i] = tmp; ++ parsedArgs[i + 1] = NULL; ++} ++ ++/* This function inserts the string insert numInsert times in the array ++ parsedArgs, starting at the index startIndex. */ ++void ++nios2_insert_arg (const char *insert, char **parsedArgs, int numInsert, ++ int startIndex) ++{ ++ int i, count, from, to; ++ ++ assert ((startIndex + numInsert) < NIOS2_MAX_INSN_TOKENS); ++ ++ to = startIndex + numInsert; ++ from = startIndex; ++ ++ /* Move the existing arguments up to create space. */ ++ i = NIOS2_MAX_INSN_TOKENS; ++ while ((i - numInsert) >= startIndex) ++ { ++ parsedArgs[i] = parsedArgs[i - numInsert]; ++ --i; ++ } ++ ++ i = startIndex; ++ count = numInsert; ++ while (count > 0) ++ { ++ parsedArgs[i] = (char *) insert; ++ ++i; ++ --count; ++ } ++} ++ ++/* This function swaps the pseudo-op for a real op. ++ FIXME - only works for 1-to-1 correspondence. */ ++void ++nios2_translate_pseudo_insn (nios2_insn_infoS * insn) ++{ ++ ++ nios2_ps_insn_infoS *ps_insn; ++ ++ /* Find which real insn the pseudo-op transates to and ++ switch the insn_info ptr to point to it. */ ++ ps_insn = ++ (nios2_ps_insn_infoS *) hash_find (nios2_ps_hash, ++ insn->insn_nios2_opcode->name); ++ ++ if (ps_insn != NULL) ++ { ++ insn->insn_nios2_opcode = ++ (struct nios2_opcode *) hash_find (nios2_opcode_hash, ps_insn->insn); ++ insn->insn_tokens[0] = insn->insn_nios2_opcode->name; ++ /* Modify the args so they work with the real insn. */ ++ ps_insn->arg_modifer_func (ps_insn->arg_modifier, ++ (char **) insn->insn_tokens, ps_insn->num, ++ ps_insn->index); ++ } ++ else ++ { ++ /* we cannot recover from this. */ ++ as_fatal (_("unrecognized pseudo-instruction %s"), ++ ps_insn->pseudo_insn); ++ } ++} ++ ++/******************************************************************** ++ The following functions are called by machine-independent parts of ++ the assembler ++ ********************************************************************/ ++ ++int ++md_parse_option (int c, char *arg ATTRIBUTE_UNUSED) ++{ ++ switch (c) ++ { ++ case 'r': ++ /* hidden option for self-test mode */ ++ nios2_mode = NIOS2_MODE_TEST; ++ break; ++ case OPTION_RELAX_ALL: ++ nios2_as_options.relax = relax_all; ++ break; ++ case OPTION_NORELAX: ++ nios2_as_options.relax = relax_none; ++ break; ++ case OPTION_RELAX_SECTION: ++ nios2_as_options.relax = relax_section; ++ break; ++ case OPTION_EB: ++ target_big_endian = 1; ++ break; ++ case OPTION_EL: ++ target_big_endian = 0; ++ break; ++ default: ++ return 0; ++ break; ++ } ++ ++ return 1; ++} ++ ++/* We can choose to be big-endian or little-endian at runtime based ++ on a switch. */ ++const char * ++nios2_target_format (void) ++{ ++ return target_big_endian ? "elf32-bignios2" : "elf32-littlenios2"; ++} ++ ++/* Machine-dependent usage message. */ ++void ++md_show_usage (FILE * stream) ++{ ++ fprintf (stream, " NIOS2 options:\n" ++ " -relax-all replace all branch and call " ++ "instructions with jmp and callr sequences\n" ++ " -relax-section replace identified out of range " ++ "branches with jmp sequences (default)\n" ++ " -no-relax do not replace any branches or calls\n" ++ " -EB force big-endian byte ordering\n" ++ " -EL force little-endian byte ordering\n"); ++} ++ ++/* This function is called once, at assembler startup time. ++ It should set up all the tables, etc. that the MD part of the ++ assembler will need. */ ++void ++md_begin (void) ++{ ++ int i; ++ const char *inserted; ++ ++ /* Create and fill a hashtable for the New Jersey opcodes, registers and ++ arguments. */ ++ nios2_opcode_hash = hash_new (); ++ nios2_reg_hash = hash_new (); ++ nios2_arg_hash = hash_new (); ++ nios2_ps_hash = hash_new (); ++ ++ for (i = 0; i < NUMOPCODES; ++i) ++ { ++ inserted = ++ hash_insert (nios2_opcode_hash, nios2_opcodes[i].name, ++ (PTR) & nios2_opcodes[i]); ++ if (inserted != NULL) ++ { ++ fprintf (stderr, _("internal error: can't hash `%s': %s\n"), ++ nios2_opcodes[i].name, inserted); ++ /* Probably a memory allocation problem? Give up now. */ ++ as_fatal (_("Broken assembler. No assembly attempted.")); ++ } ++ } ++ ++ for (i = 0; i < nios2_num_regs; ++i) ++ { ++ inserted = ++ hash_insert (nios2_reg_hash, nios2_regs[i].name, ++ (PTR) & nios2_regs[i]); ++ if (inserted != NULL) ++ { ++ fprintf (stderr, _("internal error: can't hash `%s': %s\n"), ++ nios2_regs[i].name, inserted); ++ /* Probably a memory allocation problem? Give up now. */ ++ as_fatal (_("Broken assembler. No assembly attempted.")); ++ } ++ ++ } ++ ++ for (i = 0; i < nios2_num_arg_info_structs; ++i) ++ { ++ inserted = ++ hash_insert (nios2_arg_hash, nios2_arg_info_structs[i].args, ++ (PTR) & nios2_arg_info_structs[i]); ++ if (inserted != NULL) ++ { ++ fprintf (stderr, _("internal error: can't hash `%s': %s\n"), ++ nios2_arg_info_structs[i].args, inserted); ++ /* Probably a memory allocation problem? Give up now. */ ++ as_fatal (_("Broken assembler. No assembly attempted.")); ++ } ++ } ++ ++ for (i = 0; i < nios2_num_ps_insn_info_structs; ++i) ++ { ++ inserted = ++ hash_insert (nios2_ps_hash, nios2_ps_insn_info_structs[i].pseudo_insn, ++ (PTR) & nios2_ps_insn_info_structs[i]); ++ if (inserted != NULL) ++ { ++ fprintf (stderr, _("internal error: can't hash `%s': %s\n"), ++ nios2_ps_insn_info_structs[i].pseudo_insn, inserted); ++ /* Probably a memory allocation problem? Give up now. */ ++ as_fatal (_("Broken assembler. No assembly attempted.")); ++ } ++ } ++ ++ /* Assembler option defaults. */ ++ nios2_as_options.noat = FALSE; ++ nios2_as_options.nobreak = FALSE; ++ ++ /* Debug information is incompatible with relaxation. */ ++ if (debug_type != DEBUG_UNSPECIFIED) ++ { ++ nios2_as_options.relax = relax_none; ++ } ++ ++ /* Initialize the alignment data. */ ++ nios2_current_align_seg = now_seg; ++ nios2_last_label = NULL; ++ nios2_current_align = 0; ++} ++ ++ ++ ++ ++/* Made this global to avoid changing one function prototype. */ ++nios2_insn_infoS insn; ++ ++/* Assembles a single line of Nios II assembly language. */ ++void ++md_assemble (char *op_str) ++{ ++ char *argstr; ++ char *op_strdup; ++ nios2_arg_infoS *arg_info; ++ unsigned long saved_pinfo = 0; ++ ++ /* Make sure we are aligned on a 4-byte boundary. */ ++ if (nios2_current_align < 2) ++ nios2_align (2, NULL, nios2_last_label); ++ else if (nios2_current_align > 2) ++ nios2_current_align = 2; ++ nios2_last_label = NULL; ++ ++ ++ /* We don't want to clobber to op_str ++ because we want to be able to use it in messages. */ ++ op_strdup = strdup (op_str); ++ ++ insn.insn_tokens[0] = strtok (op_strdup, " "); ++ argstr = strtok (NULL, ""); ++ ++ /* Assemble the opcode. */ ++ insn.insn_nios2_opcode = ++ (struct nios2_opcode *) hash_find (nios2_opcode_hash, ++ insn.insn_tokens[0]); ++ insn.insn_reloc = NULL; ++ ++ if (insn.insn_nios2_opcode != NULL) ++ { ++ /* Set the opcode for the instruction. */ ++ insn.insn_code = insn.insn_nios2_opcode->match; ++ ++ /* Parse the arguments pointed to by argstr. */ ++ if (nios2_mode == NIOS2_MODE_ASSEMBLE) ++ { ++ nios2_parse_args (argstr, insn.insn_nios2_opcode->args, ++ (char **) &insn.insn_tokens[1]); ++ } ++ else ++ { ++ nios2_parse_args (argstr, insn.insn_nios2_opcode->args_test, ++ (char **) &insn.insn_tokens[1]); ++ } ++ ++ /* We need to preserve the MOVIA macro as this is clobbered by ++ translate_pseudo_insn. */ ++ if (insn.insn_nios2_opcode->pinfo == NIOS2_INSN_MACRO_MOVIA) ++ { ++ saved_pinfo = NIOS2_INSN_MACRO_MOVIA; ++ } ++ /* If the instruction is an pseudo-instruction, we want to replace it ++ with its real equivalent, and then continue. */ ++ if ((insn.insn_nios2_opcode->pinfo & NIOS2_INSN_MACRO) == ++ NIOS2_INSN_MACRO) ++ { ++ nios2_translate_pseudo_insn (&insn); ++ } ++ ++ /* Find the assemble function, and call it. */ ++ arg_info = ++ (nios2_arg_infoS *) hash_find (nios2_arg_hash, ++ insn.insn_nios2_opcode->args); ++ if (arg_info != NULL) ++ { ++ arg_info->assemble_args_func (&insn); ++ ++ if (nios2_as_options.relax != relax_none ++ && insn.insn_nios2_opcode->pinfo & NIOS2_INSN_UBRANCH) ++ output_ubranch (); ++ else if (nios2_as_options.relax != relax_none ++ && insn.insn_nios2_opcode->pinfo & NIOS2_INSN_CBRANCH) ++ output_cbranch (); ++ else if (nios2_as_options.relax == relax_all ++ && insn.insn_nios2_opcode->pinfo & NIOS2_INSN_CALL) ++ output_call (); ++ else if (insn.insn_nios2_opcode->pinfo & NIOS2_INSN_ANDI) ++ output_andi (); ++ else if (insn.insn_nios2_opcode->pinfo & NIOS2_INSN_ORI) ++ output_ori (); ++ else if (insn.insn_nios2_opcode->pinfo & NIOS2_INSN_XORI) ++ output_xori (); ++ else if (insn.insn_nios2_opcode->pinfo & NIOS2_INSN_ADDI) ++ output_addi (); ++ else if (saved_pinfo == NIOS2_INSN_MACRO_MOVIA) ++ output_movia (); ++ else ++ output_insn (); ++ } ++ else ++ { ++ /* The assembler is broken. */ ++ fprintf (stderr, ++ _("internal error: %s is not a valid argument syntax\n"), ++ insn.insn_nios2_opcode->args); ++ /* Probably a memory allocation problem. Give up now. */ ++ as_fatal (_("Broken assembler. No assembly attempted.")); ++ } ++ } ++ else ++ { ++ /* Unrecognised instruction - error. */ ++ as_bad (_("unrecognised instruction %s"), insn.insn_tokens[0]); ++ } ++} ++ ++/* Output a normal instruction. */ ++static void ++output_insn () ++{ ++ char *f; ++ nios2_insn_relocS *reloc; ++ ++ f = frag_more (4); ++ /* This allocates enough space for the instruction ++ and puts it in the current frag. */ ++ md_number_to_chars (f, insn.insn_code, 4); ++ /* Emit debug info. */ ++ dwarf2_emit_insn (4); ++ /* Create any fixups. */ ++ reloc = insn.insn_reloc; ++ while (reloc != NULL) ++ { ++ /* This creates any fixups to be acted on later. */ ++ fix_new_exp (frag_now, f - frag_now->fr_literal, 4, ++ &reloc->reloc_expression, reloc->reloc_pcrel, ++ reloc->reloc_type); ++ reloc = reloc->reloc_next; ++ } ++} ++ ++/* Output an unconditional branch. */ ++static void ++output_ubranch (void) ++{ ++ char *f; ++ nios2_insn_relocS *reloc; ++ symbolS *symp; ++ offsetT offset; ++ ++ reloc = insn.insn_reloc; ++ ++ /* If the reloc is NULL, there was an error assembling the branch. */ ++ if (reloc != NULL) ++ { ++ ++ symp = reloc->reloc_expression.X_add_symbol; ++ offset = reloc->reloc_expression.X_add_number; ++ ++ /* We must tag debug info here since we can't do it after ++ calling frag_var. */ ++ dwarf2_emit_insn (4); ++ ++ /* We create a machine dependent frag which can grow ++ to accommodate the largest possible instruction sequence ++ this may generate. */ ++ f = frag_var (rs_machine_dependent, ++ RELAX_MAX_SIZE (UBRANCH), ++ RELAX_SIZE (UBRANCH), ++ RELAX_SUBSTATE (UBRANCH), symp, offset, NULL); ++ ++ md_number_to_chars (f, insn.insn_code, 4); ++ ++ /* We leave fixup generation to md_convert_frag. */ ++ } ++} ++ ++/* Output a conditional branch. */ ++static void ++output_cbranch (void) ++{ ++ char *f; ++ nios2_insn_relocS *reloc; ++ symbolS *symp; ++ offsetT offset; ++ ++ reloc = insn.insn_reloc; ++ ++ /* If the reloc is NULL, there was an error assembling the branch. */ ++ if (reloc != NULL) ++ { ++ ++ symp = reloc->reloc_expression.X_add_symbol; ++ offset = reloc->reloc_expression.X_add_number; ++ ++ /* We must tag debug info here since we can't do it after ++ calling frag_var. */ ++ dwarf2_emit_insn (4); ++ ++ /* We create a machine dependent frag which can grow ++ to accommodate the largest possible instruction sequence ++ this may generate. */ ++ f = frag_var (rs_machine_dependent, ++ RELAX_MAX_SIZE (CBRANCH), ++ RELAX_SIZE (CBRANCH), ++ RELAX_SUBSTATE (CBRANCH), symp, offset, NULL); ++ ++ md_number_to_chars (f, insn.insn_code, 4); ++ ++ ++ /* We leave fixup generation to md_convert_frag. */ ++ } ++} ++ ++/* Output a call sequence. Since calls are not pc-relative for NIOS2, ++ but are page-relative, we cannot tell at any stage in assembly ++ whether a call will be out of range since a section may be linked ++ at any address. So if we are relaxing, we convert all call instructions ++ to long call sequences, and rely on the linker to relax them back to ++ short calls. */ ++static void ++output_call (void) ++{ ++ char *f; ++ nios2_insn_relocS *reloc; ++ f = frag_more (12); ++ /* This allocates enough space for the instruction ++ and puts it in the current frag. */ ++ reloc = insn.insn_reloc; ++ ++ /* If the reloc is NULL, there was an error assembling the branch. */ ++ if (reloc != NULL) ++ { ++ md_number_to_chars (f, OP_MATCH_ORHI | 0x00400000, 4); ++ dwarf2_emit_insn (4); ++ md_number_to_chars (f + 4, OP_MATCH_ORI | 0x08400000, 4); ++ dwarf2_emit_insn (4); ++ md_number_to_chars (f + 8, OP_MATCH_CALLR | 0x08000000, 4); ++ dwarf2_emit_insn (4); ++ fix_new (frag_now, f - frag_now->fr_literal, 4, ++ reloc->reloc_expression.X_add_symbol, ++ reloc->reloc_expression.X_add_number, 0, ++ BFD_RELOC_NIOS2_CALLR); ++ ++ ++ } ++} ++ ++ ++static int ++can_evaluate_expr (void) ++{ ++ /* Remove this check for null and the invalid insn "ori r9, 1234" seg faults. */ ++ if (!insn.insn_reloc) ++ { ++ /* ??? Ideally we should do something other than as_fatal here as we can ++ continue to assemble. ++ However this function (actually the output_* functions) should not ++ have been called in the first place once an illegal instruction had ++ been encountered. */ ++ as_fatal (_("Invalid instruction encountered, cannot recover. No assembly attempted.")); ++ } ++ ++ if (insn.insn_reloc->reloc_expression.X_op == O_constant) ++ return 1; ++ ++ return 0; ++} ++ ++static int ++get_expr_value (void) ++{ ++ int value = 0; ++ if (insn.insn_reloc->reloc_expression.X_op == O_constant) ++ value = insn.insn_reloc->reloc_expression.X_add_number; ++ return value; ++} ++ ++/* Output an addi - will silently convert to ++ orhi if rA = r0 and (expr & 0xffff0000) == 0. */ ++static void ++output_addi (void) ++{ ++ int expr_val = 0; ++ if (can_evaluate_expr ()) ++ { ++ expr_val = get_expr_value (); ++ if (GET_INSN_FIELD (RRS, insn.insn_code) == 0 && ++ (expr_val & 0xffff) == 0 && expr_val != 0) ++ { ++ ++ /* We really want a movhi (orhi) here. */ ++ insn.insn_code = (insn.insn_code & ~OP_MATCH_ADDI) | OP_MATCH_ORHI; ++ insn.insn_reloc->reloc_expression.X_add_number = ++ (insn.insn_reloc->reloc_expression.X_add_number >> 16) & 0xffff; ++ insn.insn_reloc->reloc_type = BFD_RELOC_NIOS2_U16; ++ } ++ } ++ ++ /* Output an instruction. */ ++ output_insn (); ++} ++ ++static void ++output_andi (void) ++{ ++ int expr_val = 0; ++ if (can_evaluate_expr ()) ++ { ++ expr_val = get_expr_value (); ++ if (expr_val != 0 && (expr_val & 0xffff) == 0) ++ { ++ /* We really want a movhi (orhi) here. */ ++ insn.insn_code = (insn.insn_code & ~OP_MATCH_ANDI) | OP_MATCH_ANDHI; ++ insn.insn_reloc->reloc_expression.X_add_number = ++ (insn.insn_reloc->reloc_expression.X_add_number >> 16) & 0xffff; ++ insn.insn_reloc->reloc_type = BFD_RELOC_NIOS2_U16; ++ } ++ } ++ ++ /* Output an instruction. */ ++ output_insn (); ++} ++ ++static void ++output_ori (void) ++{ ++ int expr_val = 0; ++ if (can_evaluate_expr ()) ++ { ++ expr_val = get_expr_value (); ++ if (expr_val != 0 && (expr_val & 0xffff) == 0) ++ { ++ /* We really want a movhi (orhi) here. */ ++ insn.insn_code = (insn.insn_code & ~OP_MATCH_ORI) | OP_MATCH_ORHI; ++ insn.insn_reloc->reloc_expression.X_add_number = ++ (insn.insn_reloc->reloc_expression.X_add_number >> 16) & 0xffff; ++ insn.insn_reloc->reloc_type = BFD_RELOC_NIOS2_U16; ++ } ++ } ++ ++ /* Output an instruction. */ ++ output_insn (); ++} ++ ++static void ++output_xori (void) ++{ ++ int expr_val = 0; ++ if (can_evaluate_expr ()) ++ { ++ expr_val = get_expr_value (); ++ if (expr_val != 0 && (expr_val & 0xffff) == 0) ++ { ++ /* We really want a movhi (orhi) here. */ ++ insn.insn_code = (insn.insn_code & ~OP_MATCH_XORI) | OP_MATCH_XORHI; ++ insn.insn_reloc->reloc_expression.X_add_number = ++ (insn.insn_reloc->reloc_expression.X_add_number >> 16) & 0xffff; ++ insn.insn_reloc->reloc_type = BFD_RELOC_NIOS2_U16; ++ } ++ } ++ ++ /* Output an instruction. */ ++ output_insn (); ++} ++ ++ ++/* Output a movhi/addi pair for the movia pseudo-op. */ ++static void ++output_movia (void) ++{ ++ char *f; ++ nios2_insn_relocS *reloc; ++ f = frag_more (8); ++ unsigned long reg_index = GET_INSN_FIELD (IRT, insn.insn_code); ++ ++ /* This allocates enough space for the instruction ++ and puts it in the current frag. */ ++ reloc = insn.insn_reloc; ++ ++ /* If the reloc is NULL, there was an error assembling the movia. */ ++ if (reloc != NULL) ++ { ++ md_number_to_chars (f, insn.insn_code, 4); ++ dwarf2_emit_insn (4); ++ md_number_to_chars (f + 4, ++ OP_MATCH_ADDI | (reg_index << OP_SH_IRT) | ++ (reg_index << OP_SH_IRS), 4); ++ dwarf2_emit_insn (4); ++ fix_new (frag_now, f - frag_now->fr_literal, 4, ++ reloc->reloc_expression.X_add_symbol, ++ reloc->reloc_expression.X_add_number, 0, ++ BFD_RELOC_NIOS2_HIADJ16); ++ fix_new (frag_now, f + 4 - frag_now->fr_literal, 4, ++ reloc->reloc_expression.X_add_symbol, ++ reloc->reloc_expression.X_add_number, 0, BFD_RELOC_NIOS2_LO16); ++ ++ } ++} ++ ++/* Function md_chars_to_number takes the sequence of ++ bytes in buf and returns the corresponding value ++ in an int. n must be 1, 2 or 4. */ ++valueT ++md_chars_to_number (char *buf, int n) ++{ ++ int i; ++ valueT val; ++ ++ assert (n == 1 || n == 2 || n == 4); ++ ++ val = 0; ++ if (target_big_endian) ++ { ++ for (i = 0; i < n; ++i) ++ { ++ val = val | ((buf[i] & 0xff) << 8 * (n - (i + 1))); ++ } ++ } ++ else ++ { ++ for (i = 0; i < n; ++i) ++ { ++ val = val | ((buf[i] & 0xff) << 8 * i); ++ } ++ } ++ return val; ++} ++ ++ ++/* This function turns a C long int, short int or char ++ into the series of bytes that represent the number ++ on the target machine. ++ The function is also used to convert .byte8 and .byte16 directives ++*/ ++void ++md_number_to_chars (char *buf, valueT val, int n) ++{ ++ if (target_big_endian) ++ { ++ number_to_chars_bigendian (buf, val, n); ++ } ++ else ++ { ++ number_to_chars_littleendian (buf, val, n); ++ } ++} ++ ++/* This function is identical to md_number_to_chars. */ ++void ++md_number_to_imm (char *buf, valueT val, int n) ++{ ++ md_number_to_chars (buf, val, n); ++} ++ ++/* This function is identical to md_number_to_chars. */ ++void ++md_number_to_disp (char *buf, valueT val, int n) ++{ ++ md_number_to_chars (buf, val, n); ++} ++ ++/* This function is identical to md_number_to_chars. */ ++void ++md_number_to_field (char *buf, valueT val, int n) ++{ ++ md_number_to_chars (buf, val, n); ++} ++ ++/* Turn a string in input_line_pointer into a floating point constant ++ of type TYPE, and store the appropriate bytes in *LITP. The number ++ of LITTLENUMS emitted is stored in *SIZEP. An error message is ++ returned, or NULL on OK. */ ++char * ++md_atof (int type, char *litP, int *sizeP) ++{ ++ int prec; ++ LITTLENUM_TYPE words[4]; ++ char *t; ++ int i; ++ ++ switch (type) ++ { ++ case 'f': ++ prec = 2; ++ break; ++ case 'd': ++ prec = 4; ++ break; ++ default: ++ *sizeP = 0; ++ return _("bad call to md_atof"); ++ } ++ ++ t = atof_ieee (input_line_pointer, type, words); ++ if (t) ++ input_line_pointer = t; ++ ++ *sizeP = prec * 2; ++ ++ if (! target_big_endian) ++ { ++ for (i = prec - 1; i >= 0; i--) ++ { ++ md_number_to_chars (litP, (valueT) words[i], 2); ++ litP += 2; ++ } ++ } ++ else ++ { ++ for (i = 0; i < prec; i++) ++ { ++ md_number_to_chars (litP, (valueT) words[i], 2); ++ litP += 2; ++ } ++ } ++ ++ return NULL; ++} ++ ++ ++ ++int md_short_jump_size; ++int md_long_jump_size; ++ ++void ++md_create_short_jump (char *result_ptr ATTRIBUTE_UNUSED, ++ addressT from_addr ATTRIBUTE_UNUSED, ++ addressT to_addr ATTRIBUTE_UNUSED, ++ fragS * frag ATTRIBUTE_UNUSED, ++ symbolS * to_symbol ATTRIBUTE_UNUSED) ++{ ++ abort (); ++} ++ ++void ++md_create_long_jump (char *ptr ATTRIBUTE_UNUSED, ++ addressT from_addr ATTRIBUTE_UNUSED, ++ addressT to_addr ATTRIBUTE_UNUSED, ++ fragS * frag ATTRIBUTE_UNUSED, ++ symbolS * to_symbol ATTRIBUTE_UNUSED) ++{ ++ abort (); ++} ++ ++int ++md_estimate_size_before_relax (fragS * fragp, segT segment ATTRIBUTE_UNUSED) ++{ ++ /* We only support ELF targets. */ ++ ++ switch (nios2_as_options.relax) ++ { ++ case relax_none: ++ case relax_section: ++ break; ++ case relax_all: ++ /* The NIOS2 linker performs relaxation so the assembler ++ always assumes the worst case, so that the linker can ++ replace with a better case if possible - this way, linker ++ relaxation can never cause a short branch to be out of range. */ ++ while (nios2_relax_table[fragp->fr_subtype].rlx_more != 0) ++ fragp->fr_subtype = nios2_relax_table[fragp->fr_subtype].rlx_more; ++ break; ++ default: ++ abort (); ++ break; ++ } ++ ++ /* Return the estimated size of the frag. */ ++ return nios2_relax_table[fragp->fr_subtype].rlx_length; ++} ++ ++ ++void ++md_convert_frag (bfd * headers ATTRIBUTE_UNUSED, segT seg ATTRIBUTE_UNUSED, ++ fragS * fragp) ++{ ++ unsigned char *buffer = fragp->fr_literal + fragp->fr_fix; ++ relax_substateT subtype = fragp->fr_subtype; ++ unsigned int growth = RELAX_SIZE (subtype); ++ unsigned int br_opcode, br_op_a, br_op_b; ++ ++ switch (subtype) ++ { ++ case UBRANCH: ++ /* We just need to generate the fixup for the symbol and offset. */ ++ fix_new (fragp, fragp->fr_fix, 4, fragp->fr_symbol, fragp->fr_offset, 1, ++ BFD_RELOC_16_PCREL); ++ break; ++ case UJMP: ++ /* Replace ubranch at fr_fix with : ++ movhi at, %hi(symbol+offset) ++ ori at, %lo(symbol+offset) ++ jmp at ++ */ ++ md_number_to_chars (buffer, OP_MATCH_ORHI | 0x00400000, 4); ++ md_number_to_chars (buffer + 4, OP_MATCH_ORI | 0x08400000, 4); ++ md_number_to_chars (buffer + 8, OP_MATCH_JMP | 0x08000000, 4); ++ fix_new (fragp, fragp->fr_fix, 4, fragp->fr_symbol, fragp->fr_offset, 0, ++ BFD_RELOC_NIOS2_UJMP); ++ break; ++ case CBRANCH: ++ /* We just need to generate the fixup for the symbol and offset. */ ++ fix_new (fragp, fragp->fr_fix, 4, fragp->fr_symbol, fragp->fr_offset, 1, ++ BFD_RELOC_16_PCREL); ++ break; ++ case CJMP: ++ /* Replace cbranch at fr_fix with : ++ b(opposite condition) r, s, skip ++ movhi at, %hi(symbol+offset) ++ ori at, %lo(symbol+offset) ++ jmp at ++ skip: ++ ... ++ */ ++ br_opcode = md_chars_to_number (buffer, 4); ++ ++ switch (br_opcode & OP_MASK_OP) ++ { ++ case OP_MATCH_BEQ: ++ br_opcode = ++ (br_opcode & ~OP_MASK_OP) | OP_MATCH_BNE | (12 << OP_SH_IMM16); ++ break; ++ case OP_MATCH_BNE: ++ br_opcode = ++ (br_opcode & ~OP_MASK_OP) | OP_MATCH_BEQ | (12 << OP_SH_IMM16); ++ break; ++ case OP_MATCH_BGE: ++ case OP_MATCH_BGEU: ++ case OP_MATCH_BLT: ++ case OP_MATCH_BLTU: ++ /* Swap the operands. */ ++ br_op_a = (br_opcode & OP_MASK_RRT) << 5; ++ br_op_b = (br_opcode & OP_MASK_RRS) >> 5; ++ br_opcode = ++ (br_opcode & ~(OP_MASK_RRS | OP_MASK_RRT)) | br_op_a | br_op_b | ++ (12 << OP_SH_IMM16); ++ break; ++ default: ++ as_bad_where (fragp->fr_file, fragp->fr_line, ++ _("expecting conditional branch for relaxation\n")); ++ abort (); ++ } ++ ++ md_number_to_chars (buffer, br_opcode, 4); ++ md_number_to_chars (buffer + 4, OP_MATCH_ORHI | 0x00400000, 4); ++ md_number_to_chars (buffer + 8, OP_MATCH_ORI | 0x08400000, 4); ++ md_number_to_chars (buffer + 12, OP_MATCH_JMP | 0x08000000, 4); ++ fix_new (fragp, fragp->fr_fix + 4, 4, fragp->fr_symbol, ++ fragp->fr_offset, 0, BFD_RELOC_NIOS2_CJMP); ++ break; ++ default: ++ as_bad_where (fragp->fr_file, fragp->fr_line, ++ _("can't relax instruction\n")); ++ abort (); ++ break; ++ } ++ ++ fragp->fr_fix += growth; ++} ++ ++ ++/* Round up section size. */ ++valueT ++md_section_align (asection * seg ATTRIBUTE_UNUSED, valueT size) ++{ ++ /* I think byte alignment is fine here */ ++ return size; ++} ++ ++ ++int ++nios2_force_relocation (fixS * fixp) ++{ ++ if (fixp->fx_r_type == BFD_RELOC_VTABLE_INHERIT ++ || fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY ++ || fixp->fx_r_type == BFD_RELOC_NIOS2_ALIGN) ++ return 1; ++ ++ return generic_force_reloc (fixp); ++} ++ ++/* nios2_fix_adjustable is called to see whether a reloc against a defined ++ symbol should be converted into a reloc against a section. */ ++int ++nios2_fix_adjustable (fixS * fixp) ++{ ++ if (fixp->fx_addsy == NULL) ++ return 1; ++ ++#ifdef OBJ_ELF ++ /* Prevent all adjustments to global symbols. */ ++ if (OUTPUT_FLAVOR == bfd_target_elf_flavour ++ && (S_IS_EXTERNAL (fixp->fx_addsy) || S_IS_WEAK (fixp->fx_addsy))) ++ return 0; ++#endif ++ if (fixp->fx_r_type == BFD_RELOC_VTABLE_INHERIT ++ || fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY) ++ return 0; ++ ++ /* Preserve relocations against symbols with function type. */ ++ if (symbol_get_bfdsym (fixp->fx_addsy)->flags & BSF_FUNCTION) ++ return 0; ++ ++ /* Don't allow symbols to be discarded on GOT related relocs. */ ++ if (fixp->fx_r_type == BFD_RELOC_NIOS2_GOT16 ++ || fixp->fx_r_type == BFD_RELOC_NIOS2_CALL16 ++ || fixp->fx_r_type == BFD_RELOC_NIOS2_GOTOFF_LO ++ || fixp->fx_r_type == BFD_RELOC_NIOS2_GOTOFF_HA ++ || fixp->fx_r_type == BFD_RELOC_NIOS2_TLS_GD16 ++ || fixp->fx_r_type == BFD_RELOC_NIOS2_TLS_LDM16 ++ || fixp->fx_r_type == BFD_RELOC_NIOS2_TLS_LDO16 ++ || fixp->fx_r_type == BFD_RELOC_NIOS2_TLS_IE16 ++ || fixp->fx_r_type == BFD_RELOC_NIOS2_TLS_LE16 ++ || fixp->fx_r_type == BFD_RELOC_NIOS2_TLS_DTPMOD ++ || fixp->fx_r_type == BFD_RELOC_NIOS2_TLS_DTPREL ++ || fixp->fx_r_type == BFD_RELOC_NIOS2_TLS_TPREL ++ || fixp->fx_r_type == BFD_RELOC_NIOS2_GOTOFF) ++ return 0; ++ ++ return 1; ++} ++ ++/* nios2_frob_symbol is called in adjust_reloc_syms through the macro ++ tc_frob_symbol - it is used to remove *ABS* references from the ++ symbol table. */ ++int ++nios2_frob_symbol (symbolS * symp) ++{ ++ if ((OUTPUT_FLAVOR == bfd_target_elf_flavour ++ && (symp) == section_symbol (absolute_section)) ++ || !S_IS_DEFINED (symp)) ++ return 1; ++ else ++ return 0; ++} ++ ++/* The function tc_gen_reloc creates a relocation structure for the ++ fixup fixp, and returns a pointer to it. This structure is passed ++ to bfd_install_relocation so that it can be written to the object ++ file for linking. ++*/ ++arelent * ++tc_gen_reloc (asection * section ATTRIBUTE_UNUSED, fixS * fixp) ++{ ++ arelent *reloc; ++ reloc = (arelent *) xmalloc (sizeof (arelent)); ++ reloc->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *)); ++ *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy); ++ ++ reloc->address = fixp->fx_frag->fr_address + fixp->fx_where; ++ reloc->addend = fixp->fx_offset; // fixp->fx_addnumber; ++ ++ if (fixp->fx_pcrel) ++ { ++ switch (fixp->fx_r_type) ++ { ++ case BFD_RELOC_16: ++ fixp->fx_r_type = BFD_RELOC_16_PCREL; ++ break; ++ case BFD_RELOC_NIOS2_LO16: ++ fixp->fx_r_type = BFD_RELOC_NIOS2_PCREL_LO; ++ break; ++ case BFD_RELOC_NIOS2_HIADJ16: ++ fixp->fx_r_type = BFD_RELOC_NIOS2_PCREL_HA; ++ break; ++ default: ++ break; ++ } ++ } ++ ++ reloc->howto = bfd_reloc_type_lookup (stdoutput, fixp->fx_r_type); ++ if (reloc->howto == NULL) ++ { ++ as_bad_where (fixp->fx_file, fixp->fx_line, ++ _("can't represent relocation type %s"), ++ bfd_get_reloc_code_name (fixp->fx_r_type)); ++ ++ /* Set howto to a garbage value so that we can keep going. */ ++ reloc->howto = bfd_reloc_type_lookup (stdoutput, BFD_RELOC_32); ++ assert (reloc->howto != NULL); ++ } ++ return reloc; ++} ++ ++long ++md_pcrel_from (fixS * fixP ATTRIBUTE_UNUSED) ++{ ++ return 0; ++} ++ ++ ++/* Apply a fixup to the object file. */ ++void ++md_apply_fix (fixS * fixP, valueT * valP, segT seg ATTRIBUTE_UNUSED) ++{ ++ const struct nios2_opcode *opcode; ++ enum overflow_type overflow_msg_type; ++ bfd_boolean overflowed = FALSE; ++ valueT fixup = 0; ++ ++ /* Assert that the fixup is one we can handle. */ ++ assert (fixP != NULL && valP != NULL && ++ (fixP->fx_r_type == BFD_RELOC_8 || ++ fixP->fx_r_type == BFD_RELOC_16 || ++ fixP->fx_r_type == BFD_RELOC_32 || ++ fixP->fx_r_type == BFD_RELOC_NIOS2_S16 || ++ fixP->fx_r_type == BFD_RELOC_NIOS2_U16 || ++ fixP->fx_r_type == BFD_RELOC_16_PCREL || ++ fixP->fx_r_type == BFD_RELOC_NIOS2_CALL26 || ++ fixP->fx_r_type == BFD_RELOC_NIOS2_IMM5 || ++ fixP->fx_r_type == BFD_RELOC_NIOS2_CACHE_OPX || ++ fixP->fx_r_type == BFD_RELOC_NIOS2_IMM6 || ++ fixP->fx_r_type == BFD_RELOC_NIOS2_IMM8 || ++ fixP->fx_r_type == BFD_RELOC_NIOS2_HI16 || ++ fixP->fx_r_type == BFD_RELOC_NIOS2_LO16 || ++ fixP->fx_r_type == BFD_RELOC_NIOS2_HIADJ16 || ++ fixP->fx_r_type == BFD_RELOC_NIOS2_GPREL || ++ fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT || ++ fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY || ++ fixP->fx_r_type == BFD_RELOC_NIOS2_UJMP || ++ fixP->fx_r_type == BFD_RELOC_NIOS2_CJMP || ++ fixP->fx_r_type == BFD_RELOC_NIOS2_CALLR || ++ fixP->fx_r_type == BFD_RELOC_NIOS2_ALIGN || ++ fixP->fx_r_type == BFD_RELOC_NIOS2_GOT16 || ++ fixP->fx_r_type == BFD_RELOC_NIOS2_CALL16 || ++ fixP->fx_r_type == BFD_RELOC_NIOS2_GOTOFF_LO || ++ fixP->fx_r_type == BFD_RELOC_NIOS2_GOTOFF_HA || ++ fixP->fx_r_type == BFD_RELOC_NIOS2_TLS_GD16 || ++ fixP->fx_r_type == BFD_RELOC_NIOS2_TLS_LDM16 || ++ fixP->fx_r_type == BFD_RELOC_NIOS2_TLS_LDO16 || ++ fixP->fx_r_type == BFD_RELOC_NIOS2_TLS_IE16 || ++ fixP->fx_r_type == BFD_RELOC_NIOS2_TLS_LE16 || ++ fixP->fx_r_type == BFD_RELOC_NIOS2_GOTOFF || ++ fixP->fx_r_type == BFD_RELOC_NIOS2_TLS_DTPREL ++ /* Add other relocs here as we generate them. */ ++ )); ++ ++ ++ /* The value passed in valP can be the value of a fully ++ resolved expression, or it can be the value of a partially ++ resolved expression. In the former case, both fixP->fx_addsy ++ and fixP->fx_subsy are NULL, and fixP->fx_offset == *valP, and ++ we can fix up the instruction that fixP relates to. ++ In the latter case, one or both of fixP->fx_addsy and ++ fixP->fx_subsy are not NULL, and fixP->fx_offset may or may not ++ equal *valP. We don't need to check for fixP->fx_subsy being null ++ because the generic part of the assembler generates an error if ++ it is not an absolute symbol. */ ++ ++ if (fixP->fx_addsy != NULL) ++ { ++ fixP->fx_addnumber = fixP->fx_offset; ++ fixP->fx_done = 0; ++ ++ switch (fixP->fx_r_type) ++ { ++ case BFD_RELOC_NIOS2_TLS_GD16: ++ case BFD_RELOC_NIOS2_TLS_LDM16: ++ case BFD_RELOC_NIOS2_TLS_LDO16: ++ case BFD_RELOC_NIOS2_TLS_IE16: ++ case BFD_RELOC_NIOS2_TLS_LE16: ++ case BFD_RELOC_NIOS2_TLS_DTPMOD: ++ case BFD_RELOC_NIOS2_TLS_DTPREL: ++ case BFD_RELOC_NIOS2_TLS_TPREL: ++ S_SET_THREAD_LOCAL (fixP->fx_addsy); ++ break; ++ default: ++ break; ++ } ++ } ++ else ++ { ++ valueT value; ++ ++ char *buf; ++ reloc_howto_type *howto; ++ howto = bfd_reloc_type_lookup (stdoutput, fixP->fx_r_type); ++ ++ if (howto == NULL) ++ { ++ as_bad_where (fixP->fx_file, fixP->fx_line, ++ _("relocation is not supported")); ++ } ++ else ++ { ++ fixup += *valP; ++ ++ /* If this is a pc-relative relocation, we need to ++ subtract the current offset within the object file ++ FIXME : for some reason fixP->fx_pcrel isn't 1 when it should be ++ so I'm using the howto structure instead to determine this. */ ++ if (howto->pc_relative == 1) ++ fixup = fixup - (fixP->fx_frag->fr_address + fixP->fx_where + 4); ++ ++ ++ ++ /* Get the instruction to be fixed up. */ ++ buf = fixP->fx_frag->fr_literal + fixP->fx_where; ++ value = md_chars_to_number (buf, 4); ++ ++ /* What opcode is the instruction? This will determine ++ whether we check for overflow in immediate values ++ and what error message we get. */ ++ opcode = nios2_find_opcode_hash (value); ++ overflow_msg_type = opcode->overflow_msg; ++ ++ overflowed = nios2_check_overflow (fixup, howto); ++ ++ ++ if (overflowed) ++ { ++ unsigned int range_min; ++ unsigned int range_max; ++ unsigned int address; ++ switch (overflow_msg_type) ++ { ++ case call_target_overflow: ++ range_min = ++ ((fixP->fx_frag->fr_address + ++ fixP->fx_where) & 0xf0000000); ++ range_max = range_min + 0x0fffffff; ++ address = fixup | range_min; ++ ++ as_bad_where (fixP->fx_file, fixP->fx_line, ++ _(overflow_msgs[call_target_overflow]), ++ address, range_min, range_max); ++ break; ++ case branch_target_overflow: ++ as_bad_where (fixP->fx_file, fixP->fx_line, ++ _(overflow_msgs[branch_target_overflow]), ++ fixup, BYTE_B, BYTE_F); ++ break; ++ case address_offset_overflow: ++ as_bad_where (fixP->fx_file, fixP->fx_line, ++ _(overflow_msgs[address_offset_overflow]), ++ opcode->name, fixup, -32768, 32767); ++ break; ++ case signed_immed16_overflow: ++ as_bad_where (fixP->fx_file, fixP->fx_line, ++ _(overflow_msgs[signed_immed16_overflow]), ++ fixup, -32768, 32767); ++ break; ++ case unsigned_immed16_overflow: ++ as_bad_where (fixP->fx_file, fixP->fx_line, ++ _(overflow_msgs[unsigned_immed16_overflow]), ++ fixup, 0, 65535); ++ break; ++ case unsigned_immed5_overflow: ++ as_bad_where (fixP->fx_file, fixP->fx_line, ++ _(overflow_msgs[unsigned_immed5_overflow]), ++ fixup, 0, 31); ++ break; ++ case custom_opcode_overflow: ++ as_bad_where (fixP->fx_file, fixP->fx_line, ++ _(overflow_msgs[custom_opcode_overflow]), ++ fixup, 0, 255); ++ break; ++ default: ++ as_bad_where (fixP->fx_file, fixP->fx_line, ++ _ ++ ("unspecified overflow in immediate argument")); ++ break; ++ } ++ } ++ ++ ++ /* Apply the rightshift. */ ++ fixup = ((signed)fixup) >> howto->rightshift; ++ ++ /* Truncate the fixup to right size. */ ++ switch (fixP->fx_r_type) ++ { ++ case BFD_RELOC_NIOS2_HI16: ++ fixup = (fixup >> 16) & 0xFFFF; ++ break; ++ case BFD_RELOC_NIOS2_LO16: ++ fixup = fixup & 0xFFFF; ++ break; ++ case BFD_RELOC_NIOS2_HIADJ16: ++ fixup = ((fixup >> 16) & 0xFFFF) + ((fixup >> 15) & 0x01); ++ break; ++ default: ++ fixup = fixup & (howto->dst_mask >> howto->bitpos); ++ break; ++ } ++ ++ /* Fixup the instruction. */ ++ value = (value & ~howto->dst_mask) | (fixup << howto->bitpos); ++ md_number_to_chars (buf, value, 4); ++ } ++ ++ fixP->fx_done = 1; ++ } ++ ++ if (fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT) ++ { ++ fixP->fx_done = 0; ++ if (fixP->fx_addsy ++ && !S_IS_DEFINED (fixP->fx_addsy) && !S_IS_WEAK (fixP->fx_addsy)) ++ S_SET_WEAK (fixP->fx_addsy); ++ } ++ else if (fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY) ++ { ++ fixP->fx_done = 0; ++ } ++} ++ ++bfd_boolean ++nios2_check_overflow (valueT fixup, reloc_howto_type * howto) ++{ ++ /* Apply the rightshift before checking for overflow. */ ++ fixup = ((signed)fixup) >> howto->rightshift; ++ ++ /* Check for overflow - return TRUE if overflow, FALSE if not. */ ++ switch (howto->complain_on_overflow) ++ { ++ case complain_overflow_dont: ++ break; ++ case complain_overflow_bitfield: ++ if ((fixup >> howto->bitsize) != 0) ++ return TRUE; ++ break; ++ case complain_overflow_signed: ++ if ((fixup & 0x80000000) > 0) ++ { ++ /* Check for negative overflow. */ ++ if ((signed) fixup < ((signed) 0x80000000 >> howto->bitsize)) ++ return TRUE; ++ } ++ else ++ { ++ /* Check for positive overflow. */ ++ if (fixup >= ((unsigned) 1 << (howto->bitsize - 1))) ++ return TRUE; ++ } ++ break; ++ case complain_overflow_unsigned: ++ if ((fixup >> howto->bitsize) != 0) ++ return TRUE; ++ break; ++ default: ++ as_bad (_("error checking for overflow - broken assembler")); ++ break; ++ } ++ ++ return FALSE; ++} ++ ++/* Called just before the assembler exits. */ ++void ++md_end () ++{ ++ /* FIXME - not yet implemented */ ++} ++ ++/* Under ELF we need to default _GLOBAL_OFFSET_TABLE. ++ Otherwise we have no need to default values of symbols. */ ++ ++symbolS * ++md_undefined_symbol (char * name ATTRIBUTE_UNUSED) ++{ ++#ifdef OBJ_ELF ++ if (name[0] == '_' && name[1] == 'G' ++ && streq (name, GLOBAL_OFFSET_TABLE_NAME)) ++ { ++ if (!GOT_symbol) ++ { ++ if (symbol_find (name)) ++ as_bad ("GOT already in the symbol table"); ++ ++ GOT_symbol = symbol_new (name, undefined_section, ++ (valueT) 0, & zero_address_frag); ++ } ++ ++ return GOT_symbol; ++ } ++#endif ++ ++ return 0; ++} ++ ++ ++/* Creates a new nios2_insn_relocS and returns a pointer to it. */ ++nios2_insn_relocS * ++nios2_insn_reloc_new (bfd_reloc_code_real_type reloc_type, unsigned int pcrel) ++{ ++ nios2_insn_relocS *retval; ++ retval = (nios2_insn_relocS *) malloc (sizeof (nios2_insn_relocS)); ++ if (retval == NULL) ++ { ++ as_bad (_("can't create relocation")); ++ abort (); ++ } ++ ++ /* Fill out the fields with default values. */ ++ retval->reloc_next = NULL; ++ retval->reloc_type = reloc_type; ++ retval->reloc_pcrel = pcrel; ++ return retval; ++} ++ ++/* Frees up memory previously allocated by nios2_insn_reloc_new(). */ ++void ++nios2_insn_reloc_destroy (nios2_insn_relocS * reloc) ++{ ++ assert (reloc != NULL); ++ free (reloc); ++} ++ ++/* The various nios2_assemble_* functions call this ++ function to generate an expression from a string representing an expression. ++ It then tries to evaluate the expression, and if it can, returns its value. ++ If not, it creates a new nios2_insn_relocS and stores the expression and ++ reloc_type for future use. */ ++unsigned long ++nios2_assemble_expression (const char *exprstr, ++ nios2_insn_infoS * insn, ++ nios2_insn_relocS * prev_reloc, ++ bfd_reloc_code_real_type reloc_type, ++ unsigned int pcrel) ++{ ++ nios2_insn_relocS *reloc; ++ char *saved_line_ptr; ++ unsigned short value; ++ int i; ++ ++ assert (exprstr != NULL); ++ assert (insn != NULL); ++ ++ /* Check for relocation operators. ++ Change the relocation type and advance the ptr to the start of ++ the expression proper. */ ++ for (i = 0; i < nios2_num_special_relocs; i++) ++ { ++ if (strstr (exprstr, nios2_special_reloc[i].string) != NULL) ++ { ++ reloc_type = nios2_special_reloc[i].reloc_type; ++ exprstr += strlen (nios2_special_reloc[i].string) + 1; ++ ++ /* %lo and %hiadj have different meanings for PC-relative ++ expressions. */ ++ if (pcrel) ++ { ++ if (reloc_type == BFD_RELOC_NIOS2_LO16) ++ reloc_type = BFD_RELOC_NIOS2_PCREL_LO; ++ if (reloc_type == BFD_RELOC_NIOS2_HIADJ16) ++ reloc_type = BFD_RELOC_NIOS2_PCREL_HA; ++ } ++ ++ break; ++ } ++ } ++ ++ /* We potentially have a relocation. */ ++ reloc = nios2_insn_reloc_new (reloc_type, pcrel); ++ if (prev_reloc != NULL) ++ prev_reloc->reloc_next = reloc; ++ else ++ insn->insn_reloc = reloc; ++ ++ /* Parse the expression string. */ ++ saved_line_ptr = input_line_pointer; ++ input_line_pointer = (char *) exprstr; ++ expression (&reloc->reloc_expression); ++ input_line_pointer = saved_line_ptr; ++ ++ /* This is redundant as the fixup will put this into ++ the instruction, but it is included here so that ++ self-test mode (-r) works. */ ++ value = 0; ++ if (nios2_mode == NIOS2_MODE_TEST) ++ { ++ if (reloc->reloc_expression.X_op == O_constant) ++ value = reloc->reloc_expression.X_add_number; ++ } ++ ++ return (unsigned long) value; ++} ++ ++/* The function consume_separate takes a pointer into a string ++ of instruction tokens (args) and a pointer into a string representing ++ the expected sequence of tokens and separators. It finds the first ++ instance of the character pointed to by separator in argStr, and ++ returns a pointer to the next element of argStr, which is the ++ following token in the sequence. */ ++char * ++nios2_consume_separator (char *argStr, const char *separator) ++{ ++ char *argPtr; ++ ++ /* If we have a opcode reg, expr(reg) type instruction, and ++ * we are separating the expr from the (reg), we find the last ++ * (, just in case the expression has brackets. */ ++ ++ if (*separator == '(') ++ argPtr = strrchr (argStr, *separator); ++ else ++ argPtr = strchr (argStr, *separator); ++ ++ if (argPtr != NULL) ++ *argPtr++ = 0; ++ else ++ as_bad (_("expecting %c near %s"), *separator, argStr); ++ return argPtr; ++} ++ ++/* The function consume_arg takes a pointer into a string ++ of instruction tokens (args) and a pointer into a string ++ representing the expected sequence of tokens and separators. ++ It checks whether the first argument in argStr is of the ++ expected type, throwing an error if it is not, and returns ++ the pointer argStr. */ ++char * ++nios2_consume_arg (char *argStr, const char *argType) ++{ ++ char *temp; ++ int regno = -1; ++ ++ switch (*argType) ++ { ++ case 'c': ++ if (strncmp (argStr, "ctl", strlen ("ctl")) != 0 ++ && strncmp (argStr, "cpuid", strlen ("cpuid")) != 0 ++ && strncmp (argStr, "status", strlen ("status")) != 0 ++ && strncmp (argStr, "estatus", strlen ("estatus")) != 0 ++ && strncmp (argStr, "bstatus", strlen ("bstatus")) != 0 ++ && strncmp (argStr, "ienable", strlen ("ienable")) != 0 ++ && strncmp (argStr, "ipending", strlen ("ipending")) != 0 ++ && strncmp (argStr, "exception", strlen ("exception")) != 0 ++ && strncmp (argStr, "pteaddr", strlen ("pteaddr")) != 0 ++ && strncmp (argStr, "tlbacc", strlen ("tlbacc")) != 0 ++ && strncmp (argStr, "tlbmisc", strlen ("tlbmisc")) != 0 ++ && strncmp (argStr, "fstatus", strlen ("fstatus")) != 0 ++ && strncmp (argStr, "config", strlen ("config")) != 0 ++ && strncmp (argStr, "mpubase", strlen ("mpubase")) != 0 ++ && strncmp (argStr, "mpuacc", strlen ("mpuacc")) != 0 ++ && strncmp (argStr, "badaddr", strlen ("badaddr")) != 0) ++ { ++ as_bad (_("expecting control register")); ++ } ++ break; ++ case 'd': ++ case 's': ++ case 't': ++ ++ /* We check to make sure we don't have a control register. */ ++ if (strncmp (argStr, "ctl", strlen ("ctl")) == 0 ++ || strncmp (argStr, "cpuid", strlen ("cpuid")) == 0 ++ || strncmp (argStr, "status", strlen ("status")) == 0 ++ || strncmp (argStr, "estatus", strlen ("estatus")) == 0 ++ || strncmp (argStr, "bstatus", strlen ("bstatus")) == 0 ++ || strncmp (argStr, "ienable", strlen ("ienable")) == 0 ++ || strncmp (argStr, "ipending", strlen ("ipending")) == 0 ++ || strncmp (argStr, "exception", strlen ("exception")) == 0 ++ || strncmp (argStr, "pteaddr", strlen ("pteaddr")) == 0 ++ || strncmp (argStr, "tlbacc", strlen ("tlbacc")) == 0 ++ || strncmp (argStr, "tlbmisc", strlen ("tlbmisc")) == 0 ++ || strncmp (argStr, "fstatus", strlen ("fstatus")) == 0 ++ || strncmp (argStr, "config", strlen ("config")) == 0 ++ || strncmp (argStr, "mpubase", strlen ("mpubase")) == 0 ++ || strncmp (argStr, "mpuacc", strlen ("mpuacc")) == 0 ++ || strncmp (argStr, "badaddr", strlen ("badaddr")) == 0) ++ { ++ as_bad (_("illegal use of control register")); ++ } ++ ++ /* And whether coprocessor registers are valid here. */ ++ if (nios2_coproc_reg (argStr) ++ && insn.insn_nios2_opcode->match != OP_MATCH_CUSTOM) ++ { ++ as_bad (_("illegal use of coprocessor register\n")); ++ } ++ ++ ++ /* Extract a register number if the register is of the ++ form r[0-9]+, if it is a normal register, set ++ regno to its number (0-31), else set regno to -1. */ ++ if (argStr[0] == 'r' && ISDIGIT (argStr[1])) ++ { ++ char *p = argStr; ++ ++ ++p; ++ regno = 0; ++ do ++ { ++ regno *= 10; ++ regno += *p - '0'; ++ ++p; ++ } ++ while (ISDIGIT (*p)); ++ } ++ else ++ regno = -1; ++ ++ /* And whether we are using at. */ ++ if (!nios2_as_options.noat ++ && (regno == 1 ++ || strncmp (argStr, "at", strlen ("at")) == 0)) ++ as_warn (_("Register at (r1) can sometimes be corrupted by assembler " ++ "optimizations.\n" ++ "Use .set noat to turn off those optimizations (and this " ++ "warning).")); ++ ++ /* And whether we are using oci registers. */ ++ if (!nios2_as_options.nobreak ++ && (regno == 25 ++ || strncmp (argStr, "bt", strlen ("bt")) == 0)) ++ as_warn (_("The debugger will corrupt bt (r25). If you don't need to " ++ "debug this\n" ++ "code then use .set nobreak to turn off this warning.")); ++ ++ if (!nios2_as_options.nobreak ++ && (regno == 30 ++ || strncmp (argStr, "ba", strlen ("ba")) == 0)) ++ as_warn (_("The debugger will corrupt ba (r30). If you don't need to " ++ "debug this\n" ++ "code then use .set nobreak to turn off this warning.")); ++ break; ++ case 'i': ++ case 'u': ++ if (*argStr == '%') ++ { ++ if (strstr (argStr, "%hi(") || strstr (argStr, "%lo(") ++ || strstr (argStr, "%hiadj(") || strstr (argStr, "%gprel(") ++ || strstr (argStr, "%got(") || strstr (argStr, "%call(") ++ || strstr (argStr, "%gotoff_lo(") ++ || strstr (argStr, "%gotoff_hiadj(") ++ || strstr (argStr, "%tls_gd(") || strstr (argStr, "%tls_ldm(") ++ || strstr (argStr, "%tls_ldo(") || strstr (argStr, "%tls_ie(") ++ || strstr (argStr, "%tls_le(") || strstr (argStr, "%gotoff(")) ++ { ++ /* We zap the brackets because we don't want them confused with ++ separators. */ ++ temp = strchr (argStr, '('); ++ if (temp != NULL) ++ *temp = ' '; ++ temp = strchr (argStr, ')'); ++ if (temp != NULL) ++ *temp = ' '; ++ } ++ else ++ as_bad (_("badly formed expression near %s"), argStr); ++ } ++ break; ++ case 'm': ++ case 'j': ++ case 'k': ++ case 'l': ++ case 'b': ++ /* We can't have %hi, %lo or %hiadj here. */ ++ if (*argStr == '%') ++ as_bad (_("badly formed expression near %s"), argStr); ++ break; ++ default: ++ break; ++ } ++ ++#if 0 ++ /* ??? SPR:173865 This is actually supported by the HW but the documentation ++ is a bit funny. ++ The compiler really want the extra register, so let it have it! */ ++ /* checks for jmp 31 */ ++ /* TODO: move test that insn is jmp to somewhere better.*/ ++ if ((strncmp (insn.insn_nios2_opcode->name, "jmp", strlen ("jmp")) == 0) ++ && (regno == 31 ++ || strncmp (argStr, "ra", strlen ("ra")) == 0)) ++ as_bad (_("It is illegal to jump to the address contained in register ra " ++ "(r31). " ++ "To return from subroutines called by call or callr, use ret " ++ "instead of jmp.")); ++#endif ++ ++ return argStr; ++} ++ ++/* The principal argument parsing function which takes a string ++ representing the instruction arguments, and extracts the argument ++ tokens. */ ++void ++nios2_parse_args (char *argStr, const char *parseStr, char **parsedArgs) ++{ ++ char *p; ++ char *end = NULL; ++ int i; ++ p = argStr; ++ i = 0; ++ bfd_boolean terminate = FALSE; ++ ++ /* This rest of this function is it too fragile and it mostly works, ++ therefore special case this one. */ ++ if (*parseStr == 0 && argStr != 0) ++ { ++ as_bad (_("too many arguments")); ++ parsedArgs[0] = NULL; ++ return; ++ } ++ ++ ++ while (p != NULL && !terminate && i < NIOS2_MAX_INSN_TOKENS) ++ { ++ parsedArgs[i] = nios2_consume_arg (p, parseStr); ++ ++parseStr; ++ if (*parseStr != '\0') ++ { ++ p = nios2_consume_separator (p, parseStr); ++ ++parseStr; ++ } ++ else ++ { ++ /* Check that the argument string has no trailing arguments. */ ++ /* If we've got a %lo etc relocation, we've zapped the brackets with ++ spaces. */ ++ if (strstr (p, "%lo") == p || strstr (p, "%hi") == p ++ || strstr (p, "%hiadj") == p || strstr (p, "%gprel") == p ++ || strstr (p, "%got") == p || strstr (argStr, "%call") ++ || strstr (p, "%gotoff_lo") == p ++ || strstr (p, "%gotoff_hiadj") == p ++ || strstr (p, "%tls_gd") == p || strstr (p, "%tls_ldm") == p ++ || strstr (p, "%tls_ldo") == p || strstr (p, "%tls_ie") == p ++ || strstr (p, "%tls_le") == p || strstr (p, "%gotoff") == p) ++ end = strpbrk (p, ","); ++ else ++ end = strpbrk (p, " ,"); ++ ++ if (end != NULL) ++ as_bad (_("too many arguments")); ++ } ++ ++ if (*parseStr == '\0' || (p != NULL && *p == '\0')) ++ terminate = TRUE; ++ ++i; ++ } ++ ++ parsedArgs[i] = NULL; ++ ++ if (*parseStr != '\0' && insn.insn_nios2_opcode->match != OP_MATCH_BREAK) ++ as_bad (_("missing argument")); ++ ++} ++ ++ ++/* Checks whether the register name is a coprocessor ++ register - returns TRUE if it is, FALSE otherwise. */ ++static bfd_boolean ++nios2_coproc_reg (const char *reg_name) ++{ ++ assert (reg_name != NULL); ++ ++ /* Check that we do have a valid register name and that it is a ++ coprocessor register. ++ It must begin with c, not be a control register, and be a valid ++ register name. */ ++ ++ if (strncmp (reg_name, "c", 1) == 0 && ++ strncmp (reg_name, "ctl", strlen ("ctl")) != 0 && ++ hash_find (nios2_reg_hash, reg_name) != NULL) ++ return TRUE; ++ else ++ return FALSE; ++} ++ ++ ++/********************************************************************* ++ Argument assemble functions ++ ++ Description : All take an instruction argument string, and a pointer ++ to an instruction opcode. Upon return the insn_opcode ++ has the relevant fields filled in to represent the arg ++ string. The return value is NULL if successful, or ++ an error message if an error was detected ++ *********************************************************************/ ++ ++/* Assembles register arguments "dst, src1, src2". */ ++void ++nios2_assemble_args_dst (nios2_insn_infoS * insn_info) ++{ ++ struct nios2_reg *dst, *src1, *src2; ++ ++ if (insn_info->insn_tokens[1] != NULL && ++ insn_info->insn_tokens[2] != NULL && insn_info->insn_tokens[3] != NULL) ++ { ++ dst = ++ (struct nios2_reg *) hash_find (nios2_reg_hash, ++ insn_info->insn_tokens[1]); ++ src1 = ++ (struct nios2_reg *) hash_find (nios2_reg_hash, ++ insn_info->insn_tokens[2]); ++ src2 = ++ (struct nios2_reg *) hash_find (nios2_reg_hash, ++ insn_info->insn_tokens[3]); ++ ++ if (dst == NULL) ++ as_bad (_("unknown register %s"), insn_info->insn_tokens[1]); ++ else ++ SET_INSN_FIELD (RRD, insn_info->insn_code, dst->index); ++ ++ if (src1 == NULL) ++ as_bad (_("unknown register %s"), insn_info->insn_tokens[2]); ++ else ++ SET_INSN_FIELD (RRS, insn_info->insn_code, src1->index); ++ ++ if (src2 == NULL) ++ as_bad (_("unknown register %s"), insn_info->insn_tokens[3]); ++ else ++ SET_INSN_FIELD (RRT, insn_info->insn_code, src2->index); ++ ++ ++ NIOS2_CHECK_ASSEMBLY (insn_info->insn_code, insn_info->insn_tokens[4]); ++ } ++} ++ ++ ++/* Assembles arguments successfully parsed by nios2_parse_args_tsi. */ ++void ++nios2_assemble_args_tsi (nios2_insn_infoS * insn_info) ++{ ++ struct nios2_reg *dst, *src1; ++ unsigned int src2; ++ ++ if (insn_info->insn_tokens[1] != NULL && ++ insn_info->insn_tokens[2] != NULL && insn_info->insn_tokens[3] != NULL) ++ { ++ dst = ++ (struct nios2_reg *) hash_find (nios2_reg_hash, ++ insn_info->insn_tokens[1]); ++ src1 = ++ (struct nios2_reg *) hash_find (nios2_reg_hash, ++ insn_info->insn_tokens[2]); ++ src2 = ++ nios2_assemble_expression (insn_info->insn_tokens[3], insn_info, ++ insn_info->insn_reloc, BFD_RELOC_NIOS2_S16, ++ 0); ++ ++ if (dst == NULL) ++ as_bad (_("unknown register %s"), insn_info->insn_tokens[1]); ++ else ++ SET_INSN_FIELD (IRT, insn_info->insn_code, dst->index); ++ ++ if (src1 == NULL) ++ as_bad (_("unknown register %s"), insn_info->insn_tokens[2]); ++ else ++ SET_INSN_FIELD (IRS, insn_info->insn_code, src1->index); ++ ++ SET_INSN_FIELD (IMM16, insn_info->insn_code, src2); ++ NIOS2_CHECK_ASSEMBLY (insn_info->insn_code, insn_info->insn_tokens[4]); ++ ++ SET_INSN_FIELD (IMM16, insn_info->insn_code, 0); ++ } ++} ++ ++ ++/* Assembles args successfully parsed by nios2_parse_args_tsu. */ ++void ++nios2_assemble_args_tsu (nios2_insn_infoS * insn_info) ++{ ++ struct nios2_reg *dst, *src1; ++ unsigned int src2; ++ ++ if (insn_info->insn_tokens[1] != NULL && ++ insn_info->insn_tokens[2] != NULL && insn_info->insn_tokens[3] != NULL) ++ { ++ dst = ++ (struct nios2_reg *) hash_find (nios2_reg_hash, ++ insn_info->insn_tokens[1]); ++ src1 = ++ (struct nios2_reg *) hash_find (nios2_reg_hash, ++ insn_info->insn_tokens[2]); ++ src2 = ++ nios2_assemble_expression (insn_info->insn_tokens[3], insn_info, ++ insn_info->insn_reloc, BFD_RELOC_NIOS2_U16, ++ 0); ++ ++ if (dst == NULL) ++ as_bad (_("unknown register %s"), insn_info->insn_tokens[1]); ++ else ++ SET_INSN_FIELD (IRT, insn_info->insn_code, dst->index); ++ ++ if (src1 == NULL) ++ as_bad (_("unknown register %s"), insn_info->insn_tokens[2]); ++ else ++ SET_INSN_FIELD (IRS, insn_info->insn_code, src1->index); ++ ++ SET_INSN_FIELD (IMM16, insn_info->insn_code, src2); ++ NIOS2_CHECK_ASSEMBLY (insn_info->insn_code, insn_info->insn_tokens[4]); ++ ++ SET_INSN_FIELD (IMM16, insn_info->insn_code, 0); ++ } ++} ++ ++ ++/* Assembles args successfully parsed by nios2_parse_args_sti. */ ++void ++nios2_assemble_args_sto (nios2_insn_infoS * insn_info) ++{ ++ struct nios2_reg *dst, *src1; ++ unsigned int src2; ++ ++ if (insn_info->insn_tokens[1] != NULL && ++ insn_info->insn_tokens[2] != NULL && insn_info->insn_tokens[3] != NULL) ++ { ++ dst = ++ (struct nios2_reg *) hash_find (nios2_reg_hash, ++ insn_info->insn_tokens[1]); ++ src1 = ++ (struct nios2_reg *) hash_find (nios2_reg_hash, ++ insn_info->insn_tokens[2]); ++ src2 = ++ nios2_assemble_expression (insn_info->insn_tokens[3], insn_info, ++ insn_info->insn_reloc, BFD_RELOC_16_PCREL, ++ 1); ++ ++ if (dst == NULL) ++ as_bad (_("unknown register %s"), insn_info->insn_tokens[1]); ++ else ++ SET_INSN_FIELD (IRS, insn_info->insn_code, dst->index); ++ ++ if (src1 == NULL) ++ as_bad (_("unknown register %s"), insn_info->insn_tokens[2]); ++ else ++ SET_INSN_FIELD (IRT, insn_info->insn_code, src1->index); ++ ++ SET_INSN_FIELD (IMM16, insn_info->insn_code, src2); ++ NIOS2_CHECK_ASSEMBLY (insn_info->insn_code, insn_info->insn_tokens[4]); ++ ++ SET_INSN_FIELD (IMM16, insn_info->insn_code, 0); ++ } ++} ++ ++ ++void ++nios2_assemble_args_o (nios2_insn_infoS * insn_info) ++{ ++ unsigned long immed; ++ ++ if (insn_info->insn_tokens[1] != NULL) ++ { ++ immed = ++ nios2_assemble_expression (insn_info->insn_tokens[1], insn_info, ++ insn_info->insn_reloc, BFD_RELOC_16_PCREL, ++ 1); ++ SET_INSN_FIELD (IMM16, insn_info->insn_code, immed); ++ ++ NIOS2_CHECK_ASSEMBLY (insn_info->insn_code, insn_info->insn_tokens[2]); ++ ++ SET_INSN_FIELD (IMM16, insn_info->insn_code, 0); ++ } ++} ++ ++ ++void ++nios2_assemble_args_is (nios2_insn_infoS * insn_info) ++{ ++ struct nios2_reg *addr_src; ++ unsigned long immed; ++ ++ if (insn_info->insn_tokens[1] != NULL && insn_info->insn_tokens[2] != NULL) ++ { ++ addr_src = ++ (struct nios2_reg *) hash_find (nios2_reg_hash, ++ insn_info->insn_tokens[2]); ++ ++ immed = ++ nios2_assemble_expression (insn_info->insn_tokens[1], insn_info, ++ insn_info->insn_reloc, BFD_RELOC_NIOS2_S16, ++ 0); ++ ++ SET_INSN_FIELD (IMM16, insn_info->insn_code, immed); ++ ++ if (addr_src == NULL) ++ as_bad (_("unknown base register %s"), insn_info->insn_tokens[2]); ++ else ++ SET_INSN_FIELD (RRS, insn_info->insn_code, addr_src->index); ++ ++ NIOS2_CHECK_ASSEMBLY (insn_info->insn_code, insn_info->insn_tokens[3]); ++ ++ SET_INSN_FIELD (IMM16, insn_info->insn_code, 0); ++ } ++} ++ ++ ++void ++nios2_assemble_args_m (nios2_insn_infoS * insn_info) ++{ ++ unsigned long immed; ++ if (insn_info->insn_tokens[1] != NULL) ++ { ++ immed = ++ nios2_assemble_expression (insn_info->insn_tokens[1], insn_info, ++ insn_info->insn_reloc, ++ BFD_RELOC_NIOS2_CALL26, 0); ++ ++ SET_INSN_FIELD (IMM26, insn_info->insn_code, immed); ++ ++ NIOS2_CHECK_ASSEMBLY (insn_info->insn_code, insn_info->insn_tokens[2]); ++ ++ SET_INSN_FIELD (IMM26, insn_info->insn_code, 0); ++ } ++} ++ ++ ++void ++nios2_assemble_args_s (nios2_insn_infoS * insn_info) ++{ ++ struct nios2_reg *src; ++ ++ if (insn_info->insn_tokens[1] != NULL) ++ { ++ src = ++ (struct nios2_reg *) hash_find (nios2_reg_hash, ++ insn_info->insn_tokens[1]); ++ ++ if (src == NULL) ++ as_bad (_("unknown register %s"), insn_info->insn_tokens[1]); ++ else ++ SET_INSN_FIELD (RRS, insn_info->insn_code, src->index); ++ ++ NIOS2_CHECK_ASSEMBLY (insn_info->insn_code, insn_info->insn_tokens[2]); ++ } ++} ++ ++ ++void ++nios2_assemble_args_tis (nios2_insn_infoS * insn_info) ++{ ++ struct nios2_reg *addr_src, *dst; ++ unsigned long immed; ++ ++ if (insn_info->insn_tokens[1] != NULL && ++ insn_info->insn_tokens[2] != NULL && insn_info->insn_tokens[3] != NULL) ++ { ++ ++ dst = ++ (struct nios2_reg *) hash_find (nios2_reg_hash, ++ insn_info->insn_tokens[1]); ++ addr_src = ++ (struct nios2_reg *) hash_find (nios2_reg_hash, ++ insn_info->insn_tokens[3]); ++ immed = ++ nios2_assemble_expression (insn_info->insn_tokens[2], insn_info, ++ insn_info->insn_reloc, BFD_RELOC_NIOS2_S16, ++ 0); ++ ++ ++ if (addr_src == NULL) ++ as_bad (_("unknown register %s"), insn_info->insn_tokens[3]); ++ else ++ SET_INSN_FIELD (RRS, insn_info->insn_code, addr_src->index); ++ ++ if (dst == NULL) ++ as_bad (_("unknown register %s"), insn_info->insn_tokens[1]); ++ else ++ SET_INSN_FIELD (RRT, insn_info->insn_code, dst->index); ++ ++ SET_INSN_FIELD (IMM16, insn_info->insn_code, immed); ++ ++ NIOS2_CHECK_ASSEMBLY (insn_info->insn_code, insn_info->insn_tokens[4]); ++ ++ SET_INSN_FIELD (IMM16, insn_info->insn_code, 0); ++ } ++} ++ ++ ++/* Assemble rdctl dst, ctl. */ ++void ++nios2_assemble_args_dc (nios2_insn_infoS * insn_info) ++{ ++ struct nios2_reg *dst, *ctl; ++ ++ if (insn_info->insn_tokens[1] != NULL && insn_info->insn_tokens[2] != NULL) ++ { ++ ctl = ++ (struct nios2_reg *) hash_find (nios2_reg_hash, ++ insn_info->insn_tokens[2]); ++ dst = ++ (struct nios2_reg *) hash_find (nios2_reg_hash, ++ insn_info->insn_tokens[1]); ++ ++ if (ctl == NULL) ++ as_bad (_("unknown register %s"), insn_info->insn_tokens[1]); ++ else ++ SET_INSN_FIELD (RCTL, insn_info->insn_code, ctl->index); ++ ++ if (dst == NULL) ++ as_bad (_("unknown register %s"), insn_info->insn_tokens[2]); ++ else ++ SET_INSN_FIELD (RRD, insn_info->insn_code, dst->index); ++ ++ NIOS2_CHECK_ASSEMBLY (insn_info->insn_code, insn_info->insn_tokens[3]); ++ } ++} ++ ++ ++/* Assemble wrctl ctl, src. */ ++void ++nios2_assemble_args_cs (nios2_insn_infoS * insn_info) ++{ ++ struct nios2_reg *src, *ctl; ++ ++ if (insn_info->insn_tokens[1] != NULL && insn_info->insn_tokens[2] != NULL) ++ { ++ ctl = ++ (struct nios2_reg *) hash_find (nios2_reg_hash, ++ insn_info->insn_tokens[1]); ++ src = ++ (struct nios2_reg *) hash_find (nios2_reg_hash, ++ insn_info->insn_tokens[2]); ++ ++ if (ctl == NULL) ++ as_bad (_("unknown register %s"), insn_info->insn_tokens[1]); ++ else if (ctl->index == 4) ++ as_bad (_("ipending control register (ctl4) is read-only\n")); ++ else ++ SET_INSN_FIELD (RCTL, insn_info->insn_code, ctl->index); ++ ++ if (src == NULL) ++ as_bad (_("unknown register %s"), insn_info->insn_tokens[2]); ++ else ++ SET_INSN_FIELD (RRS, insn_info->insn_code, src->index); ++ ++ NIOS2_CHECK_ASSEMBLY (insn_info->insn_code, insn_info->insn_tokens[3]); ++ } ++} ++ ++ ++ ++void ++nios2_assemble_args_ldst (nios2_insn_infoS * insn_info) ++{ ++ struct nios2_reg *dst, *src1, *src2; ++ unsigned long custom_n; ++ ++ if (insn_info->insn_tokens[1] != NULL && ++ insn_info->insn_tokens[2] != NULL && ++ insn_info->insn_tokens[3] != NULL && insn_info->insn_tokens[4] != NULL) ++ { ++#if 0 /* ??? Unused/half commented out code */ ++ char *end_p; ++ /* custom_n = nios2_strtoul(insn_info->insn_tokens[1], &end_p); */ ++#endif ++ custom_n = ++ nios2_assemble_expression (insn_info->insn_tokens[1], insn_info, ++ insn_info->insn_reloc, ++ BFD_RELOC_NIOS2_IMM8, 0); ++ ++ dst = ++ (struct nios2_reg *) hash_find (nios2_reg_hash, ++ insn_info->insn_tokens[2]); ++ src1 = ++ (struct nios2_reg *) hash_find (nios2_reg_hash, ++ insn_info->insn_tokens[3]); ++ src2 = ++ (struct nios2_reg *) hash_find (nios2_reg_hash, ++ insn_info->insn_tokens[4]); ++ ++ SET_INSN_FIELD (CUSTOM_N, insn_info->insn_code, custom_n); ++ ++ if (dst == NULL) ++ as_bad (_("unknown register %s"), insn_info->insn_tokens[2]); ++ else ++ SET_INSN_FIELD (RRD, insn_info->insn_code, dst->index); ++ ++ if (src1 == NULL) ++ as_bad (_("unknown register %s"), insn_info->insn_tokens[3]); ++ else ++ SET_INSN_FIELD (RRS, insn_info->insn_code, src1->index); ++ ++ if (src2 == NULL) ++ as_bad (_("unknown register %s"), insn_info->insn_tokens[4]); ++ else ++ SET_INSN_FIELD (RRT, insn_info->insn_code, src2->index); ++ ++ /* Set or clear the bits to indicate whether coprocessor registers are ++ used. */ ++ if (nios2_coproc_reg (insn_info->insn_tokens[2])) ++ SET_INSN_FIELD (CUSTOM_C, insn_info->insn_code, 0); ++ else ++ SET_INSN_FIELD (CUSTOM_C, insn_info->insn_code, 1); ++ ++ if (nios2_coproc_reg (insn_info->insn_tokens[3])) ++ SET_INSN_FIELD (CUSTOM_A, insn_info->insn_code, 0); ++ else ++ SET_INSN_FIELD (CUSTOM_A, insn_info->insn_code, 1); ++ ++ if (nios2_coproc_reg (insn_info->insn_tokens[4])) ++ SET_INSN_FIELD (CUSTOM_B, insn_info->insn_code, 0); ++ else ++ SET_INSN_FIELD (CUSTOM_B, insn_info->insn_code, 1); ++ ++ ++ NIOS2_CHECK_ASSEMBLY (insn_info->insn_code, insn_info->insn_tokens[5]); ++ } ++} ++ ++ ++void ++nios2_assemble_args_none (nios2_insn_infoS * insn_info ATTRIBUTE_UNUSED) ++{ ++ /* Nothing to do. */ ++} ++ ++ ++void ++nios2_assemble_args_dsj (nios2_insn_infoS * insn_info) ++{ ++ struct nios2_reg *dst, *src1; ++ unsigned int src2; ++ ++ if (insn_info->insn_tokens[1] != NULL && ++ insn_info->insn_tokens[2] != NULL && insn_info->insn_tokens[3] != NULL) ++ { ++ dst = ++ (struct nios2_reg *) hash_find (nios2_reg_hash, ++ insn_info->insn_tokens[1]); ++ src1 = ++ (struct nios2_reg *) hash_find (nios2_reg_hash, ++ insn_info->insn_tokens[2]); ++ ++ /* A 5-bit constant expression. */ ++ src2 = ++ nios2_assemble_expression (insn_info->insn_tokens[3], insn_info, ++ insn_info->insn_reloc, ++ BFD_RELOC_NIOS2_IMM5, 0); ++ ++ if (dst == NULL) ++ as_bad (_("unknown register %s"), insn_info->insn_tokens[1]); ++ else ++ SET_INSN_FIELD (RRD, insn_info->insn_code, dst->index); ++ ++ if (src1 == NULL) ++ as_bad (_("unknown register %s"), insn_info->insn_tokens[2]); ++ else ++ SET_INSN_FIELD (RRS, insn_info->insn_code, src1->index); ++ ++ SET_INSN_FIELD (IMM5, insn_info->insn_code, src2); ++ ++ NIOS2_CHECK_ASSEMBLY (insn_info->insn_code, insn_info->insn_tokens[4]); ++ ++ SET_INSN_FIELD (IMM5, insn_info->insn_code, 0); ++ } ++} ++ ++ ++/* Assembles register arguments "dst". */ ++void ++nios2_assemble_args_d (nios2_insn_infoS * insn_info) ++{ ++ struct nios2_reg *dst; ++ ++ if (insn_info->insn_tokens[1] != NULL) ++ { ++ dst = ++ (struct nios2_reg *) hash_find (nios2_reg_hash, ++ insn_info->insn_tokens[1]); ++ ++ if (dst == NULL) ++ as_bad (_("unknown register %s"), insn_info->insn_tokens[1]); ++ else ++ SET_INSN_FIELD (RRD, insn_info->insn_code, dst->index); ++ ++ NIOS2_CHECK_ASSEMBLY (insn_info->insn_code, insn_info->insn_tokens[2]); ++ } ++} ++ ++/* Assemble break op. */ ++void ++nios2_assemble_args_b (nios2_insn_infoS * insn_info) ++{ ++ unsigned int imm5 = 0; ++ ++ if (insn_info->insn_tokens[1] != NULL) ++ { ++ /* A 5-bit constant expression. */ ++ imm5 = ++ nios2_assemble_expression (insn_info->insn_tokens[1], insn_info, ++ insn_info->insn_reloc, ++ BFD_RELOC_NIOS2_IMM5, 0); ++ ++ SET_INSN_FIELD (TRAP_IMM5, insn_info->insn_code, imm5); ++ ++ NIOS2_CHECK_ASSEMBLY (insn_info->insn_code, insn_info->insn_tokens[2]); ++ } ++ ++ SET_INSN_FIELD (TRAP_IMM5, insn_info->insn_code, imm5); ++ ++ NIOS2_CHECK_ASSEMBLY (insn_info->insn_code, insn_info->insn_tokens[2]); ++} ++ ++/* Machine-dependent assembler directive handling follows */ ++ ++/* .set sets assembler options eg noat/at and is also used ++ to set symbol values (.equ, .equiv ). */ ++void ++s_nios2_set (int equiv) ++{ ++ char *directive = input_line_pointer; ++ char delim = get_symbol_end (); ++ char *endline; ++ endline = input_line_pointer; ++ *endline = delim; ++ ++ /* We only want to handle ".set XXX" if the ++ user has tried ".set XXX, YYY" they are not ++ trying a directive. This prevents ++ us from polluting the name space. */ ++ ++ SKIP_WHITESPACE (); ++ ++ if (is_end_of_line[(unsigned char) *input_line_pointer]) ++ { ++ bfd_boolean done = FALSE; ++ *endline = 0; ++ ++ if (!strcmp (directive, "noat")) ++ { ++ done = TRUE; ++ nios2_as_options.noat = TRUE; ++ } ++ ++ if (!strcmp (directive, "at")) ++ { ++ done = TRUE; ++ nios2_as_options.noat = FALSE; ++ } ++ ++ if (!strcmp (directive, "nobreak")) ++ { ++ done = TRUE; ++ nios2_as_options.nobreak = TRUE; ++ } ++ ++ if (!strcmp (directive, "break")) ++ { ++ done = TRUE; ++ nios2_as_options.nobreak = FALSE; ++ } ++ ++ if (!strcmp (directive, "norelax")) ++ { ++ done = TRUE; ++ nios2_as_options.relax = relax_none; ++ } ++ else if (!strcmp (directive, "relaxsection")) ++ { ++ done = TRUE; ++ nios2_as_options.relax = relax_section; ++ } ++ else if (!strcmp (directive, "relaxall")) ++ { ++ done = TRUE; ++ nios2_as_options.relax = relax_all; ++ } ++ ++ ++ if (done) ++ { ++ *endline = delim; ++ demand_empty_rest_of_line (); ++ return; ++ } ++ } ++ ++ ++ /* If we fall through to here, either we have ".set XXX, YYY" ++ or we have ".set XXX" where XXX is unknown or we have ++ a syntax error. */ ++ input_line_pointer = directive; ++ *endline = delim; ++ s_set (equiv); ++} ++ ++/* nop fill pattern for text section. */ ++static char const nop[4] = { 0x3a, 0x88, 0x01, 0x00 }; ++ ++/* nios2_frob_label() is called when after a label is recognized. */ ++ ++void ++nios2_frob_label (symbolS * lab) ++{ ++ /* Update the label's address with the current output pointer. */ ++ symbol_set_frag (lab, frag_now); ++ S_SET_VALUE (lab, (valueT) frag_now_fix ()); ++ ++ /* Record this label for future adjustment after we find out what ++ kind of data it references, and the required alignment therewith. */ ++ nios2_last_label = lab; ++} ++ ++ ++ ++/* Hook into cons for auto-alignment. */ ++ ++void ++nios2_cons_align (int size) ++{ ++ int log_size; ++ const char *pfill = NULL; ++ ++ log_size = 0; ++ while ((size >>= 1) != 0) ++ ++log_size; ++ ++ if (subseg_text_p (now_seg)) ++ { ++ pfill = (const char *) &nop; ++ } ++ else ++ pfill = NULL; ++ ++ if (nios2_auto_align_on) ++ nios2_align (log_size, pfill, NULL); ++ ++ nios2_last_label = NULL; ++} ++ ++static void ++s_nios2_sdata (int ignore ATTRIBUTE_UNUSED) ++{ ++ int temp; ++ ++ temp = get_absolute_expression (); ++ subseg_new (".sdata", 0); ++ demand_empty_rest_of_line (); ++} ++ ++/* Map 's' to SHF_NIOS2_GPREL. */ ++/* This is from the Alpha code tc-alpha.c. */ ++int ++nios2_elf_section_letter (int letter, char **ptr_msg) ++{ ++ if (letter == 's') ++ return SHF_NIOS2_GPREL; ++ ++ *ptr_msg = _("Bad .section directive: want a,s,w,x,M,S,G,T in string"); ++ return 0; ++} ++ ++/* Map SHF_ALPHA_GPREL to SEC_SMALL_DATA. */ ++/* This is from the Alpha code tc-alpha.c. */ ++flagword ++nios2_elf_section_flags (flagword flags, int attr, int type ATTRIBUTE_UNUSED) ++{ ++ if (attr & SHF_NIOS2_GPREL) ++ flags |= SEC_SMALL_DATA; ++ return flags; ++} ++ ++/* Explicitly unaligned cons. */ ++ ++static void ++s_nios2_ucons (int nbytes) ++{ ++ int hold; ++ hold = nios2_auto_align_on; ++ nios2_auto_align_on = 0; ++ cons (nbytes); ++ nios2_auto_align_on = hold; ++} ++ ++static int nios2_tls_ldo_reloc; ++ ++void ++nios2_cons (expressionS *exp, int size) ++{ ++ /* Handle %tls_ldo(...) */ ++ ++ nios2_tls_ldo_reloc = 0; ++ ++ SKIP_WHITESPACE (); ++ if (input_line_pointer[0] == '%') ++ { ++ if (strncmp (input_line_pointer + 1, "tls_ldo", 7) == 0) ++ { ++ if (size != 4) ++ as_bad (_("Illegal operands: %%tls_ldo in %d-byte data field"), ++ size); ++ else ++ { ++ input_line_pointer += 8; ++ nios2_tls_ldo_reloc = 1; ++ } ++ } ++ if (nios2_tls_ldo_reloc) ++ { ++ SKIP_WHITESPACE (); ++ if (input_line_pointer[0] != '(') ++ as_bad (_("Illegal operands: %%tls_ldo requires arguments in ()")); ++ else ++ { ++ int c; ++ char *end = ++input_line_pointer; ++ int npar = 0; ++ ++ while (! is_end_of_line[(c = *end)]) ++ { ++ if (c == '(') ++ npar++; ++ else if (c == ')') ++ { ++ if (!npar) ++ break; ++ npar--; ++ } ++ end++; ++ } ++ ++ if (c != ')') ++ as_bad (_("Illegal operands: %%tls_ldo requires arguments in ()")); ++ else ++ { ++ *end = '\0'; ++ expression (exp); ++ *end = c; ++ if (input_line_pointer != end) ++ as_bad (_("Illegal operands: %%tls_ldo requires arguments in ()")); ++ else ++ { ++ input_line_pointer++; ++ SKIP_WHITESPACE (); ++ c = *input_line_pointer; ++ if (! is_end_of_line[c] && c != ',') ++ as_bad (_("Illegal operands: garbage after %%tls_ldo()")); ++ } ++ } ++ } ++ } ++ } ++ if (!nios2_tls_ldo_reloc) ++ expression (exp); ++} ++ ++void ++nios2_cons_fix_new (fragS *frag, int where, unsigned int nbytes, ++ expressionS *exp) ++{ ++ bfd_reloc_code_real_type r; ++ ++ r = (nbytes == 1 ? BFD_RELOC_8 : ++ (nbytes == 2 ? BFD_RELOC_16 : ++ (nbytes == 4 ? BFD_RELOC_32 : BFD_RELOC_64))); ++ ++ if (nios2_tls_ldo_reloc) ++ r = BFD_RELOC_NIOS2_TLS_DTPREL; ++ ++ fix_new_exp (frag, where, (int) nbytes, exp, 0, r); ++ nios2_tls_ldo_reloc = 0; ++} ++ ++/* Handles all machine-dependent alignment needs. */ ++static void ++nios2_align (int log_size, const char *pfill, symbolS * label) ++{ ++ int align; ++ long max_alignment = 15; ++ ++ /* The front end is prone to changing segments out from under us ++ temporarily when -g is in effect. */ ++ int switched_seg_p = (nios2_current_align_seg != now_seg); ++ ++ align = log_size; ++ if (align > max_alignment) ++ { ++ align = max_alignment; ++ as_bad (_("Alignment too large: %d. assumed"), align); ++ } ++ else if (align < 0) ++ { ++ as_warn (_("Alignment negative: 0 assumed")); ++ align = 0; ++ } ++ ++ if (align != 0) ++ { ++ if (subseg_text_p (now_seg) && align >= 2) ++ { ++ /* First, make sure we're on a four-byte boundary, in case ++ someone has been putting .byte values the text section. */ ++ if (nios2_current_align < 2 || switched_seg_p) ++ frag_align (2, 0, 0); ++ ++ /* Now fill in the alignment pattern. */ ++ if (pfill != NULL) ++ frag_align_pattern (align, pfill, sizeof nop, 0); ++ else ++ frag_align (align, 0, 0); ++ } ++ else ++ { ++ frag_align (align, 0, 0); ++ } ++ ++ if (!switched_seg_p) ++ nios2_current_align = align; ++ ++ /* If the last label was in a different section we can't align it. */ ++ if (label != NULL && !switched_seg_p) ++ { ++ symbolS *sym; ++ int label_seen = FALSE; ++ struct frag *old_frag; ++ valueT old_value; ++ valueT new_value; ++ ++ assert (S_GET_SEGMENT (label) == now_seg); ++ ++ old_frag = symbol_get_frag (label); ++ old_value = S_GET_VALUE (label); ++ new_value = (valueT) frag_now_fix (); ++ ++ /* It is possible to have more than one label at a particular ++ address, especially if debugging is enabled, so we must ++ take care to adjust all the labels at this address in this ++ fragment. To save time we search from the end of the symbol ++ list, backwards, since the symbols we are interested in are ++ almost certainly the ones that were most recently added. ++ Also to save time we stop searching once we have seen at least ++ one matching label, and we encounter a label that is no longer ++ in the target fragment. Note, this search is guaranteed to ++ find at least one match when sym == label, so no special case ++ code is necessary. */ ++ for (sym = symbol_lastP; sym != NULL; sym = symbol_previous (sym)) ++ { ++ if (symbol_get_frag (sym) == old_frag ++ && S_GET_VALUE (sym) == old_value) ++ { ++ label_seen = TRUE; ++ symbol_set_frag (sym, frag_now); ++ S_SET_VALUE (sym, new_value); ++ } ++ else if (label_seen && symbol_get_frag (sym) != old_frag) ++ break; ++ } ++ } ++ record_alignment (now_seg, align); ++ } ++} ++ ++/* This is called from HANDLE_ALIGN in tc-nios2.h. */ ++ ++void ++nios2_handle_align (fragS * fragp) ++{ ++ /* If we are expecting to relax in the linker, then we must output a relocation ++ * to tell the linker we are aligning code. */ ++ if (nios2_as_options.relax == relax_all ++ && (fragp->fr_type == rs_align ++ || fragp->fr_type == rs_align_code) ++ && fragp->fr_address + fragp->fr_fix > 0 ++ && fragp->fr_offset > 1 && now_seg != bss_section) ++ fix_new (fragp, fragp->fr_fix, 4, &abs_symbol, fragp->fr_offset, 0, ++ BFD_RELOC_NIOS2_ALIGN); ++ ++} ++ ++/* Handle the .align pseudo-op. This aligns to a power of two. It ++ also adjusts any current instruction label. We treat this the same ++ way the MIPS port does: .align 0 turns off auto alignment. */ ++ ++static void ++s_nios2_align (int ignore ATTRIBUTE_UNUSED) ++{ ++ int align; ++ char fill; ++ const char *pfill = NULL; ++ long max_alignment = 15; ++ ++ ++ align = get_absolute_expression (); ++ if (align > max_alignment) ++ { ++ align = max_alignment; ++ as_bad (_("Alignment too large: %d. assumed"), align); ++ } ++ else if (align < 0) ++ { ++ as_warn (_("Alignment negative: 0 assumed")); ++ align = 0; ++ } ++ ++ if (*input_line_pointer == ',') ++ { ++ input_line_pointer++; ++ fill = get_absolute_expression (); ++ pfill = (const char *) &fill; ++ } ++ else if (subseg_text_p (now_seg)) ++ { ++ pfill = (const char *) &nop; ++ } ++ else ++ { ++ pfill = NULL; ++ nios2_last_label = NULL; ++ } ++ ++ if (align != 0) ++ { ++ nios2_auto_align_on = 1; ++ nios2_align (align, pfill, nios2_last_label); ++ nios2_last_label = NULL; ++ } ++ else ++ { ++ nios2_auto_align_on = 0; ++ } ++ ++ demand_empty_rest_of_line (); ++} ++ ++ ++/* Handle the .text pseudo-op. This is like the usual one, but it ++ clears the saved last label and resets known alignment. */ ++ ++static void ++s_nios2_text (int i) ++{ ++ s_text (i); ++ nios2_last_label = NULL; ++ nios2_current_align = 0; ++ nios2_current_align_seg = now_seg; ++} ++ ++/* Handle the .data pseudo-op. This is like the usual one, but it ++ clears the saved last label and resets known alignment. */ ++ ++static void ++s_nios2_data (int i) ++{ ++ s_data (i); ++ nios2_last_label = NULL; ++ nios2_current_align = 0; ++ nios2_current_align_seg = now_seg; ++} ++ ++/* Handle the .section pseudo-op. This is like the usual one, but it ++ clears the saved last label and resets known alignment. */ ++ ++static void ++s_nios2_section (int ignore) ++{ ++ obj_elf_section (ignore); ++ nios2_last_label = NULL; ++ nios2_current_align = 0; ++ nios2_current_align_seg = now_seg; ++} ++ ++/* Convert REGNAME to a DWARF-2 register number. */ ++ ++int ++tc_nios2_regname_to_dw2regnum (char *regname) ++{ ++ struct nios2_reg *r = (struct nios2_reg *) hash_find (nios2_reg_hash, ++ regname); ++ if (r == NULL) ++ return -1; ++ return r->index; ++} ++ ++/* Initialize the DWARF-2 unwind information for this procedure. */ ++ ++void ++tc_nios2_frame_initial_instructions (void) ++{ ++ cfi_add_CFA_def_cfa (27, 0); ++} +Index: binutils-2.17.50.0.12/gas/config/tc-nios2.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/config/tc-nios2.h 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,124 @@ ++/* NOT ASSIGNED TO FSF. COPYRIGHT ALTERA. */ ++/* tc-nios2.h -- header file for tc-nios2.c. ++ ++ Copyright (C) 2003 ++ by Nigel Gray (ngray@altera.com). ++ ++ This file is part of GAS. ++ ++ GAS is free software; you can 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. ++ ++ GAS is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with GAS; see the file COPYING. If not, write to the Free ++ Software Foundation, 59 Temple Place - Suite 330, Boston, MA ++ 02111-1307, USA. */ ++ ++#ifndef TC_NIOS2 ++#define TC_NIOS2 ++ ++/* ++ * If unspecified, default to little endian. We can explicitly specify ++ * a big-endian default by configuring with --target=nios2eb-elf. We ++ * can override the default with the -EB and -EL options. ++ */ ++#ifndef TARGET_BYTES_BIG_ENDIAN ++#define TARGET_BYTES_BIG_ENDIAN 0 ++#endif ++ ++#ifdef OBJ_ELF ++extern const char *nios2_target_format (void); ++#define TARGET_FORMAT nios2_target_format () ++#define TARGET_ARCH bfd_arch_nios2 ++#endif ++ ++/* An NIOS2 instruction consists of tokens and separator characters ++// the tokens are things like the instruction name (add, or jmp etc), ++// the register indices ($5, $7 etc), and constant expressions. The ++// separator characters are commas, brackets and space. ++// The instruction name is always separated from other tokens by a space ++// The maximum number of tokens in an instruction is 5 (the instruction name, ++// 3 arguments, and a 4th string representing the expected instructin opcode ++// after assembly. The latter is only used when the assemble is running in ++// self test mode, otherwise its presence will generate an error. */ ++#define NIOS2_MAX_INSN_TOKENS 6 ++ ++/* There are no machine-specific operands so we #define this to nothing */ ++#define md_operand(x) ++ ++/* function prototypes exported to rest of GAS */ ++extern void md_assemble (char *op_str); ++extern void md_end (void); ++extern void md_begin (void); ++ ++#define TC_FORCE_RELOCATION(fixp) nios2_force_relocation (fixp) ++extern int nios2_force_relocation (struct fix *); ++ ++#define tc_fix_adjustable(fixp) nios2_fix_adjustable (fixp) ++extern int nios2_fix_adjustable (struct fix *); ++ ++#define tc_frob_label(lab) nios2_frob_label(lab) ++extern void nios2_frob_label (symbolS *); ++ ++#define tc_frob_symbol(symp, punt) punt = nios2_frob_symbol(symp) ? 1 : punt ++extern int nios2_frob_symbol (symbolS * symp); ++ ++#define md_cons_align(nbytes) nios2_cons_align (nbytes) ++extern void nios2_cons_align (int); ++ ++extern void md_convert_frag (bfd * headers, segT sec, fragS * fragP); ++ ++/* When relaxing, we need to generate relocations for alignment ++ directives. */ ++#define HANDLE_ALIGN(frag) nios2_handle_align (frag) ++extern void nios2_handle_align (fragS *); ++ ++extern int tc_nios2_regname_to_dw2regnum (char *regname); ++ ++extern void tc_nios2_frame_initial_instructions (void); ++ ++#define md_relax_frag nios2_relax_frag ++extern long nios2_relax_frag ++ (segT segment, fragS * fragP, long stretch); ++ ++#ifdef OBJ_ELF ++#define ELF_TC_SPECIAL_SECTIONS \ ++ { ".sdata", SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_NIOS2_GPREL }, \ ++ { ".sbss", SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_NIOS2_GPREL }, \ ++ { ".lit4", SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_NIOS2_GPREL }, \ ++ { ".lit8", SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_NIOS2_GPREL }, ++ ++/* Processor specific section directives */ ++#define md_elf_section_letter nios2_elf_section_letter ++extern int nios2_elf_section_letter (int, char **); ++#define md_elf_section_flags nios2_elf_section_flags ++extern flagword nios2_elf_section_flags (flagword, int, int); ++#endif ++ ++#define GLOBAL_OFFSET_TABLE_NAME "_GLOBAL_OFFSET_TABLE_" ++ ++#define DIFF_EXPR_OK ++ ++#define TC_PARSE_CONS_EXPRESSION(EXP, NBYTES) nios2_cons (EXP, NBYTES) ++extern void nios2_cons (expressionS *exp, int size); ++ ++#define TC_CONS_FIX_NEW nios2_cons_fix_new ++extern void nios2_cons_fix_new(struct frag *frag, int where, ++ unsigned int nbytes, struct expressionS *exp); ++ ++/* We want .cfi_* pseudo-ops for generating unwind info. */ ++#define TARGET_USE_CFIPOP 1 ++#define DWARF2_DEFAULT_RETURN_COLUMN 31 ++#define DWARF2_CIE_DATA_ALIGNMENT (-4) ++#define tc_regname_to_dw2regnum tc_nios2_regname_to_dw2regnum ++#define tc_cfi_frame_initial_instructions tc_nios2_frame_initial_instructions ++#define tc_cfi_no_pcrel_expr 1 ++ ++#endif // TC_NIOS2 +Index: binutils-2.17.50.0.12/gas/doc/c-nios2.texi +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/doc/c-nios2.texi 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,223 @@ ++@c NOT ASSIGNED TO FSF. COPYRIGHT ALTERA. ++@c Copyright 2004 ++@c This is part of the GAS manual. ++@c For copying conditions, see the file as.texinfo. ++@ifset GENERIC ++@page ++@node NiosII-Dependent ++@chapter Altera Nios II Dependent Features ++@end ifset ++@ifclear GENERIC ++@node Machine Dependencies ++@chapter ltera Nios II Dependent Features ++@end ifclear ++ ++@cindex Altera Nios II support ++@cindex Nios support ++@cindex Nios II support ++@menu ++* Nios II Options:: Options ++* Nios II Syntax:: Syntax ++* Nios II Relocations:: Relocations ++* Nios II Directives:: Nios II Machine Directives ++* Nios II Opcodes:: Opcodes ++@end menu ++ ++@node Nios II Options ++@section Options ++@cindex Nios II options ++@cindex options for Nios II ++ ++@table @code ++ ++@cindex @code{relax-all} command line option, Nios II ++@item -relax-all ++Replace all branch and call instructions with @code{jmp} and @code{callr} sequences ++ ++@cindex @code{relax-section} command line option, Nios II ++@item -relax-section ++Replace identified out of range branches with @code{jmp} sequences (default) ++ ++@cindex @code{no-relax} command line option, Nios II ++@item -no-relax ++Do not replace any branches or calls ++ ++@cindex @code{EB} command line option, Nios II ++@item -EB ++Generate big-endian output ++ ++@cindex @code{EL} command line option, Nios II ++@item -EL ++Generate little-endian output ++ ++@end table ++ ++ ++@node Nios II Syntax ++@section Syntax ++@menu ++* Nios II Chars:: Special Characters ++@end menu ++ ++ ++@node Nios II Chars ++@subsection Special Characters ++ ++@cindex line comment character, Nios II ++@cindex Nios II line comment character ++@samp{#} is the line comment character. ++ ++@cindex line separator character, Nios II ++@cindex Nios II line separator character ++@samp{;} is the line separator character. ++ ++ ++@node Nios II Relocations ++@section Nios II Machine Relocations ++ ++@cindex machine relocations, Nios II ++@cindex Nios II machine relocations ++ ++@table @code ++@cindex @code{hiadj} directive, Nios II ++@item %hiadj(@var{expression}) ++Extract the upper 16-bits of @var{expression} and add ++one if the 15th bit is set. ++ ++The value of %hiadj is: ++((@var{expression} >> 16) & 0xffff) + ((@var{expression} >> 15) & 0x01). ++ ++The intention of the @code{%hiadj} relocation is to be used with ++an @code{addi}, @code{ld} or @code{st} instructions ++along with a @code{%lo}. ++ ++@smallexample ++movhi r2, %hiadj(symbol) ++addi r2, r2, %lo(symbol) ++@end smallexample ++ ++@cindex @code{hi} directive, Nios II ++@item %hi(@var{expression}) ++Extract the upper 16-bits of @var{expression}. ++ ++ ++@cindex @code{lo} directive, Nios II ++@item %lo(@var{expression}) ++Extract the lower 16-bits of @var{expression}. ++ ++ ++@cindex @code{gprel} directive, Nios II ++@item %gprel(@var{expression}) ++Subtract the value of the symbol @code{_gp} from ++@var{expression}. ++ ++The intention of the @code{%gprel} relocation is ++to have a fast small area of memory which only ++takes a 16-bit immediate to access. ++ ++@smallexample ++ .section .sdata ++fastint: ++ .int 123 ++ .section .text ++ ldw r4, %gprel(fastint)(gp) ++@end smallexample ++ ++ ++@end table ++ ++ ++@node Nios II Directives ++@section Nios II Machine Directives ++ ++@cindex machine directives, Nios II ++@cindex Nios II machine directives ++ ++@table @code ++ ++@cindex @code{align} directive, Nios II ++@item .align @var{expression} [, @var{expression}] ++This is the generic @var{.align} directive, however ++this aligns to a power of two. ++ ++@cindex @code{half} directive, Nios II ++@item .half @var{expression} ++Create an aligned constant 2-bytes in size ++ ++@cindex @code{word} directive, Nios II ++@item .word @var{expression} ++Create an aligned constant 4-bytes in size ++ ++@cindex @code{dword} directive, Nios II ++@item .dword @var{expression} ++Create an aligned constant 8-bytes in size ++ ++@cindex @code{2byte} directive, Nios II ++@item .2byte @var{expression} ++Create an un-aligned constant 2-bytes in size ++ ++@cindex @code{4byte} directive, Nios II ++@item .4byte @var{expression} ++Create an un-aligned constant 4-bytes in size ++ ++@cindex @code{8byte} directive, Nios II ++@item .8byte @var{expression} ++Create an un-aligned constant 8-bytes in size ++ ++@cindex @code{16byte} directive, Nios II ++@item .16byte @var{expression} ++Create an un-aligned constant 16-bytes in size ++ ++@cindex @code{set noat} directive, Nios II ++@item .set noat ++Allows assembly code to use @code{at} register without ++warning and macro or relaxation expansions will ++generate a warning. ++ ++@cindex @code{set at} directive, Nios II ++@item .set at ++Assembly code using @code{at} register will generate ++warnings, and macro expansion and relaxation will be ++enabled. ++ ++@cindex @code{set nobreak} directive, Nios II ++@item .set nobreak ++Allows assembly code to use @code{ba}, @code{bt}, ++registers without warning. ++ ++@cindex @code{set break} directive, Nios II ++@item .set break ++Turns warnings back on for using @code{ba}, @code{bt} ++registers. ++ ++@cindex @code{set norelax} directive, Nios II ++@item .set norelax ++Do not replace any branches or calls. ++ ++@cindex @code{set relaxsection} directive, Nios II ++@item .set relaxsection ++Replace identified out of range branches with ++@code{jmp} sequences (default). ++ ++@cindex @code{set relaxall} directive, Nios II ++@item .set relaxsection ++Replace all branch and call instructions with ++@code{jmp} and @code{callr} sequences. ++ ++@cindex @code{set} directive, Nios II ++@item .set @dots{} ++All other @code{.set} are the normal use. ++ ++@end table ++ ++@node Nios II Opcodes ++@section Opcodes ++ ++@cindex Nios II opcodes ++@cindex opcodes for Nios II ++@code{@value{AS}} implements all the standard Nios II opcodes. No ++additional pseudo-instructions are needed on this family. ++ ++For information on the Nios II machine instruction set, see the @cite{Nios II ++User's Manual} ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/add.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/add.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,16 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 add ++ ++# Test the add instruction ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> add r4,r4,r4 ++0+0004 <[^>]*> addi r4,r4,32767 ++0+0008 <[^>]*> addi r4,r4,-32768 ++0+000c <[^>]*> addi r4,r4,0 ++0+0010 <[^>]*> addi r4,r4,-1 ++0+0014 <[^>]*> addi r4,r4,-1 ++0+0018 <[^>]*> addi r4,r4,13398 ++0+001c <[^>]*> nop +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/add.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/add.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,13 @@ ++# Source file used to test the add and addi instructions. ++ ++foo: ++ add r4,r4,r4 ++ addi r4,r4,0x7fff ++ addi r4,r4,-0x8000 ++ addi r4,r4,0x0 ++ addi r4,r4,-0x01 ++ subi r4,r4,0x01 ++ addi r4,r4,0x3456 ++ ++# should disassemble to add r0,0,r0 ++ nop +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/align_fill.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/align_fill.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,23 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 align_fill ++ ++# Test the and macro. ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> addi sp,sp,-8 ++0+0004 <[^>]*> stw fp,4\(sp\) ++0+0008 <[^>]*> mov fp,sp ++0+000c <[^>]*> mov r3,zero ++0+0010 <[^>]*> nop ++0+0014 <[^>]*> nop ++0+0018 <[^>]*> nop ++0+001c <[^>]*> nop ++0+0020 <[^>]*> addi r3,r3,1 ++0+0024 <[^>]*> cmplti r2,r3,100 ++0+0028 <[^>]*> bne r2,zero,0+0020 <[^>*]*> ++0+002c <[^>]*> ldw fp,4\(sp\) ++0+0030 <[^>]*> addi sp,sp,8 ++0+0034 <[^>]*> ret ++ ... +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/align_fill.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/align_fill.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,20 @@ ++ .file "a.c" ++ .section .text ++ .align 3 ++ .global x ++ .type x, @function ++x: ++ addi sp, sp, -8 ++ stw fp, 4(sp) ++ mov fp, sp ++ mov r3, zero ++ .align 5 ++.L6: ++ addi r3, r3, 1 ++ cmplti r2, r3, 100 ++ bne r2, zero, .L6 ++ ldw fp, 4(sp) ++ addi sp, sp, 8 ++ ret ++ .size x, .-x ++ .ident "GCC: (GNU) 3.3.3 (Altera Nios II 1.0 b302)" +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/align_text.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/align_text.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,22 @@ ++#objdump: -dr ++#name: NIOS2 align_test ++ ++# Test alignment in text sections. ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++00000000 <label-0x20>: ++ 0: 00000000 call 0 <label-0x20> ++ 4: 0001883a nop ++ 8: 0001883a nop ++ c: 0001883a nop ++ 10: 0001883a nop ++ 14: 0001883a nop ++ 18: 0001883a nop ++ 1c: 0001883a nop ++ ++00000020 <label>: ++ 20: 0001883a nop ++00000024 <label2>: ++ ... +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/align_text.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/align_text.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,15 @@ ++ .asciz "" # empty string ++ .align 2 ++ ++ nop ++ nop ++ label: ++ .align 5 ++ nop ++ label2: ++ .section mysection ++ .align 2 ++ ++ ++ ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/and.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/and.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,17 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 and ++ ++# Test the and macro. ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> and r4,r4,r4 ++0+0004 <[^>]*> andi r4,r4,32767 ++0+0008 <[^>]*> andi r4,r4,32768 ++0+000c <[^>]*> andi r4,r4,65535 ++0+0010 <[^>]*> andi r4,r4,0 ++0+0014 <[^>]*> andhi r4,r4,32767 ++0+0018 <[^>]*> andhi r4,r4,32768 ++0+001c <[^>]*> andhi r4,r4,65535 ++0+0020 <[^>]*> andhi r4,r4,0 +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/and.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/and.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,13 @@ ++# Source file used to test the and, andhi and andi instructions ++ ++foo: ++ and r4,r4,r4 ++ andi r4,r4,0x7fff ++ andi r4,r4,0x8000 ++ andi r4,r4,0xffff ++ andi r4,r4,0x0 ++ andhi r4,r4,0x7fff ++ andhi r4,r4,0x8000 ++ andhi r4,r4,0xffff ++ andhi r4,r4,0x0 ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/blt.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/blt.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1 @@ ++This file is obsolete +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/blt.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/blt.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1 @@ ++This file is obsolete +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/branch.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/branch.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,16 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 branch ++ ++# Test the branch instructions. ++dump.o: file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> beq r4,r5,00000000 <text_label> ++0+0004 <[^>]*> bge r4,r5,00000000 <text_label> ++0+0008 <[^>]*> bgeu r4,r5,00000000 <text_label> ++0+000c <[^>]*> blt r4,r5,00000000 <text_label> ++0+0010 <[^>]*> bltu r4,r5,00000000 <text_label> ++0+0014 <[^>]*> bne r4,r5,00000000 <text_label> ++0+0018 <[^>]*> br 0000001c <text_label\+0x1c> ++[ ]*18: R_NIOS2_PCREL16 external_label ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/branch.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/branch.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,15 @@ ++# Source file used to test the beq macro. ++ .globl text_label ++ .text ++.set norelax ++text_label: ++ beq r4,r5,text_label ++ bge r4,r5,text_label ++ bgeu r4,r5,text_label ++ blt r4,r5,text_label ++ bltu r4,r5,text_label ++ bne r4,r5,text_label ++ ++# Branch to an external label. ++ br external_label ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/break.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/break.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,12 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 break ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> break 0 ++0+0004 <[^>]*> break 0 ++0+0008 <[^>]*> break 31 ++0+000c <[^>]*> break 14 ++ ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/break.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/break.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,8 @@ ++# Source file used to test the 20-bit break instructions ++foo: ++ break ++ break 0 ++ break 31 ++ break 14 ++ ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/bret.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/bret.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,8 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 bret ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> bret ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/bret.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/bret.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,5 @@ ++# Source file used to test the bret instructions ++foo: ++ bret ++ ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/cache.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/cache.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,17 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 cache ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> flushd -32768\(r6\) ++0+0004 <[^>]*> flushd 32767\(r6\) ++0+0008 <[^>]*> flushd 0\(r6\) ++0+000c <[^>]*> flushd -1\(r6\) ++0+0010 <[^>]*> flushd 0\(r6\) ++[ ]*10: R_NIOS2_S16 .text ++0+0014 <[^>]*> flushd 0\(r6\) ++[ ]*14: R_NIOS2_S16 external ++0+0018 <[^>]*> flushi r2 ++0+001c <[^>]*> flushp ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/cache.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/cache.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,21 @@ ++# Source file used to test the cache instruction ++foo: ++ flushd -0x8000(r6) ++ flushd 0x7fff(r6) ++ flushd 0x0(r6) ++ flushd -0x0001(r6) ++ ++# use symbol for offset ++ flushd foo(r6) ++ ++# use external symbol ++ .global external ++ flushd external(r6) ++ ++# flushi ++ flushi r2 ++ ++#flushp ++ flushp ++ ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/call.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/call.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,11 @@ ++# objdump: -dr --prefix-addresses ++#name: NIOS2 call ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> call 00000000 <foo> ++[ ]*0: R_NIOS2_CALL26 .text\+0xc ++0+0004 <[^>]*> callr r10 ++0+0008 <[^>]*> call 00000000 <foo> ++[ ]*8: R_NIOS2_CALL26 external +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/call.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/call.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,13 @@ ++# Source file used to test the call and callr instructions ++.text ++.set norelax ++foo: ++ call func1 ++ callr r10 ++# use external symbol ++ .global external ++ call external ++func1: ++ ++ ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/cmp.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/cmp.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,24 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 cmp ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> cmpeq r11,r2,r3 ++0+0004 <[^>]*> cmpge r11,r2,r3 ++0+0008 <[^>]*> cmpgeu r11,r2,r3 ++0+000c <[^>]*> cmplt r11,r2,r3 ++0+0010 <[^>]*> cmpltu r11,r2,r3 ++0+0014 <[^>]*> cmpne r11,r2,r3 ++0+0018 <[^>]*> cmpgei r11,r2,0 ++[ ]*18: R_NIOS2_S16 value ++0+001c <[^>]*> cmpgeui r11,r2,0 ++[ ]*1c: R_NIOS2_U16 value\+0x200 ++0+0020 <[^>]*> cmplti r11,r2,0 ++[ ]*20: R_NIOS2_S16 value ++0+0024 <[^>]*> cmpltui r11,r2,0 ++[ ]*24: R_NIOS2_U16 value\+0x200 ++0+0028 <[^>]*> cmpgei r11,r2,32767 ++0+002c <[^>]*> cmpgeui r11,r2,32768 ++0+0030 <[^>]*> cmplti r11,r2,-32768 ++0+0034 <[^>]*> cmpltui r11,r2,65535 +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/cmp.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/cmp.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,22 @@ ++# Source file used to test the compare instructions ++foo: ++ cmpeq r11,r2,r3 ++ cmpge r11,r2,r3 ++ cmpgeu r11,r2,r3 ++ cmplt r11,r2,r3 ++ cmpltu r11,r2,r3 ++ cmpne r11,r2,r3 ++# test that cmp generates relocations correctly ++ cmpgei r11,r2,value ++ cmpgeui r11,r2,value+0x200 ++ cmplti r11,r2,value ++ cmpltui r11,r2,value+0x200 ++ ++ cmpgei r11,r2,0x7fff ++ cmpgeui r11,r2,0x8000 ++ cmplti r11,r2,-0x8000 ++ cmpltui r11,r2,0xFFFF ++.global value ++ ++ ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/comments.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/comments.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,26 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 comments ++ ++# Test the add instruction ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> br 0000001c <start> ++0+0004 <[^>]*> br 00000008 <abort> ++0+0008 <[^>]*> movui r3,0 ++0+000c <[^>]*> movui r2,1 ++0+0010 <[^>]*> movui r3,0 ++0+0014 <[^>]*> movui r2,0 ++0+0018 <[^>]*> br 00000044 <exit> ++0+001c <[^>]*> addi r2,r2,-4 ++0+0020 <[^>]*> movui r11,1 ++0+0024 <[^>]*> movui r5,0 ++0+0028 <[^>]*> movui r6,0 ++0+002c <[^>]*> br 00000030 <ldst> ++0+0030 <[^>]*> movui r2,61452 ++0+0034 <[^>]*> movui r20,64206 ++0+0038 <[^>]*> stw r20,0\(r2\) ++0+003c <[^>]*> ldw r21,0\(r2\) ++0+0040 <[^>]*> br 00000010 <end> ++0+0044 <[^>]*> br 00000044 <exit> +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/comments.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/comments.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,28 @@ ++.set norelax ++_main: br start ++trap: ++ br abort ++.globl _main ++abort: movui r3, 0x0 ++ movui r2, 0x1 ++ ++end: movui r3, 0x0 ++ movui r2, 0x0 ++ br exit ++ ++start: ++ addi r2, r2, -4 # test for ve numbers ++ movui r11, 0x1 ++ ori r5, r0, %lo(0x0) # r5 = 0x0 ++ ori r6, r0, %lo(0x0) # r6 = 0x0 ++ br ldst ++ ++ldst: ++ movui r2, 0xF00C ++ movui r20, 0xFACE ++ stw r20,(r2) ++ ldw r21, (r2) ++ br end ++ ++ ++exit: br exit +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/complex.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/complex.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,12 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 complex ++ ++# Test complex expression parsing ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> ldw r2,-1\(r3\) ++0+0004 <[^>]*> ldw r2,1\(r3\) ++0+0008 <[^>]*> ldw r2,0\(r3\) ++ 8: R_NIOS2_S16 stack_top\+0xffffffff +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/complex.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/complex.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,5 @@ ++foo: ++ ldw r2, (2-3)(r3) ++ ldw r2, 2 + (2-3)(r3) ++ ldw r2, 2 + (stack_top-3)(r3) ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/ctl.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/ctl.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,20 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 ctl ++ ++# Test the ctl instructions ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> rdctl r8,ctl31 ++0+0004 <[^>]*> rdctl r8,ctl30 ++0+0008 <[^>]*> rdctl r8,ctl29 ++0+000c <[^>]*> rdctl r8,status ++0+0010 <[^>]*> rdctl r8,bstatus ++0+0014 <[^>]*> rdctl r8,estatus ++0+0018 <[^>]*> wrctl ctl31,r8 ++0+001c <[^>]*> wrctl ctl30,r8 ++0+0020 <[^>]*> wrctl ctl29,r8 ++0+0024 <[^>]*> wrctl status,r8 ++0+0028 <[^>]*> wrctl bstatus,r8 ++0+002c <[^>]*> wrctl estatus,r8 +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/ctl.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/ctl.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,18 @@ ++# Source file used to test the nor instruction ++ ++foo: ++ rdctl r8,ctl31 ++ rdctl r8,ctl30 ++ rdctl r8,ctl29 ++ rdctl r8,status ++ rdctl r8,bstatus ++ rdctl r8,estatus ++ wrctl ctl31,r8 ++ wrctl ctl30,r8 ++ wrctl ctl29,r8 ++ wrctl status,r8 ++ wrctl bstatus,r8 ++ wrctl estatus,r8 ++ ++ ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/custom.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/custom.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,13 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 custom ++ ++# Test the custom instruction ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> custom 0,r11,r2,r3 ++0+0004 <[^>]*> custom 255,r11,r2,r3 ++0+0008 <[^>]*> custom 150,c1,r2,r3 ++0+000c <[^>]*> custom 24,c1,c2,r3 ++0+0010 <[^>]*> custom 56,c1,c2,c3 +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/custom.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/custom.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,8 @@ ++# test progam for assembling user instructions ++ ++foo: ++ custom 0, r11, r2, r3 ++ custom 255, r11, r2, r3 ++ custom 150, c1, r2, r3 ++ custom 0x18, c1, c2, r3 ++ custom 070, c1, c2, c3 +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/etbt.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/etbt.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,10 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 etbt ++ ++# Test the et, bt registers ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> add et,bt,r6 ++0+0004 <[^>]*> add et,bt,r6 +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/etbt.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/etbt.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,4 @@ ++.set nobreak ++foo: ++ add r24, r25, r6 ++ add et, bt, r6 +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/flushda.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/flushda.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,10 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 flushda ++ ++# Test the jmp instruction. ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> flushda 12\(r2\) ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/flushda.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/flushda.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,6 @@ ++# Source file used to test the flushda instruction. ++.text ++.set nobreak ++foo: ++ flushda 12(r2) ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/hilo_symbol.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/hilo_symbol.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,3 @@ ++.global long_symbol ++.set long_symbol, 0xDEADBEEF ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/illegal.l +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/illegal.l 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,14 @@ ++.*illegal.s: Assembler messages: ++.*illegal.s:5: Error: unknown register r56 ++.*illegal.s:8: Error: expecting \( near 0x1000 ++.*illegal.s:8: Error: missing argument ++.*illegal.s:9: Error: expecting \) near r5 ++.*illegal.s:10: Error: expecting \( near 0x1000r5\) ++.*illegal.s:10: Error: missing argument ++.*illegal.s:11: Error: expecting \( near 0x1000,r5 ++.*illegal.s:11: Error: missing argument ++.*illegal.s:12: Error: unknown register 0x1000 ++.*illegal.s:14: Error: unrecognised instruction fop ++.*illegal.s:16: Error: too many arguments ++.*illegal.s:17: Error: too many arguments ++.*illegal.s:17: Error: unknown register r2,r4 +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/illegal.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/illegal.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,17 @@ ++# Source file used to test illegal operands. ++ ++foo: ++# Illegal registers ++ add r3,r4,r56 ++ add r4,r0,r2 ++# Illegal syntax ++ ldw r4,0x1000 ++ ldw r4,0x1000(r5 ++ ldw r4,0x1000r5) ++ ldw r4,0x1000,r5 ++ ldw r4,(0x1000)r5 ++# Illegal opcodes ++ fop r3,r4,r5 ++# Extra operands ++ nop Crapola ++ add r2, r2, r2, r4 +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/imm5_symbol.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/imm5_symbol.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,4 @@ ++.global imm5 ++.text ++.byte imm5 ++.set imm5, 31 +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/jmp.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/jmp.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,10 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 jmp ++ ++# Test the jmp instruction. ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> jmp bt ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/jmp.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/jmp.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,6 @@ ++# Source file used to test the jmp instruction. ++.text ++.set nobreak ++foo: ++ jmp r25 ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/ldb.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/ldb.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,196 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 ldb ++ ++# Test the ld instruction ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> ldb r4,0\(zero\) ++0+0004 <[^>]*> ldb r4,4\(zero\) ++0+0008 <[^>]*> ldb r4,32764\(zero\) ++0+000c <[^>]*> ldb r4,-32768\(zero\) ++0+0010 <[^>]*> ldb r4,0\(r5\) ++0+0014 <[^>]*> ldb r4,4\(r5\) ++0+0018 <[^>]*> ldb r4,32764\(r5\) ++0+001c <[^>]*> ldb r4,-32768\(r5\) ++0+0020 <[^>]*> ldb r4,0\(zero\) ++[ ]*20: R_NIOS2_S16 .data ++0+0024 <[^>]*> ldb r4,0\(zero\) ++[ ]*24: R_NIOS2_S16 big_external_data_label ++0+0028 <[^>]*> ldb r4,0\(zero\) ++[ ]*28: R_NIOS2_S16 small_external_data_label ++0+002c <[^>]*> ldb r4,0\(zero\) ++[ ]*2c: R_NIOS2_S16 big_external_common ++0+0030 <[^>]*> ldb r4,0\(zero\) ++[ ]*30: R_NIOS2_S16 small_external_common ++0+0034 <[^>]*> ldb r4,0\(zero\) ++[ ]*34: R_NIOS2_S16 .bss ++0+0038 <[^>]*> ldb r4,0\(zero\) ++[ ]*38: R_NIOS2_S16 .bss\+0x4000 ++0+003c <[^>]*> ldb r4,0\(zero\) ++[ ]*3c: R_NIOS2_S16 .data\+0x4 ++0+0040 <[^>]*> ldb r4,0\(zero\) ++[ ]*40: R_NIOS2_S16 big_external_data_label\+0x4 ++0+0044 <[^>]*> ldb r4,0\(zero\) ++[ ]*44: R_NIOS2_S16 small_external_data_label\+0x4 ++0+0048 <[^>]*> ldb r4,0\(zero\) ++[ ]*48: R_NIOS2_S16 big_external_common\+0x4 ++0+004c <[^>]*> ldb r4,0\(zero\) ++[ ]*4c: R_NIOS2_S16 small_external_common\+0x4 ++0+0050 <[^>]*> ldb r4,0\(zero\) ++[ ]*50: R_NIOS2_S16 .bss\+0x4 ++0+0054 <[^>]*> ldb r4,0\(zero\) ++[ ]*54: R_NIOS2_S16 .bss\+0x4004 ++0+0058 <[^>]*> ldb r4,0\(zero\) ++[ ]*58: R_NIOS2_S16 .data\+0xffff8000 ++0+005c <[^>]*> ldb r4,0\(zero\) ++[ ]*5c: R_NIOS2_S16 big_external_data_label\+0xffff8000 ++0+0060 <[^>]*> ldb r4,0\(zero\) ++[ ]*60: R_NIOS2_S16 small_external_data_label\+0xffff8000 ++0+0064 <[^>]*> ldb r4,0\(zero\) ++[ ]*64: R_NIOS2_S16 big_external_common\+0xffff8000 ++0+0068 <[^>]*> ldb r4,0\(zero\) ++[ ]*68: R_NIOS2_S16 small_external_common\+0xffff8000 ++0+006c <[^>]*> ldb r4,0\(zero\) ++[ ]*6c: R_NIOS2_S16 .bss\+0xffff8000 ++0+0070 <[^>]*> ldb r4,0\(zero\) ++[ ]*70: R_NIOS2_S16 .bss\+0xffffc000 ++0+0074 <[^>]*> ldb r4,0\(zero\) ++[ ]*74: R_NIOS2_S16 .data\+0x10000 ++0+0078 <[^>]*> ldb r4,0\(r5\) ++[ ]*78: R_NIOS2_S16 .data ++0+007c <[^>]*> ldb r4,0\(r5\) ++[ ]*7c: R_NIOS2_S16 big_external_data_label ++0+0080 <[^>]*> ldb r4,0\(r5\) ++[ ]*80: R_NIOS2_S16 small_external_data_label ++0+0084 <[^>]*> ldb r4,0\(r5\) ++[ ]*84: R_NIOS2_S16 big_external_common ++0+0088 <[^>]*> ldb r4,0\(r5\) ++[ ]*88: R_NIOS2_S16 small_external_common ++0+008c <[^>]*> ldb r4,0\(r5\) ++[ ]*8c: R_NIOS2_S16 .bss ++0+0090 <[^>]*> ldb r4,0\(r5\) ++[ ]*90: R_NIOS2_S16 .bss\+0x4000 ++0+0094 <[^>]*> ldb r4,0\(r5\) ++[ ]*94: R_NIOS2_S16 .data\+0x4 ++0+0098 <[^>]*> ldb r4,0\(r5\) ++[ ]*98: R_NIOS2_S16 big_external_data_label\+0x4 ++0+009c <[^>]*> ldb r4,0\(r5\) ++[ ]*9c: R_NIOS2_S16 small_external_data_label\+0x4 ++0+00a0 <[^>]*> ldb r4,0\(r5\) ++[ ]*a0: R_NIOS2_S16 big_external_common\+0x4 ++0+00a4 <[^>]*> ldb r4,0\(r5\) ++[ ]*a4: R_NIOS2_S16 small_external_common\+0x4 ++0+00a8 <[^>]*> ldb r4,0\(r5\) ++[ ]*a8: R_NIOS2_S16 .bss\+0x4 ++0+00ac <[^>]*> ldb r4,0\(r5\) ++[ ]*ac: R_NIOS2_S16 .bss\+0x4004 ++0+00b0 <[^>]*> ldb r4,0\(r5\) ++[ ]*b0: R_NIOS2_S16 .data\+0xffff8000 ++0+00b4 <[^>]*> ldb r4,0\(r5\) ++[ ]*b4: R_NIOS2_S16 big_external_data_label\+0xffff8000 ++0+00b8 <[^>]*> ldb r4,0\(r5\) ++[ ]*b8: R_NIOS2_S16 small_external_data_label\+0xffff8000 ++0+00bc <[^>]*> ldb r4,0\(r5\) ++[ ]*bc: R_NIOS2_S16 big_external_common\+0xffff8000 ++0+00c0 <[^>]*> ldb r4,0\(r5\) ++[ ]*c0: R_NIOS2_S16 small_external_common\+0xffff8000 ++0+00c4 <[^>]*> ldb r4,0\(r5\) ++[ ]*c4: R_NIOS2_S16 .bss\+0xffff8000 ++0+00c8 <[^>]*> ldb r4,0\(r5\) ++[ ]*c8: R_NIOS2_S16 .bss\+0xffffc000 ++0+00cc <[^>]*> ldbio r4,0\(zero\) ++0+00d0 <[^>]*> ldbio r4,4\(zero\) ++0+00d4 <[^>]*> ldbio r4,32764\(zero\) ++0+00d8 <[^>]*> ldbio r4,-32768\(zero\) ++0+00dc <[^>]*> ldbio r4,0\(r5\) ++0+00e0 <[^>]*> ldbio r4,4\(r5\) ++0+00e4 <[^>]*> ldbio r4,32764\(r5\) ++0+00e8 <[^>]*> ldbio r4,-32768\(r5\) ++0+00ec <[^>]*> ldbio r4,0\(zero\) ++[ ]*ec: R_NIOS2_S16 .data ++0+00f0 <[^>]*> ldbio r4,0\(zero\) ++[ ]*f0: R_NIOS2_S16 big_external_data_label ++0+00f4 <[^>]*> ldbio r4,0\(zero\) ++[ ]*f4: R_NIOS2_S16 small_external_data_label ++0+00f8 <[^>]*> ldbio r4,0\(zero\) ++[ ]*f8: R_NIOS2_S16 big_external_common ++0+00fc <[^>]*> ldbio r4,0\(zero\) ++[ ]*fc: R_NIOS2_S16 small_external_common ++0+0100 <[^>]*> ldbio r4,0\(zero\) ++[ ]*100: R_NIOS2_S16 .bss ++0+0104 <[^>]*> ldbio r4,0\(zero\) ++[ ]*104: R_NIOS2_S16 .bss\+0x4000 ++0+0108 <[^>]*> ldbio r4,0\(zero\) ++[ ]*108: R_NIOS2_S16 .data\+0x4 ++0+010c <[^>]*> ldbio r4,0\(zero\) ++[ ]*10c: R_NIOS2_S16 big_external_data_label\+0x4 ++0+0110 <[^>]*> ldbio r4,0\(zero\) ++[ ]*110: R_NIOS2_S16 small_external_data_label\+0x4 ++0+0114 <[^>]*> ldbio r4,0\(zero\) ++[ ]*114: R_NIOS2_S16 big_external_common\+0x4 ++0+0118 <[^>]*> ldbio r4,0\(zero\) ++[ ]*118: R_NIOS2_S16 small_external_common\+0x4 ++0+011c <[^>]*> ldbio r4,0\(zero\) ++[ ]*11c: R_NIOS2_S16 .bss\+0x4 ++0+0120 <[^>]*> ldbio r4,0\(zero\) ++[ ]*120: R_NIOS2_S16 .bss\+0x4004 ++0+0124 <[^>]*> ldbio r4,0\(zero\) ++[ ]*124: R_NIOS2_S16 .data\+0xffff8000 ++0+0128 <[^>]*> ldbio r4,0\(zero\) ++[ ]*128: R_NIOS2_S16 big_external_data_label\+0xffff8000 ++0+012c <[^>]*> ldbio r4,0\(zero\) ++[ ]*12c: R_NIOS2_S16 small_external_data_label\+0xffff8000 ++0+0130 <[^>]*> ldbio r4,0\(zero\) ++[ ]*130: R_NIOS2_S16 big_external_common\+0xffff8000 ++0+0134 <[^>]*> ldbio r4,0\(zero\) ++[ ]*134: R_NIOS2_S16 small_external_common\+0xffff8000 ++0+0138 <[^>]*> ldbio r4,0\(zero\) ++[ ]*138: R_NIOS2_S16 .bss\+0xffff8000 ++0+013c <[^>]*> ldbio r4,0\(zero\) ++[ ]*13c: R_NIOS2_S16 .bss\+0xffffc000 ++0+0140 <[^>]*> ldbio r4,0\(zero\) ++[ ]*140: R_NIOS2_S16 .data\+0x10000 ++0+0144 <[^>]*> ldbio r4,0\(r5\) ++[ ]*144: R_NIOS2_S16 .data ++0+0148 <[^>]*> ldbio r4,0\(r5\) ++[ ]*148: R_NIOS2_S16 big_external_data_label ++0+014c <[^>]*> ldbio r4,0\(r5\) ++[ ]*14c: R_NIOS2_S16 small_external_data_label ++0+0150 <[^>]*> ldbio r4,0\(r5\) ++[ ]*150: R_NIOS2_S16 big_external_common ++0+0154 <[^>]*> ldbio r4,0\(r5\) ++[ ]*154: R_NIOS2_S16 small_external_common ++0+0158 <[^>]*> ldbio r4,0\(r5\) ++[ ]*158: R_NIOS2_S16 .bss ++0+015c <[^>]*> ldbio r4,0\(r5\) ++[ ]*15c: R_NIOS2_S16 .bss\+0x4000 ++0+0160 <[^>]*> ldbio r4,0\(r5\) ++[ ]*160: R_NIOS2_S16 .data\+0x4 ++0+0164 <[^>]*> ldbio r4,0\(r5\) ++[ ]*164: R_NIOS2_S16 big_external_data_label\+0x4 ++0+0168 <[^>]*> ldbio r4,0\(r5\) ++[ ]*168: R_NIOS2_S16 small_external_data_label\+0x4 ++0+016c <[^>]*> ldbio r4,0\(r5\) ++[ ]*16c: R_NIOS2_S16 big_external_common\+0x4 ++0+0170 <[^>]*> ldbio r4,0\(r5\) ++[ ]*170: R_NIOS2_S16 small_external_common\+0x4 ++0+0174 <[^>]*> ldbio r4,0\(r5\) ++[ ]*174: R_NIOS2_S16 .bss\+0x4 ++0+0178 <[^>]*> ldbio r4,0\(r5\) ++[ ]*178: R_NIOS2_S16 .bss\+0x4004 ++0+017c <[^>]*> ldbio r4,0\(r5\) ++[ ]*17c: R_NIOS2_S16 .data\+0xffff8000 ++0+0180 <[^>]*> ldbio r4,0\(r5\) ++[ ]*180: R_NIOS2_S16 big_external_data_label\+0xffff8000 ++0+0184 <[^>]*> ldbio r4,0\(r5\) ++[ ]*184: R_NIOS2_S16 small_external_data_label\+0xffff8000 ++0+0188 <[^>]*> ldbio r4,0\(r5\) ++[ ]*188: R_NIOS2_S16 big_external_common\+0xffff8000 ++0+018c <[^>]*> ldbio r4,0\(r5\) ++[ ]*18c: R_NIOS2_S16 small_external_common\+0xffff8000 ++0+0190 <[^>]*> ldbio r4,0\(r5\) ++[ ]*190: R_NIOS2_S16 .bss\+0xffff8000 ++0+0194 <[^>]*> ldbio r4,0\(r5\) ++[ ]*194: R_NIOS2_S16 .bss\+0xffffc000 +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/ldb.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/ldb.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,117 @@ ++ .data ++data_label: ++ .extern big_external_data_label,0x4000 ++ .extern small_external_data_label,4 ++ .comm big_external_common,0x4000 ++ .comm small_external_common,4 ++ .lcomm big_local_common,0x4000 ++ .lcomm small_local_common,4 ++ ++# the small symbols should have space allocated in the sbss section ++# but this is not yet supported in the assembler, so space is allocated ++# in the .bss section and the relocations are not gp-relative. this will ++# be updated when gp-relative relocations are added ++ .text ++ ldb r4,0(r0) ++ ldb r4,4(r0) ++ ldb r4,0x7ffc(r0) ++ ldb r4,-0x8000(r0) ++ ldb r4,0(r5) ++ ldb r4,4(r5) ++ ldb r4,0x7ffc(r5) ++ ldb r4,-0x8000(r5) ++ ldb r4,data_label(r0) ++ ldb r4,big_external_data_label(r0) ++ ldb r4,small_external_data_label(r0) ++ ldb r4,big_external_common(r0) ++ ldb r4,small_external_common(r0) ++ ldb r4,big_local_common(r0) ++ ldb r4,small_local_common(r0) ++ ldb r4,data_label+4(r0) ++ ldb r4,big_external_data_label+4(r0) ++ ldb r4,small_external_data_label+4(r0) ++ ldb r4,big_external_common+4(r0) ++ ldb r4,small_external_common+4(r0) ++ ldb r4,big_local_common+4(r0) ++ ldb r4,small_local_common+4(r0) ++ ldb r4,data_label-0x8000(r0) ++ ldb r4,big_external_data_label-0x8000(r0) ++ ldb r4,small_external_data_label-0x8000(r0) ++ ldb r4,big_external_common-0x8000(r0) ++ ldb r4,small_external_common-0x8000(r0) ++ ldb r4,big_local_common-0x8000(r0) ++ ldb r4,small_local_common-0x8000(r0) ++ ldb r4,data_label+0x10000(r0) ++ ldb r4,data_label(r5) ++ ldb r4,big_external_data_label(r5) ++ ldb r4,small_external_data_label(r5) ++ ldb r4,big_external_common(r5) ++ ldb r4,small_external_common(r5) ++ ldb r4,big_local_common(r5) ++ ldb r4,small_local_common(r5) ++ ldb r4,data_label+4(r5) ++ ldb r4,big_external_data_label+4(r5) ++ ldb r4,small_external_data_label+4(r5) ++ ldb r4,big_external_common+4(r5) ++ ldb r4,small_external_common+4(r5) ++ ldb r4,big_local_common+4(r5) ++ ldb r4,small_local_common+4(r5) ++ ldb r4,data_label-0x8000(r5) ++ ldb r4,big_external_data_label-0x8000(r5) ++ ldb r4,small_external_data_label-0x8000(r5) ++ ldb r4,big_external_common-0x8000(r5) ++ ldb r4,small_external_common-0x8000(r5) ++ ldb r4,big_local_common-0x8000(r5) ++ ldb r4,small_local_common-0x8000(r5) ++ ++ ldbio r4,0(r0) ++ ldbio r4,4(r0) ++ ldbio r4,0x7ffc(r0) ++ ldbio r4,-0x8000(r0) ++ ldbio r4,0(r5) ++ ldbio r4,4(r5) ++ ldbio r4,0x7ffc(r5) ++ ldbio r4,-0x8000(r5) ++ ldbio r4,data_label(r0) ++ ldbio r4,big_external_data_label(r0) ++ ldbio r4,small_external_data_label(r0) ++ ldbio r4,big_external_common(r0) ++ ldbio r4,small_external_common(r0) ++ ldbio r4,big_local_common(r0) ++ ldbio r4,small_local_common(r0) ++ ldbio r4,data_label+4(r0) ++ ldbio r4,big_external_data_label+4(r0) ++ ldbio r4,small_external_data_label+4(r0) ++ ldbio r4,big_external_common+4(r0) ++ ldbio r4,small_external_common+4(r0) ++ ldbio r4,big_local_common+4(r0) ++ ldbio r4,small_local_common+4(r0) ++ ldbio r4,data_label-0x8000(r0) ++ ldbio r4,big_external_data_label-0x8000(r0) ++ ldbio r4,small_external_data_label-0x8000(r0) ++ ldbio r4,big_external_common-0x8000(r0) ++ ldbio r4,small_external_common-0x8000(r0) ++ ldbio r4,big_local_common-0x8000(r0) ++ ldbio r4,small_local_common-0x8000(r0) ++ ldbio r4,data_label+0x10000(r0) ++ ldbio r4,data_label(r5) ++ ldbio r4,big_external_data_label(r5) ++ ldbio r4,small_external_data_label(r5) ++ ldbio r4,big_external_common(r5) ++ ldbio r4,small_external_common(r5) ++ ldbio r4,big_local_common(r5) ++ ldbio r4,small_local_common(r5) ++ ldbio r4,data_label+4(r5) ++ ldbio r4,big_external_data_label+4(r5) ++ ldbio r4,small_external_data_label+4(r5) ++ ldbio r4,big_external_common+4(r5) ++ ldbio r4,small_external_common+4(r5) ++ ldbio r4,big_local_common+4(r5) ++ ldbio r4,small_local_common+4(r5) ++ ldbio r4,data_label-0x8000(r5) ++ ldbio r4,big_external_data_label-0x8000(r5) ++ ldbio r4,small_external_data_label-0x8000(r5) ++ ldbio r4,big_external_common-0x8000(r5) ++ ldbio r4,small_external_common-0x8000(r5) ++ ldbio r4,big_local_common-0x8000(r5) ++ ldbio r4,small_local_common-0x8000(r5) +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/ldh.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/ldh.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,196 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 ldh ++ ++# Test the ld instruction ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> ldh r4,0\(zero\) ++0+0004 <[^>]*> ldh r4,4\(zero\) ++0+0008 <[^>]*> ldh r4,32764\(zero\) ++0+000c <[^>]*> ldh r4,-32768\(zero\) ++0+0010 <[^>]*> ldh r4,0\(r5\) ++0+0014 <[^>]*> ldh r4,4\(r5\) ++0+0018 <[^>]*> ldh r4,32764\(r5\) ++0+001c <[^>]*> ldh r4,-32768\(r5\) ++0+0020 <[^>]*> ldh r4,0\(zero\) ++[ ]*20: R_NIOS2_S16 .data ++0+0024 <[^>]*> ldh r4,0\(zero\) ++[ ]*24: R_NIOS2_S16 big_external_data_label ++0+0028 <[^>]*> ldh r4,0\(zero\) ++[ ]*28: R_NIOS2_S16 small_external_data_label ++0+002c <[^>]*> ldh r4,0\(zero\) ++[ ]*2c: R_NIOS2_S16 big_external_common ++0+0030 <[^>]*> ldh r4,0\(zero\) ++[ ]*30: R_NIOS2_S16 small_external_common ++0+0034 <[^>]*> ldh r4,0\(zero\) ++[ ]*34: R_NIOS2_S16 .bss ++0+0038 <[^>]*> ldh r4,0\(zero\) ++[ ]*38: R_NIOS2_S16 .bss\+0x4000 ++0+003c <[^>]*> ldh r4,0\(zero\) ++[ ]*3c: R_NIOS2_S16 .data\+0x4 ++0+0040 <[^>]*> ldh r4,0\(zero\) ++[ ]*40: R_NIOS2_S16 big_external_data_label\+0x4 ++0+0044 <[^>]*> ldh r4,0\(zero\) ++[ ]*44: R_NIOS2_S16 small_external_data_label\+0x4 ++0+0048 <[^>]*> ldh r4,0\(zero\) ++[ ]*48: R_NIOS2_S16 big_external_common\+0x4 ++0+004c <[^>]*> ldh r4,0\(zero\) ++[ ]*4c: R_NIOS2_S16 small_external_common\+0x4 ++0+0050 <[^>]*> ldh r4,0\(zero\) ++[ ]*50: R_NIOS2_S16 .bss\+0x4 ++0+0054 <[^>]*> ldh r4,0\(zero\) ++[ ]*54: R_NIOS2_S16 .bss\+0x4004 ++0+0058 <[^>]*> ldh r4,0\(zero\) ++[ ]*58: R_NIOS2_S16 .data\+0xffff8000 ++0+005c <[^>]*> ldh r4,0\(zero\) ++[ ]*5c: R_NIOS2_S16 big_external_data_label\+0xffff8000 ++0+0060 <[^>]*> ldh r4,0\(zero\) ++[ ]*60: R_NIOS2_S16 small_external_data_label\+0xffff8000 ++0+0064 <[^>]*> ldh r4,0\(zero\) ++[ ]*64: R_NIOS2_S16 big_external_common\+0xffff8000 ++0+0068 <[^>]*> ldh r4,0\(zero\) ++[ ]*68: R_NIOS2_S16 small_external_common\+0xffff8000 ++0+006c <[^>]*> ldh r4,0\(zero\) ++[ ]*6c: R_NIOS2_S16 .bss\+0xffff8000 ++0+0070 <[^>]*> ldh r4,0\(zero\) ++[ ]*70: R_NIOS2_S16 .bss\+0xffffc000 ++0+0074 <[^>]*> ldh r4,0\(zero\) ++[ ]*74: R_NIOS2_S16 .data\+0x10000 ++0+0078 <[^>]*> ldh r4,0\(r5\) ++[ ]*78: R_NIOS2_S16 .data ++0+007c <[^>]*> ldh r4,0\(r5\) ++[ ]*7c: R_NIOS2_S16 big_external_data_label ++0+0080 <[^>]*> ldh r4,0\(r5\) ++[ ]*80: R_NIOS2_S16 small_external_data_label ++0+0084 <[^>]*> ldh r4,0\(r5\) ++[ ]*84: R_NIOS2_S16 big_external_common ++0+0088 <[^>]*> ldh r4,0\(r5\) ++[ ]*88: R_NIOS2_S16 small_external_common ++0+008c <[^>]*> ldh r4,0\(r5\) ++[ ]*8c: R_NIOS2_S16 .bss ++0+0090 <[^>]*> ldh r4,0\(r5\) ++[ ]*90: R_NIOS2_S16 .bss\+0x4000 ++0+0094 <[^>]*> ldh r4,0\(r5\) ++[ ]*94: R_NIOS2_S16 .data\+0x4 ++0+0098 <[^>]*> ldh r4,0\(r5\) ++[ ]*98: R_NIOS2_S16 big_external_data_label\+0x4 ++0+009c <[^>]*> ldh r4,0\(r5\) ++[ ]*9c: R_NIOS2_S16 small_external_data_label\+0x4 ++0+00a0 <[^>]*> ldh r4,0\(r5\) ++[ ]*a0: R_NIOS2_S16 big_external_common\+0x4 ++0+00a4 <[^>]*> ldh r4,0\(r5\) ++[ ]*a4: R_NIOS2_S16 small_external_common\+0x4 ++0+00a8 <[^>]*> ldh r4,0\(r5\) ++[ ]*a8: R_NIOS2_S16 .bss\+0x4 ++0+00ac <[^>]*> ldh r4,0\(r5\) ++[ ]*ac: R_NIOS2_S16 .bss\+0x4004 ++0+00b0 <[^>]*> ldh r4,0\(r5\) ++[ ]*b0: R_NIOS2_S16 .data\+0xffff8000 ++0+00b4 <[^>]*> ldh r4,0\(r5\) ++[ ]*b4: R_NIOS2_S16 big_external_data_label\+0xffff8000 ++0+00b8 <[^>]*> ldh r4,0\(r5\) ++[ ]*b8: R_NIOS2_S16 small_external_data_label\+0xffff8000 ++0+00bc <[^>]*> ldh r4,0\(r5\) ++[ ]*bc: R_NIOS2_S16 big_external_common\+0xffff8000 ++0+00c0 <[^>]*> ldh r4,0\(r5\) ++[ ]*c0: R_NIOS2_S16 small_external_common\+0xffff8000 ++0+00c4 <[^>]*> ldh r4,0\(r5\) ++[ ]*c4: R_NIOS2_S16 .bss\+0xffff8000 ++0+00c8 <[^>]*> ldh r4,0\(r5\) ++[ ]*c8: R_NIOS2_S16 .bss\+0xffffc000 ++0+00cc <[^>]*> ldhio r4,0\(zero\) ++0+00d0 <[^>]*> ldhio r4,4\(zero\) ++0+00d4 <[^>]*> ldhio r4,32764\(zero\) ++0+00d8 <[^>]*> ldhio r4,-32768\(zero\) ++0+00dc <[^>]*> ldhio r4,0\(r5\) ++0+00e0 <[^>]*> ldhio r4,4\(r5\) ++0+00e4 <[^>]*> ldhio r4,32764\(r5\) ++0+00e8 <[^>]*> ldhio r4,-32768\(r5\) ++0+00ec <[^>]*> ldhio r4,0\(zero\) ++[ ]*ec: R_NIOS2_S16 .data ++0+00f0 <[^>]*> ldhio r4,0\(zero\) ++[ ]*f0: R_NIOS2_S16 big_external_data_label ++0+00f4 <[^>]*> ldhio r4,0\(zero\) ++[ ]*f4: R_NIOS2_S16 small_external_data_label ++0+00f8 <[^>]*> ldhio r4,0\(zero\) ++[ ]*f8: R_NIOS2_S16 big_external_common ++0+00fc <[^>]*> ldhio r4,0\(zero\) ++[ ]*fc: R_NIOS2_S16 small_external_common ++0+0100 <[^>]*> ldhio r4,0\(zero\) ++[ ]*100: R_NIOS2_S16 .bss ++0+0104 <[^>]*> ldhio r4,0\(zero\) ++[ ]*104: R_NIOS2_S16 .bss\+0x4000 ++0+0108 <[^>]*> ldhio r4,0\(zero\) ++[ ]*108: R_NIOS2_S16 .data\+0x4 ++0+010c <[^>]*> ldhio r4,0\(zero\) ++[ ]*10c: R_NIOS2_S16 big_external_data_label\+0x4 ++0+0110 <[^>]*> ldhio r4,0\(zero\) ++[ ]*110: R_NIOS2_S16 small_external_data_label\+0x4 ++0+0114 <[^>]*> ldhio r4,0\(zero\) ++[ ]*114: R_NIOS2_S16 big_external_common\+0x4 ++0+0118 <[^>]*> ldhio r4,0\(zero\) ++[ ]*118: R_NIOS2_S16 small_external_common\+0x4 ++0+011c <[^>]*> ldhio r4,0\(zero\) ++[ ]*11c: R_NIOS2_S16 .bss\+0x4 ++0+0120 <[^>]*> ldhio r4,0\(zero\) ++[ ]*120: R_NIOS2_S16 .bss\+0x4004 ++0+0124 <[^>]*> ldhio r4,0\(zero\) ++[ ]*124: R_NIOS2_S16 .data\+0xffff8000 ++0+0128 <[^>]*> ldhio r4,0\(zero\) ++[ ]*128: R_NIOS2_S16 big_external_data_label\+0xffff8000 ++0+012c <[^>]*> ldhio r4,0\(zero\) ++[ ]*12c: R_NIOS2_S16 small_external_data_label\+0xffff8000 ++0+0130 <[^>]*> ldhio r4,0\(zero\) ++[ ]*130: R_NIOS2_S16 big_external_common\+0xffff8000 ++0+0134 <[^>]*> ldhio r4,0\(zero\) ++[ ]*134: R_NIOS2_S16 small_external_common\+0xffff8000 ++0+0138 <[^>]*> ldhio r4,0\(zero\) ++[ ]*138: R_NIOS2_S16 .bss\+0xffff8000 ++0+013c <[^>]*> ldhio r4,0\(zero\) ++[ ]*13c: R_NIOS2_S16 .bss\+0xffffc000 ++0+0140 <[^>]*> ldhio r4,0\(zero\) ++[ ]*140: R_NIOS2_S16 .data\+0x10000 ++0+0144 <[^>]*> ldhio r4,0\(r5\) ++[ ]*144: R_NIOS2_S16 .data ++0+0148 <[^>]*> ldhio r4,0\(r5\) ++[ ]*148: R_NIOS2_S16 big_external_data_label ++0+014c <[^>]*> ldhio r4,0\(r5\) ++[ ]*14c: R_NIOS2_S16 small_external_data_label ++0+0150 <[^>]*> ldhio r4,0\(r5\) ++[ ]*150: R_NIOS2_S16 big_external_common ++0+0154 <[^>]*> ldhio r4,0\(r5\) ++[ ]*154: R_NIOS2_S16 small_external_common ++0+0158 <[^>]*> ldhio r4,0\(r5\) ++[ ]*158: R_NIOS2_S16 .bss ++0+015c <[^>]*> ldhio r4,0\(r5\) ++[ ]*15c: R_NIOS2_S16 .bss\+0x4000 ++0+0160 <[^>]*> ldhio r4,0\(r5\) ++[ ]*160: R_NIOS2_S16 .data\+0x4 ++0+0164 <[^>]*> ldhio r4,0\(r5\) ++[ ]*164: R_NIOS2_S16 big_external_data_label\+0x4 ++0+0168 <[^>]*> ldhio r4,0\(r5\) ++[ ]*168: R_NIOS2_S16 small_external_data_label\+0x4 ++0+016c <[^>]*> ldhio r4,0\(r5\) ++[ ]*16c: R_NIOS2_S16 big_external_common\+0x4 ++0+0170 <[^>]*> ldhio r4,0\(r5\) ++[ ]*170: R_NIOS2_S16 small_external_common\+0x4 ++0+0174 <[^>]*> ldhio r4,0\(r5\) ++[ ]*174: R_NIOS2_S16 .bss\+0x4 ++0+0178 <[^>]*> ldhio r4,0\(r5\) ++[ ]*178: R_NIOS2_S16 .bss\+0x4004 ++0+017c <[^>]*> ldhio r4,0\(r5\) ++[ ]*17c: R_NIOS2_S16 .data\+0xffff8000 ++0+0180 <[^>]*> ldhio r4,0\(r5\) ++[ ]*180: R_NIOS2_S16 big_external_data_label\+0xffff8000 ++0+0184 <[^>]*> ldhio r4,0\(r5\) ++[ ]*184: R_NIOS2_S16 small_external_data_label\+0xffff8000 ++0+0188 <[^>]*> ldhio r4,0\(r5\) ++[ ]*188: R_NIOS2_S16 big_external_common\+0xffff8000 ++0+018c <[^>]*> ldhio r4,0\(r5\) ++[ ]*18c: R_NIOS2_S16 small_external_common\+0xffff8000 ++0+0190 <[^>]*> ldhio r4,0\(r5\) ++[ ]*190: R_NIOS2_S16 .bss\+0xffff8000 ++0+0194 <[^>]*> ldhio r4,0\(r5\) ++[ ]*194: R_NIOS2_S16 .bss\+0xffffc000 +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/ldh.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/ldh.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,117 @@ ++ .data ++data_label: ++ .extern big_external_data_label,0x4000 ++ .extern small_external_data_label,4 ++ .comm big_external_common,0x4000 ++ .comm small_external_common,4 ++ .lcomm big_local_common,0x4000 ++ .lcomm small_local_common,4 ++ ++# the small symbols should have space allocated in the sbss section ++# but this is not yet supported in the assembler, so space is allocated ++# in the .bss section and the relocations are not gp-relative. this will ++# be updated when gp-relative relocations are added ++ .text ++ ldh r4,0(r0) ++ ldh r4,4(r0) ++ ldh r4,0x7ffc(r0) ++ ldh r4,-0x8000(r0) ++ ldh r4,0(r5) ++ ldh r4,4(r5) ++ ldh r4,0x7ffc(r5) ++ ldh r4,-0x8000(r5) ++ ldh r4,data_label(r0) ++ ldh r4,big_external_data_label(r0) ++ ldh r4,small_external_data_label(r0) ++ ldh r4,big_external_common(r0) ++ ldh r4,small_external_common(r0) ++ ldh r4,big_local_common(r0) ++ ldh r4,small_local_common(r0) ++ ldh r4,data_label+4(r0) ++ ldh r4,big_external_data_label+4(r0) ++ ldh r4,small_external_data_label+4(r0) ++ ldh r4,big_external_common+4(r0) ++ ldh r4,small_external_common+4(r0) ++ ldh r4,big_local_common+4(r0) ++ ldh r4,small_local_common+4(r0) ++ ldh r4,data_label-0x8000(r0) ++ ldh r4,big_external_data_label-0x8000(r0) ++ ldh r4,small_external_data_label-0x8000(r0) ++ ldh r4,big_external_common-0x8000(r0) ++ ldh r4,small_external_common-0x8000(r0) ++ ldh r4,big_local_common-0x8000(r0) ++ ldh r4,small_local_common-0x8000(r0) ++ ldh r4,data_label+0x10000(r0) ++ ldh r4,data_label(r5) ++ ldh r4,big_external_data_label(r5) ++ ldh r4,small_external_data_label(r5) ++ ldh r4,big_external_common(r5) ++ ldh r4,small_external_common(r5) ++ ldh r4,big_local_common(r5) ++ ldh r4,small_local_common(r5) ++ ldh r4,data_label+4(r5) ++ ldh r4,big_external_data_label+4(r5) ++ ldh r4,small_external_data_label+4(r5) ++ ldh r4,big_external_common+4(r5) ++ ldh r4,small_external_common+4(r5) ++ ldh r4,big_local_common+4(r5) ++ ldh r4,small_local_common+4(r5) ++ ldh r4,data_label-0x8000(r5) ++ ldh r4,big_external_data_label-0x8000(r5) ++ ldh r4,small_external_data_label-0x8000(r5) ++ ldh r4,big_external_common-0x8000(r5) ++ ldh r4,small_external_common-0x8000(r5) ++ ldh r4,big_local_common-0x8000(r5) ++ ldh r4,small_local_common-0x8000(r5) ++ ++ ldhio r4,0(r0) ++ ldhio r4,4(r0) ++ ldhio r4,0x7ffc(r0) ++ ldhio r4,-0x8000(r0) ++ ldhio r4,0(r5) ++ ldhio r4,4(r5) ++ ldhio r4,0x7ffc(r5) ++ ldhio r4,-0x8000(r5) ++ ldhio r4,data_label(r0) ++ ldhio r4,big_external_data_label(r0) ++ ldhio r4,small_external_data_label(r0) ++ ldhio r4,big_external_common(r0) ++ ldhio r4,small_external_common(r0) ++ ldhio r4,big_local_common(r0) ++ ldhio r4,small_local_common(r0) ++ ldhio r4,data_label+4(r0) ++ ldhio r4,big_external_data_label+4(r0) ++ ldhio r4,small_external_data_label+4(r0) ++ ldhio r4,big_external_common+4(r0) ++ ldhio r4,small_external_common+4(r0) ++ ldhio r4,big_local_common+4(r0) ++ ldhio r4,small_local_common+4(r0) ++ ldhio r4,data_label-0x8000(r0) ++ ldhio r4,big_external_data_label-0x8000(r0) ++ ldhio r4,small_external_data_label-0x8000(r0) ++ ldhio r4,big_external_common-0x8000(r0) ++ ldhio r4,small_external_common-0x8000(r0) ++ ldhio r4,big_local_common-0x8000(r0) ++ ldhio r4,small_local_common-0x8000(r0) ++ ldhio r4,data_label+0x10000(r0) ++ ldhio r4,data_label(r5) ++ ldhio r4,big_external_data_label(r5) ++ ldhio r4,small_external_data_label(r5) ++ ldhio r4,big_external_common(r5) ++ ldhio r4,small_external_common(r5) ++ ldhio r4,big_local_common(r5) ++ ldhio r4,small_local_common(r5) ++ ldhio r4,data_label+4(r5) ++ ldhio r4,big_external_data_label+4(r5) ++ ldhio r4,small_external_data_label+4(r5) ++ ldhio r4,big_external_common+4(r5) ++ ldhio r4,small_external_common+4(r5) ++ ldhio r4,big_local_common+4(r5) ++ ldhio r4,small_local_common+4(r5) ++ ldhio r4,data_label-0x8000(r5) ++ ldhio r4,big_external_data_label-0x8000(r5) ++ ldhio r4,small_external_data_label-0x8000(r5) ++ ldhio r4,big_external_common-0x8000(r5) ++ ldhio r4,small_external_common-0x8000(r5) ++ ldhio r4,big_local_common-0x8000(r5) ++ ldhio r4,small_local_common-0x8000(r5) +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/ldw.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/ldw.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,196 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 ldw ++ ++# Test the ld instruction ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> ldw r4,0\(zero\) ++0+0004 <[^>]*> ldw r4,4\(zero\) ++0+0008 <[^>]*> ldw r4,32764\(zero\) ++0+000c <[^>]*> ldw r4,-32768\(zero\) ++0+0010 <[^>]*> ldw r4,0\(r5\) ++0+0014 <[^>]*> ldw r4,4\(r5\) ++0+0018 <[^>]*> ldw r4,32764\(r5\) ++0+001c <[^>]*> ldw r4,-32768\(r5\) ++0+0020 <[^>]*> ldw r4,0\(zero\) ++[ ]*20: R_NIOS2_S16 .data ++0+0024 <[^>]*> ldw r4,0\(zero\) ++[ ]*24: R_NIOS2_S16 big_external_data_label ++0+0028 <[^>]*> ldw r4,0\(zero\) ++[ ]*28: R_NIOS2_S16 small_external_data_label ++0+002c <[^>]*> ldw r4,0\(zero\) ++[ ]*2c: R_NIOS2_S16 big_external_common ++0+0030 <[^>]*> ldw r4,0\(zero\) ++[ ]*30: R_NIOS2_S16 small_external_common ++0+0034 <[^>]*> ldw r4,0\(zero\) ++[ ]*34: R_NIOS2_S16 .bss ++0+0038 <[^>]*> ldw r4,0\(zero\) ++[ ]*38: R_NIOS2_S16 .bss\+0x4000 ++0+003c <[^>]*> ldw r4,0\(zero\) ++[ ]*3c: R_NIOS2_S16 .data\+0x4 ++0+0040 <[^>]*> ldw r4,0\(zero\) ++[ ]*40: R_NIOS2_S16 big_external_data_label\+0x4 ++0+0044 <[^>]*> ldw r4,0\(zero\) ++[ ]*44: R_NIOS2_S16 small_external_data_label\+0x4 ++0+0048 <[^>]*> ldw r4,0\(zero\) ++[ ]*48: R_NIOS2_S16 big_external_common\+0x4 ++0+004c <[^>]*> ldw r4,0\(zero\) ++[ ]*4c: R_NIOS2_S16 small_external_common\+0x4 ++0+0050 <[^>]*> ldw r4,0\(zero\) ++[ ]*50: R_NIOS2_S16 .bss\+0x4 ++0+0054 <[^>]*> ldw r4,0\(zero\) ++[ ]*54: R_NIOS2_S16 .bss\+0x4004 ++0+0058 <[^>]*> ldw r4,0\(zero\) ++[ ]*58: R_NIOS2_S16 .data\+0xffff8000 ++0+005c <[^>]*> ldw r4,0\(zero\) ++[ ]*5c: R_NIOS2_S16 big_external_data_label\+0xffff8000 ++0+0060 <[^>]*> ldw r4,0\(zero\) ++[ ]*60: R_NIOS2_S16 small_external_data_label\+0xffff8000 ++0+0064 <[^>]*> ldw r4,0\(zero\) ++[ ]*64: R_NIOS2_S16 big_external_common\+0xffff8000 ++0+0068 <[^>]*> ldw r4,0\(zero\) ++[ ]*68: R_NIOS2_S16 small_external_common\+0xffff8000 ++0+006c <[^>]*> ldw r4,0\(zero\) ++[ ]*6c: R_NIOS2_S16 .bss\+0xffff8000 ++0+0070 <[^>]*> ldw r4,0\(zero\) ++[ ]*70: R_NIOS2_S16 .bss\+0xffffc000 ++0+0074 <[^>]*> ldw r4,0\(zero\) ++[ ]*74: R_NIOS2_S16 .data\+0x10000 ++0+0078 <[^>]*> ldw r4,0\(r5\) ++[ ]*78: R_NIOS2_S16 .data ++0+007c <[^>]*> ldw r4,0\(r5\) ++[ ]*7c: R_NIOS2_S16 big_external_data_label ++0+0080 <[^>]*> ldw r4,0\(r5\) ++[ ]*80: R_NIOS2_S16 small_external_data_label ++0+0084 <[^>]*> ldw r4,0\(r5\) ++[ ]*84: R_NIOS2_S16 big_external_common ++0+0088 <[^>]*> ldw r4,0\(r5\) ++[ ]*88: R_NIOS2_S16 small_external_common ++0+008c <[^>]*> ldw r4,0\(r5\) ++[ ]*8c: R_NIOS2_S16 .bss ++0+0090 <[^>]*> ldw r4,0\(r5\) ++[ ]*90: R_NIOS2_S16 .bss\+0x4000 ++0+0094 <[^>]*> ldw r4,0\(r5\) ++[ ]*94: R_NIOS2_S16 .data\+0x4 ++0+0098 <[^>]*> ldw r4,0\(r5\) ++[ ]*98: R_NIOS2_S16 big_external_data_label\+0x4 ++0+009c <[^>]*> ldw r4,0\(r5\) ++[ ]*9c: R_NIOS2_S16 small_external_data_label\+0x4 ++0+00a0 <[^>]*> ldw r4,0\(r5\) ++[ ]*a0: R_NIOS2_S16 big_external_common\+0x4 ++0+00a4 <[^>]*> ldw r4,0\(r5\) ++[ ]*a4: R_NIOS2_S16 small_external_common\+0x4 ++0+00a8 <[^>]*> ldw r4,0\(r5\) ++[ ]*a8: R_NIOS2_S16 .bss\+0x4 ++0+00ac <[^>]*> ldw r4,0\(r5\) ++[ ]*ac: R_NIOS2_S16 .bss\+0x4004 ++0+00b0 <[^>]*> ldw r4,0\(r5\) ++[ ]*b0: R_NIOS2_S16 .data\+0xffff8000 ++0+00b4 <[^>]*> ldw r4,0\(r5\) ++[ ]*b4: R_NIOS2_S16 big_external_data_label\+0xffff8000 ++0+00b8 <[^>]*> ldw r4,0\(r5\) ++[ ]*b8: R_NIOS2_S16 small_external_data_label\+0xffff8000 ++0+00bc <[^>]*> ldw r4,0\(r5\) ++[ ]*bc: R_NIOS2_S16 big_external_common\+0xffff8000 ++0+00c0 <[^>]*> ldw r4,0\(r5\) ++[ ]*c0: R_NIOS2_S16 small_external_common\+0xffff8000 ++0+00c4 <[^>]*> ldw r4,0\(r5\) ++[ ]*c4: R_NIOS2_S16 .bss\+0xffff8000 ++0+00c8 <[^>]*> ldw r4,0\(r5\) ++[ ]*c8: R_NIOS2_S16 .bss\+0xffffc000 ++0+00cc <[^>]*> ldwio r4,0\(zero\) ++0+00d0 <[^>]*> ldwio r4,4\(zero\) ++0+00d4 <[^>]*> ldwio r4,32764\(zero\) ++0+00d8 <[^>]*> ldwio r4,-32768\(zero\) ++0+00dc <[^>]*> ldwio r4,0\(r5\) ++0+00e0 <[^>]*> ldwio r4,4\(r5\) ++0+00e4 <[^>]*> ldwio r4,32764\(r5\) ++0+00e8 <[^>]*> ldwio r4,-32768\(r5\) ++0+00ec <[^>]*> ldwio r4,0\(zero\) ++[ ]*ec: R_NIOS2_S16 .data ++0+00f0 <[^>]*> ldwio r4,0\(zero\) ++[ ]*f0: R_NIOS2_S16 big_external_data_label ++0+00f4 <[^>]*> ldwio r4,0\(zero\) ++[ ]*f4: R_NIOS2_S16 small_external_data_label ++0+00f8 <[^>]*> ldwio r4,0\(zero\) ++[ ]*f8: R_NIOS2_S16 big_external_common ++0+00fc <[^>]*> ldwio r4,0\(zero\) ++[ ]*fc: R_NIOS2_S16 small_external_common ++0+0100 <[^>]*> ldwio r4,0\(zero\) ++[ ]*100: R_NIOS2_S16 .bss ++0+0104 <[^>]*> ldwio r4,0\(zero\) ++[ ]*104: R_NIOS2_S16 .bss\+0x4000 ++0+0108 <[^>]*> ldwio r4,0\(zero\) ++[ ]*108: R_NIOS2_S16 .data\+0x4 ++0+010c <[^>]*> ldwio r4,0\(zero\) ++[ ]*10c: R_NIOS2_S16 big_external_data_label\+0x4 ++0+0110 <[^>]*> ldwio r4,0\(zero\) ++[ ]*110: R_NIOS2_S16 small_external_data_label\+0x4 ++0+0114 <[^>]*> ldwio r4,0\(zero\) ++[ ]*114: R_NIOS2_S16 big_external_common\+0x4 ++0+0118 <[^>]*> ldwio r4,0\(zero\) ++[ ]*118: R_NIOS2_S16 small_external_common\+0x4 ++0+011c <[^>]*> ldwio r4,0\(zero\) ++[ ]*11c: R_NIOS2_S16 .bss\+0x4 ++0+0120 <[^>]*> ldwio r4,0\(zero\) ++[ ]*120: R_NIOS2_S16 .bss\+0x4004 ++0+0124 <[^>]*> ldwio r4,0\(zero\) ++[ ]*124: R_NIOS2_S16 .data\+0xffff8000 ++0+0128 <[^>]*> ldwio r4,0\(zero\) ++[ ]*128: R_NIOS2_S16 big_external_data_label\+0xffff8000 ++0+012c <[^>]*> ldwio r4,0\(zero\) ++[ ]*12c: R_NIOS2_S16 small_external_data_label\+0xffff8000 ++0+0130 <[^>]*> ldwio r4,0\(zero\) ++[ ]*130: R_NIOS2_S16 big_external_common\+0xffff8000 ++0+0134 <[^>]*> ldwio r4,0\(zero\) ++[ ]*134: R_NIOS2_S16 small_external_common\+0xffff8000 ++0+0138 <[^>]*> ldwio r4,0\(zero\) ++[ ]*138: R_NIOS2_S16 .bss\+0xffff8000 ++0+013c <[^>]*> ldwio r4,0\(zero\) ++[ ]*13c: R_NIOS2_S16 .bss\+0xffffc000 ++0+0140 <[^>]*> ldwio r4,0\(zero\) ++[ ]*140: R_NIOS2_S16 .data\+0x10000 ++0+0144 <[^>]*> ldwio r4,0\(r5\) ++[ ]*144: R_NIOS2_S16 .data ++0+0148 <[^>]*> ldwio r4,0\(r5\) ++[ ]*148: R_NIOS2_S16 big_external_data_label ++0+014c <[^>]*> ldwio r4,0\(r5\) ++[ ]*14c: R_NIOS2_S16 small_external_data_label ++0+0150 <[^>]*> ldwio r4,0\(r5\) ++[ ]*150: R_NIOS2_S16 big_external_common ++0+0154 <[^>]*> ldwio r4,0\(r5\) ++[ ]*154: R_NIOS2_S16 small_external_common ++0+0158 <[^>]*> ldwio r4,0\(r5\) ++[ ]*158: R_NIOS2_S16 .bss ++0+015c <[^>]*> ldwio r4,0\(r5\) ++[ ]*15c: R_NIOS2_S16 .bss\+0x4000 ++0+0160 <[^>]*> ldwio r4,0\(r5\) ++[ ]*160: R_NIOS2_S16 .data\+0x4 ++0+0164 <[^>]*> ldwio r4,0\(r5\) ++[ ]*164: R_NIOS2_S16 big_external_data_label\+0x4 ++0+0168 <[^>]*> ldwio r4,0\(r5\) ++[ ]*168: R_NIOS2_S16 small_external_data_label\+0x4 ++0+016c <[^>]*> ldwio r4,0\(r5\) ++[ ]*16c: R_NIOS2_S16 big_external_common\+0x4 ++0+0170 <[^>]*> ldwio r4,0\(r5\) ++[ ]*170: R_NIOS2_S16 small_external_common\+0x4 ++0+0174 <[^>]*> ldwio r4,0\(r5\) ++[ ]*174: R_NIOS2_S16 .bss\+0x4 ++0+0178 <[^>]*> ldwio r4,0\(r5\) ++[ ]*178: R_NIOS2_S16 .bss\+0x4004 ++0+017c <[^>]*> ldwio r4,0\(r5\) ++[ ]*17c: R_NIOS2_S16 .data\+0xffff8000 ++0+0180 <[^>]*> ldwio r4,0\(r5\) ++[ ]*180: R_NIOS2_S16 big_external_data_label\+0xffff8000 ++0+0184 <[^>]*> ldwio r4,0\(r5\) ++[ ]*184: R_NIOS2_S16 small_external_data_label\+0xffff8000 ++0+0188 <[^>]*> ldwio r4,0\(r5\) ++[ ]*188: R_NIOS2_S16 big_external_common\+0xffff8000 ++0+018c <[^>]*> ldwio r4,0\(r5\) ++[ ]*18c: R_NIOS2_S16 small_external_common\+0xffff8000 ++0+0190 <[^>]*> ldwio r4,0\(r5\) ++[ ]*190: R_NIOS2_S16 .bss\+0xffff8000 ++0+0194 <[^>]*> ldwio r4,0\(r5\) ++[ ]*194: R_NIOS2_S16 .bss\+0xffffc000 +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/ldw.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/ldw.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,117 @@ ++ .data ++data_label: ++ .extern big_external_data_label,0x4000 ++ .extern small_external_data_label,4 ++ .comm big_external_common,0x4000 ++ .comm small_external_common,4 ++ .lcomm big_local_common,0x4000 ++ .lcomm small_local_common,4 ++ ++# the small symbols should have space allocated in the sbss section ++# but this is not yet supported in the assembler, so space is allocated ++# in the .bss section and the relocations are not gp-relative. this will ++# be updated when gp-relative relocations are added ++ .text ++ ldw r4,0(r0) ++ ldw r4,4(r0) ++ ldw r4,0x7ffc(r0) ++ ldw r4,-0x8000(r0) ++ ldw r4,0(r5) ++ ldw r4,4(r5) ++ ldw r4,0x7ffc(r5) ++ ldw r4,-0x8000(r5) ++ ldw r4,data_label(r0) ++ ldw r4,big_external_data_label(r0) ++ ldw r4,small_external_data_label(r0) ++ ldw r4,big_external_common(r0) ++ ldw r4,small_external_common(r0) ++ ldw r4,big_local_common(r0) ++ ldw r4,small_local_common(r0) ++ ldw r4,data_label+4(r0) ++ ldw r4,big_external_data_label+4(r0) ++ ldw r4,small_external_data_label+4(r0) ++ ldw r4,big_external_common+4(r0) ++ ldw r4,small_external_common+4(r0) ++ ldw r4,big_local_common+4(r0) ++ ldw r4,small_local_common+4(r0) ++ ldw r4,data_label-0x8000(r0) ++ ldw r4,big_external_data_label-0x8000(r0) ++ ldw r4,small_external_data_label-0x8000(r0) ++ ldw r4,big_external_common-0x8000(r0) ++ ldw r4,small_external_common-0x8000(r0) ++ ldw r4,big_local_common-0x8000(r0) ++ ldw r4,small_local_common-0x8000(r0) ++ ldw r4,data_label+0x10000(r0) ++ ldw r4,data_label(r5) ++ ldw r4,big_external_data_label(r5) ++ ldw r4,small_external_data_label(r5) ++ ldw r4,big_external_common(r5) ++ ldw r4,small_external_common(r5) ++ ldw r4,big_local_common(r5) ++ ldw r4,small_local_common(r5) ++ ldw r4,data_label+4(r5) ++ ldw r4,big_external_data_label+4(r5) ++ ldw r4,small_external_data_label+4(r5) ++ ldw r4,big_external_common+4(r5) ++ ldw r4,small_external_common+4(r5) ++ ldw r4,big_local_common+4(r5) ++ ldw r4,small_local_common+4(r5) ++ ldw r4,data_label-0x8000(r5) ++ ldw r4,big_external_data_label-0x8000(r5) ++ ldw r4,small_external_data_label-0x8000(r5) ++ ldw r4,big_external_common-0x8000(r5) ++ ldw r4,small_external_common-0x8000(r5) ++ ldw r4,big_local_common-0x8000(r5) ++ ldw r4,small_local_common-0x8000(r5) ++ ++ ldwio r4,0(r0) ++ ldwio r4,4(r0) ++ ldwio r4,0x7ffc(r0) ++ ldwio r4,-0x8000(r0) ++ ldwio r4,0(r5) ++ ldwio r4,4(r5) ++ ldwio r4,0x7ffc(r5) ++ ldwio r4,-0x8000(r5) ++ ldwio r4,data_label(r0) ++ ldwio r4,big_external_data_label(r0) ++ ldwio r4,small_external_data_label(r0) ++ ldwio r4,big_external_common(r0) ++ ldwio r4,small_external_common(r0) ++ ldwio r4,big_local_common(r0) ++ ldwio r4,small_local_common(r0) ++ ldwio r4,data_label+4(r0) ++ ldwio r4,big_external_data_label+4(r0) ++ ldwio r4,small_external_data_label+4(r0) ++ ldwio r4,big_external_common+4(r0) ++ ldwio r4,small_external_common+4(r0) ++ ldwio r4,big_local_common+4(r0) ++ ldwio r4,small_local_common+4(r0) ++ ldwio r4,data_label-0x8000(r0) ++ ldwio r4,big_external_data_label-0x8000(r0) ++ ldwio r4,small_external_data_label-0x8000(r0) ++ ldwio r4,big_external_common-0x8000(r0) ++ ldwio r4,small_external_common-0x8000(r0) ++ ldwio r4,big_local_common-0x8000(r0) ++ ldwio r4,small_local_common-0x8000(r0) ++ ldwio r4,data_label+0x10000(r0) ++ ldwio r4,data_label(r5) ++ ldwio r4,big_external_data_label(r5) ++ ldwio r4,small_external_data_label(r5) ++ ldwio r4,big_external_common(r5) ++ ldwio r4,small_external_common(r5) ++ ldwio r4,big_local_common(r5) ++ ldwio r4,small_local_common(r5) ++ ldwio r4,data_label+4(r5) ++ ldwio r4,big_external_data_label+4(r5) ++ ldwio r4,small_external_data_label+4(r5) ++ ldwio r4,big_external_common+4(r5) ++ ldwio r4,small_external_common+4(r5) ++ ldwio r4,big_local_common+4(r5) ++ ldwio r4,small_local_common+4(r5) ++ ldwio r4,data_label-0x8000(r5) ++ ldwio r4,big_external_data_label-0x8000(r5) ++ ldwio r4,small_external_data_label-0x8000(r5) ++ ldwio r4,big_external_common-0x8000(r5) ++ ldwio r4,small_external_common-0x8000(r5) ++ ldwio r4,big_local_common-0x8000(r5) ++ ldwio r4,small_local_common-0x8000(r5) +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/lineseparator.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/lineseparator.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,10 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 lineseparator ++ ++# Test the add instruction ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0x0+0000 mov r5,r4 ++0x0+0004 mov r4,r5 +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/lineseparator.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/lineseparator.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,4 @@ ++mov r5, r4 ; mov r4, r5 ++ ++ ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/link1.lds +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/link1.lds 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,11 @@ ++/* Simple script for testing relaxation */ ++ ++OUTPUT_FORMAT("elf32-littlenios2", "elf32-littlenios2", "elf32-littlenios2") ++OUTPUT_ARCH(nios2) ++ENTRY(_start) ++SECTIONS ++{ ++ _start = .; ++ text2 0 : { *(text2) } ++ text1 0x8000 : { *(text1) } ++} +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/link2.lds +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/link2.lds 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,11 @@ ++/* Simple script for testing relaxation */ ++ ++OUTPUT_FORMAT("elf32-littlenios2", "elf32-littlenios2", "elf32-littlenios2") ++OUTPUT_ARCH(nios2) ++ENTRY(_start) ++SECTIONS ++{ ++ _start = .; ++ text1 0 : { *(text1) } ++ text2 0x80000000 : { *(text2) } ++} +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/link3.lds +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/link3.lds 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,11 @@ ++/* Simple script for testing relaxation */ ++ ++OUTPUT_FORMAT("elf32-littlenios2", "elf32-littlenios2", "elf32-littlenios2") ++OUTPUT_ARCH(nios2) ++ENTRY(_start) ++SECTIONS ++{ ++ _start = .; ++ text1 0 : { *(text1) } ++ text2 0x08000000 : { *(text2) } ++} +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/mov.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/mov.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,11 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 mov ++ ++# Test the mov instruction ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> movz \$4,\$5,\$6 ++0+0004 <[^>]*> movnz \$4,\$5,\$6 ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/mov.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/mov.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,5 @@ ++# Source file used to test the movz and movnz instructions ++ ++foo: ++ movz $4,$5,$6 ++ movnz $4,$5,$6 +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/movi.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/movi.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,13 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 movi ++ ++# Test implicit conversion of movi/movhi etc ++.*: file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> movi r2,32 ++0+0004 <[^>]*> movhi r2,8192 ++0+0008 <[^>]*> movhi r2,65535 ++0+000c <[^>]*> orhi r2,r5,65535 ++0+0010 <[^>]*> xorhi r2,r10,65535 ++0+0014 <[^>]*> andhi r2,r15,65535 +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/movi.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/movi.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,21 @@ ++# Source file used to test silent conversion of ++# movi to orhi etc ++ ++foo: ++# this doesn't get converted ++movi r2, 0x20 ++ ++# this does ++movi r2, 0x20000000 ++ ++# addi should convert only if the source register is r0 ++addi r2, r0, 0xffff0000 ++# but we can't test for non-conversion because the value would ++# be out of range ++ ++# logical ops should convert for any register ++ori r2, r5, 0xffff0000 ++xori r2, r10, 0xffff0000 ++andi r2, r15, 0xffff0000 ++ ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/movia.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/movia.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,18 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 movia ++ ++# Test the movia instruction ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> movhi r2,32897 ++0+0004 <[^>]*> addi r2,r2,-32640 ++0+0008 <[^>]*> movhi r3,0 ++ 8: R_NIOS2_HIADJ16 sym\+0x80000000 ++0+000c <[^>]*> addi r3,r3,0 ++ c: R_NIOS2_LO16 sym\+0x80000000 ++0+0010 <[^>]*> movhi r4,0 ++ 10: R_NIOS2_HIADJ16 sym\+0x80000001 ++0+0014 <[^>]*> addi r4,r4,0 ++ 14: R_NIOS2_LO16 sym\+0x80000001 +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/movia.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/movia.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,6 @@ ++# Test program for movia reg, immed32 macro ++ ++foo: ++ movia r2, 0x80808080 ++ movia r3, sym + 0x80000000 ++ movia r4, sym - 0x7fffffff +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/mul.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/mul.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,19 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 mul ++ ++# Test the mul macro. ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> mul r4,r5,r6 ++0+0004 <[^>]*> muli r4,r5,0 ++0+0008 <[^>]*> muli r4,r5,1 ++0+000c <[^>]*> muli r4,r5,-32768 ++0+0010 <[^>]*> muli r4,r5,32767 ++0+0014 <[^>]*> muli r4,r5,0 ++[ ]*14: R_NIOS2_S16 undefined_symbol ++0+0018 <[^>]*> muli r4,r5,16448 ++0+001c <[^>]*> mulxss r4,r5,r6 ++0+0020 <[^>]*> mulxsu r4,r5,r6 ++0+0024 <[^>]*> mulxuu r4,r5,r6 +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/mul.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/mul.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,15 @@ ++# Source file used to test the mul macro. ++ ++foo: ++ mul r4,r5,r6 ++ muli r4,r5,0 ++ muli r4,r5,1 ++ muli r4,r5,-0x8000 ++ muli r4,r5,0x7fff ++ muli r4,r5,undefined_symbol ++ muli r4,r5,defined_symbol ++ mulxss r4,r5,r6 ++ mulxsu r4,r5,r6 ++ mulxuu r4,r5,r6 ++.data ++.set defined_symbol, 0x4040 +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-merged_strings.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-merged_strings.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,17 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 reloc against merged strings ++ ++# Test the merged duplicate strings ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> addi r2,r2,32 ++0+0004 <[^>]*> addi r3,r3,63 ++0+0008 <[^>]*> addi r4,r4,70 ++0+000c <[^>]*> call 00000000 <func1> ++0+0010 <[^>]*> addi r2,r2,101 ++0+0014 <[^>]*> addi r3,r3,63 ++0+0018 <[^>]*> addi r4,r4,132 ++0+001c <[^>]*> call 00000000 <func1> ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-merged_strings.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-merged_strings.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,21 @@ ++ .section .rodata.str1.1,"aMS",@progbits,1 ++.LC0: ++ .string "DHRYSTONE PROGRAM, 1'ST STRING" ++.LC1: ++ .string "COMMON" ++.LC2: ++ .string "DHRYSTONE PROGRAM, 2'ND STRING" ++ ++ .section .text ++ .align 3 ++ .global func1 ++ .type func1, @function ++func1: ++ #movhi $2, %hiadj(.LC0) ++ addi r2, r2, .LC0 ++ #movhi $3, %hiadj(.LC1) ++ addi r3, r3, .LC1 ++ #movhi $4, %hiadj(.LC2) ++ addi r4, r4, .LC2 ++ .size func1, .-func1 ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-bfd-reloc-xx.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-bfd-reloc-xx.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,8 @@ ++#objdump: -s ++#name: NIOS2 R_NIOS2_BFD_RELOC_XX ++ ++# Test the branch instructions. ++.*: +file format elf32-littlenios2 ++ ++Contents of section .text: ++ 0000 fa00cefa efbeadde facefaef beadde00 ................ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-bfd-reloc-xx.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-bfd-reloc-xx.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,9 @@ ++# Test for New Jersey 32-bit, 16 and 8-bit relocations ++ ++.global byte_sym ++.global short_sym ++.global long_sym ++ ++.set byte_sym, 0xFA ++.set short_sym, 0xFACE ++.set long_sym, 0xDEADBEEF +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-cache-opx.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-cache-opx.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,10 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 R_NIOS2_CACHE_OPX ++ ++# Test the cache opx relocation ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> cache 0x1f,0x1000\(\$1\) ++0+0004 <[^>]*> Address 0x4 is out of bounds. ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-cache-opx.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-cache-opx.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,6 @@ ++# Test the imm5 relocation ++ ++.text ++ cache imm5, 0x1000($1) ++ ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-call26.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-call26.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,76 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 nios2-reloc-r-nios2-call26 ++ ++# Test the branch instructions. ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++[ ]*\.\.\. ++[ ]*0: R_NIOS2_CALL26 .text\+0x100 ++[ ]*4: R_NIOS2_CALL26 globalfunc ++0+0008 <[^>]*> nop ++0+000c <[^>]*> nop ++0+0010 <[^>]*> nop ++0+0014 <[^>]*> nop ++0+0018 <[^>]*> nop ++0+001c <[^>]*> nop ++0+0020 <[^>]*> nop ++0+0024 <[^>]*> nop ++0+0028 <[^>]*> nop ++0+002c <[^>]*> nop ++0+0030 <[^>]*> nop ++0+0034 <[^>]*> nop ++0+0038 <[^>]*> nop ++0+003c <[^>]*> nop ++0+0040 <[^>]*> nop ++0+0044 <[^>]*> nop ++0+0048 <[^>]*> nop ++0+004c <[^>]*> nop ++0+0050 <[^>]*> nop ++0+0054 <[^>]*> nop ++0+0058 <[^>]*> nop ++0+005c <[^>]*> nop ++0+0060 <[^>]*> nop ++0+0064 <[^>]*> nop ++0+0068 <[^>]*> nop ++0+006c <[^>]*> nop ++0+0070 <[^>]*> nop ++0+0074 <[^>]*> nop ++0+0078 <[^>]*> nop ++0+007c <[^>]*> nop ++0+0080 <[^>]*> nop ++0+0084 <[^>]*> nop ++0+0088 <[^>]*> nop ++0+008c <[^>]*> nop ++0+0090 <[^>]*> nop ++0+0094 <[^>]*> nop ++0+0098 <[^>]*> nop ++0+009c <[^>]*> nop ++0+00a0 <[^>]*> nop ++0+00a4 <[^>]*> nop ++0+00a8 <[^>]*> nop ++0+00ac <[^>]*> nop ++0+00b0 <[^>]*> nop ++0+00b4 <[^>]*> nop ++0+00b8 <[^>]*> nop ++0+00bc <[^>]*> nop ++0+00c0 <[^>]*> nop ++0+00c4 <[^>]*> nop ++0+00c8 <[^>]*> nop ++0+00cc <[^>]*> nop ++0+00d0 <[^>]*> nop ++0+00d4 <[^>]*> nop ++0+00d8 <[^>]*> nop ++0+00dc <[^>]*> nop ++0+00e0 <[^>]*> nop ++0+00e4 <[^>]*> nop ++0+00e8 <[^>]*> nop ++0+00ec <[^>]*> nop ++0+00f0 <[^>]*> nop ++0+00f4 <[^>]*> nop ++0+00f8 <[^>]*> nop ++0+00fc <[^>]*> nop ++0+0100 <[^>]*> nop ++ ... ++ ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-call26.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-call26.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,12 @@ ++# Test for New Jersey 32-bit relocations ++ ++.global globalfunc ++.text ++.set norelax ++start: ++ call localfunc ++ call globalfunc ++ ++.align 8 ++localfunc: ++ nop +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-gprel.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-gprel.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,15 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 gp-relative relocations ++ ++# Test the %gprel macro. ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> movui gp,32784 ++0+0004 <[^>]*> ldw at,-32756\(gp\) ++0+0008 <[^>]*> ldw r2,-32752\(gp\) ++0+000c <[^>]*> ldb r3,-32748\(gp\) ++0+0010 <[^>]*> ldw at,-32744\(gp\) ++0+0014 <[^>]*> ldw r2,-32740\(gp\) ++0+0018 <[^>]*> ldb r3,-32736\(gp\) +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-gprel.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-gprel.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,24 @@ ++.sdata ++sym1: ++.long 0xdead ++sym2: ++.long 0xbeef ++sym3: ++.byte 0x7f ++ ++.section sdata1, "s" ++sym4: ++.long 0xdead ++sym5: ++.long 0xbeef ++sym6: ++.byte 0x7f ++ ++.text ++ movui gp, _gp ++ ldw r1, %gprel(sym1)(gp) ++ ldw r2, %gprel(sym2)(gp) ++ ldb r3, %gprel(sym3)(gp) ++ ldw r1, %gprel(sym4)(gp) ++ ldw r2, %gprel(sym5)(gp) ++ ldb r3, %gprel(sym6)(gp) +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-hilo16.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-hilo16.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,10 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 R_NIOS2_HI16,LO16,HIADJ16 ++ ++# Test the %hi, %lo and %hiadi relocations ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> addi at,at,-8531 ++0+0004 <[^>]*> addi at,at,-16657 ++0+0008 <[^>]*> addi at,at,-8530 +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-hilo16.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-hilo16.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,6 @@ ++# Test the %hi, lo and %hiadj relocations ++ ++.text ++ addi r1, r1, %hi(long_symbol) ++ addi r1, r1, %lo(long_symbol) ++ addi r1, r1, %hiadj(long_symbol) +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-imm5.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-imm5.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,10 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 R_NIOS2_IMM5 ++ ++# Test the branch instructions. ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> roli at,at,31 ++0+0004 <.[^>]*> Address 0x4 is out of bounds. ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-imm5.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-imm5.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,6 @@ ++# Test the imm5 relocation ++ ++.text ++ roli r1, r1, imm5 ++ ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-pcrel16.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-pcrel16.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,12 @@ ++#objdump: -s ++#name: NIOS2 R_NIOS2_PCREL16 ++ ++# Test the relative branch relocations. ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++ ++0+0000 <[^>]*> br 00000008 <ext_label> ++0+0004 <[^>]*> br 00000018 <__bss_start\+0x8> ++0+0008 <[^>]*> nop ++0+000c <[^>]*> nop +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-pcrel16.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-pcrel16.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,6 @@ ++# Test for pc-relative relocations ++.set norelax ++.text ++ br ext_label ++ br ext_label + 16 ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-s.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-s.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,8 @@ ++ ++a.exe: file format elf32-littlenios2 ++ ++Contents of section .text: ++ 0000 04004408 04006008 c4ff5f08 44004808 ..D...`..._.D.H. ++ 0010 44004008 D.@. ++Contents of section .data: ++Contents of section .sbss: +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-s16.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-s16.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,9 @@ ++#objdump: -s ++#name: NIOS2 R_NIOS2_S16 ++ ++# Test the signed 16-bit relocations. ++.*: +file format elf32-littlenios2 ++ ++Contents of section .text: ++ 0000 04004408 04006008 c4ff5f08 44004808 ..D...`..._.D.H. ++ 0010 44004008 D.@. +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-s16.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-s16.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,13 @@ ++# Test for New Jersey 32-bit, 16 and 8-bit relocations ++ ++.set some_other_sym, 0x1000 ++.text ++# signed 16-bit relocation ++ addi r1, r1, some_sym ++ addi r1, r1, min ++ addi r1, r1, max ++ addi r1, r1, some_sym + some_other_sym + 1 ++ addi r1, r1, some_sym - some_other_sym + 1 ++ ++ ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-u16.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-u16.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,9 @@ ++#objdump: -s ++#name: NIOS2 R_NIOS2_U16 ++ ++# Test the unsigned 16-bit relocations. ++.*: +file format elf32-littlenios2 ++ ++Contents of section .text: ++ 0000 0c004408 0c004008 ccff7f08 4c004808 ..D...@.....L.H. ++ 0010 4c004008 L.@. +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-u16.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2-reloc-r-nios2-u16.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,13 @@ ++# Test for New Jersey 32-bit, 16 and 8-bit relocations ++ ++.set some_other_sym, 0x1000 ++.text ++# signed 16-bit relocation ++ andi r1, r1, some_sym ++ andi r1, r1, min ++ andi r1, r1, max ++ andi r1, r1, some_sym + some_other_sym + 1 ++ andi r1, r1, some_sym - some_other_sym + 1 ++ ++ ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2.exp +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nios2.exp 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,201 @@ ++# ++# Some generic New Jersey tests ++# ++ ++# "LOSE" marks information about tests which fail at a particular point ++# in time, but which are not XFAILed. Either they used to pass ++# and indicate either regressions or the need to tweak the tests to keep ++# up the with code, or they are new tests and it is unknown whether or not ++# they should pass as-is for the given object formats. ++ ++if ![info exists LD] then { ++ set LD [findfile $base_dir/../../ld/ld-new] ++} ++ ++proc run_list_test { name } { ++ global srcdir subdir ++ set testname "NIOS2 $name" ++ set file $srcdir/$subdir/$name ++ gas_run ${name}.s "" ">&dump.out" ++ if { [regexp_diff "dump.out" "${file}.l"] } then { ++ fail $testname ++ verbose "output is [file_contents "dump.out"]" 2 ++ return ++ } ++ pass $testname ++} ++ ++proc ld_run { obj0 obj1 opts } { ++ global LD ++ global comp_output ++ global srcdir ++ global subdir ++ global host_triplet ++ ++ verbose "Executing $srcdir/lib/run $LD $obj0 $obj1 $opts" ++ catch "exec $srcdir/lib/run $LD $obj0 $obj1 $opts" comp_output ++ set comp_output [prune_warnings $comp_output] ++ verbose "output was $comp_output" ++ return [list $comp_output ""]; ++} ++ ++proc objdump_run { prog opts redir } { ++ global OBJDUMP ++ global comp_output ++ global srcdir ++ global subdir ++ global host_triplet ++ ++ verbose "Executing $srcdir/lib/run $OBJDUMP -s $prog" ++ catch "exec $srcdir/lib/run $OBJDUMP $opts $prog $redir" comp_output ++ set comp_output [prune_warnings $comp_output] ++ verbose "output was $comp_output" ++ return [list $comp_output ""]; ++} ++ ++proc run_reloc_test { name other objdump_opts} { ++ global LD OBJDUMP AS ++ global srcdir subdir ++ set testname "NIOS2 $name" ++ set file $srcdir/$subdir/$name ++ set file1 $srcdir/$subdir/$other ++ gas_run ${name}.s "-o ${name}.o" "" ++ gas_run ${other}.s "-o ${other}.o" "" ++ ld_run ${name}.o ${other}.o "-o ${name}.exe" ++ objdump_run ${name}.exe ${objdump_opts} ">&dump.out" ++ if { [regexp_diff "dump.out" "${file}.d"] } then { ++ fail $testname ++ verbose "output is [file_contents "dump.out"]" 2 ++ return ++ } ++ pass $testname ++} ++ ++proc run_gpreloc_test { name objdump_opts} { ++ global LD OBJDUMP AS ++ global srcdir subdir ++ set testname "NIOS2 $name" ++ set file $srcdir/$subdir/$name ++ gas_run ${name}.s "-o ${name}.o" "" ++ ld_run ${name}.o "" "-o ${name}.exe" ++ objdump_run ${name}.exe ${objdump_opts} ">&dump.out" ++ if { [regexp_diff "dump.out" "${file}.d"] } then { ++ fail $testname ++ verbose "output is [file_contents "dump.out"]" 2 ++ return ++ } ++ pass $testname ++} ++ ++proc run_relax_test { name asm_opts link_opts objdump_opts} { ++ global LD OBJDUMP AS ++ global srcdir subdir ++ set testname "NIOS2 $name" ++ set file $srcdir/$subdir/$name ++ gas_run ${name}.s "-o ${name}.o" ${asm_opts} ++ ld_run ${name}.o "" "-o ${name}.exe -T${srcdir}/${subdir}/${link_opts} --relax" ++ objdump_run ${name}.exe ${objdump_opts} ">&dump.out" ++ if { [regexp_diff "dump.out" "${file}.d"] } then { ++ fail $testname ++ verbose "output is [file_contents "dump.out"]" 2 ++ return ++ } ++ pass $testname ++} ++ ++proc run_relax_section_test { name asm_opts objdump_opts} { ++ global LD OBJDUMP AS ++ global srcdir subdir ++ set testname "NIOS2 $name" ++ set file $srcdir/$subdir/$name ++ gas_run ${name}.s "-o ${name}.o" ${asm_opts} ++ ld_run ${name}.o "" "-o ${name}.exe" ++ objdump_run ${name}.exe ${objdump_opts} ">&dump.out" ++ if { [regexp_diff "dump.out" "${file}.d"] } then { ++ fail $testname ++ verbose "output is [file_contents "dump.out"]" 2 ++ return ++ } ++ pass $testname ++} ++ ++if { [istarget nios2-*-elf] } then { ++ set elf 1 ++ ++ run_dump_test "add" ++ run_dump_test "and" ++ run_dump_test "align_fill" ++ run_dump_test "align_text" ++ ++ run_dump_test "branch" ++ ++ ++ run_dump_test "break" ++ run_dump_test "bret" ++ run_dump_test "cache" ++ ++ run_dump_test "call" ++ ++ ++ run_dump_test "cmp" ++ ++ ++ run_dump_test "jmp" ++ run_dump_test "ldw" ++ run_dump_test "ldh" ++ run_dump_test "ldb" ++ ++ run_dump_test "flushda" ++ ++ run_dump_test "mul" ++ ++ run_dump_test "nor" ++ run_dump_test "or" ++ ++ run_dump_test "ctl" ++ run_dump_test "ret" ++ run_dump_test "rotate" ++ ++ run_dump_test "stw" ++ run_dump_test "sth" ++ run_dump_test "stb" ++ ++ run_dump_test "sub" ++ run_dump_test "sync" ++ run_dump_test "trap" ++ run_dump_test "tret" ++ ++ run_dump_test "custom" ++ run_dump_test "xor" ++ run_dump_test "movia" ++ ++ run_dump_test "complex" ++ run_dump_test "comments" ++ run_dump_test "etbt" ++ run_dump_test "lineseparator" ++ run_dump_test "movi" ++ ++ run_list_test "illegal" ++ run_list_test "warn_nobreak" ++ run_list_test "warn_noat" ++ ++ ++# now lets make sure that the assembler generates all the relocations ++# that it should correctly, and that the linker links them correctly ++ ++ run_reloc_test "nios2-reloc-r-nios2-bfd-reloc-xx" "reloc_symbols" "-s" ++ run_reloc_test "nios2-reloc-r-nios2-s16" "s16_symbol" "-s" ++ run_reloc_test "nios2-reloc-r-nios2-u16" "u16_symbol" "-s" ++ run_reloc_test "nios2-reloc-r-nios2-pcrel16" "pcrel_label" "-dr --prefix-addresses" ++ run_reloc_test "nios2-reloc-r-nios2-hilo16" "hilo_symbol" "-dr --prefix-addresses" ++ run_dump_test "nios2-reloc-r-nios2-call26" ++ run_reloc_test "nios2-reloc-r-nios2-imm5" "imm5_symbol" "-dr --prefix-addresses" ++ run_reloc_test "nios2-reloc-merged_strings" "str2" "-dr --prefix-addresses" ++ run_gpreloc_test "nios2-reloc-r-nios2-gprel" "-dr --prefix-addresses" ++ ++# relaxation tests ++ run_relax_test "relax_ujmp" "-relax-all" "link1.lds" "-dr --prefix-addresses" ++ run_relax_test "relax_cjmp" "-relax-all" "link1.lds" "-dr --prefix-addresses" ++ run_relax_test "relax_callr" "-relax-all" "link3.lds" "-dr --prefix-addresses" ++ run_relax_section_test "relax_section" "-relax-section" "-dr --prefix-addresses" ++} +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nor.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nor.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,9 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 nor ++ ++# Test the nor instruction ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> nor r6,r8,r10 +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nor.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/nor.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,5 @@ ++# Source file used to test the nor instruction ++ ++foo: ++ nor r6,r8,r10 ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/or.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/or.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,11 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 or ++ ++# Test the nor instruction ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> or r6,r8,r10 ++0+0004 <[^>]*> orhi r6,r7,65535 ++0+0008 <[^>]*> ori r6,r7,65535 +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/or.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/or.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,7 @@ ++# Source file used to test the nor instruction ++ ++foo: ++ or r6,r8,r10 ++ orhi r6,r7,0xffff ++ ori r6,r7,0xffff ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/pcrel_label.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/pcrel_label.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,5 @@ ++.text ++ext_label: ++ nop ++ nop ++.global ext_label +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/relax_callr.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/relax_callr.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,22 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 relax_callr ++# Test relaxation of callr ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section text1: ++00000000 <[^>]*> call 08000000 <func> ++00000004 <[^>]*> nop ++00000008 <[^>]*> nop ++0000000c <[^>]*> call 0800001c <func1> ++00000010 <[^>]*> nop ++00000014 <[^>]*> nop ++Disassembly of section text2: ++08000000 <[^>]*> nop ++08000004 <[^>]*> br 0800001c <func1> ++08000008 <[^>]*> nop ++0800000c <[^>]*> nop ++08000010 <[^>]*> nop ++08000014 <[^>]*> nop ++08000018 <[^>]*> nop ++0800001c <[^>]*> nop +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/relax_callr.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/relax_callr.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,17 @@ ++# relaxation test for callr ++ ++.globl text1 ++.section text1, "ax", @progbits ++ ++ call func ++ call func1 ++ ++.section text2, "ax", @progbits ++func: ++ nop ++ br func1 ++ nop ++ nop ++ nop ++func1: ++ nop +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/relax_cjmp.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/relax_cjmp.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,8227 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 relax_cjmp ++ ++# Test relaxation of conditional jumps ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section text2: ++00000000 <[^>]*> bge r2,r3,00008000 <[^>]*> ++00000004 <[^>]*> nop ++00000008 <[^>]*> nop ++0000000c <[^>]*> nop ++00000010 <[^>]*> blt r3,r2,00000020 <[^>]*> ++00000014 <[^>]*> movhi at,1 ++00000018 <[^>]*> ori at,at,36 ++0000001c <[^>]*> jmp at ++00000020 <[^>]*> bge r3,r2,00000038 <[^>]*> ++00000024 <[^>]*> nop ++00000028 <[^>]*> nop ++0000002c <[^>]*> nop ++00000030 <[^>]*> nop ++00000034 <[^>]*> nop ++00000038 <[^>]*> nop ++Disassembly of section text1: ++00008000 <[^>]*> beq r2,r3,00010000 <[^>]*> ++00008004 <[^>]*> nop ++00008008 <[^>]*> nop ++0000800c <[^>]*> nop ++00008010 <[^>]*> bne r2,r3,00008020 <[^>]*> ++00008014 <[^>]*> movhi at,1 ++00008018 <[^>]*> ori at,at,36 ++0000801c <[^>]*> jmp at ++00008020 <[^>]*> nop ++00008024 <[^>]*> nop ++00008028 <[^>]*> nop ++0000802c <[^>]*> nop ++00008030 <[^>]*> nop ++00008034 <[^>]*> nop ++00008038 <[^>]*> nop ++0000803c <[^>]*> nop ++00008040 <[^>]*> nop ++00008044 <[^>]*> nop ++00008048 <[^>]*> nop ++0000804c <[^>]*> nop ++00008050 <[^>]*> nop ++00008054 <[^>]*> nop ++00008058 <[^>]*> nop ++0000805c <[^>]*> nop ++00008060 <[^>]*> nop ++00008064 <[^>]*> nop ++00008068 <[^>]*> nop ++0000806c <[^>]*> nop ++00008070 <[^>]*> nop ++00008074 <[^>]*> nop ++00008078 <[^>]*> nop ++0000807c <[^>]*> nop ++00008080 <[^>]*> nop ++00008084 <[^>]*> nop ++00008088 <[^>]*> nop ++0000808c <[^>]*> nop ++00008090 <[^>]*> nop ++00008094 <[^>]*> nop ++00008098 <[^>]*> nop ++0000809c <[^>]*> nop ++000080a0 <[^>]*> nop ++000080a4 <[^>]*> nop ++000080a8 <[^>]*> nop ++000080ac <[^>]*> nop ++000080b0 <[^>]*> nop ++000080b4 <[^>]*> nop ++000080b8 <[^>]*> nop ++000080bc <[^>]*> nop ++000080c0 <[^>]*> nop ++000080c4 <[^>]*> nop ++000080c8 <[^>]*> nop ++000080cc <[^>]*> nop ++000080d0 <[^>]*> nop ++000080d4 <[^>]*> nop ++000080d8 <[^>]*> nop ++000080dc <[^>]*> nop ++000080e0 <[^>]*> nop ++000080e4 <[^>]*> nop ++000080e8 <[^>]*> nop ++000080ec <[^>]*> nop ++000080f0 <[^>]*> nop ++000080f4 <[^>]*> nop ++000080f8 <[^>]*> nop ++000080fc <[^>]*> nop ++00008100 <[^>]*> nop ++00008104 <[^>]*> nop ++00008108 <[^>]*> nop ++0000810c <[^>]*> nop ++00008110 <[^>]*> nop ++00008114 <[^>]*> nop ++00008118 <[^>]*> nop ++0000811c <[^>]*> nop ++00008120 <[^>]*> nop ++00008124 <[^>]*> nop ++00008128 <[^>]*> nop ++0000812c <[^>]*> nop ++00008130 <[^>]*> nop ++00008134 <[^>]*> nop ++00008138 <[^>]*> nop ++0000813c <[^>]*> nop ++00008140 <[^>]*> nop ++00008144 <[^>]*> nop ++00008148 <[^>]*> nop ++0000814c <[^>]*> nop ++00008150 <[^>]*> nop ++00008154 <[^>]*> nop ++00008158 <[^>]*> nop ++0000815c <[^>]*> nop ++00008160 <[^>]*> nop ++00008164 <[^>]*> nop ++00008168 <[^>]*> nop ++0000816c <[^>]*> nop ++00008170 <[^>]*> nop ++00008174 <[^>]*> nop ++00008178 <[^>]*> nop ++0000817c <[^>]*> nop ++00008180 <[^>]*> nop ++00008184 <[^>]*> nop ++00008188 <[^>]*> nop ++0000818c <[^>]*> nop ++00008190 <[^>]*> nop ++00008194 <[^>]*> nop ++00008198 <[^>]*> nop ++0000819c <[^>]*> nop ++000081a0 <[^>]*> nop ++000081a4 <[^>]*> nop ++000081a8 <[^>]*> nop ++000081ac <[^>]*> nop ++000081b0 <[^>]*> nop ++000081b4 <[^>]*> nop ++000081b8 <[^>]*> nop ++000081bc <[^>]*> nop ++000081c0 <[^>]*> nop ++000081c4 <[^>]*> nop ++000081c8 <[^>]*> nop ++000081cc <[^>]*> nop ++000081d0 <[^>]*> nop ++000081d4 <[^>]*> nop ++000081d8 <[^>]*> nop ++000081dc <[^>]*> nop ++000081e0 <[^>]*> nop ++000081e4 <[^>]*> nop ++000081e8 <[^>]*> nop ++000081ec <[^>]*> nop ++000081f0 <[^>]*> nop ++000081f4 <[^>]*> nop ++000081f8 <[^>]*> nop ++000081fc <[^>]*> nop ++00008200 <[^>]*> nop ++00008204 <[^>]*> nop ++00008208 <[^>]*> nop ++0000820c <[^>]*> nop ++00008210 <[^>]*> nop ++00008214 <[^>]*> nop ++00008218 <[^>]*> nop ++0000821c <[^>]*> nop ++00008220 <[^>]*> nop ++00008224 <[^>]*> nop ++00008228 <[^>]*> nop ++0000822c <[^>]*> nop ++00008230 <[^>]*> nop ++00008234 <[^>]*> nop ++00008238 <[^>]*> nop ++0000823c <[^>]*> nop ++00008240 <[^>]*> nop ++00008244 <[^>]*> nop ++00008248 <[^>]*> nop ++0000824c <[^>]*> nop ++00008250 <[^>]*> nop ++00008254 <[^>]*> nop ++00008258 <[^>]*> nop ++0000825c <[^>]*> nop ++00008260 <[^>]*> nop ++00008264 <[^>]*> nop ++00008268 <[^>]*> nop ++0000826c <[^>]*> nop ++00008270 <[^>]*> nop ++00008274 <[^>]*> nop ++00008278 <[^>]*> nop ++0000827c <[^>]*> nop ++00008280 <[^>]*> nop ++00008284 <[^>]*> nop ++00008288 <[^>]*> nop ++0000828c <[^>]*> nop ++00008290 <[^>]*> nop ++00008294 <[^>]*> nop ++00008298 <[^>]*> nop ++0000829c <[^>]*> nop ++000082a0 <[^>]*> nop ++000082a4 <[^>]*> nop ++000082a8 <[^>]*> nop ++000082ac <[^>]*> nop ++000082b0 <[^>]*> nop ++000082b4 <[^>]*> nop ++000082b8 <[^>]*> nop ++000082bc <[^>]*> nop ++000082c0 <[^>]*> nop ++000082c4 <[^>]*> nop ++000082c8 <[^>]*> nop ++000082cc <[^>]*> nop ++000082d0 <[^>]*> nop ++000082d4 <[^>]*> nop ++000082d8 <[^>]*> nop ++000082dc <[^>]*> nop ++000082e0 <[^>]*> nop ++000082e4 <[^>]*> nop ++000082e8 <[^>]*> nop ++000082ec <[^>]*> nop ++000082f0 <[^>]*> nop ++000082f4 <[^>]*> nop ++000082f8 <[^>]*> nop ++000082fc <[^>]*> nop ++00008300 <[^>]*> nop ++00008304 <[^>]*> nop ++00008308 <[^>]*> nop ++0000830c <[^>]*> nop ++00008310 <[^>]*> nop ++00008314 <[^>]*> nop ++00008318 <[^>]*> nop ++0000831c <[^>]*> nop ++00008320 <[^>]*> nop ++00008324 <[^>]*> nop ++00008328 <[^>]*> nop ++0000832c <[^>]*> nop ++00008330 <[^>]*> nop ++00008334 <[^>]*> nop ++00008338 <[^>]*> nop ++0000833c <[^>]*> nop ++00008340 <[^>]*> nop ++00008344 <[^>]*> nop ++00008348 <[^>]*> nop ++0000834c <[^>]*> nop ++00008350 <[^>]*> nop ++00008354 <[^>]*> nop ++00008358 <[^>]*> nop ++0000835c <[^>]*> nop ++00008360 <[^>]*> nop ++00008364 <[^>]*> nop ++00008368 <[^>]*> nop ++0000836c <[^>]*> nop ++00008370 <[^>]*> nop ++00008374 <[^>]*> nop ++00008378 <[^>]*> nop ++0000837c <[^>]*> nop ++00008380 <[^>]*> nop ++00008384 <[^>]*> nop ++00008388 <[^>]*> nop ++0000838c <[^>]*> nop ++00008390 <[^>]*> nop ++00008394 <[^>]*> nop ++00008398 <[^>]*> nop ++0000839c <[^>]*> nop ++000083a0 <[^>]*> nop ++000083a4 <[^>]*> nop ++000083a8 <[^>]*> nop ++000083ac <[^>]*> nop ++000083b0 <[^>]*> nop ++000083b4 <[^>]*> nop ++000083b8 <[^>]*> nop ++000083bc <[^>]*> nop ++000083c0 <[^>]*> nop ++000083c4 <[^>]*> nop ++000083c8 <[^>]*> nop ++000083cc <[^>]*> nop ++000083d0 <[^>]*> nop ++000083d4 <[^>]*> nop ++000083d8 <[^>]*> nop ++000083dc <[^>]*> nop ++000083e0 <[^>]*> nop ++000083e4 <[^>]*> nop ++000083e8 <[^>]*> nop ++000083ec <[^>]*> nop ++000083f0 <[^>]*> nop ++000083f4 <[^>]*> nop ++000083f8 <[^>]*> nop ++000083fc <[^>]*> nop ++00008400 <[^>]*> nop ++00008404 <[^>]*> nop ++00008408 <[^>]*> nop ++0000840c <[^>]*> nop ++00008410 <[^>]*> nop ++00008414 <[^>]*> nop ++00008418 <[^>]*> nop ++0000841c <[^>]*> nop ++00008420 <[^>]*> nop ++00008424 <[^>]*> nop ++00008428 <[^>]*> nop ++0000842c <[^>]*> nop ++00008430 <[^>]*> nop ++00008434 <[^>]*> nop ++00008438 <[^>]*> nop ++0000843c <[^>]*> nop ++00008440 <[^>]*> nop ++00008444 <[^>]*> nop ++00008448 <[^>]*> nop ++0000844c <[^>]*> nop ++00008450 <[^>]*> nop ++00008454 <[^>]*> nop ++00008458 <[^>]*> nop ++0000845c <[^>]*> nop ++00008460 <[^>]*> nop ++00008464 <[^>]*> nop ++00008468 <[^>]*> nop ++0000846c <[^>]*> nop ++00008470 <[^>]*> nop ++00008474 <[^>]*> nop ++00008478 <[^>]*> nop ++0000847c <[^>]*> nop ++00008480 <[^>]*> nop ++00008484 <[^>]*> nop ++00008488 <[^>]*> nop ++0000848c <[^>]*> nop ++00008490 <[^>]*> nop ++00008494 <[^>]*> nop ++00008498 <[^>]*> nop ++0000849c <[^>]*> nop ++000084a0 <[^>]*> nop ++000084a4 <[^>]*> nop ++000084a8 <[^>]*> nop ++000084ac <[^>]*> nop ++000084b0 <[^>]*> nop ++000084b4 <[^>]*> nop ++000084b8 <[^>]*> nop ++000084bc <[^>]*> nop ++000084c0 <[^>]*> nop ++000084c4 <[^>]*> nop ++000084c8 <[^>]*> nop ++000084cc <[^>]*> nop ++000084d0 <[^>]*> nop ++000084d4 <[^>]*> nop ++000084d8 <[^>]*> nop ++000084dc <[^>]*> nop ++000084e0 <[^>]*> nop ++000084e4 <[^>]*> nop ++000084e8 <[^>]*> nop ++000084ec <[^>]*> nop ++000084f0 <[^>]*> nop ++000084f4 <[^>]*> nop ++000084f8 <[^>]*> nop ++000084fc <[^>]*> nop ++00008500 <[^>]*> nop ++00008504 <[^>]*> nop ++00008508 <[^>]*> nop ++0000850c <[^>]*> nop ++00008510 <[^>]*> nop ++00008514 <[^>]*> nop ++00008518 <[^>]*> nop ++0000851c <[^>]*> nop ++00008520 <[^>]*> nop ++00008524 <[^>]*> nop ++00008528 <[^>]*> nop ++0000852c <[^>]*> nop ++00008530 <[^>]*> nop ++00008534 <[^>]*> nop ++00008538 <[^>]*> nop ++0000853c <[^>]*> nop ++00008540 <[^>]*> nop ++00008544 <[^>]*> nop ++00008548 <[^>]*> nop ++0000854c <[^>]*> nop ++00008550 <[^>]*> nop ++00008554 <[^>]*> nop ++00008558 <[^>]*> nop ++0000855c <[^>]*> nop ++00008560 <[^>]*> nop ++00008564 <[^>]*> nop ++00008568 <[^>]*> nop ++0000856c <[^>]*> nop ++00008570 <[^>]*> nop ++00008574 <[^>]*> nop ++00008578 <[^>]*> nop ++0000857c <[^>]*> nop ++00008580 <[^>]*> nop ++00008584 <[^>]*> nop ++00008588 <[^>]*> nop ++0000858c <[^>]*> nop ++00008590 <[^>]*> nop ++00008594 <[^>]*> nop ++00008598 <[^>]*> nop ++0000859c <[^>]*> nop ++000085a0 <[^>]*> nop ++000085a4 <[^>]*> nop ++000085a8 <[^>]*> nop ++000085ac <[^>]*> nop ++000085b0 <[^>]*> nop ++000085b4 <[^>]*> nop ++000085b8 <[^>]*> nop ++000085bc <[^>]*> nop ++000085c0 <[^>]*> nop ++000085c4 <[^>]*> nop ++000085c8 <[^>]*> nop ++000085cc <[^>]*> nop ++000085d0 <[^>]*> nop ++000085d4 <[^>]*> nop ++000085d8 <[^>]*> nop ++000085dc <[^>]*> nop ++000085e0 <[^>]*> nop ++000085e4 <[^>]*> nop ++000085e8 <[^>]*> nop ++000085ec <[^>]*> nop ++000085f0 <[^>]*> nop ++000085f4 <[^>]*> nop ++000085f8 <[^>]*> nop ++000085fc <[^>]*> nop ++00008600 <[^>]*> nop ++00008604 <[^>]*> nop ++00008608 <[^>]*> nop ++0000860c <[^>]*> nop ++00008610 <[^>]*> nop ++00008614 <[^>]*> nop ++00008618 <[^>]*> nop ++0000861c <[^>]*> nop ++00008620 <[^>]*> nop ++00008624 <[^>]*> nop ++00008628 <[^>]*> nop ++0000862c <[^>]*> nop ++00008630 <[^>]*> nop ++00008634 <[^>]*> nop ++00008638 <[^>]*> nop ++0000863c <[^>]*> nop ++00008640 <[^>]*> nop ++00008644 <[^>]*> nop ++00008648 <[^>]*> nop ++0000864c <[^>]*> nop ++00008650 <[^>]*> nop ++00008654 <[^>]*> nop ++00008658 <[^>]*> nop ++0000865c <[^>]*> nop ++00008660 <[^>]*> nop ++00008664 <[^>]*> nop ++00008668 <[^>]*> nop ++0000866c <[^>]*> nop ++00008670 <[^>]*> nop ++00008674 <[^>]*> nop ++00008678 <[^>]*> nop ++0000867c <[^>]*> nop ++00008680 <[^>]*> nop ++00008684 <[^>]*> nop ++00008688 <[^>]*> nop ++0000868c <[^>]*> nop ++00008690 <[^>]*> nop ++00008694 <[^>]*> nop ++00008698 <[^>]*> nop ++0000869c <[^>]*> nop ++000086a0 <[^>]*> nop ++000086a4 <[^>]*> nop ++000086a8 <[^>]*> nop ++000086ac <[^>]*> nop ++000086b0 <[^>]*> nop ++000086b4 <[^>]*> nop ++000086b8 <[^>]*> nop ++000086bc <[^>]*> nop ++000086c0 <[^>]*> nop ++000086c4 <[^>]*> nop ++000086c8 <[^>]*> nop ++000086cc <[^>]*> nop ++000086d0 <[^>]*> nop ++000086d4 <[^>]*> nop ++000086d8 <[^>]*> nop ++000086dc <[^>]*> nop ++000086e0 <[^>]*> nop ++000086e4 <[^>]*> nop ++000086e8 <[^>]*> nop ++000086ec <[^>]*> nop ++000086f0 <[^>]*> nop ++000086f4 <[^>]*> nop ++000086f8 <[^>]*> nop ++000086fc <[^>]*> nop ++00008700 <[^>]*> nop ++00008704 <[^>]*> nop ++00008708 <[^>]*> nop ++0000870c <[^>]*> nop ++00008710 <[^>]*> nop ++00008714 <[^>]*> nop ++00008718 <[^>]*> nop ++0000871c <[^>]*> nop ++00008720 <[^>]*> nop ++00008724 <[^>]*> nop ++00008728 <[^>]*> nop ++0000872c <[^>]*> nop ++00008730 <[^>]*> nop ++00008734 <[^>]*> nop ++00008738 <[^>]*> nop ++0000873c <[^>]*> nop ++00008740 <[^>]*> nop ++00008744 <[^>]*> nop ++00008748 <[^>]*> nop ++0000874c <[^>]*> nop ++00008750 <[^>]*> nop ++00008754 <[^>]*> nop ++00008758 <[^>]*> nop ++0000875c <[^>]*> nop ++00008760 <[^>]*> nop ++00008764 <[^>]*> nop ++00008768 <[^>]*> nop ++0000876c <[^>]*> nop ++00008770 <[^>]*> nop ++00008774 <[^>]*> nop ++00008778 <[^>]*> nop ++0000877c <[^>]*> nop ++00008780 <[^>]*> nop ++00008784 <[^>]*> nop ++00008788 <[^>]*> nop ++0000878c <[^>]*> nop ++00008790 <[^>]*> nop ++00008794 <[^>]*> nop ++00008798 <[^>]*> nop ++0000879c <[^>]*> nop ++000087a0 <[^>]*> nop ++000087a4 <[^>]*> nop ++000087a8 <[^>]*> nop ++000087ac <[^>]*> nop ++000087b0 <[^>]*> nop ++000087b4 <[^>]*> nop ++000087b8 <[^>]*> nop ++000087bc <[^>]*> nop ++000087c0 <[^>]*> nop ++000087c4 <[^>]*> nop ++000087c8 <[^>]*> nop ++000087cc <[^>]*> nop ++000087d0 <[^>]*> nop ++000087d4 <[^>]*> nop ++000087d8 <[^>]*> nop ++000087dc <[^>]*> nop ++000087e0 <[^>]*> nop ++000087e4 <[^>]*> nop ++000087e8 <[^>]*> nop ++000087ec <[^>]*> nop ++000087f0 <[^>]*> nop ++000087f4 <[^>]*> nop ++000087f8 <[^>]*> nop ++000087fc <[^>]*> nop ++00008800 <[^>]*> nop ++00008804 <[^>]*> nop ++00008808 <[^>]*> nop ++0000880c <[^>]*> nop ++00008810 <[^>]*> nop ++00008814 <[^>]*> nop ++00008818 <[^>]*> nop ++0000881c <[^>]*> nop ++00008820 <[^>]*> nop ++00008824 <[^>]*> nop ++00008828 <[^>]*> nop ++0000882c <[^>]*> nop ++00008830 <[^>]*> nop ++00008834 <[^>]*> nop ++00008838 <[^>]*> nop ++0000883c <[^>]*> nop ++00008840 <[^>]*> nop ++00008844 <[^>]*> nop ++00008848 <[^>]*> nop ++0000884c <[^>]*> nop ++00008850 <[^>]*> nop ++00008854 <[^>]*> nop ++00008858 <[^>]*> nop ++0000885c <[^>]*> nop ++00008860 <[^>]*> nop ++00008864 <[^>]*> nop ++00008868 <[^>]*> nop ++0000886c <[^>]*> nop ++00008870 <[^>]*> nop ++00008874 <[^>]*> nop ++00008878 <[^>]*> nop ++0000887c <[^>]*> nop ++00008880 <[^>]*> nop ++00008884 <[^>]*> nop ++00008888 <[^>]*> nop ++0000888c <[^>]*> nop ++00008890 <[^>]*> nop ++00008894 <[^>]*> nop ++00008898 <[^>]*> nop ++0000889c <[^>]*> nop ++000088a0 <[^>]*> nop ++000088a4 <[^>]*> nop ++000088a8 <[^>]*> nop ++000088ac <[^>]*> nop ++000088b0 <[^>]*> nop ++000088b4 <[^>]*> nop ++000088b8 <[^>]*> nop ++000088bc <[^>]*> nop ++000088c0 <[^>]*> nop ++000088c4 <[^>]*> nop ++000088c8 <[^>]*> nop ++000088cc <[^>]*> nop ++000088d0 <[^>]*> nop ++000088d4 <[^>]*> nop ++000088d8 <[^>]*> nop ++000088dc <[^>]*> nop ++000088e0 <[^>]*> nop ++000088e4 <[^>]*> nop ++000088e8 <[^>]*> nop ++000088ec <[^>]*> nop ++000088f0 <[^>]*> nop ++000088f4 <[^>]*> nop ++000088f8 <[^>]*> nop ++000088fc <[^>]*> nop ++00008900 <[^>]*> nop ++00008904 <[^>]*> nop ++00008908 <[^>]*> nop ++0000890c <[^>]*> nop ++00008910 <[^>]*> nop ++00008914 <[^>]*> nop ++00008918 <[^>]*> nop ++0000891c <[^>]*> nop ++00008920 <[^>]*> nop ++00008924 <[^>]*> nop ++00008928 <[^>]*> nop ++0000892c <[^>]*> nop ++00008930 <[^>]*> nop ++00008934 <[^>]*> nop ++00008938 <[^>]*> nop ++0000893c <[^>]*> nop ++00008940 <[^>]*> nop ++00008944 <[^>]*> nop ++00008948 <[^>]*> nop ++0000894c <[^>]*> nop ++00008950 <[^>]*> nop ++00008954 <[^>]*> nop ++00008958 <[^>]*> nop ++0000895c <[^>]*> nop ++00008960 <[^>]*> nop ++00008964 <[^>]*> nop ++00008968 <[^>]*> nop ++0000896c <[^>]*> nop ++00008970 <[^>]*> nop ++00008974 <[^>]*> nop ++00008978 <[^>]*> nop ++0000897c <[^>]*> nop ++00008980 <[^>]*> nop ++00008984 <[^>]*> nop ++00008988 <[^>]*> nop ++0000898c <[^>]*> nop ++00008990 <[^>]*> nop ++00008994 <[^>]*> nop ++00008998 <[^>]*> nop ++0000899c <[^>]*> nop ++000089a0 <[^>]*> nop ++000089a4 <[^>]*> nop ++000089a8 <[^>]*> nop ++000089ac <[^>]*> nop ++000089b0 <[^>]*> nop ++000089b4 <[^>]*> nop ++000089b8 <[^>]*> nop ++000089bc <[^>]*> nop ++000089c0 <[^>]*> nop ++000089c4 <[^>]*> nop ++000089c8 <[^>]*> nop ++000089cc <[^>]*> nop ++000089d0 <[^>]*> nop ++000089d4 <[^>]*> nop ++000089d8 <[^>]*> nop ++000089dc <[^>]*> nop ++000089e0 <[^>]*> nop ++000089e4 <[^>]*> nop ++000089e8 <[^>]*> nop ++000089ec <[^>]*> nop ++000089f0 <[^>]*> nop ++000089f4 <[^>]*> nop ++000089f8 <[^>]*> nop ++000089fc <[^>]*> nop ++00008a00 <[^>]*> nop ++00008a04 <[^>]*> nop ++00008a08 <[^>]*> nop ++00008a0c <[^>]*> nop ++00008a10 <[^>]*> nop ++00008a14 <[^>]*> nop ++00008a18 <[^>]*> nop ++00008a1c <[^>]*> nop ++00008a20 <[^>]*> nop ++00008a24 <[^>]*> nop ++00008a28 <[^>]*> nop ++00008a2c <[^>]*> nop ++00008a30 <[^>]*> nop ++00008a34 <[^>]*> nop ++00008a38 <[^>]*> nop ++00008a3c <[^>]*> nop ++00008a40 <[^>]*> nop ++00008a44 <[^>]*> nop ++00008a48 <[^>]*> nop ++00008a4c <[^>]*> nop ++00008a50 <[^>]*> nop ++00008a54 <[^>]*> nop ++00008a58 <[^>]*> nop ++00008a5c <[^>]*> nop ++00008a60 <[^>]*> nop ++00008a64 <[^>]*> nop ++00008a68 <[^>]*> nop ++00008a6c <[^>]*> nop ++00008a70 <[^>]*> nop ++00008a74 <[^>]*> nop ++00008a78 <[^>]*> nop ++00008a7c <[^>]*> nop ++00008a80 <[^>]*> nop ++00008a84 <[^>]*> nop ++00008a88 <[^>]*> nop ++00008a8c <[^>]*> nop ++00008a90 <[^>]*> nop ++00008a94 <[^>]*> nop ++00008a98 <[^>]*> nop ++00008a9c <[^>]*> nop ++00008aa0 <[^>]*> nop ++00008aa4 <[^>]*> nop ++00008aa8 <[^>]*> nop ++00008aac <[^>]*> nop ++00008ab0 <[^>]*> nop ++00008ab4 <[^>]*> nop ++00008ab8 <[^>]*> nop ++00008abc <[^>]*> nop ++00008ac0 <[^>]*> nop ++00008ac4 <[^>]*> nop ++00008ac8 <[^>]*> nop ++00008acc <[^>]*> nop ++00008ad0 <[^>]*> nop ++00008ad4 <[^>]*> nop ++00008ad8 <[^>]*> nop ++00008adc <[^>]*> nop ++00008ae0 <[^>]*> nop ++00008ae4 <[^>]*> nop ++00008ae8 <[^>]*> nop ++00008aec <[^>]*> nop ++00008af0 <[^>]*> nop ++00008af4 <[^>]*> nop ++00008af8 <[^>]*> nop ++00008afc <[^>]*> nop ++00008b00 <[^>]*> nop ++00008b04 <[^>]*> nop ++00008b08 <[^>]*> nop ++00008b0c <[^>]*> nop ++00008b10 <[^>]*> nop ++00008b14 <[^>]*> nop ++00008b18 <[^>]*> nop ++00008b1c <[^>]*> nop ++00008b20 <[^>]*> nop ++00008b24 <[^>]*> nop ++00008b28 <[^>]*> nop ++00008b2c <[^>]*> nop ++00008b30 <[^>]*> nop ++00008b34 <[^>]*> nop ++00008b38 <[^>]*> nop ++00008b3c <[^>]*> nop ++00008b40 <[^>]*> nop ++00008b44 <[^>]*> nop ++00008b48 <[^>]*> nop ++00008b4c <[^>]*> nop ++00008b50 <[^>]*> nop ++00008b54 <[^>]*> nop ++00008b58 <[^>]*> nop ++00008b5c <[^>]*> nop ++00008b60 <[^>]*> nop ++00008b64 <[^>]*> nop ++00008b68 <[^>]*> nop ++00008b6c <[^>]*> nop ++00008b70 <[^>]*> nop ++00008b74 <[^>]*> nop ++00008b78 <[^>]*> nop ++00008b7c <[^>]*> nop ++00008b80 <[^>]*> nop ++00008b84 <[^>]*> nop ++00008b88 <[^>]*> nop ++00008b8c <[^>]*> nop ++00008b90 <[^>]*> nop ++00008b94 <[^>]*> nop ++00008b98 <[^>]*> nop ++00008b9c <[^>]*> nop ++00008ba0 <[^>]*> nop ++00008ba4 <[^>]*> nop ++00008ba8 <[^>]*> nop ++00008bac <[^>]*> nop ++00008bb0 <[^>]*> nop ++00008bb4 <[^>]*> nop ++00008bb8 <[^>]*> nop ++00008bbc <[^>]*> nop ++00008bc0 <[^>]*> nop ++00008bc4 <[^>]*> nop ++00008bc8 <[^>]*> nop ++00008bcc <[^>]*> nop ++00008bd0 <[^>]*> nop ++00008bd4 <[^>]*> nop ++00008bd8 <[^>]*> nop ++00008bdc <[^>]*> nop ++00008be0 <[^>]*> nop ++00008be4 <[^>]*> nop ++00008be8 <[^>]*> nop ++00008bec <[^>]*> nop ++00008bf0 <[^>]*> nop ++00008bf4 <[^>]*> nop ++00008bf8 <[^>]*> nop ++00008bfc <[^>]*> nop ++00008c00 <[^>]*> nop ++00008c04 <[^>]*> nop ++00008c08 <[^>]*> nop ++00008c0c <[^>]*> nop ++00008c10 <[^>]*> nop ++00008c14 <[^>]*> nop ++00008c18 <[^>]*> nop ++00008c1c <[^>]*> nop ++00008c20 <[^>]*> nop ++00008c24 <[^>]*> nop ++00008c28 <[^>]*> nop ++00008c2c <[^>]*> nop ++00008c30 <[^>]*> nop ++00008c34 <[^>]*> nop ++00008c38 <[^>]*> nop ++00008c3c <[^>]*> nop ++00008c40 <[^>]*> nop ++00008c44 <[^>]*> nop ++00008c48 <[^>]*> nop ++00008c4c <[^>]*> nop ++00008c50 <[^>]*> nop ++00008c54 <[^>]*> nop ++00008c58 <[^>]*> nop ++00008c5c <[^>]*> nop ++00008c60 <[^>]*> nop ++00008c64 <[^>]*> nop ++00008c68 <[^>]*> nop ++00008c6c <[^>]*> nop ++00008c70 <[^>]*> nop ++00008c74 <[^>]*> nop ++00008c78 <[^>]*> nop ++00008c7c <[^>]*> nop ++00008c80 <[^>]*> nop ++00008c84 <[^>]*> nop ++00008c88 <[^>]*> nop ++00008c8c <[^>]*> nop ++00008c90 <[^>]*> nop ++00008c94 <[^>]*> nop ++00008c98 <[^>]*> nop ++00008c9c <[^>]*> nop ++00008ca0 <[^>]*> nop ++00008ca4 <[^>]*> nop ++00008ca8 <[^>]*> nop ++00008cac <[^>]*> nop ++00008cb0 <[^>]*> nop ++00008cb4 <[^>]*> nop ++00008cb8 <[^>]*> nop ++00008cbc <[^>]*> nop ++00008cc0 <[^>]*> nop ++00008cc4 <[^>]*> nop ++00008cc8 <[^>]*> nop ++00008ccc <[^>]*> nop ++00008cd0 <[^>]*> nop ++00008cd4 <[^>]*> nop ++00008cd8 <[^>]*> nop ++00008cdc <[^>]*> nop ++00008ce0 <[^>]*> nop ++00008ce4 <[^>]*> nop ++00008ce8 <[^>]*> nop ++00008cec <[^>]*> nop ++00008cf0 <[^>]*> nop ++00008cf4 <[^>]*> nop ++00008cf8 <[^>]*> nop ++00008cfc <[^>]*> nop ++00008d00 <[^>]*> nop ++00008d04 <[^>]*> nop ++00008d08 <[^>]*> nop ++00008d0c <[^>]*> nop ++00008d10 <[^>]*> nop ++00008d14 <[^>]*> nop ++00008d18 <[^>]*> nop ++00008d1c <[^>]*> nop ++00008d20 <[^>]*> nop ++00008d24 <[^>]*> nop ++00008d28 <[^>]*> nop ++00008d2c <[^>]*> nop ++00008d30 <[^>]*> nop ++00008d34 <[^>]*> nop ++00008d38 <[^>]*> nop ++00008d3c <[^>]*> nop ++00008d40 <[^>]*> nop ++00008d44 <[^>]*> nop ++00008d48 <[^>]*> nop ++00008d4c <[^>]*> nop ++00008d50 <[^>]*> nop ++00008d54 <[^>]*> nop ++00008d58 <[^>]*> nop ++00008d5c <[^>]*> nop ++00008d60 <[^>]*> nop ++00008d64 <[^>]*> nop ++00008d68 <[^>]*> nop ++00008d6c <[^>]*> nop ++00008d70 <[^>]*> nop ++00008d74 <[^>]*> nop ++00008d78 <[^>]*> nop ++00008d7c <[^>]*> nop ++00008d80 <[^>]*> nop ++00008d84 <[^>]*> nop ++00008d88 <[^>]*> nop ++00008d8c <[^>]*> nop ++00008d90 <[^>]*> nop ++00008d94 <[^>]*> nop ++00008d98 <[^>]*> nop ++00008d9c <[^>]*> nop ++00008da0 <[^>]*> nop ++00008da4 <[^>]*> nop ++00008da8 <[^>]*> nop ++00008dac <[^>]*> nop ++00008db0 <[^>]*> nop ++00008db4 <[^>]*> nop ++00008db8 <[^>]*> nop ++00008dbc <[^>]*> nop ++00008dc0 <[^>]*> nop ++00008dc4 <[^>]*> nop ++00008dc8 <[^>]*> nop ++00008dcc <[^>]*> nop ++00008dd0 <[^>]*> nop ++00008dd4 <[^>]*> nop ++00008dd8 <[^>]*> nop ++00008ddc <[^>]*> nop ++00008de0 <[^>]*> nop ++00008de4 <[^>]*> nop ++00008de8 <[^>]*> nop ++00008dec <[^>]*> nop ++00008df0 <[^>]*> nop ++00008df4 <[^>]*> nop ++00008df8 <[^>]*> nop ++00008dfc <[^>]*> nop ++00008e00 <[^>]*> nop ++00008e04 <[^>]*> nop ++00008e08 <[^>]*> nop ++00008e0c <[^>]*> nop ++00008e10 <[^>]*> nop ++00008e14 <[^>]*> nop ++00008e18 <[^>]*> nop ++00008e1c <[^>]*> nop ++00008e20 <[^>]*> nop ++00008e24 <[^>]*> nop ++00008e28 <[^>]*> nop ++00008e2c <[^>]*> nop ++00008e30 <[^>]*> nop ++00008e34 <[^>]*> nop ++00008e38 <[^>]*> nop ++00008e3c <[^>]*> nop ++00008e40 <[^>]*> nop ++00008e44 <[^>]*> nop ++00008e48 <[^>]*> nop ++00008e4c <[^>]*> nop ++00008e50 <[^>]*> nop ++00008e54 <[^>]*> nop ++00008e58 <[^>]*> nop ++00008e5c <[^>]*> nop ++00008e60 <[^>]*> nop ++00008e64 <[^>]*> nop ++00008e68 <[^>]*> nop ++00008e6c <[^>]*> nop ++00008e70 <[^>]*> nop ++00008e74 <[^>]*> nop ++00008e78 <[^>]*> nop ++00008e7c <[^>]*> nop ++00008e80 <[^>]*> nop ++00008e84 <[^>]*> nop ++00008e88 <[^>]*> nop ++00008e8c <[^>]*> nop ++00008e90 <[^>]*> nop ++00008e94 <[^>]*> nop ++00008e98 <[^>]*> nop ++00008e9c <[^>]*> nop ++00008ea0 <[^>]*> nop ++00008ea4 <[^>]*> nop ++00008ea8 <[^>]*> nop ++00008eac <[^>]*> nop ++00008eb0 <[^>]*> nop ++00008eb4 <[^>]*> nop ++00008eb8 <[^>]*> nop ++00008ebc <[^>]*> nop ++00008ec0 <[^>]*> nop ++00008ec4 <[^>]*> nop ++00008ec8 <[^>]*> nop ++00008ecc <[^>]*> nop ++00008ed0 <[^>]*> nop ++00008ed4 <[^>]*> nop ++00008ed8 <[^>]*> nop ++00008edc <[^>]*> nop ++00008ee0 <[^>]*> nop ++00008ee4 <[^>]*> nop ++00008ee8 <[^>]*> nop ++00008eec <[^>]*> nop ++00008ef0 <[^>]*> nop ++00008ef4 <[^>]*> nop ++00008ef8 <[^>]*> nop ++00008efc <[^>]*> nop ++00008f00 <[^>]*> nop ++00008f04 <[^>]*> nop ++00008f08 <[^>]*> nop ++00008f0c <[^>]*> nop ++00008f10 <[^>]*> nop ++00008f14 <[^>]*> nop ++00008f18 <[^>]*> nop ++00008f1c <[^>]*> nop ++00008f20 <[^>]*> nop ++00008f24 <[^>]*> nop ++00008f28 <[^>]*> nop ++00008f2c <[^>]*> nop ++00008f30 <[^>]*> nop ++00008f34 <[^>]*> nop ++00008f38 <[^>]*> nop ++00008f3c <[^>]*> nop ++00008f40 <[^>]*> nop ++00008f44 <[^>]*> nop ++00008f48 <[^>]*> nop ++00008f4c <[^>]*> nop ++00008f50 <[^>]*> nop ++00008f54 <[^>]*> nop ++00008f58 <[^>]*> nop ++00008f5c <[^>]*> nop ++00008f60 <[^>]*> nop ++00008f64 <[^>]*> nop ++00008f68 <[^>]*> nop ++00008f6c <[^>]*> nop ++00008f70 <[^>]*> nop ++00008f74 <[^>]*> nop ++00008f78 <[^>]*> nop ++00008f7c <[^>]*> nop ++00008f80 <[^>]*> nop ++00008f84 <[^>]*> nop ++00008f88 <[^>]*> nop ++00008f8c <[^>]*> nop ++00008f90 <[^>]*> nop ++00008f94 <[^>]*> nop ++00008f98 <[^>]*> nop ++00008f9c <[^>]*> nop ++00008fa0 <[^>]*> nop ++00008fa4 <[^>]*> nop ++00008fa8 <[^>]*> nop ++00008fac <[^>]*> nop ++00008fb0 <[^>]*> nop ++00008fb4 <[^>]*> nop ++00008fb8 <[^>]*> nop ++00008fbc <[^>]*> nop ++00008fc0 <[^>]*> nop ++00008fc4 <[^>]*> nop ++00008fc8 <[^>]*> nop ++00008fcc <[^>]*> nop ++00008fd0 <[^>]*> nop ++00008fd4 <[^>]*> nop ++00008fd8 <[^>]*> nop ++00008fdc <[^>]*> nop ++00008fe0 <[^>]*> nop ++00008fe4 <[^>]*> nop ++00008fe8 <[^>]*> nop ++00008fec <[^>]*> nop ++00008ff0 <[^>]*> nop ++00008ff4 <[^>]*> nop ++00008ff8 <[^>]*> nop ++00008ffc <[^>]*> nop ++00009000 <[^>]*> nop ++00009004 <[^>]*> nop ++00009008 <[^>]*> nop ++0000900c <[^>]*> nop ++00009010 <[^>]*> nop ++00009014 <[^>]*> nop ++00009018 <[^>]*> nop ++0000901c <[^>]*> nop ++00009020 <[^>]*> nop ++00009024 <[^>]*> nop ++00009028 <[^>]*> nop ++0000902c <[^>]*> nop ++00009030 <[^>]*> nop ++00009034 <[^>]*> nop ++00009038 <[^>]*> nop ++0000903c <[^>]*> nop ++00009040 <[^>]*> nop ++00009044 <[^>]*> nop ++00009048 <[^>]*> nop ++0000904c <[^>]*> nop ++00009050 <[^>]*> nop ++00009054 <[^>]*> nop ++00009058 <[^>]*> nop ++0000905c <[^>]*> nop ++00009060 <[^>]*> nop ++00009064 <[^>]*> nop ++00009068 <[^>]*> nop ++0000906c <[^>]*> nop ++00009070 <[^>]*> nop ++00009074 <[^>]*> nop ++00009078 <[^>]*> nop ++0000907c <[^>]*> nop ++00009080 <[^>]*> nop ++00009084 <[^>]*> nop ++00009088 <[^>]*> nop ++0000908c <[^>]*> nop ++00009090 <[^>]*> nop ++00009094 <[^>]*> nop ++00009098 <[^>]*> nop ++0000909c <[^>]*> nop ++000090a0 <[^>]*> nop ++000090a4 <[^>]*> nop ++000090a8 <[^>]*> nop ++000090ac <[^>]*> nop ++000090b0 <[^>]*> nop ++000090b4 <[^>]*> nop ++000090b8 <[^>]*> nop ++000090bc <[^>]*> nop ++000090c0 <[^>]*> nop ++000090c4 <[^>]*> nop ++000090c8 <[^>]*> nop ++000090cc <[^>]*> nop ++000090d0 <[^>]*> nop ++000090d4 <[^>]*> nop ++000090d8 <[^>]*> nop ++000090dc <[^>]*> nop ++000090e0 <[^>]*> nop ++000090e4 <[^>]*> nop ++000090e8 <[^>]*> nop ++000090ec <[^>]*> nop ++000090f0 <[^>]*> nop ++000090f4 <[^>]*> nop ++000090f8 <[^>]*> nop ++000090fc <[^>]*> nop ++00009100 <[^>]*> nop ++00009104 <[^>]*> nop ++00009108 <[^>]*> nop ++0000910c <[^>]*> nop ++00009110 <[^>]*> nop ++00009114 <[^>]*> nop ++00009118 <[^>]*> nop ++0000911c <[^>]*> nop ++00009120 <[^>]*> nop ++00009124 <[^>]*> nop ++00009128 <[^>]*> nop ++0000912c <[^>]*> nop ++00009130 <[^>]*> nop ++00009134 <[^>]*> nop ++00009138 <[^>]*> nop ++0000913c <[^>]*> nop ++00009140 <[^>]*> nop ++00009144 <[^>]*> nop ++00009148 <[^>]*> nop ++0000914c <[^>]*> nop ++00009150 <[^>]*> nop ++00009154 <[^>]*> nop ++00009158 <[^>]*> nop ++0000915c <[^>]*> nop ++00009160 <[^>]*> nop ++00009164 <[^>]*> nop ++00009168 <[^>]*> nop ++0000916c <[^>]*> nop ++00009170 <[^>]*> nop ++00009174 <[^>]*> nop ++00009178 <[^>]*> nop ++0000917c <[^>]*> nop ++00009180 <[^>]*> nop ++00009184 <[^>]*> nop ++00009188 <[^>]*> nop ++0000918c <[^>]*> nop ++00009190 <[^>]*> nop ++00009194 <[^>]*> nop ++00009198 <[^>]*> nop ++0000919c <[^>]*> nop ++000091a0 <[^>]*> nop ++000091a4 <[^>]*> nop ++000091a8 <[^>]*> nop ++000091ac <[^>]*> nop ++000091b0 <[^>]*> nop ++000091b4 <[^>]*> nop ++000091b8 <[^>]*> nop ++000091bc <[^>]*> nop ++000091c0 <[^>]*> nop ++000091c4 <[^>]*> nop ++000091c8 <[^>]*> nop ++000091cc <[^>]*> nop ++000091d0 <[^>]*> nop ++000091d4 <[^>]*> nop ++000091d8 <[^>]*> nop ++000091dc <[^>]*> nop ++000091e0 <[^>]*> nop ++000091e4 <[^>]*> nop ++000091e8 <[^>]*> nop ++000091ec <[^>]*> nop ++000091f0 <[^>]*> nop ++000091f4 <[^>]*> nop ++000091f8 <[^>]*> nop ++000091fc <[^>]*> nop ++00009200 <[^>]*> nop ++00009204 <[^>]*> nop ++00009208 <[^>]*> nop ++0000920c <[^>]*> nop ++00009210 <[^>]*> nop ++00009214 <[^>]*> nop ++00009218 <[^>]*> nop ++0000921c <[^>]*> nop ++00009220 <[^>]*> nop ++00009224 <[^>]*> nop ++00009228 <[^>]*> nop ++0000922c <[^>]*> nop ++00009230 <[^>]*> nop ++00009234 <[^>]*> nop ++00009238 <[^>]*> nop ++0000923c <[^>]*> nop ++00009240 <[^>]*> nop ++00009244 <[^>]*> nop ++00009248 <[^>]*> nop ++0000924c <[^>]*> nop ++00009250 <[^>]*> nop ++00009254 <[^>]*> nop ++00009258 <[^>]*> nop ++0000925c <[^>]*> nop ++00009260 <[^>]*> nop ++00009264 <[^>]*> nop ++00009268 <[^>]*> nop ++0000926c <[^>]*> nop ++00009270 <[^>]*> nop ++00009274 <[^>]*> nop ++00009278 <[^>]*> nop ++0000927c <[^>]*> nop ++00009280 <[^>]*> nop ++00009284 <[^>]*> nop ++00009288 <[^>]*> nop ++0000928c <[^>]*> nop ++00009290 <[^>]*> nop ++00009294 <[^>]*> nop ++00009298 <[^>]*> nop ++0000929c <[^>]*> nop ++000092a0 <[^>]*> nop ++000092a4 <[^>]*> nop ++000092a8 <[^>]*> nop ++000092ac <[^>]*> nop ++000092b0 <[^>]*> nop ++000092b4 <[^>]*> nop ++000092b8 <[^>]*> nop ++000092bc <[^>]*> nop ++000092c0 <[^>]*> nop ++000092c4 <[^>]*> nop ++000092c8 <[^>]*> nop ++000092cc <[^>]*> nop ++000092d0 <[^>]*> nop ++000092d4 <[^>]*> nop ++000092d8 <[^>]*> nop ++000092dc <[^>]*> nop ++000092e0 <[^>]*> nop ++000092e4 <[^>]*> nop ++000092e8 <[^>]*> nop ++000092ec <[^>]*> nop ++000092f0 <[^>]*> nop ++000092f4 <[^>]*> nop ++000092f8 <[^>]*> nop ++000092fc <[^>]*> nop ++00009300 <[^>]*> nop ++00009304 <[^>]*> nop ++00009308 <[^>]*> nop ++0000930c <[^>]*> nop ++00009310 <[^>]*> nop ++00009314 <[^>]*> nop ++00009318 <[^>]*> nop ++0000931c <[^>]*> nop ++00009320 <[^>]*> nop ++00009324 <[^>]*> nop ++00009328 <[^>]*> nop ++0000932c <[^>]*> nop ++00009330 <[^>]*> nop ++00009334 <[^>]*> nop ++00009338 <[^>]*> nop ++0000933c <[^>]*> nop ++00009340 <[^>]*> nop ++00009344 <[^>]*> nop ++00009348 <[^>]*> nop ++0000934c <[^>]*> nop ++00009350 <[^>]*> nop ++00009354 <[^>]*> nop ++00009358 <[^>]*> nop ++0000935c <[^>]*> nop ++00009360 <[^>]*> nop ++00009364 <[^>]*> nop ++00009368 <[^>]*> nop ++0000936c <[^>]*> nop ++00009370 <[^>]*> nop ++00009374 <[^>]*> nop ++00009378 <[^>]*> nop ++0000937c <[^>]*> nop ++00009380 <[^>]*> nop ++00009384 <[^>]*> nop ++00009388 <[^>]*> nop ++0000938c <[^>]*> nop ++00009390 <[^>]*> nop ++00009394 <[^>]*> nop ++00009398 <[^>]*> nop ++0000939c <[^>]*> nop ++000093a0 <[^>]*> nop ++000093a4 <[^>]*> nop ++000093a8 <[^>]*> nop ++000093ac <[^>]*> nop ++000093b0 <[^>]*> nop ++000093b4 <[^>]*> nop ++000093b8 <[^>]*> nop ++000093bc <[^>]*> nop ++000093c0 <[^>]*> nop ++000093c4 <[^>]*> nop ++000093c8 <[^>]*> nop ++000093cc <[^>]*> nop ++000093d0 <[^>]*> nop ++000093d4 <[^>]*> nop ++000093d8 <[^>]*> nop ++000093dc <[^>]*> nop ++000093e0 <[^>]*> nop ++000093e4 <[^>]*> nop ++000093e8 <[^>]*> nop ++000093ec <[^>]*> nop ++000093f0 <[^>]*> nop ++000093f4 <[^>]*> nop ++000093f8 <[^>]*> nop ++000093fc <[^>]*> nop ++00009400 <[^>]*> nop ++00009404 <[^>]*> nop ++00009408 <[^>]*> nop ++0000940c <[^>]*> nop ++00009410 <[^>]*> nop ++00009414 <[^>]*> nop ++00009418 <[^>]*> nop ++0000941c <[^>]*> nop ++00009420 <[^>]*> nop ++00009424 <[^>]*> nop ++00009428 <[^>]*> nop ++0000942c <[^>]*> nop ++00009430 <[^>]*> nop ++00009434 <[^>]*> nop ++00009438 <[^>]*> nop ++0000943c <[^>]*> nop ++00009440 <[^>]*> nop ++00009444 <[^>]*> nop ++00009448 <[^>]*> nop ++0000944c <[^>]*> nop ++00009450 <[^>]*> nop ++00009454 <[^>]*> nop ++00009458 <[^>]*> nop ++0000945c <[^>]*> nop ++00009460 <[^>]*> nop ++00009464 <[^>]*> nop ++00009468 <[^>]*> nop ++0000946c <[^>]*> nop ++00009470 <[^>]*> nop ++00009474 <[^>]*> nop ++00009478 <[^>]*> nop ++0000947c <[^>]*> nop ++00009480 <[^>]*> nop ++00009484 <[^>]*> nop ++00009488 <[^>]*> nop ++0000948c <[^>]*> nop ++00009490 <[^>]*> nop ++00009494 <[^>]*> nop ++00009498 <[^>]*> nop ++0000949c <[^>]*> nop ++000094a0 <[^>]*> nop ++000094a4 <[^>]*> nop ++000094a8 <[^>]*> nop ++000094ac <[^>]*> nop ++000094b0 <[^>]*> nop ++000094b4 <[^>]*> nop ++000094b8 <[^>]*> nop ++000094bc <[^>]*> nop ++000094c0 <[^>]*> nop ++000094c4 <[^>]*> nop ++000094c8 <[^>]*> nop ++000094cc <[^>]*> nop ++000094d0 <[^>]*> nop ++000094d4 <[^>]*> nop ++000094d8 <[^>]*> nop ++000094dc <[^>]*> nop ++000094e0 <[^>]*> nop ++000094e4 <[^>]*> nop ++000094e8 <[^>]*> nop ++000094ec <[^>]*> nop ++000094f0 <[^>]*> nop ++000094f4 <[^>]*> nop ++000094f8 <[^>]*> nop ++000094fc <[^>]*> nop ++00009500 <[^>]*> nop ++00009504 <[^>]*> nop ++00009508 <[^>]*> nop ++0000950c <[^>]*> nop ++00009510 <[^>]*> nop ++00009514 <[^>]*> nop ++00009518 <[^>]*> nop ++0000951c <[^>]*> nop ++00009520 <[^>]*> nop ++00009524 <[^>]*> nop ++00009528 <[^>]*> nop ++0000952c <[^>]*> nop ++00009530 <[^>]*> nop ++00009534 <[^>]*> nop ++00009538 <[^>]*> nop ++0000953c <[^>]*> nop ++00009540 <[^>]*> nop ++00009544 <[^>]*> nop ++00009548 <[^>]*> nop ++0000954c <[^>]*> nop ++00009550 <[^>]*> nop ++00009554 <[^>]*> nop ++00009558 <[^>]*> nop ++0000955c <[^>]*> nop ++00009560 <[^>]*> nop ++00009564 <[^>]*> nop ++00009568 <[^>]*> nop ++0000956c <[^>]*> nop ++00009570 <[^>]*> nop ++00009574 <[^>]*> nop ++00009578 <[^>]*> nop ++0000957c <[^>]*> nop ++00009580 <[^>]*> nop ++00009584 <[^>]*> nop ++00009588 <[^>]*> nop ++0000958c <[^>]*> nop ++00009590 <[^>]*> nop ++00009594 <[^>]*> nop ++00009598 <[^>]*> nop ++0000959c <[^>]*> nop ++000095a0 <[^>]*> nop ++000095a4 <[^>]*> nop ++000095a8 <[^>]*> nop ++000095ac <[^>]*> nop ++000095b0 <[^>]*> nop ++000095b4 <[^>]*> nop ++000095b8 <[^>]*> nop ++000095bc <[^>]*> nop ++000095c0 <[^>]*> nop ++000095c4 <[^>]*> nop ++000095c8 <[^>]*> nop ++000095cc <[^>]*> nop ++000095d0 <[^>]*> nop ++000095d4 <[^>]*> nop ++000095d8 <[^>]*> nop ++000095dc <[^>]*> nop ++000095e0 <[^>]*> nop ++000095e4 <[^>]*> nop ++000095e8 <[^>]*> nop ++000095ec <[^>]*> nop ++000095f0 <[^>]*> nop ++000095f4 <[^>]*> nop ++000095f8 <[^>]*> nop ++000095fc <[^>]*> nop ++00009600 <[^>]*> nop ++00009604 <[^>]*> nop ++00009608 <[^>]*> nop ++0000960c <[^>]*> nop ++00009610 <[^>]*> nop ++00009614 <[^>]*> nop ++00009618 <[^>]*> nop ++0000961c <[^>]*> nop ++00009620 <[^>]*> nop ++00009624 <[^>]*> nop ++00009628 <[^>]*> nop ++0000962c <[^>]*> nop ++00009630 <[^>]*> nop ++00009634 <[^>]*> nop ++00009638 <[^>]*> nop ++0000963c <[^>]*> nop ++00009640 <[^>]*> nop ++00009644 <[^>]*> nop ++00009648 <[^>]*> nop ++0000964c <[^>]*> nop ++00009650 <[^>]*> nop ++00009654 <[^>]*> nop ++00009658 <[^>]*> nop ++0000965c <[^>]*> nop ++00009660 <[^>]*> nop ++00009664 <[^>]*> nop ++00009668 <[^>]*> nop ++0000966c <[^>]*> nop ++00009670 <[^>]*> nop ++00009674 <[^>]*> nop ++00009678 <[^>]*> nop ++0000967c <[^>]*> nop ++00009680 <[^>]*> nop ++00009684 <[^>]*> nop ++00009688 <[^>]*> nop ++0000968c <[^>]*> nop ++00009690 <[^>]*> nop ++00009694 <[^>]*> nop ++00009698 <[^>]*> nop ++0000969c <[^>]*> nop ++000096a0 <[^>]*> nop ++000096a4 <[^>]*> nop ++000096a8 <[^>]*> nop ++000096ac <[^>]*> nop ++000096b0 <[^>]*> nop ++000096b4 <[^>]*> nop ++000096b8 <[^>]*> nop ++000096bc <[^>]*> nop ++000096c0 <[^>]*> nop ++000096c4 <[^>]*> nop ++000096c8 <[^>]*> nop ++000096cc <[^>]*> nop ++000096d0 <[^>]*> nop ++000096d4 <[^>]*> nop ++000096d8 <[^>]*> nop ++000096dc <[^>]*> nop ++000096e0 <[^>]*> nop ++000096e4 <[^>]*> nop ++000096e8 <[^>]*> nop ++000096ec <[^>]*> nop ++000096f0 <[^>]*> nop ++000096f4 <[^>]*> nop ++000096f8 <[^>]*> nop ++000096fc <[^>]*> nop ++00009700 <[^>]*> nop ++00009704 <[^>]*> nop ++00009708 <[^>]*> nop ++0000970c <[^>]*> nop ++00009710 <[^>]*> nop ++00009714 <[^>]*> nop ++00009718 <[^>]*> nop ++0000971c <[^>]*> nop ++00009720 <[^>]*> nop ++00009724 <[^>]*> nop ++00009728 <[^>]*> nop ++0000972c <[^>]*> nop ++00009730 <[^>]*> nop ++00009734 <[^>]*> nop ++00009738 <[^>]*> nop ++0000973c <[^>]*> nop ++00009740 <[^>]*> nop ++00009744 <[^>]*> nop ++00009748 <[^>]*> nop ++0000974c <[^>]*> nop ++00009750 <[^>]*> nop ++00009754 <[^>]*> nop ++00009758 <[^>]*> nop ++0000975c <[^>]*> nop ++00009760 <[^>]*> nop ++00009764 <[^>]*> nop ++00009768 <[^>]*> nop ++0000976c <[^>]*> nop ++00009770 <[^>]*> nop ++00009774 <[^>]*> nop ++00009778 <[^>]*> nop ++0000977c <[^>]*> nop ++00009780 <[^>]*> nop ++00009784 <[^>]*> nop ++00009788 <[^>]*> nop ++0000978c <[^>]*> nop ++00009790 <[^>]*> nop ++00009794 <[^>]*> nop ++00009798 <[^>]*> nop ++0000979c <[^>]*> nop ++000097a0 <[^>]*> nop ++000097a4 <[^>]*> nop ++000097a8 <[^>]*> nop ++000097ac <[^>]*> nop ++000097b0 <[^>]*> nop ++000097b4 <[^>]*> nop ++000097b8 <[^>]*> nop ++000097bc <[^>]*> nop ++000097c0 <[^>]*> nop ++000097c4 <[^>]*> nop ++000097c8 <[^>]*> nop ++000097cc <[^>]*> nop ++000097d0 <[^>]*> nop ++000097d4 <[^>]*> nop ++000097d8 <[^>]*> nop ++000097dc <[^>]*> nop ++000097e0 <[^>]*> nop ++000097e4 <[^>]*> nop ++000097e8 <[^>]*> nop ++000097ec <[^>]*> nop ++000097f0 <[^>]*> nop ++000097f4 <[^>]*> nop ++000097f8 <[^>]*> nop ++000097fc <[^>]*> nop ++00009800 <[^>]*> nop ++00009804 <[^>]*> nop ++00009808 <[^>]*> nop ++0000980c <[^>]*> nop ++00009810 <[^>]*> nop ++00009814 <[^>]*> nop ++00009818 <[^>]*> nop ++0000981c <[^>]*> nop ++00009820 <[^>]*> nop ++00009824 <[^>]*> nop ++00009828 <[^>]*> nop ++0000982c <[^>]*> nop ++00009830 <[^>]*> nop ++00009834 <[^>]*> nop ++00009838 <[^>]*> nop ++0000983c <[^>]*> nop ++00009840 <[^>]*> nop ++00009844 <[^>]*> nop ++00009848 <[^>]*> nop ++0000984c <[^>]*> nop ++00009850 <[^>]*> nop ++00009854 <[^>]*> nop ++00009858 <[^>]*> nop ++0000985c <[^>]*> nop ++00009860 <[^>]*> nop ++00009864 <[^>]*> nop ++00009868 <[^>]*> nop ++0000986c <[^>]*> nop ++00009870 <[^>]*> nop ++00009874 <[^>]*> nop ++00009878 <[^>]*> nop ++0000987c <[^>]*> nop ++00009880 <[^>]*> nop ++00009884 <[^>]*> nop ++00009888 <[^>]*> nop ++0000988c <[^>]*> nop ++00009890 <[^>]*> nop ++00009894 <[^>]*> nop ++00009898 <[^>]*> nop ++0000989c <[^>]*> nop ++000098a0 <[^>]*> nop ++000098a4 <[^>]*> nop ++000098a8 <[^>]*> nop ++000098ac <[^>]*> nop ++000098b0 <[^>]*> nop ++000098b4 <[^>]*> nop ++000098b8 <[^>]*> nop ++000098bc <[^>]*> nop ++000098c0 <[^>]*> nop ++000098c4 <[^>]*> nop ++000098c8 <[^>]*> nop ++000098cc <[^>]*> nop ++000098d0 <[^>]*> nop ++000098d4 <[^>]*> nop ++000098d8 <[^>]*> nop ++000098dc <[^>]*> nop ++000098e0 <[^>]*> nop ++000098e4 <[^>]*> nop ++000098e8 <[^>]*> nop ++000098ec <[^>]*> nop ++000098f0 <[^>]*> nop ++000098f4 <[^>]*> nop ++000098f8 <[^>]*> nop ++000098fc <[^>]*> nop ++00009900 <[^>]*> nop ++00009904 <[^>]*> nop ++00009908 <[^>]*> nop ++0000990c <[^>]*> nop ++00009910 <[^>]*> nop ++00009914 <[^>]*> nop ++00009918 <[^>]*> nop ++0000991c <[^>]*> nop ++00009920 <[^>]*> nop ++00009924 <[^>]*> nop ++00009928 <[^>]*> nop ++0000992c <[^>]*> nop ++00009930 <[^>]*> nop ++00009934 <[^>]*> nop ++00009938 <[^>]*> nop ++0000993c <[^>]*> nop ++00009940 <[^>]*> nop ++00009944 <[^>]*> nop ++00009948 <[^>]*> nop ++0000994c <[^>]*> nop ++00009950 <[^>]*> nop ++00009954 <[^>]*> nop ++00009958 <[^>]*> nop ++0000995c <[^>]*> nop ++00009960 <[^>]*> nop ++00009964 <[^>]*> nop ++00009968 <[^>]*> nop ++0000996c <[^>]*> nop ++00009970 <[^>]*> nop ++00009974 <[^>]*> nop ++00009978 <[^>]*> nop ++0000997c <[^>]*> nop ++00009980 <[^>]*> nop ++00009984 <[^>]*> nop ++00009988 <[^>]*> nop ++0000998c <[^>]*> nop ++00009990 <[^>]*> nop ++00009994 <[^>]*> nop ++00009998 <[^>]*> nop ++0000999c <[^>]*> nop ++000099a0 <[^>]*> nop ++000099a4 <[^>]*> nop ++000099a8 <[^>]*> nop ++000099ac <[^>]*> nop ++000099b0 <[^>]*> nop ++000099b4 <[^>]*> nop ++000099b8 <[^>]*> nop ++000099bc <[^>]*> nop ++000099c0 <[^>]*> nop ++000099c4 <[^>]*> nop ++000099c8 <[^>]*> nop ++000099cc <[^>]*> nop ++000099d0 <[^>]*> nop ++000099d4 <[^>]*> nop ++000099d8 <[^>]*> nop ++000099dc <[^>]*> nop ++000099e0 <[^>]*> nop ++000099e4 <[^>]*> nop ++000099e8 <[^>]*> nop ++000099ec <[^>]*> nop ++000099f0 <[^>]*> nop ++000099f4 <[^>]*> nop ++000099f8 <[^>]*> nop ++000099fc <[^>]*> nop ++00009a00 <[^>]*> nop ++00009a04 <[^>]*> nop ++00009a08 <[^>]*> nop ++00009a0c <[^>]*> nop ++00009a10 <[^>]*> nop ++00009a14 <[^>]*> nop ++00009a18 <[^>]*> nop ++00009a1c <[^>]*> nop ++00009a20 <[^>]*> nop ++00009a24 <[^>]*> nop ++00009a28 <[^>]*> nop ++00009a2c <[^>]*> nop ++00009a30 <[^>]*> nop ++00009a34 <[^>]*> nop ++00009a38 <[^>]*> nop ++00009a3c <[^>]*> nop ++00009a40 <[^>]*> nop ++00009a44 <[^>]*> nop ++00009a48 <[^>]*> nop ++00009a4c <[^>]*> nop ++00009a50 <[^>]*> nop ++00009a54 <[^>]*> nop ++00009a58 <[^>]*> nop ++00009a5c <[^>]*> nop ++00009a60 <[^>]*> nop ++00009a64 <[^>]*> nop ++00009a68 <[^>]*> nop ++00009a6c <[^>]*> nop ++00009a70 <[^>]*> nop ++00009a74 <[^>]*> nop ++00009a78 <[^>]*> nop ++00009a7c <[^>]*> nop ++00009a80 <[^>]*> nop ++00009a84 <[^>]*> nop ++00009a88 <[^>]*> nop ++00009a8c <[^>]*> nop ++00009a90 <[^>]*> nop ++00009a94 <[^>]*> nop ++00009a98 <[^>]*> nop ++00009a9c <[^>]*> nop ++00009aa0 <[^>]*> nop ++00009aa4 <[^>]*> nop ++00009aa8 <[^>]*> nop ++00009aac <[^>]*> nop ++00009ab0 <[^>]*> nop ++00009ab4 <[^>]*> nop ++00009ab8 <[^>]*> nop ++00009abc <[^>]*> nop ++00009ac0 <[^>]*> nop ++00009ac4 <[^>]*> nop ++00009ac8 <[^>]*> nop ++00009acc <[^>]*> nop ++00009ad0 <[^>]*> nop ++00009ad4 <[^>]*> nop ++00009ad8 <[^>]*> nop ++00009adc <[^>]*> nop ++00009ae0 <[^>]*> nop ++00009ae4 <[^>]*> nop ++00009ae8 <[^>]*> nop ++00009aec <[^>]*> nop ++00009af0 <[^>]*> nop ++00009af4 <[^>]*> nop ++00009af8 <[^>]*> nop ++00009afc <[^>]*> nop ++00009b00 <[^>]*> nop ++00009b04 <[^>]*> nop ++00009b08 <[^>]*> nop ++00009b0c <[^>]*> nop ++00009b10 <[^>]*> nop ++00009b14 <[^>]*> nop ++00009b18 <[^>]*> nop ++00009b1c <[^>]*> nop ++00009b20 <[^>]*> nop ++00009b24 <[^>]*> nop ++00009b28 <[^>]*> nop ++00009b2c <[^>]*> nop ++00009b30 <[^>]*> nop ++00009b34 <[^>]*> nop ++00009b38 <[^>]*> nop ++00009b3c <[^>]*> nop ++00009b40 <[^>]*> nop ++00009b44 <[^>]*> nop ++00009b48 <[^>]*> nop ++00009b4c <[^>]*> nop ++00009b50 <[^>]*> nop ++00009b54 <[^>]*> nop ++00009b58 <[^>]*> nop ++00009b5c <[^>]*> nop ++00009b60 <[^>]*> nop ++00009b64 <[^>]*> nop ++00009b68 <[^>]*> nop ++00009b6c <[^>]*> nop ++00009b70 <[^>]*> nop ++00009b74 <[^>]*> nop ++00009b78 <[^>]*> nop ++00009b7c <[^>]*> nop ++00009b80 <[^>]*> nop ++00009b84 <[^>]*> nop ++00009b88 <[^>]*> nop ++00009b8c <[^>]*> nop ++00009b90 <[^>]*> nop ++00009b94 <[^>]*> nop ++00009b98 <[^>]*> nop ++00009b9c <[^>]*> nop ++00009ba0 <[^>]*> nop ++00009ba4 <[^>]*> nop ++00009ba8 <[^>]*> nop ++00009bac <[^>]*> nop ++00009bb0 <[^>]*> nop ++00009bb4 <[^>]*> nop ++00009bb8 <[^>]*> nop ++00009bbc <[^>]*> nop ++00009bc0 <[^>]*> nop ++00009bc4 <[^>]*> nop ++00009bc8 <[^>]*> nop ++00009bcc <[^>]*> nop ++00009bd0 <[^>]*> nop ++00009bd4 <[^>]*> nop ++00009bd8 <[^>]*> nop ++00009bdc <[^>]*> nop ++00009be0 <[^>]*> nop ++00009be4 <[^>]*> nop ++00009be8 <[^>]*> nop ++00009bec <[^>]*> nop ++00009bf0 <[^>]*> nop ++00009bf4 <[^>]*> nop ++00009bf8 <[^>]*> nop ++00009bfc <[^>]*> nop ++00009c00 <[^>]*> nop ++00009c04 <[^>]*> nop ++00009c08 <[^>]*> nop ++00009c0c <[^>]*> nop ++00009c10 <[^>]*> nop ++00009c14 <[^>]*> nop ++00009c18 <[^>]*> nop ++00009c1c <[^>]*> nop ++00009c20 <[^>]*> nop ++00009c24 <[^>]*> nop ++00009c28 <[^>]*> nop ++00009c2c <[^>]*> nop ++00009c30 <[^>]*> nop ++00009c34 <[^>]*> nop ++00009c38 <[^>]*> nop ++00009c3c <[^>]*> nop ++00009c40 <[^>]*> nop ++00009c44 <[^>]*> nop ++00009c48 <[^>]*> nop ++00009c4c <[^>]*> nop ++00009c50 <[^>]*> nop ++00009c54 <[^>]*> nop ++00009c58 <[^>]*> nop ++00009c5c <[^>]*> nop ++00009c60 <[^>]*> nop ++00009c64 <[^>]*> nop ++00009c68 <[^>]*> nop ++00009c6c <[^>]*> nop ++00009c70 <[^>]*> nop ++00009c74 <[^>]*> nop ++00009c78 <[^>]*> nop ++00009c7c <[^>]*> nop ++00009c80 <[^>]*> nop ++00009c84 <[^>]*> nop ++00009c88 <[^>]*> nop ++00009c8c <[^>]*> nop ++00009c90 <[^>]*> nop ++00009c94 <[^>]*> nop ++00009c98 <[^>]*> nop ++00009c9c <[^>]*> nop ++00009ca0 <[^>]*> nop ++00009ca4 <[^>]*> nop ++00009ca8 <[^>]*> nop ++00009cac <[^>]*> nop ++00009cb0 <[^>]*> nop ++00009cb4 <[^>]*> nop ++00009cb8 <[^>]*> nop ++00009cbc <[^>]*> nop ++00009cc0 <[^>]*> nop ++00009cc4 <[^>]*> nop ++00009cc8 <[^>]*> nop ++00009ccc <[^>]*> nop ++00009cd0 <[^>]*> nop ++00009cd4 <[^>]*> nop ++00009cd8 <[^>]*> nop ++00009cdc <[^>]*> nop ++00009ce0 <[^>]*> nop ++00009ce4 <[^>]*> nop ++00009ce8 <[^>]*> nop ++00009cec <[^>]*> nop ++00009cf0 <[^>]*> nop ++00009cf4 <[^>]*> nop ++00009cf8 <[^>]*> nop ++00009cfc <[^>]*> nop ++00009d00 <[^>]*> nop ++00009d04 <[^>]*> nop ++00009d08 <[^>]*> nop ++00009d0c <[^>]*> nop ++00009d10 <[^>]*> nop ++00009d14 <[^>]*> nop ++00009d18 <[^>]*> nop ++00009d1c <[^>]*> nop ++00009d20 <[^>]*> nop ++00009d24 <[^>]*> nop ++00009d28 <[^>]*> nop ++00009d2c <[^>]*> nop ++00009d30 <[^>]*> nop ++00009d34 <[^>]*> nop ++00009d38 <[^>]*> nop ++00009d3c <[^>]*> nop ++00009d40 <[^>]*> nop ++00009d44 <[^>]*> nop ++00009d48 <[^>]*> nop ++00009d4c <[^>]*> nop ++00009d50 <[^>]*> nop ++00009d54 <[^>]*> nop ++00009d58 <[^>]*> nop ++00009d5c <[^>]*> nop ++00009d60 <[^>]*> nop ++00009d64 <[^>]*> nop ++00009d68 <[^>]*> nop ++00009d6c <[^>]*> nop ++00009d70 <[^>]*> nop ++00009d74 <[^>]*> nop ++00009d78 <[^>]*> nop ++00009d7c <[^>]*> nop ++00009d80 <[^>]*> nop ++00009d84 <[^>]*> nop ++00009d88 <[^>]*> nop ++00009d8c <[^>]*> nop ++00009d90 <[^>]*> nop ++00009d94 <[^>]*> nop ++00009d98 <[^>]*> nop ++00009d9c <[^>]*> nop ++00009da0 <[^>]*> nop ++00009da4 <[^>]*> nop ++00009da8 <[^>]*> nop ++00009dac <[^>]*> nop ++00009db0 <[^>]*> nop ++00009db4 <[^>]*> nop ++00009db8 <[^>]*> nop ++00009dbc <[^>]*> nop ++00009dc0 <[^>]*> nop ++00009dc4 <[^>]*> nop ++00009dc8 <[^>]*> nop ++00009dcc <[^>]*> nop ++00009dd0 <[^>]*> nop ++00009dd4 <[^>]*> nop ++00009dd8 <[^>]*> nop ++00009ddc <[^>]*> nop ++00009de0 <[^>]*> nop ++00009de4 <[^>]*> nop ++00009de8 <[^>]*> nop ++00009dec <[^>]*> nop ++00009df0 <[^>]*> nop ++00009df4 <[^>]*> nop ++00009df8 <[^>]*> nop ++00009dfc <[^>]*> nop ++00009e00 <[^>]*> nop ++00009e04 <[^>]*> nop ++00009e08 <[^>]*> nop ++00009e0c <[^>]*> nop ++00009e10 <[^>]*> nop ++00009e14 <[^>]*> nop ++00009e18 <[^>]*> nop ++00009e1c <[^>]*> nop ++00009e20 <[^>]*> nop ++00009e24 <[^>]*> nop ++00009e28 <[^>]*> nop ++00009e2c <[^>]*> nop ++00009e30 <[^>]*> nop ++00009e34 <[^>]*> nop ++00009e38 <[^>]*> nop ++00009e3c <[^>]*> nop ++00009e40 <[^>]*> nop ++00009e44 <[^>]*> nop ++00009e48 <[^>]*> nop ++00009e4c <[^>]*> nop ++00009e50 <[^>]*> nop ++00009e54 <[^>]*> nop ++00009e58 <[^>]*> nop ++00009e5c <[^>]*> nop ++00009e60 <[^>]*> nop ++00009e64 <[^>]*> nop ++00009e68 <[^>]*> nop ++00009e6c <[^>]*> nop ++00009e70 <[^>]*> nop ++00009e74 <[^>]*> nop ++00009e78 <[^>]*> nop ++00009e7c <[^>]*> nop ++00009e80 <[^>]*> nop ++00009e84 <[^>]*> nop ++00009e88 <[^>]*> nop ++00009e8c <[^>]*> nop ++00009e90 <[^>]*> nop ++00009e94 <[^>]*> nop ++00009e98 <[^>]*> nop ++00009e9c <[^>]*> nop ++00009ea0 <[^>]*> nop ++00009ea4 <[^>]*> nop ++00009ea8 <[^>]*> nop ++00009eac <[^>]*> nop ++00009eb0 <[^>]*> nop ++00009eb4 <[^>]*> nop ++00009eb8 <[^>]*> nop ++00009ebc <[^>]*> nop ++00009ec0 <[^>]*> nop ++00009ec4 <[^>]*> nop ++00009ec8 <[^>]*> nop ++00009ecc <[^>]*> nop ++00009ed0 <[^>]*> nop ++00009ed4 <[^>]*> nop ++00009ed8 <[^>]*> nop ++00009edc <[^>]*> nop ++00009ee0 <[^>]*> nop ++00009ee4 <[^>]*> nop ++00009ee8 <[^>]*> nop ++00009eec <[^>]*> nop ++00009ef0 <[^>]*> nop ++00009ef4 <[^>]*> nop ++00009ef8 <[^>]*> nop ++00009efc <[^>]*> nop ++00009f00 <[^>]*> nop ++00009f04 <[^>]*> nop ++00009f08 <[^>]*> nop ++00009f0c <[^>]*> nop ++00009f10 <[^>]*> nop ++00009f14 <[^>]*> nop ++00009f18 <[^>]*> nop ++00009f1c <[^>]*> nop ++00009f20 <[^>]*> nop ++00009f24 <[^>]*> nop ++00009f28 <[^>]*> nop ++00009f2c <[^>]*> nop ++00009f30 <[^>]*> nop ++00009f34 <[^>]*> nop ++00009f38 <[^>]*> nop ++00009f3c <[^>]*> nop ++00009f40 <[^>]*> nop ++00009f44 <[^>]*> nop ++00009f48 <[^>]*> nop ++00009f4c <[^>]*> nop ++00009f50 <[^>]*> nop ++00009f54 <[^>]*> nop ++00009f58 <[^>]*> nop ++00009f5c <[^>]*> nop ++00009f60 <[^>]*> nop ++00009f64 <[^>]*> nop ++00009f68 <[^>]*> nop ++00009f6c <[^>]*> nop ++00009f70 <[^>]*> nop ++00009f74 <[^>]*> nop ++00009f78 <[^>]*> nop ++00009f7c <[^>]*> nop ++00009f80 <[^>]*> nop ++00009f84 <[^>]*> nop ++00009f88 <[^>]*> nop ++00009f8c <[^>]*> nop ++00009f90 <[^>]*> nop ++00009f94 <[^>]*> nop ++00009f98 <[^>]*> nop ++00009f9c <[^>]*> nop ++00009fa0 <[^>]*> nop ++00009fa4 <[^>]*> nop ++00009fa8 <[^>]*> nop ++00009fac <[^>]*> nop ++00009fb0 <[^>]*> nop ++00009fb4 <[^>]*> nop ++00009fb8 <[^>]*> nop ++00009fbc <[^>]*> nop ++00009fc0 <[^>]*> nop ++00009fc4 <[^>]*> nop ++00009fc8 <[^>]*> nop ++00009fcc <[^>]*> nop ++00009fd0 <[^>]*> nop ++00009fd4 <[^>]*> nop ++00009fd8 <[^>]*> nop ++00009fdc <[^>]*> nop ++00009fe0 <[^>]*> nop ++00009fe4 <[^>]*> nop ++00009fe8 <[^>]*> nop ++00009fec <[^>]*> nop ++00009ff0 <[^>]*> nop ++00009ff4 <[^>]*> nop ++00009ff8 <[^>]*> nop ++00009ffc <[^>]*> nop ++0000a000 <[^>]*> nop ++0000a004 <[^>]*> nop ++0000a008 <[^>]*> nop ++0000a00c <[^>]*> nop ++0000a010 <[^>]*> nop ++0000a014 <[^>]*> nop ++0000a018 <[^>]*> nop ++0000a01c <[^>]*> nop ++0000a020 <[^>]*> nop ++0000a024 <[^>]*> nop ++0000a028 <[^>]*> nop ++0000a02c <[^>]*> nop ++0000a030 <[^>]*> nop ++0000a034 <[^>]*> nop ++0000a038 <[^>]*> nop ++0000a03c <[^>]*> nop ++0000a040 <[^>]*> nop ++0000a044 <[^>]*> nop ++0000a048 <[^>]*> nop ++0000a04c <[^>]*> nop ++0000a050 <[^>]*> nop ++0000a054 <[^>]*> nop ++0000a058 <[^>]*> nop ++0000a05c <[^>]*> nop ++0000a060 <[^>]*> nop ++0000a064 <[^>]*> nop ++0000a068 <[^>]*> nop ++0000a06c <[^>]*> nop ++0000a070 <[^>]*> nop ++0000a074 <[^>]*> nop ++0000a078 <[^>]*> nop ++0000a07c <[^>]*> nop ++0000a080 <[^>]*> nop ++0000a084 <[^>]*> nop ++0000a088 <[^>]*> nop ++0000a08c <[^>]*> nop ++0000a090 <[^>]*> nop ++0000a094 <[^>]*> nop ++0000a098 <[^>]*> nop ++0000a09c <[^>]*> nop ++0000a0a0 <[^>]*> nop ++0000a0a4 <[^>]*> nop ++0000a0a8 <[^>]*> nop ++0000a0ac <[^>]*> nop ++0000a0b0 <[^>]*> nop ++0000a0b4 <[^>]*> nop ++0000a0b8 <[^>]*> nop ++0000a0bc <[^>]*> nop ++0000a0c0 <[^>]*> nop ++0000a0c4 <[^>]*> nop ++0000a0c8 <[^>]*> nop ++0000a0cc <[^>]*> nop ++0000a0d0 <[^>]*> nop ++0000a0d4 <[^>]*> nop ++0000a0d8 <[^>]*> nop ++0000a0dc <[^>]*> nop ++0000a0e0 <[^>]*> nop ++0000a0e4 <[^>]*> nop ++0000a0e8 <[^>]*> nop ++0000a0ec <[^>]*> nop ++0000a0f0 <[^>]*> nop ++0000a0f4 <[^>]*> nop ++0000a0f8 <[^>]*> nop ++0000a0fc <[^>]*> nop ++0000a100 <[^>]*> nop ++0000a104 <[^>]*> nop ++0000a108 <[^>]*> nop ++0000a10c <[^>]*> nop ++0000a110 <[^>]*> nop ++0000a114 <[^>]*> nop ++0000a118 <[^>]*> nop ++0000a11c <[^>]*> nop ++0000a120 <[^>]*> nop ++0000a124 <[^>]*> nop ++0000a128 <[^>]*> nop ++0000a12c <[^>]*> nop ++0000a130 <[^>]*> nop ++0000a134 <[^>]*> nop ++0000a138 <[^>]*> nop ++0000a13c <[^>]*> nop ++0000a140 <[^>]*> nop ++0000a144 <[^>]*> nop ++0000a148 <[^>]*> nop ++0000a14c <[^>]*> nop ++0000a150 <[^>]*> nop ++0000a154 <[^>]*> nop ++0000a158 <[^>]*> nop ++0000a15c <[^>]*> nop ++0000a160 <[^>]*> nop ++0000a164 <[^>]*> nop ++0000a168 <[^>]*> nop ++0000a16c <[^>]*> nop ++0000a170 <[^>]*> nop ++0000a174 <[^>]*> nop ++0000a178 <[^>]*> nop ++0000a17c <[^>]*> nop ++0000a180 <[^>]*> nop ++0000a184 <[^>]*> nop ++0000a188 <[^>]*> nop ++0000a18c <[^>]*> nop ++0000a190 <[^>]*> nop ++0000a194 <[^>]*> nop ++0000a198 <[^>]*> nop ++0000a19c <[^>]*> nop ++0000a1a0 <[^>]*> nop ++0000a1a4 <[^>]*> nop ++0000a1a8 <[^>]*> nop ++0000a1ac <[^>]*> nop ++0000a1b0 <[^>]*> nop ++0000a1b4 <[^>]*> nop ++0000a1b8 <[^>]*> nop ++0000a1bc <[^>]*> nop ++0000a1c0 <[^>]*> nop ++0000a1c4 <[^>]*> nop ++0000a1c8 <[^>]*> nop ++0000a1cc <[^>]*> nop ++0000a1d0 <[^>]*> nop ++0000a1d4 <[^>]*> nop ++0000a1d8 <[^>]*> nop ++0000a1dc <[^>]*> nop ++0000a1e0 <[^>]*> nop ++0000a1e4 <[^>]*> nop ++0000a1e8 <[^>]*> nop ++0000a1ec <[^>]*> nop ++0000a1f0 <[^>]*> nop ++0000a1f4 <[^>]*> nop ++0000a1f8 <[^>]*> nop ++0000a1fc <[^>]*> nop ++0000a200 <[^>]*> nop ++0000a204 <[^>]*> nop ++0000a208 <[^>]*> nop ++0000a20c <[^>]*> nop ++0000a210 <[^>]*> nop ++0000a214 <[^>]*> nop ++0000a218 <[^>]*> nop ++0000a21c <[^>]*> nop ++0000a220 <[^>]*> nop ++0000a224 <[^>]*> nop ++0000a228 <[^>]*> nop ++0000a22c <[^>]*> nop ++0000a230 <[^>]*> nop ++0000a234 <[^>]*> nop ++0000a238 <[^>]*> nop ++0000a23c <[^>]*> nop ++0000a240 <[^>]*> nop ++0000a244 <[^>]*> nop ++0000a248 <[^>]*> nop ++0000a24c <[^>]*> nop ++0000a250 <[^>]*> nop ++0000a254 <[^>]*> nop ++0000a258 <[^>]*> nop ++0000a25c <[^>]*> nop ++0000a260 <[^>]*> nop ++0000a264 <[^>]*> nop ++0000a268 <[^>]*> nop ++0000a26c <[^>]*> nop ++0000a270 <[^>]*> nop ++0000a274 <[^>]*> nop ++0000a278 <[^>]*> nop ++0000a27c <[^>]*> nop ++0000a280 <[^>]*> nop ++0000a284 <[^>]*> nop ++0000a288 <[^>]*> nop ++0000a28c <[^>]*> nop ++0000a290 <[^>]*> nop ++0000a294 <[^>]*> nop ++0000a298 <[^>]*> nop ++0000a29c <[^>]*> nop ++0000a2a0 <[^>]*> nop ++0000a2a4 <[^>]*> nop ++0000a2a8 <[^>]*> nop ++0000a2ac <[^>]*> nop ++0000a2b0 <[^>]*> nop ++0000a2b4 <[^>]*> nop ++0000a2b8 <[^>]*> nop ++0000a2bc <[^>]*> nop ++0000a2c0 <[^>]*> nop ++0000a2c4 <[^>]*> nop ++0000a2c8 <[^>]*> nop ++0000a2cc <[^>]*> nop ++0000a2d0 <[^>]*> nop ++0000a2d4 <[^>]*> nop ++0000a2d8 <[^>]*> nop ++0000a2dc <[^>]*> nop ++0000a2e0 <[^>]*> nop ++0000a2e4 <[^>]*> nop ++0000a2e8 <[^>]*> nop ++0000a2ec <[^>]*> nop ++0000a2f0 <[^>]*> nop ++0000a2f4 <[^>]*> nop ++0000a2f8 <[^>]*> nop ++0000a2fc <[^>]*> nop ++0000a300 <[^>]*> nop ++0000a304 <[^>]*> nop ++0000a308 <[^>]*> nop ++0000a30c <[^>]*> nop ++0000a310 <[^>]*> nop ++0000a314 <[^>]*> nop ++0000a318 <[^>]*> nop ++0000a31c <[^>]*> nop ++0000a320 <[^>]*> nop ++0000a324 <[^>]*> nop ++0000a328 <[^>]*> nop ++0000a32c <[^>]*> nop ++0000a330 <[^>]*> nop ++0000a334 <[^>]*> nop ++0000a338 <[^>]*> nop ++0000a33c <[^>]*> nop ++0000a340 <[^>]*> nop ++0000a344 <[^>]*> nop ++0000a348 <[^>]*> nop ++0000a34c <[^>]*> nop ++0000a350 <[^>]*> nop ++0000a354 <[^>]*> nop ++0000a358 <[^>]*> nop ++0000a35c <[^>]*> nop ++0000a360 <[^>]*> nop ++0000a364 <[^>]*> nop ++0000a368 <[^>]*> nop ++0000a36c <[^>]*> nop ++0000a370 <[^>]*> nop ++0000a374 <[^>]*> nop ++0000a378 <[^>]*> nop ++0000a37c <[^>]*> nop ++0000a380 <[^>]*> nop ++0000a384 <[^>]*> nop ++0000a388 <[^>]*> nop ++0000a38c <[^>]*> nop ++0000a390 <[^>]*> nop ++0000a394 <[^>]*> nop ++0000a398 <[^>]*> nop ++0000a39c <[^>]*> nop ++0000a3a0 <[^>]*> nop ++0000a3a4 <[^>]*> nop ++0000a3a8 <[^>]*> nop ++0000a3ac <[^>]*> nop ++0000a3b0 <[^>]*> nop ++0000a3b4 <[^>]*> nop ++0000a3b8 <[^>]*> nop ++0000a3bc <[^>]*> nop ++0000a3c0 <[^>]*> nop ++0000a3c4 <[^>]*> nop ++0000a3c8 <[^>]*> nop ++0000a3cc <[^>]*> nop ++0000a3d0 <[^>]*> nop ++0000a3d4 <[^>]*> nop ++0000a3d8 <[^>]*> nop ++0000a3dc <[^>]*> nop ++0000a3e0 <[^>]*> nop ++0000a3e4 <[^>]*> nop ++0000a3e8 <[^>]*> nop ++0000a3ec <[^>]*> nop ++0000a3f0 <[^>]*> nop ++0000a3f4 <[^>]*> nop ++0000a3f8 <[^>]*> nop ++0000a3fc <[^>]*> nop ++0000a400 <[^>]*> nop ++0000a404 <[^>]*> nop ++0000a408 <[^>]*> nop ++0000a40c <[^>]*> nop ++0000a410 <[^>]*> nop ++0000a414 <[^>]*> nop ++0000a418 <[^>]*> nop ++0000a41c <[^>]*> nop ++0000a420 <[^>]*> nop ++0000a424 <[^>]*> nop ++0000a428 <[^>]*> nop ++0000a42c <[^>]*> nop ++0000a430 <[^>]*> nop ++0000a434 <[^>]*> nop ++0000a438 <[^>]*> nop ++0000a43c <[^>]*> nop ++0000a440 <[^>]*> nop ++0000a444 <[^>]*> nop ++0000a448 <[^>]*> nop ++0000a44c <[^>]*> nop ++0000a450 <[^>]*> nop ++0000a454 <[^>]*> nop ++0000a458 <[^>]*> nop ++0000a45c <[^>]*> nop ++0000a460 <[^>]*> nop ++0000a464 <[^>]*> nop ++0000a468 <[^>]*> nop ++0000a46c <[^>]*> nop ++0000a470 <[^>]*> nop ++0000a474 <[^>]*> nop ++0000a478 <[^>]*> nop ++0000a47c <[^>]*> nop ++0000a480 <[^>]*> nop ++0000a484 <[^>]*> nop ++0000a488 <[^>]*> nop ++0000a48c <[^>]*> nop ++0000a490 <[^>]*> nop ++0000a494 <[^>]*> nop ++0000a498 <[^>]*> nop ++0000a49c <[^>]*> nop ++0000a4a0 <[^>]*> nop ++0000a4a4 <[^>]*> nop ++0000a4a8 <[^>]*> nop ++0000a4ac <[^>]*> nop ++0000a4b0 <[^>]*> nop ++0000a4b4 <[^>]*> nop ++0000a4b8 <[^>]*> nop ++0000a4bc <[^>]*> nop ++0000a4c0 <[^>]*> nop ++0000a4c4 <[^>]*> nop ++0000a4c8 <[^>]*> nop ++0000a4cc <[^>]*> nop ++0000a4d0 <[^>]*> nop ++0000a4d4 <[^>]*> nop ++0000a4d8 <[^>]*> nop ++0000a4dc <[^>]*> nop ++0000a4e0 <[^>]*> nop ++0000a4e4 <[^>]*> nop ++0000a4e8 <[^>]*> nop ++0000a4ec <[^>]*> nop ++0000a4f0 <[^>]*> nop ++0000a4f4 <[^>]*> nop ++0000a4f8 <[^>]*> nop ++0000a4fc <[^>]*> nop ++0000a500 <[^>]*> nop ++0000a504 <[^>]*> nop ++0000a508 <[^>]*> nop ++0000a50c <[^>]*> nop ++0000a510 <[^>]*> nop ++0000a514 <[^>]*> nop ++0000a518 <[^>]*> nop ++0000a51c <[^>]*> nop ++0000a520 <[^>]*> nop ++0000a524 <[^>]*> nop ++0000a528 <[^>]*> nop ++0000a52c <[^>]*> nop ++0000a530 <[^>]*> nop ++0000a534 <[^>]*> nop ++0000a538 <[^>]*> nop ++0000a53c <[^>]*> nop ++0000a540 <[^>]*> nop ++0000a544 <[^>]*> nop ++0000a548 <[^>]*> nop ++0000a54c <[^>]*> nop ++0000a550 <[^>]*> nop ++0000a554 <[^>]*> nop ++0000a558 <[^>]*> nop ++0000a55c <[^>]*> nop ++0000a560 <[^>]*> nop ++0000a564 <[^>]*> nop ++0000a568 <[^>]*> nop ++0000a56c <[^>]*> nop ++0000a570 <[^>]*> nop ++0000a574 <[^>]*> nop ++0000a578 <[^>]*> nop ++0000a57c <[^>]*> nop ++0000a580 <[^>]*> nop ++0000a584 <[^>]*> nop ++0000a588 <[^>]*> nop ++0000a58c <[^>]*> nop ++0000a590 <[^>]*> nop ++0000a594 <[^>]*> nop ++0000a598 <[^>]*> nop ++0000a59c <[^>]*> nop ++0000a5a0 <[^>]*> nop ++0000a5a4 <[^>]*> nop ++0000a5a8 <[^>]*> nop ++0000a5ac <[^>]*> nop ++0000a5b0 <[^>]*> nop ++0000a5b4 <[^>]*> nop ++0000a5b8 <[^>]*> nop ++0000a5bc <[^>]*> nop ++0000a5c0 <[^>]*> nop ++0000a5c4 <[^>]*> nop ++0000a5c8 <[^>]*> nop ++0000a5cc <[^>]*> nop ++0000a5d0 <[^>]*> nop ++0000a5d4 <[^>]*> nop ++0000a5d8 <[^>]*> nop ++0000a5dc <[^>]*> nop ++0000a5e0 <[^>]*> nop ++0000a5e4 <[^>]*> nop ++0000a5e8 <[^>]*> nop ++0000a5ec <[^>]*> nop ++0000a5f0 <[^>]*> nop ++0000a5f4 <[^>]*> nop ++0000a5f8 <[^>]*> nop ++0000a5fc <[^>]*> nop ++0000a600 <[^>]*> nop ++0000a604 <[^>]*> nop ++0000a608 <[^>]*> nop ++0000a60c <[^>]*> nop ++0000a610 <[^>]*> nop ++0000a614 <[^>]*> nop ++0000a618 <[^>]*> nop ++0000a61c <[^>]*> nop ++0000a620 <[^>]*> nop ++0000a624 <[^>]*> nop ++0000a628 <[^>]*> nop ++0000a62c <[^>]*> nop ++0000a630 <[^>]*> nop ++0000a634 <[^>]*> nop ++0000a638 <[^>]*> nop ++0000a63c <[^>]*> nop ++0000a640 <[^>]*> nop ++0000a644 <[^>]*> nop ++0000a648 <[^>]*> nop ++0000a64c <[^>]*> nop ++0000a650 <[^>]*> nop ++0000a654 <[^>]*> nop ++0000a658 <[^>]*> nop ++0000a65c <[^>]*> nop ++0000a660 <[^>]*> nop ++0000a664 <[^>]*> nop ++0000a668 <[^>]*> nop ++0000a66c <[^>]*> nop ++0000a670 <[^>]*> nop ++0000a674 <[^>]*> nop ++0000a678 <[^>]*> nop ++0000a67c <[^>]*> nop ++0000a680 <[^>]*> nop ++0000a684 <[^>]*> nop ++0000a688 <[^>]*> nop ++0000a68c <[^>]*> nop ++0000a690 <[^>]*> nop ++0000a694 <[^>]*> nop ++0000a698 <[^>]*> nop ++0000a69c <[^>]*> nop ++0000a6a0 <[^>]*> nop ++0000a6a4 <[^>]*> nop ++0000a6a8 <[^>]*> nop ++0000a6ac <[^>]*> nop ++0000a6b0 <[^>]*> nop ++0000a6b4 <[^>]*> nop ++0000a6b8 <[^>]*> nop ++0000a6bc <[^>]*> nop ++0000a6c0 <[^>]*> nop ++0000a6c4 <[^>]*> nop ++0000a6c8 <[^>]*> nop ++0000a6cc <[^>]*> nop ++0000a6d0 <[^>]*> nop ++0000a6d4 <[^>]*> nop ++0000a6d8 <[^>]*> nop ++0000a6dc <[^>]*> nop ++0000a6e0 <[^>]*> nop ++0000a6e4 <[^>]*> nop ++0000a6e8 <[^>]*> nop ++0000a6ec <[^>]*> nop ++0000a6f0 <[^>]*> nop ++0000a6f4 <[^>]*> nop ++0000a6f8 <[^>]*> nop ++0000a6fc <[^>]*> nop ++0000a700 <[^>]*> nop ++0000a704 <[^>]*> nop ++0000a708 <[^>]*> nop ++0000a70c <[^>]*> nop ++0000a710 <[^>]*> nop ++0000a714 <[^>]*> nop ++0000a718 <[^>]*> nop ++0000a71c <[^>]*> nop ++0000a720 <[^>]*> nop ++0000a724 <[^>]*> nop ++0000a728 <[^>]*> nop ++0000a72c <[^>]*> nop ++0000a730 <[^>]*> nop ++0000a734 <[^>]*> nop ++0000a738 <[^>]*> nop ++0000a73c <[^>]*> nop ++0000a740 <[^>]*> nop ++0000a744 <[^>]*> nop ++0000a748 <[^>]*> nop ++0000a74c <[^>]*> nop ++0000a750 <[^>]*> nop ++0000a754 <[^>]*> nop ++0000a758 <[^>]*> nop ++0000a75c <[^>]*> nop ++0000a760 <[^>]*> nop ++0000a764 <[^>]*> nop ++0000a768 <[^>]*> nop ++0000a76c <[^>]*> nop ++0000a770 <[^>]*> nop ++0000a774 <[^>]*> nop ++0000a778 <[^>]*> nop ++0000a77c <[^>]*> nop ++0000a780 <[^>]*> nop ++0000a784 <[^>]*> nop ++0000a788 <[^>]*> nop ++0000a78c <[^>]*> nop ++0000a790 <[^>]*> nop ++0000a794 <[^>]*> nop ++0000a798 <[^>]*> nop ++0000a79c <[^>]*> nop ++0000a7a0 <[^>]*> nop ++0000a7a4 <[^>]*> nop ++0000a7a8 <[^>]*> nop ++0000a7ac <[^>]*> nop ++0000a7b0 <[^>]*> nop ++0000a7b4 <[^>]*> nop ++0000a7b8 <[^>]*> nop ++0000a7bc <[^>]*> nop ++0000a7c0 <[^>]*> nop ++0000a7c4 <[^>]*> nop ++0000a7c8 <[^>]*> nop ++0000a7cc <[^>]*> nop ++0000a7d0 <[^>]*> nop ++0000a7d4 <[^>]*> nop ++0000a7d8 <[^>]*> nop ++0000a7dc <[^>]*> nop ++0000a7e0 <[^>]*> nop ++0000a7e4 <[^>]*> nop ++0000a7e8 <[^>]*> nop ++0000a7ec <[^>]*> nop ++0000a7f0 <[^>]*> nop ++0000a7f4 <[^>]*> nop ++0000a7f8 <[^>]*> nop ++0000a7fc <[^>]*> nop ++0000a800 <[^>]*> nop ++0000a804 <[^>]*> nop ++0000a808 <[^>]*> nop ++0000a80c <[^>]*> nop ++0000a810 <[^>]*> nop ++0000a814 <[^>]*> nop ++0000a818 <[^>]*> nop ++0000a81c <[^>]*> nop ++0000a820 <[^>]*> nop ++0000a824 <[^>]*> nop ++0000a828 <[^>]*> nop ++0000a82c <[^>]*> nop ++0000a830 <[^>]*> nop ++0000a834 <[^>]*> nop ++0000a838 <[^>]*> nop ++0000a83c <[^>]*> nop ++0000a840 <[^>]*> nop ++0000a844 <[^>]*> nop ++0000a848 <[^>]*> nop ++0000a84c <[^>]*> nop ++0000a850 <[^>]*> nop ++0000a854 <[^>]*> nop ++0000a858 <[^>]*> nop ++0000a85c <[^>]*> nop ++0000a860 <[^>]*> nop ++0000a864 <[^>]*> nop ++0000a868 <[^>]*> nop ++0000a86c <[^>]*> nop ++0000a870 <[^>]*> nop ++0000a874 <[^>]*> nop ++0000a878 <[^>]*> nop ++0000a87c <[^>]*> nop ++0000a880 <[^>]*> nop ++0000a884 <[^>]*> nop ++0000a888 <[^>]*> nop ++0000a88c <[^>]*> nop ++0000a890 <[^>]*> nop ++0000a894 <[^>]*> nop ++0000a898 <[^>]*> nop ++0000a89c <[^>]*> nop ++0000a8a0 <[^>]*> nop ++0000a8a4 <[^>]*> nop ++0000a8a8 <[^>]*> nop ++0000a8ac <[^>]*> nop ++0000a8b0 <[^>]*> nop ++0000a8b4 <[^>]*> nop ++0000a8b8 <[^>]*> nop ++0000a8bc <[^>]*> nop ++0000a8c0 <[^>]*> nop ++0000a8c4 <[^>]*> nop ++0000a8c8 <[^>]*> nop ++0000a8cc <[^>]*> nop ++0000a8d0 <[^>]*> nop ++0000a8d4 <[^>]*> nop ++0000a8d8 <[^>]*> nop ++0000a8dc <[^>]*> nop ++0000a8e0 <[^>]*> nop ++0000a8e4 <[^>]*> nop ++0000a8e8 <[^>]*> nop ++0000a8ec <[^>]*> nop ++0000a8f0 <[^>]*> nop ++0000a8f4 <[^>]*> nop ++0000a8f8 <[^>]*> nop ++0000a8fc <[^>]*> nop ++0000a900 <[^>]*> nop ++0000a904 <[^>]*> nop ++0000a908 <[^>]*> nop ++0000a90c <[^>]*> nop ++0000a910 <[^>]*> nop ++0000a914 <[^>]*> nop ++0000a918 <[^>]*> nop ++0000a91c <[^>]*> nop ++0000a920 <[^>]*> nop ++0000a924 <[^>]*> nop ++0000a928 <[^>]*> nop ++0000a92c <[^>]*> nop ++0000a930 <[^>]*> nop ++0000a934 <[^>]*> nop ++0000a938 <[^>]*> nop ++0000a93c <[^>]*> nop ++0000a940 <[^>]*> nop ++0000a944 <[^>]*> nop ++0000a948 <[^>]*> nop ++0000a94c <[^>]*> nop ++0000a950 <[^>]*> nop ++0000a954 <[^>]*> nop ++0000a958 <[^>]*> nop ++0000a95c <[^>]*> nop ++0000a960 <[^>]*> nop ++0000a964 <[^>]*> nop ++0000a968 <[^>]*> nop ++0000a96c <[^>]*> nop ++0000a970 <[^>]*> nop ++0000a974 <[^>]*> nop ++0000a978 <[^>]*> nop ++0000a97c <[^>]*> nop ++0000a980 <[^>]*> nop ++0000a984 <[^>]*> nop ++0000a988 <[^>]*> nop ++0000a98c <[^>]*> nop ++0000a990 <[^>]*> nop ++0000a994 <[^>]*> nop ++0000a998 <[^>]*> nop ++0000a99c <[^>]*> nop ++0000a9a0 <[^>]*> nop ++0000a9a4 <[^>]*> nop ++0000a9a8 <[^>]*> nop ++0000a9ac <[^>]*> nop ++0000a9b0 <[^>]*> nop ++0000a9b4 <[^>]*> nop ++0000a9b8 <[^>]*> nop ++0000a9bc <[^>]*> nop ++0000a9c0 <[^>]*> nop ++0000a9c4 <[^>]*> nop ++0000a9c8 <[^>]*> nop ++0000a9cc <[^>]*> nop ++0000a9d0 <[^>]*> nop ++0000a9d4 <[^>]*> nop ++0000a9d8 <[^>]*> nop ++0000a9dc <[^>]*> nop ++0000a9e0 <[^>]*> nop ++0000a9e4 <[^>]*> nop ++0000a9e8 <[^>]*> nop ++0000a9ec <[^>]*> nop ++0000a9f0 <[^>]*> nop ++0000a9f4 <[^>]*> nop ++0000a9f8 <[^>]*> nop ++0000a9fc <[^>]*> nop ++0000aa00 <[^>]*> nop ++0000aa04 <[^>]*> nop ++0000aa08 <[^>]*> nop ++0000aa0c <[^>]*> nop ++0000aa10 <[^>]*> nop ++0000aa14 <[^>]*> nop ++0000aa18 <[^>]*> nop ++0000aa1c <[^>]*> nop ++0000aa20 <[^>]*> nop ++0000aa24 <[^>]*> nop ++0000aa28 <[^>]*> nop ++0000aa2c <[^>]*> nop ++0000aa30 <[^>]*> nop ++0000aa34 <[^>]*> nop ++0000aa38 <[^>]*> nop ++0000aa3c <[^>]*> nop ++0000aa40 <[^>]*> nop ++0000aa44 <[^>]*> nop ++0000aa48 <[^>]*> nop ++0000aa4c <[^>]*> nop ++0000aa50 <[^>]*> nop ++0000aa54 <[^>]*> nop ++0000aa58 <[^>]*> nop ++0000aa5c <[^>]*> nop ++0000aa60 <[^>]*> nop ++0000aa64 <[^>]*> nop ++0000aa68 <[^>]*> nop ++0000aa6c <[^>]*> nop ++0000aa70 <[^>]*> nop ++0000aa74 <[^>]*> nop ++0000aa78 <[^>]*> nop ++0000aa7c <[^>]*> nop ++0000aa80 <[^>]*> nop ++0000aa84 <[^>]*> nop ++0000aa88 <[^>]*> nop ++0000aa8c <[^>]*> nop ++0000aa90 <[^>]*> nop ++0000aa94 <[^>]*> nop ++0000aa98 <[^>]*> nop ++0000aa9c <[^>]*> nop ++0000aaa0 <[^>]*> nop ++0000aaa4 <[^>]*> nop ++0000aaa8 <[^>]*> nop ++0000aaac <[^>]*> nop ++0000aab0 <[^>]*> nop ++0000aab4 <[^>]*> nop ++0000aab8 <[^>]*> nop ++0000aabc <[^>]*> nop ++0000aac0 <[^>]*> nop ++0000aac4 <[^>]*> nop ++0000aac8 <[^>]*> nop ++0000aacc <[^>]*> nop ++0000aad0 <[^>]*> nop ++0000aad4 <[^>]*> nop ++0000aad8 <[^>]*> nop ++0000aadc <[^>]*> nop ++0000aae0 <[^>]*> nop ++0000aae4 <[^>]*> nop ++0000aae8 <[^>]*> nop ++0000aaec <[^>]*> nop ++0000aaf0 <[^>]*> nop ++0000aaf4 <[^>]*> nop ++0000aaf8 <[^>]*> nop ++0000aafc <[^>]*> nop ++0000ab00 <[^>]*> nop ++0000ab04 <[^>]*> nop ++0000ab08 <[^>]*> nop ++0000ab0c <[^>]*> nop ++0000ab10 <[^>]*> nop ++0000ab14 <[^>]*> nop ++0000ab18 <[^>]*> nop ++0000ab1c <[^>]*> nop ++0000ab20 <[^>]*> nop ++0000ab24 <[^>]*> nop ++0000ab28 <[^>]*> nop ++0000ab2c <[^>]*> nop ++0000ab30 <[^>]*> nop ++0000ab34 <[^>]*> nop ++0000ab38 <[^>]*> nop ++0000ab3c <[^>]*> nop ++0000ab40 <[^>]*> nop ++0000ab44 <[^>]*> nop ++0000ab48 <[^>]*> nop ++0000ab4c <[^>]*> nop ++0000ab50 <[^>]*> nop ++0000ab54 <[^>]*> nop ++0000ab58 <[^>]*> nop ++0000ab5c <[^>]*> nop ++0000ab60 <[^>]*> nop ++0000ab64 <[^>]*> nop ++0000ab68 <[^>]*> nop ++0000ab6c <[^>]*> nop ++0000ab70 <[^>]*> nop ++0000ab74 <[^>]*> nop ++0000ab78 <[^>]*> nop ++0000ab7c <[^>]*> nop ++0000ab80 <[^>]*> nop ++0000ab84 <[^>]*> nop ++0000ab88 <[^>]*> nop ++0000ab8c <[^>]*> nop ++0000ab90 <[^>]*> nop ++0000ab94 <[^>]*> nop ++0000ab98 <[^>]*> nop ++0000ab9c <[^>]*> nop ++0000aba0 <[^>]*> nop ++0000aba4 <[^>]*> nop ++0000aba8 <[^>]*> nop ++0000abac <[^>]*> nop ++0000abb0 <[^>]*> nop ++0000abb4 <[^>]*> nop ++0000abb8 <[^>]*> nop ++0000abbc <[^>]*> nop ++0000abc0 <[^>]*> nop ++0000abc4 <[^>]*> nop ++0000abc8 <[^>]*> nop ++0000abcc <[^>]*> nop ++0000abd0 <[^>]*> nop ++0000abd4 <[^>]*> nop ++0000abd8 <[^>]*> nop ++0000abdc <[^>]*> nop ++0000abe0 <[^>]*> nop ++0000abe4 <[^>]*> nop ++0000abe8 <[^>]*> nop ++0000abec <[^>]*> nop ++0000abf0 <[^>]*> nop ++0000abf4 <[^>]*> nop ++0000abf8 <[^>]*> nop ++0000abfc <[^>]*> nop ++0000ac00 <[^>]*> nop ++0000ac04 <[^>]*> nop ++0000ac08 <[^>]*> nop ++0000ac0c <[^>]*> nop ++0000ac10 <[^>]*> nop ++0000ac14 <[^>]*> nop ++0000ac18 <[^>]*> nop ++0000ac1c <[^>]*> nop ++0000ac20 <[^>]*> nop ++0000ac24 <[^>]*> nop ++0000ac28 <[^>]*> nop ++0000ac2c <[^>]*> nop ++0000ac30 <[^>]*> nop ++0000ac34 <[^>]*> nop ++0000ac38 <[^>]*> nop ++0000ac3c <[^>]*> nop ++0000ac40 <[^>]*> nop ++0000ac44 <[^>]*> nop ++0000ac48 <[^>]*> nop ++0000ac4c <[^>]*> nop ++0000ac50 <[^>]*> nop ++0000ac54 <[^>]*> nop ++0000ac58 <[^>]*> nop ++0000ac5c <[^>]*> nop ++0000ac60 <[^>]*> nop ++0000ac64 <[^>]*> nop ++0000ac68 <[^>]*> nop ++0000ac6c <[^>]*> nop ++0000ac70 <[^>]*> nop ++0000ac74 <[^>]*> nop ++0000ac78 <[^>]*> nop ++0000ac7c <[^>]*> nop ++0000ac80 <[^>]*> nop ++0000ac84 <[^>]*> nop ++0000ac88 <[^>]*> nop ++0000ac8c <[^>]*> nop ++0000ac90 <[^>]*> nop ++0000ac94 <[^>]*> nop ++0000ac98 <[^>]*> nop ++0000ac9c <[^>]*> nop ++0000aca0 <[^>]*> nop ++0000aca4 <[^>]*> nop ++0000aca8 <[^>]*> nop ++0000acac <[^>]*> nop ++0000acb0 <[^>]*> nop ++0000acb4 <[^>]*> nop ++0000acb8 <[^>]*> nop ++0000acbc <[^>]*> nop ++0000acc0 <[^>]*> nop ++0000acc4 <[^>]*> nop ++0000acc8 <[^>]*> nop ++0000accc <[^>]*> nop ++0000acd0 <[^>]*> nop ++0000acd4 <[^>]*> nop ++0000acd8 <[^>]*> nop ++0000acdc <[^>]*> nop ++0000ace0 <[^>]*> nop ++0000ace4 <[^>]*> nop ++0000ace8 <[^>]*> nop ++0000acec <[^>]*> nop ++0000acf0 <[^>]*> nop ++0000acf4 <[^>]*> nop ++0000acf8 <[^>]*> nop ++0000acfc <[^>]*> nop ++0000ad00 <[^>]*> nop ++0000ad04 <[^>]*> nop ++0000ad08 <[^>]*> nop ++0000ad0c <[^>]*> nop ++0000ad10 <[^>]*> nop ++0000ad14 <[^>]*> nop ++0000ad18 <[^>]*> nop ++0000ad1c <[^>]*> nop ++0000ad20 <[^>]*> nop ++0000ad24 <[^>]*> nop ++0000ad28 <[^>]*> nop ++0000ad2c <[^>]*> nop ++0000ad30 <[^>]*> nop ++0000ad34 <[^>]*> nop ++0000ad38 <[^>]*> nop ++0000ad3c <[^>]*> nop ++0000ad40 <[^>]*> nop ++0000ad44 <[^>]*> nop ++0000ad48 <[^>]*> nop ++0000ad4c <[^>]*> nop ++0000ad50 <[^>]*> nop ++0000ad54 <[^>]*> nop ++0000ad58 <[^>]*> nop ++0000ad5c <[^>]*> nop ++0000ad60 <[^>]*> nop ++0000ad64 <[^>]*> nop ++0000ad68 <[^>]*> nop ++0000ad6c <[^>]*> nop ++0000ad70 <[^>]*> nop ++0000ad74 <[^>]*> nop ++0000ad78 <[^>]*> nop ++0000ad7c <[^>]*> nop ++0000ad80 <[^>]*> nop ++0000ad84 <[^>]*> nop ++0000ad88 <[^>]*> nop ++0000ad8c <[^>]*> nop ++0000ad90 <[^>]*> nop ++0000ad94 <[^>]*> nop ++0000ad98 <[^>]*> nop ++0000ad9c <[^>]*> nop ++0000ada0 <[^>]*> nop ++0000ada4 <[^>]*> nop ++0000ada8 <[^>]*> nop ++0000adac <[^>]*> nop ++0000adb0 <[^>]*> nop ++0000adb4 <[^>]*> nop ++0000adb8 <[^>]*> nop ++0000adbc <[^>]*> nop ++0000adc0 <[^>]*> nop ++0000adc4 <[^>]*> nop ++0000adc8 <[^>]*> nop ++0000adcc <[^>]*> nop ++0000add0 <[^>]*> nop ++0000add4 <[^>]*> nop ++0000add8 <[^>]*> nop ++0000addc <[^>]*> nop ++0000ade0 <[^>]*> nop ++0000ade4 <[^>]*> nop ++0000ade8 <[^>]*> nop ++0000adec <[^>]*> nop ++0000adf0 <[^>]*> nop ++0000adf4 <[^>]*> nop ++0000adf8 <[^>]*> nop ++0000adfc <[^>]*> nop ++0000ae00 <[^>]*> nop ++0000ae04 <[^>]*> nop ++0000ae08 <[^>]*> nop ++0000ae0c <[^>]*> nop ++0000ae10 <[^>]*> nop ++0000ae14 <[^>]*> nop ++0000ae18 <[^>]*> nop ++0000ae1c <[^>]*> nop ++0000ae20 <[^>]*> nop ++0000ae24 <[^>]*> nop ++0000ae28 <[^>]*> nop ++0000ae2c <[^>]*> nop ++0000ae30 <[^>]*> nop ++0000ae34 <[^>]*> nop ++0000ae38 <[^>]*> nop ++0000ae3c <[^>]*> nop ++0000ae40 <[^>]*> nop ++0000ae44 <[^>]*> nop ++0000ae48 <[^>]*> nop ++0000ae4c <[^>]*> nop ++0000ae50 <[^>]*> nop ++0000ae54 <[^>]*> nop ++0000ae58 <[^>]*> nop ++0000ae5c <[^>]*> nop ++0000ae60 <[^>]*> nop ++0000ae64 <[^>]*> nop ++0000ae68 <[^>]*> nop ++0000ae6c <[^>]*> nop ++0000ae70 <[^>]*> nop ++0000ae74 <[^>]*> nop ++0000ae78 <[^>]*> nop ++0000ae7c <[^>]*> nop ++0000ae80 <[^>]*> nop ++0000ae84 <[^>]*> nop ++0000ae88 <[^>]*> nop ++0000ae8c <[^>]*> nop ++0000ae90 <[^>]*> nop ++0000ae94 <[^>]*> nop ++0000ae98 <[^>]*> nop ++0000ae9c <[^>]*> nop ++0000aea0 <[^>]*> nop ++0000aea4 <[^>]*> nop ++0000aea8 <[^>]*> nop ++0000aeac <[^>]*> nop ++0000aeb0 <[^>]*> nop ++0000aeb4 <[^>]*> nop ++0000aeb8 <[^>]*> nop ++0000aebc <[^>]*> nop ++0000aec0 <[^>]*> nop ++0000aec4 <[^>]*> nop ++0000aec8 <[^>]*> nop ++0000aecc <[^>]*> nop ++0000aed0 <[^>]*> nop ++0000aed4 <[^>]*> nop ++0000aed8 <[^>]*> nop ++0000aedc <[^>]*> nop ++0000aee0 <[^>]*> nop ++0000aee4 <[^>]*> nop ++0000aee8 <[^>]*> nop ++0000aeec <[^>]*> nop ++0000aef0 <[^>]*> nop ++0000aef4 <[^>]*> nop ++0000aef8 <[^>]*> nop ++0000aefc <[^>]*> nop ++0000af00 <[^>]*> nop ++0000af04 <[^>]*> nop ++0000af08 <[^>]*> nop ++0000af0c <[^>]*> nop ++0000af10 <[^>]*> nop ++0000af14 <[^>]*> nop ++0000af18 <[^>]*> nop ++0000af1c <[^>]*> nop ++0000af20 <[^>]*> nop ++0000af24 <[^>]*> nop ++0000af28 <[^>]*> nop ++0000af2c <[^>]*> nop ++0000af30 <[^>]*> nop ++0000af34 <[^>]*> nop ++0000af38 <[^>]*> nop ++0000af3c <[^>]*> nop ++0000af40 <[^>]*> nop ++0000af44 <[^>]*> nop ++0000af48 <[^>]*> nop ++0000af4c <[^>]*> nop ++0000af50 <[^>]*> nop ++0000af54 <[^>]*> nop ++0000af58 <[^>]*> nop ++0000af5c <[^>]*> nop ++0000af60 <[^>]*> nop ++0000af64 <[^>]*> nop ++0000af68 <[^>]*> nop ++0000af6c <[^>]*> nop ++0000af70 <[^>]*> nop ++0000af74 <[^>]*> nop ++0000af78 <[^>]*> nop ++0000af7c <[^>]*> nop ++0000af80 <[^>]*> nop ++0000af84 <[^>]*> nop ++0000af88 <[^>]*> nop ++0000af8c <[^>]*> nop ++0000af90 <[^>]*> nop ++0000af94 <[^>]*> nop ++0000af98 <[^>]*> nop ++0000af9c <[^>]*> nop ++0000afa0 <[^>]*> nop ++0000afa4 <[^>]*> nop ++0000afa8 <[^>]*> nop ++0000afac <[^>]*> nop ++0000afb0 <[^>]*> nop ++0000afb4 <[^>]*> nop ++0000afb8 <[^>]*> nop ++0000afbc <[^>]*> nop ++0000afc0 <[^>]*> nop ++0000afc4 <[^>]*> nop ++0000afc8 <[^>]*> nop ++0000afcc <[^>]*> nop ++0000afd0 <[^>]*> nop ++0000afd4 <[^>]*> nop ++0000afd8 <[^>]*> nop ++0000afdc <[^>]*> nop ++0000afe0 <[^>]*> nop ++0000afe4 <[^>]*> nop ++0000afe8 <[^>]*> nop ++0000afec <[^>]*> nop ++0000aff0 <[^>]*> nop ++0000aff4 <[^>]*> nop ++0000aff8 <[^>]*> nop ++0000affc <[^>]*> nop ++0000b000 <[^>]*> nop ++0000b004 <[^>]*> nop ++0000b008 <[^>]*> nop ++0000b00c <[^>]*> nop ++0000b010 <[^>]*> nop ++0000b014 <[^>]*> nop ++0000b018 <[^>]*> nop ++0000b01c <[^>]*> nop ++0000b020 <[^>]*> nop ++0000b024 <[^>]*> nop ++0000b028 <[^>]*> nop ++0000b02c <[^>]*> nop ++0000b030 <[^>]*> nop ++0000b034 <[^>]*> nop ++0000b038 <[^>]*> nop ++0000b03c <[^>]*> nop ++0000b040 <[^>]*> nop ++0000b044 <[^>]*> nop ++0000b048 <[^>]*> nop ++0000b04c <[^>]*> nop ++0000b050 <[^>]*> nop ++0000b054 <[^>]*> nop ++0000b058 <[^>]*> nop ++0000b05c <[^>]*> nop ++0000b060 <[^>]*> nop ++0000b064 <[^>]*> nop ++0000b068 <[^>]*> nop ++0000b06c <[^>]*> nop ++0000b070 <[^>]*> nop ++0000b074 <[^>]*> nop ++0000b078 <[^>]*> nop ++0000b07c <[^>]*> nop ++0000b080 <[^>]*> nop ++0000b084 <[^>]*> nop ++0000b088 <[^>]*> nop ++0000b08c <[^>]*> nop ++0000b090 <[^>]*> nop ++0000b094 <[^>]*> nop ++0000b098 <[^>]*> nop ++0000b09c <[^>]*> nop ++0000b0a0 <[^>]*> nop ++0000b0a4 <[^>]*> nop ++0000b0a8 <[^>]*> nop ++0000b0ac <[^>]*> nop ++0000b0b0 <[^>]*> nop ++0000b0b4 <[^>]*> nop ++0000b0b8 <[^>]*> nop ++0000b0bc <[^>]*> nop ++0000b0c0 <[^>]*> nop ++0000b0c4 <[^>]*> nop ++0000b0c8 <[^>]*> nop ++0000b0cc <[^>]*> nop ++0000b0d0 <[^>]*> nop ++0000b0d4 <[^>]*> nop ++0000b0d8 <[^>]*> nop ++0000b0dc <[^>]*> nop ++0000b0e0 <[^>]*> nop ++0000b0e4 <[^>]*> nop ++0000b0e8 <[^>]*> nop ++0000b0ec <[^>]*> nop ++0000b0f0 <[^>]*> nop ++0000b0f4 <[^>]*> nop ++0000b0f8 <[^>]*> nop ++0000b0fc <[^>]*> nop ++0000b100 <[^>]*> nop ++0000b104 <[^>]*> nop ++0000b108 <[^>]*> nop ++0000b10c <[^>]*> nop ++0000b110 <[^>]*> nop ++0000b114 <[^>]*> nop ++0000b118 <[^>]*> nop ++0000b11c <[^>]*> nop ++0000b120 <[^>]*> nop ++0000b124 <[^>]*> nop ++0000b128 <[^>]*> nop ++0000b12c <[^>]*> nop ++0000b130 <[^>]*> nop ++0000b134 <[^>]*> nop ++0000b138 <[^>]*> nop ++0000b13c <[^>]*> nop ++0000b140 <[^>]*> nop ++0000b144 <[^>]*> nop ++0000b148 <[^>]*> nop ++0000b14c <[^>]*> nop ++0000b150 <[^>]*> nop ++0000b154 <[^>]*> nop ++0000b158 <[^>]*> nop ++0000b15c <[^>]*> nop ++0000b160 <[^>]*> nop ++0000b164 <[^>]*> nop ++0000b168 <[^>]*> nop ++0000b16c <[^>]*> nop ++0000b170 <[^>]*> nop ++0000b174 <[^>]*> nop ++0000b178 <[^>]*> nop ++0000b17c <[^>]*> nop ++0000b180 <[^>]*> nop ++0000b184 <[^>]*> nop ++0000b188 <[^>]*> nop ++0000b18c <[^>]*> nop ++0000b190 <[^>]*> nop ++0000b194 <[^>]*> nop ++0000b198 <[^>]*> nop ++0000b19c <[^>]*> nop ++0000b1a0 <[^>]*> nop ++0000b1a4 <[^>]*> nop ++0000b1a8 <[^>]*> nop ++0000b1ac <[^>]*> nop ++0000b1b0 <[^>]*> nop ++0000b1b4 <[^>]*> nop ++0000b1b8 <[^>]*> nop ++0000b1bc <[^>]*> nop ++0000b1c0 <[^>]*> nop ++0000b1c4 <[^>]*> nop ++0000b1c8 <[^>]*> nop ++0000b1cc <[^>]*> nop ++0000b1d0 <[^>]*> nop ++0000b1d4 <[^>]*> nop ++0000b1d8 <[^>]*> nop ++0000b1dc <[^>]*> nop ++0000b1e0 <[^>]*> nop ++0000b1e4 <[^>]*> nop ++0000b1e8 <[^>]*> nop ++0000b1ec <[^>]*> nop ++0000b1f0 <[^>]*> nop ++0000b1f4 <[^>]*> nop ++0000b1f8 <[^>]*> nop ++0000b1fc <[^>]*> nop ++0000b200 <[^>]*> nop ++0000b204 <[^>]*> nop ++0000b208 <[^>]*> nop ++0000b20c <[^>]*> nop ++0000b210 <[^>]*> nop ++0000b214 <[^>]*> nop ++0000b218 <[^>]*> nop ++0000b21c <[^>]*> nop ++0000b220 <[^>]*> nop ++0000b224 <[^>]*> nop ++0000b228 <[^>]*> nop ++0000b22c <[^>]*> nop ++0000b230 <[^>]*> nop ++0000b234 <[^>]*> nop ++0000b238 <[^>]*> nop ++0000b23c <[^>]*> nop ++0000b240 <[^>]*> nop ++0000b244 <[^>]*> nop ++0000b248 <[^>]*> nop ++0000b24c <[^>]*> nop ++0000b250 <[^>]*> nop ++0000b254 <[^>]*> nop ++0000b258 <[^>]*> nop ++0000b25c <[^>]*> nop ++0000b260 <[^>]*> nop ++0000b264 <[^>]*> nop ++0000b268 <[^>]*> nop ++0000b26c <[^>]*> nop ++0000b270 <[^>]*> nop ++0000b274 <[^>]*> nop ++0000b278 <[^>]*> nop ++0000b27c <[^>]*> nop ++0000b280 <[^>]*> nop ++0000b284 <[^>]*> nop ++0000b288 <[^>]*> nop ++0000b28c <[^>]*> nop ++0000b290 <[^>]*> nop ++0000b294 <[^>]*> nop ++0000b298 <[^>]*> nop ++0000b29c <[^>]*> nop ++0000b2a0 <[^>]*> nop ++0000b2a4 <[^>]*> nop ++0000b2a8 <[^>]*> nop ++0000b2ac <[^>]*> nop ++0000b2b0 <[^>]*> nop ++0000b2b4 <[^>]*> nop ++0000b2b8 <[^>]*> nop ++0000b2bc <[^>]*> nop ++0000b2c0 <[^>]*> nop ++0000b2c4 <[^>]*> nop ++0000b2c8 <[^>]*> nop ++0000b2cc <[^>]*> nop ++0000b2d0 <[^>]*> nop ++0000b2d4 <[^>]*> nop ++0000b2d8 <[^>]*> nop ++0000b2dc <[^>]*> nop ++0000b2e0 <[^>]*> nop ++0000b2e4 <[^>]*> nop ++0000b2e8 <[^>]*> nop ++0000b2ec <[^>]*> nop ++0000b2f0 <[^>]*> nop ++0000b2f4 <[^>]*> nop ++0000b2f8 <[^>]*> nop ++0000b2fc <[^>]*> nop ++0000b300 <[^>]*> nop ++0000b304 <[^>]*> nop ++0000b308 <[^>]*> nop ++0000b30c <[^>]*> nop ++0000b310 <[^>]*> nop ++0000b314 <[^>]*> nop ++0000b318 <[^>]*> nop ++0000b31c <[^>]*> nop ++0000b320 <[^>]*> nop ++0000b324 <[^>]*> nop ++0000b328 <[^>]*> nop ++0000b32c <[^>]*> nop ++0000b330 <[^>]*> nop ++0000b334 <[^>]*> nop ++0000b338 <[^>]*> nop ++0000b33c <[^>]*> nop ++0000b340 <[^>]*> nop ++0000b344 <[^>]*> nop ++0000b348 <[^>]*> nop ++0000b34c <[^>]*> nop ++0000b350 <[^>]*> nop ++0000b354 <[^>]*> nop ++0000b358 <[^>]*> nop ++0000b35c <[^>]*> nop ++0000b360 <[^>]*> nop ++0000b364 <[^>]*> nop ++0000b368 <[^>]*> nop ++0000b36c <[^>]*> nop ++0000b370 <[^>]*> nop ++0000b374 <[^>]*> nop ++0000b378 <[^>]*> nop ++0000b37c <[^>]*> nop ++0000b380 <[^>]*> nop ++0000b384 <[^>]*> nop ++0000b388 <[^>]*> nop ++0000b38c <[^>]*> nop ++0000b390 <[^>]*> nop ++0000b394 <[^>]*> nop ++0000b398 <[^>]*> nop ++0000b39c <[^>]*> nop ++0000b3a0 <[^>]*> nop ++0000b3a4 <[^>]*> nop ++0000b3a8 <[^>]*> nop ++0000b3ac <[^>]*> nop ++0000b3b0 <[^>]*> nop ++0000b3b4 <[^>]*> nop ++0000b3b8 <[^>]*> nop ++0000b3bc <[^>]*> nop ++0000b3c0 <[^>]*> nop ++0000b3c4 <[^>]*> nop ++0000b3c8 <[^>]*> nop ++0000b3cc <[^>]*> nop ++0000b3d0 <[^>]*> nop ++0000b3d4 <[^>]*> nop ++0000b3d8 <[^>]*> nop ++0000b3dc <[^>]*> nop ++0000b3e0 <[^>]*> nop ++0000b3e4 <[^>]*> nop ++0000b3e8 <[^>]*> nop ++0000b3ec <[^>]*> nop ++0000b3f0 <[^>]*> nop ++0000b3f4 <[^>]*> nop ++0000b3f8 <[^>]*> nop ++0000b3fc <[^>]*> nop ++0000b400 <[^>]*> nop ++0000b404 <[^>]*> nop ++0000b408 <[^>]*> nop ++0000b40c <[^>]*> nop ++0000b410 <[^>]*> nop ++0000b414 <[^>]*> nop ++0000b418 <[^>]*> nop ++0000b41c <[^>]*> nop ++0000b420 <[^>]*> nop ++0000b424 <[^>]*> nop ++0000b428 <[^>]*> nop ++0000b42c <[^>]*> nop ++0000b430 <[^>]*> nop ++0000b434 <[^>]*> nop ++0000b438 <[^>]*> nop ++0000b43c <[^>]*> nop ++0000b440 <[^>]*> nop ++0000b444 <[^>]*> nop ++0000b448 <[^>]*> nop ++0000b44c <[^>]*> nop ++0000b450 <[^>]*> nop ++0000b454 <[^>]*> nop ++0000b458 <[^>]*> nop ++0000b45c <[^>]*> nop ++0000b460 <[^>]*> nop ++0000b464 <[^>]*> nop ++0000b468 <[^>]*> nop ++0000b46c <[^>]*> nop ++0000b470 <[^>]*> nop ++0000b474 <[^>]*> nop ++0000b478 <[^>]*> nop ++0000b47c <[^>]*> nop ++0000b480 <[^>]*> nop ++0000b484 <[^>]*> nop ++0000b488 <[^>]*> nop ++0000b48c <[^>]*> nop ++0000b490 <[^>]*> nop ++0000b494 <[^>]*> nop ++0000b498 <[^>]*> nop ++0000b49c <[^>]*> nop ++0000b4a0 <[^>]*> nop ++0000b4a4 <[^>]*> nop ++0000b4a8 <[^>]*> nop ++0000b4ac <[^>]*> nop ++0000b4b0 <[^>]*> nop ++0000b4b4 <[^>]*> nop ++0000b4b8 <[^>]*> nop ++0000b4bc <[^>]*> nop ++0000b4c0 <[^>]*> nop ++0000b4c4 <[^>]*> nop ++0000b4c8 <[^>]*> nop ++0000b4cc <[^>]*> nop ++0000b4d0 <[^>]*> nop ++0000b4d4 <[^>]*> nop ++0000b4d8 <[^>]*> nop ++0000b4dc <[^>]*> nop ++0000b4e0 <[^>]*> nop ++0000b4e4 <[^>]*> nop ++0000b4e8 <[^>]*> nop ++0000b4ec <[^>]*> nop ++0000b4f0 <[^>]*> nop ++0000b4f4 <[^>]*> nop ++0000b4f8 <[^>]*> nop ++0000b4fc <[^>]*> nop ++0000b500 <[^>]*> nop ++0000b504 <[^>]*> nop ++0000b508 <[^>]*> nop ++0000b50c <[^>]*> nop ++0000b510 <[^>]*> nop ++0000b514 <[^>]*> nop ++0000b518 <[^>]*> nop ++0000b51c <[^>]*> nop ++0000b520 <[^>]*> nop ++0000b524 <[^>]*> nop ++0000b528 <[^>]*> nop ++0000b52c <[^>]*> nop ++0000b530 <[^>]*> nop ++0000b534 <[^>]*> nop ++0000b538 <[^>]*> nop ++0000b53c <[^>]*> nop ++0000b540 <[^>]*> nop ++0000b544 <[^>]*> nop ++0000b548 <[^>]*> nop ++0000b54c <[^>]*> nop ++0000b550 <[^>]*> nop ++0000b554 <[^>]*> nop ++0000b558 <[^>]*> nop ++0000b55c <[^>]*> nop ++0000b560 <[^>]*> nop ++0000b564 <[^>]*> nop ++0000b568 <[^>]*> nop ++0000b56c <[^>]*> nop ++0000b570 <[^>]*> nop ++0000b574 <[^>]*> nop ++0000b578 <[^>]*> nop ++0000b57c <[^>]*> nop ++0000b580 <[^>]*> nop ++0000b584 <[^>]*> nop ++0000b588 <[^>]*> nop ++0000b58c <[^>]*> nop ++0000b590 <[^>]*> nop ++0000b594 <[^>]*> nop ++0000b598 <[^>]*> nop ++0000b59c <[^>]*> nop ++0000b5a0 <[^>]*> nop ++0000b5a4 <[^>]*> nop ++0000b5a8 <[^>]*> nop ++0000b5ac <[^>]*> nop ++0000b5b0 <[^>]*> nop ++0000b5b4 <[^>]*> nop ++0000b5b8 <[^>]*> nop ++0000b5bc <[^>]*> nop ++0000b5c0 <[^>]*> nop ++0000b5c4 <[^>]*> nop ++0000b5c8 <[^>]*> nop ++0000b5cc <[^>]*> nop ++0000b5d0 <[^>]*> nop ++0000b5d4 <[^>]*> nop ++0000b5d8 <[^>]*> nop ++0000b5dc <[^>]*> nop ++0000b5e0 <[^>]*> nop ++0000b5e4 <[^>]*> nop ++0000b5e8 <[^>]*> nop ++0000b5ec <[^>]*> nop ++0000b5f0 <[^>]*> nop ++0000b5f4 <[^>]*> nop ++0000b5f8 <[^>]*> nop ++0000b5fc <[^>]*> nop ++0000b600 <[^>]*> nop ++0000b604 <[^>]*> nop ++0000b608 <[^>]*> nop ++0000b60c <[^>]*> nop ++0000b610 <[^>]*> nop ++0000b614 <[^>]*> nop ++0000b618 <[^>]*> nop ++0000b61c <[^>]*> nop ++0000b620 <[^>]*> nop ++0000b624 <[^>]*> nop ++0000b628 <[^>]*> nop ++0000b62c <[^>]*> nop ++0000b630 <[^>]*> nop ++0000b634 <[^>]*> nop ++0000b638 <[^>]*> nop ++0000b63c <[^>]*> nop ++0000b640 <[^>]*> nop ++0000b644 <[^>]*> nop ++0000b648 <[^>]*> nop ++0000b64c <[^>]*> nop ++0000b650 <[^>]*> nop ++0000b654 <[^>]*> nop ++0000b658 <[^>]*> nop ++0000b65c <[^>]*> nop ++0000b660 <[^>]*> nop ++0000b664 <[^>]*> nop ++0000b668 <[^>]*> nop ++0000b66c <[^>]*> nop ++0000b670 <[^>]*> nop ++0000b674 <[^>]*> nop ++0000b678 <[^>]*> nop ++0000b67c <[^>]*> nop ++0000b680 <[^>]*> nop ++0000b684 <[^>]*> nop ++0000b688 <[^>]*> nop ++0000b68c <[^>]*> nop ++0000b690 <[^>]*> nop ++0000b694 <[^>]*> nop ++0000b698 <[^>]*> nop ++0000b69c <[^>]*> nop ++0000b6a0 <[^>]*> nop ++0000b6a4 <[^>]*> nop ++0000b6a8 <[^>]*> nop ++0000b6ac <[^>]*> nop ++0000b6b0 <[^>]*> nop ++0000b6b4 <[^>]*> nop ++0000b6b8 <[^>]*> nop ++0000b6bc <[^>]*> nop ++0000b6c0 <[^>]*> nop ++0000b6c4 <[^>]*> nop ++0000b6c8 <[^>]*> nop ++0000b6cc <[^>]*> nop ++0000b6d0 <[^>]*> nop ++0000b6d4 <[^>]*> nop ++0000b6d8 <[^>]*> nop ++0000b6dc <[^>]*> nop ++0000b6e0 <[^>]*> nop ++0000b6e4 <[^>]*> nop ++0000b6e8 <[^>]*> nop ++0000b6ec <[^>]*> nop ++0000b6f0 <[^>]*> nop ++0000b6f4 <[^>]*> nop ++0000b6f8 <[^>]*> nop ++0000b6fc <[^>]*> nop ++0000b700 <[^>]*> nop ++0000b704 <[^>]*> nop ++0000b708 <[^>]*> nop ++0000b70c <[^>]*> nop ++0000b710 <[^>]*> nop ++0000b714 <[^>]*> nop ++0000b718 <[^>]*> nop ++0000b71c <[^>]*> nop ++0000b720 <[^>]*> nop ++0000b724 <[^>]*> nop ++0000b728 <[^>]*> nop ++0000b72c <[^>]*> nop ++0000b730 <[^>]*> nop ++0000b734 <[^>]*> nop ++0000b738 <[^>]*> nop ++0000b73c <[^>]*> nop ++0000b740 <[^>]*> nop ++0000b744 <[^>]*> nop ++0000b748 <[^>]*> nop ++0000b74c <[^>]*> nop ++0000b750 <[^>]*> nop ++0000b754 <[^>]*> nop ++0000b758 <[^>]*> nop ++0000b75c <[^>]*> nop ++0000b760 <[^>]*> nop ++0000b764 <[^>]*> nop ++0000b768 <[^>]*> nop ++0000b76c <[^>]*> nop ++0000b770 <[^>]*> nop ++0000b774 <[^>]*> nop ++0000b778 <[^>]*> nop ++0000b77c <[^>]*> nop ++0000b780 <[^>]*> nop ++0000b784 <[^>]*> nop ++0000b788 <[^>]*> nop ++0000b78c <[^>]*> nop ++0000b790 <[^>]*> nop ++0000b794 <[^>]*> nop ++0000b798 <[^>]*> nop ++0000b79c <[^>]*> nop ++0000b7a0 <[^>]*> nop ++0000b7a4 <[^>]*> nop ++0000b7a8 <[^>]*> nop ++0000b7ac <[^>]*> nop ++0000b7b0 <[^>]*> nop ++0000b7b4 <[^>]*> nop ++0000b7b8 <[^>]*> nop ++0000b7bc <[^>]*> nop ++0000b7c0 <[^>]*> nop ++0000b7c4 <[^>]*> nop ++0000b7c8 <[^>]*> nop ++0000b7cc <[^>]*> nop ++0000b7d0 <[^>]*> nop ++0000b7d4 <[^>]*> nop ++0000b7d8 <[^>]*> nop ++0000b7dc <[^>]*> nop ++0000b7e0 <[^>]*> nop ++0000b7e4 <[^>]*> nop ++0000b7e8 <[^>]*> nop ++0000b7ec <[^>]*> nop ++0000b7f0 <[^>]*> nop ++0000b7f4 <[^>]*> nop ++0000b7f8 <[^>]*> nop ++0000b7fc <[^>]*> nop ++0000b800 <[^>]*> nop ++0000b804 <[^>]*> nop ++0000b808 <[^>]*> nop ++0000b80c <[^>]*> nop ++0000b810 <[^>]*> nop ++0000b814 <[^>]*> nop ++0000b818 <[^>]*> nop ++0000b81c <[^>]*> nop ++0000b820 <[^>]*> nop ++0000b824 <[^>]*> nop ++0000b828 <[^>]*> nop ++0000b82c <[^>]*> nop ++0000b830 <[^>]*> nop ++0000b834 <[^>]*> nop ++0000b838 <[^>]*> nop ++0000b83c <[^>]*> nop ++0000b840 <[^>]*> nop ++0000b844 <[^>]*> nop ++0000b848 <[^>]*> nop ++0000b84c <[^>]*> nop ++0000b850 <[^>]*> nop ++0000b854 <[^>]*> nop ++0000b858 <[^>]*> nop ++0000b85c <[^>]*> nop ++0000b860 <[^>]*> nop ++0000b864 <[^>]*> nop ++0000b868 <[^>]*> nop ++0000b86c <[^>]*> nop ++0000b870 <[^>]*> nop ++0000b874 <[^>]*> nop ++0000b878 <[^>]*> nop ++0000b87c <[^>]*> nop ++0000b880 <[^>]*> nop ++0000b884 <[^>]*> nop ++0000b888 <[^>]*> nop ++0000b88c <[^>]*> nop ++0000b890 <[^>]*> nop ++0000b894 <[^>]*> nop ++0000b898 <[^>]*> nop ++0000b89c <[^>]*> nop ++0000b8a0 <[^>]*> nop ++0000b8a4 <[^>]*> nop ++0000b8a8 <[^>]*> nop ++0000b8ac <[^>]*> nop ++0000b8b0 <[^>]*> nop ++0000b8b4 <[^>]*> nop ++0000b8b8 <[^>]*> nop ++0000b8bc <[^>]*> nop ++0000b8c0 <[^>]*> nop ++0000b8c4 <[^>]*> nop ++0000b8c8 <[^>]*> nop ++0000b8cc <[^>]*> nop ++0000b8d0 <[^>]*> nop ++0000b8d4 <[^>]*> nop ++0000b8d8 <[^>]*> nop ++0000b8dc <[^>]*> nop ++0000b8e0 <[^>]*> nop ++0000b8e4 <[^>]*> nop ++0000b8e8 <[^>]*> nop ++0000b8ec <[^>]*> nop ++0000b8f0 <[^>]*> nop ++0000b8f4 <[^>]*> nop ++0000b8f8 <[^>]*> nop ++0000b8fc <[^>]*> nop ++0000b900 <[^>]*> nop ++0000b904 <[^>]*> nop ++0000b908 <[^>]*> nop ++0000b90c <[^>]*> nop ++0000b910 <[^>]*> nop ++0000b914 <[^>]*> nop ++0000b918 <[^>]*> nop ++0000b91c <[^>]*> nop ++0000b920 <[^>]*> nop ++0000b924 <[^>]*> nop ++0000b928 <[^>]*> nop ++0000b92c <[^>]*> nop ++0000b930 <[^>]*> nop ++0000b934 <[^>]*> nop ++0000b938 <[^>]*> nop ++0000b93c <[^>]*> nop ++0000b940 <[^>]*> nop ++0000b944 <[^>]*> nop ++0000b948 <[^>]*> nop ++0000b94c <[^>]*> nop ++0000b950 <[^>]*> nop ++0000b954 <[^>]*> nop ++0000b958 <[^>]*> nop ++0000b95c <[^>]*> nop ++0000b960 <[^>]*> nop ++0000b964 <[^>]*> nop ++0000b968 <[^>]*> nop ++0000b96c <[^>]*> nop ++0000b970 <[^>]*> nop ++0000b974 <[^>]*> nop ++0000b978 <[^>]*> nop ++0000b97c <[^>]*> nop ++0000b980 <[^>]*> nop ++0000b984 <[^>]*> nop ++0000b988 <[^>]*> nop ++0000b98c <[^>]*> nop ++0000b990 <[^>]*> nop ++0000b994 <[^>]*> nop ++0000b998 <[^>]*> nop ++0000b99c <[^>]*> nop ++0000b9a0 <[^>]*> nop ++0000b9a4 <[^>]*> nop ++0000b9a8 <[^>]*> nop ++0000b9ac <[^>]*> nop ++0000b9b0 <[^>]*> nop ++0000b9b4 <[^>]*> nop ++0000b9b8 <[^>]*> nop ++0000b9bc <[^>]*> nop ++0000b9c0 <[^>]*> nop ++0000b9c4 <[^>]*> nop ++0000b9c8 <[^>]*> nop ++0000b9cc <[^>]*> nop ++0000b9d0 <[^>]*> nop ++0000b9d4 <[^>]*> nop ++0000b9d8 <[^>]*> nop ++0000b9dc <[^>]*> nop ++0000b9e0 <[^>]*> nop ++0000b9e4 <[^>]*> nop ++0000b9e8 <[^>]*> nop ++0000b9ec <[^>]*> nop ++0000b9f0 <[^>]*> nop ++0000b9f4 <[^>]*> nop ++0000b9f8 <[^>]*> nop ++0000b9fc <[^>]*> nop ++0000ba00 <[^>]*> nop ++0000ba04 <[^>]*> nop ++0000ba08 <[^>]*> nop ++0000ba0c <[^>]*> nop ++0000ba10 <[^>]*> nop ++0000ba14 <[^>]*> nop ++0000ba18 <[^>]*> nop ++0000ba1c <[^>]*> nop ++0000ba20 <[^>]*> nop ++0000ba24 <[^>]*> nop ++0000ba28 <[^>]*> nop ++0000ba2c <[^>]*> nop ++0000ba30 <[^>]*> nop ++0000ba34 <[^>]*> nop ++0000ba38 <[^>]*> nop ++0000ba3c <[^>]*> nop ++0000ba40 <[^>]*> nop ++0000ba44 <[^>]*> nop ++0000ba48 <[^>]*> nop ++0000ba4c <[^>]*> nop ++0000ba50 <[^>]*> nop ++0000ba54 <[^>]*> nop ++0000ba58 <[^>]*> nop ++0000ba5c <[^>]*> nop ++0000ba60 <[^>]*> nop ++0000ba64 <[^>]*> nop ++0000ba68 <[^>]*> nop ++0000ba6c <[^>]*> nop ++0000ba70 <[^>]*> nop ++0000ba74 <[^>]*> nop ++0000ba78 <[^>]*> nop ++0000ba7c <[^>]*> nop ++0000ba80 <[^>]*> nop ++0000ba84 <[^>]*> nop ++0000ba88 <[^>]*> nop ++0000ba8c <[^>]*> nop ++0000ba90 <[^>]*> nop ++0000ba94 <[^>]*> nop ++0000ba98 <[^>]*> nop ++0000ba9c <[^>]*> nop ++0000baa0 <[^>]*> nop ++0000baa4 <[^>]*> nop ++0000baa8 <[^>]*> nop ++0000baac <[^>]*> nop ++0000bab0 <[^>]*> nop ++0000bab4 <[^>]*> nop ++0000bab8 <[^>]*> nop ++0000babc <[^>]*> nop ++0000bac0 <[^>]*> nop ++0000bac4 <[^>]*> nop ++0000bac8 <[^>]*> nop ++0000bacc <[^>]*> nop ++0000bad0 <[^>]*> nop ++0000bad4 <[^>]*> nop ++0000bad8 <[^>]*> nop ++0000badc <[^>]*> nop ++0000bae0 <[^>]*> nop ++0000bae4 <[^>]*> nop ++0000bae8 <[^>]*> nop ++0000baec <[^>]*> nop ++0000baf0 <[^>]*> nop ++0000baf4 <[^>]*> nop ++0000baf8 <[^>]*> nop ++0000bafc <[^>]*> nop ++0000bb00 <[^>]*> nop ++0000bb04 <[^>]*> nop ++0000bb08 <[^>]*> nop ++0000bb0c <[^>]*> nop ++0000bb10 <[^>]*> nop ++0000bb14 <[^>]*> nop ++0000bb18 <[^>]*> nop ++0000bb1c <[^>]*> nop ++0000bb20 <[^>]*> nop ++0000bb24 <[^>]*> nop ++0000bb28 <[^>]*> nop ++0000bb2c <[^>]*> nop ++0000bb30 <[^>]*> nop ++0000bb34 <[^>]*> nop ++0000bb38 <[^>]*> nop ++0000bb3c <[^>]*> nop ++0000bb40 <[^>]*> nop ++0000bb44 <[^>]*> nop ++0000bb48 <[^>]*> nop ++0000bb4c <[^>]*> nop ++0000bb50 <[^>]*> nop ++0000bb54 <[^>]*> nop ++0000bb58 <[^>]*> nop ++0000bb5c <[^>]*> nop ++0000bb60 <[^>]*> nop ++0000bb64 <[^>]*> nop ++0000bb68 <[^>]*> nop ++0000bb6c <[^>]*> nop ++0000bb70 <[^>]*> nop ++0000bb74 <[^>]*> nop ++0000bb78 <[^>]*> nop ++0000bb7c <[^>]*> nop ++0000bb80 <[^>]*> nop ++0000bb84 <[^>]*> nop ++0000bb88 <[^>]*> nop ++0000bb8c <[^>]*> nop ++0000bb90 <[^>]*> nop ++0000bb94 <[^>]*> nop ++0000bb98 <[^>]*> nop ++0000bb9c <[^>]*> nop ++0000bba0 <[^>]*> nop ++0000bba4 <[^>]*> nop ++0000bba8 <[^>]*> nop ++0000bbac <[^>]*> nop ++0000bbb0 <[^>]*> nop ++0000bbb4 <[^>]*> nop ++0000bbb8 <[^>]*> nop ++0000bbbc <[^>]*> nop ++0000bbc0 <[^>]*> nop ++0000bbc4 <[^>]*> nop ++0000bbc8 <[^>]*> nop ++0000bbcc <[^>]*> nop ++0000bbd0 <[^>]*> nop ++0000bbd4 <[^>]*> nop ++0000bbd8 <[^>]*> nop ++0000bbdc <[^>]*> nop ++0000bbe0 <[^>]*> nop ++0000bbe4 <[^>]*> nop ++0000bbe8 <[^>]*> nop ++0000bbec <[^>]*> nop ++0000bbf0 <[^>]*> nop ++0000bbf4 <[^>]*> nop ++0000bbf8 <[^>]*> nop ++0000bbfc <[^>]*> nop ++0000bc00 <[^>]*> nop ++0000bc04 <[^>]*> nop ++0000bc08 <[^>]*> nop ++0000bc0c <[^>]*> nop ++0000bc10 <[^>]*> nop ++0000bc14 <[^>]*> nop ++0000bc18 <[^>]*> nop ++0000bc1c <[^>]*> nop ++0000bc20 <[^>]*> nop ++0000bc24 <[^>]*> nop ++0000bc28 <[^>]*> nop ++0000bc2c <[^>]*> nop ++0000bc30 <[^>]*> nop ++0000bc34 <[^>]*> nop ++0000bc38 <[^>]*> nop ++0000bc3c <[^>]*> nop ++0000bc40 <[^>]*> nop ++0000bc44 <[^>]*> nop ++0000bc48 <[^>]*> nop ++0000bc4c <[^>]*> nop ++0000bc50 <[^>]*> nop ++0000bc54 <[^>]*> nop ++0000bc58 <[^>]*> nop ++0000bc5c <[^>]*> nop ++0000bc60 <[^>]*> nop ++0000bc64 <[^>]*> nop ++0000bc68 <[^>]*> nop ++0000bc6c <[^>]*> nop ++0000bc70 <[^>]*> nop ++0000bc74 <[^>]*> nop ++0000bc78 <[^>]*> nop ++0000bc7c <[^>]*> nop ++0000bc80 <[^>]*> nop ++0000bc84 <[^>]*> nop ++0000bc88 <[^>]*> nop ++0000bc8c <[^>]*> nop ++0000bc90 <[^>]*> nop ++0000bc94 <[^>]*> nop ++0000bc98 <[^>]*> nop ++0000bc9c <[^>]*> nop ++0000bca0 <[^>]*> nop ++0000bca4 <[^>]*> nop ++0000bca8 <[^>]*> nop ++0000bcac <[^>]*> nop ++0000bcb0 <[^>]*> nop ++0000bcb4 <[^>]*> nop ++0000bcb8 <[^>]*> nop ++0000bcbc <[^>]*> nop ++0000bcc0 <[^>]*> nop ++0000bcc4 <[^>]*> nop ++0000bcc8 <[^>]*> nop ++0000bccc <[^>]*> nop ++0000bcd0 <[^>]*> nop ++0000bcd4 <[^>]*> nop ++0000bcd8 <[^>]*> nop ++0000bcdc <[^>]*> nop ++0000bce0 <[^>]*> nop ++0000bce4 <[^>]*> nop ++0000bce8 <[^>]*> nop ++0000bcec <[^>]*> nop ++0000bcf0 <[^>]*> nop ++0000bcf4 <[^>]*> nop ++0000bcf8 <[^>]*> nop ++0000bcfc <[^>]*> nop ++0000bd00 <[^>]*> nop ++0000bd04 <[^>]*> nop ++0000bd08 <[^>]*> nop ++0000bd0c <[^>]*> nop ++0000bd10 <[^>]*> nop ++0000bd14 <[^>]*> nop ++0000bd18 <[^>]*> nop ++0000bd1c <[^>]*> nop ++0000bd20 <[^>]*> nop ++0000bd24 <[^>]*> nop ++0000bd28 <[^>]*> nop ++0000bd2c <[^>]*> nop ++0000bd30 <[^>]*> nop ++0000bd34 <[^>]*> nop ++0000bd38 <[^>]*> nop ++0000bd3c <[^>]*> nop ++0000bd40 <[^>]*> nop ++0000bd44 <[^>]*> nop ++0000bd48 <[^>]*> nop ++0000bd4c <[^>]*> nop ++0000bd50 <[^>]*> nop ++0000bd54 <[^>]*> nop ++0000bd58 <[^>]*> nop ++0000bd5c <[^>]*> nop ++0000bd60 <[^>]*> nop ++0000bd64 <[^>]*> nop ++0000bd68 <[^>]*> nop ++0000bd6c <[^>]*> nop ++0000bd70 <[^>]*> nop ++0000bd74 <[^>]*> nop ++0000bd78 <[^>]*> nop ++0000bd7c <[^>]*> nop ++0000bd80 <[^>]*> nop ++0000bd84 <[^>]*> nop ++0000bd88 <[^>]*> nop ++0000bd8c <[^>]*> nop ++0000bd90 <[^>]*> nop ++0000bd94 <[^>]*> nop ++0000bd98 <[^>]*> nop ++0000bd9c <[^>]*> nop ++0000bda0 <[^>]*> nop ++0000bda4 <[^>]*> nop ++0000bda8 <[^>]*> nop ++0000bdac <[^>]*> nop ++0000bdb0 <[^>]*> nop ++0000bdb4 <[^>]*> nop ++0000bdb8 <[^>]*> nop ++0000bdbc <[^>]*> nop ++0000bdc0 <[^>]*> nop ++0000bdc4 <[^>]*> nop ++0000bdc8 <[^>]*> nop ++0000bdcc <[^>]*> nop ++0000bdd0 <[^>]*> nop ++0000bdd4 <[^>]*> nop ++0000bdd8 <[^>]*> nop ++0000bddc <[^>]*> nop ++0000bde0 <[^>]*> nop ++0000bde4 <[^>]*> nop ++0000bde8 <[^>]*> nop ++0000bdec <[^>]*> nop ++0000bdf0 <[^>]*> nop ++0000bdf4 <[^>]*> nop ++0000bdf8 <[^>]*> nop ++0000bdfc <[^>]*> nop ++0000be00 <[^>]*> nop ++0000be04 <[^>]*> nop ++0000be08 <[^>]*> nop ++0000be0c <[^>]*> nop ++0000be10 <[^>]*> nop ++0000be14 <[^>]*> nop ++0000be18 <[^>]*> nop ++0000be1c <[^>]*> nop ++0000be20 <[^>]*> nop ++0000be24 <[^>]*> nop ++0000be28 <[^>]*> nop ++0000be2c <[^>]*> nop ++0000be30 <[^>]*> nop ++0000be34 <[^>]*> nop ++0000be38 <[^>]*> nop ++0000be3c <[^>]*> nop ++0000be40 <[^>]*> nop ++0000be44 <[^>]*> nop ++0000be48 <[^>]*> nop ++0000be4c <[^>]*> nop ++0000be50 <[^>]*> nop ++0000be54 <[^>]*> nop ++0000be58 <[^>]*> nop ++0000be5c <[^>]*> nop ++0000be60 <[^>]*> nop ++0000be64 <[^>]*> nop ++0000be68 <[^>]*> nop ++0000be6c <[^>]*> nop ++0000be70 <[^>]*> nop ++0000be74 <[^>]*> nop ++0000be78 <[^>]*> nop ++0000be7c <[^>]*> nop ++0000be80 <[^>]*> nop ++0000be84 <[^>]*> nop ++0000be88 <[^>]*> nop ++0000be8c <[^>]*> nop ++0000be90 <[^>]*> nop ++0000be94 <[^>]*> nop ++0000be98 <[^>]*> nop ++0000be9c <[^>]*> nop ++0000bea0 <[^>]*> nop ++0000bea4 <[^>]*> nop ++0000bea8 <[^>]*> nop ++0000beac <[^>]*> nop ++0000beb0 <[^>]*> nop ++0000beb4 <[^>]*> nop ++0000beb8 <[^>]*> nop ++0000bebc <[^>]*> nop ++0000bec0 <[^>]*> nop ++0000bec4 <[^>]*> nop ++0000bec8 <[^>]*> nop ++0000becc <[^>]*> nop ++0000bed0 <[^>]*> nop ++0000bed4 <[^>]*> nop ++0000bed8 <[^>]*> nop ++0000bedc <[^>]*> nop ++0000bee0 <[^>]*> nop ++0000bee4 <[^>]*> nop ++0000bee8 <[^>]*> nop ++0000beec <[^>]*> nop ++0000bef0 <[^>]*> nop ++0000bef4 <[^>]*> nop ++0000bef8 <[^>]*> nop ++0000befc <[^>]*> nop ++0000bf00 <[^>]*> nop ++0000bf04 <[^>]*> nop ++0000bf08 <[^>]*> nop ++0000bf0c <[^>]*> nop ++0000bf10 <[^>]*> nop ++0000bf14 <[^>]*> nop ++0000bf18 <[^>]*> nop ++0000bf1c <[^>]*> nop ++0000bf20 <[^>]*> nop ++0000bf24 <[^>]*> nop ++0000bf28 <[^>]*> nop ++0000bf2c <[^>]*> nop ++0000bf30 <[^>]*> nop ++0000bf34 <[^>]*> nop ++0000bf38 <[^>]*> nop ++0000bf3c <[^>]*> nop ++0000bf40 <[^>]*> nop ++0000bf44 <[^>]*> nop ++0000bf48 <[^>]*> nop ++0000bf4c <[^>]*> nop ++0000bf50 <[^>]*> nop ++0000bf54 <[^>]*> nop ++0000bf58 <[^>]*> nop ++0000bf5c <[^>]*> nop ++0000bf60 <[^>]*> nop ++0000bf64 <[^>]*> nop ++0000bf68 <[^>]*> nop ++0000bf6c <[^>]*> nop ++0000bf70 <[^>]*> nop ++0000bf74 <[^>]*> nop ++0000bf78 <[^>]*> nop ++0000bf7c <[^>]*> nop ++0000bf80 <[^>]*> nop ++0000bf84 <[^>]*> nop ++0000bf88 <[^>]*> nop ++0000bf8c <[^>]*> nop ++0000bf90 <[^>]*> nop ++0000bf94 <[^>]*> nop ++0000bf98 <[^>]*> nop ++0000bf9c <[^>]*> nop ++0000bfa0 <[^>]*> nop ++0000bfa4 <[^>]*> nop ++0000bfa8 <[^>]*> nop ++0000bfac <[^>]*> nop ++0000bfb0 <[^>]*> nop ++0000bfb4 <[^>]*> nop ++0000bfb8 <[^>]*> nop ++0000bfbc <[^>]*> nop ++0000bfc0 <[^>]*> nop ++0000bfc4 <[^>]*> nop ++0000bfc8 <[^>]*> nop ++0000bfcc <[^>]*> nop ++0000bfd0 <[^>]*> nop ++0000bfd4 <[^>]*> nop ++0000bfd8 <[^>]*> nop ++0000bfdc <[^>]*> nop ++0000bfe0 <[^>]*> nop ++0000bfe4 <[^>]*> nop ++0000bfe8 <[^>]*> nop ++0000bfec <[^>]*> nop ++0000bff0 <[^>]*> nop ++0000bff4 <[^>]*> nop ++0000bff8 <[^>]*> nop ++0000bffc <[^>]*> nop ++0000c000 <[^>]*> nop ++0000c004 <[^>]*> nop ++0000c008 <[^>]*> nop ++0000c00c <[^>]*> nop ++0000c010 <[^>]*> nop ++0000c014 <[^>]*> nop ++0000c018 <[^>]*> nop ++0000c01c <[^>]*> nop ++0000c020 <[^>]*> nop ++0000c024 <[^>]*> nop ++0000c028 <[^>]*> nop ++0000c02c <[^>]*> nop ++0000c030 <[^>]*> nop ++0000c034 <[^>]*> nop ++0000c038 <[^>]*> nop ++0000c03c <[^>]*> nop ++0000c040 <[^>]*> nop ++0000c044 <[^>]*> nop ++0000c048 <[^>]*> nop ++0000c04c <[^>]*> nop ++0000c050 <[^>]*> nop ++0000c054 <[^>]*> nop ++0000c058 <[^>]*> nop ++0000c05c <[^>]*> nop ++0000c060 <[^>]*> nop ++0000c064 <[^>]*> nop ++0000c068 <[^>]*> nop ++0000c06c <[^>]*> nop ++0000c070 <[^>]*> nop ++0000c074 <[^>]*> nop ++0000c078 <[^>]*> nop ++0000c07c <[^>]*> nop ++0000c080 <[^>]*> nop ++0000c084 <[^>]*> nop ++0000c088 <[^>]*> nop ++0000c08c <[^>]*> nop ++0000c090 <[^>]*> nop ++0000c094 <[^>]*> nop ++0000c098 <[^>]*> nop ++0000c09c <[^>]*> nop ++0000c0a0 <[^>]*> nop ++0000c0a4 <[^>]*> nop ++0000c0a8 <[^>]*> nop ++0000c0ac <[^>]*> nop ++0000c0b0 <[^>]*> nop ++0000c0b4 <[^>]*> nop ++0000c0b8 <[^>]*> nop ++0000c0bc <[^>]*> nop ++0000c0c0 <[^>]*> nop ++0000c0c4 <[^>]*> nop ++0000c0c8 <[^>]*> nop ++0000c0cc <[^>]*> nop ++0000c0d0 <[^>]*> nop ++0000c0d4 <[^>]*> nop ++0000c0d8 <[^>]*> nop ++0000c0dc <[^>]*> nop ++0000c0e0 <[^>]*> nop ++0000c0e4 <[^>]*> nop ++0000c0e8 <[^>]*> nop ++0000c0ec <[^>]*> nop ++0000c0f0 <[^>]*> nop ++0000c0f4 <[^>]*> nop ++0000c0f8 <[^>]*> nop ++0000c0fc <[^>]*> nop ++0000c100 <[^>]*> nop ++0000c104 <[^>]*> nop ++0000c108 <[^>]*> nop ++0000c10c <[^>]*> nop ++0000c110 <[^>]*> nop ++0000c114 <[^>]*> nop ++0000c118 <[^>]*> nop ++0000c11c <[^>]*> nop ++0000c120 <[^>]*> nop ++0000c124 <[^>]*> nop ++0000c128 <[^>]*> nop ++0000c12c <[^>]*> nop ++0000c130 <[^>]*> nop ++0000c134 <[^>]*> nop ++0000c138 <[^>]*> nop ++0000c13c <[^>]*> nop ++0000c140 <[^>]*> nop ++0000c144 <[^>]*> nop ++0000c148 <[^>]*> nop ++0000c14c <[^>]*> nop ++0000c150 <[^>]*> nop ++0000c154 <[^>]*> nop ++0000c158 <[^>]*> nop ++0000c15c <[^>]*> nop ++0000c160 <[^>]*> nop ++0000c164 <[^>]*> nop ++0000c168 <[^>]*> nop ++0000c16c <[^>]*> nop ++0000c170 <[^>]*> nop ++0000c174 <[^>]*> nop ++0000c178 <[^>]*> nop ++0000c17c <[^>]*> nop ++0000c180 <[^>]*> nop ++0000c184 <[^>]*> nop ++0000c188 <[^>]*> nop ++0000c18c <[^>]*> nop ++0000c190 <[^>]*> nop ++0000c194 <[^>]*> nop ++0000c198 <[^>]*> nop ++0000c19c <[^>]*> nop ++0000c1a0 <[^>]*> nop ++0000c1a4 <[^>]*> nop ++0000c1a8 <[^>]*> nop ++0000c1ac <[^>]*> nop ++0000c1b0 <[^>]*> nop ++0000c1b4 <[^>]*> nop ++0000c1b8 <[^>]*> nop ++0000c1bc <[^>]*> nop ++0000c1c0 <[^>]*> nop ++0000c1c4 <[^>]*> nop ++0000c1c8 <[^>]*> nop ++0000c1cc <[^>]*> nop ++0000c1d0 <[^>]*> nop ++0000c1d4 <[^>]*> nop ++0000c1d8 <[^>]*> nop ++0000c1dc <[^>]*> nop ++0000c1e0 <[^>]*> nop ++0000c1e4 <[^>]*> nop ++0000c1e8 <[^>]*> nop ++0000c1ec <[^>]*> nop ++0000c1f0 <[^>]*> nop ++0000c1f4 <[^>]*> nop ++0000c1f8 <[^>]*> nop ++0000c1fc <[^>]*> nop ++0000c200 <[^>]*> nop ++0000c204 <[^>]*> nop ++0000c208 <[^>]*> nop ++0000c20c <[^>]*> nop ++0000c210 <[^>]*> nop ++0000c214 <[^>]*> nop ++0000c218 <[^>]*> nop ++0000c21c <[^>]*> nop ++0000c220 <[^>]*> nop ++0000c224 <[^>]*> nop ++0000c228 <[^>]*> nop ++0000c22c <[^>]*> nop ++0000c230 <[^>]*> nop ++0000c234 <[^>]*> nop ++0000c238 <[^>]*> nop ++0000c23c <[^>]*> nop ++0000c240 <[^>]*> nop ++0000c244 <[^>]*> nop ++0000c248 <[^>]*> nop ++0000c24c <[^>]*> nop ++0000c250 <[^>]*> nop ++0000c254 <[^>]*> nop ++0000c258 <[^>]*> nop ++0000c25c <[^>]*> nop ++0000c260 <[^>]*> nop ++0000c264 <[^>]*> nop ++0000c268 <[^>]*> nop ++0000c26c <[^>]*> nop ++0000c270 <[^>]*> nop ++0000c274 <[^>]*> nop ++0000c278 <[^>]*> nop ++0000c27c <[^>]*> nop ++0000c280 <[^>]*> nop ++0000c284 <[^>]*> nop ++0000c288 <[^>]*> nop ++0000c28c <[^>]*> nop ++0000c290 <[^>]*> nop ++0000c294 <[^>]*> nop ++0000c298 <[^>]*> nop ++0000c29c <[^>]*> nop ++0000c2a0 <[^>]*> nop ++0000c2a4 <[^>]*> nop ++0000c2a8 <[^>]*> nop ++0000c2ac <[^>]*> nop ++0000c2b0 <[^>]*> nop ++0000c2b4 <[^>]*> nop ++0000c2b8 <[^>]*> nop ++0000c2bc <[^>]*> nop ++0000c2c0 <[^>]*> nop ++0000c2c4 <[^>]*> nop ++0000c2c8 <[^>]*> nop ++0000c2cc <[^>]*> nop ++0000c2d0 <[^>]*> nop ++0000c2d4 <[^>]*> nop ++0000c2d8 <[^>]*> nop ++0000c2dc <[^>]*> nop ++0000c2e0 <[^>]*> nop ++0000c2e4 <[^>]*> nop ++0000c2e8 <[^>]*> nop ++0000c2ec <[^>]*> nop ++0000c2f0 <[^>]*> nop ++0000c2f4 <[^>]*> nop ++0000c2f8 <[^>]*> nop ++0000c2fc <[^>]*> nop ++0000c300 <[^>]*> nop ++0000c304 <[^>]*> nop ++0000c308 <[^>]*> nop ++0000c30c <[^>]*> nop ++0000c310 <[^>]*> nop ++0000c314 <[^>]*> nop ++0000c318 <[^>]*> nop ++0000c31c <[^>]*> nop ++0000c320 <[^>]*> nop ++0000c324 <[^>]*> nop ++0000c328 <[^>]*> nop ++0000c32c <[^>]*> nop ++0000c330 <[^>]*> nop ++0000c334 <[^>]*> nop ++0000c338 <[^>]*> nop ++0000c33c <[^>]*> nop ++0000c340 <[^>]*> nop ++0000c344 <[^>]*> nop ++0000c348 <[^>]*> nop ++0000c34c <[^>]*> nop ++0000c350 <[^>]*> nop ++0000c354 <[^>]*> nop ++0000c358 <[^>]*> nop ++0000c35c <[^>]*> nop ++0000c360 <[^>]*> nop ++0000c364 <[^>]*> nop ++0000c368 <[^>]*> nop ++0000c36c <[^>]*> nop ++0000c370 <[^>]*> nop ++0000c374 <[^>]*> nop ++0000c378 <[^>]*> nop ++0000c37c <[^>]*> nop ++0000c380 <[^>]*> nop ++0000c384 <[^>]*> nop ++0000c388 <[^>]*> nop ++0000c38c <[^>]*> nop ++0000c390 <[^>]*> nop ++0000c394 <[^>]*> nop ++0000c398 <[^>]*> nop ++0000c39c <[^>]*> nop ++0000c3a0 <[^>]*> nop ++0000c3a4 <[^>]*> nop ++0000c3a8 <[^>]*> nop ++0000c3ac <[^>]*> nop ++0000c3b0 <[^>]*> nop ++0000c3b4 <[^>]*> nop ++0000c3b8 <[^>]*> nop ++0000c3bc <[^>]*> nop ++0000c3c0 <[^>]*> nop ++0000c3c4 <[^>]*> nop ++0000c3c8 <[^>]*> nop ++0000c3cc <[^>]*> nop ++0000c3d0 <[^>]*> nop ++0000c3d4 <[^>]*> nop ++0000c3d8 <[^>]*> nop ++0000c3dc <[^>]*> nop ++0000c3e0 <[^>]*> nop ++0000c3e4 <[^>]*> nop ++0000c3e8 <[^>]*> nop ++0000c3ec <[^>]*> nop ++0000c3f0 <[^>]*> nop ++0000c3f4 <[^>]*> nop ++0000c3f8 <[^>]*> nop ++0000c3fc <[^>]*> nop ++0000c400 <[^>]*> nop ++0000c404 <[^>]*> nop ++0000c408 <[^>]*> nop ++0000c40c <[^>]*> nop ++0000c410 <[^>]*> nop ++0000c414 <[^>]*> nop ++0000c418 <[^>]*> nop ++0000c41c <[^>]*> nop ++0000c420 <[^>]*> nop ++0000c424 <[^>]*> nop ++0000c428 <[^>]*> nop ++0000c42c <[^>]*> nop ++0000c430 <[^>]*> nop ++0000c434 <[^>]*> nop ++0000c438 <[^>]*> nop ++0000c43c <[^>]*> nop ++0000c440 <[^>]*> nop ++0000c444 <[^>]*> nop ++0000c448 <[^>]*> nop ++0000c44c <[^>]*> nop ++0000c450 <[^>]*> nop ++0000c454 <[^>]*> nop ++0000c458 <[^>]*> nop ++0000c45c <[^>]*> nop ++0000c460 <[^>]*> nop ++0000c464 <[^>]*> nop ++0000c468 <[^>]*> nop ++0000c46c <[^>]*> nop ++0000c470 <[^>]*> nop ++0000c474 <[^>]*> nop ++0000c478 <[^>]*> nop ++0000c47c <[^>]*> nop ++0000c480 <[^>]*> nop ++0000c484 <[^>]*> nop ++0000c488 <[^>]*> nop ++0000c48c <[^>]*> nop ++0000c490 <[^>]*> nop ++0000c494 <[^>]*> nop ++0000c498 <[^>]*> nop ++0000c49c <[^>]*> nop ++0000c4a0 <[^>]*> nop ++0000c4a4 <[^>]*> nop ++0000c4a8 <[^>]*> nop ++0000c4ac <[^>]*> nop ++0000c4b0 <[^>]*> nop ++0000c4b4 <[^>]*> nop ++0000c4b8 <[^>]*> nop ++0000c4bc <[^>]*> nop ++0000c4c0 <[^>]*> nop ++0000c4c4 <[^>]*> nop ++0000c4c8 <[^>]*> nop ++0000c4cc <[^>]*> nop ++0000c4d0 <[^>]*> nop ++0000c4d4 <[^>]*> nop ++0000c4d8 <[^>]*> nop ++0000c4dc <[^>]*> nop ++0000c4e0 <[^>]*> nop ++0000c4e4 <[^>]*> nop ++0000c4e8 <[^>]*> nop ++0000c4ec <[^>]*> nop ++0000c4f0 <[^>]*> nop ++0000c4f4 <[^>]*> nop ++0000c4f8 <[^>]*> nop ++0000c4fc <[^>]*> nop ++0000c500 <[^>]*> nop ++0000c504 <[^>]*> nop ++0000c508 <[^>]*> nop ++0000c50c <[^>]*> nop ++0000c510 <[^>]*> nop ++0000c514 <[^>]*> nop ++0000c518 <[^>]*> nop ++0000c51c <[^>]*> nop ++0000c520 <[^>]*> nop ++0000c524 <[^>]*> nop ++0000c528 <[^>]*> nop ++0000c52c <[^>]*> nop ++0000c530 <[^>]*> nop ++0000c534 <[^>]*> nop ++0000c538 <[^>]*> nop ++0000c53c <[^>]*> nop ++0000c540 <[^>]*> nop ++0000c544 <[^>]*> nop ++0000c548 <[^>]*> nop ++0000c54c <[^>]*> nop ++0000c550 <[^>]*> nop ++0000c554 <[^>]*> nop ++0000c558 <[^>]*> nop ++0000c55c <[^>]*> nop ++0000c560 <[^>]*> nop ++0000c564 <[^>]*> nop ++0000c568 <[^>]*> nop ++0000c56c <[^>]*> nop ++0000c570 <[^>]*> nop ++0000c574 <[^>]*> nop ++0000c578 <[^>]*> nop ++0000c57c <[^>]*> nop ++0000c580 <[^>]*> nop ++0000c584 <[^>]*> nop ++0000c588 <[^>]*> nop ++0000c58c <[^>]*> nop ++0000c590 <[^>]*> nop ++0000c594 <[^>]*> nop ++0000c598 <[^>]*> nop ++0000c59c <[^>]*> nop ++0000c5a0 <[^>]*> nop ++0000c5a4 <[^>]*> nop ++0000c5a8 <[^>]*> nop ++0000c5ac <[^>]*> nop ++0000c5b0 <[^>]*> nop ++0000c5b4 <[^>]*> nop ++0000c5b8 <[^>]*> nop ++0000c5bc <[^>]*> nop ++0000c5c0 <[^>]*> nop ++0000c5c4 <[^>]*> nop ++0000c5c8 <[^>]*> nop ++0000c5cc <[^>]*> nop ++0000c5d0 <[^>]*> nop ++0000c5d4 <[^>]*> nop ++0000c5d8 <[^>]*> nop ++0000c5dc <[^>]*> nop ++0000c5e0 <[^>]*> nop ++0000c5e4 <[^>]*> nop ++0000c5e8 <[^>]*> nop ++0000c5ec <[^>]*> nop ++0000c5f0 <[^>]*> nop ++0000c5f4 <[^>]*> nop ++0000c5f8 <[^>]*> nop ++0000c5fc <[^>]*> nop ++0000c600 <[^>]*> nop ++0000c604 <[^>]*> nop ++0000c608 <[^>]*> nop ++0000c60c <[^>]*> nop ++0000c610 <[^>]*> nop ++0000c614 <[^>]*> nop ++0000c618 <[^>]*> nop ++0000c61c <[^>]*> nop ++0000c620 <[^>]*> nop ++0000c624 <[^>]*> nop ++0000c628 <[^>]*> nop ++0000c62c <[^>]*> nop ++0000c630 <[^>]*> nop ++0000c634 <[^>]*> nop ++0000c638 <[^>]*> nop ++0000c63c <[^>]*> nop ++0000c640 <[^>]*> nop ++0000c644 <[^>]*> nop ++0000c648 <[^>]*> nop ++0000c64c <[^>]*> nop ++0000c650 <[^>]*> nop ++0000c654 <[^>]*> nop ++0000c658 <[^>]*> nop ++0000c65c <[^>]*> nop ++0000c660 <[^>]*> nop ++0000c664 <[^>]*> nop ++0000c668 <[^>]*> nop ++0000c66c <[^>]*> nop ++0000c670 <[^>]*> nop ++0000c674 <[^>]*> nop ++0000c678 <[^>]*> nop ++0000c67c <[^>]*> nop ++0000c680 <[^>]*> nop ++0000c684 <[^>]*> nop ++0000c688 <[^>]*> nop ++0000c68c <[^>]*> nop ++0000c690 <[^>]*> nop ++0000c694 <[^>]*> nop ++0000c698 <[^>]*> nop ++0000c69c <[^>]*> nop ++0000c6a0 <[^>]*> nop ++0000c6a4 <[^>]*> nop ++0000c6a8 <[^>]*> nop ++0000c6ac <[^>]*> nop ++0000c6b0 <[^>]*> nop ++0000c6b4 <[^>]*> nop ++0000c6b8 <[^>]*> nop ++0000c6bc <[^>]*> nop ++0000c6c0 <[^>]*> nop ++0000c6c4 <[^>]*> nop ++0000c6c8 <[^>]*> nop ++0000c6cc <[^>]*> nop ++0000c6d0 <[^>]*> nop ++0000c6d4 <[^>]*> nop ++0000c6d8 <[^>]*> nop ++0000c6dc <[^>]*> nop ++0000c6e0 <[^>]*> nop ++0000c6e4 <[^>]*> nop ++0000c6e8 <[^>]*> nop ++0000c6ec <[^>]*> nop ++0000c6f0 <[^>]*> nop ++0000c6f4 <[^>]*> nop ++0000c6f8 <[^>]*> nop ++0000c6fc <[^>]*> nop ++0000c700 <[^>]*> nop ++0000c704 <[^>]*> nop ++0000c708 <[^>]*> nop ++0000c70c <[^>]*> nop ++0000c710 <[^>]*> nop ++0000c714 <[^>]*> nop ++0000c718 <[^>]*> nop ++0000c71c <[^>]*> nop ++0000c720 <[^>]*> nop ++0000c724 <[^>]*> nop ++0000c728 <[^>]*> nop ++0000c72c <[^>]*> nop ++0000c730 <[^>]*> nop ++0000c734 <[^>]*> nop ++0000c738 <[^>]*> nop ++0000c73c <[^>]*> nop ++0000c740 <[^>]*> nop ++0000c744 <[^>]*> nop ++0000c748 <[^>]*> nop ++0000c74c <[^>]*> nop ++0000c750 <[^>]*> nop ++0000c754 <[^>]*> nop ++0000c758 <[^>]*> nop ++0000c75c <[^>]*> nop ++0000c760 <[^>]*> nop ++0000c764 <[^>]*> nop ++0000c768 <[^>]*> nop ++0000c76c <[^>]*> nop ++0000c770 <[^>]*> nop ++0000c774 <[^>]*> nop ++0000c778 <[^>]*> nop ++0000c77c <[^>]*> nop ++0000c780 <[^>]*> nop ++0000c784 <[^>]*> nop ++0000c788 <[^>]*> nop ++0000c78c <[^>]*> nop ++0000c790 <[^>]*> nop ++0000c794 <[^>]*> nop ++0000c798 <[^>]*> nop ++0000c79c <[^>]*> nop ++0000c7a0 <[^>]*> nop ++0000c7a4 <[^>]*> nop ++0000c7a8 <[^>]*> nop ++0000c7ac <[^>]*> nop ++0000c7b0 <[^>]*> nop ++0000c7b4 <[^>]*> nop ++0000c7b8 <[^>]*> nop ++0000c7bc <[^>]*> nop ++0000c7c0 <[^>]*> nop ++0000c7c4 <[^>]*> nop ++0000c7c8 <[^>]*> nop ++0000c7cc <[^>]*> nop ++0000c7d0 <[^>]*> nop ++0000c7d4 <[^>]*> nop ++0000c7d8 <[^>]*> nop ++0000c7dc <[^>]*> nop ++0000c7e0 <[^>]*> nop ++0000c7e4 <[^>]*> nop ++0000c7e8 <[^>]*> nop ++0000c7ec <[^>]*> nop ++0000c7f0 <[^>]*> nop ++0000c7f4 <[^>]*> nop ++0000c7f8 <[^>]*> nop ++0000c7fc <[^>]*> nop ++0000c800 <[^>]*> nop ++0000c804 <[^>]*> nop ++0000c808 <[^>]*> nop ++0000c80c <[^>]*> nop ++0000c810 <[^>]*> nop ++0000c814 <[^>]*> nop ++0000c818 <[^>]*> nop ++0000c81c <[^>]*> nop ++0000c820 <[^>]*> nop ++0000c824 <[^>]*> nop ++0000c828 <[^>]*> nop ++0000c82c <[^>]*> nop ++0000c830 <[^>]*> nop ++0000c834 <[^>]*> nop ++0000c838 <[^>]*> nop ++0000c83c <[^>]*> nop ++0000c840 <[^>]*> nop ++0000c844 <[^>]*> nop ++0000c848 <[^>]*> nop ++0000c84c <[^>]*> nop ++0000c850 <[^>]*> nop ++0000c854 <[^>]*> nop ++0000c858 <[^>]*> nop ++0000c85c <[^>]*> nop ++0000c860 <[^>]*> nop ++0000c864 <[^>]*> nop ++0000c868 <[^>]*> nop ++0000c86c <[^>]*> nop ++0000c870 <[^>]*> nop ++0000c874 <[^>]*> nop ++0000c878 <[^>]*> nop ++0000c87c <[^>]*> nop ++0000c880 <[^>]*> nop ++0000c884 <[^>]*> nop ++0000c888 <[^>]*> nop ++0000c88c <[^>]*> nop ++0000c890 <[^>]*> nop ++0000c894 <[^>]*> nop ++0000c898 <[^>]*> nop ++0000c89c <[^>]*> nop ++0000c8a0 <[^>]*> nop ++0000c8a4 <[^>]*> nop ++0000c8a8 <[^>]*> nop ++0000c8ac <[^>]*> nop ++0000c8b0 <[^>]*> nop ++0000c8b4 <[^>]*> nop ++0000c8b8 <[^>]*> nop ++0000c8bc <[^>]*> nop ++0000c8c0 <[^>]*> nop ++0000c8c4 <[^>]*> nop ++0000c8c8 <[^>]*> nop ++0000c8cc <[^>]*> nop ++0000c8d0 <[^>]*> nop ++0000c8d4 <[^>]*> nop ++0000c8d8 <[^>]*> nop ++0000c8dc <[^>]*> nop ++0000c8e0 <[^>]*> nop ++0000c8e4 <[^>]*> nop ++0000c8e8 <[^>]*> nop ++0000c8ec <[^>]*> nop ++0000c8f0 <[^>]*> nop ++0000c8f4 <[^>]*> nop ++0000c8f8 <[^>]*> nop ++0000c8fc <[^>]*> nop ++0000c900 <[^>]*> nop ++0000c904 <[^>]*> nop ++0000c908 <[^>]*> nop ++0000c90c <[^>]*> nop ++0000c910 <[^>]*> nop ++0000c914 <[^>]*> nop ++0000c918 <[^>]*> nop ++0000c91c <[^>]*> nop ++0000c920 <[^>]*> nop ++0000c924 <[^>]*> nop ++0000c928 <[^>]*> nop ++0000c92c <[^>]*> nop ++0000c930 <[^>]*> nop ++0000c934 <[^>]*> nop ++0000c938 <[^>]*> nop ++0000c93c <[^>]*> nop ++0000c940 <[^>]*> nop ++0000c944 <[^>]*> nop ++0000c948 <[^>]*> nop ++0000c94c <[^>]*> nop ++0000c950 <[^>]*> nop ++0000c954 <[^>]*> nop ++0000c958 <[^>]*> nop ++0000c95c <[^>]*> nop ++0000c960 <[^>]*> nop ++0000c964 <[^>]*> nop ++0000c968 <[^>]*> nop ++0000c96c <[^>]*> nop ++0000c970 <[^>]*> nop ++0000c974 <[^>]*> nop ++0000c978 <[^>]*> nop ++0000c97c <[^>]*> nop ++0000c980 <[^>]*> nop ++0000c984 <[^>]*> nop ++0000c988 <[^>]*> nop ++0000c98c <[^>]*> nop ++0000c990 <[^>]*> nop ++0000c994 <[^>]*> nop ++0000c998 <[^>]*> nop ++0000c99c <[^>]*> nop ++0000c9a0 <[^>]*> nop ++0000c9a4 <[^>]*> nop ++0000c9a8 <[^>]*> nop ++0000c9ac <[^>]*> nop ++0000c9b0 <[^>]*> nop ++0000c9b4 <[^>]*> nop ++0000c9b8 <[^>]*> nop ++0000c9bc <[^>]*> nop ++0000c9c0 <[^>]*> nop ++0000c9c4 <[^>]*> nop ++0000c9c8 <[^>]*> nop ++0000c9cc <[^>]*> nop ++0000c9d0 <[^>]*> nop ++0000c9d4 <[^>]*> nop ++0000c9d8 <[^>]*> nop ++0000c9dc <[^>]*> nop ++0000c9e0 <[^>]*> nop ++0000c9e4 <[^>]*> nop ++0000c9e8 <[^>]*> nop ++0000c9ec <[^>]*> nop ++0000c9f0 <[^>]*> nop ++0000c9f4 <[^>]*> nop ++0000c9f8 <[^>]*> nop ++0000c9fc <[^>]*> nop ++0000ca00 <[^>]*> nop ++0000ca04 <[^>]*> nop ++0000ca08 <[^>]*> nop ++0000ca0c <[^>]*> nop ++0000ca10 <[^>]*> nop ++0000ca14 <[^>]*> nop ++0000ca18 <[^>]*> nop ++0000ca1c <[^>]*> nop ++0000ca20 <[^>]*> nop ++0000ca24 <[^>]*> nop ++0000ca28 <[^>]*> nop ++0000ca2c <[^>]*> nop ++0000ca30 <[^>]*> nop ++0000ca34 <[^>]*> nop ++0000ca38 <[^>]*> nop ++0000ca3c <[^>]*> nop ++0000ca40 <[^>]*> nop ++0000ca44 <[^>]*> nop ++0000ca48 <[^>]*> nop ++0000ca4c <[^>]*> nop ++0000ca50 <[^>]*> nop ++0000ca54 <[^>]*> nop ++0000ca58 <[^>]*> nop ++0000ca5c <[^>]*> nop ++0000ca60 <[^>]*> nop ++0000ca64 <[^>]*> nop ++0000ca68 <[^>]*> nop ++0000ca6c <[^>]*> nop ++0000ca70 <[^>]*> nop ++0000ca74 <[^>]*> nop ++0000ca78 <[^>]*> nop ++0000ca7c <[^>]*> nop ++0000ca80 <[^>]*> nop ++0000ca84 <[^>]*> nop ++0000ca88 <[^>]*> nop ++0000ca8c <[^>]*> nop ++0000ca90 <[^>]*> nop ++0000ca94 <[^>]*> nop ++0000ca98 <[^>]*> nop ++0000ca9c <[^>]*> nop ++0000caa0 <[^>]*> nop ++0000caa4 <[^>]*> nop ++0000caa8 <[^>]*> nop ++0000caac <[^>]*> nop ++0000cab0 <[^>]*> nop ++0000cab4 <[^>]*> nop ++0000cab8 <[^>]*> nop ++0000cabc <[^>]*> nop ++0000cac0 <[^>]*> nop ++0000cac4 <[^>]*> nop ++0000cac8 <[^>]*> nop ++0000cacc <[^>]*> nop ++0000cad0 <[^>]*> nop ++0000cad4 <[^>]*> nop ++0000cad8 <[^>]*> nop ++0000cadc <[^>]*> nop ++0000cae0 <[^>]*> nop ++0000cae4 <[^>]*> nop ++0000cae8 <[^>]*> nop ++0000caec <[^>]*> nop ++0000caf0 <[^>]*> nop ++0000caf4 <[^>]*> nop ++0000caf8 <[^>]*> nop ++0000cafc <[^>]*> nop ++0000cb00 <[^>]*> nop ++0000cb04 <[^>]*> nop ++0000cb08 <[^>]*> nop ++0000cb0c <[^>]*> nop ++0000cb10 <[^>]*> nop ++0000cb14 <[^>]*> nop ++0000cb18 <[^>]*> nop ++0000cb1c <[^>]*> nop ++0000cb20 <[^>]*> nop ++0000cb24 <[^>]*> nop ++0000cb28 <[^>]*> nop ++0000cb2c <[^>]*> nop ++0000cb30 <[^>]*> nop ++0000cb34 <[^>]*> nop ++0000cb38 <[^>]*> nop ++0000cb3c <[^>]*> nop ++0000cb40 <[^>]*> nop ++0000cb44 <[^>]*> nop ++0000cb48 <[^>]*> nop ++0000cb4c <[^>]*> nop ++0000cb50 <[^>]*> nop ++0000cb54 <[^>]*> nop ++0000cb58 <[^>]*> nop ++0000cb5c <[^>]*> nop ++0000cb60 <[^>]*> nop ++0000cb64 <[^>]*> nop ++0000cb68 <[^>]*> nop ++0000cb6c <[^>]*> nop ++0000cb70 <[^>]*> nop ++0000cb74 <[^>]*> nop ++0000cb78 <[^>]*> nop ++0000cb7c <[^>]*> nop ++0000cb80 <[^>]*> nop ++0000cb84 <[^>]*> nop ++0000cb88 <[^>]*> nop ++0000cb8c <[^>]*> nop ++0000cb90 <[^>]*> nop ++0000cb94 <[^>]*> nop ++0000cb98 <[^>]*> nop ++0000cb9c <[^>]*> nop ++0000cba0 <[^>]*> nop ++0000cba4 <[^>]*> nop ++0000cba8 <[^>]*> nop ++0000cbac <[^>]*> nop ++0000cbb0 <[^>]*> nop ++0000cbb4 <[^>]*> nop ++0000cbb8 <[^>]*> nop ++0000cbbc <[^>]*> nop ++0000cbc0 <[^>]*> nop ++0000cbc4 <[^>]*> nop ++0000cbc8 <[^>]*> nop ++0000cbcc <[^>]*> nop ++0000cbd0 <[^>]*> nop ++0000cbd4 <[^>]*> nop ++0000cbd8 <[^>]*> nop ++0000cbdc <[^>]*> nop ++0000cbe0 <[^>]*> nop ++0000cbe4 <[^>]*> nop ++0000cbe8 <[^>]*> nop ++0000cbec <[^>]*> nop ++0000cbf0 <[^>]*> nop ++0000cbf4 <[^>]*> nop ++0000cbf8 <[^>]*> nop ++0000cbfc <[^>]*> nop ++0000cc00 <[^>]*> nop ++0000cc04 <[^>]*> nop ++0000cc08 <[^>]*> nop ++0000cc0c <[^>]*> nop ++0000cc10 <[^>]*> nop ++0000cc14 <[^>]*> nop ++0000cc18 <[^>]*> nop ++0000cc1c <[^>]*> nop ++0000cc20 <[^>]*> nop ++0000cc24 <[^>]*> nop ++0000cc28 <[^>]*> nop ++0000cc2c <[^>]*> nop ++0000cc30 <[^>]*> nop ++0000cc34 <[^>]*> nop ++0000cc38 <[^>]*> nop ++0000cc3c <[^>]*> nop ++0000cc40 <[^>]*> nop ++0000cc44 <[^>]*> nop ++0000cc48 <[^>]*> nop ++0000cc4c <[^>]*> nop ++0000cc50 <[^>]*> nop ++0000cc54 <[^>]*> nop ++0000cc58 <[^>]*> nop ++0000cc5c <[^>]*> nop ++0000cc60 <[^>]*> nop ++0000cc64 <[^>]*> nop ++0000cc68 <[^>]*> nop ++0000cc6c <[^>]*> nop ++0000cc70 <[^>]*> nop ++0000cc74 <[^>]*> nop ++0000cc78 <[^>]*> nop ++0000cc7c <[^>]*> nop ++0000cc80 <[^>]*> nop ++0000cc84 <[^>]*> nop ++0000cc88 <[^>]*> nop ++0000cc8c <[^>]*> nop ++0000cc90 <[^>]*> nop ++0000cc94 <[^>]*> nop ++0000cc98 <[^>]*> nop ++0000cc9c <[^>]*> nop ++0000cca0 <[^>]*> nop ++0000cca4 <[^>]*> nop ++0000cca8 <[^>]*> nop ++0000ccac <[^>]*> nop ++0000ccb0 <[^>]*> nop ++0000ccb4 <[^>]*> nop ++0000ccb8 <[^>]*> nop ++0000ccbc <[^>]*> nop ++0000ccc0 <[^>]*> nop ++0000ccc4 <[^>]*> nop ++0000ccc8 <[^>]*> nop ++0000cccc <[^>]*> nop ++0000ccd0 <[^>]*> nop ++0000ccd4 <[^>]*> nop ++0000ccd8 <[^>]*> nop ++0000ccdc <[^>]*> nop ++0000cce0 <[^>]*> nop ++0000cce4 <[^>]*> nop ++0000cce8 <[^>]*> nop ++0000ccec <[^>]*> nop ++0000ccf0 <[^>]*> nop ++0000ccf4 <[^>]*> nop ++0000ccf8 <[^>]*> nop ++0000ccfc <[^>]*> nop ++0000cd00 <[^>]*> nop ++0000cd04 <[^>]*> nop ++0000cd08 <[^>]*> nop ++0000cd0c <[^>]*> nop ++0000cd10 <[^>]*> nop ++0000cd14 <[^>]*> nop ++0000cd18 <[^>]*> nop ++0000cd1c <[^>]*> nop ++0000cd20 <[^>]*> nop ++0000cd24 <[^>]*> nop ++0000cd28 <[^>]*> nop ++0000cd2c <[^>]*> nop ++0000cd30 <[^>]*> nop ++0000cd34 <[^>]*> nop ++0000cd38 <[^>]*> nop ++0000cd3c <[^>]*> nop ++0000cd40 <[^>]*> nop ++0000cd44 <[^>]*> nop ++0000cd48 <[^>]*> nop ++0000cd4c <[^>]*> nop ++0000cd50 <[^>]*> nop ++0000cd54 <[^>]*> nop ++0000cd58 <[^>]*> nop ++0000cd5c <[^>]*> nop ++0000cd60 <[^>]*> nop ++0000cd64 <[^>]*> nop ++0000cd68 <[^>]*> nop ++0000cd6c <[^>]*> nop ++0000cd70 <[^>]*> nop ++0000cd74 <[^>]*> nop ++0000cd78 <[^>]*> nop ++0000cd7c <[^>]*> nop ++0000cd80 <[^>]*> nop ++0000cd84 <[^>]*> nop ++0000cd88 <[^>]*> nop ++0000cd8c <[^>]*> nop ++0000cd90 <[^>]*> nop ++0000cd94 <[^>]*> nop ++0000cd98 <[^>]*> nop ++0000cd9c <[^>]*> nop ++0000cda0 <[^>]*> nop ++0000cda4 <[^>]*> nop ++0000cda8 <[^>]*> nop ++0000cdac <[^>]*> nop ++0000cdb0 <[^>]*> nop ++0000cdb4 <[^>]*> nop ++0000cdb8 <[^>]*> nop ++0000cdbc <[^>]*> nop ++0000cdc0 <[^>]*> nop ++0000cdc4 <[^>]*> nop ++0000cdc8 <[^>]*> nop ++0000cdcc <[^>]*> nop ++0000cdd0 <[^>]*> nop ++0000cdd4 <[^>]*> nop ++0000cdd8 <[^>]*> nop ++0000cddc <[^>]*> nop ++0000cde0 <[^>]*> nop ++0000cde4 <[^>]*> nop ++0000cde8 <[^>]*> nop ++0000cdec <[^>]*> nop ++0000cdf0 <[^>]*> nop ++0000cdf4 <[^>]*> nop ++0000cdf8 <[^>]*> nop ++0000cdfc <[^>]*> nop ++0000ce00 <[^>]*> nop ++0000ce04 <[^>]*> nop ++0000ce08 <[^>]*> nop ++0000ce0c <[^>]*> nop ++0000ce10 <[^>]*> nop ++0000ce14 <[^>]*> nop ++0000ce18 <[^>]*> nop ++0000ce1c <[^>]*> nop ++0000ce20 <[^>]*> nop ++0000ce24 <[^>]*> nop ++0000ce28 <[^>]*> nop ++0000ce2c <[^>]*> nop ++0000ce30 <[^>]*> nop ++0000ce34 <[^>]*> nop ++0000ce38 <[^>]*> nop ++0000ce3c <[^>]*> nop ++0000ce40 <[^>]*> nop ++0000ce44 <[^>]*> nop ++0000ce48 <[^>]*> nop ++0000ce4c <[^>]*> nop ++0000ce50 <[^>]*> nop ++0000ce54 <[^>]*> nop ++0000ce58 <[^>]*> nop ++0000ce5c <[^>]*> nop ++0000ce60 <[^>]*> nop ++0000ce64 <[^>]*> nop ++0000ce68 <[^>]*> nop ++0000ce6c <[^>]*> nop ++0000ce70 <[^>]*> nop ++0000ce74 <[^>]*> nop ++0000ce78 <[^>]*> nop ++0000ce7c <[^>]*> nop ++0000ce80 <[^>]*> nop ++0000ce84 <[^>]*> nop ++0000ce88 <[^>]*> nop ++0000ce8c <[^>]*> nop ++0000ce90 <[^>]*> nop ++0000ce94 <[^>]*> nop ++0000ce98 <[^>]*> nop ++0000ce9c <[^>]*> nop ++0000cea0 <[^>]*> nop ++0000cea4 <[^>]*> nop ++0000cea8 <[^>]*> nop ++0000ceac <[^>]*> nop ++0000ceb0 <[^>]*> nop ++0000ceb4 <[^>]*> nop ++0000ceb8 <[^>]*> nop ++0000cebc <[^>]*> nop ++0000cec0 <[^>]*> nop ++0000cec4 <[^>]*> nop ++0000cec8 <[^>]*> nop ++0000cecc <[^>]*> nop ++0000ced0 <[^>]*> nop ++0000ced4 <[^>]*> nop ++0000ced8 <[^>]*> nop ++0000cedc <[^>]*> nop ++0000cee0 <[^>]*> nop ++0000cee4 <[^>]*> nop ++0000cee8 <[^>]*> nop ++0000ceec <[^>]*> nop ++0000cef0 <[^>]*> nop ++0000cef4 <[^>]*> nop ++0000cef8 <[^>]*> nop ++0000cefc <[^>]*> nop ++0000cf00 <[^>]*> nop ++0000cf04 <[^>]*> nop ++0000cf08 <[^>]*> nop ++0000cf0c <[^>]*> nop ++0000cf10 <[^>]*> nop ++0000cf14 <[^>]*> nop ++0000cf18 <[^>]*> nop ++0000cf1c <[^>]*> nop ++0000cf20 <[^>]*> nop ++0000cf24 <[^>]*> nop ++0000cf28 <[^>]*> nop ++0000cf2c <[^>]*> nop ++0000cf30 <[^>]*> nop ++0000cf34 <[^>]*> nop ++0000cf38 <[^>]*> nop ++0000cf3c <[^>]*> nop ++0000cf40 <[^>]*> nop ++0000cf44 <[^>]*> nop ++0000cf48 <[^>]*> nop ++0000cf4c <[^>]*> nop ++0000cf50 <[^>]*> nop ++0000cf54 <[^>]*> nop ++0000cf58 <[^>]*> nop ++0000cf5c <[^>]*> nop ++0000cf60 <[^>]*> nop ++0000cf64 <[^>]*> nop ++0000cf68 <[^>]*> nop ++0000cf6c <[^>]*> nop ++0000cf70 <[^>]*> nop ++0000cf74 <[^>]*> nop ++0000cf78 <[^>]*> nop ++0000cf7c <[^>]*> nop ++0000cf80 <[^>]*> nop ++0000cf84 <[^>]*> nop ++0000cf88 <[^>]*> nop ++0000cf8c <[^>]*> nop ++0000cf90 <[^>]*> nop ++0000cf94 <[^>]*> nop ++0000cf98 <[^>]*> nop ++0000cf9c <[^>]*> nop ++0000cfa0 <[^>]*> nop ++0000cfa4 <[^>]*> nop ++0000cfa8 <[^>]*> nop ++0000cfac <[^>]*> nop ++0000cfb0 <[^>]*> nop ++0000cfb4 <[^>]*> nop ++0000cfb8 <[^>]*> nop ++0000cfbc <[^>]*> nop ++0000cfc0 <[^>]*> nop ++0000cfc4 <[^>]*> nop ++0000cfc8 <[^>]*> nop ++0000cfcc <[^>]*> nop ++0000cfd0 <[^>]*> nop ++0000cfd4 <[^>]*> nop ++0000cfd8 <[^>]*> nop ++0000cfdc <[^>]*> nop ++0000cfe0 <[^>]*> nop ++0000cfe4 <[^>]*> nop ++0000cfe8 <[^>]*> nop ++0000cfec <[^>]*> nop ++0000cff0 <[^>]*> nop ++0000cff4 <[^>]*> nop ++0000cff8 <[^>]*> nop ++0000cffc <[^>]*> nop ++0000d000 <[^>]*> nop ++0000d004 <[^>]*> nop ++0000d008 <[^>]*> nop ++0000d00c <[^>]*> nop ++0000d010 <[^>]*> nop ++0000d014 <[^>]*> nop ++0000d018 <[^>]*> nop ++0000d01c <[^>]*> nop ++0000d020 <[^>]*> nop ++0000d024 <[^>]*> nop ++0000d028 <[^>]*> nop ++0000d02c <[^>]*> nop ++0000d030 <[^>]*> nop ++0000d034 <[^>]*> nop ++0000d038 <[^>]*> nop ++0000d03c <[^>]*> nop ++0000d040 <[^>]*> nop ++0000d044 <[^>]*> nop ++0000d048 <[^>]*> nop ++0000d04c <[^>]*> nop ++0000d050 <[^>]*> nop ++0000d054 <[^>]*> nop ++0000d058 <[^>]*> nop ++0000d05c <[^>]*> nop ++0000d060 <[^>]*> nop ++0000d064 <[^>]*> nop ++0000d068 <[^>]*> nop ++0000d06c <[^>]*> nop ++0000d070 <[^>]*> nop ++0000d074 <[^>]*> nop ++0000d078 <[^>]*> nop ++0000d07c <[^>]*> nop ++0000d080 <[^>]*> nop ++0000d084 <[^>]*> nop ++0000d088 <[^>]*> nop ++0000d08c <[^>]*> nop ++0000d090 <[^>]*> nop ++0000d094 <[^>]*> nop ++0000d098 <[^>]*> nop ++0000d09c <[^>]*> nop ++0000d0a0 <[^>]*> nop ++0000d0a4 <[^>]*> nop ++0000d0a8 <[^>]*> nop ++0000d0ac <[^>]*> nop ++0000d0b0 <[^>]*> nop ++0000d0b4 <[^>]*> nop ++0000d0b8 <[^>]*> nop ++0000d0bc <[^>]*> nop ++0000d0c0 <[^>]*> nop ++0000d0c4 <[^>]*> nop ++0000d0c8 <[^>]*> nop ++0000d0cc <[^>]*> nop ++0000d0d0 <[^>]*> nop ++0000d0d4 <[^>]*> nop ++0000d0d8 <[^>]*> nop ++0000d0dc <[^>]*> nop ++0000d0e0 <[^>]*> nop ++0000d0e4 <[^>]*> nop ++0000d0e8 <[^>]*> nop ++0000d0ec <[^>]*> nop ++0000d0f0 <[^>]*> nop ++0000d0f4 <[^>]*> nop ++0000d0f8 <[^>]*> nop ++0000d0fc <[^>]*> nop ++0000d100 <[^>]*> nop ++0000d104 <[^>]*> nop ++0000d108 <[^>]*> nop ++0000d10c <[^>]*> nop ++0000d110 <[^>]*> nop ++0000d114 <[^>]*> nop ++0000d118 <[^>]*> nop ++0000d11c <[^>]*> nop ++0000d120 <[^>]*> nop ++0000d124 <[^>]*> nop ++0000d128 <[^>]*> nop ++0000d12c <[^>]*> nop ++0000d130 <[^>]*> nop ++0000d134 <[^>]*> nop ++0000d138 <[^>]*> nop ++0000d13c <[^>]*> nop ++0000d140 <[^>]*> nop ++0000d144 <[^>]*> nop ++0000d148 <[^>]*> nop ++0000d14c <[^>]*> nop ++0000d150 <[^>]*> nop ++0000d154 <[^>]*> nop ++0000d158 <[^>]*> nop ++0000d15c <[^>]*> nop ++0000d160 <[^>]*> nop ++0000d164 <[^>]*> nop ++0000d168 <[^>]*> nop ++0000d16c <[^>]*> nop ++0000d170 <[^>]*> nop ++0000d174 <[^>]*> nop ++0000d178 <[^>]*> nop ++0000d17c <[^>]*> nop ++0000d180 <[^>]*> nop ++0000d184 <[^>]*> nop ++0000d188 <[^>]*> nop ++0000d18c <[^>]*> nop ++0000d190 <[^>]*> nop ++0000d194 <[^>]*> nop ++0000d198 <[^>]*> nop ++0000d19c <[^>]*> nop ++0000d1a0 <[^>]*> nop ++0000d1a4 <[^>]*> nop ++0000d1a8 <[^>]*> nop ++0000d1ac <[^>]*> nop ++0000d1b0 <[^>]*> nop ++0000d1b4 <[^>]*> nop ++0000d1b8 <[^>]*> nop ++0000d1bc <[^>]*> nop ++0000d1c0 <[^>]*> nop ++0000d1c4 <[^>]*> nop ++0000d1c8 <[^>]*> nop ++0000d1cc <[^>]*> nop ++0000d1d0 <[^>]*> nop ++0000d1d4 <[^>]*> nop ++0000d1d8 <[^>]*> nop ++0000d1dc <[^>]*> nop ++0000d1e0 <[^>]*> nop ++0000d1e4 <[^>]*> nop ++0000d1e8 <[^>]*> nop ++0000d1ec <[^>]*> nop ++0000d1f0 <[^>]*> nop ++0000d1f4 <[^>]*> nop ++0000d1f8 <[^>]*> nop ++0000d1fc <[^>]*> nop ++0000d200 <[^>]*> nop ++0000d204 <[^>]*> nop ++0000d208 <[^>]*> nop ++0000d20c <[^>]*> nop ++0000d210 <[^>]*> nop ++0000d214 <[^>]*> nop ++0000d218 <[^>]*> nop ++0000d21c <[^>]*> nop ++0000d220 <[^>]*> nop ++0000d224 <[^>]*> nop ++0000d228 <[^>]*> nop ++0000d22c <[^>]*> nop ++0000d230 <[^>]*> nop ++0000d234 <[^>]*> nop ++0000d238 <[^>]*> nop ++0000d23c <[^>]*> nop ++0000d240 <[^>]*> nop ++0000d244 <[^>]*> nop ++0000d248 <[^>]*> nop ++0000d24c <[^>]*> nop ++0000d250 <[^>]*> nop ++0000d254 <[^>]*> nop ++0000d258 <[^>]*> nop ++0000d25c <[^>]*> nop ++0000d260 <[^>]*> nop ++0000d264 <[^>]*> nop ++0000d268 <[^>]*> nop ++0000d26c <[^>]*> nop ++0000d270 <[^>]*> nop ++0000d274 <[^>]*> nop ++0000d278 <[^>]*> nop ++0000d27c <[^>]*> nop ++0000d280 <[^>]*> nop ++0000d284 <[^>]*> nop ++0000d288 <[^>]*> nop ++0000d28c <[^>]*> nop ++0000d290 <[^>]*> nop ++0000d294 <[^>]*> nop ++0000d298 <[^>]*> nop ++0000d29c <[^>]*> nop ++0000d2a0 <[^>]*> nop ++0000d2a4 <[^>]*> nop ++0000d2a8 <[^>]*> nop ++0000d2ac <[^>]*> nop ++0000d2b0 <[^>]*> nop ++0000d2b4 <[^>]*> nop ++0000d2b8 <[^>]*> nop ++0000d2bc <[^>]*> nop ++0000d2c0 <[^>]*> nop ++0000d2c4 <[^>]*> nop ++0000d2c8 <[^>]*> nop ++0000d2cc <[^>]*> nop ++0000d2d0 <[^>]*> nop ++0000d2d4 <[^>]*> nop ++0000d2d8 <[^>]*> nop ++0000d2dc <[^>]*> nop ++0000d2e0 <[^>]*> nop ++0000d2e4 <[^>]*> nop ++0000d2e8 <[^>]*> nop ++0000d2ec <[^>]*> nop ++0000d2f0 <[^>]*> nop ++0000d2f4 <[^>]*> nop ++0000d2f8 <[^>]*> nop ++0000d2fc <[^>]*> nop ++0000d300 <[^>]*> nop ++0000d304 <[^>]*> nop ++0000d308 <[^>]*> nop ++0000d30c <[^>]*> nop ++0000d310 <[^>]*> nop ++0000d314 <[^>]*> nop ++0000d318 <[^>]*> nop ++0000d31c <[^>]*> nop ++0000d320 <[^>]*> nop ++0000d324 <[^>]*> nop ++0000d328 <[^>]*> nop ++0000d32c <[^>]*> nop ++0000d330 <[^>]*> nop ++0000d334 <[^>]*> nop ++0000d338 <[^>]*> nop ++0000d33c <[^>]*> nop ++0000d340 <[^>]*> nop ++0000d344 <[^>]*> nop ++0000d348 <[^>]*> nop ++0000d34c <[^>]*> nop ++0000d350 <[^>]*> nop ++0000d354 <[^>]*> nop ++0000d358 <[^>]*> nop ++0000d35c <[^>]*> nop ++0000d360 <[^>]*> nop ++0000d364 <[^>]*> nop ++0000d368 <[^>]*> nop ++0000d36c <[^>]*> nop ++0000d370 <[^>]*> nop ++0000d374 <[^>]*> nop ++0000d378 <[^>]*> nop ++0000d37c <[^>]*> nop ++0000d380 <[^>]*> nop ++0000d384 <[^>]*> nop ++0000d388 <[^>]*> nop ++0000d38c <[^>]*> nop ++0000d390 <[^>]*> nop ++0000d394 <[^>]*> nop ++0000d398 <[^>]*> nop ++0000d39c <[^>]*> nop ++0000d3a0 <[^>]*> nop ++0000d3a4 <[^>]*> nop ++0000d3a8 <[^>]*> nop ++0000d3ac <[^>]*> nop ++0000d3b0 <[^>]*> nop ++0000d3b4 <[^>]*> nop ++0000d3b8 <[^>]*> nop ++0000d3bc <[^>]*> nop ++0000d3c0 <[^>]*> nop ++0000d3c4 <[^>]*> nop ++0000d3c8 <[^>]*> nop ++0000d3cc <[^>]*> nop ++0000d3d0 <[^>]*> nop ++0000d3d4 <[^>]*> nop ++0000d3d8 <[^>]*> nop ++0000d3dc <[^>]*> nop ++0000d3e0 <[^>]*> nop ++0000d3e4 <[^>]*> nop ++0000d3e8 <[^>]*> nop ++0000d3ec <[^>]*> nop ++0000d3f0 <[^>]*> nop ++0000d3f4 <[^>]*> nop ++0000d3f8 <[^>]*> nop ++0000d3fc <[^>]*> nop ++0000d400 <[^>]*> nop ++0000d404 <[^>]*> nop ++0000d408 <[^>]*> nop ++0000d40c <[^>]*> nop ++0000d410 <[^>]*> nop ++0000d414 <[^>]*> nop ++0000d418 <[^>]*> nop ++0000d41c <[^>]*> nop ++0000d420 <[^>]*> nop ++0000d424 <[^>]*> nop ++0000d428 <[^>]*> nop ++0000d42c <[^>]*> nop ++0000d430 <[^>]*> nop ++0000d434 <[^>]*> nop ++0000d438 <[^>]*> nop ++0000d43c <[^>]*> nop ++0000d440 <[^>]*> nop ++0000d444 <[^>]*> nop ++0000d448 <[^>]*> nop ++0000d44c <[^>]*> nop ++0000d450 <[^>]*> nop ++0000d454 <[^>]*> nop ++0000d458 <[^>]*> nop ++0000d45c <[^>]*> nop ++0000d460 <[^>]*> nop ++0000d464 <[^>]*> nop ++0000d468 <[^>]*> nop ++0000d46c <[^>]*> nop ++0000d470 <[^>]*> nop ++0000d474 <[^>]*> nop ++0000d478 <[^>]*> nop ++0000d47c <[^>]*> nop ++0000d480 <[^>]*> nop ++0000d484 <[^>]*> nop ++0000d488 <[^>]*> nop ++0000d48c <[^>]*> nop ++0000d490 <[^>]*> nop ++0000d494 <[^>]*> nop ++0000d498 <[^>]*> nop ++0000d49c <[^>]*> nop ++0000d4a0 <[^>]*> nop ++0000d4a4 <[^>]*> nop ++0000d4a8 <[^>]*> nop ++0000d4ac <[^>]*> nop ++0000d4b0 <[^>]*> nop ++0000d4b4 <[^>]*> nop ++0000d4b8 <[^>]*> nop ++0000d4bc <[^>]*> nop ++0000d4c0 <[^>]*> nop ++0000d4c4 <[^>]*> nop ++0000d4c8 <[^>]*> nop ++0000d4cc <[^>]*> nop ++0000d4d0 <[^>]*> nop ++0000d4d4 <[^>]*> nop ++0000d4d8 <[^>]*> nop ++0000d4dc <[^>]*> nop ++0000d4e0 <[^>]*> nop ++0000d4e4 <[^>]*> nop ++0000d4e8 <[^>]*> nop ++0000d4ec <[^>]*> nop ++0000d4f0 <[^>]*> nop ++0000d4f4 <[^>]*> nop ++0000d4f8 <[^>]*> nop ++0000d4fc <[^>]*> nop ++0000d500 <[^>]*> nop ++0000d504 <[^>]*> nop ++0000d508 <[^>]*> nop ++0000d50c <[^>]*> nop ++0000d510 <[^>]*> nop ++0000d514 <[^>]*> nop ++0000d518 <[^>]*> nop ++0000d51c <[^>]*> nop ++0000d520 <[^>]*> nop ++0000d524 <[^>]*> nop ++0000d528 <[^>]*> nop ++0000d52c <[^>]*> nop ++0000d530 <[^>]*> nop ++0000d534 <[^>]*> nop ++0000d538 <[^>]*> nop ++0000d53c <[^>]*> nop ++0000d540 <[^>]*> nop ++0000d544 <[^>]*> nop ++0000d548 <[^>]*> nop ++0000d54c <[^>]*> nop ++0000d550 <[^>]*> nop ++0000d554 <[^>]*> nop ++0000d558 <[^>]*> nop ++0000d55c <[^>]*> nop ++0000d560 <[^>]*> nop ++0000d564 <[^>]*> nop ++0000d568 <[^>]*> nop ++0000d56c <[^>]*> nop ++0000d570 <[^>]*> nop ++0000d574 <[^>]*> nop ++0000d578 <[^>]*> nop ++0000d57c <[^>]*> nop ++0000d580 <[^>]*> nop ++0000d584 <[^>]*> nop ++0000d588 <[^>]*> nop ++0000d58c <[^>]*> nop ++0000d590 <[^>]*> nop ++0000d594 <[^>]*> nop ++0000d598 <[^>]*> nop ++0000d59c <[^>]*> nop ++0000d5a0 <[^>]*> nop ++0000d5a4 <[^>]*> nop ++0000d5a8 <[^>]*> nop ++0000d5ac <[^>]*> nop ++0000d5b0 <[^>]*> nop ++0000d5b4 <[^>]*> nop ++0000d5b8 <[^>]*> nop ++0000d5bc <[^>]*> nop ++0000d5c0 <[^>]*> nop ++0000d5c4 <[^>]*> nop ++0000d5c8 <[^>]*> nop ++0000d5cc <[^>]*> nop ++0000d5d0 <[^>]*> nop ++0000d5d4 <[^>]*> nop ++0000d5d8 <[^>]*> nop ++0000d5dc <[^>]*> nop ++0000d5e0 <[^>]*> nop ++0000d5e4 <[^>]*> nop ++0000d5e8 <[^>]*> nop ++0000d5ec <[^>]*> nop ++0000d5f0 <[^>]*> nop ++0000d5f4 <[^>]*> nop ++0000d5f8 <[^>]*> nop ++0000d5fc <[^>]*> nop ++0000d600 <[^>]*> nop ++0000d604 <[^>]*> nop ++0000d608 <[^>]*> nop ++0000d60c <[^>]*> nop ++0000d610 <[^>]*> nop ++0000d614 <[^>]*> nop ++0000d618 <[^>]*> nop ++0000d61c <[^>]*> nop ++0000d620 <[^>]*> nop ++0000d624 <[^>]*> nop ++0000d628 <[^>]*> nop ++0000d62c <[^>]*> nop ++0000d630 <[^>]*> nop ++0000d634 <[^>]*> nop ++0000d638 <[^>]*> nop ++0000d63c <[^>]*> nop ++0000d640 <[^>]*> nop ++0000d644 <[^>]*> nop ++0000d648 <[^>]*> nop ++0000d64c <[^>]*> nop ++0000d650 <[^>]*> nop ++0000d654 <[^>]*> nop ++0000d658 <[^>]*> nop ++0000d65c <[^>]*> nop ++0000d660 <[^>]*> nop ++0000d664 <[^>]*> nop ++0000d668 <[^>]*> nop ++0000d66c <[^>]*> nop ++0000d670 <[^>]*> nop ++0000d674 <[^>]*> nop ++0000d678 <[^>]*> nop ++0000d67c <[^>]*> nop ++0000d680 <[^>]*> nop ++0000d684 <[^>]*> nop ++0000d688 <[^>]*> nop ++0000d68c <[^>]*> nop ++0000d690 <[^>]*> nop ++0000d694 <[^>]*> nop ++0000d698 <[^>]*> nop ++0000d69c <[^>]*> nop ++0000d6a0 <[^>]*> nop ++0000d6a4 <[^>]*> nop ++0000d6a8 <[^>]*> nop ++0000d6ac <[^>]*> nop ++0000d6b0 <[^>]*> nop ++0000d6b4 <[^>]*> nop ++0000d6b8 <[^>]*> nop ++0000d6bc <[^>]*> nop ++0000d6c0 <[^>]*> nop ++0000d6c4 <[^>]*> nop ++0000d6c8 <[^>]*> nop ++0000d6cc <[^>]*> nop ++0000d6d0 <[^>]*> nop ++0000d6d4 <[^>]*> nop ++0000d6d8 <[^>]*> nop ++0000d6dc <[^>]*> nop ++0000d6e0 <[^>]*> nop ++0000d6e4 <[^>]*> nop ++0000d6e8 <[^>]*> nop ++0000d6ec <[^>]*> nop ++0000d6f0 <[^>]*> nop ++0000d6f4 <[^>]*> nop ++0000d6f8 <[^>]*> nop ++0000d6fc <[^>]*> nop ++0000d700 <[^>]*> nop ++0000d704 <[^>]*> nop ++0000d708 <[^>]*> nop ++0000d70c <[^>]*> nop ++0000d710 <[^>]*> nop ++0000d714 <[^>]*> nop ++0000d718 <[^>]*> nop ++0000d71c <[^>]*> nop ++0000d720 <[^>]*> nop ++0000d724 <[^>]*> nop ++0000d728 <[^>]*> nop ++0000d72c <[^>]*> nop ++0000d730 <[^>]*> nop ++0000d734 <[^>]*> nop ++0000d738 <[^>]*> nop ++0000d73c <[^>]*> nop ++0000d740 <[^>]*> nop ++0000d744 <[^>]*> nop ++0000d748 <[^>]*> nop ++0000d74c <[^>]*> nop ++0000d750 <[^>]*> nop ++0000d754 <[^>]*> nop ++0000d758 <[^>]*> nop ++0000d75c <[^>]*> nop ++0000d760 <[^>]*> nop ++0000d764 <[^>]*> nop ++0000d768 <[^>]*> nop ++0000d76c <[^>]*> nop ++0000d770 <[^>]*> nop ++0000d774 <[^>]*> nop ++0000d778 <[^>]*> nop ++0000d77c <[^>]*> nop ++0000d780 <[^>]*> nop ++0000d784 <[^>]*> nop ++0000d788 <[^>]*> nop ++0000d78c <[^>]*> nop ++0000d790 <[^>]*> nop ++0000d794 <[^>]*> nop ++0000d798 <[^>]*> nop ++0000d79c <[^>]*> nop ++0000d7a0 <[^>]*> nop ++0000d7a4 <[^>]*> nop ++0000d7a8 <[^>]*> nop ++0000d7ac <[^>]*> nop ++0000d7b0 <[^>]*> nop ++0000d7b4 <[^>]*> nop ++0000d7b8 <[^>]*> nop ++0000d7bc <[^>]*> nop ++0000d7c0 <[^>]*> nop ++0000d7c4 <[^>]*> nop ++0000d7c8 <[^>]*> nop ++0000d7cc <[^>]*> nop ++0000d7d0 <[^>]*> nop ++0000d7d4 <[^>]*> nop ++0000d7d8 <[^>]*> nop ++0000d7dc <[^>]*> nop ++0000d7e0 <[^>]*> nop ++0000d7e4 <[^>]*> nop ++0000d7e8 <[^>]*> nop ++0000d7ec <[^>]*> nop ++0000d7f0 <[^>]*> nop ++0000d7f4 <[^>]*> nop ++0000d7f8 <[^>]*> nop ++0000d7fc <[^>]*> nop ++0000d800 <[^>]*> nop ++0000d804 <[^>]*> nop ++0000d808 <[^>]*> nop ++0000d80c <[^>]*> nop ++0000d810 <[^>]*> nop ++0000d814 <[^>]*> nop ++0000d818 <[^>]*> nop ++0000d81c <[^>]*> nop ++0000d820 <[^>]*> nop ++0000d824 <[^>]*> nop ++0000d828 <[^>]*> nop ++0000d82c <[^>]*> nop ++0000d830 <[^>]*> nop ++0000d834 <[^>]*> nop ++0000d838 <[^>]*> nop ++0000d83c <[^>]*> nop ++0000d840 <[^>]*> nop ++0000d844 <[^>]*> nop ++0000d848 <[^>]*> nop ++0000d84c <[^>]*> nop ++0000d850 <[^>]*> nop ++0000d854 <[^>]*> nop ++0000d858 <[^>]*> nop ++0000d85c <[^>]*> nop ++0000d860 <[^>]*> nop ++0000d864 <[^>]*> nop ++0000d868 <[^>]*> nop ++0000d86c <[^>]*> nop ++0000d870 <[^>]*> nop ++0000d874 <[^>]*> nop ++0000d878 <[^>]*> nop ++0000d87c <[^>]*> nop ++0000d880 <[^>]*> nop ++0000d884 <[^>]*> nop ++0000d888 <[^>]*> nop ++0000d88c <[^>]*> nop ++0000d890 <[^>]*> nop ++0000d894 <[^>]*> nop ++0000d898 <[^>]*> nop ++0000d89c <[^>]*> nop ++0000d8a0 <[^>]*> nop ++0000d8a4 <[^>]*> nop ++0000d8a8 <[^>]*> nop ++0000d8ac <[^>]*> nop ++0000d8b0 <[^>]*> nop ++0000d8b4 <[^>]*> nop ++0000d8b8 <[^>]*> nop ++0000d8bc <[^>]*> nop ++0000d8c0 <[^>]*> nop ++0000d8c4 <[^>]*> nop ++0000d8c8 <[^>]*> nop ++0000d8cc <[^>]*> nop ++0000d8d0 <[^>]*> nop ++0000d8d4 <[^>]*> nop ++0000d8d8 <[^>]*> nop ++0000d8dc <[^>]*> nop ++0000d8e0 <[^>]*> nop ++0000d8e4 <[^>]*> nop ++0000d8e8 <[^>]*> nop ++0000d8ec <[^>]*> nop ++0000d8f0 <[^>]*> nop ++0000d8f4 <[^>]*> nop ++0000d8f8 <[^>]*> nop ++0000d8fc <[^>]*> nop ++0000d900 <[^>]*> nop ++0000d904 <[^>]*> nop ++0000d908 <[^>]*> nop ++0000d90c <[^>]*> nop ++0000d910 <[^>]*> nop ++0000d914 <[^>]*> nop ++0000d918 <[^>]*> nop ++0000d91c <[^>]*> nop ++0000d920 <[^>]*> nop ++0000d924 <[^>]*> nop ++0000d928 <[^>]*> nop ++0000d92c <[^>]*> nop ++0000d930 <[^>]*> nop ++0000d934 <[^>]*> nop ++0000d938 <[^>]*> nop ++0000d93c <[^>]*> nop ++0000d940 <[^>]*> nop ++0000d944 <[^>]*> nop ++0000d948 <[^>]*> nop ++0000d94c <[^>]*> nop ++0000d950 <[^>]*> nop ++0000d954 <[^>]*> nop ++0000d958 <[^>]*> nop ++0000d95c <[^>]*> nop ++0000d960 <[^>]*> nop ++0000d964 <[^>]*> nop ++0000d968 <[^>]*> nop ++0000d96c <[^>]*> nop ++0000d970 <[^>]*> nop ++0000d974 <[^>]*> nop ++0000d978 <[^>]*> nop ++0000d97c <[^>]*> nop ++0000d980 <[^>]*> nop ++0000d984 <[^>]*> nop ++0000d988 <[^>]*> nop ++0000d98c <[^>]*> nop ++0000d990 <[^>]*> nop ++0000d994 <[^>]*> nop ++0000d998 <[^>]*> nop ++0000d99c <[^>]*> nop ++0000d9a0 <[^>]*> nop ++0000d9a4 <[^>]*> nop ++0000d9a8 <[^>]*> nop ++0000d9ac <[^>]*> nop ++0000d9b0 <[^>]*> nop ++0000d9b4 <[^>]*> nop ++0000d9b8 <[^>]*> nop ++0000d9bc <[^>]*> nop ++0000d9c0 <[^>]*> nop ++0000d9c4 <[^>]*> nop ++0000d9c8 <[^>]*> nop ++0000d9cc <[^>]*> nop ++0000d9d0 <[^>]*> nop ++0000d9d4 <[^>]*> nop ++0000d9d8 <[^>]*> nop ++0000d9dc <[^>]*> nop ++0000d9e0 <[^>]*> nop ++0000d9e4 <[^>]*> nop ++0000d9e8 <[^>]*> nop ++0000d9ec <[^>]*> nop ++0000d9f0 <[^>]*> nop ++0000d9f4 <[^>]*> nop ++0000d9f8 <[^>]*> nop ++0000d9fc <[^>]*> nop ++0000da00 <[^>]*> nop ++0000da04 <[^>]*> nop ++0000da08 <[^>]*> nop ++0000da0c <[^>]*> nop ++0000da10 <[^>]*> nop ++0000da14 <[^>]*> nop ++0000da18 <[^>]*> nop ++0000da1c <[^>]*> nop ++0000da20 <[^>]*> nop ++0000da24 <[^>]*> nop ++0000da28 <[^>]*> nop ++0000da2c <[^>]*> nop ++0000da30 <[^>]*> nop ++0000da34 <[^>]*> nop ++0000da38 <[^>]*> nop ++0000da3c <[^>]*> nop ++0000da40 <[^>]*> nop ++0000da44 <[^>]*> nop ++0000da48 <[^>]*> nop ++0000da4c <[^>]*> nop ++0000da50 <[^>]*> nop ++0000da54 <[^>]*> nop ++0000da58 <[^>]*> nop ++0000da5c <[^>]*> nop ++0000da60 <[^>]*> nop ++0000da64 <[^>]*> nop ++0000da68 <[^>]*> nop ++0000da6c <[^>]*> nop ++0000da70 <[^>]*> nop ++0000da74 <[^>]*> nop ++0000da78 <[^>]*> nop ++0000da7c <[^>]*> nop ++0000da80 <[^>]*> nop ++0000da84 <[^>]*> nop ++0000da88 <[^>]*> nop ++0000da8c <[^>]*> nop ++0000da90 <[^>]*> nop ++0000da94 <[^>]*> nop ++0000da98 <[^>]*> nop ++0000da9c <[^>]*> nop ++0000daa0 <[^>]*> nop ++0000daa4 <[^>]*> nop ++0000daa8 <[^>]*> nop ++0000daac <[^>]*> nop ++0000dab0 <[^>]*> nop ++0000dab4 <[^>]*> nop ++0000dab8 <[^>]*> nop ++0000dabc <[^>]*> nop ++0000dac0 <[^>]*> nop ++0000dac4 <[^>]*> nop ++0000dac8 <[^>]*> nop ++0000dacc <[^>]*> nop ++0000dad0 <[^>]*> nop ++0000dad4 <[^>]*> nop ++0000dad8 <[^>]*> nop ++0000dadc <[^>]*> nop ++0000dae0 <[^>]*> nop ++0000dae4 <[^>]*> nop ++0000dae8 <[^>]*> nop ++0000daec <[^>]*> nop ++0000daf0 <[^>]*> nop ++0000daf4 <[^>]*> nop ++0000daf8 <[^>]*> nop ++0000dafc <[^>]*> nop ++0000db00 <[^>]*> nop ++0000db04 <[^>]*> nop ++0000db08 <[^>]*> nop ++0000db0c <[^>]*> nop ++0000db10 <[^>]*> nop ++0000db14 <[^>]*> nop ++0000db18 <[^>]*> nop ++0000db1c <[^>]*> nop ++0000db20 <[^>]*> nop ++0000db24 <[^>]*> nop ++0000db28 <[^>]*> nop ++0000db2c <[^>]*> nop ++0000db30 <[^>]*> nop ++0000db34 <[^>]*> nop ++0000db38 <[^>]*> nop ++0000db3c <[^>]*> nop ++0000db40 <[^>]*> nop ++0000db44 <[^>]*> nop ++0000db48 <[^>]*> nop ++0000db4c <[^>]*> nop ++0000db50 <[^>]*> nop ++0000db54 <[^>]*> nop ++0000db58 <[^>]*> nop ++0000db5c <[^>]*> nop ++0000db60 <[^>]*> nop ++0000db64 <[^>]*> nop ++0000db68 <[^>]*> nop ++0000db6c <[^>]*> nop ++0000db70 <[^>]*> nop ++0000db74 <[^>]*> nop ++0000db78 <[^>]*> nop ++0000db7c <[^>]*> nop ++0000db80 <[^>]*> nop ++0000db84 <[^>]*> nop ++0000db88 <[^>]*> nop ++0000db8c <[^>]*> nop ++0000db90 <[^>]*> nop ++0000db94 <[^>]*> nop ++0000db98 <[^>]*> nop ++0000db9c <[^>]*> nop ++0000dba0 <[^>]*> nop ++0000dba4 <[^>]*> nop ++0000dba8 <[^>]*> nop ++0000dbac <[^>]*> nop ++0000dbb0 <[^>]*> nop ++0000dbb4 <[^>]*> nop ++0000dbb8 <[^>]*> nop ++0000dbbc <[^>]*> nop ++0000dbc0 <[^>]*> nop ++0000dbc4 <[^>]*> nop ++0000dbc8 <[^>]*> nop ++0000dbcc <[^>]*> nop ++0000dbd0 <[^>]*> nop ++0000dbd4 <[^>]*> nop ++0000dbd8 <[^>]*> nop ++0000dbdc <[^>]*> nop ++0000dbe0 <[^>]*> nop ++0000dbe4 <[^>]*> nop ++0000dbe8 <[^>]*> nop ++0000dbec <[^>]*> nop ++0000dbf0 <[^>]*> nop ++0000dbf4 <[^>]*> nop ++0000dbf8 <[^>]*> nop ++0000dbfc <[^>]*> nop ++0000dc00 <[^>]*> nop ++0000dc04 <[^>]*> nop ++0000dc08 <[^>]*> nop ++0000dc0c <[^>]*> nop ++0000dc10 <[^>]*> nop ++0000dc14 <[^>]*> nop ++0000dc18 <[^>]*> nop ++0000dc1c <[^>]*> nop ++0000dc20 <[^>]*> nop ++0000dc24 <[^>]*> nop ++0000dc28 <[^>]*> nop ++0000dc2c <[^>]*> nop ++0000dc30 <[^>]*> nop ++0000dc34 <[^>]*> nop ++0000dc38 <[^>]*> nop ++0000dc3c <[^>]*> nop ++0000dc40 <[^>]*> nop ++0000dc44 <[^>]*> nop ++0000dc48 <[^>]*> nop ++0000dc4c <[^>]*> nop ++0000dc50 <[^>]*> nop ++0000dc54 <[^>]*> nop ++0000dc58 <[^>]*> nop ++0000dc5c <[^>]*> nop ++0000dc60 <[^>]*> nop ++0000dc64 <[^>]*> nop ++0000dc68 <[^>]*> nop ++0000dc6c <[^>]*> nop ++0000dc70 <[^>]*> nop ++0000dc74 <[^>]*> nop ++0000dc78 <[^>]*> nop ++0000dc7c <[^>]*> nop ++0000dc80 <[^>]*> nop ++0000dc84 <[^>]*> nop ++0000dc88 <[^>]*> nop ++0000dc8c <[^>]*> nop ++0000dc90 <[^>]*> nop ++0000dc94 <[^>]*> nop ++0000dc98 <[^>]*> nop ++0000dc9c <[^>]*> nop ++0000dca0 <[^>]*> nop ++0000dca4 <[^>]*> nop ++0000dca8 <[^>]*> nop ++0000dcac <[^>]*> nop ++0000dcb0 <[^>]*> nop ++0000dcb4 <[^>]*> nop ++0000dcb8 <[^>]*> nop ++0000dcbc <[^>]*> nop ++0000dcc0 <[^>]*> nop ++0000dcc4 <[^>]*> nop ++0000dcc8 <[^>]*> nop ++0000dccc <[^>]*> nop ++0000dcd0 <[^>]*> nop ++0000dcd4 <[^>]*> nop ++0000dcd8 <[^>]*> nop ++0000dcdc <[^>]*> nop ++0000dce0 <[^>]*> nop ++0000dce4 <[^>]*> nop ++0000dce8 <[^>]*> nop ++0000dcec <[^>]*> nop ++0000dcf0 <[^>]*> nop ++0000dcf4 <[^>]*> nop ++0000dcf8 <[^>]*> nop ++0000dcfc <[^>]*> nop ++0000dd00 <[^>]*> nop ++0000dd04 <[^>]*> nop ++0000dd08 <[^>]*> nop ++0000dd0c <[^>]*> nop ++0000dd10 <[^>]*> nop ++0000dd14 <[^>]*> nop ++0000dd18 <[^>]*> nop ++0000dd1c <[^>]*> nop ++0000dd20 <[^>]*> nop ++0000dd24 <[^>]*> nop ++0000dd28 <[^>]*> nop ++0000dd2c <[^>]*> nop ++0000dd30 <[^>]*> nop ++0000dd34 <[^>]*> nop ++0000dd38 <[^>]*> nop ++0000dd3c <[^>]*> nop ++0000dd40 <[^>]*> nop ++0000dd44 <[^>]*> nop ++0000dd48 <[^>]*> nop ++0000dd4c <[^>]*> nop ++0000dd50 <[^>]*> nop ++0000dd54 <[^>]*> nop ++0000dd58 <[^>]*> nop ++0000dd5c <[^>]*> nop ++0000dd60 <[^>]*> nop ++0000dd64 <[^>]*> nop ++0000dd68 <[^>]*> nop ++0000dd6c <[^>]*> nop ++0000dd70 <[^>]*> nop ++0000dd74 <[^>]*> nop ++0000dd78 <[^>]*> nop ++0000dd7c <[^>]*> nop ++0000dd80 <[^>]*> nop ++0000dd84 <[^>]*> nop ++0000dd88 <[^>]*> nop ++0000dd8c <[^>]*> nop ++0000dd90 <[^>]*> nop ++0000dd94 <[^>]*> nop ++0000dd98 <[^>]*> nop ++0000dd9c <[^>]*> nop ++0000dda0 <[^>]*> nop ++0000dda4 <[^>]*> nop ++0000dda8 <[^>]*> nop ++0000ddac <[^>]*> nop ++0000ddb0 <[^>]*> nop ++0000ddb4 <[^>]*> nop ++0000ddb8 <[^>]*> nop ++0000ddbc <[^>]*> nop ++0000ddc0 <[^>]*> nop ++0000ddc4 <[^>]*> nop ++0000ddc8 <[^>]*> nop ++0000ddcc <[^>]*> nop ++0000ddd0 <[^>]*> nop ++0000ddd4 <[^>]*> nop ++0000ddd8 <[^>]*> nop ++0000dddc <[^>]*> nop ++0000dde0 <[^>]*> nop ++0000dde4 <[^>]*> nop ++0000dde8 <[^>]*> nop ++0000ddec <[^>]*> nop ++0000ddf0 <[^>]*> nop ++0000ddf4 <[^>]*> nop ++0000ddf8 <[^>]*> nop ++0000ddfc <[^>]*> nop ++0000de00 <[^>]*> nop ++0000de04 <[^>]*> nop ++0000de08 <[^>]*> nop ++0000de0c <[^>]*> nop ++0000de10 <[^>]*> nop ++0000de14 <[^>]*> nop ++0000de18 <[^>]*> nop ++0000de1c <[^>]*> nop ++0000de20 <[^>]*> nop ++0000de24 <[^>]*> nop ++0000de28 <[^>]*> nop ++0000de2c <[^>]*> nop ++0000de30 <[^>]*> nop ++0000de34 <[^>]*> nop ++0000de38 <[^>]*> nop ++0000de3c <[^>]*> nop ++0000de40 <[^>]*> nop ++0000de44 <[^>]*> nop ++0000de48 <[^>]*> nop ++0000de4c <[^>]*> nop ++0000de50 <[^>]*> nop ++0000de54 <[^>]*> nop ++0000de58 <[^>]*> nop ++0000de5c <[^>]*> nop ++0000de60 <[^>]*> nop ++0000de64 <[^>]*> nop ++0000de68 <[^>]*> nop ++0000de6c <[^>]*> nop ++0000de70 <[^>]*> nop ++0000de74 <[^>]*> nop ++0000de78 <[^>]*> nop ++0000de7c <[^>]*> nop ++0000de80 <[^>]*> nop ++0000de84 <[^>]*> nop ++0000de88 <[^>]*> nop ++0000de8c <[^>]*> nop ++0000de90 <[^>]*> nop ++0000de94 <[^>]*> nop ++0000de98 <[^>]*> nop ++0000de9c <[^>]*> nop ++0000dea0 <[^>]*> nop ++0000dea4 <[^>]*> nop ++0000dea8 <[^>]*> nop ++0000deac <[^>]*> nop ++0000deb0 <[^>]*> nop ++0000deb4 <[^>]*> nop ++0000deb8 <[^>]*> nop ++0000debc <[^>]*> nop ++0000dec0 <[^>]*> nop ++0000dec4 <[^>]*> nop ++0000dec8 <[^>]*> nop ++0000decc <[^>]*> nop ++0000ded0 <[^>]*> nop ++0000ded4 <[^>]*> nop ++0000ded8 <[^>]*> nop ++0000dedc <[^>]*> nop ++0000dee0 <[^>]*> nop ++0000dee4 <[^>]*> nop ++0000dee8 <[^>]*> nop ++0000deec <[^>]*> nop ++0000def0 <[^>]*> nop ++0000def4 <[^>]*> nop ++0000def8 <[^>]*> nop ++0000defc <[^>]*> nop ++0000df00 <[^>]*> nop ++0000df04 <[^>]*> nop ++0000df08 <[^>]*> nop ++0000df0c <[^>]*> nop ++0000df10 <[^>]*> nop ++0000df14 <[^>]*> nop ++0000df18 <[^>]*> nop ++0000df1c <[^>]*> nop ++0000df20 <[^>]*> nop ++0000df24 <[^>]*> nop ++0000df28 <[^>]*> nop ++0000df2c <[^>]*> nop ++0000df30 <[^>]*> nop ++0000df34 <[^>]*> nop ++0000df38 <[^>]*> nop ++0000df3c <[^>]*> nop ++0000df40 <[^>]*> nop ++0000df44 <[^>]*> nop ++0000df48 <[^>]*> nop ++0000df4c <[^>]*> nop ++0000df50 <[^>]*> nop ++0000df54 <[^>]*> nop ++0000df58 <[^>]*> nop ++0000df5c <[^>]*> nop ++0000df60 <[^>]*> nop ++0000df64 <[^>]*> nop ++0000df68 <[^>]*> nop ++0000df6c <[^>]*> nop ++0000df70 <[^>]*> nop ++0000df74 <[^>]*> nop ++0000df78 <[^>]*> nop ++0000df7c <[^>]*> nop ++0000df80 <[^>]*> nop ++0000df84 <[^>]*> nop ++0000df88 <[^>]*> nop ++0000df8c <[^>]*> nop ++0000df90 <[^>]*> nop ++0000df94 <[^>]*> nop ++0000df98 <[^>]*> nop ++0000df9c <[^>]*> nop ++0000dfa0 <[^>]*> nop ++0000dfa4 <[^>]*> nop ++0000dfa8 <[^>]*> nop ++0000dfac <[^>]*> nop ++0000dfb0 <[^>]*> nop ++0000dfb4 <[^>]*> nop ++0000dfb8 <[^>]*> nop ++0000dfbc <[^>]*> nop ++0000dfc0 <[^>]*> nop ++0000dfc4 <[^>]*> nop ++0000dfc8 <[^>]*> nop ++0000dfcc <[^>]*> nop ++0000dfd0 <[^>]*> nop ++0000dfd4 <[^>]*> nop ++0000dfd8 <[^>]*> nop ++0000dfdc <[^>]*> nop ++0000dfe0 <[^>]*> nop ++0000dfe4 <[^>]*> nop ++0000dfe8 <[^>]*> nop ++0000dfec <[^>]*> nop ++0000dff0 <[^>]*> nop ++0000dff4 <[^>]*> nop ++0000dff8 <[^>]*> nop ++0000dffc <[^>]*> nop ++0000e000 <[^>]*> nop ++0000e004 <[^>]*> nop ++0000e008 <[^>]*> nop ++0000e00c <[^>]*> nop ++0000e010 <[^>]*> nop ++0000e014 <[^>]*> nop ++0000e018 <[^>]*> nop ++0000e01c <[^>]*> nop ++0000e020 <[^>]*> nop ++0000e024 <[^>]*> nop ++0000e028 <[^>]*> nop ++0000e02c <[^>]*> nop ++0000e030 <[^>]*> nop ++0000e034 <[^>]*> nop ++0000e038 <[^>]*> nop ++0000e03c <[^>]*> nop ++0000e040 <[^>]*> nop ++0000e044 <[^>]*> nop ++0000e048 <[^>]*> nop ++0000e04c <[^>]*> nop ++0000e050 <[^>]*> nop ++0000e054 <[^>]*> nop ++0000e058 <[^>]*> nop ++0000e05c <[^>]*> nop ++0000e060 <[^>]*> nop ++0000e064 <[^>]*> nop ++0000e068 <[^>]*> nop ++0000e06c <[^>]*> nop ++0000e070 <[^>]*> nop ++0000e074 <[^>]*> nop ++0000e078 <[^>]*> nop ++0000e07c <[^>]*> nop ++0000e080 <[^>]*> nop ++0000e084 <[^>]*> nop ++0000e088 <[^>]*> nop ++0000e08c <[^>]*> nop ++0000e090 <[^>]*> nop ++0000e094 <[^>]*> nop ++0000e098 <[^>]*> nop ++0000e09c <[^>]*> nop ++0000e0a0 <[^>]*> nop ++0000e0a4 <[^>]*> nop ++0000e0a8 <[^>]*> nop ++0000e0ac <[^>]*> nop ++0000e0b0 <[^>]*> nop ++0000e0b4 <[^>]*> nop ++0000e0b8 <[^>]*> nop ++0000e0bc <[^>]*> nop ++0000e0c0 <[^>]*> nop ++0000e0c4 <[^>]*> nop ++0000e0c8 <[^>]*> nop ++0000e0cc <[^>]*> nop ++0000e0d0 <[^>]*> nop ++0000e0d4 <[^>]*> nop ++0000e0d8 <[^>]*> nop ++0000e0dc <[^>]*> nop ++0000e0e0 <[^>]*> nop ++0000e0e4 <[^>]*> nop ++0000e0e8 <[^>]*> nop ++0000e0ec <[^>]*> nop ++0000e0f0 <[^>]*> nop ++0000e0f4 <[^>]*> nop ++0000e0f8 <[^>]*> nop ++0000e0fc <[^>]*> nop ++0000e100 <[^>]*> nop ++0000e104 <[^>]*> nop ++0000e108 <[^>]*> nop ++0000e10c <[^>]*> nop ++0000e110 <[^>]*> nop ++0000e114 <[^>]*> nop ++0000e118 <[^>]*> nop ++0000e11c <[^>]*> nop ++0000e120 <[^>]*> nop ++0000e124 <[^>]*> nop ++0000e128 <[^>]*> nop ++0000e12c <[^>]*> nop ++0000e130 <[^>]*> nop ++0000e134 <[^>]*> nop ++0000e138 <[^>]*> nop ++0000e13c <[^>]*> nop ++0000e140 <[^>]*> nop ++0000e144 <[^>]*> nop ++0000e148 <[^>]*> nop ++0000e14c <[^>]*> nop ++0000e150 <[^>]*> nop ++0000e154 <[^>]*> nop ++0000e158 <[^>]*> nop ++0000e15c <[^>]*> nop ++0000e160 <[^>]*> nop ++0000e164 <[^>]*> nop ++0000e168 <[^>]*> nop ++0000e16c <[^>]*> nop ++0000e170 <[^>]*> nop ++0000e174 <[^>]*> nop ++0000e178 <[^>]*> nop ++0000e17c <[^>]*> nop ++0000e180 <[^>]*> nop ++0000e184 <[^>]*> nop ++0000e188 <[^>]*> nop ++0000e18c <[^>]*> nop ++0000e190 <[^>]*> nop ++0000e194 <[^>]*> nop ++0000e198 <[^>]*> nop ++0000e19c <[^>]*> nop ++0000e1a0 <[^>]*> nop ++0000e1a4 <[^>]*> nop ++0000e1a8 <[^>]*> nop ++0000e1ac <[^>]*> nop ++0000e1b0 <[^>]*> nop ++0000e1b4 <[^>]*> nop ++0000e1b8 <[^>]*> nop ++0000e1bc <[^>]*> nop ++0000e1c0 <[^>]*> nop ++0000e1c4 <[^>]*> nop ++0000e1c8 <[^>]*> nop ++0000e1cc <[^>]*> nop ++0000e1d0 <[^>]*> nop ++0000e1d4 <[^>]*> nop ++0000e1d8 <[^>]*> nop ++0000e1dc <[^>]*> nop ++0000e1e0 <[^>]*> nop ++0000e1e4 <[^>]*> nop ++0000e1e8 <[^>]*> nop ++0000e1ec <[^>]*> nop ++0000e1f0 <[^>]*> nop ++0000e1f4 <[^>]*> nop ++0000e1f8 <[^>]*> nop ++0000e1fc <[^>]*> nop ++0000e200 <[^>]*> nop ++0000e204 <[^>]*> nop ++0000e208 <[^>]*> nop ++0000e20c <[^>]*> nop ++0000e210 <[^>]*> nop ++0000e214 <[^>]*> nop ++0000e218 <[^>]*> nop ++0000e21c <[^>]*> nop ++0000e220 <[^>]*> nop ++0000e224 <[^>]*> nop ++0000e228 <[^>]*> nop ++0000e22c <[^>]*> nop ++0000e230 <[^>]*> nop ++0000e234 <[^>]*> nop ++0000e238 <[^>]*> nop ++0000e23c <[^>]*> nop ++0000e240 <[^>]*> nop ++0000e244 <[^>]*> nop ++0000e248 <[^>]*> nop ++0000e24c <[^>]*> nop ++0000e250 <[^>]*> nop ++0000e254 <[^>]*> nop ++0000e258 <[^>]*> nop ++0000e25c <[^>]*> nop ++0000e260 <[^>]*> nop ++0000e264 <[^>]*> nop ++0000e268 <[^>]*> nop ++0000e26c <[^>]*> nop ++0000e270 <[^>]*> nop ++0000e274 <[^>]*> nop ++0000e278 <[^>]*> nop ++0000e27c <[^>]*> nop ++0000e280 <[^>]*> nop ++0000e284 <[^>]*> nop ++0000e288 <[^>]*> nop ++0000e28c <[^>]*> nop ++0000e290 <[^>]*> nop ++0000e294 <[^>]*> nop ++0000e298 <[^>]*> nop ++0000e29c <[^>]*> nop ++0000e2a0 <[^>]*> nop ++0000e2a4 <[^>]*> nop ++0000e2a8 <[^>]*> nop ++0000e2ac <[^>]*> nop ++0000e2b0 <[^>]*> nop ++0000e2b4 <[^>]*> nop ++0000e2b8 <[^>]*> nop ++0000e2bc <[^>]*> nop ++0000e2c0 <[^>]*> nop ++0000e2c4 <[^>]*> nop ++0000e2c8 <[^>]*> nop ++0000e2cc <[^>]*> nop ++0000e2d0 <[^>]*> nop ++0000e2d4 <[^>]*> nop ++0000e2d8 <[^>]*> nop ++0000e2dc <[^>]*> nop ++0000e2e0 <[^>]*> nop ++0000e2e4 <[^>]*> nop ++0000e2e8 <[^>]*> nop ++0000e2ec <[^>]*> nop ++0000e2f0 <[^>]*> nop ++0000e2f4 <[^>]*> nop ++0000e2f8 <[^>]*> nop ++0000e2fc <[^>]*> nop ++0000e300 <[^>]*> nop ++0000e304 <[^>]*> nop ++0000e308 <[^>]*> nop ++0000e30c <[^>]*> nop ++0000e310 <[^>]*> nop ++0000e314 <[^>]*> nop ++0000e318 <[^>]*> nop ++0000e31c <[^>]*> nop ++0000e320 <[^>]*> nop ++0000e324 <[^>]*> nop ++0000e328 <[^>]*> nop ++0000e32c <[^>]*> nop ++0000e330 <[^>]*> nop ++0000e334 <[^>]*> nop ++0000e338 <[^>]*> nop ++0000e33c <[^>]*> nop ++0000e340 <[^>]*> nop ++0000e344 <[^>]*> nop ++0000e348 <[^>]*> nop ++0000e34c <[^>]*> nop ++0000e350 <[^>]*> nop ++0000e354 <[^>]*> nop ++0000e358 <[^>]*> nop ++0000e35c <[^>]*> nop ++0000e360 <[^>]*> nop ++0000e364 <[^>]*> nop ++0000e368 <[^>]*> nop ++0000e36c <[^>]*> nop ++0000e370 <[^>]*> nop ++0000e374 <[^>]*> nop ++0000e378 <[^>]*> nop ++0000e37c <[^>]*> nop ++0000e380 <[^>]*> nop ++0000e384 <[^>]*> nop ++0000e388 <[^>]*> nop ++0000e38c <[^>]*> nop ++0000e390 <[^>]*> nop ++0000e394 <[^>]*> nop ++0000e398 <[^>]*> nop ++0000e39c <[^>]*> nop ++0000e3a0 <[^>]*> nop ++0000e3a4 <[^>]*> nop ++0000e3a8 <[^>]*> nop ++0000e3ac <[^>]*> nop ++0000e3b0 <[^>]*> nop ++0000e3b4 <[^>]*> nop ++0000e3b8 <[^>]*> nop ++0000e3bc <[^>]*> nop ++0000e3c0 <[^>]*> nop ++0000e3c4 <[^>]*> nop ++0000e3c8 <[^>]*> nop ++0000e3cc <[^>]*> nop ++0000e3d0 <[^>]*> nop ++0000e3d4 <[^>]*> nop ++0000e3d8 <[^>]*> nop ++0000e3dc <[^>]*> nop ++0000e3e0 <[^>]*> nop ++0000e3e4 <[^>]*> nop ++0000e3e8 <[^>]*> nop ++0000e3ec <[^>]*> nop ++0000e3f0 <[^>]*> nop ++0000e3f4 <[^>]*> nop ++0000e3f8 <[^>]*> nop ++0000e3fc <[^>]*> nop ++0000e400 <[^>]*> nop ++0000e404 <[^>]*> nop ++0000e408 <[^>]*> nop ++0000e40c <[^>]*> nop ++0000e410 <[^>]*> nop ++0000e414 <[^>]*> nop ++0000e418 <[^>]*> nop ++0000e41c <[^>]*> nop ++0000e420 <[^>]*> nop ++0000e424 <[^>]*> nop ++0000e428 <[^>]*> nop ++0000e42c <[^>]*> nop ++0000e430 <[^>]*> nop ++0000e434 <[^>]*> nop ++0000e438 <[^>]*> nop ++0000e43c <[^>]*> nop ++0000e440 <[^>]*> nop ++0000e444 <[^>]*> nop ++0000e448 <[^>]*> nop ++0000e44c <[^>]*> nop ++0000e450 <[^>]*> nop ++0000e454 <[^>]*> nop ++0000e458 <[^>]*> nop ++0000e45c <[^>]*> nop ++0000e460 <[^>]*> nop ++0000e464 <[^>]*> nop ++0000e468 <[^>]*> nop ++0000e46c <[^>]*> nop ++0000e470 <[^>]*> nop ++0000e474 <[^>]*> nop ++0000e478 <[^>]*> nop ++0000e47c <[^>]*> nop ++0000e480 <[^>]*> nop ++0000e484 <[^>]*> nop ++0000e488 <[^>]*> nop ++0000e48c <[^>]*> nop ++0000e490 <[^>]*> nop ++0000e494 <[^>]*> nop ++0000e498 <[^>]*> nop ++0000e49c <[^>]*> nop ++0000e4a0 <[^>]*> nop ++0000e4a4 <[^>]*> nop ++0000e4a8 <[^>]*> nop ++0000e4ac <[^>]*> nop ++0000e4b0 <[^>]*> nop ++0000e4b4 <[^>]*> nop ++0000e4b8 <[^>]*> nop ++0000e4bc <[^>]*> nop ++0000e4c0 <[^>]*> nop ++0000e4c4 <[^>]*> nop ++0000e4c8 <[^>]*> nop ++0000e4cc <[^>]*> nop ++0000e4d0 <[^>]*> nop ++0000e4d4 <[^>]*> nop ++0000e4d8 <[^>]*> nop ++0000e4dc <[^>]*> nop ++0000e4e0 <[^>]*> nop ++0000e4e4 <[^>]*> nop ++0000e4e8 <[^>]*> nop ++0000e4ec <[^>]*> nop ++0000e4f0 <[^>]*> nop ++0000e4f4 <[^>]*> nop ++0000e4f8 <[^>]*> nop ++0000e4fc <[^>]*> nop ++0000e500 <[^>]*> nop ++0000e504 <[^>]*> nop ++0000e508 <[^>]*> nop ++0000e50c <[^>]*> nop ++0000e510 <[^>]*> nop ++0000e514 <[^>]*> nop ++0000e518 <[^>]*> nop ++0000e51c <[^>]*> nop ++0000e520 <[^>]*> nop ++0000e524 <[^>]*> nop ++0000e528 <[^>]*> nop ++0000e52c <[^>]*> nop ++0000e530 <[^>]*> nop ++0000e534 <[^>]*> nop ++0000e538 <[^>]*> nop ++0000e53c <[^>]*> nop ++0000e540 <[^>]*> nop ++0000e544 <[^>]*> nop ++0000e548 <[^>]*> nop ++0000e54c <[^>]*> nop ++0000e550 <[^>]*> nop ++0000e554 <[^>]*> nop ++0000e558 <[^>]*> nop ++0000e55c <[^>]*> nop ++0000e560 <[^>]*> nop ++0000e564 <[^>]*> nop ++0000e568 <[^>]*> nop ++0000e56c <[^>]*> nop ++0000e570 <[^>]*> nop ++0000e574 <[^>]*> nop ++0000e578 <[^>]*> nop ++0000e57c <[^>]*> nop ++0000e580 <[^>]*> nop ++0000e584 <[^>]*> nop ++0000e588 <[^>]*> nop ++0000e58c <[^>]*> nop ++0000e590 <[^>]*> nop ++0000e594 <[^>]*> nop ++0000e598 <[^>]*> nop ++0000e59c <[^>]*> nop ++0000e5a0 <[^>]*> nop ++0000e5a4 <[^>]*> nop ++0000e5a8 <[^>]*> nop ++0000e5ac <[^>]*> nop ++0000e5b0 <[^>]*> nop ++0000e5b4 <[^>]*> nop ++0000e5b8 <[^>]*> nop ++0000e5bc <[^>]*> nop ++0000e5c0 <[^>]*> nop ++0000e5c4 <[^>]*> nop ++0000e5c8 <[^>]*> nop ++0000e5cc <[^>]*> nop ++0000e5d0 <[^>]*> nop ++0000e5d4 <[^>]*> nop ++0000e5d8 <[^>]*> nop ++0000e5dc <[^>]*> nop ++0000e5e0 <[^>]*> nop ++0000e5e4 <[^>]*> nop ++0000e5e8 <[^>]*> nop ++0000e5ec <[^>]*> nop ++0000e5f0 <[^>]*> nop ++0000e5f4 <[^>]*> nop ++0000e5f8 <[^>]*> nop ++0000e5fc <[^>]*> nop ++0000e600 <[^>]*> nop ++0000e604 <[^>]*> nop ++0000e608 <[^>]*> nop ++0000e60c <[^>]*> nop ++0000e610 <[^>]*> nop ++0000e614 <[^>]*> nop ++0000e618 <[^>]*> nop ++0000e61c <[^>]*> nop ++0000e620 <[^>]*> nop ++0000e624 <[^>]*> nop ++0000e628 <[^>]*> nop ++0000e62c <[^>]*> nop ++0000e630 <[^>]*> nop ++0000e634 <[^>]*> nop ++0000e638 <[^>]*> nop ++0000e63c <[^>]*> nop ++0000e640 <[^>]*> nop ++0000e644 <[^>]*> nop ++0000e648 <[^>]*> nop ++0000e64c <[^>]*> nop ++0000e650 <[^>]*> nop ++0000e654 <[^>]*> nop ++0000e658 <[^>]*> nop ++0000e65c <[^>]*> nop ++0000e660 <[^>]*> nop ++0000e664 <[^>]*> nop ++0000e668 <[^>]*> nop ++0000e66c <[^>]*> nop ++0000e670 <[^>]*> nop ++0000e674 <[^>]*> nop ++0000e678 <[^>]*> nop ++0000e67c <[^>]*> nop ++0000e680 <[^>]*> nop ++0000e684 <[^>]*> nop ++0000e688 <[^>]*> nop ++0000e68c <[^>]*> nop ++0000e690 <[^>]*> nop ++0000e694 <[^>]*> nop ++0000e698 <[^>]*> nop ++0000e69c <[^>]*> nop ++0000e6a0 <[^>]*> nop ++0000e6a4 <[^>]*> nop ++0000e6a8 <[^>]*> nop ++0000e6ac <[^>]*> nop ++0000e6b0 <[^>]*> nop ++0000e6b4 <[^>]*> nop ++0000e6b8 <[^>]*> nop ++0000e6bc <[^>]*> nop ++0000e6c0 <[^>]*> nop ++0000e6c4 <[^>]*> nop ++0000e6c8 <[^>]*> nop ++0000e6cc <[^>]*> nop ++0000e6d0 <[^>]*> nop ++0000e6d4 <[^>]*> nop ++0000e6d8 <[^>]*> nop ++0000e6dc <[^>]*> nop ++0000e6e0 <[^>]*> nop ++0000e6e4 <[^>]*> nop ++0000e6e8 <[^>]*> nop ++0000e6ec <[^>]*> nop ++0000e6f0 <[^>]*> nop ++0000e6f4 <[^>]*> nop ++0000e6f8 <[^>]*> nop ++0000e6fc <[^>]*> nop ++0000e700 <[^>]*> nop ++0000e704 <[^>]*> nop ++0000e708 <[^>]*> nop ++0000e70c <[^>]*> nop ++0000e710 <[^>]*> nop ++0000e714 <[^>]*> nop ++0000e718 <[^>]*> nop ++0000e71c <[^>]*> nop ++0000e720 <[^>]*> nop ++0000e724 <[^>]*> nop ++0000e728 <[^>]*> nop ++0000e72c <[^>]*> nop ++0000e730 <[^>]*> nop ++0000e734 <[^>]*> nop ++0000e738 <[^>]*> nop ++0000e73c <[^>]*> nop ++0000e740 <[^>]*> nop ++0000e744 <[^>]*> nop ++0000e748 <[^>]*> nop ++0000e74c <[^>]*> nop ++0000e750 <[^>]*> nop ++0000e754 <[^>]*> nop ++0000e758 <[^>]*> nop ++0000e75c <[^>]*> nop ++0000e760 <[^>]*> nop ++0000e764 <[^>]*> nop ++0000e768 <[^>]*> nop ++0000e76c <[^>]*> nop ++0000e770 <[^>]*> nop ++0000e774 <[^>]*> nop ++0000e778 <[^>]*> nop ++0000e77c <[^>]*> nop ++0000e780 <[^>]*> nop ++0000e784 <[^>]*> nop ++0000e788 <[^>]*> nop ++0000e78c <[^>]*> nop ++0000e790 <[^>]*> nop ++0000e794 <[^>]*> nop ++0000e798 <[^>]*> nop ++0000e79c <[^>]*> nop ++0000e7a0 <[^>]*> nop ++0000e7a4 <[^>]*> nop ++0000e7a8 <[^>]*> nop ++0000e7ac <[^>]*> nop ++0000e7b0 <[^>]*> nop ++0000e7b4 <[^>]*> nop ++0000e7b8 <[^>]*> nop ++0000e7bc <[^>]*> nop ++0000e7c0 <[^>]*> nop ++0000e7c4 <[^>]*> nop ++0000e7c8 <[^>]*> nop ++0000e7cc <[^>]*> nop ++0000e7d0 <[^>]*> nop ++0000e7d4 <[^>]*> nop ++0000e7d8 <[^>]*> nop ++0000e7dc <[^>]*> nop ++0000e7e0 <[^>]*> nop ++0000e7e4 <[^>]*> nop ++0000e7e8 <[^>]*> nop ++0000e7ec <[^>]*> nop ++0000e7f0 <[^>]*> nop ++0000e7f4 <[^>]*> nop ++0000e7f8 <[^>]*> nop ++0000e7fc <[^>]*> nop ++0000e800 <[^>]*> nop ++0000e804 <[^>]*> nop ++0000e808 <[^>]*> nop ++0000e80c <[^>]*> nop ++0000e810 <[^>]*> nop ++0000e814 <[^>]*> nop ++0000e818 <[^>]*> nop ++0000e81c <[^>]*> nop ++0000e820 <[^>]*> nop ++0000e824 <[^>]*> nop ++0000e828 <[^>]*> nop ++0000e82c <[^>]*> nop ++0000e830 <[^>]*> nop ++0000e834 <[^>]*> nop ++0000e838 <[^>]*> nop ++0000e83c <[^>]*> nop ++0000e840 <[^>]*> nop ++0000e844 <[^>]*> nop ++0000e848 <[^>]*> nop ++0000e84c <[^>]*> nop ++0000e850 <[^>]*> nop ++0000e854 <[^>]*> nop ++0000e858 <[^>]*> nop ++0000e85c <[^>]*> nop ++0000e860 <[^>]*> nop ++0000e864 <[^>]*> nop ++0000e868 <[^>]*> nop ++0000e86c <[^>]*> nop ++0000e870 <[^>]*> nop ++0000e874 <[^>]*> nop ++0000e878 <[^>]*> nop ++0000e87c <[^>]*> nop ++0000e880 <[^>]*> nop ++0000e884 <[^>]*> nop ++0000e888 <[^>]*> nop ++0000e88c <[^>]*> nop ++0000e890 <[^>]*> nop ++0000e894 <[^>]*> nop ++0000e898 <[^>]*> nop ++0000e89c <[^>]*> nop ++0000e8a0 <[^>]*> nop ++0000e8a4 <[^>]*> nop ++0000e8a8 <[^>]*> nop ++0000e8ac <[^>]*> nop ++0000e8b0 <[^>]*> nop ++0000e8b4 <[^>]*> nop ++0000e8b8 <[^>]*> nop ++0000e8bc <[^>]*> nop ++0000e8c0 <[^>]*> nop ++0000e8c4 <[^>]*> nop ++0000e8c8 <[^>]*> nop ++0000e8cc <[^>]*> nop ++0000e8d0 <[^>]*> nop ++0000e8d4 <[^>]*> nop ++0000e8d8 <[^>]*> nop ++0000e8dc <[^>]*> nop ++0000e8e0 <[^>]*> nop ++0000e8e4 <[^>]*> nop ++0000e8e8 <[^>]*> nop ++0000e8ec <[^>]*> nop ++0000e8f0 <[^>]*> nop ++0000e8f4 <[^>]*> nop ++0000e8f8 <[^>]*> nop ++0000e8fc <[^>]*> nop ++0000e900 <[^>]*> nop ++0000e904 <[^>]*> nop ++0000e908 <[^>]*> nop ++0000e90c <[^>]*> nop ++0000e910 <[^>]*> nop ++0000e914 <[^>]*> nop ++0000e918 <[^>]*> nop ++0000e91c <[^>]*> nop ++0000e920 <[^>]*> nop ++0000e924 <[^>]*> nop ++0000e928 <[^>]*> nop ++0000e92c <[^>]*> nop ++0000e930 <[^>]*> nop ++0000e934 <[^>]*> nop ++0000e938 <[^>]*> nop ++0000e93c <[^>]*> nop ++0000e940 <[^>]*> nop ++0000e944 <[^>]*> nop ++0000e948 <[^>]*> nop ++0000e94c <[^>]*> nop ++0000e950 <[^>]*> nop ++0000e954 <[^>]*> nop ++0000e958 <[^>]*> nop ++0000e95c <[^>]*> nop ++0000e960 <[^>]*> nop ++0000e964 <[^>]*> nop ++0000e968 <[^>]*> nop ++0000e96c <[^>]*> nop ++0000e970 <[^>]*> nop ++0000e974 <[^>]*> nop ++0000e978 <[^>]*> nop ++0000e97c <[^>]*> nop ++0000e980 <[^>]*> nop ++0000e984 <[^>]*> nop ++0000e988 <[^>]*> nop ++0000e98c <[^>]*> nop ++0000e990 <[^>]*> nop ++0000e994 <[^>]*> nop ++0000e998 <[^>]*> nop ++0000e99c <[^>]*> nop ++0000e9a0 <[^>]*> nop ++0000e9a4 <[^>]*> nop ++0000e9a8 <[^>]*> nop ++0000e9ac <[^>]*> nop ++0000e9b0 <[^>]*> nop ++0000e9b4 <[^>]*> nop ++0000e9b8 <[^>]*> nop ++0000e9bc <[^>]*> nop ++0000e9c0 <[^>]*> nop ++0000e9c4 <[^>]*> nop ++0000e9c8 <[^>]*> nop ++0000e9cc <[^>]*> nop ++0000e9d0 <[^>]*> nop ++0000e9d4 <[^>]*> nop ++0000e9d8 <[^>]*> nop ++0000e9dc <[^>]*> nop ++0000e9e0 <[^>]*> nop ++0000e9e4 <[^>]*> nop ++0000e9e8 <[^>]*> nop ++0000e9ec <[^>]*> nop ++0000e9f0 <[^>]*> nop ++0000e9f4 <[^>]*> nop ++0000e9f8 <[^>]*> nop ++0000e9fc <[^>]*> nop ++0000ea00 <[^>]*> nop ++0000ea04 <[^>]*> nop ++0000ea08 <[^>]*> nop ++0000ea0c <[^>]*> nop ++0000ea10 <[^>]*> nop ++0000ea14 <[^>]*> nop ++0000ea18 <[^>]*> nop ++0000ea1c <[^>]*> nop ++0000ea20 <[^>]*> nop ++0000ea24 <[^>]*> nop ++0000ea28 <[^>]*> nop ++0000ea2c <[^>]*> nop ++0000ea30 <[^>]*> nop ++0000ea34 <[^>]*> nop ++0000ea38 <[^>]*> nop ++0000ea3c <[^>]*> nop ++0000ea40 <[^>]*> nop ++0000ea44 <[^>]*> nop ++0000ea48 <[^>]*> nop ++0000ea4c <[^>]*> nop ++0000ea50 <[^>]*> nop ++0000ea54 <[^>]*> nop ++0000ea58 <[^>]*> nop ++0000ea5c <[^>]*> nop ++0000ea60 <[^>]*> nop ++0000ea64 <[^>]*> nop ++0000ea68 <[^>]*> nop ++0000ea6c <[^>]*> nop ++0000ea70 <[^>]*> nop ++0000ea74 <[^>]*> nop ++0000ea78 <[^>]*> nop ++0000ea7c <[^>]*> nop ++0000ea80 <[^>]*> nop ++0000ea84 <[^>]*> nop ++0000ea88 <[^>]*> nop ++0000ea8c <[^>]*> nop ++0000ea90 <[^>]*> nop ++0000ea94 <[^>]*> nop ++0000ea98 <[^>]*> nop ++0000ea9c <[^>]*> nop ++0000eaa0 <[^>]*> nop ++0000eaa4 <[^>]*> nop ++0000eaa8 <[^>]*> nop ++0000eaac <[^>]*> nop ++0000eab0 <[^>]*> nop ++0000eab4 <[^>]*> nop ++0000eab8 <[^>]*> nop ++0000eabc <[^>]*> nop ++0000eac0 <[^>]*> nop ++0000eac4 <[^>]*> nop ++0000eac8 <[^>]*> nop ++0000eacc <[^>]*> nop ++0000ead0 <[^>]*> nop ++0000ead4 <[^>]*> nop ++0000ead8 <[^>]*> nop ++0000eadc <[^>]*> nop ++0000eae0 <[^>]*> nop ++0000eae4 <[^>]*> nop ++0000eae8 <[^>]*> nop ++0000eaec <[^>]*> nop ++0000eaf0 <[^>]*> nop ++0000eaf4 <[^>]*> nop ++0000eaf8 <[^>]*> nop ++0000eafc <[^>]*> nop ++0000eb00 <[^>]*> nop ++0000eb04 <[^>]*> nop ++0000eb08 <[^>]*> nop ++0000eb0c <[^>]*> nop ++0000eb10 <[^>]*> nop ++0000eb14 <[^>]*> nop ++0000eb18 <[^>]*> nop ++0000eb1c <[^>]*> nop ++0000eb20 <[^>]*> nop ++0000eb24 <[^>]*> nop ++0000eb28 <[^>]*> nop ++0000eb2c <[^>]*> nop ++0000eb30 <[^>]*> nop ++0000eb34 <[^>]*> nop ++0000eb38 <[^>]*> nop ++0000eb3c <[^>]*> nop ++0000eb40 <[^>]*> nop ++0000eb44 <[^>]*> nop ++0000eb48 <[^>]*> nop ++0000eb4c <[^>]*> nop ++0000eb50 <[^>]*> nop ++0000eb54 <[^>]*> nop ++0000eb58 <[^>]*> nop ++0000eb5c <[^>]*> nop ++0000eb60 <[^>]*> nop ++0000eb64 <[^>]*> nop ++0000eb68 <[^>]*> nop ++0000eb6c <[^>]*> nop ++0000eb70 <[^>]*> nop ++0000eb74 <[^>]*> nop ++0000eb78 <[^>]*> nop ++0000eb7c <[^>]*> nop ++0000eb80 <[^>]*> nop ++0000eb84 <[^>]*> nop ++0000eb88 <[^>]*> nop ++0000eb8c <[^>]*> nop ++0000eb90 <[^>]*> nop ++0000eb94 <[^>]*> nop ++0000eb98 <[^>]*> nop ++0000eb9c <[^>]*> nop ++0000eba0 <[^>]*> nop ++0000eba4 <[^>]*> nop ++0000eba8 <[^>]*> nop ++0000ebac <[^>]*> nop ++0000ebb0 <[^>]*> nop ++0000ebb4 <[^>]*> nop ++0000ebb8 <[^>]*> nop ++0000ebbc <[^>]*> nop ++0000ebc0 <[^>]*> nop ++0000ebc4 <[^>]*> nop ++0000ebc8 <[^>]*> nop ++0000ebcc <[^>]*> nop ++0000ebd0 <[^>]*> nop ++0000ebd4 <[^>]*> nop ++0000ebd8 <[^>]*> nop ++0000ebdc <[^>]*> nop ++0000ebe0 <[^>]*> nop ++0000ebe4 <[^>]*> nop ++0000ebe8 <[^>]*> nop ++0000ebec <[^>]*> nop ++0000ebf0 <[^>]*> nop ++0000ebf4 <[^>]*> nop ++0000ebf8 <[^>]*> nop ++0000ebfc <[^>]*> nop ++0000ec00 <[^>]*> nop ++0000ec04 <[^>]*> nop ++0000ec08 <[^>]*> nop ++0000ec0c <[^>]*> nop ++0000ec10 <[^>]*> nop ++0000ec14 <[^>]*> nop ++0000ec18 <[^>]*> nop ++0000ec1c <[^>]*> nop ++0000ec20 <[^>]*> nop ++0000ec24 <[^>]*> nop ++0000ec28 <[^>]*> nop ++0000ec2c <[^>]*> nop ++0000ec30 <[^>]*> nop ++0000ec34 <[^>]*> nop ++0000ec38 <[^>]*> nop ++0000ec3c <[^>]*> nop ++0000ec40 <[^>]*> nop ++0000ec44 <[^>]*> nop ++0000ec48 <[^>]*> nop ++0000ec4c <[^>]*> nop ++0000ec50 <[^>]*> nop ++0000ec54 <[^>]*> nop ++0000ec58 <[^>]*> nop ++0000ec5c <[^>]*> nop ++0000ec60 <[^>]*> nop ++0000ec64 <[^>]*> nop ++0000ec68 <[^>]*> nop ++0000ec6c <[^>]*> nop ++0000ec70 <[^>]*> nop ++0000ec74 <[^>]*> nop ++0000ec78 <[^>]*> nop ++0000ec7c <[^>]*> nop ++0000ec80 <[^>]*> nop ++0000ec84 <[^>]*> nop ++0000ec88 <[^>]*> nop ++0000ec8c <[^>]*> nop ++0000ec90 <[^>]*> nop ++0000ec94 <[^>]*> nop ++0000ec98 <[^>]*> nop ++0000ec9c <[^>]*> nop ++0000eca0 <[^>]*> nop ++0000eca4 <[^>]*> nop ++0000eca8 <[^>]*> nop ++0000ecac <[^>]*> nop ++0000ecb0 <[^>]*> nop ++0000ecb4 <[^>]*> nop ++0000ecb8 <[^>]*> nop ++0000ecbc <[^>]*> nop ++0000ecc0 <[^>]*> nop ++0000ecc4 <[^>]*> nop ++0000ecc8 <[^>]*> nop ++0000eccc <[^>]*> nop ++0000ecd0 <[^>]*> nop ++0000ecd4 <[^>]*> nop ++0000ecd8 <[^>]*> nop ++0000ecdc <[^>]*> nop ++0000ece0 <[^>]*> nop ++0000ece4 <[^>]*> nop ++0000ece8 <[^>]*> nop ++0000ecec <[^>]*> nop ++0000ecf0 <[^>]*> nop ++0000ecf4 <[^>]*> nop ++0000ecf8 <[^>]*> nop ++0000ecfc <[^>]*> nop ++0000ed00 <[^>]*> nop ++0000ed04 <[^>]*> nop ++0000ed08 <[^>]*> nop ++0000ed0c <[^>]*> nop ++0000ed10 <[^>]*> nop ++0000ed14 <[^>]*> nop ++0000ed18 <[^>]*> nop ++0000ed1c <[^>]*> nop ++0000ed20 <[^>]*> nop ++0000ed24 <[^>]*> nop ++0000ed28 <[^>]*> nop ++0000ed2c <[^>]*> nop ++0000ed30 <[^>]*> nop ++0000ed34 <[^>]*> nop ++0000ed38 <[^>]*> nop ++0000ed3c <[^>]*> nop ++0000ed40 <[^>]*> nop ++0000ed44 <[^>]*> nop ++0000ed48 <[^>]*> nop ++0000ed4c <[^>]*> nop ++0000ed50 <[^>]*> nop ++0000ed54 <[^>]*> nop ++0000ed58 <[^>]*> nop ++0000ed5c <[^>]*> nop ++0000ed60 <[^>]*> nop ++0000ed64 <[^>]*> nop ++0000ed68 <[^>]*> nop ++0000ed6c <[^>]*> nop ++0000ed70 <[^>]*> nop ++0000ed74 <[^>]*> nop ++0000ed78 <[^>]*> nop ++0000ed7c <[^>]*> nop ++0000ed80 <[^>]*> nop ++0000ed84 <[^>]*> nop ++0000ed88 <[^>]*> nop ++0000ed8c <[^>]*> nop ++0000ed90 <[^>]*> nop ++0000ed94 <[^>]*> nop ++0000ed98 <[^>]*> nop ++0000ed9c <[^>]*> nop ++0000eda0 <[^>]*> nop ++0000eda4 <[^>]*> nop ++0000eda8 <[^>]*> nop ++0000edac <[^>]*> nop ++0000edb0 <[^>]*> nop ++0000edb4 <[^>]*> nop ++0000edb8 <[^>]*> nop ++0000edbc <[^>]*> nop ++0000edc0 <[^>]*> nop ++0000edc4 <[^>]*> nop ++0000edc8 <[^>]*> nop ++0000edcc <[^>]*> nop ++0000edd0 <[^>]*> nop ++0000edd4 <[^>]*> nop ++0000edd8 <[^>]*> nop ++0000eddc <[^>]*> nop ++0000ede0 <[^>]*> nop ++0000ede4 <[^>]*> nop ++0000ede8 <[^>]*> nop ++0000edec <[^>]*> nop ++0000edf0 <[^>]*> nop ++0000edf4 <[^>]*> nop ++0000edf8 <[^>]*> nop ++0000edfc <[^>]*> nop ++0000ee00 <[^>]*> nop ++0000ee04 <[^>]*> nop ++0000ee08 <[^>]*> nop ++0000ee0c <[^>]*> nop ++0000ee10 <[^>]*> nop ++0000ee14 <[^>]*> nop ++0000ee18 <[^>]*> nop ++0000ee1c <[^>]*> nop ++0000ee20 <[^>]*> nop ++0000ee24 <[^>]*> nop ++0000ee28 <[^>]*> nop ++0000ee2c <[^>]*> nop ++0000ee30 <[^>]*> nop ++0000ee34 <[^>]*> nop ++0000ee38 <[^>]*> nop ++0000ee3c <[^>]*> nop ++0000ee40 <[^>]*> nop ++0000ee44 <[^>]*> nop ++0000ee48 <[^>]*> nop ++0000ee4c <[^>]*> nop ++0000ee50 <[^>]*> nop ++0000ee54 <[^>]*> nop ++0000ee58 <[^>]*> nop ++0000ee5c <[^>]*> nop ++0000ee60 <[^>]*> nop ++0000ee64 <[^>]*> nop ++0000ee68 <[^>]*> nop ++0000ee6c <[^>]*> nop ++0000ee70 <[^>]*> nop ++0000ee74 <[^>]*> nop ++0000ee78 <[^>]*> nop ++0000ee7c <[^>]*> nop ++0000ee80 <[^>]*> nop ++0000ee84 <[^>]*> nop ++0000ee88 <[^>]*> nop ++0000ee8c <[^>]*> nop ++0000ee90 <[^>]*> nop ++0000ee94 <[^>]*> nop ++0000ee98 <[^>]*> nop ++0000ee9c <[^>]*> nop ++0000eea0 <[^>]*> nop ++0000eea4 <[^>]*> nop ++0000eea8 <[^>]*> nop ++0000eeac <[^>]*> nop ++0000eeb0 <[^>]*> nop ++0000eeb4 <[^>]*> nop ++0000eeb8 <[^>]*> nop ++0000eebc <[^>]*> nop ++0000eec0 <[^>]*> nop ++0000eec4 <[^>]*> nop ++0000eec8 <[^>]*> nop ++0000eecc <[^>]*> nop ++0000eed0 <[^>]*> nop ++0000eed4 <[^>]*> nop ++0000eed8 <[^>]*> nop ++0000eedc <[^>]*> nop ++0000eee0 <[^>]*> nop ++0000eee4 <[^>]*> nop ++0000eee8 <[^>]*> nop ++0000eeec <[^>]*> nop ++0000eef0 <[^>]*> nop ++0000eef4 <[^>]*> nop ++0000eef8 <[^>]*> nop ++0000eefc <[^>]*> nop ++0000ef00 <[^>]*> nop ++0000ef04 <[^>]*> nop ++0000ef08 <[^>]*> nop ++0000ef0c <[^>]*> nop ++0000ef10 <[^>]*> nop ++0000ef14 <[^>]*> nop ++0000ef18 <[^>]*> nop ++0000ef1c <[^>]*> nop ++0000ef20 <[^>]*> nop ++0000ef24 <[^>]*> nop ++0000ef28 <[^>]*> nop ++0000ef2c <[^>]*> nop ++0000ef30 <[^>]*> nop ++0000ef34 <[^>]*> nop ++0000ef38 <[^>]*> nop ++0000ef3c <[^>]*> nop ++0000ef40 <[^>]*> nop ++0000ef44 <[^>]*> nop ++0000ef48 <[^>]*> nop ++0000ef4c <[^>]*> nop ++0000ef50 <[^>]*> nop ++0000ef54 <[^>]*> nop ++0000ef58 <[^>]*> nop ++0000ef5c <[^>]*> nop ++0000ef60 <[^>]*> nop ++0000ef64 <[^>]*> nop ++0000ef68 <[^>]*> nop ++0000ef6c <[^>]*> nop ++0000ef70 <[^>]*> nop ++0000ef74 <[^>]*> nop ++0000ef78 <[^>]*> nop ++0000ef7c <[^>]*> nop ++0000ef80 <[^>]*> nop ++0000ef84 <[^>]*> nop ++0000ef88 <[^>]*> nop ++0000ef8c <[^>]*> nop ++0000ef90 <[^>]*> nop ++0000ef94 <[^>]*> nop ++0000ef98 <[^>]*> nop ++0000ef9c <[^>]*> nop ++0000efa0 <[^>]*> nop ++0000efa4 <[^>]*> nop ++0000efa8 <[^>]*> nop ++0000efac <[^>]*> nop ++0000efb0 <[^>]*> nop ++0000efb4 <[^>]*> nop ++0000efb8 <[^>]*> nop ++0000efbc <[^>]*> nop ++0000efc0 <[^>]*> nop ++0000efc4 <[^>]*> nop ++0000efc8 <[^>]*> nop ++0000efcc <[^>]*> nop ++0000efd0 <[^>]*> nop ++0000efd4 <[^>]*> nop ++0000efd8 <[^>]*> nop ++0000efdc <[^>]*> nop ++0000efe0 <[^>]*> nop ++0000efe4 <[^>]*> nop ++0000efe8 <[^>]*> nop ++0000efec <[^>]*> nop ++0000eff0 <[^>]*> nop ++0000eff4 <[^>]*> nop ++0000eff8 <[^>]*> nop ++0000effc <[^>]*> nop ++0000f000 <[^>]*> nop ++0000f004 <[^>]*> nop ++0000f008 <[^>]*> nop ++0000f00c <[^>]*> nop ++0000f010 <[^>]*> nop ++0000f014 <[^>]*> nop ++0000f018 <[^>]*> nop ++0000f01c <[^>]*> nop ++0000f020 <[^>]*> nop ++0000f024 <[^>]*> nop ++0000f028 <[^>]*> nop ++0000f02c <[^>]*> nop ++0000f030 <[^>]*> nop ++0000f034 <[^>]*> nop ++0000f038 <[^>]*> nop ++0000f03c <[^>]*> nop ++0000f040 <[^>]*> nop ++0000f044 <[^>]*> nop ++0000f048 <[^>]*> nop ++0000f04c <[^>]*> nop ++0000f050 <[^>]*> nop ++0000f054 <[^>]*> nop ++0000f058 <[^>]*> nop ++0000f05c <[^>]*> nop ++0000f060 <[^>]*> nop ++0000f064 <[^>]*> nop ++0000f068 <[^>]*> nop ++0000f06c <[^>]*> nop ++0000f070 <[^>]*> nop ++0000f074 <[^>]*> nop ++0000f078 <[^>]*> nop ++0000f07c <[^>]*> nop ++0000f080 <[^>]*> nop ++0000f084 <[^>]*> nop ++0000f088 <[^>]*> nop ++0000f08c <[^>]*> nop ++0000f090 <[^>]*> nop ++0000f094 <[^>]*> nop ++0000f098 <[^>]*> nop ++0000f09c <[^>]*> nop ++0000f0a0 <[^>]*> nop ++0000f0a4 <[^>]*> nop ++0000f0a8 <[^>]*> nop ++0000f0ac <[^>]*> nop ++0000f0b0 <[^>]*> nop ++0000f0b4 <[^>]*> nop ++0000f0b8 <[^>]*> nop ++0000f0bc <[^>]*> nop ++0000f0c0 <[^>]*> nop ++0000f0c4 <[^>]*> nop ++0000f0c8 <[^>]*> nop ++0000f0cc <[^>]*> nop ++0000f0d0 <[^>]*> nop ++0000f0d4 <[^>]*> nop ++0000f0d8 <[^>]*> nop ++0000f0dc <[^>]*> nop ++0000f0e0 <[^>]*> nop ++0000f0e4 <[^>]*> nop ++0000f0e8 <[^>]*> nop ++0000f0ec <[^>]*> nop ++0000f0f0 <[^>]*> nop ++0000f0f4 <[^>]*> nop ++0000f0f8 <[^>]*> nop ++0000f0fc <[^>]*> nop ++0000f100 <[^>]*> nop ++0000f104 <[^>]*> nop ++0000f108 <[^>]*> nop ++0000f10c <[^>]*> nop ++0000f110 <[^>]*> nop ++0000f114 <[^>]*> nop ++0000f118 <[^>]*> nop ++0000f11c <[^>]*> nop ++0000f120 <[^>]*> nop ++0000f124 <[^>]*> nop ++0000f128 <[^>]*> nop ++0000f12c <[^>]*> nop ++0000f130 <[^>]*> nop ++0000f134 <[^>]*> nop ++0000f138 <[^>]*> nop ++0000f13c <[^>]*> nop ++0000f140 <[^>]*> nop ++0000f144 <[^>]*> nop ++0000f148 <[^>]*> nop ++0000f14c <[^>]*> nop ++0000f150 <[^>]*> nop ++0000f154 <[^>]*> nop ++0000f158 <[^>]*> nop ++0000f15c <[^>]*> nop ++0000f160 <[^>]*> nop ++0000f164 <[^>]*> nop ++0000f168 <[^>]*> nop ++0000f16c <[^>]*> nop ++0000f170 <[^>]*> nop ++0000f174 <[^>]*> nop ++0000f178 <[^>]*> nop ++0000f17c <[^>]*> nop ++0000f180 <[^>]*> nop ++0000f184 <[^>]*> nop ++0000f188 <[^>]*> nop ++0000f18c <[^>]*> nop ++0000f190 <[^>]*> nop ++0000f194 <[^>]*> nop ++0000f198 <[^>]*> nop ++0000f19c <[^>]*> nop ++0000f1a0 <[^>]*> nop ++0000f1a4 <[^>]*> nop ++0000f1a8 <[^>]*> nop ++0000f1ac <[^>]*> nop ++0000f1b0 <[^>]*> nop ++0000f1b4 <[^>]*> nop ++0000f1b8 <[^>]*> nop ++0000f1bc <[^>]*> nop ++0000f1c0 <[^>]*> nop ++0000f1c4 <[^>]*> nop ++0000f1c8 <[^>]*> nop ++0000f1cc <[^>]*> nop ++0000f1d0 <[^>]*> nop ++0000f1d4 <[^>]*> nop ++0000f1d8 <[^>]*> nop ++0000f1dc <[^>]*> nop ++0000f1e0 <[^>]*> nop ++0000f1e4 <[^>]*> nop ++0000f1e8 <[^>]*> nop ++0000f1ec <[^>]*> nop ++0000f1f0 <[^>]*> nop ++0000f1f4 <[^>]*> nop ++0000f1f8 <[^>]*> nop ++0000f1fc <[^>]*> nop ++0000f200 <[^>]*> nop ++0000f204 <[^>]*> nop ++0000f208 <[^>]*> nop ++0000f20c <[^>]*> nop ++0000f210 <[^>]*> nop ++0000f214 <[^>]*> nop ++0000f218 <[^>]*> nop ++0000f21c <[^>]*> nop ++0000f220 <[^>]*> nop ++0000f224 <[^>]*> nop ++0000f228 <[^>]*> nop ++0000f22c <[^>]*> nop ++0000f230 <[^>]*> nop ++0000f234 <[^>]*> nop ++0000f238 <[^>]*> nop ++0000f23c <[^>]*> nop ++0000f240 <[^>]*> nop ++0000f244 <[^>]*> nop ++0000f248 <[^>]*> nop ++0000f24c <[^>]*> nop ++0000f250 <[^>]*> nop ++0000f254 <[^>]*> nop ++0000f258 <[^>]*> nop ++0000f25c <[^>]*> nop ++0000f260 <[^>]*> nop ++0000f264 <[^>]*> nop ++0000f268 <[^>]*> nop ++0000f26c <[^>]*> nop ++0000f270 <[^>]*> nop ++0000f274 <[^>]*> nop ++0000f278 <[^>]*> nop ++0000f27c <[^>]*> nop ++0000f280 <[^>]*> nop ++0000f284 <[^>]*> nop ++0000f288 <[^>]*> nop ++0000f28c <[^>]*> nop ++0000f290 <[^>]*> nop ++0000f294 <[^>]*> nop ++0000f298 <[^>]*> nop ++0000f29c <[^>]*> nop ++0000f2a0 <[^>]*> nop ++0000f2a4 <[^>]*> nop ++0000f2a8 <[^>]*> nop ++0000f2ac <[^>]*> nop ++0000f2b0 <[^>]*> nop ++0000f2b4 <[^>]*> nop ++0000f2b8 <[^>]*> nop ++0000f2bc <[^>]*> nop ++0000f2c0 <[^>]*> nop ++0000f2c4 <[^>]*> nop ++0000f2c8 <[^>]*> nop ++0000f2cc <[^>]*> nop ++0000f2d0 <[^>]*> nop ++0000f2d4 <[^>]*> nop ++0000f2d8 <[^>]*> nop ++0000f2dc <[^>]*> nop ++0000f2e0 <[^>]*> nop ++0000f2e4 <[^>]*> nop ++0000f2e8 <[^>]*> nop ++0000f2ec <[^>]*> nop ++0000f2f0 <[^>]*> nop ++0000f2f4 <[^>]*> nop ++0000f2f8 <[^>]*> nop ++0000f2fc <[^>]*> nop ++0000f300 <[^>]*> nop ++0000f304 <[^>]*> nop ++0000f308 <[^>]*> nop ++0000f30c <[^>]*> nop ++0000f310 <[^>]*> nop ++0000f314 <[^>]*> nop ++0000f318 <[^>]*> nop ++0000f31c <[^>]*> nop ++0000f320 <[^>]*> nop ++0000f324 <[^>]*> nop ++0000f328 <[^>]*> nop ++0000f32c <[^>]*> nop ++0000f330 <[^>]*> nop ++0000f334 <[^>]*> nop ++0000f338 <[^>]*> nop ++0000f33c <[^>]*> nop ++0000f340 <[^>]*> nop ++0000f344 <[^>]*> nop ++0000f348 <[^>]*> nop ++0000f34c <[^>]*> nop ++0000f350 <[^>]*> nop ++0000f354 <[^>]*> nop ++0000f358 <[^>]*> nop ++0000f35c <[^>]*> nop ++0000f360 <[^>]*> nop ++0000f364 <[^>]*> nop ++0000f368 <[^>]*> nop ++0000f36c <[^>]*> nop ++0000f370 <[^>]*> nop ++0000f374 <[^>]*> nop ++0000f378 <[^>]*> nop ++0000f37c <[^>]*> nop ++0000f380 <[^>]*> nop ++0000f384 <[^>]*> nop ++0000f388 <[^>]*> nop ++0000f38c <[^>]*> nop ++0000f390 <[^>]*> nop ++0000f394 <[^>]*> nop ++0000f398 <[^>]*> nop ++0000f39c <[^>]*> nop ++0000f3a0 <[^>]*> nop ++0000f3a4 <[^>]*> nop ++0000f3a8 <[^>]*> nop ++0000f3ac <[^>]*> nop ++0000f3b0 <[^>]*> nop ++0000f3b4 <[^>]*> nop ++0000f3b8 <[^>]*> nop ++0000f3bc <[^>]*> nop ++0000f3c0 <[^>]*> nop ++0000f3c4 <[^>]*> nop ++0000f3c8 <[^>]*> nop ++0000f3cc <[^>]*> nop ++0000f3d0 <[^>]*> nop ++0000f3d4 <[^>]*> nop ++0000f3d8 <[^>]*> nop ++0000f3dc <[^>]*> nop ++0000f3e0 <[^>]*> nop ++0000f3e4 <[^>]*> nop ++0000f3e8 <[^>]*> nop ++0000f3ec <[^>]*> nop ++0000f3f0 <[^>]*> nop ++0000f3f4 <[^>]*> nop ++0000f3f8 <[^>]*> nop ++0000f3fc <[^>]*> nop ++0000f400 <[^>]*> nop ++0000f404 <[^>]*> nop ++0000f408 <[^>]*> nop ++0000f40c <[^>]*> nop ++0000f410 <[^>]*> nop ++0000f414 <[^>]*> nop ++0000f418 <[^>]*> nop ++0000f41c <[^>]*> nop ++0000f420 <[^>]*> nop ++0000f424 <[^>]*> nop ++0000f428 <[^>]*> nop ++0000f42c <[^>]*> nop ++0000f430 <[^>]*> nop ++0000f434 <[^>]*> nop ++0000f438 <[^>]*> nop ++0000f43c <[^>]*> nop ++0000f440 <[^>]*> nop ++0000f444 <[^>]*> nop ++0000f448 <[^>]*> nop ++0000f44c <[^>]*> nop ++0000f450 <[^>]*> nop ++0000f454 <[^>]*> nop ++0000f458 <[^>]*> nop ++0000f45c <[^>]*> nop ++0000f460 <[^>]*> nop ++0000f464 <[^>]*> nop ++0000f468 <[^>]*> nop ++0000f46c <[^>]*> nop ++0000f470 <[^>]*> nop ++0000f474 <[^>]*> nop ++0000f478 <[^>]*> nop ++0000f47c <[^>]*> nop ++0000f480 <[^>]*> nop ++0000f484 <[^>]*> nop ++0000f488 <[^>]*> nop ++0000f48c <[^>]*> nop ++0000f490 <[^>]*> nop ++0000f494 <[^>]*> nop ++0000f498 <[^>]*> nop ++0000f49c <[^>]*> nop ++0000f4a0 <[^>]*> nop ++0000f4a4 <[^>]*> nop ++0000f4a8 <[^>]*> nop ++0000f4ac <[^>]*> nop ++0000f4b0 <[^>]*> nop ++0000f4b4 <[^>]*> nop ++0000f4b8 <[^>]*> nop ++0000f4bc <[^>]*> nop ++0000f4c0 <[^>]*> nop ++0000f4c4 <[^>]*> nop ++0000f4c8 <[^>]*> nop ++0000f4cc <[^>]*> nop ++0000f4d0 <[^>]*> nop ++0000f4d4 <[^>]*> nop ++0000f4d8 <[^>]*> nop ++0000f4dc <[^>]*> nop ++0000f4e0 <[^>]*> nop ++0000f4e4 <[^>]*> nop ++0000f4e8 <[^>]*> nop ++0000f4ec <[^>]*> nop ++0000f4f0 <[^>]*> nop ++0000f4f4 <[^>]*> nop ++0000f4f8 <[^>]*> nop ++0000f4fc <[^>]*> nop ++0000f500 <[^>]*> nop ++0000f504 <[^>]*> nop ++0000f508 <[^>]*> nop ++0000f50c <[^>]*> nop ++0000f510 <[^>]*> nop ++0000f514 <[^>]*> nop ++0000f518 <[^>]*> nop ++0000f51c <[^>]*> nop ++0000f520 <[^>]*> nop ++0000f524 <[^>]*> nop ++0000f528 <[^>]*> nop ++0000f52c <[^>]*> nop ++0000f530 <[^>]*> nop ++0000f534 <[^>]*> nop ++0000f538 <[^>]*> nop ++0000f53c <[^>]*> nop ++0000f540 <[^>]*> nop ++0000f544 <[^>]*> nop ++0000f548 <[^>]*> nop ++0000f54c <[^>]*> nop ++0000f550 <[^>]*> nop ++0000f554 <[^>]*> nop ++0000f558 <[^>]*> nop ++0000f55c <[^>]*> nop ++0000f560 <[^>]*> nop ++0000f564 <[^>]*> nop ++0000f568 <[^>]*> nop ++0000f56c <[^>]*> nop ++0000f570 <[^>]*> nop ++0000f574 <[^>]*> nop ++0000f578 <[^>]*> nop ++0000f57c <[^>]*> nop ++0000f580 <[^>]*> nop ++0000f584 <[^>]*> nop ++0000f588 <[^>]*> nop ++0000f58c <[^>]*> nop ++0000f590 <[^>]*> nop ++0000f594 <[^>]*> nop ++0000f598 <[^>]*> nop ++0000f59c <[^>]*> nop ++0000f5a0 <[^>]*> nop ++0000f5a4 <[^>]*> nop ++0000f5a8 <[^>]*> nop ++0000f5ac <[^>]*> nop ++0000f5b0 <[^>]*> nop ++0000f5b4 <[^>]*> nop ++0000f5b8 <[^>]*> nop ++0000f5bc <[^>]*> nop ++0000f5c0 <[^>]*> nop ++0000f5c4 <[^>]*> nop ++0000f5c8 <[^>]*> nop ++0000f5cc <[^>]*> nop ++0000f5d0 <[^>]*> nop ++0000f5d4 <[^>]*> nop ++0000f5d8 <[^>]*> nop ++0000f5dc <[^>]*> nop ++0000f5e0 <[^>]*> nop ++0000f5e4 <[^>]*> nop ++0000f5e8 <[^>]*> nop ++0000f5ec <[^>]*> nop ++0000f5f0 <[^>]*> nop ++0000f5f4 <[^>]*> nop ++0000f5f8 <[^>]*> nop ++0000f5fc <[^>]*> nop ++0000f600 <[^>]*> nop ++0000f604 <[^>]*> nop ++0000f608 <[^>]*> nop ++0000f60c <[^>]*> nop ++0000f610 <[^>]*> nop ++0000f614 <[^>]*> nop ++0000f618 <[^>]*> nop ++0000f61c <[^>]*> nop ++0000f620 <[^>]*> nop ++0000f624 <[^>]*> nop ++0000f628 <[^>]*> nop ++0000f62c <[^>]*> nop ++0000f630 <[^>]*> nop ++0000f634 <[^>]*> nop ++0000f638 <[^>]*> nop ++0000f63c <[^>]*> nop ++0000f640 <[^>]*> nop ++0000f644 <[^>]*> nop ++0000f648 <[^>]*> nop ++0000f64c <[^>]*> nop ++0000f650 <[^>]*> nop ++0000f654 <[^>]*> nop ++0000f658 <[^>]*> nop ++0000f65c <[^>]*> nop ++0000f660 <[^>]*> nop ++0000f664 <[^>]*> nop ++0000f668 <[^>]*> nop ++0000f66c <[^>]*> nop ++0000f670 <[^>]*> nop ++0000f674 <[^>]*> nop ++0000f678 <[^>]*> nop ++0000f67c <[^>]*> nop ++0000f680 <[^>]*> nop ++0000f684 <[^>]*> nop ++0000f688 <[^>]*> nop ++0000f68c <[^>]*> nop ++0000f690 <[^>]*> nop ++0000f694 <[^>]*> nop ++0000f698 <[^>]*> nop ++0000f69c <[^>]*> nop ++0000f6a0 <[^>]*> nop ++0000f6a4 <[^>]*> nop ++0000f6a8 <[^>]*> nop ++0000f6ac <[^>]*> nop ++0000f6b0 <[^>]*> nop ++0000f6b4 <[^>]*> nop ++0000f6b8 <[^>]*> nop ++0000f6bc <[^>]*> nop ++0000f6c0 <[^>]*> nop ++0000f6c4 <[^>]*> nop ++0000f6c8 <[^>]*> nop ++0000f6cc <[^>]*> nop ++0000f6d0 <[^>]*> nop ++0000f6d4 <[^>]*> nop ++0000f6d8 <[^>]*> nop ++0000f6dc <[^>]*> nop ++0000f6e0 <[^>]*> nop ++0000f6e4 <[^>]*> nop ++0000f6e8 <[^>]*> nop ++0000f6ec <[^>]*> nop ++0000f6f0 <[^>]*> nop ++0000f6f4 <[^>]*> nop ++0000f6f8 <[^>]*> nop ++0000f6fc <[^>]*> nop ++0000f700 <[^>]*> nop ++0000f704 <[^>]*> nop ++0000f708 <[^>]*> nop ++0000f70c <[^>]*> nop ++0000f710 <[^>]*> nop ++0000f714 <[^>]*> nop ++0000f718 <[^>]*> nop ++0000f71c <[^>]*> nop ++0000f720 <[^>]*> nop ++0000f724 <[^>]*> nop ++0000f728 <[^>]*> nop ++0000f72c <[^>]*> nop ++0000f730 <[^>]*> nop ++0000f734 <[^>]*> nop ++0000f738 <[^>]*> nop ++0000f73c <[^>]*> nop ++0000f740 <[^>]*> nop ++0000f744 <[^>]*> nop ++0000f748 <[^>]*> nop ++0000f74c <[^>]*> nop ++0000f750 <[^>]*> nop ++0000f754 <[^>]*> nop ++0000f758 <[^>]*> nop ++0000f75c <[^>]*> nop ++0000f760 <[^>]*> nop ++0000f764 <[^>]*> nop ++0000f768 <[^>]*> nop ++0000f76c <[^>]*> nop ++0000f770 <[^>]*> nop ++0000f774 <[^>]*> nop ++0000f778 <[^>]*> nop ++0000f77c <[^>]*> nop ++0000f780 <[^>]*> nop ++0000f784 <[^>]*> nop ++0000f788 <[^>]*> nop ++0000f78c <[^>]*> nop ++0000f790 <[^>]*> nop ++0000f794 <[^>]*> nop ++0000f798 <[^>]*> nop ++0000f79c <[^>]*> nop ++0000f7a0 <[^>]*> nop ++0000f7a4 <[^>]*> nop ++0000f7a8 <[^>]*> nop ++0000f7ac <[^>]*> nop ++0000f7b0 <[^>]*> nop ++0000f7b4 <[^>]*> nop ++0000f7b8 <[^>]*> nop ++0000f7bc <[^>]*> nop ++0000f7c0 <[^>]*> nop ++0000f7c4 <[^>]*> nop ++0000f7c8 <[^>]*> nop ++0000f7cc <[^>]*> nop ++0000f7d0 <[^>]*> nop ++0000f7d4 <[^>]*> nop ++0000f7d8 <[^>]*> nop ++0000f7dc <[^>]*> nop ++0000f7e0 <[^>]*> nop ++0000f7e4 <[^>]*> nop ++0000f7e8 <[^>]*> nop ++0000f7ec <[^>]*> nop ++0000f7f0 <[^>]*> nop ++0000f7f4 <[^>]*> nop ++0000f7f8 <[^>]*> nop ++0000f7fc <[^>]*> nop ++0000f800 <[^>]*> nop ++0000f804 <[^>]*> nop ++0000f808 <[^>]*> nop ++0000f80c <[^>]*> nop ++0000f810 <[^>]*> nop ++0000f814 <[^>]*> nop ++0000f818 <[^>]*> nop ++0000f81c <[^>]*> nop ++0000f820 <[^>]*> nop ++0000f824 <[^>]*> nop ++0000f828 <[^>]*> nop ++0000f82c <[^>]*> nop ++0000f830 <[^>]*> nop ++0000f834 <[^>]*> nop ++0000f838 <[^>]*> nop ++0000f83c <[^>]*> nop ++0000f840 <[^>]*> nop ++0000f844 <[^>]*> nop ++0000f848 <[^>]*> nop ++0000f84c <[^>]*> nop ++0000f850 <[^>]*> nop ++0000f854 <[^>]*> nop ++0000f858 <[^>]*> nop ++0000f85c <[^>]*> nop ++0000f860 <[^>]*> nop ++0000f864 <[^>]*> nop ++0000f868 <[^>]*> nop ++0000f86c <[^>]*> nop ++0000f870 <[^>]*> nop ++0000f874 <[^>]*> nop ++0000f878 <[^>]*> nop ++0000f87c <[^>]*> nop ++0000f880 <[^>]*> nop ++0000f884 <[^>]*> nop ++0000f888 <[^>]*> nop ++0000f88c <[^>]*> nop ++0000f890 <[^>]*> nop ++0000f894 <[^>]*> nop ++0000f898 <[^>]*> nop ++0000f89c <[^>]*> nop ++0000f8a0 <[^>]*> nop ++0000f8a4 <[^>]*> nop ++0000f8a8 <[^>]*> nop ++0000f8ac <[^>]*> nop ++0000f8b0 <[^>]*> nop ++0000f8b4 <[^>]*> nop ++0000f8b8 <[^>]*> nop ++0000f8bc <[^>]*> nop ++0000f8c0 <[^>]*> nop ++0000f8c4 <[^>]*> nop ++0000f8c8 <[^>]*> nop ++0000f8cc <[^>]*> nop ++0000f8d0 <[^>]*> nop ++0000f8d4 <[^>]*> nop ++0000f8d8 <[^>]*> nop ++0000f8dc <[^>]*> nop ++0000f8e0 <[^>]*> nop ++0000f8e4 <[^>]*> nop ++0000f8e8 <[^>]*> nop ++0000f8ec <[^>]*> nop ++0000f8f0 <[^>]*> nop ++0000f8f4 <[^>]*> nop ++0000f8f8 <[^>]*> nop ++0000f8fc <[^>]*> nop ++0000f900 <[^>]*> nop ++0000f904 <[^>]*> nop ++0000f908 <[^>]*> nop ++0000f90c <[^>]*> nop ++0000f910 <[^>]*> nop ++0000f914 <[^>]*> nop ++0000f918 <[^>]*> nop ++0000f91c <[^>]*> nop ++0000f920 <[^>]*> nop ++0000f924 <[^>]*> nop ++0000f928 <[^>]*> nop ++0000f92c <[^>]*> nop ++0000f930 <[^>]*> nop ++0000f934 <[^>]*> nop ++0000f938 <[^>]*> nop ++0000f93c <[^>]*> nop ++0000f940 <[^>]*> nop ++0000f944 <[^>]*> nop ++0000f948 <[^>]*> nop ++0000f94c <[^>]*> nop ++0000f950 <[^>]*> nop ++0000f954 <[^>]*> nop ++0000f958 <[^>]*> nop ++0000f95c <[^>]*> nop ++0000f960 <[^>]*> nop ++0000f964 <[^>]*> nop ++0000f968 <[^>]*> nop ++0000f96c <[^>]*> nop ++0000f970 <[^>]*> nop ++0000f974 <[^>]*> nop ++0000f978 <[^>]*> nop ++0000f97c <[^>]*> nop ++0000f980 <[^>]*> nop ++0000f984 <[^>]*> nop ++0000f988 <[^>]*> nop ++0000f98c <[^>]*> nop ++0000f990 <[^>]*> nop ++0000f994 <[^>]*> nop ++0000f998 <[^>]*> nop ++0000f99c <[^>]*> nop ++0000f9a0 <[^>]*> nop ++0000f9a4 <[^>]*> nop ++0000f9a8 <[^>]*> nop ++0000f9ac <[^>]*> nop ++0000f9b0 <[^>]*> nop ++0000f9b4 <[^>]*> nop ++0000f9b8 <[^>]*> nop ++0000f9bc <[^>]*> nop ++0000f9c0 <[^>]*> nop ++0000f9c4 <[^>]*> nop ++0000f9c8 <[^>]*> nop ++0000f9cc <[^>]*> nop ++0000f9d0 <[^>]*> nop ++0000f9d4 <[^>]*> nop ++0000f9d8 <[^>]*> nop ++0000f9dc <[^>]*> nop ++0000f9e0 <[^>]*> nop ++0000f9e4 <[^>]*> nop ++0000f9e8 <[^>]*> nop ++0000f9ec <[^>]*> nop ++0000f9f0 <[^>]*> nop ++0000f9f4 <[^>]*> nop ++0000f9f8 <[^>]*> nop ++0000f9fc <[^>]*> nop ++0000fa00 <[^>]*> nop ++0000fa04 <[^>]*> nop ++0000fa08 <[^>]*> nop ++0000fa0c <[^>]*> nop ++0000fa10 <[^>]*> nop ++0000fa14 <[^>]*> nop ++0000fa18 <[^>]*> nop ++0000fa1c <[^>]*> nop ++0000fa20 <[^>]*> nop ++0000fa24 <[^>]*> nop ++0000fa28 <[^>]*> nop ++0000fa2c <[^>]*> nop ++0000fa30 <[^>]*> nop ++0000fa34 <[^>]*> nop ++0000fa38 <[^>]*> nop ++0000fa3c <[^>]*> nop ++0000fa40 <[^>]*> nop ++0000fa44 <[^>]*> nop ++0000fa48 <[^>]*> nop ++0000fa4c <[^>]*> nop ++0000fa50 <[^>]*> nop ++0000fa54 <[^>]*> nop ++0000fa58 <[^>]*> nop ++0000fa5c <[^>]*> nop ++0000fa60 <[^>]*> nop ++0000fa64 <[^>]*> nop ++0000fa68 <[^>]*> nop ++0000fa6c <[^>]*> nop ++0000fa70 <[^>]*> nop ++0000fa74 <[^>]*> nop ++0000fa78 <[^>]*> nop ++0000fa7c <[^>]*> nop ++0000fa80 <[^>]*> nop ++0000fa84 <[^>]*> nop ++0000fa88 <[^>]*> nop ++0000fa8c <[^>]*> nop ++0000fa90 <[^>]*> nop ++0000fa94 <[^>]*> nop ++0000fa98 <[^>]*> nop ++0000fa9c <[^>]*> nop ++0000faa0 <[^>]*> nop ++0000faa4 <[^>]*> nop ++0000faa8 <[^>]*> nop ++0000faac <[^>]*> nop ++0000fab0 <[^>]*> nop ++0000fab4 <[^>]*> nop ++0000fab8 <[^>]*> nop ++0000fabc <[^>]*> nop ++0000fac0 <[^>]*> nop ++0000fac4 <[^>]*> nop ++0000fac8 <[^>]*> nop ++0000facc <[^>]*> nop ++0000fad0 <[^>]*> nop ++0000fad4 <[^>]*> nop ++0000fad8 <[^>]*> nop ++0000fadc <[^>]*> nop ++0000fae0 <[^>]*> nop ++0000fae4 <[^>]*> nop ++0000fae8 <[^>]*> nop ++0000faec <[^>]*> nop ++0000faf0 <[^>]*> nop ++0000faf4 <[^>]*> nop ++0000faf8 <[^>]*> nop ++0000fafc <[^>]*> nop ++0000fb00 <[^>]*> nop ++0000fb04 <[^>]*> nop ++0000fb08 <[^>]*> nop ++0000fb0c <[^>]*> nop ++0000fb10 <[^>]*> nop ++0000fb14 <[^>]*> nop ++0000fb18 <[^>]*> nop ++0000fb1c <[^>]*> nop ++0000fb20 <[^>]*> nop ++0000fb24 <[^>]*> nop ++0000fb28 <[^>]*> nop ++0000fb2c <[^>]*> nop ++0000fb30 <[^>]*> nop ++0000fb34 <[^>]*> nop ++0000fb38 <[^>]*> nop ++0000fb3c <[^>]*> nop ++0000fb40 <[^>]*> nop ++0000fb44 <[^>]*> nop ++0000fb48 <[^>]*> nop ++0000fb4c <[^>]*> nop ++0000fb50 <[^>]*> nop ++0000fb54 <[^>]*> nop ++0000fb58 <[^>]*> nop ++0000fb5c <[^>]*> nop ++0000fb60 <[^>]*> nop ++0000fb64 <[^>]*> nop ++0000fb68 <[^>]*> nop ++0000fb6c <[^>]*> nop ++0000fb70 <[^>]*> nop ++0000fb74 <[^>]*> nop ++0000fb78 <[^>]*> nop ++0000fb7c <[^>]*> nop ++0000fb80 <[^>]*> nop ++0000fb84 <[^>]*> nop ++0000fb88 <[^>]*> nop ++0000fb8c <[^>]*> nop ++0000fb90 <[^>]*> nop ++0000fb94 <[^>]*> nop ++0000fb98 <[^>]*> nop ++0000fb9c <[^>]*> nop ++0000fba0 <[^>]*> nop ++0000fba4 <[^>]*> nop ++0000fba8 <[^>]*> nop ++0000fbac <[^>]*> nop ++0000fbb0 <[^>]*> nop ++0000fbb4 <[^>]*> nop ++0000fbb8 <[^>]*> nop ++0000fbbc <[^>]*> nop ++0000fbc0 <[^>]*> nop ++0000fbc4 <[^>]*> nop ++0000fbc8 <[^>]*> nop ++0000fbcc <[^>]*> nop ++0000fbd0 <[^>]*> nop ++0000fbd4 <[^>]*> nop ++0000fbd8 <[^>]*> nop ++0000fbdc <[^>]*> nop ++0000fbe0 <[^>]*> nop ++0000fbe4 <[^>]*> nop ++0000fbe8 <[^>]*> nop ++0000fbec <[^>]*> nop ++0000fbf0 <[^>]*> nop ++0000fbf4 <[^>]*> nop ++0000fbf8 <[^>]*> nop ++0000fbfc <[^>]*> nop ++0000fc00 <[^>]*> nop ++0000fc04 <[^>]*> nop ++0000fc08 <[^>]*> nop ++0000fc0c <[^>]*> nop ++0000fc10 <[^>]*> nop ++0000fc14 <[^>]*> nop ++0000fc18 <[^>]*> nop ++0000fc1c <[^>]*> nop ++0000fc20 <[^>]*> nop ++0000fc24 <[^>]*> nop ++0000fc28 <[^>]*> nop ++0000fc2c <[^>]*> nop ++0000fc30 <[^>]*> nop ++0000fc34 <[^>]*> nop ++0000fc38 <[^>]*> nop ++0000fc3c <[^>]*> nop ++0000fc40 <[^>]*> nop ++0000fc44 <[^>]*> nop ++0000fc48 <[^>]*> nop ++0000fc4c <[^>]*> nop ++0000fc50 <[^>]*> nop ++0000fc54 <[^>]*> nop ++0000fc58 <[^>]*> nop ++0000fc5c <[^>]*> nop ++0000fc60 <[^>]*> nop ++0000fc64 <[^>]*> nop ++0000fc68 <[^>]*> nop ++0000fc6c <[^>]*> nop ++0000fc70 <[^>]*> nop ++0000fc74 <[^>]*> nop ++0000fc78 <[^>]*> nop ++0000fc7c <[^>]*> nop ++0000fc80 <[^>]*> nop ++0000fc84 <[^>]*> nop ++0000fc88 <[^>]*> nop ++0000fc8c <[^>]*> nop ++0000fc90 <[^>]*> nop ++0000fc94 <[^>]*> nop ++0000fc98 <[^>]*> nop ++0000fc9c <[^>]*> nop ++0000fca0 <[^>]*> nop ++0000fca4 <[^>]*> nop ++0000fca8 <[^>]*> nop ++0000fcac <[^>]*> nop ++0000fcb0 <[^>]*> nop ++0000fcb4 <[^>]*> nop ++0000fcb8 <[^>]*> nop ++0000fcbc <[^>]*> nop ++0000fcc0 <[^>]*> nop ++0000fcc4 <[^>]*> nop ++0000fcc8 <[^>]*> nop ++0000fccc <[^>]*> nop ++0000fcd0 <[^>]*> nop ++0000fcd4 <[^>]*> nop ++0000fcd8 <[^>]*> nop ++0000fcdc <[^>]*> nop ++0000fce0 <[^>]*> nop ++0000fce4 <[^>]*> nop ++0000fce8 <[^>]*> nop ++0000fcec <[^>]*> nop ++0000fcf0 <[^>]*> nop ++0000fcf4 <[^>]*> nop ++0000fcf8 <[^>]*> nop ++0000fcfc <[^>]*> nop ++0000fd00 <[^>]*> nop ++0000fd04 <[^>]*> nop ++0000fd08 <[^>]*> nop ++0000fd0c <[^>]*> nop ++0000fd10 <[^>]*> nop ++0000fd14 <[^>]*> nop ++0000fd18 <[^>]*> nop ++0000fd1c <[^>]*> nop ++0000fd20 <[^>]*> nop ++0000fd24 <[^>]*> nop ++0000fd28 <[^>]*> nop ++0000fd2c <[^>]*> nop ++0000fd30 <[^>]*> nop ++0000fd34 <[^>]*> nop ++0000fd38 <[^>]*> nop ++0000fd3c <[^>]*> nop ++0000fd40 <[^>]*> nop ++0000fd44 <[^>]*> nop ++0000fd48 <[^>]*> nop ++0000fd4c <[^>]*> nop ++0000fd50 <[^>]*> nop ++0000fd54 <[^>]*> nop ++0000fd58 <[^>]*> nop ++0000fd5c <[^>]*> nop ++0000fd60 <[^>]*> nop ++0000fd64 <[^>]*> nop ++0000fd68 <[^>]*> nop ++0000fd6c <[^>]*> nop ++0000fd70 <[^>]*> nop ++0000fd74 <[^>]*> nop ++0000fd78 <[^>]*> nop ++0000fd7c <[^>]*> nop ++0000fd80 <[^>]*> nop ++0000fd84 <[^>]*> nop ++0000fd88 <[^>]*> nop ++0000fd8c <[^>]*> nop ++0000fd90 <[^>]*> nop ++0000fd94 <[^>]*> nop ++0000fd98 <[^>]*> nop ++0000fd9c <[^>]*> nop ++0000fda0 <[^>]*> nop ++0000fda4 <[^>]*> nop ++0000fda8 <[^>]*> nop ++0000fdac <[^>]*> nop ++0000fdb0 <[^>]*> nop ++0000fdb4 <[^>]*> nop ++0000fdb8 <[^>]*> nop ++0000fdbc <[^>]*> nop ++0000fdc0 <[^>]*> nop ++0000fdc4 <[^>]*> nop ++0000fdc8 <[^>]*> nop ++0000fdcc <[^>]*> nop ++0000fdd0 <[^>]*> nop ++0000fdd4 <[^>]*> nop ++0000fdd8 <[^>]*> nop ++0000fddc <[^>]*> nop ++0000fde0 <[^>]*> nop ++0000fde4 <[^>]*> nop ++0000fde8 <[^>]*> nop ++0000fdec <[^>]*> nop ++0000fdf0 <[^>]*> nop ++0000fdf4 <[^>]*> nop ++0000fdf8 <[^>]*> nop ++0000fdfc <[^>]*> nop ++0000fe00 <[^>]*> nop ++0000fe04 <[^>]*> nop ++0000fe08 <[^>]*> nop ++0000fe0c <[^>]*> nop ++0000fe10 <[^>]*> nop ++0000fe14 <[^>]*> nop ++0000fe18 <[^>]*> nop ++0000fe1c <[^>]*> nop ++0000fe20 <[^>]*> nop ++0000fe24 <[^>]*> nop ++0000fe28 <[^>]*> nop ++0000fe2c <[^>]*> nop ++0000fe30 <[^>]*> nop ++0000fe34 <[^>]*> nop ++0000fe38 <[^>]*> nop ++0000fe3c <[^>]*> nop ++0000fe40 <[^>]*> nop ++0000fe44 <[^>]*> nop ++0000fe48 <[^>]*> nop ++0000fe4c <[^>]*> nop ++0000fe50 <[^>]*> nop ++0000fe54 <[^>]*> nop ++0000fe58 <[^>]*> nop ++0000fe5c <[^>]*> nop ++0000fe60 <[^>]*> nop ++0000fe64 <[^>]*> nop ++0000fe68 <[^>]*> nop ++0000fe6c <[^>]*> nop ++0000fe70 <[^>]*> nop ++0000fe74 <[^>]*> nop ++0000fe78 <[^>]*> nop ++0000fe7c <[^>]*> nop ++0000fe80 <[^>]*> nop ++0000fe84 <[^>]*> nop ++0000fe88 <[^>]*> nop ++0000fe8c <[^>]*> nop ++0000fe90 <[^>]*> nop ++0000fe94 <[^>]*> nop ++0000fe98 <[^>]*> nop ++0000fe9c <[^>]*> nop ++0000fea0 <[^>]*> nop ++0000fea4 <[^>]*> nop ++0000fea8 <[^>]*> nop ++0000feac <[^>]*> nop ++0000feb0 <[^>]*> nop ++0000feb4 <[^>]*> nop ++0000feb8 <[^>]*> nop ++0000febc <[^>]*> nop ++0000fec0 <[^>]*> nop ++0000fec4 <[^>]*> nop ++0000fec8 <[^>]*> nop ++0000fecc <[^>]*> nop ++0000fed0 <[^>]*> nop ++0000fed4 <[^>]*> nop ++0000fed8 <[^>]*> nop ++0000fedc <[^>]*> nop ++0000fee0 <[^>]*> nop ++0000fee4 <[^>]*> nop ++0000fee8 <[^>]*> nop ++0000feec <[^>]*> nop ++0000fef0 <[^>]*> nop ++0000fef4 <[^>]*> nop ++0000fef8 <[^>]*> nop ++0000fefc <[^>]*> nop ++0000ff00 <[^>]*> nop ++0000ff04 <[^>]*> nop ++0000ff08 <[^>]*> nop ++0000ff0c <[^>]*> nop ++0000ff10 <[^>]*> nop ++0000ff14 <[^>]*> nop ++0000ff18 <[^>]*> nop ++0000ff1c <[^>]*> nop ++0000ff20 <[^>]*> nop ++0000ff24 <[^>]*> nop ++0000ff28 <[^>]*> nop ++0000ff2c <[^>]*> nop ++0000ff30 <[^>]*> nop ++0000ff34 <[^>]*> nop ++0000ff38 <[^>]*> nop ++0000ff3c <[^>]*> nop ++0000ff40 <[^>]*> nop ++0000ff44 <[^>]*> nop ++0000ff48 <[^>]*> nop ++0000ff4c <[^>]*> nop ++0000ff50 <[^>]*> nop ++0000ff54 <[^>]*> nop ++0000ff58 <[^>]*> nop ++0000ff5c <[^>]*> nop ++0000ff60 <[^>]*> nop ++0000ff64 <[^>]*> nop ++0000ff68 <[^>]*> nop ++0000ff6c <[^>]*> nop ++0000ff70 <[^>]*> nop ++0000ff74 <[^>]*> nop ++0000ff78 <[^>]*> nop ++0000ff7c <[^>]*> nop ++0000ff80 <[^>]*> nop ++0000ff84 <[^>]*> nop ++0000ff88 <[^>]*> nop ++0000ff8c <[^>]*> nop ++0000ff90 <[^>]*> nop ++0000ff94 <[^>]*> nop ++0000ff98 <[^>]*> nop ++0000ff9c <[^>]*> nop ++0000ffa0 <[^>]*> nop ++0000ffa4 <[^>]*> nop ++0000ffa8 <[^>]*> nop ++0000ffac <[^>]*> nop ++0000ffb0 <[^>]*> nop ++0000ffb4 <[^>]*> nop ++0000ffb8 <[^>]*> nop ++0000ffbc <[^>]*> nop ++0000ffc0 <[^>]*> nop ++0000ffc4 <[^>]*> nop ++0000ffc8 <[^>]*> nop ++0000ffcc <[^>]*> nop ++0000ffd0 <[^>]*> nop ++0000ffd4 <[^>]*> nop ++0000ffd8 <[^>]*> nop ++0000ffdc <[^>]*> nop ++0000ffe0 <[^>]*> nop ++0000ffe4 <[^>]*> nop ++0000ffe8 <[^>]*> nop ++0000ffec <[^>]*> nop ++0000fff0 <[^>]*> nop ++0000fff4 <[^>]*> nop ++0000fff8 <[^>]*> nop ++0000fffc <[^>]*> nop ++00010000 <[^>]*> bne r2,r3,00010024 <[^>]*> ++00010004 <[^>]*> nop ++00010008 <[^>]*> nop ++0001000c <[^>]*> nop ++00010010 <[^>]*> nop ++00010014 <[^>]*> nop ++00010018 <[^>]*> nop ++0001001c <[^>]*> nop ++00010020 <[^>]*> nop ++00010024 <[^>]*> nop ++ ... +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/relax_cjmp.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/relax_cjmp.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,37 @@ ++# relaxing unconditional jumps ++ ++.globl text1 ++.section text1, "ax", @progbits ++ ++ beq r2, r3, on_border ++ beq r2, r3, out_of_range ++ nop ++ nop ++ ++ ++.align 15 ++ #nop ++ #nop ++ #nop ++on_border: ++ bne r2, r3, in_range ++ nop ++ nop ++ nop ++ nop ++ nop ++out_of_range: ++in_range: ++ nop ++ ++.globl text2 ++.section text2, "ax", @progbits ++ ++ bge r2, r3, text1 ++ blt r2, r3, out_of_range ++ ble r2, r3, sym ++ nop ++ nop ++sym: ++ nop ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/relax_section.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/relax_section.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,8206 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 relax_section ++ ++# Test relaxation of section ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> bne r2,r3,00000010 <in_range-0xc> ++0+0004 <[^>]*> movhi at,0 ++0+0008 <[^>]*> ori at,at,32780 ++0+000c <[^>]*> jmp at ++0+0010 <[^>]*> bne r2,r3,0000001c <in_range> ++0+0014 <[^>]*> nop ++0+0018 <[^>]*> nop ++0+001c <[^>]*> nop ++0+0020 <[^>]*> nop ++0+0024 <[^>]*> nop ++0+0028 <[^>]*> nop ++0+002c <[^>]*> nop ++0+0030 <[^>]*> nop ++0+0034 <[^>]*> nop ++0+0038 <[^>]*> nop ++0+003c <[^>]*> nop ++0+0040 <[^>]*> nop ++0+0044 <[^>]*> nop ++0+0048 <[^>]*> nop ++0+004c <[^>]*> nop ++0+0050 <[^>]*> nop ++0+0054 <[^>]*> nop ++0+0058 <[^>]*> nop ++0+005c <[^>]*> nop ++0+0060 <[^>]*> nop ++0+0064 <[^>]*> nop ++0+0068 <[^>]*> nop ++0+006c <[^>]*> nop ++0+0070 <[^>]*> nop ++0+0074 <[^>]*> nop ++0+0078 <[^>]*> nop ++0+007c <[^>]*> nop ++0+0080 <[^>]*> nop ++0+0084 <[^>]*> nop ++0+0088 <[^>]*> nop ++0+008c <[^>]*> nop ++0+0090 <[^>]*> nop ++0+0094 <[^>]*> nop ++0+0098 <[^>]*> nop ++0+009c <[^>]*> nop ++0+00a0 <[^>]*> nop ++0+00a4 <[^>]*> nop ++0+00a8 <[^>]*> nop ++0+00ac <[^>]*> nop ++0+00b0 <[^>]*> nop ++0+00b4 <[^>]*> nop ++0+00b8 <[^>]*> nop ++0+00bc <[^>]*> nop ++0+00c0 <[^>]*> nop ++0+00c4 <[^>]*> nop ++0+00c8 <[^>]*> nop ++0+00cc <[^>]*> nop ++0+00d0 <[^>]*> nop ++0+00d4 <[^>]*> nop ++0+00d8 <[^>]*> nop ++0+00dc <[^>]*> nop ++0+00e0 <[^>]*> nop ++0+00e4 <[^>]*> nop ++0+00e8 <[^>]*> nop ++0+00ec <[^>]*> nop ++0+00f0 <[^>]*> nop ++0+00f4 <[^>]*> nop ++0+00f8 <[^>]*> nop ++0+00fc <[^>]*> nop ++0+0100 <[^>]*> nop ++0+0104 <[^>]*> nop ++0+0108 <[^>]*> nop ++0+010c <[^>]*> nop ++0+0110 <[^>]*> nop ++0+0114 <[^>]*> nop ++0+0118 <[^>]*> nop ++0+011c <[^>]*> nop ++0+0120 <[^>]*> nop ++0+0124 <[^>]*> nop ++0+0128 <[^>]*> nop ++0+012c <[^>]*> nop ++0+0130 <[^>]*> nop ++0+0134 <[^>]*> nop ++0+0138 <[^>]*> nop ++0+013c <[^>]*> nop ++0+0140 <[^>]*> nop ++0+0144 <[^>]*> nop ++0+0148 <[^>]*> nop ++0+014c <[^>]*> nop ++0+0150 <[^>]*> nop ++0+0154 <[^>]*> nop ++0+0158 <[^>]*> nop ++0+015c <[^>]*> nop ++0+0160 <[^>]*> nop ++0+0164 <[^>]*> nop ++0+0168 <[^>]*> nop ++0+016c <[^>]*> nop ++0+0170 <[^>]*> nop ++0+0174 <[^>]*> nop ++0+0178 <[^>]*> nop ++0+017c <[^>]*> nop ++0+0180 <[^>]*> nop ++0+0184 <[^>]*> nop ++0+0188 <[^>]*> nop ++0+018c <[^>]*> nop ++0+0190 <[^>]*> nop ++0+0194 <[^>]*> nop ++0+0198 <[^>]*> nop ++0+019c <[^>]*> nop ++0+01a0 <[^>]*> nop ++0+01a4 <[^>]*> nop ++0+01a8 <[^>]*> nop ++0+01ac <[^>]*> nop ++0+01b0 <[^>]*> nop ++0+01b4 <[^>]*> nop ++0+01b8 <[^>]*> nop ++0+01bc <[^>]*> nop ++0+01c0 <[^>]*> nop ++0+01c4 <[^>]*> nop ++0+01c8 <[^>]*> nop ++0+01cc <[^>]*> nop ++0+01d0 <[^>]*> nop ++0+01d4 <[^>]*> nop ++0+01d8 <[^>]*> nop ++0+01dc <[^>]*> nop ++0+01e0 <[^>]*> nop ++0+01e4 <[^>]*> nop ++0+01e8 <[^>]*> nop ++0+01ec <[^>]*> nop ++0+01f0 <[^>]*> nop ++0+01f4 <[^>]*> nop ++0+01f8 <[^>]*> nop ++0+01fc <[^>]*> nop ++0+0200 <[^>]*> nop ++0+0204 <[^>]*> nop ++0+0208 <[^>]*> nop ++0+020c <[^>]*> nop ++0+0210 <[^>]*> nop ++0+0214 <[^>]*> nop ++0+0218 <[^>]*> nop ++0+021c <[^>]*> nop ++0+0220 <[^>]*> nop ++0+0224 <[^>]*> nop ++0+0228 <[^>]*> nop ++0+022c <[^>]*> nop ++0+0230 <[^>]*> nop ++0+0234 <[^>]*> nop ++0+0238 <[^>]*> nop ++0+023c <[^>]*> nop ++0+0240 <[^>]*> nop ++0+0244 <[^>]*> nop ++0+0248 <[^>]*> nop ++0+024c <[^>]*> nop ++0+0250 <[^>]*> nop ++0+0254 <[^>]*> nop ++0+0258 <[^>]*> nop ++0+025c <[^>]*> nop ++0+0260 <[^>]*> nop ++0+0264 <[^>]*> nop ++0+0268 <[^>]*> nop ++0+026c <[^>]*> nop ++0+0270 <[^>]*> nop ++0+0274 <[^>]*> nop ++0+0278 <[^>]*> nop ++0+027c <[^>]*> nop ++0+0280 <[^>]*> nop ++0+0284 <[^>]*> nop ++0+0288 <[^>]*> nop ++0+028c <[^>]*> nop ++0+0290 <[^>]*> nop ++0+0294 <[^>]*> nop ++0+0298 <[^>]*> nop ++0+029c <[^>]*> nop ++0+02a0 <[^>]*> nop ++0+02a4 <[^>]*> nop ++0+02a8 <[^>]*> nop ++0+02ac <[^>]*> nop ++0+02b0 <[^>]*> nop ++0+02b4 <[^>]*> nop ++0+02b8 <[^>]*> nop ++0+02bc <[^>]*> nop ++0+02c0 <[^>]*> nop ++0+02c4 <[^>]*> nop ++0+02c8 <[^>]*> nop ++0+02cc <[^>]*> nop ++0+02d0 <[^>]*> nop ++0+02d4 <[^>]*> nop ++0+02d8 <[^>]*> nop ++0+02dc <[^>]*> nop ++0+02e0 <[^>]*> nop ++0+02e4 <[^>]*> nop ++0+02e8 <[^>]*> nop ++0+02ec <[^>]*> nop ++0+02f0 <[^>]*> nop ++0+02f4 <[^>]*> nop ++0+02f8 <[^>]*> nop ++0+02fc <[^>]*> nop ++0+0300 <[^>]*> nop ++0+0304 <[^>]*> nop ++0+0308 <[^>]*> nop ++0+030c <[^>]*> nop ++0+0310 <[^>]*> nop ++0+0314 <[^>]*> nop ++0+0318 <[^>]*> nop ++0+031c <[^>]*> nop ++0+0320 <[^>]*> nop ++0+0324 <[^>]*> nop ++0+0328 <[^>]*> nop ++0+032c <[^>]*> nop ++0+0330 <[^>]*> nop ++0+0334 <[^>]*> nop ++0+0338 <[^>]*> nop ++0+033c <[^>]*> nop ++0+0340 <[^>]*> nop ++0+0344 <[^>]*> nop ++0+0348 <[^>]*> nop ++0+034c <[^>]*> nop ++0+0350 <[^>]*> nop ++0+0354 <[^>]*> nop ++0+0358 <[^>]*> nop ++0+035c <[^>]*> nop ++0+0360 <[^>]*> nop ++0+0364 <[^>]*> nop ++0+0368 <[^>]*> nop ++0+036c <[^>]*> nop ++0+0370 <[^>]*> nop ++0+0374 <[^>]*> nop ++0+0378 <[^>]*> nop ++0+037c <[^>]*> nop ++0+0380 <[^>]*> nop ++0+0384 <[^>]*> nop ++0+0388 <[^>]*> nop ++0+038c <[^>]*> nop ++0+0390 <[^>]*> nop ++0+0394 <[^>]*> nop ++0+0398 <[^>]*> nop ++0+039c <[^>]*> nop ++0+03a0 <[^>]*> nop ++0+03a4 <[^>]*> nop ++0+03a8 <[^>]*> nop ++0+03ac <[^>]*> nop ++0+03b0 <[^>]*> nop ++0+03b4 <[^>]*> nop ++0+03b8 <[^>]*> nop ++0+03bc <[^>]*> nop ++0+03c0 <[^>]*> nop ++0+03c4 <[^>]*> nop ++0+03c8 <[^>]*> nop ++0+03cc <[^>]*> nop ++0+03d0 <[^>]*> nop ++0+03d4 <[^>]*> nop ++0+03d8 <[^>]*> nop ++0+03dc <[^>]*> nop ++0+03e0 <[^>]*> nop ++0+03e4 <[^>]*> nop ++0+03e8 <[^>]*> nop ++0+03ec <[^>]*> nop ++0+03f0 <[^>]*> nop ++0+03f4 <[^>]*> nop ++0+03f8 <[^>]*> nop ++0+03fc <[^>]*> nop ++0+0400 <[^>]*> nop ++0+0404 <[^>]*> nop ++0+0408 <[^>]*> nop ++0+040c <[^>]*> nop ++0+0410 <[^>]*> nop ++0+0414 <[^>]*> nop ++0+0418 <[^>]*> nop ++0+041c <[^>]*> nop ++0+0420 <[^>]*> nop ++0+0424 <[^>]*> nop ++0+0428 <[^>]*> nop ++0+042c <[^>]*> nop ++0+0430 <[^>]*> nop ++0+0434 <[^>]*> nop ++0+0438 <[^>]*> nop ++0+043c <[^>]*> nop ++0+0440 <[^>]*> nop ++0+0444 <[^>]*> nop ++0+0448 <[^>]*> nop ++0+044c <[^>]*> nop ++0+0450 <[^>]*> nop ++0+0454 <[^>]*> nop ++0+0458 <[^>]*> nop ++0+045c <[^>]*> nop ++0+0460 <[^>]*> nop ++0+0464 <[^>]*> nop ++0+0468 <[^>]*> nop ++0+046c <[^>]*> nop ++0+0470 <[^>]*> nop ++0+0474 <[^>]*> nop ++0+0478 <[^>]*> nop ++0+047c <[^>]*> nop ++0+0480 <[^>]*> nop ++0+0484 <[^>]*> nop ++0+0488 <[^>]*> nop ++0+048c <[^>]*> nop ++0+0490 <[^>]*> nop ++0+0494 <[^>]*> nop ++0+0498 <[^>]*> nop ++0+049c <[^>]*> nop ++0+04a0 <[^>]*> nop ++0+04a4 <[^>]*> nop ++0+04a8 <[^>]*> nop ++0+04ac <[^>]*> nop ++0+04b0 <[^>]*> nop ++0+04b4 <[^>]*> nop ++0+04b8 <[^>]*> nop ++0+04bc <[^>]*> nop ++0+04c0 <[^>]*> nop ++0+04c4 <[^>]*> nop ++0+04c8 <[^>]*> nop ++0+04cc <[^>]*> nop ++0+04d0 <[^>]*> nop ++0+04d4 <[^>]*> nop ++0+04d8 <[^>]*> nop ++0+04dc <[^>]*> nop ++0+04e0 <[^>]*> nop ++0+04e4 <[^>]*> nop ++0+04e8 <[^>]*> nop ++0+04ec <[^>]*> nop ++0+04f0 <[^>]*> nop ++0+04f4 <[^>]*> nop ++0+04f8 <[^>]*> nop ++0+04fc <[^>]*> nop ++0+0500 <[^>]*> nop ++0+0504 <[^>]*> nop ++0+0508 <[^>]*> nop ++0+050c <[^>]*> nop ++0+0510 <[^>]*> nop ++0+0514 <[^>]*> nop ++0+0518 <[^>]*> nop ++0+051c <[^>]*> nop ++0+0520 <[^>]*> nop ++0+0524 <[^>]*> nop ++0+0528 <[^>]*> nop ++0+052c <[^>]*> nop ++0+0530 <[^>]*> nop ++0+0534 <[^>]*> nop ++0+0538 <[^>]*> nop ++0+053c <[^>]*> nop ++0+0540 <[^>]*> nop ++0+0544 <[^>]*> nop ++0+0548 <[^>]*> nop ++0+054c <[^>]*> nop ++0+0550 <[^>]*> nop ++0+0554 <[^>]*> nop ++0+0558 <[^>]*> nop ++0+055c <[^>]*> nop ++0+0560 <[^>]*> nop ++0+0564 <[^>]*> nop ++0+0568 <[^>]*> nop ++0+056c <[^>]*> nop ++0+0570 <[^>]*> nop ++0+0574 <[^>]*> nop ++0+0578 <[^>]*> nop ++0+057c <[^>]*> nop ++0+0580 <[^>]*> nop ++0+0584 <[^>]*> nop ++0+0588 <[^>]*> nop ++0+058c <[^>]*> nop ++0+0590 <[^>]*> nop ++0+0594 <[^>]*> nop ++0+0598 <[^>]*> nop ++0+059c <[^>]*> nop ++0+05a0 <[^>]*> nop ++0+05a4 <[^>]*> nop ++0+05a8 <[^>]*> nop ++0+05ac <[^>]*> nop ++0+05b0 <[^>]*> nop ++0+05b4 <[^>]*> nop ++0+05b8 <[^>]*> nop ++0+05bc <[^>]*> nop ++0+05c0 <[^>]*> nop ++0+05c4 <[^>]*> nop ++0+05c8 <[^>]*> nop ++0+05cc <[^>]*> nop ++0+05d0 <[^>]*> nop ++0+05d4 <[^>]*> nop ++0+05d8 <[^>]*> nop ++0+05dc <[^>]*> nop ++0+05e0 <[^>]*> nop ++0+05e4 <[^>]*> nop ++0+05e8 <[^>]*> nop ++0+05ec <[^>]*> nop ++0+05f0 <[^>]*> nop ++0+05f4 <[^>]*> nop ++0+05f8 <[^>]*> nop ++0+05fc <[^>]*> nop ++0+0600 <[^>]*> nop ++0+0604 <[^>]*> nop ++0+0608 <[^>]*> nop ++0+060c <[^>]*> nop ++0+0610 <[^>]*> nop ++0+0614 <[^>]*> nop ++0+0618 <[^>]*> nop ++0+061c <[^>]*> nop ++0+0620 <[^>]*> nop ++0+0624 <[^>]*> nop ++0+0628 <[^>]*> nop ++0+062c <[^>]*> nop ++0+0630 <[^>]*> nop ++0+0634 <[^>]*> nop ++0+0638 <[^>]*> nop ++0+063c <[^>]*> nop ++0+0640 <[^>]*> nop ++0+0644 <[^>]*> nop ++0+0648 <[^>]*> nop ++0+064c <[^>]*> nop ++0+0650 <[^>]*> nop ++0+0654 <[^>]*> nop ++0+0658 <[^>]*> nop ++0+065c <[^>]*> nop ++0+0660 <[^>]*> nop ++0+0664 <[^>]*> nop ++0+0668 <[^>]*> nop ++0+066c <[^>]*> nop ++0+0670 <[^>]*> nop ++0+0674 <[^>]*> nop ++0+0678 <[^>]*> nop ++0+067c <[^>]*> nop ++0+0680 <[^>]*> nop ++0+0684 <[^>]*> nop ++0+0688 <[^>]*> nop ++0+068c <[^>]*> nop ++0+0690 <[^>]*> nop ++0+0694 <[^>]*> nop ++0+0698 <[^>]*> nop ++0+069c <[^>]*> nop ++0+06a0 <[^>]*> nop ++0+06a4 <[^>]*> nop ++0+06a8 <[^>]*> nop ++0+06ac <[^>]*> nop ++0+06b0 <[^>]*> nop ++0+06b4 <[^>]*> nop ++0+06b8 <[^>]*> nop ++0+06bc <[^>]*> nop ++0+06c0 <[^>]*> nop ++0+06c4 <[^>]*> nop ++0+06c8 <[^>]*> nop ++0+06cc <[^>]*> nop ++0+06d0 <[^>]*> nop ++0+06d4 <[^>]*> nop ++0+06d8 <[^>]*> nop ++0+06dc <[^>]*> nop ++0+06e0 <[^>]*> nop ++0+06e4 <[^>]*> nop ++0+06e8 <[^>]*> nop ++0+06ec <[^>]*> nop ++0+06f0 <[^>]*> nop ++0+06f4 <[^>]*> nop ++0+06f8 <[^>]*> nop ++0+06fc <[^>]*> nop ++0+0700 <[^>]*> nop ++0+0704 <[^>]*> nop ++0+0708 <[^>]*> nop ++0+070c <[^>]*> nop ++0+0710 <[^>]*> nop ++0+0714 <[^>]*> nop ++0+0718 <[^>]*> nop ++0+071c <[^>]*> nop ++0+0720 <[^>]*> nop ++0+0724 <[^>]*> nop ++0+0728 <[^>]*> nop ++0+072c <[^>]*> nop ++0+0730 <[^>]*> nop ++0+0734 <[^>]*> nop ++0+0738 <[^>]*> nop ++0+073c <[^>]*> nop ++0+0740 <[^>]*> nop ++0+0744 <[^>]*> nop ++0+0748 <[^>]*> nop ++0+074c <[^>]*> nop ++0+0750 <[^>]*> nop ++0+0754 <[^>]*> nop ++0+0758 <[^>]*> nop ++0+075c <[^>]*> nop ++0+0760 <[^>]*> nop ++0+0764 <[^>]*> nop ++0+0768 <[^>]*> nop ++0+076c <[^>]*> nop ++0+0770 <[^>]*> nop ++0+0774 <[^>]*> nop ++0+0778 <[^>]*> nop ++0+077c <[^>]*> nop ++0+0780 <[^>]*> nop ++0+0784 <[^>]*> nop ++0+0788 <[^>]*> nop ++0+078c <[^>]*> nop ++0+0790 <[^>]*> nop ++0+0794 <[^>]*> nop ++0+0798 <[^>]*> nop ++0+079c <[^>]*> nop ++0+07a0 <[^>]*> nop ++0+07a4 <[^>]*> nop ++0+07a8 <[^>]*> nop ++0+07ac <[^>]*> nop ++0+07b0 <[^>]*> nop ++0+07b4 <[^>]*> nop ++0+07b8 <[^>]*> nop ++0+07bc <[^>]*> nop ++0+07c0 <[^>]*> nop ++0+07c4 <[^>]*> nop ++0+07c8 <[^>]*> nop ++0+07cc <[^>]*> nop ++0+07d0 <[^>]*> nop ++0+07d4 <[^>]*> nop ++0+07d8 <[^>]*> nop ++0+07dc <[^>]*> nop ++0+07e0 <[^>]*> nop ++0+07e4 <[^>]*> nop ++0+07e8 <[^>]*> nop ++0+07ec <[^>]*> nop ++0+07f0 <[^>]*> nop ++0+07f4 <[^>]*> nop ++0+07f8 <[^>]*> nop ++0+07fc <[^>]*> nop ++0+0800 <[^>]*> nop ++0+0804 <[^>]*> nop ++0+0808 <[^>]*> nop ++0+080c <[^>]*> nop ++0+0810 <[^>]*> nop ++0+0814 <[^>]*> nop ++0+0818 <[^>]*> nop ++0+081c <[^>]*> nop ++0+0820 <[^>]*> nop ++0+0824 <[^>]*> nop ++0+0828 <[^>]*> nop ++0+082c <[^>]*> nop ++0+0830 <[^>]*> nop ++0+0834 <[^>]*> nop ++0+0838 <[^>]*> nop ++0+083c <[^>]*> nop ++0+0840 <[^>]*> nop ++0+0844 <[^>]*> nop ++0+0848 <[^>]*> nop ++0+084c <[^>]*> nop ++0+0850 <[^>]*> nop ++0+0854 <[^>]*> nop ++0+0858 <[^>]*> nop ++0+085c <[^>]*> nop ++0+0860 <[^>]*> nop ++0+0864 <[^>]*> nop ++0+0868 <[^>]*> nop ++0+086c <[^>]*> nop ++0+0870 <[^>]*> nop ++0+0874 <[^>]*> nop ++0+0878 <[^>]*> nop ++0+087c <[^>]*> nop ++0+0880 <[^>]*> nop ++0+0884 <[^>]*> nop ++0+0888 <[^>]*> nop ++0+088c <[^>]*> nop ++0+0890 <[^>]*> nop ++0+0894 <[^>]*> nop ++0+0898 <[^>]*> nop ++0+089c <[^>]*> nop ++0+08a0 <[^>]*> nop ++0+08a4 <[^>]*> nop ++0+08a8 <[^>]*> nop ++0+08ac <[^>]*> nop ++0+08b0 <[^>]*> nop ++0+08b4 <[^>]*> nop ++0+08b8 <[^>]*> nop ++0+08bc <[^>]*> nop ++0+08c0 <[^>]*> nop ++0+08c4 <[^>]*> nop ++0+08c8 <[^>]*> nop ++0+08cc <[^>]*> nop ++0+08d0 <[^>]*> nop ++0+08d4 <[^>]*> nop ++0+08d8 <[^>]*> nop ++0+08dc <[^>]*> nop ++0+08e0 <[^>]*> nop ++0+08e4 <[^>]*> nop ++0+08e8 <[^>]*> nop ++0+08ec <[^>]*> nop ++0+08f0 <[^>]*> nop ++0+08f4 <[^>]*> nop ++0+08f8 <[^>]*> nop ++0+08fc <[^>]*> nop ++0+0900 <[^>]*> nop ++0+0904 <[^>]*> nop ++0+0908 <[^>]*> nop ++0+090c <[^>]*> nop ++0+0910 <[^>]*> nop ++0+0914 <[^>]*> nop ++0+0918 <[^>]*> nop ++0+091c <[^>]*> nop ++0+0920 <[^>]*> nop ++0+0924 <[^>]*> nop ++0+0928 <[^>]*> nop ++0+092c <[^>]*> nop ++0+0930 <[^>]*> nop ++0+0934 <[^>]*> nop ++0+0938 <[^>]*> nop ++0+093c <[^>]*> nop ++0+0940 <[^>]*> nop ++0+0944 <[^>]*> nop ++0+0948 <[^>]*> nop ++0+094c <[^>]*> nop ++0+0950 <[^>]*> nop ++0+0954 <[^>]*> nop ++0+0958 <[^>]*> nop ++0+095c <[^>]*> nop ++0+0960 <[^>]*> nop ++0+0964 <[^>]*> nop ++0+0968 <[^>]*> nop ++0+096c <[^>]*> nop ++0+0970 <[^>]*> nop ++0+0974 <[^>]*> nop ++0+0978 <[^>]*> nop ++0+097c <[^>]*> nop ++0+0980 <[^>]*> nop ++0+0984 <[^>]*> nop ++0+0988 <[^>]*> nop ++0+098c <[^>]*> nop ++0+0990 <[^>]*> nop ++0+0994 <[^>]*> nop ++0+0998 <[^>]*> nop ++0+099c <[^>]*> nop ++0+09a0 <[^>]*> nop ++0+09a4 <[^>]*> nop ++0+09a8 <[^>]*> nop ++0+09ac <[^>]*> nop ++0+09b0 <[^>]*> nop ++0+09b4 <[^>]*> nop ++0+09b8 <[^>]*> nop ++0+09bc <[^>]*> nop ++0+09c0 <[^>]*> nop ++0+09c4 <[^>]*> nop ++0+09c8 <[^>]*> nop ++0+09cc <[^>]*> nop ++0+09d0 <[^>]*> nop ++0+09d4 <[^>]*> nop ++0+09d8 <[^>]*> nop ++0+09dc <[^>]*> nop ++0+09e0 <[^>]*> nop ++0+09e4 <[^>]*> nop ++0+09e8 <[^>]*> nop ++0+09ec <[^>]*> nop ++0+09f0 <[^>]*> nop ++0+09f4 <[^>]*> nop ++0+09f8 <[^>]*> nop ++0+09fc <[^>]*> nop ++0+0a00 <[^>]*> nop ++0+0a04 <[^>]*> nop ++0+0a08 <[^>]*> nop ++0+0a0c <[^>]*> nop ++0+0a10 <[^>]*> nop ++0+0a14 <[^>]*> nop ++0+0a18 <[^>]*> nop ++0+0a1c <[^>]*> nop ++0+0a20 <[^>]*> nop ++0+0a24 <[^>]*> nop ++0+0a28 <[^>]*> nop ++0+0a2c <[^>]*> nop ++0+0a30 <[^>]*> nop ++0+0a34 <[^>]*> nop ++0+0a38 <[^>]*> nop ++0+0a3c <[^>]*> nop ++0+0a40 <[^>]*> nop ++0+0a44 <[^>]*> nop ++0+0a48 <[^>]*> nop ++0+0a4c <[^>]*> nop ++0+0a50 <[^>]*> nop ++0+0a54 <[^>]*> nop ++0+0a58 <[^>]*> nop ++0+0a5c <[^>]*> nop ++0+0a60 <[^>]*> nop ++0+0a64 <[^>]*> nop ++0+0a68 <[^>]*> nop ++0+0a6c <[^>]*> nop ++0+0a70 <[^>]*> nop ++0+0a74 <[^>]*> nop ++0+0a78 <[^>]*> nop ++0+0a7c <[^>]*> nop ++0+0a80 <[^>]*> nop ++0+0a84 <[^>]*> nop ++0+0a88 <[^>]*> nop ++0+0a8c <[^>]*> nop ++0+0a90 <[^>]*> nop ++0+0a94 <[^>]*> nop ++0+0a98 <[^>]*> nop ++0+0a9c <[^>]*> nop ++0+0aa0 <[^>]*> nop ++0+0aa4 <[^>]*> nop ++0+0aa8 <[^>]*> nop ++0+0aac <[^>]*> nop ++0+0ab0 <[^>]*> nop ++0+0ab4 <[^>]*> nop ++0+0ab8 <[^>]*> nop ++0+0abc <[^>]*> nop ++0+0ac0 <[^>]*> nop ++0+0ac4 <[^>]*> nop ++0+0ac8 <[^>]*> nop ++0+0acc <[^>]*> nop ++0+0ad0 <[^>]*> nop ++0+0ad4 <[^>]*> nop ++0+0ad8 <[^>]*> nop ++0+0adc <[^>]*> nop ++0+0ae0 <[^>]*> nop ++0+0ae4 <[^>]*> nop ++0+0ae8 <[^>]*> nop ++0+0aec <[^>]*> nop ++0+0af0 <[^>]*> nop ++0+0af4 <[^>]*> nop ++0+0af8 <[^>]*> nop ++0+0afc <[^>]*> nop ++0+0b00 <[^>]*> nop ++0+0b04 <[^>]*> nop ++0+0b08 <[^>]*> nop ++0+0b0c <[^>]*> nop ++0+0b10 <[^>]*> nop ++0+0b14 <[^>]*> nop ++0+0b18 <[^>]*> nop ++0+0b1c <[^>]*> nop ++0+0b20 <[^>]*> nop ++0+0b24 <[^>]*> nop ++0+0b28 <[^>]*> nop ++0+0b2c <[^>]*> nop ++0+0b30 <[^>]*> nop ++0+0b34 <[^>]*> nop ++0+0b38 <[^>]*> nop ++0+0b3c <[^>]*> nop ++0+0b40 <[^>]*> nop ++0+0b44 <[^>]*> nop ++0+0b48 <[^>]*> nop ++0+0b4c <[^>]*> nop ++0+0b50 <[^>]*> nop ++0+0b54 <[^>]*> nop ++0+0b58 <[^>]*> nop ++0+0b5c <[^>]*> nop ++0+0b60 <[^>]*> nop ++0+0b64 <[^>]*> nop ++0+0b68 <[^>]*> nop ++0+0b6c <[^>]*> nop ++0+0b70 <[^>]*> nop ++0+0b74 <[^>]*> nop ++0+0b78 <[^>]*> nop ++0+0b7c <[^>]*> nop ++0+0b80 <[^>]*> nop ++0+0b84 <[^>]*> nop ++0+0b88 <[^>]*> nop ++0+0b8c <[^>]*> nop ++0+0b90 <[^>]*> nop ++0+0b94 <[^>]*> nop ++0+0b98 <[^>]*> nop ++0+0b9c <[^>]*> nop ++0+0ba0 <[^>]*> nop ++0+0ba4 <[^>]*> nop ++0+0ba8 <[^>]*> nop ++0+0bac <[^>]*> nop ++0+0bb0 <[^>]*> nop ++0+0bb4 <[^>]*> nop ++0+0bb8 <[^>]*> nop ++0+0bbc <[^>]*> nop ++0+0bc0 <[^>]*> nop ++0+0bc4 <[^>]*> nop ++0+0bc8 <[^>]*> nop ++0+0bcc <[^>]*> nop ++0+0bd0 <[^>]*> nop ++0+0bd4 <[^>]*> nop ++0+0bd8 <[^>]*> nop ++0+0bdc <[^>]*> nop ++0+0be0 <[^>]*> nop ++0+0be4 <[^>]*> nop ++0+0be8 <[^>]*> nop ++0+0bec <[^>]*> nop ++0+0bf0 <[^>]*> nop ++0+0bf4 <[^>]*> nop ++0+0bf8 <[^>]*> nop ++0+0bfc <[^>]*> nop ++0+0c00 <[^>]*> nop ++0+0c04 <[^>]*> nop ++0+0c08 <[^>]*> nop ++0+0c0c <[^>]*> nop ++0+0c10 <[^>]*> nop ++0+0c14 <[^>]*> nop ++0+0c18 <[^>]*> nop ++0+0c1c <[^>]*> nop ++0+0c20 <[^>]*> nop ++0+0c24 <[^>]*> nop ++0+0c28 <[^>]*> nop ++0+0c2c <[^>]*> nop ++0+0c30 <[^>]*> nop ++0+0c34 <[^>]*> nop ++0+0c38 <[^>]*> nop ++0+0c3c <[^>]*> nop ++0+0c40 <[^>]*> nop ++0+0c44 <[^>]*> nop ++0+0c48 <[^>]*> nop ++0+0c4c <[^>]*> nop ++0+0c50 <[^>]*> nop ++0+0c54 <[^>]*> nop ++0+0c58 <[^>]*> nop ++0+0c5c <[^>]*> nop ++0+0c60 <[^>]*> nop ++0+0c64 <[^>]*> nop ++0+0c68 <[^>]*> nop ++0+0c6c <[^>]*> nop ++0+0c70 <[^>]*> nop ++0+0c74 <[^>]*> nop ++0+0c78 <[^>]*> nop ++0+0c7c <[^>]*> nop ++0+0c80 <[^>]*> nop ++0+0c84 <[^>]*> nop ++0+0c88 <[^>]*> nop ++0+0c8c <[^>]*> nop ++0+0c90 <[^>]*> nop ++0+0c94 <[^>]*> nop ++0+0c98 <[^>]*> nop ++0+0c9c <[^>]*> nop ++0+0ca0 <[^>]*> nop ++0+0ca4 <[^>]*> nop ++0+0ca8 <[^>]*> nop ++0+0cac <[^>]*> nop ++0+0cb0 <[^>]*> nop ++0+0cb4 <[^>]*> nop ++0+0cb8 <[^>]*> nop ++0+0cbc <[^>]*> nop ++0+0cc0 <[^>]*> nop ++0+0cc4 <[^>]*> nop ++0+0cc8 <[^>]*> nop ++0+0ccc <[^>]*> nop ++0+0cd0 <[^>]*> nop ++0+0cd4 <[^>]*> nop ++0+0cd8 <[^>]*> nop ++0+0cdc <[^>]*> nop ++0+0ce0 <[^>]*> nop ++0+0ce4 <[^>]*> nop ++0+0ce8 <[^>]*> nop ++0+0cec <[^>]*> nop ++0+0cf0 <[^>]*> nop ++0+0cf4 <[^>]*> nop ++0+0cf8 <[^>]*> nop ++0+0cfc <[^>]*> nop ++0+0d00 <[^>]*> nop ++0+0d04 <[^>]*> nop ++0+0d08 <[^>]*> nop ++0+0d0c <[^>]*> nop ++0+0d10 <[^>]*> nop ++0+0d14 <[^>]*> nop ++0+0d18 <[^>]*> nop ++0+0d1c <[^>]*> nop ++0+0d20 <[^>]*> nop ++0+0d24 <[^>]*> nop ++0+0d28 <[^>]*> nop ++0+0d2c <[^>]*> nop ++0+0d30 <[^>]*> nop ++0+0d34 <[^>]*> nop ++0+0d38 <[^>]*> nop ++0+0d3c <[^>]*> nop ++0+0d40 <[^>]*> nop ++0+0d44 <[^>]*> nop ++0+0d48 <[^>]*> nop ++0+0d4c <[^>]*> nop ++0+0d50 <[^>]*> nop ++0+0d54 <[^>]*> nop ++0+0d58 <[^>]*> nop ++0+0d5c <[^>]*> nop ++0+0d60 <[^>]*> nop ++0+0d64 <[^>]*> nop ++0+0d68 <[^>]*> nop ++0+0d6c <[^>]*> nop ++0+0d70 <[^>]*> nop ++0+0d74 <[^>]*> nop ++0+0d78 <[^>]*> nop ++0+0d7c <[^>]*> nop ++0+0d80 <[^>]*> nop ++0+0d84 <[^>]*> nop ++0+0d88 <[^>]*> nop ++0+0d8c <[^>]*> nop ++0+0d90 <[^>]*> nop ++0+0d94 <[^>]*> nop ++0+0d98 <[^>]*> nop ++0+0d9c <[^>]*> nop ++0+0da0 <[^>]*> nop ++0+0da4 <[^>]*> nop ++0+0da8 <[^>]*> nop ++0+0dac <[^>]*> nop ++0+0db0 <[^>]*> nop ++0+0db4 <[^>]*> nop ++0+0db8 <[^>]*> nop ++0+0dbc <[^>]*> nop ++0+0dc0 <[^>]*> nop ++0+0dc4 <[^>]*> nop ++0+0dc8 <[^>]*> nop ++0+0dcc <[^>]*> nop ++0+0dd0 <[^>]*> nop ++0+0dd4 <[^>]*> nop ++0+0dd8 <[^>]*> nop ++0+0ddc <[^>]*> nop ++0+0de0 <[^>]*> nop ++0+0de4 <[^>]*> nop ++0+0de8 <[^>]*> nop ++0+0dec <[^>]*> nop ++0+0df0 <[^>]*> nop ++0+0df4 <[^>]*> nop ++0+0df8 <[^>]*> nop ++0+0dfc <[^>]*> nop ++0+0e00 <[^>]*> nop ++0+0e04 <[^>]*> nop ++0+0e08 <[^>]*> nop ++0+0e0c <[^>]*> nop ++0+0e10 <[^>]*> nop ++0+0e14 <[^>]*> nop ++0+0e18 <[^>]*> nop ++0+0e1c <[^>]*> nop ++0+0e20 <[^>]*> nop ++0+0e24 <[^>]*> nop ++0+0e28 <[^>]*> nop ++0+0e2c <[^>]*> nop ++0+0e30 <[^>]*> nop ++0+0e34 <[^>]*> nop ++0+0e38 <[^>]*> nop ++0+0e3c <[^>]*> nop ++0+0e40 <[^>]*> nop ++0+0e44 <[^>]*> nop ++0+0e48 <[^>]*> nop ++0+0e4c <[^>]*> nop ++0+0e50 <[^>]*> nop ++0+0e54 <[^>]*> nop ++0+0e58 <[^>]*> nop ++0+0e5c <[^>]*> nop ++0+0e60 <[^>]*> nop ++0+0e64 <[^>]*> nop ++0+0e68 <[^>]*> nop ++0+0e6c <[^>]*> nop ++0+0e70 <[^>]*> nop ++0+0e74 <[^>]*> nop ++0+0e78 <[^>]*> nop ++0+0e7c <[^>]*> nop ++0+0e80 <[^>]*> nop ++0+0e84 <[^>]*> nop ++0+0e88 <[^>]*> nop ++0+0e8c <[^>]*> nop ++0+0e90 <[^>]*> nop ++0+0e94 <[^>]*> nop ++0+0e98 <[^>]*> nop ++0+0e9c <[^>]*> nop ++0+0ea0 <[^>]*> nop ++0+0ea4 <[^>]*> nop ++0+0ea8 <[^>]*> nop ++0+0eac <[^>]*> nop ++0+0eb0 <[^>]*> nop ++0+0eb4 <[^>]*> nop ++0+0eb8 <[^>]*> nop ++0+0ebc <[^>]*> nop ++0+0ec0 <[^>]*> nop ++0+0ec4 <[^>]*> nop ++0+0ec8 <[^>]*> nop ++0+0ecc <[^>]*> nop ++0+0ed0 <[^>]*> nop ++0+0ed4 <[^>]*> nop ++0+0ed8 <[^>]*> nop ++0+0edc <[^>]*> nop ++0+0ee0 <[^>]*> nop ++0+0ee4 <[^>]*> nop ++0+0ee8 <[^>]*> nop ++0+0eec <[^>]*> nop ++0+0ef0 <[^>]*> nop ++0+0ef4 <[^>]*> nop ++0+0ef8 <[^>]*> nop ++0+0efc <[^>]*> nop ++0+0f00 <[^>]*> nop ++0+0f04 <[^>]*> nop ++0+0f08 <[^>]*> nop ++0+0f0c <[^>]*> nop ++0+0f10 <[^>]*> nop ++0+0f14 <[^>]*> nop ++0+0f18 <[^>]*> nop ++0+0f1c <[^>]*> nop ++0+0f20 <[^>]*> nop ++0+0f24 <[^>]*> nop ++0+0f28 <[^>]*> nop ++0+0f2c <[^>]*> nop ++0+0f30 <[^>]*> nop ++0+0f34 <[^>]*> nop ++0+0f38 <[^>]*> nop ++0+0f3c <[^>]*> nop ++0+0f40 <[^>]*> nop ++0+0f44 <[^>]*> nop ++0+0f48 <[^>]*> nop ++0+0f4c <[^>]*> nop ++0+0f50 <[^>]*> nop ++0+0f54 <[^>]*> nop ++0+0f58 <[^>]*> nop ++0+0f5c <[^>]*> nop ++0+0f60 <[^>]*> nop ++0+0f64 <[^>]*> nop ++0+0f68 <[^>]*> nop ++0+0f6c <[^>]*> nop ++0+0f70 <[^>]*> nop ++0+0f74 <[^>]*> nop ++0+0f78 <[^>]*> nop ++0+0f7c <[^>]*> nop ++0+0f80 <[^>]*> nop ++0+0f84 <[^>]*> nop ++0+0f88 <[^>]*> nop ++0+0f8c <[^>]*> nop ++0+0f90 <[^>]*> nop ++0+0f94 <[^>]*> nop ++0+0f98 <[^>]*> nop ++0+0f9c <[^>]*> nop ++0+0fa0 <[^>]*> nop ++0+0fa4 <[^>]*> nop ++0+0fa8 <[^>]*> nop ++0+0fac <[^>]*> nop ++0+0fb0 <[^>]*> nop ++0+0fb4 <[^>]*> nop ++0+0fb8 <[^>]*> nop ++0+0fbc <[^>]*> nop ++0+0fc0 <[^>]*> nop ++0+0fc4 <[^>]*> nop ++0+0fc8 <[^>]*> nop ++0+0fcc <[^>]*> nop ++0+0fd0 <[^>]*> nop ++0+0fd4 <[^>]*> nop ++0+0fd8 <[^>]*> nop ++0+0fdc <[^>]*> nop ++0+0fe0 <[^>]*> nop ++0+0fe4 <[^>]*> nop ++0+0fe8 <[^>]*> nop ++0+0fec <[^>]*> nop ++0+0ff0 <[^>]*> nop ++0+0ff4 <[^>]*> nop ++0+0ff8 <[^>]*> nop ++0+0ffc <[^>]*> nop ++0+1000 <[^>]*> nop ++0+1004 <[^>]*> nop ++0+1008 <[^>]*> nop ++0+100c <[^>]*> nop ++0+1010 <[^>]*> nop ++0+1014 <[^>]*> nop ++0+1018 <[^>]*> nop ++0+101c <[^>]*> nop ++0+1020 <[^>]*> nop ++0+1024 <[^>]*> nop ++0+1028 <[^>]*> nop ++0+102c <[^>]*> nop ++0+1030 <[^>]*> nop ++0+1034 <[^>]*> nop ++0+1038 <[^>]*> nop ++0+103c <[^>]*> nop ++0+1040 <[^>]*> nop ++0+1044 <[^>]*> nop ++0+1048 <[^>]*> nop ++0+104c <[^>]*> nop ++0+1050 <[^>]*> nop ++0+1054 <[^>]*> nop ++0+1058 <[^>]*> nop ++0+105c <[^>]*> nop ++0+1060 <[^>]*> nop ++0+1064 <[^>]*> nop ++0+1068 <[^>]*> nop ++0+106c <[^>]*> nop ++0+1070 <[^>]*> nop ++0+1074 <[^>]*> nop ++0+1078 <[^>]*> nop ++0+107c <[^>]*> nop ++0+1080 <[^>]*> nop ++0+1084 <[^>]*> nop ++0+1088 <[^>]*> nop ++0+108c <[^>]*> nop ++0+1090 <[^>]*> nop ++0+1094 <[^>]*> nop ++0+1098 <[^>]*> nop ++0+109c <[^>]*> nop ++0+10a0 <[^>]*> nop ++0+10a4 <[^>]*> nop ++0+10a8 <[^>]*> nop ++0+10ac <[^>]*> nop ++0+10b0 <[^>]*> nop ++0+10b4 <[^>]*> nop ++0+10b8 <[^>]*> nop ++0+10bc <[^>]*> nop ++0+10c0 <[^>]*> nop ++0+10c4 <[^>]*> nop ++0+10c8 <[^>]*> nop ++0+10cc <[^>]*> nop ++0+10d0 <[^>]*> nop ++0+10d4 <[^>]*> nop ++0+10d8 <[^>]*> nop ++0+10dc <[^>]*> nop ++0+10e0 <[^>]*> nop ++0+10e4 <[^>]*> nop ++0+10e8 <[^>]*> nop ++0+10ec <[^>]*> nop ++0+10f0 <[^>]*> nop ++0+10f4 <[^>]*> nop ++0+10f8 <[^>]*> nop ++0+10fc <[^>]*> nop ++0+1100 <[^>]*> nop ++0+1104 <[^>]*> nop ++0+1108 <[^>]*> nop ++0+110c <[^>]*> nop ++0+1110 <[^>]*> nop ++0+1114 <[^>]*> nop ++0+1118 <[^>]*> nop ++0+111c <[^>]*> nop ++0+1120 <[^>]*> nop ++0+1124 <[^>]*> nop ++0+1128 <[^>]*> nop ++0+112c <[^>]*> nop ++0+1130 <[^>]*> nop ++0+1134 <[^>]*> nop ++0+1138 <[^>]*> nop ++0+113c <[^>]*> nop ++0+1140 <[^>]*> nop ++0+1144 <[^>]*> nop ++0+1148 <[^>]*> nop ++0+114c <[^>]*> nop ++0+1150 <[^>]*> nop ++0+1154 <[^>]*> nop ++0+1158 <[^>]*> nop ++0+115c <[^>]*> nop ++0+1160 <[^>]*> nop ++0+1164 <[^>]*> nop ++0+1168 <[^>]*> nop ++0+116c <[^>]*> nop ++0+1170 <[^>]*> nop ++0+1174 <[^>]*> nop ++0+1178 <[^>]*> nop ++0+117c <[^>]*> nop ++0+1180 <[^>]*> nop ++0+1184 <[^>]*> nop ++0+1188 <[^>]*> nop ++0+118c <[^>]*> nop ++0+1190 <[^>]*> nop ++0+1194 <[^>]*> nop ++0+1198 <[^>]*> nop ++0+119c <[^>]*> nop ++0+11a0 <[^>]*> nop ++0+11a4 <[^>]*> nop ++0+11a8 <[^>]*> nop ++0+11ac <[^>]*> nop ++0+11b0 <[^>]*> nop ++0+11b4 <[^>]*> nop ++0+11b8 <[^>]*> nop ++0+11bc <[^>]*> nop ++0+11c0 <[^>]*> nop ++0+11c4 <[^>]*> nop ++0+11c8 <[^>]*> nop ++0+11cc <[^>]*> nop ++0+11d0 <[^>]*> nop ++0+11d4 <[^>]*> nop ++0+11d8 <[^>]*> nop ++0+11dc <[^>]*> nop ++0+11e0 <[^>]*> nop ++0+11e4 <[^>]*> nop ++0+11e8 <[^>]*> nop ++0+11ec <[^>]*> nop ++0+11f0 <[^>]*> nop ++0+11f4 <[^>]*> nop ++0+11f8 <[^>]*> nop ++0+11fc <[^>]*> nop ++0+1200 <[^>]*> nop ++0+1204 <[^>]*> nop ++0+1208 <[^>]*> nop ++0+120c <[^>]*> nop ++0+1210 <[^>]*> nop ++0+1214 <[^>]*> nop ++0+1218 <[^>]*> nop ++0+121c <[^>]*> nop ++0+1220 <[^>]*> nop ++0+1224 <[^>]*> nop ++0+1228 <[^>]*> nop ++0+122c <[^>]*> nop ++0+1230 <[^>]*> nop ++0+1234 <[^>]*> nop ++0+1238 <[^>]*> nop ++0+123c <[^>]*> nop ++0+1240 <[^>]*> nop ++0+1244 <[^>]*> nop ++0+1248 <[^>]*> nop ++0+124c <[^>]*> nop ++0+1250 <[^>]*> nop ++0+1254 <[^>]*> nop ++0+1258 <[^>]*> nop ++0+125c <[^>]*> nop ++0+1260 <[^>]*> nop ++0+1264 <[^>]*> nop ++0+1268 <[^>]*> nop ++0+126c <[^>]*> nop ++0+1270 <[^>]*> nop ++0+1274 <[^>]*> nop ++0+1278 <[^>]*> nop ++0+127c <[^>]*> nop ++0+1280 <[^>]*> nop ++0+1284 <[^>]*> nop ++0+1288 <[^>]*> nop ++0+128c <[^>]*> nop ++0+1290 <[^>]*> nop ++0+1294 <[^>]*> nop ++0+1298 <[^>]*> nop ++0+129c <[^>]*> nop ++0+12a0 <[^>]*> nop ++0+12a4 <[^>]*> nop ++0+12a8 <[^>]*> nop ++0+12ac <[^>]*> nop ++0+12b0 <[^>]*> nop ++0+12b4 <[^>]*> nop ++0+12b8 <[^>]*> nop ++0+12bc <[^>]*> nop ++0+12c0 <[^>]*> nop ++0+12c4 <[^>]*> nop ++0+12c8 <[^>]*> nop ++0+12cc <[^>]*> nop ++0+12d0 <[^>]*> nop ++0+12d4 <[^>]*> nop ++0+12d8 <[^>]*> nop ++0+12dc <[^>]*> nop ++0+12e0 <[^>]*> nop ++0+12e4 <[^>]*> nop ++0+12e8 <[^>]*> nop ++0+12ec <[^>]*> nop ++0+12f0 <[^>]*> nop ++0+12f4 <[^>]*> nop ++0+12f8 <[^>]*> nop ++0+12fc <[^>]*> nop ++0+1300 <[^>]*> nop ++0+1304 <[^>]*> nop ++0+1308 <[^>]*> nop ++0+130c <[^>]*> nop ++0+1310 <[^>]*> nop ++0+1314 <[^>]*> nop ++0+1318 <[^>]*> nop ++0+131c <[^>]*> nop ++0+1320 <[^>]*> nop ++0+1324 <[^>]*> nop ++0+1328 <[^>]*> nop ++0+132c <[^>]*> nop ++0+1330 <[^>]*> nop ++0+1334 <[^>]*> nop ++0+1338 <[^>]*> nop ++0+133c <[^>]*> nop ++0+1340 <[^>]*> nop ++0+1344 <[^>]*> nop ++0+1348 <[^>]*> nop ++0+134c <[^>]*> nop ++0+1350 <[^>]*> nop ++0+1354 <[^>]*> nop ++0+1358 <[^>]*> nop ++0+135c <[^>]*> nop ++0+1360 <[^>]*> nop ++0+1364 <[^>]*> nop ++0+1368 <[^>]*> nop ++0+136c <[^>]*> nop ++0+1370 <[^>]*> nop ++0+1374 <[^>]*> nop ++0+1378 <[^>]*> nop ++0+137c <[^>]*> nop ++0+1380 <[^>]*> nop ++0+1384 <[^>]*> nop ++0+1388 <[^>]*> nop ++0+138c <[^>]*> nop ++0+1390 <[^>]*> nop ++0+1394 <[^>]*> nop ++0+1398 <[^>]*> nop ++0+139c <[^>]*> nop ++0+13a0 <[^>]*> nop ++0+13a4 <[^>]*> nop ++0+13a8 <[^>]*> nop ++0+13ac <[^>]*> nop ++0+13b0 <[^>]*> nop ++0+13b4 <[^>]*> nop ++0+13b8 <[^>]*> nop ++0+13bc <[^>]*> nop ++0+13c0 <[^>]*> nop ++0+13c4 <[^>]*> nop ++0+13c8 <[^>]*> nop ++0+13cc <[^>]*> nop ++0+13d0 <[^>]*> nop ++0+13d4 <[^>]*> nop ++0+13d8 <[^>]*> nop ++0+13dc <[^>]*> nop ++0+13e0 <[^>]*> nop ++0+13e4 <[^>]*> nop ++0+13e8 <[^>]*> nop ++0+13ec <[^>]*> nop ++0+13f0 <[^>]*> nop ++0+13f4 <[^>]*> nop ++0+13f8 <[^>]*> nop ++0+13fc <[^>]*> nop ++0+1400 <[^>]*> nop ++0+1404 <[^>]*> nop ++0+1408 <[^>]*> nop ++0+140c <[^>]*> nop ++0+1410 <[^>]*> nop ++0+1414 <[^>]*> nop ++0+1418 <[^>]*> nop ++0+141c <[^>]*> nop ++0+1420 <[^>]*> nop ++0+1424 <[^>]*> nop ++0+1428 <[^>]*> nop ++0+142c <[^>]*> nop ++0+1430 <[^>]*> nop ++0+1434 <[^>]*> nop ++0+1438 <[^>]*> nop ++0+143c <[^>]*> nop ++0+1440 <[^>]*> nop ++0+1444 <[^>]*> nop ++0+1448 <[^>]*> nop ++0+144c <[^>]*> nop ++0+1450 <[^>]*> nop ++0+1454 <[^>]*> nop ++0+1458 <[^>]*> nop ++0+145c <[^>]*> nop ++0+1460 <[^>]*> nop ++0+1464 <[^>]*> nop ++0+1468 <[^>]*> nop ++0+146c <[^>]*> nop ++0+1470 <[^>]*> nop ++0+1474 <[^>]*> nop ++0+1478 <[^>]*> nop ++0+147c <[^>]*> nop ++0+1480 <[^>]*> nop ++0+1484 <[^>]*> nop ++0+1488 <[^>]*> nop ++0+148c <[^>]*> nop ++0+1490 <[^>]*> nop ++0+1494 <[^>]*> nop ++0+1498 <[^>]*> nop ++0+149c <[^>]*> nop ++0+14a0 <[^>]*> nop ++0+14a4 <[^>]*> nop ++0+14a8 <[^>]*> nop ++0+14ac <[^>]*> nop ++0+14b0 <[^>]*> nop ++0+14b4 <[^>]*> nop ++0+14b8 <[^>]*> nop ++0+14bc <[^>]*> nop ++0+14c0 <[^>]*> nop ++0+14c4 <[^>]*> nop ++0+14c8 <[^>]*> nop ++0+14cc <[^>]*> nop ++0+14d0 <[^>]*> nop ++0+14d4 <[^>]*> nop ++0+14d8 <[^>]*> nop ++0+14dc <[^>]*> nop ++0+14e0 <[^>]*> nop ++0+14e4 <[^>]*> nop ++0+14e8 <[^>]*> nop ++0+14ec <[^>]*> nop ++0+14f0 <[^>]*> nop ++0+14f4 <[^>]*> nop ++0+14f8 <[^>]*> nop ++0+14fc <[^>]*> nop ++0+1500 <[^>]*> nop ++0+1504 <[^>]*> nop ++0+1508 <[^>]*> nop ++0+150c <[^>]*> nop ++0+1510 <[^>]*> nop ++0+1514 <[^>]*> nop ++0+1518 <[^>]*> nop ++0+151c <[^>]*> nop ++0+1520 <[^>]*> nop ++0+1524 <[^>]*> nop ++0+1528 <[^>]*> nop ++0+152c <[^>]*> nop ++0+1530 <[^>]*> nop ++0+1534 <[^>]*> nop ++0+1538 <[^>]*> nop ++0+153c <[^>]*> nop ++0+1540 <[^>]*> nop ++0+1544 <[^>]*> nop ++0+1548 <[^>]*> nop ++0+154c <[^>]*> nop ++0+1550 <[^>]*> nop ++0+1554 <[^>]*> nop ++0+1558 <[^>]*> nop ++0+155c <[^>]*> nop ++0+1560 <[^>]*> nop ++0+1564 <[^>]*> nop ++0+1568 <[^>]*> nop ++0+156c <[^>]*> nop ++0+1570 <[^>]*> nop ++0+1574 <[^>]*> nop ++0+1578 <[^>]*> nop ++0+157c <[^>]*> nop ++0+1580 <[^>]*> nop ++0+1584 <[^>]*> nop ++0+1588 <[^>]*> nop ++0+158c <[^>]*> nop ++0+1590 <[^>]*> nop ++0+1594 <[^>]*> nop ++0+1598 <[^>]*> nop ++0+159c <[^>]*> nop ++0+15a0 <[^>]*> nop ++0+15a4 <[^>]*> nop ++0+15a8 <[^>]*> nop ++0+15ac <[^>]*> nop ++0+15b0 <[^>]*> nop ++0+15b4 <[^>]*> nop ++0+15b8 <[^>]*> nop ++0+15bc <[^>]*> nop ++0+15c0 <[^>]*> nop ++0+15c4 <[^>]*> nop ++0+15c8 <[^>]*> nop ++0+15cc <[^>]*> nop ++0+15d0 <[^>]*> nop ++0+15d4 <[^>]*> nop ++0+15d8 <[^>]*> nop ++0+15dc <[^>]*> nop ++0+15e0 <[^>]*> nop ++0+15e4 <[^>]*> nop ++0+15e8 <[^>]*> nop ++0+15ec <[^>]*> nop ++0+15f0 <[^>]*> nop ++0+15f4 <[^>]*> nop ++0+15f8 <[^>]*> nop ++0+15fc <[^>]*> nop ++0+1600 <[^>]*> nop ++0+1604 <[^>]*> nop ++0+1608 <[^>]*> nop ++0+160c <[^>]*> nop ++0+1610 <[^>]*> nop ++0+1614 <[^>]*> nop ++0+1618 <[^>]*> nop ++0+161c <[^>]*> nop ++0+1620 <[^>]*> nop ++0+1624 <[^>]*> nop ++0+1628 <[^>]*> nop ++0+162c <[^>]*> nop ++0+1630 <[^>]*> nop ++0+1634 <[^>]*> nop ++0+1638 <[^>]*> nop ++0+163c <[^>]*> nop ++0+1640 <[^>]*> nop ++0+1644 <[^>]*> nop ++0+1648 <[^>]*> nop ++0+164c <[^>]*> nop ++0+1650 <[^>]*> nop ++0+1654 <[^>]*> nop ++0+1658 <[^>]*> nop ++0+165c <[^>]*> nop ++0+1660 <[^>]*> nop ++0+1664 <[^>]*> nop ++0+1668 <[^>]*> nop ++0+166c <[^>]*> nop ++0+1670 <[^>]*> nop ++0+1674 <[^>]*> nop ++0+1678 <[^>]*> nop ++0+167c <[^>]*> nop ++0+1680 <[^>]*> nop ++0+1684 <[^>]*> nop ++0+1688 <[^>]*> nop ++0+168c <[^>]*> nop ++0+1690 <[^>]*> nop ++0+1694 <[^>]*> nop ++0+1698 <[^>]*> nop ++0+169c <[^>]*> nop ++0+16a0 <[^>]*> nop ++0+16a4 <[^>]*> nop ++0+16a8 <[^>]*> nop ++0+16ac <[^>]*> nop ++0+16b0 <[^>]*> nop ++0+16b4 <[^>]*> nop ++0+16b8 <[^>]*> nop ++0+16bc <[^>]*> nop ++0+16c0 <[^>]*> nop ++0+16c4 <[^>]*> nop ++0+16c8 <[^>]*> nop ++0+16cc <[^>]*> nop ++0+16d0 <[^>]*> nop ++0+16d4 <[^>]*> nop ++0+16d8 <[^>]*> nop ++0+16dc <[^>]*> nop ++0+16e0 <[^>]*> nop ++0+16e4 <[^>]*> nop ++0+16e8 <[^>]*> nop ++0+16ec <[^>]*> nop ++0+16f0 <[^>]*> nop ++0+16f4 <[^>]*> nop ++0+16f8 <[^>]*> nop ++0+16fc <[^>]*> nop ++0+1700 <[^>]*> nop ++0+1704 <[^>]*> nop ++0+1708 <[^>]*> nop ++0+170c <[^>]*> nop ++0+1710 <[^>]*> nop ++0+1714 <[^>]*> nop ++0+1718 <[^>]*> nop ++0+171c <[^>]*> nop ++0+1720 <[^>]*> nop ++0+1724 <[^>]*> nop ++0+1728 <[^>]*> nop ++0+172c <[^>]*> nop ++0+1730 <[^>]*> nop ++0+1734 <[^>]*> nop ++0+1738 <[^>]*> nop ++0+173c <[^>]*> nop ++0+1740 <[^>]*> nop ++0+1744 <[^>]*> nop ++0+1748 <[^>]*> nop ++0+174c <[^>]*> nop ++0+1750 <[^>]*> nop ++0+1754 <[^>]*> nop ++0+1758 <[^>]*> nop ++0+175c <[^>]*> nop ++0+1760 <[^>]*> nop ++0+1764 <[^>]*> nop ++0+1768 <[^>]*> nop ++0+176c <[^>]*> nop ++0+1770 <[^>]*> nop ++0+1774 <[^>]*> nop ++0+1778 <[^>]*> nop ++0+177c <[^>]*> nop ++0+1780 <[^>]*> nop ++0+1784 <[^>]*> nop ++0+1788 <[^>]*> nop ++0+178c <[^>]*> nop ++0+1790 <[^>]*> nop ++0+1794 <[^>]*> nop ++0+1798 <[^>]*> nop ++0+179c <[^>]*> nop ++0+17a0 <[^>]*> nop ++0+17a4 <[^>]*> nop ++0+17a8 <[^>]*> nop ++0+17ac <[^>]*> nop ++0+17b0 <[^>]*> nop ++0+17b4 <[^>]*> nop ++0+17b8 <[^>]*> nop ++0+17bc <[^>]*> nop ++0+17c0 <[^>]*> nop ++0+17c4 <[^>]*> nop ++0+17c8 <[^>]*> nop ++0+17cc <[^>]*> nop ++0+17d0 <[^>]*> nop ++0+17d4 <[^>]*> nop ++0+17d8 <[^>]*> nop ++0+17dc <[^>]*> nop ++0+17e0 <[^>]*> nop ++0+17e4 <[^>]*> nop ++0+17e8 <[^>]*> nop ++0+17ec <[^>]*> nop ++0+17f0 <[^>]*> nop ++0+17f4 <[^>]*> nop ++0+17f8 <[^>]*> nop ++0+17fc <[^>]*> nop ++0+1800 <[^>]*> nop ++0+1804 <[^>]*> nop ++0+1808 <[^>]*> nop ++0+180c <[^>]*> nop ++0+1810 <[^>]*> nop ++0+1814 <[^>]*> nop ++0+1818 <[^>]*> nop ++0+181c <[^>]*> nop ++0+1820 <[^>]*> nop ++0+1824 <[^>]*> nop ++0+1828 <[^>]*> nop ++0+182c <[^>]*> nop ++0+1830 <[^>]*> nop ++0+1834 <[^>]*> nop ++0+1838 <[^>]*> nop ++0+183c <[^>]*> nop ++0+1840 <[^>]*> nop ++0+1844 <[^>]*> nop ++0+1848 <[^>]*> nop ++0+184c <[^>]*> nop ++0+1850 <[^>]*> nop ++0+1854 <[^>]*> nop ++0+1858 <[^>]*> nop ++0+185c <[^>]*> nop ++0+1860 <[^>]*> nop ++0+1864 <[^>]*> nop ++0+1868 <[^>]*> nop ++0+186c <[^>]*> nop ++0+1870 <[^>]*> nop ++0+1874 <[^>]*> nop ++0+1878 <[^>]*> nop ++0+187c <[^>]*> nop ++0+1880 <[^>]*> nop ++0+1884 <[^>]*> nop ++0+1888 <[^>]*> nop ++0+188c <[^>]*> nop ++0+1890 <[^>]*> nop ++0+1894 <[^>]*> nop ++0+1898 <[^>]*> nop ++0+189c <[^>]*> nop ++0+18a0 <[^>]*> nop ++0+18a4 <[^>]*> nop ++0+18a8 <[^>]*> nop ++0+18ac <[^>]*> nop ++0+18b0 <[^>]*> nop ++0+18b4 <[^>]*> nop ++0+18b8 <[^>]*> nop ++0+18bc <[^>]*> nop ++0+18c0 <[^>]*> nop ++0+18c4 <[^>]*> nop ++0+18c8 <[^>]*> nop ++0+18cc <[^>]*> nop ++0+18d0 <[^>]*> nop ++0+18d4 <[^>]*> nop ++0+18d8 <[^>]*> nop ++0+18dc <[^>]*> nop ++0+18e0 <[^>]*> nop ++0+18e4 <[^>]*> nop ++0+18e8 <[^>]*> nop ++0+18ec <[^>]*> nop ++0+18f0 <[^>]*> nop ++0+18f4 <[^>]*> nop ++0+18f8 <[^>]*> nop ++0+18fc <[^>]*> nop ++0+1900 <[^>]*> nop ++0+1904 <[^>]*> nop ++0+1908 <[^>]*> nop ++0+190c <[^>]*> nop ++0+1910 <[^>]*> nop ++0+1914 <[^>]*> nop ++0+1918 <[^>]*> nop ++0+191c <[^>]*> nop ++0+1920 <[^>]*> nop ++0+1924 <[^>]*> nop ++0+1928 <[^>]*> nop ++0+192c <[^>]*> nop ++0+1930 <[^>]*> nop ++0+1934 <[^>]*> nop ++0+1938 <[^>]*> nop ++0+193c <[^>]*> nop ++0+1940 <[^>]*> nop ++0+1944 <[^>]*> nop ++0+1948 <[^>]*> nop ++0+194c <[^>]*> nop ++0+1950 <[^>]*> nop ++0+1954 <[^>]*> nop ++0+1958 <[^>]*> nop ++0+195c <[^>]*> nop ++0+1960 <[^>]*> nop ++0+1964 <[^>]*> nop ++0+1968 <[^>]*> nop ++0+196c <[^>]*> nop ++0+1970 <[^>]*> nop ++0+1974 <[^>]*> nop ++0+1978 <[^>]*> nop ++0+197c <[^>]*> nop ++0+1980 <[^>]*> nop ++0+1984 <[^>]*> nop ++0+1988 <[^>]*> nop ++0+198c <[^>]*> nop ++0+1990 <[^>]*> nop ++0+1994 <[^>]*> nop ++0+1998 <[^>]*> nop ++0+199c <[^>]*> nop ++0+19a0 <[^>]*> nop ++0+19a4 <[^>]*> nop ++0+19a8 <[^>]*> nop ++0+19ac <[^>]*> nop ++0+19b0 <[^>]*> nop ++0+19b4 <[^>]*> nop ++0+19b8 <[^>]*> nop ++0+19bc <[^>]*> nop ++0+19c0 <[^>]*> nop ++0+19c4 <[^>]*> nop ++0+19c8 <[^>]*> nop ++0+19cc <[^>]*> nop ++0+19d0 <[^>]*> nop ++0+19d4 <[^>]*> nop ++0+19d8 <[^>]*> nop ++0+19dc <[^>]*> nop ++0+19e0 <[^>]*> nop ++0+19e4 <[^>]*> nop ++0+19e8 <[^>]*> nop ++0+19ec <[^>]*> nop ++0+19f0 <[^>]*> nop ++0+19f4 <[^>]*> nop ++0+19f8 <[^>]*> nop ++0+19fc <[^>]*> nop ++0+1a00 <[^>]*> nop ++0+1a04 <[^>]*> nop ++0+1a08 <[^>]*> nop ++0+1a0c <[^>]*> nop ++0+1a10 <[^>]*> nop ++0+1a14 <[^>]*> nop ++0+1a18 <[^>]*> nop ++0+1a1c <[^>]*> nop ++0+1a20 <[^>]*> nop ++0+1a24 <[^>]*> nop ++0+1a28 <[^>]*> nop ++0+1a2c <[^>]*> nop ++0+1a30 <[^>]*> nop ++0+1a34 <[^>]*> nop ++0+1a38 <[^>]*> nop ++0+1a3c <[^>]*> nop ++0+1a40 <[^>]*> nop ++0+1a44 <[^>]*> nop ++0+1a48 <[^>]*> nop ++0+1a4c <[^>]*> nop ++0+1a50 <[^>]*> nop ++0+1a54 <[^>]*> nop ++0+1a58 <[^>]*> nop ++0+1a5c <[^>]*> nop ++0+1a60 <[^>]*> nop ++0+1a64 <[^>]*> nop ++0+1a68 <[^>]*> nop ++0+1a6c <[^>]*> nop ++0+1a70 <[^>]*> nop ++0+1a74 <[^>]*> nop ++0+1a78 <[^>]*> nop ++0+1a7c <[^>]*> nop ++0+1a80 <[^>]*> nop ++0+1a84 <[^>]*> nop ++0+1a88 <[^>]*> nop ++0+1a8c <[^>]*> nop ++0+1a90 <[^>]*> nop ++0+1a94 <[^>]*> nop ++0+1a98 <[^>]*> nop ++0+1a9c <[^>]*> nop ++0+1aa0 <[^>]*> nop ++0+1aa4 <[^>]*> nop ++0+1aa8 <[^>]*> nop ++0+1aac <[^>]*> nop ++0+1ab0 <[^>]*> nop ++0+1ab4 <[^>]*> nop ++0+1ab8 <[^>]*> nop ++0+1abc <[^>]*> nop ++0+1ac0 <[^>]*> nop ++0+1ac4 <[^>]*> nop ++0+1ac8 <[^>]*> nop ++0+1acc <[^>]*> nop ++0+1ad0 <[^>]*> nop ++0+1ad4 <[^>]*> nop ++0+1ad8 <[^>]*> nop ++0+1adc <[^>]*> nop ++0+1ae0 <[^>]*> nop ++0+1ae4 <[^>]*> nop ++0+1ae8 <[^>]*> nop ++0+1aec <[^>]*> nop ++0+1af0 <[^>]*> nop ++0+1af4 <[^>]*> nop ++0+1af8 <[^>]*> nop ++0+1afc <[^>]*> nop ++0+1b00 <[^>]*> nop ++0+1b04 <[^>]*> nop ++0+1b08 <[^>]*> nop ++0+1b0c <[^>]*> nop ++0+1b10 <[^>]*> nop ++0+1b14 <[^>]*> nop ++0+1b18 <[^>]*> nop ++0+1b1c <[^>]*> nop ++0+1b20 <[^>]*> nop ++0+1b24 <[^>]*> nop ++0+1b28 <[^>]*> nop ++0+1b2c <[^>]*> nop ++0+1b30 <[^>]*> nop ++0+1b34 <[^>]*> nop ++0+1b38 <[^>]*> nop ++0+1b3c <[^>]*> nop ++0+1b40 <[^>]*> nop ++0+1b44 <[^>]*> nop ++0+1b48 <[^>]*> nop ++0+1b4c <[^>]*> nop ++0+1b50 <[^>]*> nop ++0+1b54 <[^>]*> nop ++0+1b58 <[^>]*> nop ++0+1b5c <[^>]*> nop ++0+1b60 <[^>]*> nop ++0+1b64 <[^>]*> nop ++0+1b68 <[^>]*> nop ++0+1b6c <[^>]*> nop ++0+1b70 <[^>]*> nop ++0+1b74 <[^>]*> nop ++0+1b78 <[^>]*> nop ++0+1b7c <[^>]*> nop ++0+1b80 <[^>]*> nop ++0+1b84 <[^>]*> nop ++0+1b88 <[^>]*> nop ++0+1b8c <[^>]*> nop ++0+1b90 <[^>]*> nop ++0+1b94 <[^>]*> nop ++0+1b98 <[^>]*> nop ++0+1b9c <[^>]*> nop ++0+1ba0 <[^>]*> nop ++0+1ba4 <[^>]*> nop ++0+1ba8 <[^>]*> nop ++0+1bac <[^>]*> nop ++0+1bb0 <[^>]*> nop ++0+1bb4 <[^>]*> nop ++0+1bb8 <[^>]*> nop ++0+1bbc <[^>]*> nop ++0+1bc0 <[^>]*> nop ++0+1bc4 <[^>]*> nop ++0+1bc8 <[^>]*> nop ++0+1bcc <[^>]*> nop ++0+1bd0 <[^>]*> nop ++0+1bd4 <[^>]*> nop ++0+1bd8 <[^>]*> nop ++0+1bdc <[^>]*> nop ++0+1be0 <[^>]*> nop ++0+1be4 <[^>]*> nop ++0+1be8 <[^>]*> nop ++0+1bec <[^>]*> nop ++0+1bf0 <[^>]*> nop ++0+1bf4 <[^>]*> nop ++0+1bf8 <[^>]*> nop ++0+1bfc <[^>]*> nop ++0+1c00 <[^>]*> nop ++0+1c04 <[^>]*> nop ++0+1c08 <[^>]*> nop ++0+1c0c <[^>]*> nop ++0+1c10 <[^>]*> nop ++0+1c14 <[^>]*> nop ++0+1c18 <[^>]*> nop ++0+1c1c <[^>]*> nop ++0+1c20 <[^>]*> nop ++0+1c24 <[^>]*> nop ++0+1c28 <[^>]*> nop ++0+1c2c <[^>]*> nop ++0+1c30 <[^>]*> nop ++0+1c34 <[^>]*> nop ++0+1c38 <[^>]*> nop ++0+1c3c <[^>]*> nop ++0+1c40 <[^>]*> nop ++0+1c44 <[^>]*> nop ++0+1c48 <[^>]*> nop ++0+1c4c <[^>]*> nop ++0+1c50 <[^>]*> nop ++0+1c54 <[^>]*> nop ++0+1c58 <[^>]*> nop ++0+1c5c <[^>]*> nop ++0+1c60 <[^>]*> nop ++0+1c64 <[^>]*> nop ++0+1c68 <[^>]*> nop ++0+1c6c <[^>]*> nop ++0+1c70 <[^>]*> nop ++0+1c74 <[^>]*> nop ++0+1c78 <[^>]*> nop ++0+1c7c <[^>]*> nop ++0+1c80 <[^>]*> nop ++0+1c84 <[^>]*> nop ++0+1c88 <[^>]*> nop ++0+1c8c <[^>]*> nop ++0+1c90 <[^>]*> nop ++0+1c94 <[^>]*> nop ++0+1c98 <[^>]*> nop ++0+1c9c <[^>]*> nop ++0+1ca0 <[^>]*> nop ++0+1ca4 <[^>]*> nop ++0+1ca8 <[^>]*> nop ++0+1cac <[^>]*> nop ++0+1cb0 <[^>]*> nop ++0+1cb4 <[^>]*> nop ++0+1cb8 <[^>]*> nop ++0+1cbc <[^>]*> nop ++0+1cc0 <[^>]*> nop ++0+1cc4 <[^>]*> nop ++0+1cc8 <[^>]*> nop ++0+1ccc <[^>]*> nop ++0+1cd0 <[^>]*> nop ++0+1cd4 <[^>]*> nop ++0+1cd8 <[^>]*> nop ++0+1cdc <[^>]*> nop ++0+1ce0 <[^>]*> nop ++0+1ce4 <[^>]*> nop ++0+1ce8 <[^>]*> nop ++0+1cec <[^>]*> nop ++0+1cf0 <[^>]*> nop ++0+1cf4 <[^>]*> nop ++0+1cf8 <[^>]*> nop ++0+1cfc <[^>]*> nop ++0+1d00 <[^>]*> nop ++0+1d04 <[^>]*> nop ++0+1d08 <[^>]*> nop ++0+1d0c <[^>]*> nop ++0+1d10 <[^>]*> nop ++0+1d14 <[^>]*> nop ++0+1d18 <[^>]*> nop ++0+1d1c <[^>]*> nop ++0+1d20 <[^>]*> nop ++0+1d24 <[^>]*> nop ++0+1d28 <[^>]*> nop ++0+1d2c <[^>]*> nop ++0+1d30 <[^>]*> nop ++0+1d34 <[^>]*> nop ++0+1d38 <[^>]*> nop ++0+1d3c <[^>]*> nop ++0+1d40 <[^>]*> nop ++0+1d44 <[^>]*> nop ++0+1d48 <[^>]*> nop ++0+1d4c <[^>]*> nop ++0+1d50 <[^>]*> nop ++0+1d54 <[^>]*> nop ++0+1d58 <[^>]*> nop ++0+1d5c <[^>]*> nop ++0+1d60 <[^>]*> nop ++0+1d64 <[^>]*> nop ++0+1d68 <[^>]*> nop ++0+1d6c <[^>]*> nop ++0+1d70 <[^>]*> nop ++0+1d74 <[^>]*> nop ++0+1d78 <[^>]*> nop ++0+1d7c <[^>]*> nop ++0+1d80 <[^>]*> nop ++0+1d84 <[^>]*> nop ++0+1d88 <[^>]*> nop ++0+1d8c <[^>]*> nop ++0+1d90 <[^>]*> nop ++0+1d94 <[^>]*> nop ++0+1d98 <[^>]*> nop ++0+1d9c <[^>]*> nop ++0+1da0 <[^>]*> nop ++0+1da4 <[^>]*> nop ++0+1da8 <[^>]*> nop ++0+1dac <[^>]*> nop ++0+1db0 <[^>]*> nop ++0+1db4 <[^>]*> nop ++0+1db8 <[^>]*> nop ++0+1dbc <[^>]*> nop ++0+1dc0 <[^>]*> nop ++0+1dc4 <[^>]*> nop ++0+1dc8 <[^>]*> nop ++0+1dcc <[^>]*> nop ++0+1dd0 <[^>]*> nop ++0+1dd4 <[^>]*> nop ++0+1dd8 <[^>]*> nop ++0+1ddc <[^>]*> nop ++0+1de0 <[^>]*> nop ++0+1de4 <[^>]*> nop ++0+1de8 <[^>]*> nop ++0+1dec <[^>]*> nop ++0+1df0 <[^>]*> nop ++0+1df4 <[^>]*> nop ++0+1df8 <[^>]*> nop ++0+1dfc <[^>]*> nop ++0+1e00 <[^>]*> nop ++0+1e04 <[^>]*> nop ++0+1e08 <[^>]*> nop ++0+1e0c <[^>]*> nop ++0+1e10 <[^>]*> nop ++0+1e14 <[^>]*> nop ++0+1e18 <[^>]*> nop ++0+1e1c <[^>]*> nop ++0+1e20 <[^>]*> nop ++0+1e24 <[^>]*> nop ++0+1e28 <[^>]*> nop ++0+1e2c <[^>]*> nop ++0+1e30 <[^>]*> nop ++0+1e34 <[^>]*> nop ++0+1e38 <[^>]*> nop ++0+1e3c <[^>]*> nop ++0+1e40 <[^>]*> nop ++0+1e44 <[^>]*> nop ++0+1e48 <[^>]*> nop ++0+1e4c <[^>]*> nop ++0+1e50 <[^>]*> nop ++0+1e54 <[^>]*> nop ++0+1e58 <[^>]*> nop ++0+1e5c <[^>]*> nop ++0+1e60 <[^>]*> nop ++0+1e64 <[^>]*> nop ++0+1e68 <[^>]*> nop ++0+1e6c <[^>]*> nop ++0+1e70 <[^>]*> nop ++0+1e74 <[^>]*> nop ++0+1e78 <[^>]*> nop ++0+1e7c <[^>]*> nop ++0+1e80 <[^>]*> nop ++0+1e84 <[^>]*> nop ++0+1e88 <[^>]*> nop ++0+1e8c <[^>]*> nop ++0+1e90 <[^>]*> nop ++0+1e94 <[^>]*> nop ++0+1e98 <[^>]*> nop ++0+1e9c <[^>]*> nop ++0+1ea0 <[^>]*> nop ++0+1ea4 <[^>]*> nop ++0+1ea8 <[^>]*> nop ++0+1eac <[^>]*> nop ++0+1eb0 <[^>]*> nop ++0+1eb4 <[^>]*> nop ++0+1eb8 <[^>]*> nop ++0+1ebc <[^>]*> nop ++0+1ec0 <[^>]*> nop ++0+1ec4 <[^>]*> nop ++0+1ec8 <[^>]*> nop ++0+1ecc <[^>]*> nop ++0+1ed0 <[^>]*> nop ++0+1ed4 <[^>]*> nop ++0+1ed8 <[^>]*> nop ++0+1edc <[^>]*> nop ++0+1ee0 <[^>]*> nop ++0+1ee4 <[^>]*> nop ++0+1ee8 <[^>]*> nop ++0+1eec <[^>]*> nop ++0+1ef0 <[^>]*> nop ++0+1ef4 <[^>]*> nop ++0+1ef8 <[^>]*> nop ++0+1efc <[^>]*> nop ++0+1f00 <[^>]*> nop ++0+1f04 <[^>]*> nop ++0+1f08 <[^>]*> nop ++0+1f0c <[^>]*> nop ++0+1f10 <[^>]*> nop ++0+1f14 <[^>]*> nop ++0+1f18 <[^>]*> nop ++0+1f1c <[^>]*> nop ++0+1f20 <[^>]*> nop ++0+1f24 <[^>]*> nop ++0+1f28 <[^>]*> nop ++0+1f2c <[^>]*> nop ++0+1f30 <[^>]*> nop ++0+1f34 <[^>]*> nop ++0+1f38 <[^>]*> nop ++0+1f3c <[^>]*> nop ++0+1f40 <[^>]*> nop ++0+1f44 <[^>]*> nop ++0+1f48 <[^>]*> nop ++0+1f4c <[^>]*> nop ++0+1f50 <[^>]*> nop ++0+1f54 <[^>]*> nop ++0+1f58 <[^>]*> nop ++0+1f5c <[^>]*> nop ++0+1f60 <[^>]*> nop ++0+1f64 <[^>]*> nop ++0+1f68 <[^>]*> nop ++0+1f6c <[^>]*> nop ++0+1f70 <[^>]*> nop ++0+1f74 <[^>]*> nop ++0+1f78 <[^>]*> nop ++0+1f7c <[^>]*> nop ++0+1f80 <[^>]*> nop ++0+1f84 <[^>]*> nop ++0+1f88 <[^>]*> nop ++0+1f8c <[^>]*> nop ++0+1f90 <[^>]*> nop ++0+1f94 <[^>]*> nop ++0+1f98 <[^>]*> nop ++0+1f9c <[^>]*> nop ++0+1fa0 <[^>]*> nop ++0+1fa4 <[^>]*> nop ++0+1fa8 <[^>]*> nop ++0+1fac <[^>]*> nop ++0+1fb0 <[^>]*> nop ++0+1fb4 <[^>]*> nop ++0+1fb8 <[^>]*> nop ++0+1fbc <[^>]*> nop ++0+1fc0 <[^>]*> nop ++0+1fc4 <[^>]*> nop ++0+1fc8 <[^>]*> nop ++0+1fcc <[^>]*> nop ++0+1fd0 <[^>]*> nop ++0+1fd4 <[^>]*> nop ++0+1fd8 <[^>]*> nop ++0+1fdc <[^>]*> nop ++0+1fe0 <[^>]*> nop ++0+1fe4 <[^>]*> nop ++0+1fe8 <[^>]*> nop ++0+1fec <[^>]*> nop ++0+1ff0 <[^>]*> nop ++0+1ff4 <[^>]*> nop ++0+1ff8 <[^>]*> nop ++0+1ffc <[^>]*> nop ++0+2000 <[^>]*> nop ++0+2004 <[^>]*> nop ++0+2008 <[^>]*> nop ++0+200c <[^>]*> nop ++0+2010 <[^>]*> nop ++0+2014 <[^>]*> nop ++0+2018 <[^>]*> nop ++0+201c <[^>]*> nop ++0+2020 <[^>]*> nop ++0+2024 <[^>]*> nop ++0+2028 <[^>]*> nop ++0+202c <[^>]*> nop ++0+2030 <[^>]*> nop ++0+2034 <[^>]*> nop ++0+2038 <[^>]*> nop ++0+203c <[^>]*> nop ++0+2040 <[^>]*> nop ++0+2044 <[^>]*> nop ++0+2048 <[^>]*> nop ++0+204c <[^>]*> nop ++0+2050 <[^>]*> nop ++0+2054 <[^>]*> nop ++0+2058 <[^>]*> nop ++0+205c <[^>]*> nop ++0+2060 <[^>]*> nop ++0+2064 <[^>]*> nop ++0+2068 <[^>]*> nop ++0+206c <[^>]*> nop ++0+2070 <[^>]*> nop ++0+2074 <[^>]*> nop ++0+2078 <[^>]*> nop ++0+207c <[^>]*> nop ++0+2080 <[^>]*> nop ++0+2084 <[^>]*> nop ++0+2088 <[^>]*> nop ++0+208c <[^>]*> nop ++0+2090 <[^>]*> nop ++0+2094 <[^>]*> nop ++0+2098 <[^>]*> nop ++0+209c <[^>]*> nop ++0+20a0 <[^>]*> nop ++0+20a4 <[^>]*> nop ++0+20a8 <[^>]*> nop ++0+20ac <[^>]*> nop ++0+20b0 <[^>]*> nop ++0+20b4 <[^>]*> nop ++0+20b8 <[^>]*> nop ++0+20bc <[^>]*> nop ++0+20c0 <[^>]*> nop ++0+20c4 <[^>]*> nop ++0+20c8 <[^>]*> nop ++0+20cc <[^>]*> nop ++0+20d0 <[^>]*> nop ++0+20d4 <[^>]*> nop ++0+20d8 <[^>]*> nop ++0+20dc <[^>]*> nop ++0+20e0 <[^>]*> nop ++0+20e4 <[^>]*> nop ++0+20e8 <[^>]*> nop ++0+20ec <[^>]*> nop ++0+20f0 <[^>]*> nop ++0+20f4 <[^>]*> nop ++0+20f8 <[^>]*> nop ++0+20fc <[^>]*> nop ++0+2100 <[^>]*> nop ++0+2104 <[^>]*> nop ++0+2108 <[^>]*> nop ++0+210c <[^>]*> nop ++0+2110 <[^>]*> nop ++0+2114 <[^>]*> nop ++0+2118 <[^>]*> nop ++0+211c <[^>]*> nop ++0+2120 <[^>]*> nop ++0+2124 <[^>]*> nop ++0+2128 <[^>]*> nop ++0+212c <[^>]*> nop ++0+2130 <[^>]*> nop ++0+2134 <[^>]*> nop ++0+2138 <[^>]*> nop ++0+213c <[^>]*> nop ++0+2140 <[^>]*> nop ++0+2144 <[^>]*> nop ++0+2148 <[^>]*> nop ++0+214c <[^>]*> nop ++0+2150 <[^>]*> nop ++0+2154 <[^>]*> nop ++0+2158 <[^>]*> nop ++0+215c <[^>]*> nop ++0+2160 <[^>]*> nop ++0+2164 <[^>]*> nop ++0+2168 <[^>]*> nop ++0+216c <[^>]*> nop ++0+2170 <[^>]*> nop ++0+2174 <[^>]*> nop ++0+2178 <[^>]*> nop ++0+217c <[^>]*> nop ++0+2180 <[^>]*> nop ++0+2184 <[^>]*> nop ++0+2188 <[^>]*> nop ++0+218c <[^>]*> nop ++0+2190 <[^>]*> nop ++0+2194 <[^>]*> nop ++0+2198 <[^>]*> nop ++0+219c <[^>]*> nop ++0+21a0 <[^>]*> nop ++0+21a4 <[^>]*> nop ++0+21a8 <[^>]*> nop ++0+21ac <[^>]*> nop ++0+21b0 <[^>]*> nop ++0+21b4 <[^>]*> nop ++0+21b8 <[^>]*> nop ++0+21bc <[^>]*> nop ++0+21c0 <[^>]*> nop ++0+21c4 <[^>]*> nop ++0+21c8 <[^>]*> nop ++0+21cc <[^>]*> nop ++0+21d0 <[^>]*> nop ++0+21d4 <[^>]*> nop ++0+21d8 <[^>]*> nop ++0+21dc <[^>]*> nop ++0+21e0 <[^>]*> nop ++0+21e4 <[^>]*> nop ++0+21e8 <[^>]*> nop ++0+21ec <[^>]*> nop ++0+21f0 <[^>]*> nop ++0+21f4 <[^>]*> nop ++0+21f8 <[^>]*> nop ++0+21fc <[^>]*> nop ++0+2200 <[^>]*> nop ++0+2204 <[^>]*> nop ++0+2208 <[^>]*> nop ++0+220c <[^>]*> nop ++0+2210 <[^>]*> nop ++0+2214 <[^>]*> nop ++0+2218 <[^>]*> nop ++0+221c <[^>]*> nop ++0+2220 <[^>]*> nop ++0+2224 <[^>]*> nop ++0+2228 <[^>]*> nop ++0+222c <[^>]*> nop ++0+2230 <[^>]*> nop ++0+2234 <[^>]*> nop ++0+2238 <[^>]*> nop ++0+223c <[^>]*> nop ++0+2240 <[^>]*> nop ++0+2244 <[^>]*> nop ++0+2248 <[^>]*> nop ++0+224c <[^>]*> nop ++0+2250 <[^>]*> nop ++0+2254 <[^>]*> nop ++0+2258 <[^>]*> nop ++0+225c <[^>]*> nop ++0+2260 <[^>]*> nop ++0+2264 <[^>]*> nop ++0+2268 <[^>]*> nop ++0+226c <[^>]*> nop ++0+2270 <[^>]*> nop ++0+2274 <[^>]*> nop ++0+2278 <[^>]*> nop ++0+227c <[^>]*> nop ++0+2280 <[^>]*> nop ++0+2284 <[^>]*> nop ++0+2288 <[^>]*> nop ++0+228c <[^>]*> nop ++0+2290 <[^>]*> nop ++0+2294 <[^>]*> nop ++0+2298 <[^>]*> nop ++0+229c <[^>]*> nop ++0+22a0 <[^>]*> nop ++0+22a4 <[^>]*> nop ++0+22a8 <[^>]*> nop ++0+22ac <[^>]*> nop ++0+22b0 <[^>]*> nop ++0+22b4 <[^>]*> nop ++0+22b8 <[^>]*> nop ++0+22bc <[^>]*> nop ++0+22c0 <[^>]*> nop ++0+22c4 <[^>]*> nop ++0+22c8 <[^>]*> nop ++0+22cc <[^>]*> nop ++0+22d0 <[^>]*> nop ++0+22d4 <[^>]*> nop ++0+22d8 <[^>]*> nop ++0+22dc <[^>]*> nop ++0+22e0 <[^>]*> nop ++0+22e4 <[^>]*> nop ++0+22e8 <[^>]*> nop ++0+22ec <[^>]*> nop ++0+22f0 <[^>]*> nop ++0+22f4 <[^>]*> nop ++0+22f8 <[^>]*> nop ++0+22fc <[^>]*> nop ++0+2300 <[^>]*> nop ++0+2304 <[^>]*> nop ++0+2308 <[^>]*> nop ++0+230c <[^>]*> nop ++0+2310 <[^>]*> nop ++0+2314 <[^>]*> nop ++0+2318 <[^>]*> nop ++0+231c <[^>]*> nop ++0+2320 <[^>]*> nop ++0+2324 <[^>]*> nop ++0+2328 <[^>]*> nop ++0+232c <[^>]*> nop ++0+2330 <[^>]*> nop ++0+2334 <[^>]*> nop ++0+2338 <[^>]*> nop ++0+233c <[^>]*> nop ++0+2340 <[^>]*> nop ++0+2344 <[^>]*> nop ++0+2348 <[^>]*> nop ++0+234c <[^>]*> nop ++0+2350 <[^>]*> nop ++0+2354 <[^>]*> nop ++0+2358 <[^>]*> nop ++0+235c <[^>]*> nop ++0+2360 <[^>]*> nop ++0+2364 <[^>]*> nop ++0+2368 <[^>]*> nop ++0+236c <[^>]*> nop ++0+2370 <[^>]*> nop ++0+2374 <[^>]*> nop ++0+2378 <[^>]*> nop ++0+237c <[^>]*> nop ++0+2380 <[^>]*> nop ++0+2384 <[^>]*> nop ++0+2388 <[^>]*> nop ++0+238c <[^>]*> nop ++0+2390 <[^>]*> nop ++0+2394 <[^>]*> nop ++0+2398 <[^>]*> nop ++0+239c <[^>]*> nop ++0+23a0 <[^>]*> nop ++0+23a4 <[^>]*> nop ++0+23a8 <[^>]*> nop ++0+23ac <[^>]*> nop ++0+23b0 <[^>]*> nop ++0+23b4 <[^>]*> nop ++0+23b8 <[^>]*> nop ++0+23bc <[^>]*> nop ++0+23c0 <[^>]*> nop ++0+23c4 <[^>]*> nop ++0+23c8 <[^>]*> nop ++0+23cc <[^>]*> nop ++0+23d0 <[^>]*> nop ++0+23d4 <[^>]*> nop ++0+23d8 <[^>]*> nop ++0+23dc <[^>]*> nop ++0+23e0 <[^>]*> nop ++0+23e4 <[^>]*> nop ++0+23e8 <[^>]*> nop ++0+23ec <[^>]*> nop ++0+23f0 <[^>]*> nop ++0+23f4 <[^>]*> nop ++0+23f8 <[^>]*> nop ++0+23fc <[^>]*> nop ++0+2400 <[^>]*> nop ++0+2404 <[^>]*> nop ++0+2408 <[^>]*> nop ++0+240c <[^>]*> nop ++0+2410 <[^>]*> nop ++0+2414 <[^>]*> nop ++0+2418 <[^>]*> nop ++0+241c <[^>]*> nop ++0+2420 <[^>]*> nop ++0+2424 <[^>]*> nop ++0+2428 <[^>]*> nop ++0+242c <[^>]*> nop ++0+2430 <[^>]*> nop ++0+2434 <[^>]*> nop ++0+2438 <[^>]*> nop ++0+243c <[^>]*> nop ++0+2440 <[^>]*> nop ++0+2444 <[^>]*> nop ++0+2448 <[^>]*> nop ++0+244c <[^>]*> nop ++0+2450 <[^>]*> nop ++0+2454 <[^>]*> nop ++0+2458 <[^>]*> nop ++0+245c <[^>]*> nop ++0+2460 <[^>]*> nop ++0+2464 <[^>]*> nop ++0+2468 <[^>]*> nop ++0+246c <[^>]*> nop ++0+2470 <[^>]*> nop ++0+2474 <[^>]*> nop ++0+2478 <[^>]*> nop ++0+247c <[^>]*> nop ++0+2480 <[^>]*> nop ++0+2484 <[^>]*> nop ++0+2488 <[^>]*> nop ++0+248c <[^>]*> nop ++0+2490 <[^>]*> nop ++0+2494 <[^>]*> nop ++0+2498 <[^>]*> nop ++0+249c <[^>]*> nop ++0+24a0 <[^>]*> nop ++0+24a4 <[^>]*> nop ++0+24a8 <[^>]*> nop ++0+24ac <[^>]*> nop ++0+24b0 <[^>]*> nop ++0+24b4 <[^>]*> nop ++0+24b8 <[^>]*> nop ++0+24bc <[^>]*> nop ++0+24c0 <[^>]*> nop ++0+24c4 <[^>]*> nop ++0+24c8 <[^>]*> nop ++0+24cc <[^>]*> nop ++0+24d0 <[^>]*> nop ++0+24d4 <[^>]*> nop ++0+24d8 <[^>]*> nop ++0+24dc <[^>]*> nop ++0+24e0 <[^>]*> nop ++0+24e4 <[^>]*> nop ++0+24e8 <[^>]*> nop ++0+24ec <[^>]*> nop ++0+24f0 <[^>]*> nop ++0+24f4 <[^>]*> nop ++0+24f8 <[^>]*> nop ++0+24fc <[^>]*> nop ++0+2500 <[^>]*> nop ++0+2504 <[^>]*> nop ++0+2508 <[^>]*> nop ++0+250c <[^>]*> nop ++0+2510 <[^>]*> nop ++0+2514 <[^>]*> nop ++0+2518 <[^>]*> nop ++0+251c <[^>]*> nop ++0+2520 <[^>]*> nop ++0+2524 <[^>]*> nop ++0+2528 <[^>]*> nop ++0+252c <[^>]*> nop ++0+2530 <[^>]*> nop ++0+2534 <[^>]*> nop ++0+2538 <[^>]*> nop ++0+253c <[^>]*> nop ++0+2540 <[^>]*> nop ++0+2544 <[^>]*> nop ++0+2548 <[^>]*> nop ++0+254c <[^>]*> nop ++0+2550 <[^>]*> nop ++0+2554 <[^>]*> nop ++0+2558 <[^>]*> nop ++0+255c <[^>]*> nop ++0+2560 <[^>]*> nop ++0+2564 <[^>]*> nop ++0+2568 <[^>]*> nop ++0+256c <[^>]*> nop ++0+2570 <[^>]*> nop ++0+2574 <[^>]*> nop ++0+2578 <[^>]*> nop ++0+257c <[^>]*> nop ++0+2580 <[^>]*> nop ++0+2584 <[^>]*> nop ++0+2588 <[^>]*> nop ++0+258c <[^>]*> nop ++0+2590 <[^>]*> nop ++0+2594 <[^>]*> nop ++0+2598 <[^>]*> nop ++0+259c <[^>]*> nop ++0+25a0 <[^>]*> nop ++0+25a4 <[^>]*> nop ++0+25a8 <[^>]*> nop ++0+25ac <[^>]*> nop ++0+25b0 <[^>]*> nop ++0+25b4 <[^>]*> nop ++0+25b8 <[^>]*> nop ++0+25bc <[^>]*> nop ++0+25c0 <[^>]*> nop ++0+25c4 <[^>]*> nop ++0+25c8 <[^>]*> nop ++0+25cc <[^>]*> nop ++0+25d0 <[^>]*> nop ++0+25d4 <[^>]*> nop ++0+25d8 <[^>]*> nop ++0+25dc <[^>]*> nop ++0+25e0 <[^>]*> nop ++0+25e4 <[^>]*> nop ++0+25e8 <[^>]*> nop ++0+25ec <[^>]*> nop ++0+25f0 <[^>]*> nop ++0+25f4 <[^>]*> nop ++0+25f8 <[^>]*> nop ++0+25fc <[^>]*> nop ++0+2600 <[^>]*> nop ++0+2604 <[^>]*> nop ++0+2608 <[^>]*> nop ++0+260c <[^>]*> nop ++0+2610 <[^>]*> nop ++0+2614 <[^>]*> nop ++0+2618 <[^>]*> nop ++0+261c <[^>]*> nop ++0+2620 <[^>]*> nop ++0+2624 <[^>]*> nop ++0+2628 <[^>]*> nop ++0+262c <[^>]*> nop ++0+2630 <[^>]*> nop ++0+2634 <[^>]*> nop ++0+2638 <[^>]*> nop ++0+263c <[^>]*> nop ++0+2640 <[^>]*> nop ++0+2644 <[^>]*> nop ++0+2648 <[^>]*> nop ++0+264c <[^>]*> nop ++0+2650 <[^>]*> nop ++0+2654 <[^>]*> nop ++0+2658 <[^>]*> nop ++0+265c <[^>]*> nop ++0+2660 <[^>]*> nop ++0+2664 <[^>]*> nop ++0+2668 <[^>]*> nop ++0+266c <[^>]*> nop ++0+2670 <[^>]*> nop ++0+2674 <[^>]*> nop ++0+2678 <[^>]*> nop ++0+267c <[^>]*> nop ++0+2680 <[^>]*> nop ++0+2684 <[^>]*> nop ++0+2688 <[^>]*> nop ++0+268c <[^>]*> nop ++0+2690 <[^>]*> nop ++0+2694 <[^>]*> nop ++0+2698 <[^>]*> nop ++0+269c <[^>]*> nop ++0+26a0 <[^>]*> nop ++0+26a4 <[^>]*> nop ++0+26a8 <[^>]*> nop ++0+26ac <[^>]*> nop ++0+26b0 <[^>]*> nop ++0+26b4 <[^>]*> nop ++0+26b8 <[^>]*> nop ++0+26bc <[^>]*> nop ++0+26c0 <[^>]*> nop ++0+26c4 <[^>]*> nop ++0+26c8 <[^>]*> nop ++0+26cc <[^>]*> nop ++0+26d0 <[^>]*> nop ++0+26d4 <[^>]*> nop ++0+26d8 <[^>]*> nop ++0+26dc <[^>]*> nop ++0+26e0 <[^>]*> nop ++0+26e4 <[^>]*> nop ++0+26e8 <[^>]*> nop ++0+26ec <[^>]*> nop ++0+26f0 <[^>]*> nop ++0+26f4 <[^>]*> nop ++0+26f8 <[^>]*> nop ++0+26fc <[^>]*> nop ++0+2700 <[^>]*> nop ++0+2704 <[^>]*> nop ++0+2708 <[^>]*> nop ++0+270c <[^>]*> nop ++0+2710 <[^>]*> nop ++0+2714 <[^>]*> nop ++0+2718 <[^>]*> nop ++0+271c <[^>]*> nop ++0+2720 <[^>]*> nop ++0+2724 <[^>]*> nop ++0+2728 <[^>]*> nop ++0+272c <[^>]*> nop ++0+2730 <[^>]*> nop ++0+2734 <[^>]*> nop ++0+2738 <[^>]*> nop ++0+273c <[^>]*> nop ++0+2740 <[^>]*> nop ++0+2744 <[^>]*> nop ++0+2748 <[^>]*> nop ++0+274c <[^>]*> nop ++0+2750 <[^>]*> nop ++0+2754 <[^>]*> nop ++0+2758 <[^>]*> nop ++0+275c <[^>]*> nop ++0+2760 <[^>]*> nop ++0+2764 <[^>]*> nop ++0+2768 <[^>]*> nop ++0+276c <[^>]*> nop ++0+2770 <[^>]*> nop ++0+2774 <[^>]*> nop ++0+2778 <[^>]*> nop ++0+277c <[^>]*> nop ++0+2780 <[^>]*> nop ++0+2784 <[^>]*> nop ++0+2788 <[^>]*> nop ++0+278c <[^>]*> nop ++0+2790 <[^>]*> nop ++0+2794 <[^>]*> nop ++0+2798 <[^>]*> nop ++0+279c <[^>]*> nop ++0+27a0 <[^>]*> nop ++0+27a4 <[^>]*> nop ++0+27a8 <[^>]*> nop ++0+27ac <[^>]*> nop ++0+27b0 <[^>]*> nop ++0+27b4 <[^>]*> nop ++0+27b8 <[^>]*> nop ++0+27bc <[^>]*> nop ++0+27c0 <[^>]*> nop ++0+27c4 <[^>]*> nop ++0+27c8 <[^>]*> nop ++0+27cc <[^>]*> nop ++0+27d0 <[^>]*> nop ++0+27d4 <[^>]*> nop ++0+27d8 <[^>]*> nop ++0+27dc <[^>]*> nop ++0+27e0 <[^>]*> nop ++0+27e4 <[^>]*> nop ++0+27e8 <[^>]*> nop ++0+27ec <[^>]*> nop ++0+27f0 <[^>]*> nop ++0+27f4 <[^>]*> nop ++0+27f8 <[^>]*> nop ++0+27fc <[^>]*> nop ++0+2800 <[^>]*> nop ++0+2804 <[^>]*> nop ++0+2808 <[^>]*> nop ++0+280c <[^>]*> nop ++0+2810 <[^>]*> nop ++0+2814 <[^>]*> nop ++0+2818 <[^>]*> nop ++0+281c <[^>]*> nop ++0+2820 <[^>]*> nop ++0+2824 <[^>]*> nop ++0+2828 <[^>]*> nop ++0+282c <[^>]*> nop ++0+2830 <[^>]*> nop ++0+2834 <[^>]*> nop ++0+2838 <[^>]*> nop ++0+283c <[^>]*> nop ++0+2840 <[^>]*> nop ++0+2844 <[^>]*> nop ++0+2848 <[^>]*> nop ++0+284c <[^>]*> nop ++0+2850 <[^>]*> nop ++0+2854 <[^>]*> nop ++0+2858 <[^>]*> nop ++0+285c <[^>]*> nop ++0+2860 <[^>]*> nop ++0+2864 <[^>]*> nop ++0+2868 <[^>]*> nop ++0+286c <[^>]*> nop ++0+2870 <[^>]*> nop ++0+2874 <[^>]*> nop ++0+2878 <[^>]*> nop ++0+287c <[^>]*> nop ++0+2880 <[^>]*> nop ++0+2884 <[^>]*> nop ++0+2888 <[^>]*> nop ++0+288c <[^>]*> nop ++0+2890 <[^>]*> nop ++0+2894 <[^>]*> nop ++0+2898 <[^>]*> nop ++0+289c <[^>]*> nop ++0+28a0 <[^>]*> nop ++0+28a4 <[^>]*> nop ++0+28a8 <[^>]*> nop ++0+28ac <[^>]*> nop ++0+28b0 <[^>]*> nop ++0+28b4 <[^>]*> nop ++0+28b8 <[^>]*> nop ++0+28bc <[^>]*> nop ++0+28c0 <[^>]*> nop ++0+28c4 <[^>]*> nop ++0+28c8 <[^>]*> nop ++0+28cc <[^>]*> nop ++0+28d0 <[^>]*> nop ++0+28d4 <[^>]*> nop ++0+28d8 <[^>]*> nop ++0+28dc <[^>]*> nop ++0+28e0 <[^>]*> nop ++0+28e4 <[^>]*> nop ++0+28e8 <[^>]*> nop ++0+28ec <[^>]*> nop ++0+28f0 <[^>]*> nop ++0+28f4 <[^>]*> nop ++0+28f8 <[^>]*> nop ++0+28fc <[^>]*> nop ++0+2900 <[^>]*> nop ++0+2904 <[^>]*> nop ++0+2908 <[^>]*> nop ++0+290c <[^>]*> nop ++0+2910 <[^>]*> nop ++0+2914 <[^>]*> nop ++0+2918 <[^>]*> nop ++0+291c <[^>]*> nop ++0+2920 <[^>]*> nop ++0+2924 <[^>]*> nop ++0+2928 <[^>]*> nop ++0+292c <[^>]*> nop ++0+2930 <[^>]*> nop ++0+2934 <[^>]*> nop ++0+2938 <[^>]*> nop ++0+293c <[^>]*> nop ++0+2940 <[^>]*> nop ++0+2944 <[^>]*> nop ++0+2948 <[^>]*> nop ++0+294c <[^>]*> nop ++0+2950 <[^>]*> nop ++0+2954 <[^>]*> nop ++0+2958 <[^>]*> nop ++0+295c <[^>]*> nop ++0+2960 <[^>]*> nop ++0+2964 <[^>]*> nop ++0+2968 <[^>]*> nop ++0+296c <[^>]*> nop ++0+2970 <[^>]*> nop ++0+2974 <[^>]*> nop ++0+2978 <[^>]*> nop ++0+297c <[^>]*> nop ++0+2980 <[^>]*> nop ++0+2984 <[^>]*> nop ++0+2988 <[^>]*> nop ++0+298c <[^>]*> nop ++0+2990 <[^>]*> nop ++0+2994 <[^>]*> nop ++0+2998 <[^>]*> nop ++0+299c <[^>]*> nop ++0+29a0 <[^>]*> nop ++0+29a4 <[^>]*> nop ++0+29a8 <[^>]*> nop ++0+29ac <[^>]*> nop ++0+29b0 <[^>]*> nop ++0+29b4 <[^>]*> nop ++0+29b8 <[^>]*> nop ++0+29bc <[^>]*> nop ++0+29c0 <[^>]*> nop ++0+29c4 <[^>]*> nop ++0+29c8 <[^>]*> nop ++0+29cc <[^>]*> nop ++0+29d0 <[^>]*> nop ++0+29d4 <[^>]*> nop ++0+29d8 <[^>]*> nop ++0+29dc <[^>]*> nop ++0+29e0 <[^>]*> nop ++0+29e4 <[^>]*> nop ++0+29e8 <[^>]*> nop ++0+29ec <[^>]*> nop ++0+29f0 <[^>]*> nop ++0+29f4 <[^>]*> nop ++0+29f8 <[^>]*> nop ++0+29fc <[^>]*> nop ++0+2a00 <[^>]*> nop ++0+2a04 <[^>]*> nop ++0+2a08 <[^>]*> nop ++0+2a0c <[^>]*> nop ++0+2a10 <[^>]*> nop ++0+2a14 <[^>]*> nop ++0+2a18 <[^>]*> nop ++0+2a1c <[^>]*> nop ++0+2a20 <[^>]*> nop ++0+2a24 <[^>]*> nop ++0+2a28 <[^>]*> nop ++0+2a2c <[^>]*> nop ++0+2a30 <[^>]*> nop ++0+2a34 <[^>]*> nop ++0+2a38 <[^>]*> nop ++0+2a3c <[^>]*> nop ++0+2a40 <[^>]*> nop ++0+2a44 <[^>]*> nop ++0+2a48 <[^>]*> nop ++0+2a4c <[^>]*> nop ++0+2a50 <[^>]*> nop ++0+2a54 <[^>]*> nop ++0+2a58 <[^>]*> nop ++0+2a5c <[^>]*> nop ++0+2a60 <[^>]*> nop ++0+2a64 <[^>]*> nop ++0+2a68 <[^>]*> nop ++0+2a6c <[^>]*> nop ++0+2a70 <[^>]*> nop ++0+2a74 <[^>]*> nop ++0+2a78 <[^>]*> nop ++0+2a7c <[^>]*> nop ++0+2a80 <[^>]*> nop ++0+2a84 <[^>]*> nop ++0+2a88 <[^>]*> nop ++0+2a8c <[^>]*> nop ++0+2a90 <[^>]*> nop ++0+2a94 <[^>]*> nop ++0+2a98 <[^>]*> nop ++0+2a9c <[^>]*> nop ++0+2aa0 <[^>]*> nop ++0+2aa4 <[^>]*> nop ++0+2aa8 <[^>]*> nop ++0+2aac <[^>]*> nop ++0+2ab0 <[^>]*> nop ++0+2ab4 <[^>]*> nop ++0+2ab8 <[^>]*> nop ++0+2abc <[^>]*> nop ++0+2ac0 <[^>]*> nop ++0+2ac4 <[^>]*> nop ++0+2ac8 <[^>]*> nop ++0+2acc <[^>]*> nop ++0+2ad0 <[^>]*> nop ++0+2ad4 <[^>]*> nop ++0+2ad8 <[^>]*> nop ++0+2adc <[^>]*> nop ++0+2ae0 <[^>]*> nop ++0+2ae4 <[^>]*> nop ++0+2ae8 <[^>]*> nop ++0+2aec <[^>]*> nop ++0+2af0 <[^>]*> nop ++0+2af4 <[^>]*> nop ++0+2af8 <[^>]*> nop ++0+2afc <[^>]*> nop ++0+2b00 <[^>]*> nop ++0+2b04 <[^>]*> nop ++0+2b08 <[^>]*> nop ++0+2b0c <[^>]*> nop ++0+2b10 <[^>]*> nop ++0+2b14 <[^>]*> nop ++0+2b18 <[^>]*> nop ++0+2b1c <[^>]*> nop ++0+2b20 <[^>]*> nop ++0+2b24 <[^>]*> nop ++0+2b28 <[^>]*> nop ++0+2b2c <[^>]*> nop ++0+2b30 <[^>]*> nop ++0+2b34 <[^>]*> nop ++0+2b38 <[^>]*> nop ++0+2b3c <[^>]*> nop ++0+2b40 <[^>]*> nop ++0+2b44 <[^>]*> nop ++0+2b48 <[^>]*> nop ++0+2b4c <[^>]*> nop ++0+2b50 <[^>]*> nop ++0+2b54 <[^>]*> nop ++0+2b58 <[^>]*> nop ++0+2b5c <[^>]*> nop ++0+2b60 <[^>]*> nop ++0+2b64 <[^>]*> nop ++0+2b68 <[^>]*> nop ++0+2b6c <[^>]*> nop ++0+2b70 <[^>]*> nop ++0+2b74 <[^>]*> nop ++0+2b78 <[^>]*> nop ++0+2b7c <[^>]*> nop ++0+2b80 <[^>]*> nop ++0+2b84 <[^>]*> nop ++0+2b88 <[^>]*> nop ++0+2b8c <[^>]*> nop ++0+2b90 <[^>]*> nop ++0+2b94 <[^>]*> nop ++0+2b98 <[^>]*> nop ++0+2b9c <[^>]*> nop ++0+2ba0 <[^>]*> nop ++0+2ba4 <[^>]*> nop ++0+2ba8 <[^>]*> nop ++0+2bac <[^>]*> nop ++0+2bb0 <[^>]*> nop ++0+2bb4 <[^>]*> nop ++0+2bb8 <[^>]*> nop ++0+2bbc <[^>]*> nop ++0+2bc0 <[^>]*> nop ++0+2bc4 <[^>]*> nop ++0+2bc8 <[^>]*> nop ++0+2bcc <[^>]*> nop ++0+2bd0 <[^>]*> nop ++0+2bd4 <[^>]*> nop ++0+2bd8 <[^>]*> nop ++0+2bdc <[^>]*> nop ++0+2be0 <[^>]*> nop ++0+2be4 <[^>]*> nop ++0+2be8 <[^>]*> nop ++0+2bec <[^>]*> nop ++0+2bf0 <[^>]*> nop ++0+2bf4 <[^>]*> nop ++0+2bf8 <[^>]*> nop ++0+2bfc <[^>]*> nop ++0+2c00 <[^>]*> nop ++0+2c04 <[^>]*> nop ++0+2c08 <[^>]*> nop ++0+2c0c <[^>]*> nop ++0+2c10 <[^>]*> nop ++0+2c14 <[^>]*> nop ++0+2c18 <[^>]*> nop ++0+2c1c <[^>]*> nop ++0+2c20 <[^>]*> nop ++0+2c24 <[^>]*> nop ++0+2c28 <[^>]*> nop ++0+2c2c <[^>]*> nop ++0+2c30 <[^>]*> nop ++0+2c34 <[^>]*> nop ++0+2c38 <[^>]*> nop ++0+2c3c <[^>]*> nop ++0+2c40 <[^>]*> nop ++0+2c44 <[^>]*> nop ++0+2c48 <[^>]*> nop ++0+2c4c <[^>]*> nop ++0+2c50 <[^>]*> nop ++0+2c54 <[^>]*> nop ++0+2c58 <[^>]*> nop ++0+2c5c <[^>]*> nop ++0+2c60 <[^>]*> nop ++0+2c64 <[^>]*> nop ++0+2c68 <[^>]*> nop ++0+2c6c <[^>]*> nop ++0+2c70 <[^>]*> nop ++0+2c74 <[^>]*> nop ++0+2c78 <[^>]*> nop ++0+2c7c <[^>]*> nop ++0+2c80 <[^>]*> nop ++0+2c84 <[^>]*> nop ++0+2c88 <[^>]*> nop ++0+2c8c <[^>]*> nop ++0+2c90 <[^>]*> nop ++0+2c94 <[^>]*> nop ++0+2c98 <[^>]*> nop ++0+2c9c <[^>]*> nop ++0+2ca0 <[^>]*> nop ++0+2ca4 <[^>]*> nop ++0+2ca8 <[^>]*> nop ++0+2cac <[^>]*> nop ++0+2cb0 <[^>]*> nop ++0+2cb4 <[^>]*> nop ++0+2cb8 <[^>]*> nop ++0+2cbc <[^>]*> nop ++0+2cc0 <[^>]*> nop ++0+2cc4 <[^>]*> nop ++0+2cc8 <[^>]*> nop ++0+2ccc <[^>]*> nop ++0+2cd0 <[^>]*> nop ++0+2cd4 <[^>]*> nop ++0+2cd8 <[^>]*> nop ++0+2cdc <[^>]*> nop ++0+2ce0 <[^>]*> nop ++0+2ce4 <[^>]*> nop ++0+2ce8 <[^>]*> nop ++0+2cec <[^>]*> nop ++0+2cf0 <[^>]*> nop ++0+2cf4 <[^>]*> nop ++0+2cf8 <[^>]*> nop ++0+2cfc <[^>]*> nop ++0+2d00 <[^>]*> nop ++0+2d04 <[^>]*> nop ++0+2d08 <[^>]*> nop ++0+2d0c <[^>]*> nop ++0+2d10 <[^>]*> nop ++0+2d14 <[^>]*> nop ++0+2d18 <[^>]*> nop ++0+2d1c <[^>]*> nop ++0+2d20 <[^>]*> nop ++0+2d24 <[^>]*> nop ++0+2d28 <[^>]*> nop ++0+2d2c <[^>]*> nop ++0+2d30 <[^>]*> nop ++0+2d34 <[^>]*> nop ++0+2d38 <[^>]*> nop ++0+2d3c <[^>]*> nop ++0+2d40 <[^>]*> nop ++0+2d44 <[^>]*> nop ++0+2d48 <[^>]*> nop ++0+2d4c <[^>]*> nop ++0+2d50 <[^>]*> nop ++0+2d54 <[^>]*> nop ++0+2d58 <[^>]*> nop ++0+2d5c <[^>]*> nop ++0+2d60 <[^>]*> nop ++0+2d64 <[^>]*> nop ++0+2d68 <[^>]*> nop ++0+2d6c <[^>]*> nop ++0+2d70 <[^>]*> nop ++0+2d74 <[^>]*> nop ++0+2d78 <[^>]*> nop ++0+2d7c <[^>]*> nop ++0+2d80 <[^>]*> nop ++0+2d84 <[^>]*> nop ++0+2d88 <[^>]*> nop ++0+2d8c <[^>]*> nop ++0+2d90 <[^>]*> nop ++0+2d94 <[^>]*> nop ++0+2d98 <[^>]*> nop ++0+2d9c <[^>]*> nop ++0+2da0 <[^>]*> nop ++0+2da4 <[^>]*> nop ++0+2da8 <[^>]*> nop ++0+2dac <[^>]*> nop ++0+2db0 <[^>]*> nop ++0+2db4 <[^>]*> nop ++0+2db8 <[^>]*> nop ++0+2dbc <[^>]*> nop ++0+2dc0 <[^>]*> nop ++0+2dc4 <[^>]*> nop ++0+2dc8 <[^>]*> nop ++0+2dcc <[^>]*> nop ++0+2dd0 <[^>]*> nop ++0+2dd4 <[^>]*> nop ++0+2dd8 <[^>]*> nop ++0+2ddc <[^>]*> nop ++0+2de0 <[^>]*> nop ++0+2de4 <[^>]*> nop ++0+2de8 <[^>]*> nop ++0+2dec <[^>]*> nop ++0+2df0 <[^>]*> nop ++0+2df4 <[^>]*> nop ++0+2df8 <[^>]*> nop ++0+2dfc <[^>]*> nop ++0+2e00 <[^>]*> nop ++0+2e04 <[^>]*> nop ++0+2e08 <[^>]*> nop ++0+2e0c <[^>]*> nop ++0+2e10 <[^>]*> nop ++0+2e14 <[^>]*> nop ++0+2e18 <[^>]*> nop ++0+2e1c <[^>]*> nop ++0+2e20 <[^>]*> nop ++0+2e24 <[^>]*> nop ++0+2e28 <[^>]*> nop ++0+2e2c <[^>]*> nop ++0+2e30 <[^>]*> nop ++0+2e34 <[^>]*> nop ++0+2e38 <[^>]*> nop ++0+2e3c <[^>]*> nop ++0+2e40 <[^>]*> nop ++0+2e44 <[^>]*> nop ++0+2e48 <[^>]*> nop ++0+2e4c <[^>]*> nop ++0+2e50 <[^>]*> nop ++0+2e54 <[^>]*> nop ++0+2e58 <[^>]*> nop ++0+2e5c <[^>]*> nop ++0+2e60 <[^>]*> nop ++0+2e64 <[^>]*> nop ++0+2e68 <[^>]*> nop ++0+2e6c <[^>]*> nop ++0+2e70 <[^>]*> nop ++0+2e74 <[^>]*> nop ++0+2e78 <[^>]*> nop ++0+2e7c <[^>]*> nop ++0+2e80 <[^>]*> nop ++0+2e84 <[^>]*> nop ++0+2e88 <[^>]*> nop ++0+2e8c <[^>]*> nop ++0+2e90 <[^>]*> nop ++0+2e94 <[^>]*> nop ++0+2e98 <[^>]*> nop ++0+2e9c <[^>]*> nop ++0+2ea0 <[^>]*> nop ++0+2ea4 <[^>]*> nop ++0+2ea8 <[^>]*> nop ++0+2eac <[^>]*> nop ++0+2eb0 <[^>]*> nop ++0+2eb4 <[^>]*> nop ++0+2eb8 <[^>]*> nop ++0+2ebc <[^>]*> nop ++0+2ec0 <[^>]*> nop ++0+2ec4 <[^>]*> nop ++0+2ec8 <[^>]*> nop ++0+2ecc <[^>]*> nop ++0+2ed0 <[^>]*> nop ++0+2ed4 <[^>]*> nop ++0+2ed8 <[^>]*> nop ++0+2edc <[^>]*> nop ++0+2ee0 <[^>]*> nop ++0+2ee4 <[^>]*> nop ++0+2ee8 <[^>]*> nop ++0+2eec <[^>]*> nop ++0+2ef0 <[^>]*> nop ++0+2ef4 <[^>]*> nop ++0+2ef8 <[^>]*> nop ++0+2efc <[^>]*> nop ++0+2f00 <[^>]*> nop ++0+2f04 <[^>]*> nop ++0+2f08 <[^>]*> nop ++0+2f0c <[^>]*> nop ++0+2f10 <[^>]*> nop ++0+2f14 <[^>]*> nop ++0+2f18 <[^>]*> nop ++0+2f1c <[^>]*> nop ++0+2f20 <[^>]*> nop ++0+2f24 <[^>]*> nop ++0+2f28 <[^>]*> nop ++0+2f2c <[^>]*> nop ++0+2f30 <[^>]*> nop ++0+2f34 <[^>]*> nop ++0+2f38 <[^>]*> nop ++0+2f3c <[^>]*> nop ++0+2f40 <[^>]*> nop ++0+2f44 <[^>]*> nop ++0+2f48 <[^>]*> nop ++0+2f4c <[^>]*> nop ++0+2f50 <[^>]*> nop ++0+2f54 <[^>]*> nop ++0+2f58 <[^>]*> nop ++0+2f5c <[^>]*> nop ++0+2f60 <[^>]*> nop ++0+2f64 <[^>]*> nop ++0+2f68 <[^>]*> nop ++0+2f6c <[^>]*> nop ++0+2f70 <[^>]*> nop ++0+2f74 <[^>]*> nop ++0+2f78 <[^>]*> nop ++0+2f7c <[^>]*> nop ++0+2f80 <[^>]*> nop ++0+2f84 <[^>]*> nop ++0+2f88 <[^>]*> nop ++0+2f8c <[^>]*> nop ++0+2f90 <[^>]*> nop ++0+2f94 <[^>]*> nop ++0+2f98 <[^>]*> nop ++0+2f9c <[^>]*> nop ++0+2fa0 <[^>]*> nop ++0+2fa4 <[^>]*> nop ++0+2fa8 <[^>]*> nop ++0+2fac <[^>]*> nop ++0+2fb0 <[^>]*> nop ++0+2fb4 <[^>]*> nop ++0+2fb8 <[^>]*> nop ++0+2fbc <[^>]*> nop ++0+2fc0 <[^>]*> nop ++0+2fc4 <[^>]*> nop ++0+2fc8 <[^>]*> nop ++0+2fcc <[^>]*> nop ++0+2fd0 <[^>]*> nop ++0+2fd4 <[^>]*> nop ++0+2fd8 <[^>]*> nop ++0+2fdc <[^>]*> nop ++0+2fe0 <[^>]*> nop ++0+2fe4 <[^>]*> nop ++0+2fe8 <[^>]*> nop ++0+2fec <[^>]*> nop ++0+2ff0 <[^>]*> nop ++0+2ff4 <[^>]*> nop ++0+2ff8 <[^>]*> nop ++0+2ffc <[^>]*> nop ++0+3000 <[^>]*> nop ++0+3004 <[^>]*> nop ++0+3008 <[^>]*> nop ++0+300c <[^>]*> nop ++0+3010 <[^>]*> nop ++0+3014 <[^>]*> nop ++0+3018 <[^>]*> nop ++0+301c <[^>]*> nop ++0+3020 <[^>]*> nop ++0+3024 <[^>]*> nop ++0+3028 <[^>]*> nop ++0+302c <[^>]*> nop ++0+3030 <[^>]*> nop ++0+3034 <[^>]*> nop ++0+3038 <[^>]*> nop ++0+303c <[^>]*> nop ++0+3040 <[^>]*> nop ++0+3044 <[^>]*> nop ++0+3048 <[^>]*> nop ++0+304c <[^>]*> nop ++0+3050 <[^>]*> nop ++0+3054 <[^>]*> nop ++0+3058 <[^>]*> nop ++0+305c <[^>]*> nop ++0+3060 <[^>]*> nop ++0+3064 <[^>]*> nop ++0+3068 <[^>]*> nop ++0+306c <[^>]*> nop ++0+3070 <[^>]*> nop ++0+3074 <[^>]*> nop ++0+3078 <[^>]*> nop ++0+307c <[^>]*> nop ++0+3080 <[^>]*> nop ++0+3084 <[^>]*> nop ++0+3088 <[^>]*> nop ++0+308c <[^>]*> nop ++0+3090 <[^>]*> nop ++0+3094 <[^>]*> nop ++0+3098 <[^>]*> nop ++0+309c <[^>]*> nop ++0+30a0 <[^>]*> nop ++0+30a4 <[^>]*> nop ++0+30a8 <[^>]*> nop ++0+30ac <[^>]*> nop ++0+30b0 <[^>]*> nop ++0+30b4 <[^>]*> nop ++0+30b8 <[^>]*> nop ++0+30bc <[^>]*> nop ++0+30c0 <[^>]*> nop ++0+30c4 <[^>]*> nop ++0+30c8 <[^>]*> nop ++0+30cc <[^>]*> nop ++0+30d0 <[^>]*> nop ++0+30d4 <[^>]*> nop ++0+30d8 <[^>]*> nop ++0+30dc <[^>]*> nop ++0+30e0 <[^>]*> nop ++0+30e4 <[^>]*> nop ++0+30e8 <[^>]*> nop ++0+30ec <[^>]*> nop ++0+30f0 <[^>]*> nop ++0+30f4 <[^>]*> nop ++0+30f8 <[^>]*> nop ++0+30fc <[^>]*> nop ++0+3100 <[^>]*> nop ++0+3104 <[^>]*> nop ++0+3108 <[^>]*> nop ++0+310c <[^>]*> nop ++0+3110 <[^>]*> nop ++0+3114 <[^>]*> nop ++0+3118 <[^>]*> nop ++0+311c <[^>]*> nop ++0+3120 <[^>]*> nop ++0+3124 <[^>]*> nop ++0+3128 <[^>]*> nop ++0+312c <[^>]*> nop ++0+3130 <[^>]*> nop ++0+3134 <[^>]*> nop ++0+3138 <[^>]*> nop ++0+313c <[^>]*> nop ++0+3140 <[^>]*> nop ++0+3144 <[^>]*> nop ++0+3148 <[^>]*> nop ++0+314c <[^>]*> nop ++0+3150 <[^>]*> nop ++0+3154 <[^>]*> nop ++0+3158 <[^>]*> nop ++0+315c <[^>]*> nop ++0+3160 <[^>]*> nop ++0+3164 <[^>]*> nop ++0+3168 <[^>]*> nop ++0+316c <[^>]*> nop ++0+3170 <[^>]*> nop ++0+3174 <[^>]*> nop ++0+3178 <[^>]*> nop ++0+317c <[^>]*> nop ++0+3180 <[^>]*> nop ++0+3184 <[^>]*> nop ++0+3188 <[^>]*> nop ++0+318c <[^>]*> nop ++0+3190 <[^>]*> nop ++0+3194 <[^>]*> nop ++0+3198 <[^>]*> nop ++0+319c <[^>]*> nop ++0+31a0 <[^>]*> nop ++0+31a4 <[^>]*> nop ++0+31a8 <[^>]*> nop ++0+31ac <[^>]*> nop ++0+31b0 <[^>]*> nop ++0+31b4 <[^>]*> nop ++0+31b8 <[^>]*> nop ++0+31bc <[^>]*> nop ++0+31c0 <[^>]*> nop ++0+31c4 <[^>]*> nop ++0+31c8 <[^>]*> nop ++0+31cc <[^>]*> nop ++0+31d0 <[^>]*> nop ++0+31d4 <[^>]*> nop ++0+31d8 <[^>]*> nop ++0+31dc <[^>]*> nop ++0+31e0 <[^>]*> nop ++0+31e4 <[^>]*> nop ++0+31e8 <[^>]*> nop ++0+31ec <[^>]*> nop ++0+31f0 <[^>]*> nop ++0+31f4 <[^>]*> nop ++0+31f8 <[^>]*> nop ++0+31fc <[^>]*> nop ++0+3200 <[^>]*> nop ++0+3204 <[^>]*> nop ++0+3208 <[^>]*> nop ++0+320c <[^>]*> nop ++0+3210 <[^>]*> nop ++0+3214 <[^>]*> nop ++0+3218 <[^>]*> nop ++0+321c <[^>]*> nop ++0+3220 <[^>]*> nop ++0+3224 <[^>]*> nop ++0+3228 <[^>]*> nop ++0+322c <[^>]*> nop ++0+3230 <[^>]*> nop ++0+3234 <[^>]*> nop ++0+3238 <[^>]*> nop ++0+323c <[^>]*> nop ++0+3240 <[^>]*> nop ++0+3244 <[^>]*> nop ++0+3248 <[^>]*> nop ++0+324c <[^>]*> nop ++0+3250 <[^>]*> nop ++0+3254 <[^>]*> nop ++0+3258 <[^>]*> nop ++0+325c <[^>]*> nop ++0+3260 <[^>]*> nop ++0+3264 <[^>]*> nop ++0+3268 <[^>]*> nop ++0+326c <[^>]*> nop ++0+3270 <[^>]*> nop ++0+3274 <[^>]*> nop ++0+3278 <[^>]*> nop ++0+327c <[^>]*> nop ++0+3280 <[^>]*> nop ++0+3284 <[^>]*> nop ++0+3288 <[^>]*> nop ++0+328c <[^>]*> nop ++0+3290 <[^>]*> nop ++0+3294 <[^>]*> nop ++0+3298 <[^>]*> nop ++0+329c <[^>]*> nop ++0+32a0 <[^>]*> nop ++0+32a4 <[^>]*> nop ++0+32a8 <[^>]*> nop ++0+32ac <[^>]*> nop ++0+32b0 <[^>]*> nop ++0+32b4 <[^>]*> nop ++0+32b8 <[^>]*> nop ++0+32bc <[^>]*> nop ++0+32c0 <[^>]*> nop ++0+32c4 <[^>]*> nop ++0+32c8 <[^>]*> nop ++0+32cc <[^>]*> nop ++0+32d0 <[^>]*> nop ++0+32d4 <[^>]*> nop ++0+32d8 <[^>]*> nop ++0+32dc <[^>]*> nop ++0+32e0 <[^>]*> nop ++0+32e4 <[^>]*> nop ++0+32e8 <[^>]*> nop ++0+32ec <[^>]*> nop ++0+32f0 <[^>]*> nop ++0+32f4 <[^>]*> nop ++0+32f8 <[^>]*> nop ++0+32fc <[^>]*> nop ++0+3300 <[^>]*> nop ++0+3304 <[^>]*> nop ++0+3308 <[^>]*> nop ++0+330c <[^>]*> nop ++0+3310 <[^>]*> nop ++0+3314 <[^>]*> nop ++0+3318 <[^>]*> nop ++0+331c <[^>]*> nop ++0+3320 <[^>]*> nop ++0+3324 <[^>]*> nop ++0+3328 <[^>]*> nop ++0+332c <[^>]*> nop ++0+3330 <[^>]*> nop ++0+3334 <[^>]*> nop ++0+3338 <[^>]*> nop ++0+333c <[^>]*> nop ++0+3340 <[^>]*> nop ++0+3344 <[^>]*> nop ++0+3348 <[^>]*> nop ++0+334c <[^>]*> nop ++0+3350 <[^>]*> nop ++0+3354 <[^>]*> nop ++0+3358 <[^>]*> nop ++0+335c <[^>]*> nop ++0+3360 <[^>]*> nop ++0+3364 <[^>]*> nop ++0+3368 <[^>]*> nop ++0+336c <[^>]*> nop ++0+3370 <[^>]*> nop ++0+3374 <[^>]*> nop ++0+3378 <[^>]*> nop ++0+337c <[^>]*> nop ++0+3380 <[^>]*> nop ++0+3384 <[^>]*> nop ++0+3388 <[^>]*> nop ++0+338c <[^>]*> nop ++0+3390 <[^>]*> nop ++0+3394 <[^>]*> nop ++0+3398 <[^>]*> nop ++0+339c <[^>]*> nop ++0+33a0 <[^>]*> nop ++0+33a4 <[^>]*> nop ++0+33a8 <[^>]*> nop ++0+33ac <[^>]*> nop ++0+33b0 <[^>]*> nop ++0+33b4 <[^>]*> nop ++0+33b8 <[^>]*> nop ++0+33bc <[^>]*> nop ++0+33c0 <[^>]*> nop ++0+33c4 <[^>]*> nop ++0+33c8 <[^>]*> nop ++0+33cc <[^>]*> nop ++0+33d0 <[^>]*> nop ++0+33d4 <[^>]*> nop ++0+33d8 <[^>]*> nop ++0+33dc <[^>]*> nop ++0+33e0 <[^>]*> nop ++0+33e4 <[^>]*> nop ++0+33e8 <[^>]*> nop ++0+33ec <[^>]*> nop ++0+33f0 <[^>]*> nop ++0+33f4 <[^>]*> nop ++0+33f8 <[^>]*> nop ++0+33fc <[^>]*> nop ++0+3400 <[^>]*> nop ++0+3404 <[^>]*> nop ++0+3408 <[^>]*> nop ++0+340c <[^>]*> nop ++0+3410 <[^>]*> nop ++0+3414 <[^>]*> nop ++0+3418 <[^>]*> nop ++0+341c <[^>]*> nop ++0+3420 <[^>]*> nop ++0+3424 <[^>]*> nop ++0+3428 <[^>]*> nop ++0+342c <[^>]*> nop ++0+3430 <[^>]*> nop ++0+3434 <[^>]*> nop ++0+3438 <[^>]*> nop ++0+343c <[^>]*> nop ++0+3440 <[^>]*> nop ++0+3444 <[^>]*> nop ++0+3448 <[^>]*> nop ++0+344c <[^>]*> nop ++0+3450 <[^>]*> nop ++0+3454 <[^>]*> nop ++0+3458 <[^>]*> nop ++0+345c <[^>]*> nop ++0+3460 <[^>]*> nop ++0+3464 <[^>]*> nop ++0+3468 <[^>]*> nop ++0+346c <[^>]*> nop ++0+3470 <[^>]*> nop ++0+3474 <[^>]*> nop ++0+3478 <[^>]*> nop ++0+347c <[^>]*> nop ++0+3480 <[^>]*> nop ++0+3484 <[^>]*> nop ++0+3488 <[^>]*> nop ++0+348c <[^>]*> nop ++0+3490 <[^>]*> nop ++0+3494 <[^>]*> nop ++0+3498 <[^>]*> nop ++0+349c <[^>]*> nop ++0+34a0 <[^>]*> nop ++0+34a4 <[^>]*> nop ++0+34a8 <[^>]*> nop ++0+34ac <[^>]*> nop ++0+34b0 <[^>]*> nop ++0+34b4 <[^>]*> nop ++0+34b8 <[^>]*> nop ++0+34bc <[^>]*> nop ++0+34c0 <[^>]*> nop ++0+34c4 <[^>]*> nop ++0+34c8 <[^>]*> nop ++0+34cc <[^>]*> nop ++0+34d0 <[^>]*> nop ++0+34d4 <[^>]*> nop ++0+34d8 <[^>]*> nop ++0+34dc <[^>]*> nop ++0+34e0 <[^>]*> nop ++0+34e4 <[^>]*> nop ++0+34e8 <[^>]*> nop ++0+34ec <[^>]*> nop ++0+34f0 <[^>]*> nop ++0+34f4 <[^>]*> nop ++0+34f8 <[^>]*> nop ++0+34fc <[^>]*> nop ++0+3500 <[^>]*> nop ++0+3504 <[^>]*> nop ++0+3508 <[^>]*> nop ++0+350c <[^>]*> nop ++0+3510 <[^>]*> nop ++0+3514 <[^>]*> nop ++0+3518 <[^>]*> nop ++0+351c <[^>]*> nop ++0+3520 <[^>]*> nop ++0+3524 <[^>]*> nop ++0+3528 <[^>]*> nop ++0+352c <[^>]*> nop ++0+3530 <[^>]*> nop ++0+3534 <[^>]*> nop ++0+3538 <[^>]*> nop ++0+353c <[^>]*> nop ++0+3540 <[^>]*> nop ++0+3544 <[^>]*> nop ++0+3548 <[^>]*> nop ++0+354c <[^>]*> nop ++0+3550 <[^>]*> nop ++0+3554 <[^>]*> nop ++0+3558 <[^>]*> nop ++0+355c <[^>]*> nop ++0+3560 <[^>]*> nop ++0+3564 <[^>]*> nop ++0+3568 <[^>]*> nop ++0+356c <[^>]*> nop ++0+3570 <[^>]*> nop ++0+3574 <[^>]*> nop ++0+3578 <[^>]*> nop ++0+357c <[^>]*> nop ++0+3580 <[^>]*> nop ++0+3584 <[^>]*> nop ++0+3588 <[^>]*> nop ++0+358c <[^>]*> nop ++0+3590 <[^>]*> nop ++0+3594 <[^>]*> nop ++0+3598 <[^>]*> nop ++0+359c <[^>]*> nop ++0+35a0 <[^>]*> nop ++0+35a4 <[^>]*> nop ++0+35a8 <[^>]*> nop ++0+35ac <[^>]*> nop ++0+35b0 <[^>]*> nop ++0+35b4 <[^>]*> nop ++0+35b8 <[^>]*> nop ++0+35bc <[^>]*> nop ++0+35c0 <[^>]*> nop ++0+35c4 <[^>]*> nop ++0+35c8 <[^>]*> nop ++0+35cc <[^>]*> nop ++0+35d0 <[^>]*> nop ++0+35d4 <[^>]*> nop ++0+35d8 <[^>]*> nop ++0+35dc <[^>]*> nop ++0+35e0 <[^>]*> nop ++0+35e4 <[^>]*> nop ++0+35e8 <[^>]*> nop ++0+35ec <[^>]*> nop ++0+35f0 <[^>]*> nop ++0+35f4 <[^>]*> nop ++0+35f8 <[^>]*> nop ++0+35fc <[^>]*> nop ++0+3600 <[^>]*> nop ++0+3604 <[^>]*> nop ++0+3608 <[^>]*> nop ++0+360c <[^>]*> nop ++0+3610 <[^>]*> nop ++0+3614 <[^>]*> nop ++0+3618 <[^>]*> nop ++0+361c <[^>]*> nop ++0+3620 <[^>]*> nop ++0+3624 <[^>]*> nop ++0+3628 <[^>]*> nop ++0+362c <[^>]*> nop ++0+3630 <[^>]*> nop ++0+3634 <[^>]*> nop ++0+3638 <[^>]*> nop ++0+363c <[^>]*> nop ++0+3640 <[^>]*> nop ++0+3644 <[^>]*> nop ++0+3648 <[^>]*> nop ++0+364c <[^>]*> nop ++0+3650 <[^>]*> nop ++0+3654 <[^>]*> nop ++0+3658 <[^>]*> nop ++0+365c <[^>]*> nop ++0+3660 <[^>]*> nop ++0+3664 <[^>]*> nop ++0+3668 <[^>]*> nop ++0+366c <[^>]*> nop ++0+3670 <[^>]*> nop ++0+3674 <[^>]*> nop ++0+3678 <[^>]*> nop ++0+367c <[^>]*> nop ++0+3680 <[^>]*> nop ++0+3684 <[^>]*> nop ++0+3688 <[^>]*> nop ++0+368c <[^>]*> nop ++0+3690 <[^>]*> nop ++0+3694 <[^>]*> nop ++0+3698 <[^>]*> nop ++0+369c <[^>]*> nop ++0+36a0 <[^>]*> nop ++0+36a4 <[^>]*> nop ++0+36a8 <[^>]*> nop ++0+36ac <[^>]*> nop ++0+36b0 <[^>]*> nop ++0+36b4 <[^>]*> nop ++0+36b8 <[^>]*> nop ++0+36bc <[^>]*> nop ++0+36c0 <[^>]*> nop ++0+36c4 <[^>]*> nop ++0+36c8 <[^>]*> nop ++0+36cc <[^>]*> nop ++0+36d0 <[^>]*> nop ++0+36d4 <[^>]*> nop ++0+36d8 <[^>]*> nop ++0+36dc <[^>]*> nop ++0+36e0 <[^>]*> nop ++0+36e4 <[^>]*> nop ++0+36e8 <[^>]*> nop ++0+36ec <[^>]*> nop ++0+36f0 <[^>]*> nop ++0+36f4 <[^>]*> nop ++0+36f8 <[^>]*> nop ++0+36fc <[^>]*> nop ++0+3700 <[^>]*> nop ++0+3704 <[^>]*> nop ++0+3708 <[^>]*> nop ++0+370c <[^>]*> nop ++0+3710 <[^>]*> nop ++0+3714 <[^>]*> nop ++0+3718 <[^>]*> nop ++0+371c <[^>]*> nop ++0+3720 <[^>]*> nop ++0+3724 <[^>]*> nop ++0+3728 <[^>]*> nop ++0+372c <[^>]*> nop ++0+3730 <[^>]*> nop ++0+3734 <[^>]*> nop ++0+3738 <[^>]*> nop ++0+373c <[^>]*> nop ++0+3740 <[^>]*> nop ++0+3744 <[^>]*> nop ++0+3748 <[^>]*> nop ++0+374c <[^>]*> nop ++0+3750 <[^>]*> nop ++0+3754 <[^>]*> nop ++0+3758 <[^>]*> nop ++0+375c <[^>]*> nop ++0+3760 <[^>]*> nop ++0+3764 <[^>]*> nop ++0+3768 <[^>]*> nop ++0+376c <[^>]*> nop ++0+3770 <[^>]*> nop ++0+3774 <[^>]*> nop ++0+3778 <[^>]*> nop ++0+377c <[^>]*> nop ++0+3780 <[^>]*> nop ++0+3784 <[^>]*> nop ++0+3788 <[^>]*> nop ++0+378c <[^>]*> nop ++0+3790 <[^>]*> nop ++0+3794 <[^>]*> nop ++0+3798 <[^>]*> nop ++0+379c <[^>]*> nop ++0+37a0 <[^>]*> nop ++0+37a4 <[^>]*> nop ++0+37a8 <[^>]*> nop ++0+37ac <[^>]*> nop ++0+37b0 <[^>]*> nop ++0+37b4 <[^>]*> nop ++0+37b8 <[^>]*> nop ++0+37bc <[^>]*> nop ++0+37c0 <[^>]*> nop ++0+37c4 <[^>]*> nop ++0+37c8 <[^>]*> nop ++0+37cc <[^>]*> nop ++0+37d0 <[^>]*> nop ++0+37d4 <[^>]*> nop ++0+37d8 <[^>]*> nop ++0+37dc <[^>]*> nop ++0+37e0 <[^>]*> nop ++0+37e4 <[^>]*> nop ++0+37e8 <[^>]*> nop ++0+37ec <[^>]*> nop ++0+37f0 <[^>]*> nop ++0+37f4 <[^>]*> nop ++0+37f8 <[^>]*> nop ++0+37fc <[^>]*> nop ++0+3800 <[^>]*> nop ++0+3804 <[^>]*> nop ++0+3808 <[^>]*> nop ++0+380c <[^>]*> nop ++0+3810 <[^>]*> nop ++0+3814 <[^>]*> nop ++0+3818 <[^>]*> nop ++0+381c <[^>]*> nop ++0+3820 <[^>]*> nop ++0+3824 <[^>]*> nop ++0+3828 <[^>]*> nop ++0+382c <[^>]*> nop ++0+3830 <[^>]*> nop ++0+3834 <[^>]*> nop ++0+3838 <[^>]*> nop ++0+383c <[^>]*> nop ++0+3840 <[^>]*> nop ++0+3844 <[^>]*> nop ++0+3848 <[^>]*> nop ++0+384c <[^>]*> nop ++0+3850 <[^>]*> nop ++0+3854 <[^>]*> nop ++0+3858 <[^>]*> nop ++0+385c <[^>]*> nop ++0+3860 <[^>]*> nop ++0+3864 <[^>]*> nop ++0+3868 <[^>]*> nop ++0+386c <[^>]*> nop ++0+3870 <[^>]*> nop ++0+3874 <[^>]*> nop ++0+3878 <[^>]*> nop ++0+387c <[^>]*> nop ++0+3880 <[^>]*> nop ++0+3884 <[^>]*> nop ++0+3888 <[^>]*> nop ++0+388c <[^>]*> nop ++0+3890 <[^>]*> nop ++0+3894 <[^>]*> nop ++0+3898 <[^>]*> nop ++0+389c <[^>]*> nop ++0+38a0 <[^>]*> nop ++0+38a4 <[^>]*> nop ++0+38a8 <[^>]*> nop ++0+38ac <[^>]*> nop ++0+38b0 <[^>]*> nop ++0+38b4 <[^>]*> nop ++0+38b8 <[^>]*> nop ++0+38bc <[^>]*> nop ++0+38c0 <[^>]*> nop ++0+38c4 <[^>]*> nop ++0+38c8 <[^>]*> nop ++0+38cc <[^>]*> nop ++0+38d0 <[^>]*> nop ++0+38d4 <[^>]*> nop ++0+38d8 <[^>]*> nop ++0+38dc <[^>]*> nop ++0+38e0 <[^>]*> nop ++0+38e4 <[^>]*> nop ++0+38e8 <[^>]*> nop ++0+38ec <[^>]*> nop ++0+38f0 <[^>]*> nop ++0+38f4 <[^>]*> nop ++0+38f8 <[^>]*> nop ++0+38fc <[^>]*> nop ++0+3900 <[^>]*> nop ++0+3904 <[^>]*> nop ++0+3908 <[^>]*> nop ++0+390c <[^>]*> nop ++0+3910 <[^>]*> nop ++0+3914 <[^>]*> nop ++0+3918 <[^>]*> nop ++0+391c <[^>]*> nop ++0+3920 <[^>]*> nop ++0+3924 <[^>]*> nop ++0+3928 <[^>]*> nop ++0+392c <[^>]*> nop ++0+3930 <[^>]*> nop ++0+3934 <[^>]*> nop ++0+3938 <[^>]*> nop ++0+393c <[^>]*> nop ++0+3940 <[^>]*> nop ++0+3944 <[^>]*> nop ++0+3948 <[^>]*> nop ++0+394c <[^>]*> nop ++0+3950 <[^>]*> nop ++0+3954 <[^>]*> nop ++0+3958 <[^>]*> nop ++0+395c <[^>]*> nop ++0+3960 <[^>]*> nop ++0+3964 <[^>]*> nop ++0+3968 <[^>]*> nop ++0+396c <[^>]*> nop ++0+3970 <[^>]*> nop ++0+3974 <[^>]*> nop ++0+3978 <[^>]*> nop ++0+397c <[^>]*> nop ++0+3980 <[^>]*> nop ++0+3984 <[^>]*> nop ++0+3988 <[^>]*> nop ++0+398c <[^>]*> nop ++0+3990 <[^>]*> nop ++0+3994 <[^>]*> nop ++0+3998 <[^>]*> nop ++0+399c <[^>]*> nop ++0+39a0 <[^>]*> nop ++0+39a4 <[^>]*> nop ++0+39a8 <[^>]*> nop ++0+39ac <[^>]*> nop ++0+39b0 <[^>]*> nop ++0+39b4 <[^>]*> nop ++0+39b8 <[^>]*> nop ++0+39bc <[^>]*> nop ++0+39c0 <[^>]*> nop ++0+39c4 <[^>]*> nop ++0+39c8 <[^>]*> nop ++0+39cc <[^>]*> nop ++0+39d0 <[^>]*> nop ++0+39d4 <[^>]*> nop ++0+39d8 <[^>]*> nop ++0+39dc <[^>]*> nop ++0+39e0 <[^>]*> nop ++0+39e4 <[^>]*> nop ++0+39e8 <[^>]*> nop ++0+39ec <[^>]*> nop ++0+39f0 <[^>]*> nop ++0+39f4 <[^>]*> nop ++0+39f8 <[^>]*> nop ++0+39fc <[^>]*> nop ++0+3a00 <[^>]*> nop ++0+3a04 <[^>]*> nop ++0+3a08 <[^>]*> nop ++0+3a0c <[^>]*> nop ++0+3a10 <[^>]*> nop ++0+3a14 <[^>]*> nop ++0+3a18 <[^>]*> nop ++0+3a1c <[^>]*> nop ++0+3a20 <[^>]*> nop ++0+3a24 <[^>]*> nop ++0+3a28 <[^>]*> nop ++0+3a2c <[^>]*> nop ++0+3a30 <[^>]*> nop ++0+3a34 <[^>]*> nop ++0+3a38 <[^>]*> nop ++0+3a3c <[^>]*> nop ++0+3a40 <[^>]*> nop ++0+3a44 <[^>]*> nop ++0+3a48 <[^>]*> nop ++0+3a4c <[^>]*> nop ++0+3a50 <[^>]*> nop ++0+3a54 <[^>]*> nop ++0+3a58 <[^>]*> nop ++0+3a5c <[^>]*> nop ++0+3a60 <[^>]*> nop ++0+3a64 <[^>]*> nop ++0+3a68 <[^>]*> nop ++0+3a6c <[^>]*> nop ++0+3a70 <[^>]*> nop ++0+3a74 <[^>]*> nop ++0+3a78 <[^>]*> nop ++0+3a7c <[^>]*> nop ++0+3a80 <[^>]*> nop ++0+3a84 <[^>]*> nop ++0+3a88 <[^>]*> nop ++0+3a8c <[^>]*> nop ++0+3a90 <[^>]*> nop ++0+3a94 <[^>]*> nop ++0+3a98 <[^>]*> nop ++0+3a9c <[^>]*> nop ++0+3aa0 <[^>]*> nop ++0+3aa4 <[^>]*> nop ++0+3aa8 <[^>]*> nop ++0+3aac <[^>]*> nop ++0+3ab0 <[^>]*> nop ++0+3ab4 <[^>]*> nop ++0+3ab8 <[^>]*> nop ++0+3abc <[^>]*> nop ++0+3ac0 <[^>]*> nop ++0+3ac4 <[^>]*> nop ++0+3ac8 <[^>]*> nop ++0+3acc <[^>]*> nop ++0+3ad0 <[^>]*> nop ++0+3ad4 <[^>]*> nop ++0+3ad8 <[^>]*> nop ++0+3adc <[^>]*> nop ++0+3ae0 <[^>]*> nop ++0+3ae4 <[^>]*> nop ++0+3ae8 <[^>]*> nop ++0+3aec <[^>]*> nop ++0+3af0 <[^>]*> nop ++0+3af4 <[^>]*> nop ++0+3af8 <[^>]*> nop ++0+3afc <[^>]*> nop ++0+3b00 <[^>]*> nop ++0+3b04 <[^>]*> nop ++0+3b08 <[^>]*> nop ++0+3b0c <[^>]*> nop ++0+3b10 <[^>]*> nop ++0+3b14 <[^>]*> nop ++0+3b18 <[^>]*> nop ++0+3b1c <[^>]*> nop ++0+3b20 <[^>]*> nop ++0+3b24 <[^>]*> nop ++0+3b28 <[^>]*> nop ++0+3b2c <[^>]*> nop ++0+3b30 <[^>]*> nop ++0+3b34 <[^>]*> nop ++0+3b38 <[^>]*> nop ++0+3b3c <[^>]*> nop ++0+3b40 <[^>]*> nop ++0+3b44 <[^>]*> nop ++0+3b48 <[^>]*> nop ++0+3b4c <[^>]*> nop ++0+3b50 <[^>]*> nop ++0+3b54 <[^>]*> nop ++0+3b58 <[^>]*> nop ++0+3b5c <[^>]*> nop ++0+3b60 <[^>]*> nop ++0+3b64 <[^>]*> nop ++0+3b68 <[^>]*> nop ++0+3b6c <[^>]*> nop ++0+3b70 <[^>]*> nop ++0+3b74 <[^>]*> nop ++0+3b78 <[^>]*> nop ++0+3b7c <[^>]*> nop ++0+3b80 <[^>]*> nop ++0+3b84 <[^>]*> nop ++0+3b88 <[^>]*> nop ++0+3b8c <[^>]*> nop ++0+3b90 <[^>]*> nop ++0+3b94 <[^>]*> nop ++0+3b98 <[^>]*> nop ++0+3b9c <[^>]*> nop ++0+3ba0 <[^>]*> nop ++0+3ba4 <[^>]*> nop ++0+3ba8 <[^>]*> nop ++0+3bac <[^>]*> nop ++0+3bb0 <[^>]*> nop ++0+3bb4 <[^>]*> nop ++0+3bb8 <[^>]*> nop ++0+3bbc <[^>]*> nop ++0+3bc0 <[^>]*> nop ++0+3bc4 <[^>]*> nop ++0+3bc8 <[^>]*> nop ++0+3bcc <[^>]*> nop ++0+3bd0 <[^>]*> nop ++0+3bd4 <[^>]*> nop ++0+3bd8 <[^>]*> nop ++0+3bdc <[^>]*> nop ++0+3be0 <[^>]*> nop ++0+3be4 <[^>]*> nop ++0+3be8 <[^>]*> nop ++0+3bec <[^>]*> nop ++0+3bf0 <[^>]*> nop ++0+3bf4 <[^>]*> nop ++0+3bf8 <[^>]*> nop ++0+3bfc <[^>]*> nop ++0+3c00 <[^>]*> nop ++0+3c04 <[^>]*> nop ++0+3c08 <[^>]*> nop ++0+3c0c <[^>]*> nop ++0+3c10 <[^>]*> nop ++0+3c14 <[^>]*> nop ++0+3c18 <[^>]*> nop ++0+3c1c <[^>]*> nop ++0+3c20 <[^>]*> nop ++0+3c24 <[^>]*> nop ++0+3c28 <[^>]*> nop ++0+3c2c <[^>]*> nop ++0+3c30 <[^>]*> nop ++0+3c34 <[^>]*> nop ++0+3c38 <[^>]*> nop ++0+3c3c <[^>]*> nop ++0+3c40 <[^>]*> nop ++0+3c44 <[^>]*> nop ++0+3c48 <[^>]*> nop ++0+3c4c <[^>]*> nop ++0+3c50 <[^>]*> nop ++0+3c54 <[^>]*> nop ++0+3c58 <[^>]*> nop ++0+3c5c <[^>]*> nop ++0+3c60 <[^>]*> nop ++0+3c64 <[^>]*> nop ++0+3c68 <[^>]*> nop ++0+3c6c <[^>]*> nop ++0+3c70 <[^>]*> nop ++0+3c74 <[^>]*> nop ++0+3c78 <[^>]*> nop ++0+3c7c <[^>]*> nop ++0+3c80 <[^>]*> nop ++0+3c84 <[^>]*> nop ++0+3c88 <[^>]*> nop ++0+3c8c <[^>]*> nop ++0+3c90 <[^>]*> nop ++0+3c94 <[^>]*> nop ++0+3c98 <[^>]*> nop ++0+3c9c <[^>]*> nop ++0+3ca0 <[^>]*> nop ++0+3ca4 <[^>]*> nop ++0+3ca8 <[^>]*> nop ++0+3cac <[^>]*> nop ++0+3cb0 <[^>]*> nop ++0+3cb4 <[^>]*> nop ++0+3cb8 <[^>]*> nop ++0+3cbc <[^>]*> nop ++0+3cc0 <[^>]*> nop ++0+3cc4 <[^>]*> nop ++0+3cc8 <[^>]*> nop ++0+3ccc <[^>]*> nop ++0+3cd0 <[^>]*> nop ++0+3cd4 <[^>]*> nop ++0+3cd8 <[^>]*> nop ++0+3cdc <[^>]*> nop ++0+3ce0 <[^>]*> nop ++0+3ce4 <[^>]*> nop ++0+3ce8 <[^>]*> nop ++0+3cec <[^>]*> nop ++0+3cf0 <[^>]*> nop ++0+3cf4 <[^>]*> nop ++0+3cf8 <[^>]*> nop ++0+3cfc <[^>]*> nop ++0+3d00 <[^>]*> nop ++0+3d04 <[^>]*> nop ++0+3d08 <[^>]*> nop ++0+3d0c <[^>]*> nop ++0+3d10 <[^>]*> nop ++0+3d14 <[^>]*> nop ++0+3d18 <[^>]*> nop ++0+3d1c <[^>]*> nop ++0+3d20 <[^>]*> nop ++0+3d24 <[^>]*> nop ++0+3d28 <[^>]*> nop ++0+3d2c <[^>]*> nop ++0+3d30 <[^>]*> nop ++0+3d34 <[^>]*> nop ++0+3d38 <[^>]*> nop ++0+3d3c <[^>]*> nop ++0+3d40 <[^>]*> nop ++0+3d44 <[^>]*> nop ++0+3d48 <[^>]*> nop ++0+3d4c <[^>]*> nop ++0+3d50 <[^>]*> nop ++0+3d54 <[^>]*> nop ++0+3d58 <[^>]*> nop ++0+3d5c <[^>]*> nop ++0+3d60 <[^>]*> nop ++0+3d64 <[^>]*> nop ++0+3d68 <[^>]*> nop ++0+3d6c <[^>]*> nop ++0+3d70 <[^>]*> nop ++0+3d74 <[^>]*> nop ++0+3d78 <[^>]*> nop ++0+3d7c <[^>]*> nop ++0+3d80 <[^>]*> nop ++0+3d84 <[^>]*> nop ++0+3d88 <[^>]*> nop ++0+3d8c <[^>]*> nop ++0+3d90 <[^>]*> nop ++0+3d94 <[^>]*> nop ++0+3d98 <[^>]*> nop ++0+3d9c <[^>]*> nop ++0+3da0 <[^>]*> nop ++0+3da4 <[^>]*> nop ++0+3da8 <[^>]*> nop ++0+3dac <[^>]*> nop ++0+3db0 <[^>]*> nop ++0+3db4 <[^>]*> nop ++0+3db8 <[^>]*> nop ++0+3dbc <[^>]*> nop ++0+3dc0 <[^>]*> nop ++0+3dc4 <[^>]*> nop ++0+3dc8 <[^>]*> nop ++0+3dcc <[^>]*> nop ++0+3dd0 <[^>]*> nop ++0+3dd4 <[^>]*> nop ++0+3dd8 <[^>]*> nop ++0+3ddc <[^>]*> nop ++0+3de0 <[^>]*> nop ++0+3de4 <[^>]*> nop ++0+3de8 <[^>]*> nop ++0+3dec <[^>]*> nop ++0+3df0 <[^>]*> nop ++0+3df4 <[^>]*> nop ++0+3df8 <[^>]*> nop ++0+3dfc <[^>]*> nop ++0+3e00 <[^>]*> nop ++0+3e04 <[^>]*> nop ++0+3e08 <[^>]*> nop ++0+3e0c <[^>]*> nop ++0+3e10 <[^>]*> nop ++0+3e14 <[^>]*> nop ++0+3e18 <[^>]*> nop ++0+3e1c <[^>]*> nop ++0+3e20 <[^>]*> nop ++0+3e24 <[^>]*> nop ++0+3e28 <[^>]*> nop ++0+3e2c <[^>]*> nop ++0+3e30 <[^>]*> nop ++0+3e34 <[^>]*> nop ++0+3e38 <[^>]*> nop ++0+3e3c <[^>]*> nop ++0+3e40 <[^>]*> nop ++0+3e44 <[^>]*> nop ++0+3e48 <[^>]*> nop ++0+3e4c <[^>]*> nop ++0+3e50 <[^>]*> nop ++0+3e54 <[^>]*> nop ++0+3e58 <[^>]*> nop ++0+3e5c <[^>]*> nop ++0+3e60 <[^>]*> nop ++0+3e64 <[^>]*> nop ++0+3e68 <[^>]*> nop ++0+3e6c <[^>]*> nop ++0+3e70 <[^>]*> nop ++0+3e74 <[^>]*> nop ++0+3e78 <[^>]*> nop ++0+3e7c <[^>]*> nop ++0+3e80 <[^>]*> nop ++0+3e84 <[^>]*> nop ++0+3e88 <[^>]*> nop ++0+3e8c <[^>]*> nop ++0+3e90 <[^>]*> nop ++0+3e94 <[^>]*> nop ++0+3e98 <[^>]*> nop ++0+3e9c <[^>]*> nop ++0+3ea0 <[^>]*> nop ++0+3ea4 <[^>]*> nop ++0+3ea8 <[^>]*> nop ++0+3eac <[^>]*> nop ++0+3eb0 <[^>]*> nop ++0+3eb4 <[^>]*> nop ++0+3eb8 <[^>]*> nop ++0+3ebc <[^>]*> nop ++0+3ec0 <[^>]*> nop ++0+3ec4 <[^>]*> nop ++0+3ec8 <[^>]*> nop ++0+3ecc <[^>]*> nop ++0+3ed0 <[^>]*> nop ++0+3ed4 <[^>]*> nop ++0+3ed8 <[^>]*> nop ++0+3edc <[^>]*> nop ++0+3ee0 <[^>]*> nop ++0+3ee4 <[^>]*> nop ++0+3ee8 <[^>]*> nop ++0+3eec <[^>]*> nop ++0+3ef0 <[^>]*> nop ++0+3ef4 <[^>]*> nop ++0+3ef8 <[^>]*> nop ++0+3efc <[^>]*> nop ++0+3f00 <[^>]*> nop ++0+3f04 <[^>]*> nop ++0+3f08 <[^>]*> nop ++0+3f0c <[^>]*> nop ++0+3f10 <[^>]*> nop ++0+3f14 <[^>]*> nop ++0+3f18 <[^>]*> nop ++0+3f1c <[^>]*> nop ++0+3f20 <[^>]*> nop ++0+3f24 <[^>]*> nop ++0+3f28 <[^>]*> nop ++0+3f2c <[^>]*> nop ++0+3f30 <[^>]*> nop ++0+3f34 <[^>]*> nop ++0+3f38 <[^>]*> nop ++0+3f3c <[^>]*> nop ++0+3f40 <[^>]*> nop ++0+3f44 <[^>]*> nop ++0+3f48 <[^>]*> nop ++0+3f4c <[^>]*> nop ++0+3f50 <[^>]*> nop ++0+3f54 <[^>]*> nop ++0+3f58 <[^>]*> nop ++0+3f5c <[^>]*> nop ++0+3f60 <[^>]*> nop ++0+3f64 <[^>]*> nop ++0+3f68 <[^>]*> nop ++0+3f6c <[^>]*> nop ++0+3f70 <[^>]*> nop ++0+3f74 <[^>]*> nop ++0+3f78 <[^>]*> nop ++0+3f7c <[^>]*> nop ++0+3f80 <[^>]*> nop ++0+3f84 <[^>]*> nop ++0+3f88 <[^>]*> nop ++0+3f8c <[^>]*> nop ++0+3f90 <[^>]*> nop ++0+3f94 <[^>]*> nop ++0+3f98 <[^>]*> nop ++0+3f9c <[^>]*> nop ++0+3fa0 <[^>]*> nop ++0+3fa4 <[^>]*> nop ++0+3fa8 <[^>]*> nop ++0+3fac <[^>]*> nop ++0+3fb0 <[^>]*> nop ++0+3fb4 <[^>]*> nop ++0+3fb8 <[^>]*> nop ++0+3fbc <[^>]*> nop ++0+3fc0 <[^>]*> nop ++0+3fc4 <[^>]*> nop ++0+3fc8 <[^>]*> nop ++0+3fcc <[^>]*> nop ++0+3fd0 <[^>]*> nop ++0+3fd4 <[^>]*> nop ++0+3fd8 <[^>]*> nop ++0+3fdc <[^>]*> nop ++0+3fe0 <[^>]*> nop ++0+3fe4 <[^>]*> nop ++0+3fe8 <[^>]*> nop ++0+3fec <[^>]*> nop ++0+3ff0 <[^>]*> nop ++0+3ff4 <[^>]*> nop ++0+3ff8 <[^>]*> nop ++0+3ffc <[^>]*> nop ++0+4000 <[^>]*> nop ++0+4004 <[^>]*> nop ++0+4008 <[^>]*> nop ++0+400c <[^>]*> nop ++0+4010 <[^>]*> nop ++0+4014 <[^>]*> nop ++0+4018 <[^>]*> nop ++0+401c <[^>]*> nop ++0+4020 <[^>]*> nop ++0+4024 <[^>]*> nop ++0+4028 <[^>]*> nop ++0+402c <[^>]*> nop ++0+4030 <[^>]*> nop ++0+4034 <[^>]*> nop ++0+4038 <[^>]*> nop ++0+403c <[^>]*> nop ++0+4040 <[^>]*> nop ++0+4044 <[^>]*> nop ++0+4048 <[^>]*> nop ++0+404c <[^>]*> nop ++0+4050 <[^>]*> nop ++0+4054 <[^>]*> nop ++0+4058 <[^>]*> nop ++0+405c <[^>]*> nop ++0+4060 <[^>]*> nop ++0+4064 <[^>]*> nop ++0+4068 <[^>]*> nop ++0+406c <[^>]*> nop ++0+4070 <[^>]*> nop ++0+4074 <[^>]*> nop ++0+4078 <[^>]*> nop ++0+407c <[^>]*> nop ++0+4080 <[^>]*> nop ++0+4084 <[^>]*> nop ++0+4088 <[^>]*> nop ++0+408c <[^>]*> nop ++0+4090 <[^>]*> nop ++0+4094 <[^>]*> nop ++0+4098 <[^>]*> nop ++0+409c <[^>]*> nop ++0+40a0 <[^>]*> nop ++0+40a4 <[^>]*> nop ++0+40a8 <[^>]*> nop ++0+40ac <[^>]*> nop ++0+40b0 <[^>]*> nop ++0+40b4 <[^>]*> nop ++0+40b8 <[^>]*> nop ++0+40bc <[^>]*> nop ++0+40c0 <[^>]*> nop ++0+40c4 <[^>]*> nop ++0+40c8 <[^>]*> nop ++0+40cc <[^>]*> nop ++0+40d0 <[^>]*> nop ++0+40d4 <[^>]*> nop ++0+40d8 <[^>]*> nop ++0+40dc <[^>]*> nop ++0+40e0 <[^>]*> nop ++0+40e4 <[^>]*> nop ++0+40e8 <[^>]*> nop ++0+40ec <[^>]*> nop ++0+40f0 <[^>]*> nop ++0+40f4 <[^>]*> nop ++0+40f8 <[^>]*> nop ++0+40fc <[^>]*> nop ++0+4100 <[^>]*> nop ++0+4104 <[^>]*> nop ++0+4108 <[^>]*> nop ++0+410c <[^>]*> nop ++0+4110 <[^>]*> nop ++0+4114 <[^>]*> nop ++0+4118 <[^>]*> nop ++0+411c <[^>]*> nop ++0+4120 <[^>]*> nop ++0+4124 <[^>]*> nop ++0+4128 <[^>]*> nop ++0+412c <[^>]*> nop ++0+4130 <[^>]*> nop ++0+4134 <[^>]*> nop ++0+4138 <[^>]*> nop ++0+413c <[^>]*> nop ++0+4140 <[^>]*> nop ++0+4144 <[^>]*> nop ++0+4148 <[^>]*> nop ++0+414c <[^>]*> nop ++0+4150 <[^>]*> nop ++0+4154 <[^>]*> nop ++0+4158 <[^>]*> nop ++0+415c <[^>]*> nop ++0+4160 <[^>]*> nop ++0+4164 <[^>]*> nop ++0+4168 <[^>]*> nop ++0+416c <[^>]*> nop ++0+4170 <[^>]*> nop ++0+4174 <[^>]*> nop ++0+4178 <[^>]*> nop ++0+417c <[^>]*> nop ++0+4180 <[^>]*> nop ++0+4184 <[^>]*> nop ++0+4188 <[^>]*> nop ++0+418c <[^>]*> nop ++0+4190 <[^>]*> nop ++0+4194 <[^>]*> nop ++0+4198 <[^>]*> nop ++0+419c <[^>]*> nop ++0+41a0 <[^>]*> nop ++0+41a4 <[^>]*> nop ++0+41a8 <[^>]*> nop ++0+41ac <[^>]*> nop ++0+41b0 <[^>]*> nop ++0+41b4 <[^>]*> nop ++0+41b8 <[^>]*> nop ++0+41bc <[^>]*> nop ++0+41c0 <[^>]*> nop ++0+41c4 <[^>]*> nop ++0+41c8 <[^>]*> nop ++0+41cc <[^>]*> nop ++0+41d0 <[^>]*> nop ++0+41d4 <[^>]*> nop ++0+41d8 <[^>]*> nop ++0+41dc <[^>]*> nop ++0+41e0 <[^>]*> nop ++0+41e4 <[^>]*> nop ++0+41e8 <[^>]*> nop ++0+41ec <[^>]*> nop ++0+41f0 <[^>]*> nop ++0+41f4 <[^>]*> nop ++0+41f8 <[^>]*> nop ++0+41fc <[^>]*> nop ++0+4200 <[^>]*> nop ++0+4204 <[^>]*> nop ++0+4208 <[^>]*> nop ++0+420c <[^>]*> nop ++0+4210 <[^>]*> nop ++0+4214 <[^>]*> nop ++0+4218 <[^>]*> nop ++0+421c <[^>]*> nop ++0+4220 <[^>]*> nop ++0+4224 <[^>]*> nop ++0+4228 <[^>]*> nop ++0+422c <[^>]*> nop ++0+4230 <[^>]*> nop ++0+4234 <[^>]*> nop ++0+4238 <[^>]*> nop ++0+423c <[^>]*> nop ++0+4240 <[^>]*> nop ++0+4244 <[^>]*> nop ++0+4248 <[^>]*> nop ++0+424c <[^>]*> nop ++0+4250 <[^>]*> nop ++0+4254 <[^>]*> nop ++0+4258 <[^>]*> nop ++0+425c <[^>]*> nop ++0+4260 <[^>]*> nop ++0+4264 <[^>]*> nop ++0+4268 <[^>]*> nop ++0+426c <[^>]*> nop ++0+4270 <[^>]*> nop ++0+4274 <[^>]*> nop ++0+4278 <[^>]*> nop ++0+427c <[^>]*> nop ++0+4280 <[^>]*> nop ++0+4284 <[^>]*> nop ++0+4288 <[^>]*> nop ++0+428c <[^>]*> nop ++0+4290 <[^>]*> nop ++0+4294 <[^>]*> nop ++0+4298 <[^>]*> nop ++0+429c <[^>]*> nop ++0+42a0 <[^>]*> nop ++0+42a4 <[^>]*> nop ++0+42a8 <[^>]*> nop ++0+42ac <[^>]*> nop ++0+42b0 <[^>]*> nop ++0+42b4 <[^>]*> nop ++0+42b8 <[^>]*> nop ++0+42bc <[^>]*> nop ++0+42c0 <[^>]*> nop ++0+42c4 <[^>]*> nop ++0+42c8 <[^>]*> nop ++0+42cc <[^>]*> nop ++0+42d0 <[^>]*> nop ++0+42d4 <[^>]*> nop ++0+42d8 <[^>]*> nop ++0+42dc <[^>]*> nop ++0+42e0 <[^>]*> nop ++0+42e4 <[^>]*> nop ++0+42e8 <[^>]*> nop ++0+42ec <[^>]*> nop ++0+42f0 <[^>]*> nop ++0+42f4 <[^>]*> nop ++0+42f8 <[^>]*> nop ++0+42fc <[^>]*> nop ++0+4300 <[^>]*> nop ++0+4304 <[^>]*> nop ++0+4308 <[^>]*> nop ++0+430c <[^>]*> nop ++0+4310 <[^>]*> nop ++0+4314 <[^>]*> nop ++0+4318 <[^>]*> nop ++0+431c <[^>]*> nop ++0+4320 <[^>]*> nop ++0+4324 <[^>]*> nop ++0+4328 <[^>]*> nop ++0+432c <[^>]*> nop ++0+4330 <[^>]*> nop ++0+4334 <[^>]*> nop ++0+4338 <[^>]*> nop ++0+433c <[^>]*> nop ++0+4340 <[^>]*> nop ++0+4344 <[^>]*> nop ++0+4348 <[^>]*> nop ++0+434c <[^>]*> nop ++0+4350 <[^>]*> nop ++0+4354 <[^>]*> nop ++0+4358 <[^>]*> nop ++0+435c <[^>]*> nop ++0+4360 <[^>]*> nop ++0+4364 <[^>]*> nop ++0+4368 <[^>]*> nop ++0+436c <[^>]*> nop ++0+4370 <[^>]*> nop ++0+4374 <[^>]*> nop ++0+4378 <[^>]*> nop ++0+437c <[^>]*> nop ++0+4380 <[^>]*> nop ++0+4384 <[^>]*> nop ++0+4388 <[^>]*> nop ++0+438c <[^>]*> nop ++0+4390 <[^>]*> nop ++0+4394 <[^>]*> nop ++0+4398 <[^>]*> nop ++0+439c <[^>]*> nop ++0+43a0 <[^>]*> nop ++0+43a4 <[^>]*> nop ++0+43a8 <[^>]*> nop ++0+43ac <[^>]*> nop ++0+43b0 <[^>]*> nop ++0+43b4 <[^>]*> nop ++0+43b8 <[^>]*> nop ++0+43bc <[^>]*> nop ++0+43c0 <[^>]*> nop ++0+43c4 <[^>]*> nop ++0+43c8 <[^>]*> nop ++0+43cc <[^>]*> nop ++0+43d0 <[^>]*> nop ++0+43d4 <[^>]*> nop ++0+43d8 <[^>]*> nop ++0+43dc <[^>]*> nop ++0+43e0 <[^>]*> nop ++0+43e4 <[^>]*> nop ++0+43e8 <[^>]*> nop ++0+43ec <[^>]*> nop ++0+43f0 <[^>]*> nop ++0+43f4 <[^>]*> nop ++0+43f8 <[^>]*> nop ++0+43fc <[^>]*> nop ++0+4400 <[^>]*> nop ++0+4404 <[^>]*> nop ++0+4408 <[^>]*> nop ++0+440c <[^>]*> nop ++0+4410 <[^>]*> nop ++0+4414 <[^>]*> nop ++0+4418 <[^>]*> nop ++0+441c <[^>]*> nop ++0+4420 <[^>]*> nop ++0+4424 <[^>]*> nop ++0+4428 <[^>]*> nop ++0+442c <[^>]*> nop ++0+4430 <[^>]*> nop ++0+4434 <[^>]*> nop ++0+4438 <[^>]*> nop ++0+443c <[^>]*> nop ++0+4440 <[^>]*> nop ++0+4444 <[^>]*> nop ++0+4448 <[^>]*> nop ++0+444c <[^>]*> nop ++0+4450 <[^>]*> nop ++0+4454 <[^>]*> nop ++0+4458 <[^>]*> nop ++0+445c <[^>]*> nop ++0+4460 <[^>]*> nop ++0+4464 <[^>]*> nop ++0+4468 <[^>]*> nop ++0+446c <[^>]*> nop ++0+4470 <[^>]*> nop ++0+4474 <[^>]*> nop ++0+4478 <[^>]*> nop ++0+447c <[^>]*> nop ++0+4480 <[^>]*> nop ++0+4484 <[^>]*> nop ++0+4488 <[^>]*> nop ++0+448c <[^>]*> nop ++0+4490 <[^>]*> nop ++0+4494 <[^>]*> nop ++0+4498 <[^>]*> nop ++0+449c <[^>]*> nop ++0+44a0 <[^>]*> nop ++0+44a4 <[^>]*> nop ++0+44a8 <[^>]*> nop ++0+44ac <[^>]*> nop ++0+44b0 <[^>]*> nop ++0+44b4 <[^>]*> nop ++0+44b8 <[^>]*> nop ++0+44bc <[^>]*> nop ++0+44c0 <[^>]*> nop ++0+44c4 <[^>]*> nop ++0+44c8 <[^>]*> nop ++0+44cc <[^>]*> nop ++0+44d0 <[^>]*> nop ++0+44d4 <[^>]*> nop ++0+44d8 <[^>]*> nop ++0+44dc <[^>]*> nop ++0+44e0 <[^>]*> nop ++0+44e4 <[^>]*> nop ++0+44e8 <[^>]*> nop ++0+44ec <[^>]*> nop ++0+44f0 <[^>]*> nop ++0+44f4 <[^>]*> nop ++0+44f8 <[^>]*> nop ++0+44fc <[^>]*> nop ++0+4500 <[^>]*> nop ++0+4504 <[^>]*> nop ++0+4508 <[^>]*> nop ++0+450c <[^>]*> nop ++0+4510 <[^>]*> nop ++0+4514 <[^>]*> nop ++0+4518 <[^>]*> nop ++0+451c <[^>]*> nop ++0+4520 <[^>]*> nop ++0+4524 <[^>]*> nop ++0+4528 <[^>]*> nop ++0+452c <[^>]*> nop ++0+4530 <[^>]*> nop ++0+4534 <[^>]*> nop ++0+4538 <[^>]*> nop ++0+453c <[^>]*> nop ++0+4540 <[^>]*> nop ++0+4544 <[^>]*> nop ++0+4548 <[^>]*> nop ++0+454c <[^>]*> nop ++0+4550 <[^>]*> nop ++0+4554 <[^>]*> nop ++0+4558 <[^>]*> nop ++0+455c <[^>]*> nop ++0+4560 <[^>]*> nop ++0+4564 <[^>]*> nop ++0+4568 <[^>]*> nop ++0+456c <[^>]*> nop ++0+4570 <[^>]*> nop ++0+4574 <[^>]*> nop ++0+4578 <[^>]*> nop ++0+457c <[^>]*> nop ++0+4580 <[^>]*> nop ++0+4584 <[^>]*> nop ++0+4588 <[^>]*> nop ++0+458c <[^>]*> nop ++0+4590 <[^>]*> nop ++0+4594 <[^>]*> nop ++0+4598 <[^>]*> nop ++0+459c <[^>]*> nop ++0+45a0 <[^>]*> nop ++0+45a4 <[^>]*> nop ++0+45a8 <[^>]*> nop ++0+45ac <[^>]*> nop ++0+45b0 <[^>]*> nop ++0+45b4 <[^>]*> nop ++0+45b8 <[^>]*> nop ++0+45bc <[^>]*> nop ++0+45c0 <[^>]*> nop ++0+45c4 <[^>]*> nop ++0+45c8 <[^>]*> nop ++0+45cc <[^>]*> nop ++0+45d0 <[^>]*> nop ++0+45d4 <[^>]*> nop ++0+45d8 <[^>]*> nop ++0+45dc <[^>]*> nop ++0+45e0 <[^>]*> nop ++0+45e4 <[^>]*> nop ++0+45e8 <[^>]*> nop ++0+45ec <[^>]*> nop ++0+45f0 <[^>]*> nop ++0+45f4 <[^>]*> nop ++0+45f8 <[^>]*> nop ++0+45fc <[^>]*> nop ++0+4600 <[^>]*> nop ++0+4604 <[^>]*> nop ++0+4608 <[^>]*> nop ++0+460c <[^>]*> nop ++0+4610 <[^>]*> nop ++0+4614 <[^>]*> nop ++0+4618 <[^>]*> nop ++0+461c <[^>]*> nop ++0+4620 <[^>]*> nop ++0+4624 <[^>]*> nop ++0+4628 <[^>]*> nop ++0+462c <[^>]*> nop ++0+4630 <[^>]*> nop ++0+4634 <[^>]*> nop ++0+4638 <[^>]*> nop ++0+463c <[^>]*> nop ++0+4640 <[^>]*> nop ++0+4644 <[^>]*> nop ++0+4648 <[^>]*> nop ++0+464c <[^>]*> nop ++0+4650 <[^>]*> nop ++0+4654 <[^>]*> nop ++0+4658 <[^>]*> nop ++0+465c <[^>]*> nop ++0+4660 <[^>]*> nop ++0+4664 <[^>]*> nop ++0+4668 <[^>]*> nop ++0+466c <[^>]*> nop ++0+4670 <[^>]*> nop ++0+4674 <[^>]*> nop ++0+4678 <[^>]*> nop ++0+467c <[^>]*> nop ++0+4680 <[^>]*> nop ++0+4684 <[^>]*> nop ++0+4688 <[^>]*> nop ++0+468c <[^>]*> nop ++0+4690 <[^>]*> nop ++0+4694 <[^>]*> nop ++0+4698 <[^>]*> nop ++0+469c <[^>]*> nop ++0+46a0 <[^>]*> nop ++0+46a4 <[^>]*> nop ++0+46a8 <[^>]*> nop ++0+46ac <[^>]*> nop ++0+46b0 <[^>]*> nop ++0+46b4 <[^>]*> nop ++0+46b8 <[^>]*> nop ++0+46bc <[^>]*> nop ++0+46c0 <[^>]*> nop ++0+46c4 <[^>]*> nop ++0+46c8 <[^>]*> nop ++0+46cc <[^>]*> nop ++0+46d0 <[^>]*> nop ++0+46d4 <[^>]*> nop ++0+46d8 <[^>]*> nop ++0+46dc <[^>]*> nop ++0+46e0 <[^>]*> nop ++0+46e4 <[^>]*> nop ++0+46e8 <[^>]*> nop ++0+46ec <[^>]*> nop ++0+46f0 <[^>]*> nop ++0+46f4 <[^>]*> nop ++0+46f8 <[^>]*> nop ++0+46fc <[^>]*> nop ++0+4700 <[^>]*> nop ++0+4704 <[^>]*> nop ++0+4708 <[^>]*> nop ++0+470c <[^>]*> nop ++0+4710 <[^>]*> nop ++0+4714 <[^>]*> nop ++0+4718 <[^>]*> nop ++0+471c <[^>]*> nop ++0+4720 <[^>]*> nop ++0+4724 <[^>]*> nop ++0+4728 <[^>]*> nop ++0+472c <[^>]*> nop ++0+4730 <[^>]*> nop ++0+4734 <[^>]*> nop ++0+4738 <[^>]*> nop ++0+473c <[^>]*> nop ++0+4740 <[^>]*> nop ++0+4744 <[^>]*> nop ++0+4748 <[^>]*> nop ++0+474c <[^>]*> nop ++0+4750 <[^>]*> nop ++0+4754 <[^>]*> nop ++0+4758 <[^>]*> nop ++0+475c <[^>]*> nop ++0+4760 <[^>]*> nop ++0+4764 <[^>]*> nop ++0+4768 <[^>]*> nop ++0+476c <[^>]*> nop ++0+4770 <[^>]*> nop ++0+4774 <[^>]*> nop ++0+4778 <[^>]*> nop ++0+477c <[^>]*> nop ++0+4780 <[^>]*> nop ++0+4784 <[^>]*> nop ++0+4788 <[^>]*> nop ++0+478c <[^>]*> nop ++0+4790 <[^>]*> nop ++0+4794 <[^>]*> nop ++0+4798 <[^>]*> nop ++0+479c <[^>]*> nop ++0+47a0 <[^>]*> nop ++0+47a4 <[^>]*> nop ++0+47a8 <[^>]*> nop ++0+47ac <[^>]*> nop ++0+47b0 <[^>]*> nop ++0+47b4 <[^>]*> nop ++0+47b8 <[^>]*> nop ++0+47bc <[^>]*> nop ++0+47c0 <[^>]*> nop ++0+47c4 <[^>]*> nop ++0+47c8 <[^>]*> nop ++0+47cc <[^>]*> nop ++0+47d0 <[^>]*> nop ++0+47d4 <[^>]*> nop ++0+47d8 <[^>]*> nop ++0+47dc <[^>]*> nop ++0+47e0 <[^>]*> nop ++0+47e4 <[^>]*> nop ++0+47e8 <[^>]*> nop ++0+47ec <[^>]*> nop ++0+47f0 <[^>]*> nop ++0+47f4 <[^>]*> nop ++0+47f8 <[^>]*> nop ++0+47fc <[^>]*> nop ++0+4800 <[^>]*> nop ++0+4804 <[^>]*> nop ++0+4808 <[^>]*> nop ++0+480c <[^>]*> nop ++0+4810 <[^>]*> nop ++0+4814 <[^>]*> nop ++0+4818 <[^>]*> nop ++0+481c <[^>]*> nop ++0+4820 <[^>]*> nop ++0+4824 <[^>]*> nop ++0+4828 <[^>]*> nop ++0+482c <[^>]*> nop ++0+4830 <[^>]*> nop ++0+4834 <[^>]*> nop ++0+4838 <[^>]*> nop ++0+483c <[^>]*> nop ++0+4840 <[^>]*> nop ++0+4844 <[^>]*> nop ++0+4848 <[^>]*> nop ++0+484c <[^>]*> nop ++0+4850 <[^>]*> nop ++0+4854 <[^>]*> nop ++0+4858 <[^>]*> nop ++0+485c <[^>]*> nop ++0+4860 <[^>]*> nop ++0+4864 <[^>]*> nop ++0+4868 <[^>]*> nop ++0+486c <[^>]*> nop ++0+4870 <[^>]*> nop ++0+4874 <[^>]*> nop ++0+4878 <[^>]*> nop ++0+487c <[^>]*> nop ++0+4880 <[^>]*> nop ++0+4884 <[^>]*> nop ++0+4888 <[^>]*> nop ++0+488c <[^>]*> nop ++0+4890 <[^>]*> nop ++0+4894 <[^>]*> nop ++0+4898 <[^>]*> nop ++0+489c <[^>]*> nop ++0+48a0 <[^>]*> nop ++0+48a4 <[^>]*> nop ++0+48a8 <[^>]*> nop ++0+48ac <[^>]*> nop ++0+48b0 <[^>]*> nop ++0+48b4 <[^>]*> nop ++0+48b8 <[^>]*> nop ++0+48bc <[^>]*> nop ++0+48c0 <[^>]*> nop ++0+48c4 <[^>]*> nop ++0+48c8 <[^>]*> nop ++0+48cc <[^>]*> nop ++0+48d0 <[^>]*> nop ++0+48d4 <[^>]*> nop ++0+48d8 <[^>]*> nop ++0+48dc <[^>]*> nop ++0+48e0 <[^>]*> nop ++0+48e4 <[^>]*> nop ++0+48e8 <[^>]*> nop ++0+48ec <[^>]*> nop ++0+48f0 <[^>]*> nop ++0+48f4 <[^>]*> nop ++0+48f8 <[^>]*> nop ++0+48fc <[^>]*> nop ++0+4900 <[^>]*> nop ++0+4904 <[^>]*> nop ++0+4908 <[^>]*> nop ++0+490c <[^>]*> nop ++0+4910 <[^>]*> nop ++0+4914 <[^>]*> nop ++0+4918 <[^>]*> nop ++0+491c <[^>]*> nop ++0+4920 <[^>]*> nop ++0+4924 <[^>]*> nop ++0+4928 <[^>]*> nop ++0+492c <[^>]*> nop ++0+4930 <[^>]*> nop ++0+4934 <[^>]*> nop ++0+4938 <[^>]*> nop ++0+493c <[^>]*> nop ++0+4940 <[^>]*> nop ++0+4944 <[^>]*> nop ++0+4948 <[^>]*> nop ++0+494c <[^>]*> nop ++0+4950 <[^>]*> nop ++0+4954 <[^>]*> nop ++0+4958 <[^>]*> nop ++0+495c <[^>]*> nop ++0+4960 <[^>]*> nop ++0+4964 <[^>]*> nop ++0+4968 <[^>]*> nop ++0+496c <[^>]*> nop ++0+4970 <[^>]*> nop ++0+4974 <[^>]*> nop ++0+4978 <[^>]*> nop ++0+497c <[^>]*> nop ++0+4980 <[^>]*> nop ++0+4984 <[^>]*> nop ++0+4988 <[^>]*> nop ++0+498c <[^>]*> nop ++0+4990 <[^>]*> nop ++0+4994 <[^>]*> nop ++0+4998 <[^>]*> nop ++0+499c <[^>]*> nop ++0+49a0 <[^>]*> nop ++0+49a4 <[^>]*> nop ++0+49a8 <[^>]*> nop ++0+49ac <[^>]*> nop ++0+49b0 <[^>]*> nop ++0+49b4 <[^>]*> nop ++0+49b8 <[^>]*> nop ++0+49bc <[^>]*> nop ++0+49c0 <[^>]*> nop ++0+49c4 <[^>]*> nop ++0+49c8 <[^>]*> nop ++0+49cc <[^>]*> nop ++0+49d0 <[^>]*> nop ++0+49d4 <[^>]*> nop ++0+49d8 <[^>]*> nop ++0+49dc <[^>]*> nop ++0+49e0 <[^>]*> nop ++0+49e4 <[^>]*> nop ++0+49e8 <[^>]*> nop ++0+49ec <[^>]*> nop ++0+49f0 <[^>]*> nop ++0+49f4 <[^>]*> nop ++0+49f8 <[^>]*> nop ++0+49fc <[^>]*> nop ++0+4a00 <[^>]*> nop ++0+4a04 <[^>]*> nop ++0+4a08 <[^>]*> nop ++0+4a0c <[^>]*> nop ++0+4a10 <[^>]*> nop ++0+4a14 <[^>]*> nop ++0+4a18 <[^>]*> nop ++0+4a1c <[^>]*> nop ++0+4a20 <[^>]*> nop ++0+4a24 <[^>]*> nop ++0+4a28 <[^>]*> nop ++0+4a2c <[^>]*> nop ++0+4a30 <[^>]*> nop ++0+4a34 <[^>]*> nop ++0+4a38 <[^>]*> nop ++0+4a3c <[^>]*> nop ++0+4a40 <[^>]*> nop ++0+4a44 <[^>]*> nop ++0+4a48 <[^>]*> nop ++0+4a4c <[^>]*> nop ++0+4a50 <[^>]*> nop ++0+4a54 <[^>]*> nop ++0+4a58 <[^>]*> nop ++0+4a5c <[^>]*> nop ++0+4a60 <[^>]*> nop ++0+4a64 <[^>]*> nop ++0+4a68 <[^>]*> nop ++0+4a6c <[^>]*> nop ++0+4a70 <[^>]*> nop ++0+4a74 <[^>]*> nop ++0+4a78 <[^>]*> nop ++0+4a7c <[^>]*> nop ++0+4a80 <[^>]*> nop ++0+4a84 <[^>]*> nop ++0+4a88 <[^>]*> nop ++0+4a8c <[^>]*> nop ++0+4a90 <[^>]*> nop ++0+4a94 <[^>]*> nop ++0+4a98 <[^>]*> nop ++0+4a9c <[^>]*> nop ++0+4aa0 <[^>]*> nop ++0+4aa4 <[^>]*> nop ++0+4aa8 <[^>]*> nop ++0+4aac <[^>]*> nop ++0+4ab0 <[^>]*> nop ++0+4ab4 <[^>]*> nop ++0+4ab8 <[^>]*> nop ++0+4abc <[^>]*> nop ++0+4ac0 <[^>]*> nop ++0+4ac4 <[^>]*> nop ++0+4ac8 <[^>]*> nop ++0+4acc <[^>]*> nop ++0+4ad0 <[^>]*> nop ++0+4ad4 <[^>]*> nop ++0+4ad8 <[^>]*> nop ++0+4adc <[^>]*> nop ++0+4ae0 <[^>]*> nop ++0+4ae4 <[^>]*> nop ++0+4ae8 <[^>]*> nop ++0+4aec <[^>]*> nop ++0+4af0 <[^>]*> nop ++0+4af4 <[^>]*> nop ++0+4af8 <[^>]*> nop ++0+4afc <[^>]*> nop ++0+4b00 <[^>]*> nop ++0+4b04 <[^>]*> nop ++0+4b08 <[^>]*> nop ++0+4b0c <[^>]*> nop ++0+4b10 <[^>]*> nop ++0+4b14 <[^>]*> nop ++0+4b18 <[^>]*> nop ++0+4b1c <[^>]*> nop ++0+4b20 <[^>]*> nop ++0+4b24 <[^>]*> nop ++0+4b28 <[^>]*> nop ++0+4b2c <[^>]*> nop ++0+4b30 <[^>]*> nop ++0+4b34 <[^>]*> nop ++0+4b38 <[^>]*> nop ++0+4b3c <[^>]*> nop ++0+4b40 <[^>]*> nop ++0+4b44 <[^>]*> nop ++0+4b48 <[^>]*> nop ++0+4b4c <[^>]*> nop ++0+4b50 <[^>]*> nop ++0+4b54 <[^>]*> nop ++0+4b58 <[^>]*> nop ++0+4b5c <[^>]*> nop ++0+4b60 <[^>]*> nop ++0+4b64 <[^>]*> nop ++0+4b68 <[^>]*> nop ++0+4b6c <[^>]*> nop ++0+4b70 <[^>]*> nop ++0+4b74 <[^>]*> nop ++0+4b78 <[^>]*> nop ++0+4b7c <[^>]*> nop ++0+4b80 <[^>]*> nop ++0+4b84 <[^>]*> nop ++0+4b88 <[^>]*> nop ++0+4b8c <[^>]*> nop ++0+4b90 <[^>]*> nop ++0+4b94 <[^>]*> nop ++0+4b98 <[^>]*> nop ++0+4b9c <[^>]*> nop ++0+4ba0 <[^>]*> nop ++0+4ba4 <[^>]*> nop ++0+4ba8 <[^>]*> nop ++0+4bac <[^>]*> nop ++0+4bb0 <[^>]*> nop ++0+4bb4 <[^>]*> nop ++0+4bb8 <[^>]*> nop ++0+4bbc <[^>]*> nop ++0+4bc0 <[^>]*> nop ++0+4bc4 <[^>]*> nop ++0+4bc8 <[^>]*> nop ++0+4bcc <[^>]*> nop ++0+4bd0 <[^>]*> nop ++0+4bd4 <[^>]*> nop ++0+4bd8 <[^>]*> nop ++0+4bdc <[^>]*> nop ++0+4be0 <[^>]*> nop ++0+4be4 <[^>]*> nop ++0+4be8 <[^>]*> nop ++0+4bec <[^>]*> nop ++0+4bf0 <[^>]*> nop ++0+4bf4 <[^>]*> nop ++0+4bf8 <[^>]*> nop ++0+4bfc <[^>]*> nop ++0+4c00 <[^>]*> nop ++0+4c04 <[^>]*> nop ++0+4c08 <[^>]*> nop ++0+4c0c <[^>]*> nop ++0+4c10 <[^>]*> nop ++0+4c14 <[^>]*> nop ++0+4c18 <[^>]*> nop ++0+4c1c <[^>]*> nop ++0+4c20 <[^>]*> nop ++0+4c24 <[^>]*> nop ++0+4c28 <[^>]*> nop ++0+4c2c <[^>]*> nop ++0+4c30 <[^>]*> nop ++0+4c34 <[^>]*> nop ++0+4c38 <[^>]*> nop ++0+4c3c <[^>]*> nop ++0+4c40 <[^>]*> nop ++0+4c44 <[^>]*> nop ++0+4c48 <[^>]*> nop ++0+4c4c <[^>]*> nop ++0+4c50 <[^>]*> nop ++0+4c54 <[^>]*> nop ++0+4c58 <[^>]*> nop ++0+4c5c <[^>]*> nop ++0+4c60 <[^>]*> nop ++0+4c64 <[^>]*> nop ++0+4c68 <[^>]*> nop ++0+4c6c <[^>]*> nop ++0+4c70 <[^>]*> nop ++0+4c74 <[^>]*> nop ++0+4c78 <[^>]*> nop ++0+4c7c <[^>]*> nop ++0+4c80 <[^>]*> nop ++0+4c84 <[^>]*> nop ++0+4c88 <[^>]*> nop ++0+4c8c <[^>]*> nop ++0+4c90 <[^>]*> nop ++0+4c94 <[^>]*> nop ++0+4c98 <[^>]*> nop ++0+4c9c <[^>]*> nop ++0+4ca0 <[^>]*> nop ++0+4ca4 <[^>]*> nop ++0+4ca8 <[^>]*> nop ++0+4cac <[^>]*> nop ++0+4cb0 <[^>]*> nop ++0+4cb4 <[^>]*> nop ++0+4cb8 <[^>]*> nop ++0+4cbc <[^>]*> nop ++0+4cc0 <[^>]*> nop ++0+4cc4 <[^>]*> nop ++0+4cc8 <[^>]*> nop ++0+4ccc <[^>]*> nop ++0+4cd0 <[^>]*> nop ++0+4cd4 <[^>]*> nop ++0+4cd8 <[^>]*> nop ++0+4cdc <[^>]*> nop ++0+4ce0 <[^>]*> nop ++0+4ce4 <[^>]*> nop ++0+4ce8 <[^>]*> nop ++0+4cec <[^>]*> nop ++0+4cf0 <[^>]*> nop ++0+4cf4 <[^>]*> nop ++0+4cf8 <[^>]*> nop ++0+4cfc <[^>]*> nop ++0+4d00 <[^>]*> nop ++0+4d04 <[^>]*> nop ++0+4d08 <[^>]*> nop ++0+4d0c <[^>]*> nop ++0+4d10 <[^>]*> nop ++0+4d14 <[^>]*> nop ++0+4d18 <[^>]*> nop ++0+4d1c <[^>]*> nop ++0+4d20 <[^>]*> nop ++0+4d24 <[^>]*> nop ++0+4d28 <[^>]*> nop ++0+4d2c <[^>]*> nop ++0+4d30 <[^>]*> nop ++0+4d34 <[^>]*> nop ++0+4d38 <[^>]*> nop ++0+4d3c <[^>]*> nop ++0+4d40 <[^>]*> nop ++0+4d44 <[^>]*> nop ++0+4d48 <[^>]*> nop ++0+4d4c <[^>]*> nop ++0+4d50 <[^>]*> nop ++0+4d54 <[^>]*> nop ++0+4d58 <[^>]*> nop ++0+4d5c <[^>]*> nop ++0+4d60 <[^>]*> nop ++0+4d64 <[^>]*> nop ++0+4d68 <[^>]*> nop ++0+4d6c <[^>]*> nop ++0+4d70 <[^>]*> nop ++0+4d74 <[^>]*> nop ++0+4d78 <[^>]*> nop ++0+4d7c <[^>]*> nop ++0+4d80 <[^>]*> nop ++0+4d84 <[^>]*> nop ++0+4d88 <[^>]*> nop ++0+4d8c <[^>]*> nop ++0+4d90 <[^>]*> nop ++0+4d94 <[^>]*> nop ++0+4d98 <[^>]*> nop ++0+4d9c <[^>]*> nop ++0+4da0 <[^>]*> nop ++0+4da4 <[^>]*> nop ++0+4da8 <[^>]*> nop ++0+4dac <[^>]*> nop ++0+4db0 <[^>]*> nop ++0+4db4 <[^>]*> nop ++0+4db8 <[^>]*> nop ++0+4dbc <[^>]*> nop ++0+4dc0 <[^>]*> nop ++0+4dc4 <[^>]*> nop ++0+4dc8 <[^>]*> nop ++0+4dcc <[^>]*> nop ++0+4dd0 <[^>]*> nop ++0+4dd4 <[^>]*> nop ++0+4dd8 <[^>]*> nop ++0+4ddc <[^>]*> nop ++0+4de0 <[^>]*> nop ++0+4de4 <[^>]*> nop ++0+4de8 <[^>]*> nop ++0+4dec <[^>]*> nop ++0+4df0 <[^>]*> nop ++0+4df4 <[^>]*> nop ++0+4df8 <[^>]*> nop ++0+4dfc <[^>]*> nop ++0+4e00 <[^>]*> nop ++0+4e04 <[^>]*> nop ++0+4e08 <[^>]*> nop ++0+4e0c <[^>]*> nop ++0+4e10 <[^>]*> nop ++0+4e14 <[^>]*> nop ++0+4e18 <[^>]*> nop ++0+4e1c <[^>]*> nop ++0+4e20 <[^>]*> nop ++0+4e24 <[^>]*> nop ++0+4e28 <[^>]*> nop ++0+4e2c <[^>]*> nop ++0+4e30 <[^>]*> nop ++0+4e34 <[^>]*> nop ++0+4e38 <[^>]*> nop ++0+4e3c <[^>]*> nop ++0+4e40 <[^>]*> nop ++0+4e44 <[^>]*> nop ++0+4e48 <[^>]*> nop ++0+4e4c <[^>]*> nop ++0+4e50 <[^>]*> nop ++0+4e54 <[^>]*> nop ++0+4e58 <[^>]*> nop ++0+4e5c <[^>]*> nop ++0+4e60 <[^>]*> nop ++0+4e64 <[^>]*> nop ++0+4e68 <[^>]*> nop ++0+4e6c <[^>]*> nop ++0+4e70 <[^>]*> nop ++0+4e74 <[^>]*> nop ++0+4e78 <[^>]*> nop ++0+4e7c <[^>]*> nop ++0+4e80 <[^>]*> nop ++0+4e84 <[^>]*> nop ++0+4e88 <[^>]*> nop ++0+4e8c <[^>]*> nop ++0+4e90 <[^>]*> nop ++0+4e94 <[^>]*> nop ++0+4e98 <[^>]*> nop ++0+4e9c <[^>]*> nop ++0+4ea0 <[^>]*> nop ++0+4ea4 <[^>]*> nop ++0+4ea8 <[^>]*> nop ++0+4eac <[^>]*> nop ++0+4eb0 <[^>]*> nop ++0+4eb4 <[^>]*> nop ++0+4eb8 <[^>]*> nop ++0+4ebc <[^>]*> nop ++0+4ec0 <[^>]*> nop ++0+4ec4 <[^>]*> nop ++0+4ec8 <[^>]*> nop ++0+4ecc <[^>]*> nop ++0+4ed0 <[^>]*> nop ++0+4ed4 <[^>]*> nop ++0+4ed8 <[^>]*> nop ++0+4edc <[^>]*> nop ++0+4ee0 <[^>]*> nop ++0+4ee4 <[^>]*> nop ++0+4ee8 <[^>]*> nop ++0+4eec <[^>]*> nop ++0+4ef0 <[^>]*> nop ++0+4ef4 <[^>]*> nop ++0+4ef8 <[^>]*> nop ++0+4efc <[^>]*> nop ++0+4f00 <[^>]*> nop ++0+4f04 <[^>]*> nop ++0+4f08 <[^>]*> nop ++0+4f0c <[^>]*> nop ++0+4f10 <[^>]*> nop ++0+4f14 <[^>]*> nop ++0+4f18 <[^>]*> nop ++0+4f1c <[^>]*> nop ++0+4f20 <[^>]*> nop ++0+4f24 <[^>]*> nop ++0+4f28 <[^>]*> nop ++0+4f2c <[^>]*> nop ++0+4f30 <[^>]*> nop ++0+4f34 <[^>]*> nop ++0+4f38 <[^>]*> nop ++0+4f3c <[^>]*> nop ++0+4f40 <[^>]*> nop ++0+4f44 <[^>]*> nop ++0+4f48 <[^>]*> nop ++0+4f4c <[^>]*> nop ++0+4f50 <[^>]*> nop ++0+4f54 <[^>]*> nop ++0+4f58 <[^>]*> nop ++0+4f5c <[^>]*> nop ++0+4f60 <[^>]*> nop ++0+4f64 <[^>]*> nop ++0+4f68 <[^>]*> nop ++0+4f6c <[^>]*> nop ++0+4f70 <[^>]*> nop ++0+4f74 <[^>]*> nop ++0+4f78 <[^>]*> nop ++0+4f7c <[^>]*> nop ++0+4f80 <[^>]*> nop ++0+4f84 <[^>]*> nop ++0+4f88 <[^>]*> nop ++0+4f8c <[^>]*> nop ++0+4f90 <[^>]*> nop ++0+4f94 <[^>]*> nop ++0+4f98 <[^>]*> nop ++0+4f9c <[^>]*> nop ++0+4fa0 <[^>]*> nop ++0+4fa4 <[^>]*> nop ++0+4fa8 <[^>]*> nop ++0+4fac <[^>]*> nop ++0+4fb0 <[^>]*> nop ++0+4fb4 <[^>]*> nop ++0+4fb8 <[^>]*> nop ++0+4fbc <[^>]*> nop ++0+4fc0 <[^>]*> nop ++0+4fc4 <[^>]*> nop ++0+4fc8 <[^>]*> nop ++0+4fcc <[^>]*> nop ++0+4fd0 <[^>]*> nop ++0+4fd4 <[^>]*> nop ++0+4fd8 <[^>]*> nop ++0+4fdc <[^>]*> nop ++0+4fe0 <[^>]*> nop ++0+4fe4 <[^>]*> nop ++0+4fe8 <[^>]*> nop ++0+4fec <[^>]*> nop ++0+4ff0 <[^>]*> nop ++0+4ff4 <[^>]*> nop ++0+4ff8 <[^>]*> nop ++0+4ffc <[^>]*> nop ++0+5000 <[^>]*> nop ++0+5004 <[^>]*> nop ++0+5008 <[^>]*> nop ++0+500c <[^>]*> nop ++0+5010 <[^>]*> nop ++0+5014 <[^>]*> nop ++0+5018 <[^>]*> nop ++0+501c <[^>]*> nop ++0+5020 <[^>]*> nop ++0+5024 <[^>]*> nop ++0+5028 <[^>]*> nop ++0+502c <[^>]*> nop ++0+5030 <[^>]*> nop ++0+5034 <[^>]*> nop ++0+5038 <[^>]*> nop ++0+503c <[^>]*> nop ++0+5040 <[^>]*> nop ++0+5044 <[^>]*> nop ++0+5048 <[^>]*> nop ++0+504c <[^>]*> nop ++0+5050 <[^>]*> nop ++0+5054 <[^>]*> nop ++0+5058 <[^>]*> nop ++0+505c <[^>]*> nop ++0+5060 <[^>]*> nop ++0+5064 <[^>]*> nop ++0+5068 <[^>]*> nop ++0+506c <[^>]*> nop ++0+5070 <[^>]*> nop ++0+5074 <[^>]*> nop ++0+5078 <[^>]*> nop ++0+507c <[^>]*> nop ++0+5080 <[^>]*> nop ++0+5084 <[^>]*> nop ++0+5088 <[^>]*> nop ++0+508c <[^>]*> nop ++0+5090 <[^>]*> nop ++0+5094 <[^>]*> nop ++0+5098 <[^>]*> nop ++0+509c <[^>]*> nop ++0+50a0 <[^>]*> nop ++0+50a4 <[^>]*> nop ++0+50a8 <[^>]*> nop ++0+50ac <[^>]*> nop ++0+50b0 <[^>]*> nop ++0+50b4 <[^>]*> nop ++0+50b8 <[^>]*> nop ++0+50bc <[^>]*> nop ++0+50c0 <[^>]*> nop ++0+50c4 <[^>]*> nop ++0+50c8 <[^>]*> nop ++0+50cc <[^>]*> nop ++0+50d0 <[^>]*> nop ++0+50d4 <[^>]*> nop ++0+50d8 <[^>]*> nop ++0+50dc <[^>]*> nop ++0+50e0 <[^>]*> nop ++0+50e4 <[^>]*> nop ++0+50e8 <[^>]*> nop ++0+50ec <[^>]*> nop ++0+50f0 <[^>]*> nop ++0+50f4 <[^>]*> nop ++0+50f8 <[^>]*> nop ++0+50fc <[^>]*> nop ++0+5100 <[^>]*> nop ++0+5104 <[^>]*> nop ++0+5108 <[^>]*> nop ++0+510c <[^>]*> nop ++0+5110 <[^>]*> nop ++0+5114 <[^>]*> nop ++0+5118 <[^>]*> nop ++0+511c <[^>]*> nop ++0+5120 <[^>]*> nop ++0+5124 <[^>]*> nop ++0+5128 <[^>]*> nop ++0+512c <[^>]*> nop ++0+5130 <[^>]*> nop ++0+5134 <[^>]*> nop ++0+5138 <[^>]*> nop ++0+513c <[^>]*> nop ++0+5140 <[^>]*> nop ++0+5144 <[^>]*> nop ++0+5148 <[^>]*> nop ++0+514c <[^>]*> nop ++0+5150 <[^>]*> nop ++0+5154 <[^>]*> nop ++0+5158 <[^>]*> nop ++0+515c <[^>]*> nop ++0+5160 <[^>]*> nop ++0+5164 <[^>]*> nop ++0+5168 <[^>]*> nop ++0+516c <[^>]*> nop ++0+5170 <[^>]*> nop ++0+5174 <[^>]*> nop ++0+5178 <[^>]*> nop ++0+517c <[^>]*> nop ++0+5180 <[^>]*> nop ++0+5184 <[^>]*> nop ++0+5188 <[^>]*> nop ++0+518c <[^>]*> nop ++0+5190 <[^>]*> nop ++0+5194 <[^>]*> nop ++0+5198 <[^>]*> nop ++0+519c <[^>]*> nop ++0+51a0 <[^>]*> nop ++0+51a4 <[^>]*> nop ++0+51a8 <[^>]*> nop ++0+51ac <[^>]*> nop ++0+51b0 <[^>]*> nop ++0+51b4 <[^>]*> nop ++0+51b8 <[^>]*> nop ++0+51bc <[^>]*> nop ++0+51c0 <[^>]*> nop ++0+51c4 <[^>]*> nop ++0+51c8 <[^>]*> nop ++0+51cc <[^>]*> nop ++0+51d0 <[^>]*> nop ++0+51d4 <[^>]*> nop ++0+51d8 <[^>]*> nop ++0+51dc <[^>]*> nop ++0+51e0 <[^>]*> nop ++0+51e4 <[^>]*> nop ++0+51e8 <[^>]*> nop ++0+51ec <[^>]*> nop ++0+51f0 <[^>]*> nop ++0+51f4 <[^>]*> nop ++0+51f8 <[^>]*> nop ++0+51fc <[^>]*> nop ++0+5200 <[^>]*> nop ++0+5204 <[^>]*> nop ++0+5208 <[^>]*> nop ++0+520c <[^>]*> nop ++0+5210 <[^>]*> nop ++0+5214 <[^>]*> nop ++0+5218 <[^>]*> nop ++0+521c <[^>]*> nop ++0+5220 <[^>]*> nop ++0+5224 <[^>]*> nop ++0+5228 <[^>]*> nop ++0+522c <[^>]*> nop ++0+5230 <[^>]*> nop ++0+5234 <[^>]*> nop ++0+5238 <[^>]*> nop ++0+523c <[^>]*> nop ++0+5240 <[^>]*> nop ++0+5244 <[^>]*> nop ++0+5248 <[^>]*> nop ++0+524c <[^>]*> nop ++0+5250 <[^>]*> nop ++0+5254 <[^>]*> nop ++0+5258 <[^>]*> nop ++0+525c <[^>]*> nop ++0+5260 <[^>]*> nop ++0+5264 <[^>]*> nop ++0+5268 <[^>]*> nop ++0+526c <[^>]*> nop ++0+5270 <[^>]*> nop ++0+5274 <[^>]*> nop ++0+5278 <[^>]*> nop ++0+527c <[^>]*> nop ++0+5280 <[^>]*> nop ++0+5284 <[^>]*> nop ++0+5288 <[^>]*> nop ++0+528c <[^>]*> nop ++0+5290 <[^>]*> nop ++0+5294 <[^>]*> nop ++0+5298 <[^>]*> nop ++0+529c <[^>]*> nop ++0+52a0 <[^>]*> nop ++0+52a4 <[^>]*> nop ++0+52a8 <[^>]*> nop ++0+52ac <[^>]*> nop ++0+52b0 <[^>]*> nop ++0+52b4 <[^>]*> nop ++0+52b8 <[^>]*> nop ++0+52bc <[^>]*> nop ++0+52c0 <[^>]*> nop ++0+52c4 <[^>]*> nop ++0+52c8 <[^>]*> nop ++0+52cc <[^>]*> nop ++0+52d0 <[^>]*> nop ++0+52d4 <[^>]*> nop ++0+52d8 <[^>]*> nop ++0+52dc <[^>]*> nop ++0+52e0 <[^>]*> nop ++0+52e4 <[^>]*> nop ++0+52e8 <[^>]*> nop ++0+52ec <[^>]*> nop ++0+52f0 <[^>]*> nop ++0+52f4 <[^>]*> nop ++0+52f8 <[^>]*> nop ++0+52fc <[^>]*> nop ++0+5300 <[^>]*> nop ++0+5304 <[^>]*> nop ++0+5308 <[^>]*> nop ++0+530c <[^>]*> nop ++0+5310 <[^>]*> nop ++0+5314 <[^>]*> nop ++0+5318 <[^>]*> nop ++0+531c <[^>]*> nop ++0+5320 <[^>]*> nop ++0+5324 <[^>]*> nop ++0+5328 <[^>]*> nop ++0+532c <[^>]*> nop ++0+5330 <[^>]*> nop ++0+5334 <[^>]*> nop ++0+5338 <[^>]*> nop ++0+533c <[^>]*> nop ++0+5340 <[^>]*> nop ++0+5344 <[^>]*> nop ++0+5348 <[^>]*> nop ++0+534c <[^>]*> nop ++0+5350 <[^>]*> nop ++0+5354 <[^>]*> nop ++0+5358 <[^>]*> nop ++0+535c <[^>]*> nop ++0+5360 <[^>]*> nop ++0+5364 <[^>]*> nop ++0+5368 <[^>]*> nop ++0+536c <[^>]*> nop ++0+5370 <[^>]*> nop ++0+5374 <[^>]*> nop ++0+5378 <[^>]*> nop ++0+537c <[^>]*> nop ++0+5380 <[^>]*> nop ++0+5384 <[^>]*> nop ++0+5388 <[^>]*> nop ++0+538c <[^>]*> nop ++0+5390 <[^>]*> nop ++0+5394 <[^>]*> nop ++0+5398 <[^>]*> nop ++0+539c <[^>]*> nop ++0+53a0 <[^>]*> nop ++0+53a4 <[^>]*> nop ++0+53a8 <[^>]*> nop ++0+53ac <[^>]*> nop ++0+53b0 <[^>]*> nop ++0+53b4 <[^>]*> nop ++0+53b8 <[^>]*> nop ++0+53bc <[^>]*> nop ++0+53c0 <[^>]*> nop ++0+53c4 <[^>]*> nop ++0+53c8 <[^>]*> nop ++0+53cc <[^>]*> nop ++0+53d0 <[^>]*> nop ++0+53d4 <[^>]*> nop ++0+53d8 <[^>]*> nop ++0+53dc <[^>]*> nop ++0+53e0 <[^>]*> nop ++0+53e4 <[^>]*> nop ++0+53e8 <[^>]*> nop ++0+53ec <[^>]*> nop ++0+53f0 <[^>]*> nop ++0+53f4 <[^>]*> nop ++0+53f8 <[^>]*> nop ++0+53fc <[^>]*> nop ++0+5400 <[^>]*> nop ++0+5404 <[^>]*> nop ++0+5408 <[^>]*> nop ++0+540c <[^>]*> nop ++0+5410 <[^>]*> nop ++0+5414 <[^>]*> nop ++0+5418 <[^>]*> nop ++0+541c <[^>]*> nop ++0+5420 <[^>]*> nop ++0+5424 <[^>]*> nop ++0+5428 <[^>]*> nop ++0+542c <[^>]*> nop ++0+5430 <[^>]*> nop ++0+5434 <[^>]*> nop ++0+5438 <[^>]*> nop ++0+543c <[^>]*> nop ++0+5440 <[^>]*> nop ++0+5444 <[^>]*> nop ++0+5448 <[^>]*> nop ++0+544c <[^>]*> nop ++0+5450 <[^>]*> nop ++0+5454 <[^>]*> nop ++0+5458 <[^>]*> nop ++0+545c <[^>]*> nop ++0+5460 <[^>]*> nop ++0+5464 <[^>]*> nop ++0+5468 <[^>]*> nop ++0+546c <[^>]*> nop ++0+5470 <[^>]*> nop ++0+5474 <[^>]*> nop ++0+5478 <[^>]*> nop ++0+547c <[^>]*> nop ++0+5480 <[^>]*> nop ++0+5484 <[^>]*> nop ++0+5488 <[^>]*> nop ++0+548c <[^>]*> nop ++0+5490 <[^>]*> nop ++0+5494 <[^>]*> nop ++0+5498 <[^>]*> nop ++0+549c <[^>]*> nop ++0+54a0 <[^>]*> nop ++0+54a4 <[^>]*> nop ++0+54a8 <[^>]*> nop ++0+54ac <[^>]*> nop ++0+54b0 <[^>]*> nop ++0+54b4 <[^>]*> nop ++0+54b8 <[^>]*> nop ++0+54bc <[^>]*> nop ++0+54c0 <[^>]*> nop ++0+54c4 <[^>]*> nop ++0+54c8 <[^>]*> nop ++0+54cc <[^>]*> nop ++0+54d0 <[^>]*> nop ++0+54d4 <[^>]*> nop ++0+54d8 <[^>]*> nop ++0+54dc <[^>]*> nop ++0+54e0 <[^>]*> nop ++0+54e4 <[^>]*> nop ++0+54e8 <[^>]*> nop ++0+54ec <[^>]*> nop ++0+54f0 <[^>]*> nop ++0+54f4 <[^>]*> nop ++0+54f8 <[^>]*> nop ++0+54fc <[^>]*> nop ++0+5500 <[^>]*> nop ++0+5504 <[^>]*> nop ++0+5508 <[^>]*> nop ++0+550c <[^>]*> nop ++0+5510 <[^>]*> nop ++0+5514 <[^>]*> nop ++0+5518 <[^>]*> nop ++0+551c <[^>]*> nop ++0+5520 <[^>]*> nop ++0+5524 <[^>]*> nop ++0+5528 <[^>]*> nop ++0+552c <[^>]*> nop ++0+5530 <[^>]*> nop ++0+5534 <[^>]*> nop ++0+5538 <[^>]*> nop ++0+553c <[^>]*> nop ++0+5540 <[^>]*> nop ++0+5544 <[^>]*> nop ++0+5548 <[^>]*> nop ++0+554c <[^>]*> nop ++0+5550 <[^>]*> nop ++0+5554 <[^>]*> nop ++0+5558 <[^>]*> nop ++0+555c <[^>]*> nop ++0+5560 <[^>]*> nop ++0+5564 <[^>]*> nop ++0+5568 <[^>]*> nop ++0+556c <[^>]*> nop ++0+5570 <[^>]*> nop ++0+5574 <[^>]*> nop ++0+5578 <[^>]*> nop ++0+557c <[^>]*> nop ++0+5580 <[^>]*> nop ++0+5584 <[^>]*> nop ++0+5588 <[^>]*> nop ++0+558c <[^>]*> nop ++0+5590 <[^>]*> nop ++0+5594 <[^>]*> nop ++0+5598 <[^>]*> nop ++0+559c <[^>]*> nop ++0+55a0 <[^>]*> nop ++0+55a4 <[^>]*> nop ++0+55a8 <[^>]*> nop ++0+55ac <[^>]*> nop ++0+55b0 <[^>]*> nop ++0+55b4 <[^>]*> nop ++0+55b8 <[^>]*> nop ++0+55bc <[^>]*> nop ++0+55c0 <[^>]*> nop ++0+55c4 <[^>]*> nop ++0+55c8 <[^>]*> nop ++0+55cc <[^>]*> nop ++0+55d0 <[^>]*> nop ++0+55d4 <[^>]*> nop ++0+55d8 <[^>]*> nop ++0+55dc <[^>]*> nop ++0+55e0 <[^>]*> nop ++0+55e4 <[^>]*> nop ++0+55e8 <[^>]*> nop ++0+55ec <[^>]*> nop ++0+55f0 <[^>]*> nop ++0+55f4 <[^>]*> nop ++0+55f8 <[^>]*> nop ++0+55fc <[^>]*> nop ++0+5600 <[^>]*> nop ++0+5604 <[^>]*> nop ++0+5608 <[^>]*> nop ++0+560c <[^>]*> nop ++0+5610 <[^>]*> nop ++0+5614 <[^>]*> nop ++0+5618 <[^>]*> nop ++0+561c <[^>]*> nop ++0+5620 <[^>]*> nop ++0+5624 <[^>]*> nop ++0+5628 <[^>]*> nop ++0+562c <[^>]*> nop ++0+5630 <[^>]*> nop ++0+5634 <[^>]*> nop ++0+5638 <[^>]*> nop ++0+563c <[^>]*> nop ++0+5640 <[^>]*> nop ++0+5644 <[^>]*> nop ++0+5648 <[^>]*> nop ++0+564c <[^>]*> nop ++0+5650 <[^>]*> nop ++0+5654 <[^>]*> nop ++0+5658 <[^>]*> nop ++0+565c <[^>]*> nop ++0+5660 <[^>]*> nop ++0+5664 <[^>]*> nop ++0+5668 <[^>]*> nop ++0+566c <[^>]*> nop ++0+5670 <[^>]*> nop ++0+5674 <[^>]*> nop ++0+5678 <[^>]*> nop ++0+567c <[^>]*> nop ++0+5680 <[^>]*> nop ++0+5684 <[^>]*> nop ++0+5688 <[^>]*> nop ++0+568c <[^>]*> nop ++0+5690 <[^>]*> nop ++0+5694 <[^>]*> nop ++0+5698 <[^>]*> nop ++0+569c <[^>]*> nop ++0+56a0 <[^>]*> nop ++0+56a4 <[^>]*> nop ++0+56a8 <[^>]*> nop ++0+56ac <[^>]*> nop ++0+56b0 <[^>]*> nop ++0+56b4 <[^>]*> nop ++0+56b8 <[^>]*> nop ++0+56bc <[^>]*> nop ++0+56c0 <[^>]*> nop ++0+56c4 <[^>]*> nop ++0+56c8 <[^>]*> nop ++0+56cc <[^>]*> nop ++0+56d0 <[^>]*> nop ++0+56d4 <[^>]*> nop ++0+56d8 <[^>]*> nop ++0+56dc <[^>]*> nop ++0+56e0 <[^>]*> nop ++0+56e4 <[^>]*> nop ++0+56e8 <[^>]*> nop ++0+56ec <[^>]*> nop ++0+56f0 <[^>]*> nop ++0+56f4 <[^>]*> nop ++0+56f8 <[^>]*> nop ++0+56fc <[^>]*> nop ++0+5700 <[^>]*> nop ++0+5704 <[^>]*> nop ++0+5708 <[^>]*> nop ++0+570c <[^>]*> nop ++0+5710 <[^>]*> nop ++0+5714 <[^>]*> nop ++0+5718 <[^>]*> nop ++0+571c <[^>]*> nop ++0+5720 <[^>]*> nop ++0+5724 <[^>]*> nop ++0+5728 <[^>]*> nop ++0+572c <[^>]*> nop ++0+5730 <[^>]*> nop ++0+5734 <[^>]*> nop ++0+5738 <[^>]*> nop ++0+573c <[^>]*> nop ++0+5740 <[^>]*> nop ++0+5744 <[^>]*> nop ++0+5748 <[^>]*> nop ++0+574c <[^>]*> nop ++0+5750 <[^>]*> nop ++0+5754 <[^>]*> nop ++0+5758 <[^>]*> nop ++0+575c <[^>]*> nop ++0+5760 <[^>]*> nop ++0+5764 <[^>]*> nop ++0+5768 <[^>]*> nop ++0+576c <[^>]*> nop ++0+5770 <[^>]*> nop ++0+5774 <[^>]*> nop ++0+5778 <[^>]*> nop ++0+577c <[^>]*> nop ++0+5780 <[^>]*> nop ++0+5784 <[^>]*> nop ++0+5788 <[^>]*> nop ++0+578c <[^>]*> nop ++0+5790 <[^>]*> nop ++0+5794 <[^>]*> nop ++0+5798 <[^>]*> nop ++0+579c <[^>]*> nop ++0+57a0 <[^>]*> nop ++0+57a4 <[^>]*> nop ++0+57a8 <[^>]*> nop ++0+57ac <[^>]*> nop ++0+57b0 <[^>]*> nop ++0+57b4 <[^>]*> nop ++0+57b8 <[^>]*> nop ++0+57bc <[^>]*> nop ++0+57c0 <[^>]*> nop ++0+57c4 <[^>]*> nop ++0+57c8 <[^>]*> nop ++0+57cc <[^>]*> nop ++0+57d0 <[^>]*> nop ++0+57d4 <[^>]*> nop ++0+57d8 <[^>]*> nop ++0+57dc <[^>]*> nop ++0+57e0 <[^>]*> nop ++0+57e4 <[^>]*> nop ++0+57e8 <[^>]*> nop ++0+57ec <[^>]*> nop ++0+57f0 <[^>]*> nop ++0+57f4 <[^>]*> nop ++0+57f8 <[^>]*> nop ++0+57fc <[^>]*> nop ++0+5800 <[^>]*> nop ++0+5804 <[^>]*> nop ++0+5808 <[^>]*> nop ++0+580c <[^>]*> nop ++0+5810 <[^>]*> nop ++0+5814 <[^>]*> nop ++0+5818 <[^>]*> nop ++0+581c <[^>]*> nop ++0+5820 <[^>]*> nop ++0+5824 <[^>]*> nop ++0+5828 <[^>]*> nop ++0+582c <[^>]*> nop ++0+5830 <[^>]*> nop ++0+5834 <[^>]*> nop ++0+5838 <[^>]*> nop ++0+583c <[^>]*> nop ++0+5840 <[^>]*> nop ++0+5844 <[^>]*> nop ++0+5848 <[^>]*> nop ++0+584c <[^>]*> nop ++0+5850 <[^>]*> nop ++0+5854 <[^>]*> nop ++0+5858 <[^>]*> nop ++0+585c <[^>]*> nop ++0+5860 <[^>]*> nop ++0+5864 <[^>]*> nop ++0+5868 <[^>]*> nop ++0+586c <[^>]*> nop ++0+5870 <[^>]*> nop ++0+5874 <[^>]*> nop ++0+5878 <[^>]*> nop ++0+587c <[^>]*> nop ++0+5880 <[^>]*> nop ++0+5884 <[^>]*> nop ++0+5888 <[^>]*> nop ++0+588c <[^>]*> nop ++0+5890 <[^>]*> nop ++0+5894 <[^>]*> nop ++0+5898 <[^>]*> nop ++0+589c <[^>]*> nop ++0+58a0 <[^>]*> nop ++0+58a4 <[^>]*> nop ++0+58a8 <[^>]*> nop ++0+58ac <[^>]*> nop ++0+58b0 <[^>]*> nop ++0+58b4 <[^>]*> nop ++0+58b8 <[^>]*> nop ++0+58bc <[^>]*> nop ++0+58c0 <[^>]*> nop ++0+58c4 <[^>]*> nop ++0+58c8 <[^>]*> nop ++0+58cc <[^>]*> nop ++0+58d0 <[^>]*> nop ++0+58d4 <[^>]*> nop ++0+58d8 <[^>]*> nop ++0+58dc <[^>]*> nop ++0+58e0 <[^>]*> nop ++0+58e4 <[^>]*> nop ++0+58e8 <[^>]*> nop ++0+58ec <[^>]*> nop ++0+58f0 <[^>]*> nop ++0+58f4 <[^>]*> nop ++0+58f8 <[^>]*> nop ++0+58fc <[^>]*> nop ++0+5900 <[^>]*> nop ++0+5904 <[^>]*> nop ++0+5908 <[^>]*> nop ++0+590c <[^>]*> nop ++0+5910 <[^>]*> nop ++0+5914 <[^>]*> nop ++0+5918 <[^>]*> nop ++0+591c <[^>]*> nop ++0+5920 <[^>]*> nop ++0+5924 <[^>]*> nop ++0+5928 <[^>]*> nop ++0+592c <[^>]*> nop ++0+5930 <[^>]*> nop ++0+5934 <[^>]*> nop ++0+5938 <[^>]*> nop ++0+593c <[^>]*> nop ++0+5940 <[^>]*> nop ++0+5944 <[^>]*> nop ++0+5948 <[^>]*> nop ++0+594c <[^>]*> nop ++0+5950 <[^>]*> nop ++0+5954 <[^>]*> nop ++0+5958 <[^>]*> nop ++0+595c <[^>]*> nop ++0+5960 <[^>]*> nop ++0+5964 <[^>]*> nop ++0+5968 <[^>]*> nop ++0+596c <[^>]*> nop ++0+5970 <[^>]*> nop ++0+5974 <[^>]*> nop ++0+5978 <[^>]*> nop ++0+597c <[^>]*> nop ++0+5980 <[^>]*> nop ++0+5984 <[^>]*> nop ++0+5988 <[^>]*> nop ++0+598c <[^>]*> nop ++0+5990 <[^>]*> nop ++0+5994 <[^>]*> nop ++0+5998 <[^>]*> nop ++0+599c <[^>]*> nop ++0+59a0 <[^>]*> nop ++0+59a4 <[^>]*> nop ++0+59a8 <[^>]*> nop ++0+59ac <[^>]*> nop ++0+59b0 <[^>]*> nop ++0+59b4 <[^>]*> nop ++0+59b8 <[^>]*> nop ++0+59bc <[^>]*> nop ++0+59c0 <[^>]*> nop ++0+59c4 <[^>]*> nop ++0+59c8 <[^>]*> nop ++0+59cc <[^>]*> nop ++0+59d0 <[^>]*> nop ++0+59d4 <[^>]*> nop ++0+59d8 <[^>]*> nop ++0+59dc <[^>]*> nop ++0+59e0 <[^>]*> nop ++0+59e4 <[^>]*> nop ++0+59e8 <[^>]*> nop ++0+59ec <[^>]*> nop ++0+59f0 <[^>]*> nop ++0+59f4 <[^>]*> nop ++0+59f8 <[^>]*> nop ++0+59fc <[^>]*> nop ++0+5a00 <[^>]*> nop ++0+5a04 <[^>]*> nop ++0+5a08 <[^>]*> nop ++0+5a0c <[^>]*> nop ++0+5a10 <[^>]*> nop ++0+5a14 <[^>]*> nop ++0+5a18 <[^>]*> nop ++0+5a1c <[^>]*> nop ++0+5a20 <[^>]*> nop ++0+5a24 <[^>]*> nop ++0+5a28 <[^>]*> nop ++0+5a2c <[^>]*> nop ++0+5a30 <[^>]*> nop ++0+5a34 <[^>]*> nop ++0+5a38 <[^>]*> nop ++0+5a3c <[^>]*> nop ++0+5a40 <[^>]*> nop ++0+5a44 <[^>]*> nop ++0+5a48 <[^>]*> nop ++0+5a4c <[^>]*> nop ++0+5a50 <[^>]*> nop ++0+5a54 <[^>]*> nop ++0+5a58 <[^>]*> nop ++0+5a5c <[^>]*> nop ++0+5a60 <[^>]*> nop ++0+5a64 <[^>]*> nop ++0+5a68 <[^>]*> nop ++0+5a6c <[^>]*> nop ++0+5a70 <[^>]*> nop ++0+5a74 <[^>]*> nop ++0+5a78 <[^>]*> nop ++0+5a7c <[^>]*> nop ++0+5a80 <[^>]*> nop ++0+5a84 <[^>]*> nop ++0+5a88 <[^>]*> nop ++0+5a8c <[^>]*> nop ++0+5a90 <[^>]*> nop ++0+5a94 <[^>]*> nop ++0+5a98 <[^>]*> nop ++0+5a9c <[^>]*> nop ++0+5aa0 <[^>]*> nop ++0+5aa4 <[^>]*> nop ++0+5aa8 <[^>]*> nop ++0+5aac <[^>]*> nop ++0+5ab0 <[^>]*> nop ++0+5ab4 <[^>]*> nop ++0+5ab8 <[^>]*> nop ++0+5abc <[^>]*> nop ++0+5ac0 <[^>]*> nop ++0+5ac4 <[^>]*> nop ++0+5ac8 <[^>]*> nop ++0+5acc <[^>]*> nop ++0+5ad0 <[^>]*> nop ++0+5ad4 <[^>]*> nop ++0+5ad8 <[^>]*> nop ++0+5adc <[^>]*> nop ++0+5ae0 <[^>]*> nop ++0+5ae4 <[^>]*> nop ++0+5ae8 <[^>]*> nop ++0+5aec <[^>]*> nop ++0+5af0 <[^>]*> nop ++0+5af4 <[^>]*> nop ++0+5af8 <[^>]*> nop ++0+5afc <[^>]*> nop ++0+5b00 <[^>]*> nop ++0+5b04 <[^>]*> nop ++0+5b08 <[^>]*> nop ++0+5b0c <[^>]*> nop ++0+5b10 <[^>]*> nop ++0+5b14 <[^>]*> nop ++0+5b18 <[^>]*> nop ++0+5b1c <[^>]*> nop ++0+5b20 <[^>]*> nop ++0+5b24 <[^>]*> nop ++0+5b28 <[^>]*> nop ++0+5b2c <[^>]*> nop ++0+5b30 <[^>]*> nop ++0+5b34 <[^>]*> nop ++0+5b38 <[^>]*> nop ++0+5b3c <[^>]*> nop ++0+5b40 <[^>]*> nop ++0+5b44 <[^>]*> nop ++0+5b48 <[^>]*> nop ++0+5b4c <[^>]*> nop ++0+5b50 <[^>]*> nop ++0+5b54 <[^>]*> nop ++0+5b58 <[^>]*> nop ++0+5b5c <[^>]*> nop ++0+5b60 <[^>]*> nop ++0+5b64 <[^>]*> nop ++0+5b68 <[^>]*> nop ++0+5b6c <[^>]*> nop ++0+5b70 <[^>]*> nop ++0+5b74 <[^>]*> nop ++0+5b78 <[^>]*> nop ++0+5b7c <[^>]*> nop ++0+5b80 <[^>]*> nop ++0+5b84 <[^>]*> nop ++0+5b88 <[^>]*> nop ++0+5b8c <[^>]*> nop ++0+5b90 <[^>]*> nop ++0+5b94 <[^>]*> nop ++0+5b98 <[^>]*> nop ++0+5b9c <[^>]*> nop ++0+5ba0 <[^>]*> nop ++0+5ba4 <[^>]*> nop ++0+5ba8 <[^>]*> nop ++0+5bac <[^>]*> nop ++0+5bb0 <[^>]*> nop ++0+5bb4 <[^>]*> nop ++0+5bb8 <[^>]*> nop ++0+5bbc <[^>]*> nop ++0+5bc0 <[^>]*> nop ++0+5bc4 <[^>]*> nop ++0+5bc8 <[^>]*> nop ++0+5bcc <[^>]*> nop ++0+5bd0 <[^>]*> nop ++0+5bd4 <[^>]*> nop ++0+5bd8 <[^>]*> nop ++0+5bdc <[^>]*> nop ++0+5be0 <[^>]*> nop ++0+5be4 <[^>]*> nop ++0+5be8 <[^>]*> nop ++0+5bec <[^>]*> nop ++0+5bf0 <[^>]*> nop ++0+5bf4 <[^>]*> nop ++0+5bf8 <[^>]*> nop ++0+5bfc <[^>]*> nop ++0+5c00 <[^>]*> nop ++0+5c04 <[^>]*> nop ++0+5c08 <[^>]*> nop ++0+5c0c <[^>]*> nop ++0+5c10 <[^>]*> nop ++0+5c14 <[^>]*> nop ++0+5c18 <[^>]*> nop ++0+5c1c <[^>]*> nop ++0+5c20 <[^>]*> nop ++0+5c24 <[^>]*> nop ++0+5c28 <[^>]*> nop ++0+5c2c <[^>]*> nop ++0+5c30 <[^>]*> nop ++0+5c34 <[^>]*> nop ++0+5c38 <[^>]*> nop ++0+5c3c <[^>]*> nop ++0+5c40 <[^>]*> nop ++0+5c44 <[^>]*> nop ++0+5c48 <[^>]*> nop ++0+5c4c <[^>]*> nop ++0+5c50 <[^>]*> nop ++0+5c54 <[^>]*> nop ++0+5c58 <[^>]*> nop ++0+5c5c <[^>]*> nop ++0+5c60 <[^>]*> nop ++0+5c64 <[^>]*> nop ++0+5c68 <[^>]*> nop ++0+5c6c <[^>]*> nop ++0+5c70 <[^>]*> nop ++0+5c74 <[^>]*> nop ++0+5c78 <[^>]*> nop ++0+5c7c <[^>]*> nop ++0+5c80 <[^>]*> nop ++0+5c84 <[^>]*> nop ++0+5c88 <[^>]*> nop ++0+5c8c <[^>]*> nop ++0+5c90 <[^>]*> nop ++0+5c94 <[^>]*> nop ++0+5c98 <[^>]*> nop ++0+5c9c <[^>]*> nop ++0+5ca0 <[^>]*> nop ++0+5ca4 <[^>]*> nop ++0+5ca8 <[^>]*> nop ++0+5cac <[^>]*> nop ++0+5cb0 <[^>]*> nop ++0+5cb4 <[^>]*> nop ++0+5cb8 <[^>]*> nop ++0+5cbc <[^>]*> nop ++0+5cc0 <[^>]*> nop ++0+5cc4 <[^>]*> nop ++0+5cc8 <[^>]*> nop ++0+5ccc <[^>]*> nop ++0+5cd0 <[^>]*> nop ++0+5cd4 <[^>]*> nop ++0+5cd8 <[^>]*> nop ++0+5cdc <[^>]*> nop ++0+5ce0 <[^>]*> nop ++0+5ce4 <[^>]*> nop ++0+5ce8 <[^>]*> nop ++0+5cec <[^>]*> nop ++0+5cf0 <[^>]*> nop ++0+5cf4 <[^>]*> nop ++0+5cf8 <[^>]*> nop ++0+5cfc <[^>]*> nop ++0+5d00 <[^>]*> nop ++0+5d04 <[^>]*> nop ++0+5d08 <[^>]*> nop ++0+5d0c <[^>]*> nop ++0+5d10 <[^>]*> nop ++0+5d14 <[^>]*> nop ++0+5d18 <[^>]*> nop ++0+5d1c <[^>]*> nop ++0+5d20 <[^>]*> nop ++0+5d24 <[^>]*> nop ++0+5d28 <[^>]*> nop ++0+5d2c <[^>]*> nop ++0+5d30 <[^>]*> nop ++0+5d34 <[^>]*> nop ++0+5d38 <[^>]*> nop ++0+5d3c <[^>]*> nop ++0+5d40 <[^>]*> nop ++0+5d44 <[^>]*> nop ++0+5d48 <[^>]*> nop ++0+5d4c <[^>]*> nop ++0+5d50 <[^>]*> nop ++0+5d54 <[^>]*> nop ++0+5d58 <[^>]*> nop ++0+5d5c <[^>]*> nop ++0+5d60 <[^>]*> nop ++0+5d64 <[^>]*> nop ++0+5d68 <[^>]*> nop ++0+5d6c <[^>]*> nop ++0+5d70 <[^>]*> nop ++0+5d74 <[^>]*> nop ++0+5d78 <[^>]*> nop ++0+5d7c <[^>]*> nop ++0+5d80 <[^>]*> nop ++0+5d84 <[^>]*> nop ++0+5d88 <[^>]*> nop ++0+5d8c <[^>]*> nop ++0+5d90 <[^>]*> nop ++0+5d94 <[^>]*> nop ++0+5d98 <[^>]*> nop ++0+5d9c <[^>]*> nop ++0+5da0 <[^>]*> nop ++0+5da4 <[^>]*> nop ++0+5da8 <[^>]*> nop ++0+5dac <[^>]*> nop ++0+5db0 <[^>]*> nop ++0+5db4 <[^>]*> nop ++0+5db8 <[^>]*> nop ++0+5dbc <[^>]*> nop ++0+5dc0 <[^>]*> nop ++0+5dc4 <[^>]*> nop ++0+5dc8 <[^>]*> nop ++0+5dcc <[^>]*> nop ++0+5dd0 <[^>]*> nop ++0+5dd4 <[^>]*> nop ++0+5dd8 <[^>]*> nop ++0+5ddc <[^>]*> nop ++0+5de0 <[^>]*> nop ++0+5de4 <[^>]*> nop ++0+5de8 <[^>]*> nop ++0+5dec <[^>]*> nop ++0+5df0 <[^>]*> nop ++0+5df4 <[^>]*> nop ++0+5df8 <[^>]*> nop ++0+5dfc <[^>]*> nop ++0+5e00 <[^>]*> nop ++0+5e04 <[^>]*> nop ++0+5e08 <[^>]*> nop ++0+5e0c <[^>]*> nop ++0+5e10 <[^>]*> nop ++0+5e14 <[^>]*> nop ++0+5e18 <[^>]*> nop ++0+5e1c <[^>]*> nop ++0+5e20 <[^>]*> nop ++0+5e24 <[^>]*> nop ++0+5e28 <[^>]*> nop ++0+5e2c <[^>]*> nop ++0+5e30 <[^>]*> nop ++0+5e34 <[^>]*> nop ++0+5e38 <[^>]*> nop ++0+5e3c <[^>]*> nop ++0+5e40 <[^>]*> nop ++0+5e44 <[^>]*> nop ++0+5e48 <[^>]*> nop ++0+5e4c <[^>]*> nop ++0+5e50 <[^>]*> nop ++0+5e54 <[^>]*> nop ++0+5e58 <[^>]*> nop ++0+5e5c <[^>]*> nop ++0+5e60 <[^>]*> nop ++0+5e64 <[^>]*> nop ++0+5e68 <[^>]*> nop ++0+5e6c <[^>]*> nop ++0+5e70 <[^>]*> nop ++0+5e74 <[^>]*> nop ++0+5e78 <[^>]*> nop ++0+5e7c <[^>]*> nop ++0+5e80 <[^>]*> nop ++0+5e84 <[^>]*> nop ++0+5e88 <[^>]*> nop ++0+5e8c <[^>]*> nop ++0+5e90 <[^>]*> nop ++0+5e94 <[^>]*> nop ++0+5e98 <[^>]*> nop ++0+5e9c <[^>]*> nop ++0+5ea0 <[^>]*> nop ++0+5ea4 <[^>]*> nop ++0+5ea8 <[^>]*> nop ++0+5eac <[^>]*> nop ++0+5eb0 <[^>]*> nop ++0+5eb4 <[^>]*> nop ++0+5eb8 <[^>]*> nop ++0+5ebc <[^>]*> nop ++0+5ec0 <[^>]*> nop ++0+5ec4 <[^>]*> nop ++0+5ec8 <[^>]*> nop ++0+5ecc <[^>]*> nop ++0+5ed0 <[^>]*> nop ++0+5ed4 <[^>]*> nop ++0+5ed8 <[^>]*> nop ++0+5edc <[^>]*> nop ++0+5ee0 <[^>]*> nop ++0+5ee4 <[^>]*> nop ++0+5ee8 <[^>]*> nop ++0+5eec <[^>]*> nop ++0+5ef0 <[^>]*> nop ++0+5ef4 <[^>]*> nop ++0+5ef8 <[^>]*> nop ++0+5efc <[^>]*> nop ++0+5f00 <[^>]*> nop ++0+5f04 <[^>]*> nop ++0+5f08 <[^>]*> nop ++0+5f0c <[^>]*> nop ++0+5f10 <[^>]*> nop ++0+5f14 <[^>]*> nop ++0+5f18 <[^>]*> nop ++0+5f1c <[^>]*> nop ++0+5f20 <[^>]*> nop ++0+5f24 <[^>]*> nop ++0+5f28 <[^>]*> nop ++0+5f2c <[^>]*> nop ++0+5f30 <[^>]*> nop ++0+5f34 <[^>]*> nop ++0+5f38 <[^>]*> nop ++0+5f3c <[^>]*> nop ++0+5f40 <[^>]*> nop ++0+5f44 <[^>]*> nop ++0+5f48 <[^>]*> nop ++0+5f4c <[^>]*> nop ++0+5f50 <[^>]*> nop ++0+5f54 <[^>]*> nop ++0+5f58 <[^>]*> nop ++0+5f5c <[^>]*> nop ++0+5f60 <[^>]*> nop ++0+5f64 <[^>]*> nop ++0+5f68 <[^>]*> nop ++0+5f6c <[^>]*> nop ++0+5f70 <[^>]*> nop ++0+5f74 <[^>]*> nop ++0+5f78 <[^>]*> nop ++0+5f7c <[^>]*> nop ++0+5f80 <[^>]*> nop ++0+5f84 <[^>]*> nop ++0+5f88 <[^>]*> nop ++0+5f8c <[^>]*> nop ++0+5f90 <[^>]*> nop ++0+5f94 <[^>]*> nop ++0+5f98 <[^>]*> nop ++0+5f9c <[^>]*> nop ++0+5fa0 <[^>]*> nop ++0+5fa4 <[^>]*> nop ++0+5fa8 <[^>]*> nop ++0+5fac <[^>]*> nop ++0+5fb0 <[^>]*> nop ++0+5fb4 <[^>]*> nop ++0+5fb8 <[^>]*> nop ++0+5fbc <[^>]*> nop ++0+5fc0 <[^>]*> nop ++0+5fc4 <[^>]*> nop ++0+5fc8 <[^>]*> nop ++0+5fcc <[^>]*> nop ++0+5fd0 <[^>]*> nop ++0+5fd4 <[^>]*> nop ++0+5fd8 <[^>]*> nop ++0+5fdc <[^>]*> nop ++0+5fe0 <[^>]*> nop ++0+5fe4 <[^>]*> nop ++0+5fe8 <[^>]*> nop ++0+5fec <[^>]*> nop ++0+5ff0 <[^>]*> nop ++0+5ff4 <[^>]*> nop ++0+5ff8 <[^>]*> nop ++0+5ffc <[^>]*> nop ++0+6000 <[^>]*> nop ++0+6004 <[^>]*> nop ++0+6008 <[^>]*> nop ++0+600c <[^>]*> nop ++0+6010 <[^>]*> nop ++0+6014 <[^>]*> nop ++0+6018 <[^>]*> nop ++0+601c <[^>]*> nop ++0+6020 <[^>]*> nop ++0+6024 <[^>]*> nop ++0+6028 <[^>]*> nop ++0+602c <[^>]*> nop ++0+6030 <[^>]*> nop ++0+6034 <[^>]*> nop ++0+6038 <[^>]*> nop ++0+603c <[^>]*> nop ++0+6040 <[^>]*> nop ++0+6044 <[^>]*> nop ++0+6048 <[^>]*> nop ++0+604c <[^>]*> nop ++0+6050 <[^>]*> nop ++0+6054 <[^>]*> nop ++0+6058 <[^>]*> nop ++0+605c <[^>]*> nop ++0+6060 <[^>]*> nop ++0+6064 <[^>]*> nop ++0+6068 <[^>]*> nop ++0+606c <[^>]*> nop ++0+6070 <[^>]*> nop ++0+6074 <[^>]*> nop ++0+6078 <[^>]*> nop ++0+607c <[^>]*> nop ++0+6080 <[^>]*> nop ++0+6084 <[^>]*> nop ++0+6088 <[^>]*> nop ++0+608c <[^>]*> nop ++0+6090 <[^>]*> nop ++0+6094 <[^>]*> nop ++0+6098 <[^>]*> nop ++0+609c <[^>]*> nop ++0+60a0 <[^>]*> nop ++0+60a4 <[^>]*> nop ++0+60a8 <[^>]*> nop ++0+60ac <[^>]*> nop ++0+60b0 <[^>]*> nop ++0+60b4 <[^>]*> nop ++0+60b8 <[^>]*> nop ++0+60bc <[^>]*> nop ++0+60c0 <[^>]*> nop ++0+60c4 <[^>]*> nop ++0+60c8 <[^>]*> nop ++0+60cc <[^>]*> nop ++0+60d0 <[^>]*> nop ++0+60d4 <[^>]*> nop ++0+60d8 <[^>]*> nop ++0+60dc <[^>]*> nop ++0+60e0 <[^>]*> nop ++0+60e4 <[^>]*> nop ++0+60e8 <[^>]*> nop ++0+60ec <[^>]*> nop ++0+60f0 <[^>]*> nop ++0+60f4 <[^>]*> nop ++0+60f8 <[^>]*> nop ++0+60fc <[^>]*> nop ++0+6100 <[^>]*> nop ++0+6104 <[^>]*> nop ++0+6108 <[^>]*> nop ++0+610c <[^>]*> nop ++0+6110 <[^>]*> nop ++0+6114 <[^>]*> nop ++0+6118 <[^>]*> nop ++0+611c <[^>]*> nop ++0+6120 <[^>]*> nop ++0+6124 <[^>]*> nop ++0+6128 <[^>]*> nop ++0+612c <[^>]*> nop ++0+6130 <[^>]*> nop ++0+6134 <[^>]*> nop ++0+6138 <[^>]*> nop ++0+613c <[^>]*> nop ++0+6140 <[^>]*> nop ++0+6144 <[^>]*> nop ++0+6148 <[^>]*> nop ++0+614c <[^>]*> nop ++0+6150 <[^>]*> nop ++0+6154 <[^>]*> nop ++0+6158 <[^>]*> nop ++0+615c <[^>]*> nop ++0+6160 <[^>]*> nop ++0+6164 <[^>]*> nop ++0+6168 <[^>]*> nop ++0+616c <[^>]*> nop ++0+6170 <[^>]*> nop ++0+6174 <[^>]*> nop ++0+6178 <[^>]*> nop ++0+617c <[^>]*> nop ++0+6180 <[^>]*> nop ++0+6184 <[^>]*> nop ++0+6188 <[^>]*> nop ++0+618c <[^>]*> nop ++0+6190 <[^>]*> nop ++0+6194 <[^>]*> nop ++0+6198 <[^>]*> nop ++0+619c <[^>]*> nop ++0+61a0 <[^>]*> nop ++0+61a4 <[^>]*> nop ++0+61a8 <[^>]*> nop ++0+61ac <[^>]*> nop ++0+61b0 <[^>]*> nop ++0+61b4 <[^>]*> nop ++0+61b8 <[^>]*> nop ++0+61bc <[^>]*> nop ++0+61c0 <[^>]*> nop ++0+61c4 <[^>]*> nop ++0+61c8 <[^>]*> nop ++0+61cc <[^>]*> nop ++0+61d0 <[^>]*> nop ++0+61d4 <[^>]*> nop ++0+61d8 <[^>]*> nop ++0+61dc <[^>]*> nop ++0+61e0 <[^>]*> nop ++0+61e4 <[^>]*> nop ++0+61e8 <[^>]*> nop ++0+61ec <[^>]*> nop ++0+61f0 <[^>]*> nop ++0+61f4 <[^>]*> nop ++0+61f8 <[^>]*> nop ++0+61fc <[^>]*> nop ++0+6200 <[^>]*> nop ++0+6204 <[^>]*> nop ++0+6208 <[^>]*> nop ++0+620c <[^>]*> nop ++0+6210 <[^>]*> nop ++0+6214 <[^>]*> nop ++0+6218 <[^>]*> nop ++0+621c <[^>]*> nop ++0+6220 <[^>]*> nop ++0+6224 <[^>]*> nop ++0+6228 <[^>]*> nop ++0+622c <[^>]*> nop ++0+6230 <[^>]*> nop ++0+6234 <[^>]*> nop ++0+6238 <[^>]*> nop ++0+623c <[^>]*> nop ++0+6240 <[^>]*> nop ++0+6244 <[^>]*> nop ++0+6248 <[^>]*> nop ++0+624c <[^>]*> nop ++0+6250 <[^>]*> nop ++0+6254 <[^>]*> nop ++0+6258 <[^>]*> nop ++0+625c <[^>]*> nop ++0+6260 <[^>]*> nop ++0+6264 <[^>]*> nop ++0+6268 <[^>]*> nop ++0+626c <[^>]*> nop ++0+6270 <[^>]*> nop ++0+6274 <[^>]*> nop ++0+6278 <[^>]*> nop ++0+627c <[^>]*> nop ++0+6280 <[^>]*> nop ++0+6284 <[^>]*> nop ++0+6288 <[^>]*> nop ++0+628c <[^>]*> nop ++0+6290 <[^>]*> nop ++0+6294 <[^>]*> nop ++0+6298 <[^>]*> nop ++0+629c <[^>]*> nop ++0+62a0 <[^>]*> nop ++0+62a4 <[^>]*> nop ++0+62a8 <[^>]*> nop ++0+62ac <[^>]*> nop ++0+62b0 <[^>]*> nop ++0+62b4 <[^>]*> nop ++0+62b8 <[^>]*> nop ++0+62bc <[^>]*> nop ++0+62c0 <[^>]*> nop ++0+62c4 <[^>]*> nop ++0+62c8 <[^>]*> nop ++0+62cc <[^>]*> nop ++0+62d0 <[^>]*> nop ++0+62d4 <[^>]*> nop ++0+62d8 <[^>]*> nop ++0+62dc <[^>]*> nop ++0+62e0 <[^>]*> nop ++0+62e4 <[^>]*> nop ++0+62e8 <[^>]*> nop ++0+62ec <[^>]*> nop ++0+62f0 <[^>]*> nop ++0+62f4 <[^>]*> nop ++0+62f8 <[^>]*> nop ++0+62fc <[^>]*> nop ++0+6300 <[^>]*> nop ++0+6304 <[^>]*> nop ++0+6308 <[^>]*> nop ++0+630c <[^>]*> nop ++0+6310 <[^>]*> nop ++0+6314 <[^>]*> nop ++0+6318 <[^>]*> nop ++0+631c <[^>]*> nop ++0+6320 <[^>]*> nop ++0+6324 <[^>]*> nop ++0+6328 <[^>]*> nop ++0+632c <[^>]*> nop ++0+6330 <[^>]*> nop ++0+6334 <[^>]*> nop ++0+6338 <[^>]*> nop ++0+633c <[^>]*> nop ++0+6340 <[^>]*> nop ++0+6344 <[^>]*> nop ++0+6348 <[^>]*> nop ++0+634c <[^>]*> nop ++0+6350 <[^>]*> nop ++0+6354 <[^>]*> nop ++0+6358 <[^>]*> nop ++0+635c <[^>]*> nop ++0+6360 <[^>]*> nop ++0+6364 <[^>]*> nop ++0+6368 <[^>]*> nop ++0+636c <[^>]*> nop ++0+6370 <[^>]*> nop ++0+6374 <[^>]*> nop ++0+6378 <[^>]*> nop ++0+637c <[^>]*> nop ++0+6380 <[^>]*> nop ++0+6384 <[^>]*> nop ++0+6388 <[^>]*> nop ++0+638c <[^>]*> nop ++0+6390 <[^>]*> nop ++0+6394 <[^>]*> nop ++0+6398 <[^>]*> nop ++0+639c <[^>]*> nop ++0+63a0 <[^>]*> nop ++0+63a4 <[^>]*> nop ++0+63a8 <[^>]*> nop ++0+63ac <[^>]*> nop ++0+63b0 <[^>]*> nop ++0+63b4 <[^>]*> nop ++0+63b8 <[^>]*> nop ++0+63bc <[^>]*> nop ++0+63c0 <[^>]*> nop ++0+63c4 <[^>]*> nop ++0+63c8 <[^>]*> nop ++0+63cc <[^>]*> nop ++0+63d0 <[^>]*> nop ++0+63d4 <[^>]*> nop ++0+63d8 <[^>]*> nop ++0+63dc <[^>]*> nop ++0+63e0 <[^>]*> nop ++0+63e4 <[^>]*> nop ++0+63e8 <[^>]*> nop ++0+63ec <[^>]*> nop ++0+63f0 <[^>]*> nop ++0+63f4 <[^>]*> nop ++0+63f8 <[^>]*> nop ++0+63fc <[^>]*> nop ++0+6400 <[^>]*> nop ++0+6404 <[^>]*> nop ++0+6408 <[^>]*> nop ++0+640c <[^>]*> nop ++0+6410 <[^>]*> nop ++0+6414 <[^>]*> nop ++0+6418 <[^>]*> nop ++0+641c <[^>]*> nop ++0+6420 <[^>]*> nop ++0+6424 <[^>]*> nop ++0+6428 <[^>]*> nop ++0+642c <[^>]*> nop ++0+6430 <[^>]*> nop ++0+6434 <[^>]*> nop ++0+6438 <[^>]*> nop ++0+643c <[^>]*> nop ++0+6440 <[^>]*> nop ++0+6444 <[^>]*> nop ++0+6448 <[^>]*> nop ++0+644c <[^>]*> nop ++0+6450 <[^>]*> nop ++0+6454 <[^>]*> nop ++0+6458 <[^>]*> nop ++0+645c <[^>]*> nop ++0+6460 <[^>]*> nop ++0+6464 <[^>]*> nop ++0+6468 <[^>]*> nop ++0+646c <[^>]*> nop ++0+6470 <[^>]*> nop ++0+6474 <[^>]*> nop ++0+6478 <[^>]*> nop ++0+647c <[^>]*> nop ++0+6480 <[^>]*> nop ++0+6484 <[^>]*> nop ++0+6488 <[^>]*> nop ++0+648c <[^>]*> nop ++0+6490 <[^>]*> nop ++0+6494 <[^>]*> nop ++0+6498 <[^>]*> nop ++0+649c <[^>]*> nop ++0+64a0 <[^>]*> nop ++0+64a4 <[^>]*> nop ++0+64a8 <[^>]*> nop ++0+64ac <[^>]*> nop ++0+64b0 <[^>]*> nop ++0+64b4 <[^>]*> nop ++0+64b8 <[^>]*> nop ++0+64bc <[^>]*> nop ++0+64c0 <[^>]*> nop ++0+64c4 <[^>]*> nop ++0+64c8 <[^>]*> nop ++0+64cc <[^>]*> nop ++0+64d0 <[^>]*> nop ++0+64d4 <[^>]*> nop ++0+64d8 <[^>]*> nop ++0+64dc <[^>]*> nop ++0+64e0 <[^>]*> nop ++0+64e4 <[^>]*> nop ++0+64e8 <[^>]*> nop ++0+64ec <[^>]*> nop ++0+64f0 <[^>]*> nop ++0+64f4 <[^>]*> nop ++0+64f8 <[^>]*> nop ++0+64fc <[^>]*> nop ++0+6500 <[^>]*> nop ++0+6504 <[^>]*> nop ++0+6508 <[^>]*> nop ++0+650c <[^>]*> nop ++0+6510 <[^>]*> nop ++0+6514 <[^>]*> nop ++0+6518 <[^>]*> nop ++0+651c <[^>]*> nop ++0+6520 <[^>]*> nop ++0+6524 <[^>]*> nop ++0+6528 <[^>]*> nop ++0+652c <[^>]*> nop ++0+6530 <[^>]*> nop ++0+6534 <[^>]*> nop ++0+6538 <[^>]*> nop ++0+653c <[^>]*> nop ++0+6540 <[^>]*> nop ++0+6544 <[^>]*> nop ++0+6548 <[^>]*> nop ++0+654c <[^>]*> nop ++0+6550 <[^>]*> nop ++0+6554 <[^>]*> nop ++0+6558 <[^>]*> nop ++0+655c <[^>]*> nop ++0+6560 <[^>]*> nop ++0+6564 <[^>]*> nop ++0+6568 <[^>]*> nop ++0+656c <[^>]*> nop ++0+6570 <[^>]*> nop ++0+6574 <[^>]*> nop ++0+6578 <[^>]*> nop ++0+657c <[^>]*> nop ++0+6580 <[^>]*> nop ++0+6584 <[^>]*> nop ++0+6588 <[^>]*> nop ++0+658c <[^>]*> nop ++0+6590 <[^>]*> nop ++0+6594 <[^>]*> nop ++0+6598 <[^>]*> nop ++0+659c <[^>]*> nop ++0+65a0 <[^>]*> nop ++0+65a4 <[^>]*> nop ++0+65a8 <[^>]*> nop ++0+65ac <[^>]*> nop ++0+65b0 <[^>]*> nop ++0+65b4 <[^>]*> nop ++0+65b8 <[^>]*> nop ++0+65bc <[^>]*> nop ++0+65c0 <[^>]*> nop ++0+65c4 <[^>]*> nop ++0+65c8 <[^>]*> nop ++0+65cc <[^>]*> nop ++0+65d0 <[^>]*> nop ++0+65d4 <[^>]*> nop ++0+65d8 <[^>]*> nop ++0+65dc <[^>]*> nop ++0+65e0 <[^>]*> nop ++0+65e4 <[^>]*> nop ++0+65e8 <[^>]*> nop ++0+65ec <[^>]*> nop ++0+65f0 <[^>]*> nop ++0+65f4 <[^>]*> nop ++0+65f8 <[^>]*> nop ++0+65fc <[^>]*> nop ++0+6600 <[^>]*> nop ++0+6604 <[^>]*> nop ++0+6608 <[^>]*> nop ++0+660c <[^>]*> nop ++0+6610 <[^>]*> nop ++0+6614 <[^>]*> nop ++0+6618 <[^>]*> nop ++0+661c <[^>]*> nop ++0+6620 <[^>]*> nop ++0+6624 <[^>]*> nop ++0+6628 <[^>]*> nop ++0+662c <[^>]*> nop ++0+6630 <[^>]*> nop ++0+6634 <[^>]*> nop ++0+6638 <[^>]*> nop ++0+663c <[^>]*> nop ++0+6640 <[^>]*> nop ++0+6644 <[^>]*> nop ++0+6648 <[^>]*> nop ++0+664c <[^>]*> nop ++0+6650 <[^>]*> nop ++0+6654 <[^>]*> nop ++0+6658 <[^>]*> nop ++0+665c <[^>]*> nop ++0+6660 <[^>]*> nop ++0+6664 <[^>]*> nop ++0+6668 <[^>]*> nop ++0+666c <[^>]*> nop ++0+6670 <[^>]*> nop ++0+6674 <[^>]*> nop ++0+6678 <[^>]*> nop ++0+667c <[^>]*> nop ++0+6680 <[^>]*> nop ++0+6684 <[^>]*> nop ++0+6688 <[^>]*> nop ++0+668c <[^>]*> nop ++0+6690 <[^>]*> nop ++0+6694 <[^>]*> nop ++0+6698 <[^>]*> nop ++0+669c <[^>]*> nop ++0+66a0 <[^>]*> nop ++0+66a4 <[^>]*> nop ++0+66a8 <[^>]*> nop ++0+66ac <[^>]*> nop ++0+66b0 <[^>]*> nop ++0+66b4 <[^>]*> nop ++0+66b8 <[^>]*> nop ++0+66bc <[^>]*> nop ++0+66c0 <[^>]*> nop ++0+66c4 <[^>]*> nop ++0+66c8 <[^>]*> nop ++0+66cc <[^>]*> nop ++0+66d0 <[^>]*> nop ++0+66d4 <[^>]*> nop ++0+66d8 <[^>]*> nop ++0+66dc <[^>]*> nop ++0+66e0 <[^>]*> nop ++0+66e4 <[^>]*> nop ++0+66e8 <[^>]*> nop ++0+66ec <[^>]*> nop ++0+66f0 <[^>]*> nop ++0+66f4 <[^>]*> nop ++0+66f8 <[^>]*> nop ++0+66fc <[^>]*> nop ++0+6700 <[^>]*> nop ++0+6704 <[^>]*> nop ++0+6708 <[^>]*> nop ++0+670c <[^>]*> nop ++0+6710 <[^>]*> nop ++0+6714 <[^>]*> nop ++0+6718 <[^>]*> nop ++0+671c <[^>]*> nop ++0+6720 <[^>]*> nop ++0+6724 <[^>]*> nop ++0+6728 <[^>]*> nop ++0+672c <[^>]*> nop ++0+6730 <[^>]*> nop ++0+6734 <[^>]*> nop ++0+6738 <[^>]*> nop ++0+673c <[^>]*> nop ++0+6740 <[^>]*> nop ++0+6744 <[^>]*> nop ++0+6748 <[^>]*> nop ++0+674c <[^>]*> nop ++0+6750 <[^>]*> nop ++0+6754 <[^>]*> nop ++0+6758 <[^>]*> nop ++0+675c <[^>]*> nop ++0+6760 <[^>]*> nop ++0+6764 <[^>]*> nop ++0+6768 <[^>]*> nop ++0+676c <[^>]*> nop ++0+6770 <[^>]*> nop ++0+6774 <[^>]*> nop ++0+6778 <[^>]*> nop ++0+677c <[^>]*> nop ++0+6780 <[^>]*> nop ++0+6784 <[^>]*> nop ++0+6788 <[^>]*> nop ++0+678c <[^>]*> nop ++0+6790 <[^>]*> nop ++0+6794 <[^>]*> nop ++0+6798 <[^>]*> nop ++0+679c <[^>]*> nop ++0+67a0 <[^>]*> nop ++0+67a4 <[^>]*> nop ++0+67a8 <[^>]*> nop ++0+67ac <[^>]*> nop ++0+67b0 <[^>]*> nop ++0+67b4 <[^>]*> nop ++0+67b8 <[^>]*> nop ++0+67bc <[^>]*> nop ++0+67c0 <[^>]*> nop ++0+67c4 <[^>]*> nop ++0+67c8 <[^>]*> nop ++0+67cc <[^>]*> nop ++0+67d0 <[^>]*> nop ++0+67d4 <[^>]*> nop ++0+67d8 <[^>]*> nop ++0+67dc <[^>]*> nop ++0+67e0 <[^>]*> nop ++0+67e4 <[^>]*> nop ++0+67e8 <[^>]*> nop ++0+67ec <[^>]*> nop ++0+67f0 <[^>]*> nop ++0+67f4 <[^>]*> nop ++0+67f8 <[^>]*> nop ++0+67fc <[^>]*> nop ++0+6800 <[^>]*> nop ++0+6804 <[^>]*> nop ++0+6808 <[^>]*> nop ++0+680c <[^>]*> nop ++0+6810 <[^>]*> nop ++0+6814 <[^>]*> nop ++0+6818 <[^>]*> nop ++0+681c <[^>]*> nop ++0+6820 <[^>]*> nop ++0+6824 <[^>]*> nop ++0+6828 <[^>]*> nop ++0+682c <[^>]*> nop ++0+6830 <[^>]*> nop ++0+6834 <[^>]*> nop ++0+6838 <[^>]*> nop ++0+683c <[^>]*> nop ++0+6840 <[^>]*> nop ++0+6844 <[^>]*> nop ++0+6848 <[^>]*> nop ++0+684c <[^>]*> nop ++0+6850 <[^>]*> nop ++0+6854 <[^>]*> nop ++0+6858 <[^>]*> nop ++0+685c <[^>]*> nop ++0+6860 <[^>]*> nop ++0+6864 <[^>]*> nop ++0+6868 <[^>]*> nop ++0+686c <[^>]*> nop ++0+6870 <[^>]*> nop ++0+6874 <[^>]*> nop ++0+6878 <[^>]*> nop ++0+687c <[^>]*> nop ++0+6880 <[^>]*> nop ++0+6884 <[^>]*> nop ++0+6888 <[^>]*> nop ++0+688c <[^>]*> nop ++0+6890 <[^>]*> nop ++0+6894 <[^>]*> nop ++0+6898 <[^>]*> nop ++0+689c <[^>]*> nop ++0+68a0 <[^>]*> nop ++0+68a4 <[^>]*> nop ++0+68a8 <[^>]*> nop ++0+68ac <[^>]*> nop ++0+68b0 <[^>]*> nop ++0+68b4 <[^>]*> nop ++0+68b8 <[^>]*> nop ++0+68bc <[^>]*> nop ++0+68c0 <[^>]*> nop ++0+68c4 <[^>]*> nop ++0+68c8 <[^>]*> nop ++0+68cc <[^>]*> nop ++0+68d0 <[^>]*> nop ++0+68d4 <[^>]*> nop ++0+68d8 <[^>]*> nop ++0+68dc <[^>]*> nop ++0+68e0 <[^>]*> nop ++0+68e4 <[^>]*> nop ++0+68e8 <[^>]*> nop ++0+68ec <[^>]*> nop ++0+68f0 <[^>]*> nop ++0+68f4 <[^>]*> nop ++0+68f8 <[^>]*> nop ++0+68fc <[^>]*> nop ++0+6900 <[^>]*> nop ++0+6904 <[^>]*> nop ++0+6908 <[^>]*> nop ++0+690c <[^>]*> nop ++0+6910 <[^>]*> nop ++0+6914 <[^>]*> nop ++0+6918 <[^>]*> nop ++0+691c <[^>]*> nop ++0+6920 <[^>]*> nop ++0+6924 <[^>]*> nop ++0+6928 <[^>]*> nop ++0+692c <[^>]*> nop ++0+6930 <[^>]*> nop ++0+6934 <[^>]*> nop ++0+6938 <[^>]*> nop ++0+693c <[^>]*> nop ++0+6940 <[^>]*> nop ++0+6944 <[^>]*> nop ++0+6948 <[^>]*> nop ++0+694c <[^>]*> nop ++0+6950 <[^>]*> nop ++0+6954 <[^>]*> nop ++0+6958 <[^>]*> nop ++0+695c <[^>]*> nop ++0+6960 <[^>]*> nop ++0+6964 <[^>]*> nop ++0+6968 <[^>]*> nop ++0+696c <[^>]*> nop ++0+6970 <[^>]*> nop ++0+6974 <[^>]*> nop ++0+6978 <[^>]*> nop ++0+697c <[^>]*> nop ++0+6980 <[^>]*> nop ++0+6984 <[^>]*> nop ++0+6988 <[^>]*> nop ++0+698c <[^>]*> nop ++0+6990 <[^>]*> nop ++0+6994 <[^>]*> nop ++0+6998 <[^>]*> nop ++0+699c <[^>]*> nop ++0+69a0 <[^>]*> nop ++0+69a4 <[^>]*> nop ++0+69a8 <[^>]*> nop ++0+69ac <[^>]*> nop ++0+69b0 <[^>]*> nop ++0+69b4 <[^>]*> nop ++0+69b8 <[^>]*> nop ++0+69bc <[^>]*> nop ++0+69c0 <[^>]*> nop ++0+69c4 <[^>]*> nop ++0+69c8 <[^>]*> nop ++0+69cc <[^>]*> nop ++0+69d0 <[^>]*> nop ++0+69d4 <[^>]*> nop ++0+69d8 <[^>]*> nop ++0+69dc <[^>]*> nop ++0+69e0 <[^>]*> nop ++0+69e4 <[^>]*> nop ++0+69e8 <[^>]*> nop ++0+69ec <[^>]*> nop ++0+69f0 <[^>]*> nop ++0+69f4 <[^>]*> nop ++0+69f8 <[^>]*> nop ++0+69fc <[^>]*> nop ++0+6a00 <[^>]*> nop ++0+6a04 <[^>]*> nop ++0+6a08 <[^>]*> nop ++0+6a0c <[^>]*> nop ++0+6a10 <[^>]*> nop ++0+6a14 <[^>]*> nop ++0+6a18 <[^>]*> nop ++0+6a1c <[^>]*> nop ++0+6a20 <[^>]*> nop ++0+6a24 <[^>]*> nop ++0+6a28 <[^>]*> nop ++0+6a2c <[^>]*> nop ++0+6a30 <[^>]*> nop ++0+6a34 <[^>]*> nop ++0+6a38 <[^>]*> nop ++0+6a3c <[^>]*> nop ++0+6a40 <[^>]*> nop ++0+6a44 <[^>]*> nop ++0+6a48 <[^>]*> nop ++0+6a4c <[^>]*> nop ++0+6a50 <[^>]*> nop ++0+6a54 <[^>]*> nop ++0+6a58 <[^>]*> nop ++0+6a5c <[^>]*> nop ++0+6a60 <[^>]*> nop ++0+6a64 <[^>]*> nop ++0+6a68 <[^>]*> nop ++0+6a6c <[^>]*> nop ++0+6a70 <[^>]*> nop ++0+6a74 <[^>]*> nop ++0+6a78 <[^>]*> nop ++0+6a7c <[^>]*> nop ++0+6a80 <[^>]*> nop ++0+6a84 <[^>]*> nop ++0+6a88 <[^>]*> nop ++0+6a8c <[^>]*> nop ++0+6a90 <[^>]*> nop ++0+6a94 <[^>]*> nop ++0+6a98 <[^>]*> nop ++0+6a9c <[^>]*> nop ++0+6aa0 <[^>]*> nop ++0+6aa4 <[^>]*> nop ++0+6aa8 <[^>]*> nop ++0+6aac <[^>]*> nop ++0+6ab0 <[^>]*> nop ++0+6ab4 <[^>]*> nop ++0+6ab8 <[^>]*> nop ++0+6abc <[^>]*> nop ++0+6ac0 <[^>]*> nop ++0+6ac4 <[^>]*> nop ++0+6ac8 <[^>]*> nop ++0+6acc <[^>]*> nop ++0+6ad0 <[^>]*> nop ++0+6ad4 <[^>]*> nop ++0+6ad8 <[^>]*> nop ++0+6adc <[^>]*> nop ++0+6ae0 <[^>]*> nop ++0+6ae4 <[^>]*> nop ++0+6ae8 <[^>]*> nop ++0+6aec <[^>]*> nop ++0+6af0 <[^>]*> nop ++0+6af4 <[^>]*> nop ++0+6af8 <[^>]*> nop ++0+6afc <[^>]*> nop ++0+6b00 <[^>]*> nop ++0+6b04 <[^>]*> nop ++0+6b08 <[^>]*> nop ++0+6b0c <[^>]*> nop ++0+6b10 <[^>]*> nop ++0+6b14 <[^>]*> nop ++0+6b18 <[^>]*> nop ++0+6b1c <[^>]*> nop ++0+6b20 <[^>]*> nop ++0+6b24 <[^>]*> nop ++0+6b28 <[^>]*> nop ++0+6b2c <[^>]*> nop ++0+6b30 <[^>]*> nop ++0+6b34 <[^>]*> nop ++0+6b38 <[^>]*> nop ++0+6b3c <[^>]*> nop ++0+6b40 <[^>]*> nop ++0+6b44 <[^>]*> nop ++0+6b48 <[^>]*> nop ++0+6b4c <[^>]*> nop ++0+6b50 <[^>]*> nop ++0+6b54 <[^>]*> nop ++0+6b58 <[^>]*> nop ++0+6b5c <[^>]*> nop ++0+6b60 <[^>]*> nop ++0+6b64 <[^>]*> nop ++0+6b68 <[^>]*> nop ++0+6b6c <[^>]*> nop ++0+6b70 <[^>]*> nop ++0+6b74 <[^>]*> nop ++0+6b78 <[^>]*> nop ++0+6b7c <[^>]*> nop ++0+6b80 <[^>]*> nop ++0+6b84 <[^>]*> nop ++0+6b88 <[^>]*> nop ++0+6b8c <[^>]*> nop ++0+6b90 <[^>]*> nop ++0+6b94 <[^>]*> nop ++0+6b98 <[^>]*> nop ++0+6b9c <[^>]*> nop ++0+6ba0 <[^>]*> nop ++0+6ba4 <[^>]*> nop ++0+6ba8 <[^>]*> nop ++0+6bac <[^>]*> nop ++0+6bb0 <[^>]*> nop ++0+6bb4 <[^>]*> nop ++0+6bb8 <[^>]*> nop ++0+6bbc <[^>]*> nop ++0+6bc0 <[^>]*> nop ++0+6bc4 <[^>]*> nop ++0+6bc8 <[^>]*> nop ++0+6bcc <[^>]*> nop ++0+6bd0 <[^>]*> nop ++0+6bd4 <[^>]*> nop ++0+6bd8 <[^>]*> nop ++0+6bdc <[^>]*> nop ++0+6be0 <[^>]*> nop ++0+6be4 <[^>]*> nop ++0+6be8 <[^>]*> nop ++0+6bec <[^>]*> nop ++0+6bf0 <[^>]*> nop ++0+6bf4 <[^>]*> nop ++0+6bf8 <[^>]*> nop ++0+6bfc <[^>]*> nop ++0+6c00 <[^>]*> nop ++0+6c04 <[^>]*> nop ++0+6c08 <[^>]*> nop ++0+6c0c <[^>]*> nop ++0+6c10 <[^>]*> nop ++0+6c14 <[^>]*> nop ++0+6c18 <[^>]*> nop ++0+6c1c <[^>]*> nop ++0+6c20 <[^>]*> nop ++0+6c24 <[^>]*> nop ++0+6c28 <[^>]*> nop ++0+6c2c <[^>]*> nop ++0+6c30 <[^>]*> nop ++0+6c34 <[^>]*> nop ++0+6c38 <[^>]*> nop ++0+6c3c <[^>]*> nop ++0+6c40 <[^>]*> nop ++0+6c44 <[^>]*> nop ++0+6c48 <[^>]*> nop ++0+6c4c <[^>]*> nop ++0+6c50 <[^>]*> nop ++0+6c54 <[^>]*> nop ++0+6c58 <[^>]*> nop ++0+6c5c <[^>]*> nop ++0+6c60 <[^>]*> nop ++0+6c64 <[^>]*> nop ++0+6c68 <[^>]*> nop ++0+6c6c <[^>]*> nop ++0+6c70 <[^>]*> nop ++0+6c74 <[^>]*> nop ++0+6c78 <[^>]*> nop ++0+6c7c <[^>]*> nop ++0+6c80 <[^>]*> nop ++0+6c84 <[^>]*> nop ++0+6c88 <[^>]*> nop ++0+6c8c <[^>]*> nop ++0+6c90 <[^>]*> nop ++0+6c94 <[^>]*> nop ++0+6c98 <[^>]*> nop ++0+6c9c <[^>]*> nop ++0+6ca0 <[^>]*> nop ++0+6ca4 <[^>]*> nop ++0+6ca8 <[^>]*> nop ++0+6cac <[^>]*> nop ++0+6cb0 <[^>]*> nop ++0+6cb4 <[^>]*> nop ++0+6cb8 <[^>]*> nop ++0+6cbc <[^>]*> nop ++0+6cc0 <[^>]*> nop ++0+6cc4 <[^>]*> nop ++0+6cc8 <[^>]*> nop ++0+6ccc <[^>]*> nop ++0+6cd0 <[^>]*> nop ++0+6cd4 <[^>]*> nop ++0+6cd8 <[^>]*> nop ++0+6cdc <[^>]*> nop ++0+6ce0 <[^>]*> nop ++0+6ce4 <[^>]*> nop ++0+6ce8 <[^>]*> nop ++0+6cec <[^>]*> nop ++0+6cf0 <[^>]*> nop ++0+6cf4 <[^>]*> nop ++0+6cf8 <[^>]*> nop ++0+6cfc <[^>]*> nop ++0+6d00 <[^>]*> nop ++0+6d04 <[^>]*> nop ++0+6d08 <[^>]*> nop ++0+6d0c <[^>]*> nop ++0+6d10 <[^>]*> nop ++0+6d14 <[^>]*> nop ++0+6d18 <[^>]*> nop ++0+6d1c <[^>]*> nop ++0+6d20 <[^>]*> nop ++0+6d24 <[^>]*> nop ++0+6d28 <[^>]*> nop ++0+6d2c <[^>]*> nop ++0+6d30 <[^>]*> nop ++0+6d34 <[^>]*> nop ++0+6d38 <[^>]*> nop ++0+6d3c <[^>]*> nop ++0+6d40 <[^>]*> nop ++0+6d44 <[^>]*> nop ++0+6d48 <[^>]*> nop ++0+6d4c <[^>]*> nop ++0+6d50 <[^>]*> nop ++0+6d54 <[^>]*> nop ++0+6d58 <[^>]*> nop ++0+6d5c <[^>]*> nop ++0+6d60 <[^>]*> nop ++0+6d64 <[^>]*> nop ++0+6d68 <[^>]*> nop ++0+6d6c <[^>]*> nop ++0+6d70 <[^>]*> nop ++0+6d74 <[^>]*> nop ++0+6d78 <[^>]*> nop ++0+6d7c <[^>]*> nop ++0+6d80 <[^>]*> nop ++0+6d84 <[^>]*> nop ++0+6d88 <[^>]*> nop ++0+6d8c <[^>]*> nop ++0+6d90 <[^>]*> nop ++0+6d94 <[^>]*> nop ++0+6d98 <[^>]*> nop ++0+6d9c <[^>]*> nop ++0+6da0 <[^>]*> nop ++0+6da4 <[^>]*> nop ++0+6da8 <[^>]*> nop ++0+6dac <[^>]*> nop ++0+6db0 <[^>]*> nop ++0+6db4 <[^>]*> nop ++0+6db8 <[^>]*> nop ++0+6dbc <[^>]*> nop ++0+6dc0 <[^>]*> nop ++0+6dc4 <[^>]*> nop ++0+6dc8 <[^>]*> nop ++0+6dcc <[^>]*> nop ++0+6dd0 <[^>]*> nop ++0+6dd4 <[^>]*> nop ++0+6dd8 <[^>]*> nop ++0+6ddc <[^>]*> nop ++0+6de0 <[^>]*> nop ++0+6de4 <[^>]*> nop ++0+6de8 <[^>]*> nop ++0+6dec <[^>]*> nop ++0+6df0 <[^>]*> nop ++0+6df4 <[^>]*> nop ++0+6df8 <[^>]*> nop ++0+6dfc <[^>]*> nop ++0+6e00 <[^>]*> nop ++0+6e04 <[^>]*> nop ++0+6e08 <[^>]*> nop ++0+6e0c <[^>]*> nop ++0+6e10 <[^>]*> nop ++0+6e14 <[^>]*> nop ++0+6e18 <[^>]*> nop ++0+6e1c <[^>]*> nop ++0+6e20 <[^>]*> nop ++0+6e24 <[^>]*> nop ++0+6e28 <[^>]*> nop ++0+6e2c <[^>]*> nop ++0+6e30 <[^>]*> nop ++0+6e34 <[^>]*> nop ++0+6e38 <[^>]*> nop ++0+6e3c <[^>]*> nop ++0+6e40 <[^>]*> nop ++0+6e44 <[^>]*> nop ++0+6e48 <[^>]*> nop ++0+6e4c <[^>]*> nop ++0+6e50 <[^>]*> nop ++0+6e54 <[^>]*> nop ++0+6e58 <[^>]*> nop ++0+6e5c <[^>]*> nop ++0+6e60 <[^>]*> nop ++0+6e64 <[^>]*> nop ++0+6e68 <[^>]*> nop ++0+6e6c <[^>]*> nop ++0+6e70 <[^>]*> nop ++0+6e74 <[^>]*> nop ++0+6e78 <[^>]*> nop ++0+6e7c <[^>]*> nop ++0+6e80 <[^>]*> nop ++0+6e84 <[^>]*> nop ++0+6e88 <[^>]*> nop ++0+6e8c <[^>]*> nop ++0+6e90 <[^>]*> nop ++0+6e94 <[^>]*> nop ++0+6e98 <[^>]*> nop ++0+6e9c <[^>]*> nop ++0+6ea0 <[^>]*> nop ++0+6ea4 <[^>]*> nop ++0+6ea8 <[^>]*> nop ++0+6eac <[^>]*> nop ++0+6eb0 <[^>]*> nop ++0+6eb4 <[^>]*> nop ++0+6eb8 <[^>]*> nop ++0+6ebc <[^>]*> nop ++0+6ec0 <[^>]*> nop ++0+6ec4 <[^>]*> nop ++0+6ec8 <[^>]*> nop ++0+6ecc <[^>]*> nop ++0+6ed0 <[^>]*> nop ++0+6ed4 <[^>]*> nop ++0+6ed8 <[^>]*> nop ++0+6edc <[^>]*> nop ++0+6ee0 <[^>]*> nop ++0+6ee4 <[^>]*> nop ++0+6ee8 <[^>]*> nop ++0+6eec <[^>]*> nop ++0+6ef0 <[^>]*> nop ++0+6ef4 <[^>]*> nop ++0+6ef8 <[^>]*> nop ++0+6efc <[^>]*> nop ++0+6f00 <[^>]*> nop ++0+6f04 <[^>]*> nop ++0+6f08 <[^>]*> nop ++0+6f0c <[^>]*> nop ++0+6f10 <[^>]*> nop ++0+6f14 <[^>]*> nop ++0+6f18 <[^>]*> nop ++0+6f1c <[^>]*> nop ++0+6f20 <[^>]*> nop ++0+6f24 <[^>]*> nop ++0+6f28 <[^>]*> nop ++0+6f2c <[^>]*> nop ++0+6f30 <[^>]*> nop ++0+6f34 <[^>]*> nop ++0+6f38 <[^>]*> nop ++0+6f3c <[^>]*> nop ++0+6f40 <[^>]*> nop ++0+6f44 <[^>]*> nop ++0+6f48 <[^>]*> nop ++0+6f4c <[^>]*> nop ++0+6f50 <[^>]*> nop ++0+6f54 <[^>]*> nop ++0+6f58 <[^>]*> nop ++0+6f5c <[^>]*> nop ++0+6f60 <[^>]*> nop ++0+6f64 <[^>]*> nop ++0+6f68 <[^>]*> nop ++0+6f6c <[^>]*> nop ++0+6f70 <[^>]*> nop ++0+6f74 <[^>]*> nop ++0+6f78 <[^>]*> nop ++0+6f7c <[^>]*> nop ++0+6f80 <[^>]*> nop ++0+6f84 <[^>]*> nop ++0+6f88 <[^>]*> nop ++0+6f8c <[^>]*> nop ++0+6f90 <[^>]*> nop ++0+6f94 <[^>]*> nop ++0+6f98 <[^>]*> nop ++0+6f9c <[^>]*> nop ++0+6fa0 <[^>]*> nop ++0+6fa4 <[^>]*> nop ++0+6fa8 <[^>]*> nop ++0+6fac <[^>]*> nop ++0+6fb0 <[^>]*> nop ++0+6fb4 <[^>]*> nop ++0+6fb8 <[^>]*> nop ++0+6fbc <[^>]*> nop ++0+6fc0 <[^>]*> nop ++0+6fc4 <[^>]*> nop ++0+6fc8 <[^>]*> nop ++0+6fcc <[^>]*> nop ++0+6fd0 <[^>]*> nop ++0+6fd4 <[^>]*> nop ++0+6fd8 <[^>]*> nop ++0+6fdc <[^>]*> nop ++0+6fe0 <[^>]*> nop ++0+6fe4 <[^>]*> nop ++0+6fe8 <[^>]*> nop ++0+6fec <[^>]*> nop ++0+6ff0 <[^>]*> nop ++0+6ff4 <[^>]*> nop ++0+6ff8 <[^>]*> nop ++0+6ffc <[^>]*> nop ++0+7000 <[^>]*> nop ++0+7004 <[^>]*> nop ++0+7008 <[^>]*> nop ++0+700c <[^>]*> nop ++0+7010 <[^>]*> nop ++0+7014 <[^>]*> nop ++0+7018 <[^>]*> nop ++0+701c <[^>]*> nop ++0+7020 <[^>]*> nop ++0+7024 <[^>]*> nop ++0+7028 <[^>]*> nop ++0+702c <[^>]*> nop ++0+7030 <[^>]*> nop ++0+7034 <[^>]*> nop ++0+7038 <[^>]*> nop ++0+703c <[^>]*> nop ++0+7040 <[^>]*> nop ++0+7044 <[^>]*> nop ++0+7048 <[^>]*> nop ++0+704c <[^>]*> nop ++0+7050 <[^>]*> nop ++0+7054 <[^>]*> nop ++0+7058 <[^>]*> nop ++0+705c <[^>]*> nop ++0+7060 <[^>]*> nop ++0+7064 <[^>]*> nop ++0+7068 <[^>]*> nop ++0+706c <[^>]*> nop ++0+7070 <[^>]*> nop ++0+7074 <[^>]*> nop ++0+7078 <[^>]*> nop ++0+707c <[^>]*> nop ++0+7080 <[^>]*> nop ++0+7084 <[^>]*> nop ++0+7088 <[^>]*> nop ++0+708c <[^>]*> nop ++0+7090 <[^>]*> nop ++0+7094 <[^>]*> nop ++0+7098 <[^>]*> nop ++0+709c <[^>]*> nop ++0+70a0 <[^>]*> nop ++0+70a4 <[^>]*> nop ++0+70a8 <[^>]*> nop ++0+70ac <[^>]*> nop ++0+70b0 <[^>]*> nop ++0+70b4 <[^>]*> nop ++0+70b8 <[^>]*> nop ++0+70bc <[^>]*> nop ++0+70c0 <[^>]*> nop ++0+70c4 <[^>]*> nop ++0+70c8 <[^>]*> nop ++0+70cc <[^>]*> nop ++0+70d0 <[^>]*> nop ++0+70d4 <[^>]*> nop ++0+70d8 <[^>]*> nop ++0+70dc <[^>]*> nop ++0+70e0 <[^>]*> nop ++0+70e4 <[^>]*> nop ++0+70e8 <[^>]*> nop ++0+70ec <[^>]*> nop ++0+70f0 <[^>]*> nop ++0+70f4 <[^>]*> nop ++0+70f8 <[^>]*> nop ++0+70fc <[^>]*> nop ++0+7100 <[^>]*> nop ++0+7104 <[^>]*> nop ++0+7108 <[^>]*> nop ++0+710c <[^>]*> nop ++0+7110 <[^>]*> nop ++0+7114 <[^>]*> nop ++0+7118 <[^>]*> nop ++0+711c <[^>]*> nop ++0+7120 <[^>]*> nop ++0+7124 <[^>]*> nop ++0+7128 <[^>]*> nop ++0+712c <[^>]*> nop ++0+7130 <[^>]*> nop ++0+7134 <[^>]*> nop ++0+7138 <[^>]*> nop ++0+713c <[^>]*> nop ++0+7140 <[^>]*> nop ++0+7144 <[^>]*> nop ++0+7148 <[^>]*> nop ++0+714c <[^>]*> nop ++0+7150 <[^>]*> nop ++0+7154 <[^>]*> nop ++0+7158 <[^>]*> nop ++0+715c <[^>]*> nop ++0+7160 <[^>]*> nop ++0+7164 <[^>]*> nop ++0+7168 <[^>]*> nop ++0+716c <[^>]*> nop ++0+7170 <[^>]*> nop ++0+7174 <[^>]*> nop ++0+7178 <[^>]*> nop ++0+717c <[^>]*> nop ++0+7180 <[^>]*> nop ++0+7184 <[^>]*> nop ++0+7188 <[^>]*> nop ++0+718c <[^>]*> nop ++0+7190 <[^>]*> nop ++0+7194 <[^>]*> nop ++0+7198 <[^>]*> nop ++0+719c <[^>]*> nop ++0+71a0 <[^>]*> nop ++0+71a4 <[^>]*> nop ++0+71a8 <[^>]*> nop ++0+71ac <[^>]*> nop ++0+71b0 <[^>]*> nop ++0+71b4 <[^>]*> nop ++0+71b8 <[^>]*> nop ++0+71bc <[^>]*> nop ++0+71c0 <[^>]*> nop ++0+71c4 <[^>]*> nop ++0+71c8 <[^>]*> nop ++0+71cc <[^>]*> nop ++0+71d0 <[^>]*> nop ++0+71d4 <[^>]*> nop ++0+71d8 <[^>]*> nop ++0+71dc <[^>]*> nop ++0+71e0 <[^>]*> nop ++0+71e4 <[^>]*> nop ++0+71e8 <[^>]*> nop ++0+71ec <[^>]*> nop ++0+71f0 <[^>]*> nop ++0+71f4 <[^>]*> nop ++0+71f8 <[^>]*> nop ++0+71fc <[^>]*> nop ++0+7200 <[^>]*> nop ++0+7204 <[^>]*> nop ++0+7208 <[^>]*> nop ++0+720c <[^>]*> nop ++0+7210 <[^>]*> nop ++0+7214 <[^>]*> nop ++0+7218 <[^>]*> nop ++0+721c <[^>]*> nop ++0+7220 <[^>]*> nop ++0+7224 <[^>]*> nop ++0+7228 <[^>]*> nop ++0+722c <[^>]*> nop ++0+7230 <[^>]*> nop ++0+7234 <[^>]*> nop ++0+7238 <[^>]*> nop ++0+723c <[^>]*> nop ++0+7240 <[^>]*> nop ++0+7244 <[^>]*> nop ++0+7248 <[^>]*> nop ++0+724c <[^>]*> nop ++0+7250 <[^>]*> nop ++0+7254 <[^>]*> nop ++0+7258 <[^>]*> nop ++0+725c <[^>]*> nop ++0+7260 <[^>]*> nop ++0+7264 <[^>]*> nop ++0+7268 <[^>]*> nop ++0+726c <[^>]*> nop ++0+7270 <[^>]*> nop ++0+7274 <[^>]*> nop ++0+7278 <[^>]*> nop ++0+727c <[^>]*> nop ++0+7280 <[^>]*> nop ++0+7284 <[^>]*> nop ++0+7288 <[^>]*> nop ++0+728c <[^>]*> nop ++0+7290 <[^>]*> nop ++0+7294 <[^>]*> nop ++0+7298 <[^>]*> nop ++0+729c <[^>]*> nop ++0+72a0 <[^>]*> nop ++0+72a4 <[^>]*> nop ++0+72a8 <[^>]*> nop ++0+72ac <[^>]*> nop ++0+72b0 <[^>]*> nop ++0+72b4 <[^>]*> nop ++0+72b8 <[^>]*> nop ++0+72bc <[^>]*> nop ++0+72c0 <[^>]*> nop ++0+72c4 <[^>]*> nop ++0+72c8 <[^>]*> nop ++0+72cc <[^>]*> nop ++0+72d0 <[^>]*> nop ++0+72d4 <[^>]*> nop ++0+72d8 <[^>]*> nop ++0+72dc <[^>]*> nop ++0+72e0 <[^>]*> nop ++0+72e4 <[^>]*> nop ++0+72e8 <[^>]*> nop ++0+72ec <[^>]*> nop ++0+72f0 <[^>]*> nop ++0+72f4 <[^>]*> nop ++0+72f8 <[^>]*> nop ++0+72fc <[^>]*> nop ++0+7300 <[^>]*> nop ++0+7304 <[^>]*> nop ++0+7308 <[^>]*> nop ++0+730c <[^>]*> nop ++0+7310 <[^>]*> nop ++0+7314 <[^>]*> nop ++0+7318 <[^>]*> nop ++0+731c <[^>]*> nop ++0+7320 <[^>]*> nop ++0+7324 <[^>]*> nop ++0+7328 <[^>]*> nop ++0+732c <[^>]*> nop ++0+7330 <[^>]*> nop ++0+7334 <[^>]*> nop ++0+7338 <[^>]*> nop ++0+733c <[^>]*> nop ++0+7340 <[^>]*> nop ++0+7344 <[^>]*> nop ++0+7348 <[^>]*> nop ++0+734c <[^>]*> nop ++0+7350 <[^>]*> nop ++0+7354 <[^>]*> nop ++0+7358 <[^>]*> nop ++0+735c <[^>]*> nop ++0+7360 <[^>]*> nop ++0+7364 <[^>]*> nop ++0+7368 <[^>]*> nop ++0+736c <[^>]*> nop ++0+7370 <[^>]*> nop ++0+7374 <[^>]*> nop ++0+7378 <[^>]*> nop ++0+737c <[^>]*> nop ++0+7380 <[^>]*> nop ++0+7384 <[^>]*> nop ++0+7388 <[^>]*> nop ++0+738c <[^>]*> nop ++0+7390 <[^>]*> nop ++0+7394 <[^>]*> nop ++0+7398 <[^>]*> nop ++0+739c <[^>]*> nop ++0+73a0 <[^>]*> nop ++0+73a4 <[^>]*> nop ++0+73a8 <[^>]*> nop ++0+73ac <[^>]*> nop ++0+73b0 <[^>]*> nop ++0+73b4 <[^>]*> nop ++0+73b8 <[^>]*> nop ++0+73bc <[^>]*> nop ++0+73c0 <[^>]*> nop ++0+73c4 <[^>]*> nop ++0+73c8 <[^>]*> nop ++0+73cc <[^>]*> nop ++0+73d0 <[^>]*> nop ++0+73d4 <[^>]*> nop ++0+73d8 <[^>]*> nop ++0+73dc <[^>]*> nop ++0+73e0 <[^>]*> nop ++0+73e4 <[^>]*> nop ++0+73e8 <[^>]*> nop ++0+73ec <[^>]*> nop ++0+73f0 <[^>]*> nop ++0+73f4 <[^>]*> nop ++0+73f8 <[^>]*> nop ++0+73fc <[^>]*> nop ++0+7400 <[^>]*> nop ++0+7404 <[^>]*> nop ++0+7408 <[^>]*> nop ++0+740c <[^>]*> nop ++0+7410 <[^>]*> nop ++0+7414 <[^>]*> nop ++0+7418 <[^>]*> nop ++0+741c <[^>]*> nop ++0+7420 <[^>]*> nop ++0+7424 <[^>]*> nop ++0+7428 <[^>]*> nop ++0+742c <[^>]*> nop ++0+7430 <[^>]*> nop ++0+7434 <[^>]*> nop ++0+7438 <[^>]*> nop ++0+743c <[^>]*> nop ++0+7440 <[^>]*> nop ++0+7444 <[^>]*> nop ++0+7448 <[^>]*> nop ++0+744c <[^>]*> nop ++0+7450 <[^>]*> nop ++0+7454 <[^>]*> nop ++0+7458 <[^>]*> nop ++0+745c <[^>]*> nop ++0+7460 <[^>]*> nop ++0+7464 <[^>]*> nop ++0+7468 <[^>]*> nop ++0+746c <[^>]*> nop ++0+7470 <[^>]*> nop ++0+7474 <[^>]*> nop ++0+7478 <[^>]*> nop ++0+747c <[^>]*> nop ++0+7480 <[^>]*> nop ++0+7484 <[^>]*> nop ++0+7488 <[^>]*> nop ++0+748c <[^>]*> nop ++0+7490 <[^>]*> nop ++0+7494 <[^>]*> nop ++0+7498 <[^>]*> nop ++0+749c <[^>]*> nop ++0+74a0 <[^>]*> nop ++0+74a4 <[^>]*> nop ++0+74a8 <[^>]*> nop ++0+74ac <[^>]*> nop ++0+74b0 <[^>]*> nop ++0+74b4 <[^>]*> nop ++0+74b8 <[^>]*> nop ++0+74bc <[^>]*> nop ++0+74c0 <[^>]*> nop ++0+74c4 <[^>]*> nop ++0+74c8 <[^>]*> nop ++0+74cc <[^>]*> nop ++0+74d0 <[^>]*> nop ++0+74d4 <[^>]*> nop ++0+74d8 <[^>]*> nop ++0+74dc <[^>]*> nop ++0+74e0 <[^>]*> nop ++0+74e4 <[^>]*> nop ++0+74e8 <[^>]*> nop ++0+74ec <[^>]*> nop ++0+74f0 <[^>]*> nop ++0+74f4 <[^>]*> nop ++0+74f8 <[^>]*> nop ++0+74fc <[^>]*> nop ++0+7500 <[^>]*> nop ++0+7504 <[^>]*> nop ++0+7508 <[^>]*> nop ++0+750c <[^>]*> nop ++0+7510 <[^>]*> nop ++0+7514 <[^>]*> nop ++0+7518 <[^>]*> nop ++0+751c <[^>]*> nop ++0+7520 <[^>]*> nop ++0+7524 <[^>]*> nop ++0+7528 <[^>]*> nop ++0+752c <[^>]*> nop ++0+7530 <[^>]*> nop ++0+7534 <[^>]*> nop ++0+7538 <[^>]*> nop ++0+753c <[^>]*> nop ++0+7540 <[^>]*> nop ++0+7544 <[^>]*> nop ++0+7548 <[^>]*> nop ++0+754c <[^>]*> nop ++0+7550 <[^>]*> nop ++0+7554 <[^>]*> nop ++0+7558 <[^>]*> nop ++0+755c <[^>]*> nop ++0+7560 <[^>]*> nop ++0+7564 <[^>]*> nop ++0+7568 <[^>]*> nop ++0+756c <[^>]*> nop ++0+7570 <[^>]*> nop ++0+7574 <[^>]*> nop ++0+7578 <[^>]*> nop ++0+757c <[^>]*> nop ++0+7580 <[^>]*> nop ++0+7584 <[^>]*> nop ++0+7588 <[^>]*> nop ++0+758c <[^>]*> nop ++0+7590 <[^>]*> nop ++0+7594 <[^>]*> nop ++0+7598 <[^>]*> nop ++0+759c <[^>]*> nop ++0+75a0 <[^>]*> nop ++0+75a4 <[^>]*> nop ++0+75a8 <[^>]*> nop ++0+75ac <[^>]*> nop ++0+75b0 <[^>]*> nop ++0+75b4 <[^>]*> nop ++0+75b8 <[^>]*> nop ++0+75bc <[^>]*> nop ++0+75c0 <[^>]*> nop ++0+75c4 <[^>]*> nop ++0+75c8 <[^>]*> nop ++0+75cc <[^>]*> nop ++0+75d0 <[^>]*> nop ++0+75d4 <[^>]*> nop ++0+75d8 <[^>]*> nop ++0+75dc <[^>]*> nop ++0+75e0 <[^>]*> nop ++0+75e4 <[^>]*> nop ++0+75e8 <[^>]*> nop ++0+75ec <[^>]*> nop ++0+75f0 <[^>]*> nop ++0+75f4 <[^>]*> nop ++0+75f8 <[^>]*> nop ++0+75fc <[^>]*> nop ++0+7600 <[^>]*> nop ++0+7604 <[^>]*> nop ++0+7608 <[^>]*> nop ++0+760c <[^>]*> nop ++0+7610 <[^>]*> nop ++0+7614 <[^>]*> nop ++0+7618 <[^>]*> nop ++0+761c <[^>]*> nop ++0+7620 <[^>]*> nop ++0+7624 <[^>]*> nop ++0+7628 <[^>]*> nop ++0+762c <[^>]*> nop ++0+7630 <[^>]*> nop ++0+7634 <[^>]*> nop ++0+7638 <[^>]*> nop ++0+763c <[^>]*> nop ++0+7640 <[^>]*> nop ++0+7644 <[^>]*> nop ++0+7648 <[^>]*> nop ++0+764c <[^>]*> nop ++0+7650 <[^>]*> nop ++0+7654 <[^>]*> nop ++0+7658 <[^>]*> nop ++0+765c <[^>]*> nop ++0+7660 <[^>]*> nop ++0+7664 <[^>]*> nop ++0+7668 <[^>]*> nop ++0+766c <[^>]*> nop ++0+7670 <[^>]*> nop ++0+7674 <[^>]*> nop ++0+7678 <[^>]*> nop ++0+767c <[^>]*> nop ++0+7680 <[^>]*> nop ++0+7684 <[^>]*> nop ++0+7688 <[^>]*> nop ++0+768c <[^>]*> nop ++0+7690 <[^>]*> nop ++0+7694 <[^>]*> nop ++0+7698 <[^>]*> nop ++0+769c <[^>]*> nop ++0+76a0 <[^>]*> nop ++0+76a4 <[^>]*> nop ++0+76a8 <[^>]*> nop ++0+76ac <[^>]*> nop ++0+76b0 <[^>]*> nop ++0+76b4 <[^>]*> nop ++0+76b8 <[^>]*> nop ++0+76bc <[^>]*> nop ++0+76c0 <[^>]*> nop ++0+76c4 <[^>]*> nop ++0+76c8 <[^>]*> nop ++0+76cc <[^>]*> nop ++0+76d0 <[^>]*> nop ++0+76d4 <[^>]*> nop ++0+76d8 <[^>]*> nop ++0+76dc <[^>]*> nop ++0+76e0 <[^>]*> nop ++0+76e4 <[^>]*> nop ++0+76e8 <[^>]*> nop ++0+76ec <[^>]*> nop ++0+76f0 <[^>]*> nop ++0+76f4 <[^>]*> nop ++0+76f8 <[^>]*> nop ++0+76fc <[^>]*> nop ++0+7700 <[^>]*> nop ++0+7704 <[^>]*> nop ++0+7708 <[^>]*> nop ++0+770c <[^>]*> nop ++0+7710 <[^>]*> nop ++0+7714 <[^>]*> nop ++0+7718 <[^>]*> nop ++0+771c <[^>]*> nop ++0+7720 <[^>]*> nop ++0+7724 <[^>]*> nop ++0+7728 <[^>]*> nop ++0+772c <[^>]*> nop ++0+7730 <[^>]*> nop ++0+7734 <[^>]*> nop ++0+7738 <[^>]*> nop ++0+773c <[^>]*> nop ++0+7740 <[^>]*> nop ++0+7744 <[^>]*> nop ++0+7748 <[^>]*> nop ++0+774c <[^>]*> nop ++0+7750 <[^>]*> nop ++0+7754 <[^>]*> nop ++0+7758 <[^>]*> nop ++0+775c <[^>]*> nop ++0+7760 <[^>]*> nop ++0+7764 <[^>]*> nop ++0+7768 <[^>]*> nop ++0+776c <[^>]*> nop ++0+7770 <[^>]*> nop ++0+7774 <[^>]*> nop ++0+7778 <[^>]*> nop ++0+777c <[^>]*> nop ++0+7780 <[^>]*> nop ++0+7784 <[^>]*> nop ++0+7788 <[^>]*> nop ++0+778c <[^>]*> nop ++0+7790 <[^>]*> nop ++0+7794 <[^>]*> nop ++0+7798 <[^>]*> nop ++0+779c <[^>]*> nop ++0+77a0 <[^>]*> nop ++0+77a4 <[^>]*> nop ++0+77a8 <[^>]*> nop ++0+77ac <[^>]*> nop ++0+77b0 <[^>]*> nop ++0+77b4 <[^>]*> nop ++0+77b8 <[^>]*> nop ++0+77bc <[^>]*> nop ++0+77c0 <[^>]*> nop ++0+77c4 <[^>]*> nop ++0+77c8 <[^>]*> nop ++0+77cc <[^>]*> nop ++0+77d0 <[^>]*> nop ++0+77d4 <[^>]*> nop ++0+77d8 <[^>]*> nop ++0+77dc <[^>]*> nop ++0+77e0 <[^>]*> nop ++0+77e4 <[^>]*> nop ++0+77e8 <[^>]*> nop ++0+77ec <[^>]*> nop ++0+77f0 <[^>]*> nop ++0+77f4 <[^>]*> nop ++0+77f8 <[^>]*> nop ++0+77fc <[^>]*> nop ++0+7800 <[^>]*> nop ++0+7804 <[^>]*> nop ++0+7808 <[^>]*> nop ++0+780c <[^>]*> nop ++0+7810 <[^>]*> nop ++0+7814 <[^>]*> nop ++0+7818 <[^>]*> nop ++0+781c <[^>]*> nop ++0+7820 <[^>]*> nop ++0+7824 <[^>]*> nop ++0+7828 <[^>]*> nop ++0+782c <[^>]*> nop ++0+7830 <[^>]*> nop ++0+7834 <[^>]*> nop ++0+7838 <[^>]*> nop ++0+783c <[^>]*> nop ++0+7840 <[^>]*> nop ++0+7844 <[^>]*> nop ++0+7848 <[^>]*> nop ++0+784c <[^>]*> nop ++0+7850 <[^>]*> nop ++0+7854 <[^>]*> nop ++0+7858 <[^>]*> nop ++0+785c <[^>]*> nop ++0+7860 <[^>]*> nop ++0+7864 <[^>]*> nop ++0+7868 <[^>]*> nop ++0+786c <[^>]*> nop ++0+7870 <[^>]*> nop ++0+7874 <[^>]*> nop ++0+7878 <[^>]*> nop ++0+787c <[^>]*> nop ++0+7880 <[^>]*> nop ++0+7884 <[^>]*> nop ++0+7888 <[^>]*> nop ++0+788c <[^>]*> nop ++0+7890 <[^>]*> nop ++0+7894 <[^>]*> nop ++0+7898 <[^>]*> nop ++0+789c <[^>]*> nop ++0+78a0 <[^>]*> nop ++0+78a4 <[^>]*> nop ++0+78a8 <[^>]*> nop ++0+78ac <[^>]*> nop ++0+78b0 <[^>]*> nop ++0+78b4 <[^>]*> nop ++0+78b8 <[^>]*> nop ++0+78bc <[^>]*> nop ++0+78c0 <[^>]*> nop ++0+78c4 <[^>]*> nop ++0+78c8 <[^>]*> nop ++0+78cc <[^>]*> nop ++0+78d0 <[^>]*> nop ++0+78d4 <[^>]*> nop ++0+78d8 <[^>]*> nop ++0+78dc <[^>]*> nop ++0+78e0 <[^>]*> nop ++0+78e4 <[^>]*> nop ++0+78e8 <[^>]*> nop ++0+78ec <[^>]*> nop ++0+78f0 <[^>]*> nop ++0+78f4 <[^>]*> nop ++0+78f8 <[^>]*> nop ++0+78fc <[^>]*> nop ++0+7900 <[^>]*> nop ++0+7904 <[^>]*> nop ++0+7908 <[^>]*> nop ++0+790c <[^>]*> nop ++0+7910 <[^>]*> nop ++0+7914 <[^>]*> nop ++0+7918 <[^>]*> nop ++0+791c <[^>]*> nop ++0+7920 <[^>]*> nop ++0+7924 <[^>]*> nop ++0+7928 <[^>]*> nop ++0+792c <[^>]*> nop ++0+7930 <[^>]*> nop ++0+7934 <[^>]*> nop ++0+7938 <[^>]*> nop ++0+793c <[^>]*> nop ++0+7940 <[^>]*> nop ++0+7944 <[^>]*> nop ++0+7948 <[^>]*> nop ++0+794c <[^>]*> nop ++0+7950 <[^>]*> nop ++0+7954 <[^>]*> nop ++0+7958 <[^>]*> nop ++0+795c <[^>]*> nop ++0+7960 <[^>]*> nop ++0+7964 <[^>]*> nop ++0+7968 <[^>]*> nop ++0+796c <[^>]*> nop ++0+7970 <[^>]*> nop ++0+7974 <[^>]*> nop ++0+7978 <[^>]*> nop ++0+797c <[^>]*> nop ++0+7980 <[^>]*> nop ++0+7984 <[^>]*> nop ++0+7988 <[^>]*> nop ++0+798c <[^>]*> nop ++0+7990 <[^>]*> nop ++0+7994 <[^>]*> nop ++0+7998 <[^>]*> nop ++0+799c <[^>]*> nop ++0+79a0 <[^>]*> nop ++0+79a4 <[^>]*> nop ++0+79a8 <[^>]*> nop ++0+79ac <[^>]*> nop ++0+79b0 <[^>]*> nop ++0+79b4 <[^>]*> nop ++0+79b8 <[^>]*> nop ++0+79bc <[^>]*> nop ++0+79c0 <[^>]*> nop ++0+79c4 <[^>]*> nop ++0+79c8 <[^>]*> nop ++0+79cc <[^>]*> nop ++0+79d0 <[^>]*> nop ++0+79d4 <[^>]*> nop ++0+79d8 <[^>]*> nop ++0+79dc <[^>]*> nop ++0+79e0 <[^>]*> nop ++0+79e4 <[^>]*> nop ++0+79e8 <[^>]*> nop ++0+79ec <[^>]*> nop ++0+79f0 <[^>]*> nop ++0+79f4 <[^>]*> nop ++0+79f8 <[^>]*> nop ++0+79fc <[^>]*> nop ++0+7a00 <[^>]*> nop ++0+7a04 <[^>]*> nop ++0+7a08 <[^>]*> nop ++0+7a0c <[^>]*> nop ++0+7a10 <[^>]*> nop ++0+7a14 <[^>]*> nop ++0+7a18 <[^>]*> nop ++0+7a1c <[^>]*> nop ++0+7a20 <[^>]*> nop ++0+7a24 <[^>]*> nop ++0+7a28 <[^>]*> nop ++0+7a2c <[^>]*> nop ++0+7a30 <[^>]*> nop ++0+7a34 <[^>]*> nop ++0+7a38 <[^>]*> nop ++0+7a3c <[^>]*> nop ++0+7a40 <[^>]*> nop ++0+7a44 <[^>]*> nop ++0+7a48 <[^>]*> nop ++0+7a4c <[^>]*> nop ++0+7a50 <[^>]*> nop ++0+7a54 <[^>]*> nop ++0+7a58 <[^>]*> nop ++0+7a5c <[^>]*> nop ++0+7a60 <[^>]*> nop ++0+7a64 <[^>]*> nop ++0+7a68 <[^>]*> nop ++0+7a6c <[^>]*> nop ++0+7a70 <[^>]*> nop ++0+7a74 <[^>]*> nop ++0+7a78 <[^>]*> nop ++0+7a7c <[^>]*> nop ++0+7a80 <[^>]*> nop ++0+7a84 <[^>]*> nop ++0+7a88 <[^>]*> nop ++0+7a8c <[^>]*> nop ++0+7a90 <[^>]*> nop ++0+7a94 <[^>]*> nop ++0+7a98 <[^>]*> nop ++0+7a9c <[^>]*> nop ++0+7aa0 <[^>]*> nop ++0+7aa4 <[^>]*> nop ++0+7aa8 <[^>]*> nop ++0+7aac <[^>]*> nop ++0+7ab0 <[^>]*> nop ++0+7ab4 <[^>]*> nop ++0+7ab8 <[^>]*> nop ++0+7abc <[^>]*> nop ++0+7ac0 <[^>]*> nop ++0+7ac4 <[^>]*> nop ++0+7ac8 <[^>]*> nop ++0+7acc <[^>]*> nop ++0+7ad0 <[^>]*> nop ++0+7ad4 <[^>]*> nop ++0+7ad8 <[^>]*> nop ++0+7adc <[^>]*> nop ++0+7ae0 <[^>]*> nop ++0+7ae4 <[^>]*> nop ++0+7ae8 <[^>]*> nop ++0+7aec <[^>]*> nop ++0+7af0 <[^>]*> nop ++0+7af4 <[^>]*> nop ++0+7af8 <[^>]*> nop ++0+7afc <[^>]*> nop ++0+7b00 <[^>]*> nop ++0+7b04 <[^>]*> nop ++0+7b08 <[^>]*> nop ++0+7b0c <[^>]*> nop ++0+7b10 <[^>]*> nop ++0+7b14 <[^>]*> nop ++0+7b18 <[^>]*> nop ++0+7b1c <[^>]*> nop ++0+7b20 <[^>]*> nop ++0+7b24 <[^>]*> nop ++0+7b28 <[^>]*> nop ++0+7b2c <[^>]*> nop ++0+7b30 <[^>]*> nop ++0+7b34 <[^>]*> nop ++0+7b38 <[^>]*> nop ++0+7b3c <[^>]*> nop ++0+7b40 <[^>]*> nop ++0+7b44 <[^>]*> nop ++0+7b48 <[^>]*> nop ++0+7b4c <[^>]*> nop ++0+7b50 <[^>]*> nop ++0+7b54 <[^>]*> nop ++0+7b58 <[^>]*> nop ++0+7b5c <[^>]*> nop ++0+7b60 <[^>]*> nop ++0+7b64 <[^>]*> nop ++0+7b68 <[^>]*> nop ++0+7b6c <[^>]*> nop ++0+7b70 <[^>]*> nop ++0+7b74 <[^>]*> nop ++0+7b78 <[^>]*> nop ++0+7b7c <[^>]*> nop ++0+7b80 <[^>]*> nop ++0+7b84 <[^>]*> nop ++0+7b88 <[^>]*> nop ++0+7b8c <[^>]*> nop ++0+7b90 <[^>]*> nop ++0+7b94 <[^>]*> nop ++0+7b98 <[^>]*> nop ++0+7b9c <[^>]*> nop ++0+7ba0 <[^>]*> nop ++0+7ba4 <[^>]*> nop ++0+7ba8 <[^>]*> nop ++0+7bac <[^>]*> nop ++0+7bb0 <[^>]*> nop ++0+7bb4 <[^>]*> nop ++0+7bb8 <[^>]*> nop ++0+7bbc <[^>]*> nop ++0+7bc0 <[^>]*> nop ++0+7bc4 <[^>]*> nop ++0+7bc8 <[^>]*> nop ++0+7bcc <[^>]*> nop ++0+7bd0 <[^>]*> nop ++0+7bd4 <[^>]*> nop ++0+7bd8 <[^>]*> nop ++0+7bdc <[^>]*> nop ++0+7be0 <[^>]*> nop ++0+7be4 <[^>]*> nop ++0+7be8 <[^>]*> nop ++0+7bec <[^>]*> nop ++0+7bf0 <[^>]*> nop ++0+7bf4 <[^>]*> nop ++0+7bf8 <[^>]*> nop ++0+7bfc <[^>]*> nop ++0+7c00 <[^>]*> nop ++0+7c04 <[^>]*> nop ++0+7c08 <[^>]*> nop ++0+7c0c <[^>]*> nop ++0+7c10 <[^>]*> nop ++0+7c14 <[^>]*> nop ++0+7c18 <[^>]*> nop ++0+7c1c <[^>]*> nop ++0+7c20 <[^>]*> nop ++0+7c24 <[^>]*> nop ++0+7c28 <[^>]*> nop ++0+7c2c <[^>]*> nop ++0+7c30 <[^>]*> nop ++0+7c34 <[^>]*> nop ++0+7c38 <[^>]*> nop ++0+7c3c <[^>]*> nop ++0+7c40 <[^>]*> nop ++0+7c44 <[^>]*> nop ++0+7c48 <[^>]*> nop ++0+7c4c <[^>]*> nop ++0+7c50 <[^>]*> nop ++0+7c54 <[^>]*> nop ++0+7c58 <[^>]*> nop ++0+7c5c <[^>]*> nop ++0+7c60 <[^>]*> nop ++0+7c64 <[^>]*> nop ++0+7c68 <[^>]*> nop ++0+7c6c <[^>]*> nop ++0+7c70 <[^>]*> nop ++0+7c74 <[^>]*> nop ++0+7c78 <[^>]*> nop ++0+7c7c <[^>]*> nop ++0+7c80 <[^>]*> nop ++0+7c84 <[^>]*> nop ++0+7c88 <[^>]*> nop ++0+7c8c <[^>]*> nop ++0+7c90 <[^>]*> nop ++0+7c94 <[^>]*> nop ++0+7c98 <[^>]*> nop ++0+7c9c <[^>]*> nop ++0+7ca0 <[^>]*> nop ++0+7ca4 <[^>]*> nop ++0+7ca8 <[^>]*> nop ++0+7cac <[^>]*> nop ++0+7cb0 <[^>]*> nop ++0+7cb4 <[^>]*> nop ++0+7cb8 <[^>]*> nop ++0+7cbc <[^>]*> nop ++0+7cc0 <[^>]*> nop ++0+7cc4 <[^>]*> nop ++0+7cc8 <[^>]*> nop ++0+7ccc <[^>]*> nop ++0+7cd0 <[^>]*> nop ++0+7cd4 <[^>]*> nop ++0+7cd8 <[^>]*> nop ++0+7cdc <[^>]*> nop ++0+7ce0 <[^>]*> nop ++0+7ce4 <[^>]*> nop ++0+7ce8 <[^>]*> nop ++0+7cec <[^>]*> nop ++0+7cf0 <[^>]*> nop ++0+7cf4 <[^>]*> nop ++0+7cf8 <[^>]*> nop ++0+7cfc <[^>]*> nop ++0+7d00 <[^>]*> nop ++0+7d04 <[^>]*> nop ++0+7d08 <[^>]*> nop ++0+7d0c <[^>]*> nop ++0+7d10 <[^>]*> nop ++0+7d14 <[^>]*> nop ++0+7d18 <[^>]*> nop ++0+7d1c <[^>]*> nop ++0+7d20 <[^>]*> nop ++0+7d24 <[^>]*> nop ++0+7d28 <[^>]*> nop ++0+7d2c <[^>]*> nop ++0+7d30 <[^>]*> nop ++0+7d34 <[^>]*> nop ++0+7d38 <[^>]*> nop ++0+7d3c <[^>]*> nop ++0+7d40 <[^>]*> nop ++0+7d44 <[^>]*> nop ++0+7d48 <[^>]*> nop ++0+7d4c <[^>]*> nop ++0+7d50 <[^>]*> nop ++0+7d54 <[^>]*> nop ++0+7d58 <[^>]*> nop ++0+7d5c <[^>]*> nop ++0+7d60 <[^>]*> nop ++0+7d64 <[^>]*> nop ++0+7d68 <[^>]*> nop ++0+7d6c <[^>]*> nop ++0+7d70 <[^>]*> nop ++0+7d74 <[^>]*> nop ++0+7d78 <[^>]*> nop ++0+7d7c <[^>]*> nop ++0+7d80 <[^>]*> nop ++0+7d84 <[^>]*> nop ++0+7d88 <[^>]*> nop ++0+7d8c <[^>]*> nop ++0+7d90 <[^>]*> nop ++0+7d94 <[^>]*> nop ++0+7d98 <[^>]*> nop ++0+7d9c <[^>]*> nop ++0+7da0 <[^>]*> nop ++0+7da4 <[^>]*> nop ++0+7da8 <[^>]*> nop ++0+7dac <[^>]*> nop ++0+7db0 <[^>]*> nop ++0+7db4 <[^>]*> nop ++0+7db8 <[^>]*> nop ++0+7dbc <[^>]*> nop ++0+7dc0 <[^>]*> nop ++0+7dc4 <[^>]*> nop ++0+7dc8 <[^>]*> nop ++0+7dcc <[^>]*> nop ++0+7dd0 <[^>]*> nop ++0+7dd4 <[^>]*> nop ++0+7dd8 <[^>]*> nop ++0+7ddc <[^>]*> nop ++0+7de0 <[^>]*> nop ++0+7de4 <[^>]*> nop ++0+7de8 <[^>]*> nop ++0+7dec <[^>]*> nop ++0+7df0 <[^>]*> nop ++0+7df4 <[^>]*> nop ++0+7df8 <[^>]*> nop ++0+7dfc <[^>]*> nop ++0+7e00 <[^>]*> nop ++0+7e04 <[^>]*> nop ++0+7e08 <[^>]*> nop ++0+7e0c <[^>]*> nop ++0+7e10 <[^>]*> nop ++0+7e14 <[^>]*> nop ++0+7e18 <[^>]*> nop ++0+7e1c <[^>]*> nop ++0+7e20 <[^>]*> nop ++0+7e24 <[^>]*> nop ++0+7e28 <[^>]*> nop ++0+7e2c <[^>]*> nop ++0+7e30 <[^>]*> nop ++0+7e34 <[^>]*> nop ++0+7e38 <[^>]*> nop ++0+7e3c <[^>]*> nop ++0+7e40 <[^>]*> nop ++0+7e44 <[^>]*> nop ++0+7e48 <[^>]*> nop ++0+7e4c <[^>]*> nop ++0+7e50 <[^>]*> nop ++0+7e54 <[^>]*> nop ++0+7e58 <[^>]*> nop ++0+7e5c <[^>]*> nop ++0+7e60 <[^>]*> nop ++0+7e64 <[^>]*> nop ++0+7e68 <[^>]*> nop ++0+7e6c <[^>]*> nop ++0+7e70 <[^>]*> nop ++0+7e74 <[^>]*> nop ++0+7e78 <[^>]*> nop ++0+7e7c <[^>]*> nop ++0+7e80 <[^>]*> nop ++0+7e84 <[^>]*> nop ++0+7e88 <[^>]*> nop ++0+7e8c <[^>]*> nop ++0+7e90 <[^>]*> nop ++0+7e94 <[^>]*> nop ++0+7e98 <[^>]*> nop ++0+7e9c <[^>]*> nop ++0+7ea0 <[^>]*> nop ++0+7ea4 <[^>]*> nop ++0+7ea8 <[^>]*> nop ++0+7eac <[^>]*> nop ++0+7eb0 <[^>]*> nop ++0+7eb4 <[^>]*> nop ++0+7eb8 <[^>]*> nop ++0+7ebc <[^>]*> nop ++0+7ec0 <[^>]*> nop ++0+7ec4 <[^>]*> nop ++0+7ec8 <[^>]*> nop ++0+7ecc <[^>]*> nop ++0+7ed0 <[^>]*> nop ++0+7ed4 <[^>]*> nop ++0+7ed8 <[^>]*> nop ++0+7edc <[^>]*> nop ++0+7ee0 <[^>]*> nop ++0+7ee4 <[^>]*> nop ++0+7ee8 <[^>]*> nop ++0+7eec <[^>]*> nop ++0+7ef0 <[^>]*> nop ++0+7ef4 <[^>]*> nop ++0+7ef8 <[^>]*> nop ++0+7efc <[^>]*> nop ++0+7f00 <[^>]*> nop ++0+7f04 <[^>]*> nop ++0+7f08 <[^>]*> nop ++0+7f0c <[^>]*> nop ++0+7f10 <[^>]*> nop ++0+7f14 <[^>]*> nop ++0+7f18 <[^>]*> nop ++0+7f1c <[^>]*> nop ++0+7f20 <[^>]*> nop ++0+7f24 <[^>]*> nop ++0+7f28 <[^>]*> nop ++0+7f2c <[^>]*> nop ++0+7f30 <[^>]*> nop ++0+7f34 <[^>]*> nop ++0+7f38 <[^>]*> nop ++0+7f3c <[^>]*> nop ++0+7f40 <[^>]*> nop ++0+7f44 <[^>]*> nop ++0+7f48 <[^>]*> nop ++0+7f4c <[^>]*> nop ++0+7f50 <[^>]*> nop ++0+7f54 <[^>]*> nop ++0+7f58 <[^>]*> nop ++0+7f5c <[^>]*> nop ++0+7f60 <[^>]*> nop ++0+7f64 <[^>]*> nop ++0+7f68 <[^>]*> nop ++0+7f6c <[^>]*> nop ++0+7f70 <[^>]*> nop ++0+7f74 <[^>]*> nop ++0+7f78 <[^>]*> nop ++0+7f7c <[^>]*> nop ++0+7f80 <[^>]*> nop ++0+7f84 <[^>]*> nop ++0+7f88 <[^>]*> nop ++0+7f8c <[^>]*> nop ++0+7f90 <[^>]*> nop ++0+7f94 <[^>]*> nop ++0+7f98 <[^>]*> nop ++0+7f9c <[^>]*> nop ++0+7fa0 <[^>]*> nop ++0+7fa4 <[^>]*> nop ++0+7fa8 <[^>]*> nop ++0+7fac <[^>]*> nop ++0+7fb0 <[^>]*> nop ++0+7fb4 <[^>]*> nop ++0+7fb8 <[^>]*> nop ++0+7fbc <[^>]*> nop ++0+7fc0 <[^>]*> nop ++0+7fc4 <[^>]*> nop ++0+7fc8 <[^>]*> nop ++0+7fcc <[^>]*> nop ++0+7fd0 <[^>]*> nop ++0+7fd4 <[^>]*> nop ++0+7fd8 <[^>]*> nop ++0+7fdc <[^>]*> nop ++0+7fe0 <[^>]*> nop ++0+7fe4 <[^>]*> nop ++0+7fe8 <[^>]*> nop ++0+7fec <[^>]*> nop ++0+7ff0 <[^>]*> nop ++0+7ff4 <[^>]*> nop ++0+7ff8 <[^>]*> nop ++0+7ffc <[^>]*> nop ++0+8000 <[^>]*> movhi at,0 ++0+8004 <[^>]*> ori at,at,0 ++0+8008 <[^>]*> jmp at ++0+800c <out_of_range> nop ++ ... ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/relax_section.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/relax_section.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,10 @@ ++ beq r2, r3, out_of_range ++ bne r2, r3, in_range ++ nop ++ nop ++in_range: ++ nop ++.align 15 ++ br 0 ++out_of_range: ++ nop +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/relax_ujmp.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/relax_ujmp.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,8221 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 relax_ujmp ++ ++# Test relaxation of unconditional jumps ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section text2: ++00000000 <[^>]*> br 00008000 <[^>]*> ++00000004 <[^>]*> nop ++00000008 <[^>]*> nop ++0000000c <[^>]*> movhi at,1 ++00000010 <[^>]*> ori at,at,24 ++00000014 <[^>]*> jmp at ++00000018 <[^>]*> br 0000002c <[^>]*> ++0000001c <[^>]*> nop ++00000020 <[^>]*> nop ++00000024 <[^>]*> nop ++00000028 <[^>]*> nop ++0000002c <[^>]*> nop ++Disassembly of section text1: ++00008000 <[^>]*> br 00010000 <[^>]*> ++00008004 <[^>]*> nop ++00008008 <[^>]*> nop ++0000800c <[^>]*> movhi at,1 ++00008010 <[^>]*> ori at,at,24 ++00008014 <[^>]*> jmp at ++00008018 <[^>]*> nop ++0000801c <[^>]*> nop ++00008020 <[^>]*> nop ++00008024 <[^>]*> nop ++00008028 <[^>]*> nop ++0000802c <[^>]*> nop ++00008030 <[^>]*> nop ++00008034 <[^>]*> nop ++00008038 <[^>]*> nop ++0000803c <[^>]*> nop ++00008040 <[^>]*> nop ++00008044 <[^>]*> nop ++00008048 <[^>]*> nop ++0000804c <[^>]*> nop ++00008050 <[^>]*> nop ++00008054 <[^>]*> nop ++00008058 <[^>]*> nop ++0000805c <[^>]*> nop ++00008060 <[^>]*> nop ++00008064 <[^>]*> nop ++00008068 <[^>]*> nop ++0000806c <[^>]*> nop ++00008070 <[^>]*> nop ++00008074 <[^>]*> nop ++00008078 <[^>]*> nop ++0000807c <[^>]*> nop ++00008080 <[^>]*> nop ++00008084 <[^>]*> nop ++00008088 <[^>]*> nop ++0000808c <[^>]*> nop ++00008090 <[^>]*> nop ++00008094 <[^>]*> nop ++00008098 <[^>]*> nop ++0000809c <[^>]*> nop ++000080a0 <[^>]*> nop ++000080a4 <[^>]*> nop ++000080a8 <[^>]*> nop ++000080ac <[^>]*> nop ++000080b0 <[^>]*> nop ++000080b4 <[^>]*> nop ++000080b8 <[^>]*> nop ++000080bc <[^>]*> nop ++000080c0 <[^>]*> nop ++000080c4 <[^>]*> nop ++000080c8 <[^>]*> nop ++000080cc <[^>]*> nop ++000080d0 <[^>]*> nop ++000080d4 <[^>]*> nop ++000080d8 <[^>]*> nop ++000080dc <[^>]*> nop ++000080e0 <[^>]*> nop ++000080e4 <[^>]*> nop ++000080e8 <[^>]*> nop ++000080ec <[^>]*> nop ++000080f0 <[^>]*> nop ++000080f4 <[^>]*> nop ++000080f8 <[^>]*> nop ++000080fc <[^>]*> nop ++00008100 <[^>]*> nop ++00008104 <[^>]*> nop ++00008108 <[^>]*> nop ++0000810c <[^>]*> nop ++00008110 <[^>]*> nop ++00008114 <[^>]*> nop ++00008118 <[^>]*> nop ++0000811c <[^>]*> nop ++00008120 <[^>]*> nop ++00008124 <[^>]*> nop ++00008128 <[^>]*> nop ++0000812c <[^>]*> nop ++00008130 <[^>]*> nop ++00008134 <[^>]*> nop ++00008138 <[^>]*> nop ++0000813c <[^>]*> nop ++00008140 <[^>]*> nop ++00008144 <[^>]*> nop ++00008148 <[^>]*> nop ++0000814c <[^>]*> nop ++00008150 <[^>]*> nop ++00008154 <[^>]*> nop ++00008158 <[^>]*> nop ++0000815c <[^>]*> nop ++00008160 <[^>]*> nop ++00008164 <[^>]*> nop ++00008168 <[^>]*> nop ++0000816c <[^>]*> nop ++00008170 <[^>]*> nop ++00008174 <[^>]*> nop ++00008178 <[^>]*> nop ++0000817c <[^>]*> nop ++00008180 <[^>]*> nop ++00008184 <[^>]*> nop ++00008188 <[^>]*> nop ++0000818c <[^>]*> nop ++00008190 <[^>]*> nop ++00008194 <[^>]*> nop ++00008198 <[^>]*> nop ++0000819c <[^>]*> nop ++000081a0 <[^>]*> nop ++000081a4 <[^>]*> nop ++000081a8 <[^>]*> nop ++000081ac <[^>]*> nop ++000081b0 <[^>]*> nop ++000081b4 <[^>]*> nop ++000081b8 <[^>]*> nop ++000081bc <[^>]*> nop ++000081c0 <[^>]*> nop ++000081c4 <[^>]*> nop ++000081c8 <[^>]*> nop ++000081cc <[^>]*> nop ++000081d0 <[^>]*> nop ++000081d4 <[^>]*> nop ++000081d8 <[^>]*> nop ++000081dc <[^>]*> nop ++000081e0 <[^>]*> nop ++000081e4 <[^>]*> nop ++000081e8 <[^>]*> nop ++000081ec <[^>]*> nop ++000081f0 <[^>]*> nop ++000081f4 <[^>]*> nop ++000081f8 <[^>]*> nop ++000081fc <[^>]*> nop ++00008200 <[^>]*> nop ++00008204 <[^>]*> nop ++00008208 <[^>]*> nop ++0000820c <[^>]*> nop ++00008210 <[^>]*> nop ++00008214 <[^>]*> nop ++00008218 <[^>]*> nop ++0000821c <[^>]*> nop ++00008220 <[^>]*> nop ++00008224 <[^>]*> nop ++00008228 <[^>]*> nop ++0000822c <[^>]*> nop ++00008230 <[^>]*> nop ++00008234 <[^>]*> nop ++00008238 <[^>]*> nop ++0000823c <[^>]*> nop ++00008240 <[^>]*> nop ++00008244 <[^>]*> nop ++00008248 <[^>]*> nop ++0000824c <[^>]*> nop ++00008250 <[^>]*> nop ++00008254 <[^>]*> nop ++00008258 <[^>]*> nop ++0000825c <[^>]*> nop ++00008260 <[^>]*> nop ++00008264 <[^>]*> nop ++00008268 <[^>]*> nop ++0000826c <[^>]*> nop ++00008270 <[^>]*> nop ++00008274 <[^>]*> nop ++00008278 <[^>]*> nop ++0000827c <[^>]*> nop ++00008280 <[^>]*> nop ++00008284 <[^>]*> nop ++00008288 <[^>]*> nop ++0000828c <[^>]*> nop ++00008290 <[^>]*> nop ++00008294 <[^>]*> nop ++00008298 <[^>]*> nop ++0000829c <[^>]*> nop ++000082a0 <[^>]*> nop ++000082a4 <[^>]*> nop ++000082a8 <[^>]*> nop ++000082ac <[^>]*> nop ++000082b0 <[^>]*> nop ++000082b4 <[^>]*> nop ++000082b8 <[^>]*> nop ++000082bc <[^>]*> nop ++000082c0 <[^>]*> nop ++000082c4 <[^>]*> nop ++000082c8 <[^>]*> nop ++000082cc <[^>]*> nop ++000082d0 <[^>]*> nop ++000082d4 <[^>]*> nop ++000082d8 <[^>]*> nop ++000082dc <[^>]*> nop ++000082e0 <[^>]*> nop ++000082e4 <[^>]*> nop ++000082e8 <[^>]*> nop ++000082ec <[^>]*> nop ++000082f0 <[^>]*> nop ++000082f4 <[^>]*> nop ++000082f8 <[^>]*> nop ++000082fc <[^>]*> nop ++00008300 <[^>]*> nop ++00008304 <[^>]*> nop ++00008308 <[^>]*> nop ++0000830c <[^>]*> nop ++00008310 <[^>]*> nop ++00008314 <[^>]*> nop ++00008318 <[^>]*> nop ++0000831c <[^>]*> nop ++00008320 <[^>]*> nop ++00008324 <[^>]*> nop ++00008328 <[^>]*> nop ++0000832c <[^>]*> nop ++00008330 <[^>]*> nop ++00008334 <[^>]*> nop ++00008338 <[^>]*> nop ++0000833c <[^>]*> nop ++00008340 <[^>]*> nop ++00008344 <[^>]*> nop ++00008348 <[^>]*> nop ++0000834c <[^>]*> nop ++00008350 <[^>]*> nop ++00008354 <[^>]*> nop ++00008358 <[^>]*> nop ++0000835c <[^>]*> nop ++00008360 <[^>]*> nop ++00008364 <[^>]*> nop ++00008368 <[^>]*> nop ++0000836c <[^>]*> nop ++00008370 <[^>]*> nop ++00008374 <[^>]*> nop ++00008378 <[^>]*> nop ++0000837c <[^>]*> nop ++00008380 <[^>]*> nop ++00008384 <[^>]*> nop ++00008388 <[^>]*> nop ++0000838c <[^>]*> nop ++00008390 <[^>]*> nop ++00008394 <[^>]*> nop ++00008398 <[^>]*> nop ++0000839c <[^>]*> nop ++000083a0 <[^>]*> nop ++000083a4 <[^>]*> nop ++000083a8 <[^>]*> nop ++000083ac <[^>]*> nop ++000083b0 <[^>]*> nop ++000083b4 <[^>]*> nop ++000083b8 <[^>]*> nop ++000083bc <[^>]*> nop ++000083c0 <[^>]*> nop ++000083c4 <[^>]*> nop ++000083c8 <[^>]*> nop ++000083cc <[^>]*> nop ++000083d0 <[^>]*> nop ++000083d4 <[^>]*> nop ++000083d8 <[^>]*> nop ++000083dc <[^>]*> nop ++000083e0 <[^>]*> nop ++000083e4 <[^>]*> nop ++000083e8 <[^>]*> nop ++000083ec <[^>]*> nop ++000083f0 <[^>]*> nop ++000083f4 <[^>]*> nop ++000083f8 <[^>]*> nop ++000083fc <[^>]*> nop ++00008400 <[^>]*> nop ++00008404 <[^>]*> nop ++00008408 <[^>]*> nop ++0000840c <[^>]*> nop ++00008410 <[^>]*> nop ++00008414 <[^>]*> nop ++00008418 <[^>]*> nop ++0000841c <[^>]*> nop ++00008420 <[^>]*> nop ++00008424 <[^>]*> nop ++00008428 <[^>]*> nop ++0000842c <[^>]*> nop ++00008430 <[^>]*> nop ++00008434 <[^>]*> nop ++00008438 <[^>]*> nop ++0000843c <[^>]*> nop ++00008440 <[^>]*> nop ++00008444 <[^>]*> nop ++00008448 <[^>]*> nop ++0000844c <[^>]*> nop ++00008450 <[^>]*> nop ++00008454 <[^>]*> nop ++00008458 <[^>]*> nop ++0000845c <[^>]*> nop ++00008460 <[^>]*> nop ++00008464 <[^>]*> nop ++00008468 <[^>]*> nop ++0000846c <[^>]*> nop ++00008470 <[^>]*> nop ++00008474 <[^>]*> nop ++00008478 <[^>]*> nop ++0000847c <[^>]*> nop ++00008480 <[^>]*> nop ++00008484 <[^>]*> nop ++00008488 <[^>]*> nop ++0000848c <[^>]*> nop ++00008490 <[^>]*> nop ++00008494 <[^>]*> nop ++00008498 <[^>]*> nop ++0000849c <[^>]*> nop ++000084a0 <[^>]*> nop ++000084a4 <[^>]*> nop ++000084a8 <[^>]*> nop ++000084ac <[^>]*> nop ++000084b0 <[^>]*> nop ++000084b4 <[^>]*> nop ++000084b8 <[^>]*> nop ++000084bc <[^>]*> nop ++000084c0 <[^>]*> nop ++000084c4 <[^>]*> nop ++000084c8 <[^>]*> nop ++000084cc <[^>]*> nop ++000084d0 <[^>]*> nop ++000084d4 <[^>]*> nop ++000084d8 <[^>]*> nop ++000084dc <[^>]*> nop ++000084e0 <[^>]*> nop ++000084e4 <[^>]*> nop ++000084e8 <[^>]*> nop ++000084ec <[^>]*> nop ++000084f0 <[^>]*> nop ++000084f4 <[^>]*> nop ++000084f8 <[^>]*> nop ++000084fc <[^>]*> nop ++00008500 <[^>]*> nop ++00008504 <[^>]*> nop ++00008508 <[^>]*> nop ++0000850c <[^>]*> nop ++00008510 <[^>]*> nop ++00008514 <[^>]*> nop ++00008518 <[^>]*> nop ++0000851c <[^>]*> nop ++00008520 <[^>]*> nop ++00008524 <[^>]*> nop ++00008528 <[^>]*> nop ++0000852c <[^>]*> nop ++00008530 <[^>]*> nop ++00008534 <[^>]*> nop ++00008538 <[^>]*> nop ++0000853c <[^>]*> nop ++00008540 <[^>]*> nop ++00008544 <[^>]*> nop ++00008548 <[^>]*> nop ++0000854c <[^>]*> nop ++00008550 <[^>]*> nop ++00008554 <[^>]*> nop ++00008558 <[^>]*> nop ++0000855c <[^>]*> nop ++00008560 <[^>]*> nop ++00008564 <[^>]*> nop ++00008568 <[^>]*> nop ++0000856c <[^>]*> nop ++00008570 <[^>]*> nop ++00008574 <[^>]*> nop ++00008578 <[^>]*> nop ++0000857c <[^>]*> nop ++00008580 <[^>]*> nop ++00008584 <[^>]*> nop ++00008588 <[^>]*> nop ++0000858c <[^>]*> nop ++00008590 <[^>]*> nop ++00008594 <[^>]*> nop ++00008598 <[^>]*> nop ++0000859c <[^>]*> nop ++000085a0 <[^>]*> nop ++000085a4 <[^>]*> nop ++000085a8 <[^>]*> nop ++000085ac <[^>]*> nop ++000085b0 <[^>]*> nop ++000085b4 <[^>]*> nop ++000085b8 <[^>]*> nop ++000085bc <[^>]*> nop ++000085c0 <[^>]*> nop ++000085c4 <[^>]*> nop ++000085c8 <[^>]*> nop ++000085cc <[^>]*> nop ++000085d0 <[^>]*> nop ++000085d4 <[^>]*> nop ++000085d8 <[^>]*> nop ++000085dc <[^>]*> nop ++000085e0 <[^>]*> nop ++000085e4 <[^>]*> nop ++000085e8 <[^>]*> nop ++000085ec <[^>]*> nop ++000085f0 <[^>]*> nop ++000085f4 <[^>]*> nop ++000085f8 <[^>]*> nop ++000085fc <[^>]*> nop ++00008600 <[^>]*> nop ++00008604 <[^>]*> nop ++00008608 <[^>]*> nop ++0000860c <[^>]*> nop ++00008610 <[^>]*> nop ++00008614 <[^>]*> nop ++00008618 <[^>]*> nop ++0000861c <[^>]*> nop ++00008620 <[^>]*> nop ++00008624 <[^>]*> nop ++00008628 <[^>]*> nop ++0000862c <[^>]*> nop ++00008630 <[^>]*> nop ++00008634 <[^>]*> nop ++00008638 <[^>]*> nop ++0000863c <[^>]*> nop ++00008640 <[^>]*> nop ++00008644 <[^>]*> nop ++00008648 <[^>]*> nop ++0000864c <[^>]*> nop ++00008650 <[^>]*> nop ++00008654 <[^>]*> nop ++00008658 <[^>]*> nop ++0000865c <[^>]*> nop ++00008660 <[^>]*> nop ++00008664 <[^>]*> nop ++00008668 <[^>]*> nop ++0000866c <[^>]*> nop ++00008670 <[^>]*> nop ++00008674 <[^>]*> nop ++00008678 <[^>]*> nop ++0000867c <[^>]*> nop ++00008680 <[^>]*> nop ++00008684 <[^>]*> nop ++00008688 <[^>]*> nop ++0000868c <[^>]*> nop ++00008690 <[^>]*> nop ++00008694 <[^>]*> nop ++00008698 <[^>]*> nop ++0000869c <[^>]*> nop ++000086a0 <[^>]*> nop ++000086a4 <[^>]*> nop ++000086a8 <[^>]*> nop ++000086ac <[^>]*> nop ++000086b0 <[^>]*> nop ++000086b4 <[^>]*> nop ++000086b8 <[^>]*> nop ++000086bc <[^>]*> nop ++000086c0 <[^>]*> nop ++000086c4 <[^>]*> nop ++000086c8 <[^>]*> nop ++000086cc <[^>]*> nop ++000086d0 <[^>]*> nop ++000086d4 <[^>]*> nop ++000086d8 <[^>]*> nop ++000086dc <[^>]*> nop ++000086e0 <[^>]*> nop ++000086e4 <[^>]*> nop ++000086e8 <[^>]*> nop ++000086ec <[^>]*> nop ++000086f0 <[^>]*> nop ++000086f4 <[^>]*> nop ++000086f8 <[^>]*> nop ++000086fc <[^>]*> nop ++00008700 <[^>]*> nop ++00008704 <[^>]*> nop ++00008708 <[^>]*> nop ++0000870c <[^>]*> nop ++00008710 <[^>]*> nop ++00008714 <[^>]*> nop ++00008718 <[^>]*> nop ++0000871c <[^>]*> nop ++00008720 <[^>]*> nop ++00008724 <[^>]*> nop ++00008728 <[^>]*> nop ++0000872c <[^>]*> nop ++00008730 <[^>]*> nop ++00008734 <[^>]*> nop ++00008738 <[^>]*> nop ++0000873c <[^>]*> nop ++00008740 <[^>]*> nop ++00008744 <[^>]*> nop ++00008748 <[^>]*> nop ++0000874c <[^>]*> nop ++00008750 <[^>]*> nop ++00008754 <[^>]*> nop ++00008758 <[^>]*> nop ++0000875c <[^>]*> nop ++00008760 <[^>]*> nop ++00008764 <[^>]*> nop ++00008768 <[^>]*> nop ++0000876c <[^>]*> nop ++00008770 <[^>]*> nop ++00008774 <[^>]*> nop ++00008778 <[^>]*> nop ++0000877c <[^>]*> nop ++00008780 <[^>]*> nop ++00008784 <[^>]*> nop ++00008788 <[^>]*> nop ++0000878c <[^>]*> nop ++00008790 <[^>]*> nop ++00008794 <[^>]*> nop ++00008798 <[^>]*> nop ++0000879c <[^>]*> nop ++000087a0 <[^>]*> nop ++000087a4 <[^>]*> nop ++000087a8 <[^>]*> nop ++000087ac <[^>]*> nop ++000087b0 <[^>]*> nop ++000087b4 <[^>]*> nop ++000087b8 <[^>]*> nop ++000087bc <[^>]*> nop ++000087c0 <[^>]*> nop ++000087c4 <[^>]*> nop ++000087c8 <[^>]*> nop ++000087cc <[^>]*> nop ++000087d0 <[^>]*> nop ++000087d4 <[^>]*> nop ++000087d8 <[^>]*> nop ++000087dc <[^>]*> nop ++000087e0 <[^>]*> nop ++000087e4 <[^>]*> nop ++000087e8 <[^>]*> nop ++000087ec <[^>]*> nop ++000087f0 <[^>]*> nop ++000087f4 <[^>]*> nop ++000087f8 <[^>]*> nop ++000087fc <[^>]*> nop ++00008800 <[^>]*> nop ++00008804 <[^>]*> nop ++00008808 <[^>]*> nop ++0000880c <[^>]*> nop ++00008810 <[^>]*> nop ++00008814 <[^>]*> nop ++00008818 <[^>]*> nop ++0000881c <[^>]*> nop ++00008820 <[^>]*> nop ++00008824 <[^>]*> nop ++00008828 <[^>]*> nop ++0000882c <[^>]*> nop ++00008830 <[^>]*> nop ++00008834 <[^>]*> nop ++00008838 <[^>]*> nop ++0000883c <[^>]*> nop ++00008840 <[^>]*> nop ++00008844 <[^>]*> nop ++00008848 <[^>]*> nop ++0000884c <[^>]*> nop ++00008850 <[^>]*> nop ++00008854 <[^>]*> nop ++00008858 <[^>]*> nop ++0000885c <[^>]*> nop ++00008860 <[^>]*> nop ++00008864 <[^>]*> nop ++00008868 <[^>]*> nop ++0000886c <[^>]*> nop ++00008870 <[^>]*> nop ++00008874 <[^>]*> nop ++00008878 <[^>]*> nop ++0000887c <[^>]*> nop ++00008880 <[^>]*> nop ++00008884 <[^>]*> nop ++00008888 <[^>]*> nop ++0000888c <[^>]*> nop ++00008890 <[^>]*> nop ++00008894 <[^>]*> nop ++00008898 <[^>]*> nop ++0000889c <[^>]*> nop ++000088a0 <[^>]*> nop ++000088a4 <[^>]*> nop ++000088a8 <[^>]*> nop ++000088ac <[^>]*> nop ++000088b0 <[^>]*> nop ++000088b4 <[^>]*> nop ++000088b8 <[^>]*> nop ++000088bc <[^>]*> nop ++000088c0 <[^>]*> nop ++000088c4 <[^>]*> nop ++000088c8 <[^>]*> nop ++000088cc <[^>]*> nop ++000088d0 <[^>]*> nop ++000088d4 <[^>]*> nop ++000088d8 <[^>]*> nop ++000088dc <[^>]*> nop ++000088e0 <[^>]*> nop ++000088e4 <[^>]*> nop ++000088e8 <[^>]*> nop ++000088ec <[^>]*> nop ++000088f0 <[^>]*> nop ++000088f4 <[^>]*> nop ++000088f8 <[^>]*> nop ++000088fc <[^>]*> nop ++00008900 <[^>]*> nop ++00008904 <[^>]*> nop ++00008908 <[^>]*> nop ++0000890c <[^>]*> nop ++00008910 <[^>]*> nop ++00008914 <[^>]*> nop ++00008918 <[^>]*> nop ++0000891c <[^>]*> nop ++00008920 <[^>]*> nop ++00008924 <[^>]*> nop ++00008928 <[^>]*> nop ++0000892c <[^>]*> nop ++00008930 <[^>]*> nop ++00008934 <[^>]*> nop ++00008938 <[^>]*> nop ++0000893c <[^>]*> nop ++00008940 <[^>]*> nop ++00008944 <[^>]*> nop ++00008948 <[^>]*> nop ++0000894c <[^>]*> nop ++00008950 <[^>]*> nop ++00008954 <[^>]*> nop ++00008958 <[^>]*> nop ++0000895c <[^>]*> nop ++00008960 <[^>]*> nop ++00008964 <[^>]*> nop ++00008968 <[^>]*> nop ++0000896c <[^>]*> nop ++00008970 <[^>]*> nop ++00008974 <[^>]*> nop ++00008978 <[^>]*> nop ++0000897c <[^>]*> nop ++00008980 <[^>]*> nop ++00008984 <[^>]*> nop ++00008988 <[^>]*> nop ++0000898c <[^>]*> nop ++00008990 <[^>]*> nop ++00008994 <[^>]*> nop ++00008998 <[^>]*> nop ++0000899c <[^>]*> nop ++000089a0 <[^>]*> nop ++000089a4 <[^>]*> nop ++000089a8 <[^>]*> nop ++000089ac <[^>]*> nop ++000089b0 <[^>]*> nop ++000089b4 <[^>]*> nop ++000089b8 <[^>]*> nop ++000089bc <[^>]*> nop ++000089c0 <[^>]*> nop ++000089c4 <[^>]*> nop ++000089c8 <[^>]*> nop ++000089cc <[^>]*> nop ++000089d0 <[^>]*> nop ++000089d4 <[^>]*> nop ++000089d8 <[^>]*> nop ++000089dc <[^>]*> nop ++000089e0 <[^>]*> nop ++000089e4 <[^>]*> nop ++000089e8 <[^>]*> nop ++000089ec <[^>]*> nop ++000089f0 <[^>]*> nop ++000089f4 <[^>]*> nop ++000089f8 <[^>]*> nop ++000089fc <[^>]*> nop ++00008a00 <[^>]*> nop ++00008a04 <[^>]*> nop ++00008a08 <[^>]*> nop ++00008a0c <[^>]*> nop ++00008a10 <[^>]*> nop ++00008a14 <[^>]*> nop ++00008a18 <[^>]*> nop ++00008a1c <[^>]*> nop ++00008a20 <[^>]*> nop ++00008a24 <[^>]*> nop ++00008a28 <[^>]*> nop ++00008a2c <[^>]*> nop ++00008a30 <[^>]*> nop ++00008a34 <[^>]*> nop ++00008a38 <[^>]*> nop ++00008a3c <[^>]*> nop ++00008a40 <[^>]*> nop ++00008a44 <[^>]*> nop ++00008a48 <[^>]*> nop ++00008a4c <[^>]*> nop ++00008a50 <[^>]*> nop ++00008a54 <[^>]*> nop ++00008a58 <[^>]*> nop ++00008a5c <[^>]*> nop ++00008a60 <[^>]*> nop ++00008a64 <[^>]*> nop ++00008a68 <[^>]*> nop ++00008a6c <[^>]*> nop ++00008a70 <[^>]*> nop ++00008a74 <[^>]*> nop ++00008a78 <[^>]*> nop ++00008a7c <[^>]*> nop ++00008a80 <[^>]*> nop ++00008a84 <[^>]*> nop ++00008a88 <[^>]*> nop ++00008a8c <[^>]*> nop ++00008a90 <[^>]*> nop ++00008a94 <[^>]*> nop ++00008a98 <[^>]*> nop ++00008a9c <[^>]*> nop ++00008aa0 <[^>]*> nop ++00008aa4 <[^>]*> nop ++00008aa8 <[^>]*> nop ++00008aac <[^>]*> nop ++00008ab0 <[^>]*> nop ++00008ab4 <[^>]*> nop ++00008ab8 <[^>]*> nop ++00008abc <[^>]*> nop ++00008ac0 <[^>]*> nop ++00008ac4 <[^>]*> nop ++00008ac8 <[^>]*> nop ++00008acc <[^>]*> nop ++00008ad0 <[^>]*> nop ++00008ad4 <[^>]*> nop ++00008ad8 <[^>]*> nop ++00008adc <[^>]*> nop ++00008ae0 <[^>]*> nop ++00008ae4 <[^>]*> nop ++00008ae8 <[^>]*> nop ++00008aec <[^>]*> nop ++00008af0 <[^>]*> nop ++00008af4 <[^>]*> nop ++00008af8 <[^>]*> nop ++00008afc <[^>]*> nop ++00008b00 <[^>]*> nop ++00008b04 <[^>]*> nop ++00008b08 <[^>]*> nop ++00008b0c <[^>]*> nop ++00008b10 <[^>]*> nop ++00008b14 <[^>]*> nop ++00008b18 <[^>]*> nop ++00008b1c <[^>]*> nop ++00008b20 <[^>]*> nop ++00008b24 <[^>]*> nop ++00008b28 <[^>]*> nop ++00008b2c <[^>]*> nop ++00008b30 <[^>]*> nop ++00008b34 <[^>]*> nop ++00008b38 <[^>]*> nop ++00008b3c <[^>]*> nop ++00008b40 <[^>]*> nop ++00008b44 <[^>]*> nop ++00008b48 <[^>]*> nop ++00008b4c <[^>]*> nop ++00008b50 <[^>]*> nop ++00008b54 <[^>]*> nop ++00008b58 <[^>]*> nop ++00008b5c <[^>]*> nop ++00008b60 <[^>]*> nop ++00008b64 <[^>]*> nop ++00008b68 <[^>]*> nop ++00008b6c <[^>]*> nop ++00008b70 <[^>]*> nop ++00008b74 <[^>]*> nop ++00008b78 <[^>]*> nop ++00008b7c <[^>]*> nop ++00008b80 <[^>]*> nop ++00008b84 <[^>]*> nop ++00008b88 <[^>]*> nop ++00008b8c <[^>]*> nop ++00008b90 <[^>]*> nop ++00008b94 <[^>]*> nop ++00008b98 <[^>]*> nop ++00008b9c <[^>]*> nop ++00008ba0 <[^>]*> nop ++00008ba4 <[^>]*> nop ++00008ba8 <[^>]*> nop ++00008bac <[^>]*> nop ++00008bb0 <[^>]*> nop ++00008bb4 <[^>]*> nop ++00008bb8 <[^>]*> nop ++00008bbc <[^>]*> nop ++00008bc0 <[^>]*> nop ++00008bc4 <[^>]*> nop ++00008bc8 <[^>]*> nop ++00008bcc <[^>]*> nop ++00008bd0 <[^>]*> nop ++00008bd4 <[^>]*> nop ++00008bd8 <[^>]*> nop ++00008bdc <[^>]*> nop ++00008be0 <[^>]*> nop ++00008be4 <[^>]*> nop ++00008be8 <[^>]*> nop ++00008bec <[^>]*> nop ++00008bf0 <[^>]*> nop ++00008bf4 <[^>]*> nop ++00008bf8 <[^>]*> nop ++00008bfc <[^>]*> nop ++00008c00 <[^>]*> nop ++00008c04 <[^>]*> nop ++00008c08 <[^>]*> nop ++00008c0c <[^>]*> nop ++00008c10 <[^>]*> nop ++00008c14 <[^>]*> nop ++00008c18 <[^>]*> nop ++00008c1c <[^>]*> nop ++00008c20 <[^>]*> nop ++00008c24 <[^>]*> nop ++00008c28 <[^>]*> nop ++00008c2c <[^>]*> nop ++00008c30 <[^>]*> nop ++00008c34 <[^>]*> nop ++00008c38 <[^>]*> nop ++00008c3c <[^>]*> nop ++00008c40 <[^>]*> nop ++00008c44 <[^>]*> nop ++00008c48 <[^>]*> nop ++00008c4c <[^>]*> nop ++00008c50 <[^>]*> nop ++00008c54 <[^>]*> nop ++00008c58 <[^>]*> nop ++00008c5c <[^>]*> nop ++00008c60 <[^>]*> nop ++00008c64 <[^>]*> nop ++00008c68 <[^>]*> nop ++00008c6c <[^>]*> nop ++00008c70 <[^>]*> nop ++00008c74 <[^>]*> nop ++00008c78 <[^>]*> nop ++00008c7c <[^>]*> nop ++00008c80 <[^>]*> nop ++00008c84 <[^>]*> nop ++00008c88 <[^>]*> nop ++00008c8c <[^>]*> nop ++00008c90 <[^>]*> nop ++00008c94 <[^>]*> nop ++00008c98 <[^>]*> nop ++00008c9c <[^>]*> nop ++00008ca0 <[^>]*> nop ++00008ca4 <[^>]*> nop ++00008ca8 <[^>]*> nop ++00008cac <[^>]*> nop ++00008cb0 <[^>]*> nop ++00008cb4 <[^>]*> nop ++00008cb8 <[^>]*> nop ++00008cbc <[^>]*> nop ++00008cc0 <[^>]*> nop ++00008cc4 <[^>]*> nop ++00008cc8 <[^>]*> nop ++00008ccc <[^>]*> nop ++00008cd0 <[^>]*> nop ++00008cd4 <[^>]*> nop ++00008cd8 <[^>]*> nop ++00008cdc <[^>]*> nop ++00008ce0 <[^>]*> nop ++00008ce4 <[^>]*> nop ++00008ce8 <[^>]*> nop ++00008cec <[^>]*> nop ++00008cf0 <[^>]*> nop ++00008cf4 <[^>]*> nop ++00008cf8 <[^>]*> nop ++00008cfc <[^>]*> nop ++00008d00 <[^>]*> nop ++00008d04 <[^>]*> nop ++00008d08 <[^>]*> nop ++00008d0c <[^>]*> nop ++00008d10 <[^>]*> nop ++00008d14 <[^>]*> nop ++00008d18 <[^>]*> nop ++00008d1c <[^>]*> nop ++00008d20 <[^>]*> nop ++00008d24 <[^>]*> nop ++00008d28 <[^>]*> nop ++00008d2c <[^>]*> nop ++00008d30 <[^>]*> nop ++00008d34 <[^>]*> nop ++00008d38 <[^>]*> nop ++00008d3c <[^>]*> nop ++00008d40 <[^>]*> nop ++00008d44 <[^>]*> nop ++00008d48 <[^>]*> nop ++00008d4c <[^>]*> nop ++00008d50 <[^>]*> nop ++00008d54 <[^>]*> nop ++00008d58 <[^>]*> nop ++00008d5c <[^>]*> nop ++00008d60 <[^>]*> nop ++00008d64 <[^>]*> nop ++00008d68 <[^>]*> nop ++00008d6c <[^>]*> nop ++00008d70 <[^>]*> nop ++00008d74 <[^>]*> nop ++00008d78 <[^>]*> nop ++00008d7c <[^>]*> nop ++00008d80 <[^>]*> nop ++00008d84 <[^>]*> nop ++00008d88 <[^>]*> nop ++00008d8c <[^>]*> nop ++00008d90 <[^>]*> nop ++00008d94 <[^>]*> nop ++00008d98 <[^>]*> nop ++00008d9c <[^>]*> nop ++00008da0 <[^>]*> nop ++00008da4 <[^>]*> nop ++00008da8 <[^>]*> nop ++00008dac <[^>]*> nop ++00008db0 <[^>]*> nop ++00008db4 <[^>]*> nop ++00008db8 <[^>]*> nop ++00008dbc <[^>]*> nop ++00008dc0 <[^>]*> nop ++00008dc4 <[^>]*> nop ++00008dc8 <[^>]*> nop ++00008dcc <[^>]*> nop ++00008dd0 <[^>]*> nop ++00008dd4 <[^>]*> nop ++00008dd8 <[^>]*> nop ++00008ddc <[^>]*> nop ++00008de0 <[^>]*> nop ++00008de4 <[^>]*> nop ++00008de8 <[^>]*> nop ++00008dec <[^>]*> nop ++00008df0 <[^>]*> nop ++00008df4 <[^>]*> nop ++00008df8 <[^>]*> nop ++00008dfc <[^>]*> nop ++00008e00 <[^>]*> nop ++00008e04 <[^>]*> nop ++00008e08 <[^>]*> nop ++00008e0c <[^>]*> nop ++00008e10 <[^>]*> nop ++00008e14 <[^>]*> nop ++00008e18 <[^>]*> nop ++00008e1c <[^>]*> nop ++00008e20 <[^>]*> nop ++00008e24 <[^>]*> nop ++00008e28 <[^>]*> nop ++00008e2c <[^>]*> nop ++00008e30 <[^>]*> nop ++00008e34 <[^>]*> nop ++00008e38 <[^>]*> nop ++00008e3c <[^>]*> nop ++00008e40 <[^>]*> nop ++00008e44 <[^>]*> nop ++00008e48 <[^>]*> nop ++00008e4c <[^>]*> nop ++00008e50 <[^>]*> nop ++00008e54 <[^>]*> nop ++00008e58 <[^>]*> nop ++00008e5c <[^>]*> nop ++00008e60 <[^>]*> nop ++00008e64 <[^>]*> nop ++00008e68 <[^>]*> nop ++00008e6c <[^>]*> nop ++00008e70 <[^>]*> nop ++00008e74 <[^>]*> nop ++00008e78 <[^>]*> nop ++00008e7c <[^>]*> nop ++00008e80 <[^>]*> nop ++00008e84 <[^>]*> nop ++00008e88 <[^>]*> nop ++00008e8c <[^>]*> nop ++00008e90 <[^>]*> nop ++00008e94 <[^>]*> nop ++00008e98 <[^>]*> nop ++00008e9c <[^>]*> nop ++00008ea0 <[^>]*> nop ++00008ea4 <[^>]*> nop ++00008ea8 <[^>]*> nop ++00008eac <[^>]*> nop ++00008eb0 <[^>]*> nop ++00008eb4 <[^>]*> nop ++00008eb8 <[^>]*> nop ++00008ebc <[^>]*> nop ++00008ec0 <[^>]*> nop ++00008ec4 <[^>]*> nop ++00008ec8 <[^>]*> nop ++00008ecc <[^>]*> nop ++00008ed0 <[^>]*> nop ++00008ed4 <[^>]*> nop ++00008ed8 <[^>]*> nop ++00008edc <[^>]*> nop ++00008ee0 <[^>]*> nop ++00008ee4 <[^>]*> nop ++00008ee8 <[^>]*> nop ++00008eec <[^>]*> nop ++00008ef0 <[^>]*> nop ++00008ef4 <[^>]*> nop ++00008ef8 <[^>]*> nop ++00008efc <[^>]*> nop ++00008f00 <[^>]*> nop ++00008f04 <[^>]*> nop ++00008f08 <[^>]*> nop ++00008f0c <[^>]*> nop ++00008f10 <[^>]*> nop ++00008f14 <[^>]*> nop ++00008f18 <[^>]*> nop ++00008f1c <[^>]*> nop ++00008f20 <[^>]*> nop ++00008f24 <[^>]*> nop ++00008f28 <[^>]*> nop ++00008f2c <[^>]*> nop ++00008f30 <[^>]*> nop ++00008f34 <[^>]*> nop ++00008f38 <[^>]*> nop ++00008f3c <[^>]*> nop ++00008f40 <[^>]*> nop ++00008f44 <[^>]*> nop ++00008f48 <[^>]*> nop ++00008f4c <[^>]*> nop ++00008f50 <[^>]*> nop ++00008f54 <[^>]*> nop ++00008f58 <[^>]*> nop ++00008f5c <[^>]*> nop ++00008f60 <[^>]*> nop ++00008f64 <[^>]*> nop ++00008f68 <[^>]*> nop ++00008f6c <[^>]*> nop ++00008f70 <[^>]*> nop ++00008f74 <[^>]*> nop ++00008f78 <[^>]*> nop ++00008f7c <[^>]*> nop ++00008f80 <[^>]*> nop ++00008f84 <[^>]*> nop ++00008f88 <[^>]*> nop ++00008f8c <[^>]*> nop ++00008f90 <[^>]*> nop ++00008f94 <[^>]*> nop ++00008f98 <[^>]*> nop ++00008f9c <[^>]*> nop ++00008fa0 <[^>]*> nop ++00008fa4 <[^>]*> nop ++00008fa8 <[^>]*> nop ++00008fac <[^>]*> nop ++00008fb0 <[^>]*> nop ++00008fb4 <[^>]*> nop ++00008fb8 <[^>]*> nop ++00008fbc <[^>]*> nop ++00008fc0 <[^>]*> nop ++00008fc4 <[^>]*> nop ++00008fc8 <[^>]*> nop ++00008fcc <[^>]*> nop ++00008fd0 <[^>]*> nop ++00008fd4 <[^>]*> nop ++00008fd8 <[^>]*> nop ++00008fdc <[^>]*> nop ++00008fe0 <[^>]*> nop ++00008fe4 <[^>]*> nop ++00008fe8 <[^>]*> nop ++00008fec <[^>]*> nop ++00008ff0 <[^>]*> nop ++00008ff4 <[^>]*> nop ++00008ff8 <[^>]*> nop ++00008ffc <[^>]*> nop ++00009000 <[^>]*> nop ++00009004 <[^>]*> nop ++00009008 <[^>]*> nop ++0000900c <[^>]*> nop ++00009010 <[^>]*> nop ++00009014 <[^>]*> nop ++00009018 <[^>]*> nop ++0000901c <[^>]*> nop ++00009020 <[^>]*> nop ++00009024 <[^>]*> nop ++00009028 <[^>]*> nop ++0000902c <[^>]*> nop ++00009030 <[^>]*> nop ++00009034 <[^>]*> nop ++00009038 <[^>]*> nop ++0000903c <[^>]*> nop ++00009040 <[^>]*> nop ++00009044 <[^>]*> nop ++00009048 <[^>]*> nop ++0000904c <[^>]*> nop ++00009050 <[^>]*> nop ++00009054 <[^>]*> nop ++00009058 <[^>]*> nop ++0000905c <[^>]*> nop ++00009060 <[^>]*> nop ++00009064 <[^>]*> nop ++00009068 <[^>]*> nop ++0000906c <[^>]*> nop ++00009070 <[^>]*> nop ++00009074 <[^>]*> nop ++00009078 <[^>]*> nop ++0000907c <[^>]*> nop ++00009080 <[^>]*> nop ++00009084 <[^>]*> nop ++00009088 <[^>]*> nop ++0000908c <[^>]*> nop ++00009090 <[^>]*> nop ++00009094 <[^>]*> nop ++00009098 <[^>]*> nop ++0000909c <[^>]*> nop ++000090a0 <[^>]*> nop ++000090a4 <[^>]*> nop ++000090a8 <[^>]*> nop ++000090ac <[^>]*> nop ++000090b0 <[^>]*> nop ++000090b4 <[^>]*> nop ++000090b8 <[^>]*> nop ++000090bc <[^>]*> nop ++000090c0 <[^>]*> nop ++000090c4 <[^>]*> nop ++000090c8 <[^>]*> nop ++000090cc <[^>]*> nop ++000090d0 <[^>]*> nop ++000090d4 <[^>]*> nop ++000090d8 <[^>]*> nop ++000090dc <[^>]*> nop ++000090e0 <[^>]*> nop ++000090e4 <[^>]*> nop ++000090e8 <[^>]*> nop ++000090ec <[^>]*> nop ++000090f0 <[^>]*> nop ++000090f4 <[^>]*> nop ++000090f8 <[^>]*> nop ++000090fc <[^>]*> nop ++00009100 <[^>]*> nop ++00009104 <[^>]*> nop ++00009108 <[^>]*> nop ++0000910c <[^>]*> nop ++00009110 <[^>]*> nop ++00009114 <[^>]*> nop ++00009118 <[^>]*> nop ++0000911c <[^>]*> nop ++00009120 <[^>]*> nop ++00009124 <[^>]*> nop ++00009128 <[^>]*> nop ++0000912c <[^>]*> nop ++00009130 <[^>]*> nop ++00009134 <[^>]*> nop ++00009138 <[^>]*> nop ++0000913c <[^>]*> nop ++00009140 <[^>]*> nop ++00009144 <[^>]*> nop ++00009148 <[^>]*> nop ++0000914c <[^>]*> nop ++00009150 <[^>]*> nop ++00009154 <[^>]*> nop ++00009158 <[^>]*> nop ++0000915c <[^>]*> nop ++00009160 <[^>]*> nop ++00009164 <[^>]*> nop ++00009168 <[^>]*> nop ++0000916c <[^>]*> nop ++00009170 <[^>]*> nop ++00009174 <[^>]*> nop ++00009178 <[^>]*> nop ++0000917c <[^>]*> nop ++00009180 <[^>]*> nop ++00009184 <[^>]*> nop ++00009188 <[^>]*> nop ++0000918c <[^>]*> nop ++00009190 <[^>]*> nop ++00009194 <[^>]*> nop ++00009198 <[^>]*> nop ++0000919c <[^>]*> nop ++000091a0 <[^>]*> nop ++000091a4 <[^>]*> nop ++000091a8 <[^>]*> nop ++000091ac <[^>]*> nop ++000091b0 <[^>]*> nop ++000091b4 <[^>]*> nop ++000091b8 <[^>]*> nop ++000091bc <[^>]*> nop ++000091c0 <[^>]*> nop ++000091c4 <[^>]*> nop ++000091c8 <[^>]*> nop ++000091cc <[^>]*> nop ++000091d0 <[^>]*> nop ++000091d4 <[^>]*> nop ++000091d8 <[^>]*> nop ++000091dc <[^>]*> nop ++000091e0 <[^>]*> nop ++000091e4 <[^>]*> nop ++000091e8 <[^>]*> nop ++000091ec <[^>]*> nop ++000091f0 <[^>]*> nop ++000091f4 <[^>]*> nop ++000091f8 <[^>]*> nop ++000091fc <[^>]*> nop ++00009200 <[^>]*> nop ++00009204 <[^>]*> nop ++00009208 <[^>]*> nop ++0000920c <[^>]*> nop ++00009210 <[^>]*> nop ++00009214 <[^>]*> nop ++00009218 <[^>]*> nop ++0000921c <[^>]*> nop ++00009220 <[^>]*> nop ++00009224 <[^>]*> nop ++00009228 <[^>]*> nop ++0000922c <[^>]*> nop ++00009230 <[^>]*> nop ++00009234 <[^>]*> nop ++00009238 <[^>]*> nop ++0000923c <[^>]*> nop ++00009240 <[^>]*> nop ++00009244 <[^>]*> nop ++00009248 <[^>]*> nop ++0000924c <[^>]*> nop ++00009250 <[^>]*> nop ++00009254 <[^>]*> nop ++00009258 <[^>]*> nop ++0000925c <[^>]*> nop ++00009260 <[^>]*> nop ++00009264 <[^>]*> nop ++00009268 <[^>]*> nop ++0000926c <[^>]*> nop ++00009270 <[^>]*> nop ++00009274 <[^>]*> nop ++00009278 <[^>]*> nop ++0000927c <[^>]*> nop ++00009280 <[^>]*> nop ++00009284 <[^>]*> nop ++00009288 <[^>]*> nop ++0000928c <[^>]*> nop ++00009290 <[^>]*> nop ++00009294 <[^>]*> nop ++00009298 <[^>]*> nop ++0000929c <[^>]*> nop ++000092a0 <[^>]*> nop ++000092a4 <[^>]*> nop ++000092a8 <[^>]*> nop ++000092ac <[^>]*> nop ++000092b0 <[^>]*> nop ++000092b4 <[^>]*> nop ++000092b8 <[^>]*> nop ++000092bc <[^>]*> nop ++000092c0 <[^>]*> nop ++000092c4 <[^>]*> nop ++000092c8 <[^>]*> nop ++000092cc <[^>]*> nop ++000092d0 <[^>]*> nop ++000092d4 <[^>]*> nop ++000092d8 <[^>]*> nop ++000092dc <[^>]*> nop ++000092e0 <[^>]*> nop ++000092e4 <[^>]*> nop ++000092e8 <[^>]*> nop ++000092ec <[^>]*> nop ++000092f0 <[^>]*> nop ++000092f4 <[^>]*> nop ++000092f8 <[^>]*> nop ++000092fc <[^>]*> nop ++00009300 <[^>]*> nop ++00009304 <[^>]*> nop ++00009308 <[^>]*> nop ++0000930c <[^>]*> nop ++00009310 <[^>]*> nop ++00009314 <[^>]*> nop ++00009318 <[^>]*> nop ++0000931c <[^>]*> nop ++00009320 <[^>]*> nop ++00009324 <[^>]*> nop ++00009328 <[^>]*> nop ++0000932c <[^>]*> nop ++00009330 <[^>]*> nop ++00009334 <[^>]*> nop ++00009338 <[^>]*> nop ++0000933c <[^>]*> nop ++00009340 <[^>]*> nop ++00009344 <[^>]*> nop ++00009348 <[^>]*> nop ++0000934c <[^>]*> nop ++00009350 <[^>]*> nop ++00009354 <[^>]*> nop ++00009358 <[^>]*> nop ++0000935c <[^>]*> nop ++00009360 <[^>]*> nop ++00009364 <[^>]*> nop ++00009368 <[^>]*> nop ++0000936c <[^>]*> nop ++00009370 <[^>]*> nop ++00009374 <[^>]*> nop ++00009378 <[^>]*> nop ++0000937c <[^>]*> nop ++00009380 <[^>]*> nop ++00009384 <[^>]*> nop ++00009388 <[^>]*> nop ++0000938c <[^>]*> nop ++00009390 <[^>]*> nop ++00009394 <[^>]*> nop ++00009398 <[^>]*> nop ++0000939c <[^>]*> nop ++000093a0 <[^>]*> nop ++000093a4 <[^>]*> nop ++000093a8 <[^>]*> nop ++000093ac <[^>]*> nop ++000093b0 <[^>]*> nop ++000093b4 <[^>]*> nop ++000093b8 <[^>]*> nop ++000093bc <[^>]*> nop ++000093c0 <[^>]*> nop ++000093c4 <[^>]*> nop ++000093c8 <[^>]*> nop ++000093cc <[^>]*> nop ++000093d0 <[^>]*> nop ++000093d4 <[^>]*> nop ++000093d8 <[^>]*> nop ++000093dc <[^>]*> nop ++000093e0 <[^>]*> nop ++000093e4 <[^>]*> nop ++000093e8 <[^>]*> nop ++000093ec <[^>]*> nop ++000093f0 <[^>]*> nop ++000093f4 <[^>]*> nop ++000093f8 <[^>]*> nop ++000093fc <[^>]*> nop ++00009400 <[^>]*> nop ++00009404 <[^>]*> nop ++00009408 <[^>]*> nop ++0000940c <[^>]*> nop ++00009410 <[^>]*> nop ++00009414 <[^>]*> nop ++00009418 <[^>]*> nop ++0000941c <[^>]*> nop ++00009420 <[^>]*> nop ++00009424 <[^>]*> nop ++00009428 <[^>]*> nop ++0000942c <[^>]*> nop ++00009430 <[^>]*> nop ++00009434 <[^>]*> nop ++00009438 <[^>]*> nop ++0000943c <[^>]*> nop ++00009440 <[^>]*> nop ++00009444 <[^>]*> nop ++00009448 <[^>]*> nop ++0000944c <[^>]*> nop ++00009450 <[^>]*> nop ++00009454 <[^>]*> nop ++00009458 <[^>]*> nop ++0000945c <[^>]*> nop ++00009460 <[^>]*> nop ++00009464 <[^>]*> nop ++00009468 <[^>]*> nop ++0000946c <[^>]*> nop ++00009470 <[^>]*> nop ++00009474 <[^>]*> nop ++00009478 <[^>]*> nop ++0000947c <[^>]*> nop ++00009480 <[^>]*> nop ++00009484 <[^>]*> nop ++00009488 <[^>]*> nop ++0000948c <[^>]*> nop ++00009490 <[^>]*> nop ++00009494 <[^>]*> nop ++00009498 <[^>]*> nop ++0000949c <[^>]*> nop ++000094a0 <[^>]*> nop ++000094a4 <[^>]*> nop ++000094a8 <[^>]*> nop ++000094ac <[^>]*> nop ++000094b0 <[^>]*> nop ++000094b4 <[^>]*> nop ++000094b8 <[^>]*> nop ++000094bc <[^>]*> nop ++000094c0 <[^>]*> nop ++000094c4 <[^>]*> nop ++000094c8 <[^>]*> nop ++000094cc <[^>]*> nop ++000094d0 <[^>]*> nop ++000094d4 <[^>]*> nop ++000094d8 <[^>]*> nop ++000094dc <[^>]*> nop ++000094e0 <[^>]*> nop ++000094e4 <[^>]*> nop ++000094e8 <[^>]*> nop ++000094ec <[^>]*> nop ++000094f0 <[^>]*> nop ++000094f4 <[^>]*> nop ++000094f8 <[^>]*> nop ++000094fc <[^>]*> nop ++00009500 <[^>]*> nop ++00009504 <[^>]*> nop ++00009508 <[^>]*> nop ++0000950c <[^>]*> nop ++00009510 <[^>]*> nop ++00009514 <[^>]*> nop ++00009518 <[^>]*> nop ++0000951c <[^>]*> nop ++00009520 <[^>]*> nop ++00009524 <[^>]*> nop ++00009528 <[^>]*> nop ++0000952c <[^>]*> nop ++00009530 <[^>]*> nop ++00009534 <[^>]*> nop ++00009538 <[^>]*> nop ++0000953c <[^>]*> nop ++00009540 <[^>]*> nop ++00009544 <[^>]*> nop ++00009548 <[^>]*> nop ++0000954c <[^>]*> nop ++00009550 <[^>]*> nop ++00009554 <[^>]*> nop ++00009558 <[^>]*> nop ++0000955c <[^>]*> nop ++00009560 <[^>]*> nop ++00009564 <[^>]*> nop ++00009568 <[^>]*> nop ++0000956c <[^>]*> nop ++00009570 <[^>]*> nop ++00009574 <[^>]*> nop ++00009578 <[^>]*> nop ++0000957c <[^>]*> nop ++00009580 <[^>]*> nop ++00009584 <[^>]*> nop ++00009588 <[^>]*> nop ++0000958c <[^>]*> nop ++00009590 <[^>]*> nop ++00009594 <[^>]*> nop ++00009598 <[^>]*> nop ++0000959c <[^>]*> nop ++000095a0 <[^>]*> nop ++000095a4 <[^>]*> nop ++000095a8 <[^>]*> nop ++000095ac <[^>]*> nop ++000095b0 <[^>]*> nop ++000095b4 <[^>]*> nop ++000095b8 <[^>]*> nop ++000095bc <[^>]*> nop ++000095c0 <[^>]*> nop ++000095c4 <[^>]*> nop ++000095c8 <[^>]*> nop ++000095cc <[^>]*> nop ++000095d0 <[^>]*> nop ++000095d4 <[^>]*> nop ++000095d8 <[^>]*> nop ++000095dc <[^>]*> nop ++000095e0 <[^>]*> nop ++000095e4 <[^>]*> nop ++000095e8 <[^>]*> nop ++000095ec <[^>]*> nop ++000095f0 <[^>]*> nop ++000095f4 <[^>]*> nop ++000095f8 <[^>]*> nop ++000095fc <[^>]*> nop ++00009600 <[^>]*> nop ++00009604 <[^>]*> nop ++00009608 <[^>]*> nop ++0000960c <[^>]*> nop ++00009610 <[^>]*> nop ++00009614 <[^>]*> nop ++00009618 <[^>]*> nop ++0000961c <[^>]*> nop ++00009620 <[^>]*> nop ++00009624 <[^>]*> nop ++00009628 <[^>]*> nop ++0000962c <[^>]*> nop ++00009630 <[^>]*> nop ++00009634 <[^>]*> nop ++00009638 <[^>]*> nop ++0000963c <[^>]*> nop ++00009640 <[^>]*> nop ++00009644 <[^>]*> nop ++00009648 <[^>]*> nop ++0000964c <[^>]*> nop ++00009650 <[^>]*> nop ++00009654 <[^>]*> nop ++00009658 <[^>]*> nop ++0000965c <[^>]*> nop ++00009660 <[^>]*> nop ++00009664 <[^>]*> nop ++00009668 <[^>]*> nop ++0000966c <[^>]*> nop ++00009670 <[^>]*> nop ++00009674 <[^>]*> nop ++00009678 <[^>]*> nop ++0000967c <[^>]*> nop ++00009680 <[^>]*> nop ++00009684 <[^>]*> nop ++00009688 <[^>]*> nop ++0000968c <[^>]*> nop ++00009690 <[^>]*> nop ++00009694 <[^>]*> nop ++00009698 <[^>]*> nop ++0000969c <[^>]*> nop ++000096a0 <[^>]*> nop ++000096a4 <[^>]*> nop ++000096a8 <[^>]*> nop ++000096ac <[^>]*> nop ++000096b0 <[^>]*> nop ++000096b4 <[^>]*> nop ++000096b8 <[^>]*> nop ++000096bc <[^>]*> nop ++000096c0 <[^>]*> nop ++000096c4 <[^>]*> nop ++000096c8 <[^>]*> nop ++000096cc <[^>]*> nop ++000096d0 <[^>]*> nop ++000096d4 <[^>]*> nop ++000096d8 <[^>]*> nop ++000096dc <[^>]*> nop ++000096e0 <[^>]*> nop ++000096e4 <[^>]*> nop ++000096e8 <[^>]*> nop ++000096ec <[^>]*> nop ++000096f0 <[^>]*> nop ++000096f4 <[^>]*> nop ++000096f8 <[^>]*> nop ++000096fc <[^>]*> nop ++00009700 <[^>]*> nop ++00009704 <[^>]*> nop ++00009708 <[^>]*> nop ++0000970c <[^>]*> nop ++00009710 <[^>]*> nop ++00009714 <[^>]*> nop ++00009718 <[^>]*> nop ++0000971c <[^>]*> nop ++00009720 <[^>]*> nop ++00009724 <[^>]*> nop ++00009728 <[^>]*> nop ++0000972c <[^>]*> nop ++00009730 <[^>]*> nop ++00009734 <[^>]*> nop ++00009738 <[^>]*> nop ++0000973c <[^>]*> nop ++00009740 <[^>]*> nop ++00009744 <[^>]*> nop ++00009748 <[^>]*> nop ++0000974c <[^>]*> nop ++00009750 <[^>]*> nop ++00009754 <[^>]*> nop ++00009758 <[^>]*> nop ++0000975c <[^>]*> nop ++00009760 <[^>]*> nop ++00009764 <[^>]*> nop ++00009768 <[^>]*> nop ++0000976c <[^>]*> nop ++00009770 <[^>]*> nop ++00009774 <[^>]*> nop ++00009778 <[^>]*> nop ++0000977c <[^>]*> nop ++00009780 <[^>]*> nop ++00009784 <[^>]*> nop ++00009788 <[^>]*> nop ++0000978c <[^>]*> nop ++00009790 <[^>]*> nop ++00009794 <[^>]*> nop ++00009798 <[^>]*> nop ++0000979c <[^>]*> nop ++000097a0 <[^>]*> nop ++000097a4 <[^>]*> nop ++000097a8 <[^>]*> nop ++000097ac <[^>]*> nop ++000097b0 <[^>]*> nop ++000097b4 <[^>]*> nop ++000097b8 <[^>]*> nop ++000097bc <[^>]*> nop ++000097c0 <[^>]*> nop ++000097c4 <[^>]*> nop ++000097c8 <[^>]*> nop ++000097cc <[^>]*> nop ++000097d0 <[^>]*> nop ++000097d4 <[^>]*> nop ++000097d8 <[^>]*> nop ++000097dc <[^>]*> nop ++000097e0 <[^>]*> nop ++000097e4 <[^>]*> nop ++000097e8 <[^>]*> nop ++000097ec <[^>]*> nop ++000097f0 <[^>]*> nop ++000097f4 <[^>]*> nop ++000097f8 <[^>]*> nop ++000097fc <[^>]*> nop ++00009800 <[^>]*> nop ++00009804 <[^>]*> nop ++00009808 <[^>]*> nop ++0000980c <[^>]*> nop ++00009810 <[^>]*> nop ++00009814 <[^>]*> nop ++00009818 <[^>]*> nop ++0000981c <[^>]*> nop ++00009820 <[^>]*> nop ++00009824 <[^>]*> nop ++00009828 <[^>]*> nop ++0000982c <[^>]*> nop ++00009830 <[^>]*> nop ++00009834 <[^>]*> nop ++00009838 <[^>]*> nop ++0000983c <[^>]*> nop ++00009840 <[^>]*> nop ++00009844 <[^>]*> nop ++00009848 <[^>]*> nop ++0000984c <[^>]*> nop ++00009850 <[^>]*> nop ++00009854 <[^>]*> nop ++00009858 <[^>]*> nop ++0000985c <[^>]*> nop ++00009860 <[^>]*> nop ++00009864 <[^>]*> nop ++00009868 <[^>]*> nop ++0000986c <[^>]*> nop ++00009870 <[^>]*> nop ++00009874 <[^>]*> nop ++00009878 <[^>]*> nop ++0000987c <[^>]*> nop ++00009880 <[^>]*> nop ++00009884 <[^>]*> nop ++00009888 <[^>]*> nop ++0000988c <[^>]*> nop ++00009890 <[^>]*> nop ++00009894 <[^>]*> nop ++00009898 <[^>]*> nop ++0000989c <[^>]*> nop ++000098a0 <[^>]*> nop ++000098a4 <[^>]*> nop ++000098a8 <[^>]*> nop ++000098ac <[^>]*> nop ++000098b0 <[^>]*> nop ++000098b4 <[^>]*> nop ++000098b8 <[^>]*> nop ++000098bc <[^>]*> nop ++000098c0 <[^>]*> nop ++000098c4 <[^>]*> nop ++000098c8 <[^>]*> nop ++000098cc <[^>]*> nop ++000098d0 <[^>]*> nop ++000098d4 <[^>]*> nop ++000098d8 <[^>]*> nop ++000098dc <[^>]*> nop ++000098e0 <[^>]*> nop ++000098e4 <[^>]*> nop ++000098e8 <[^>]*> nop ++000098ec <[^>]*> nop ++000098f0 <[^>]*> nop ++000098f4 <[^>]*> nop ++000098f8 <[^>]*> nop ++000098fc <[^>]*> nop ++00009900 <[^>]*> nop ++00009904 <[^>]*> nop ++00009908 <[^>]*> nop ++0000990c <[^>]*> nop ++00009910 <[^>]*> nop ++00009914 <[^>]*> nop ++00009918 <[^>]*> nop ++0000991c <[^>]*> nop ++00009920 <[^>]*> nop ++00009924 <[^>]*> nop ++00009928 <[^>]*> nop ++0000992c <[^>]*> nop ++00009930 <[^>]*> nop ++00009934 <[^>]*> nop ++00009938 <[^>]*> nop ++0000993c <[^>]*> nop ++00009940 <[^>]*> nop ++00009944 <[^>]*> nop ++00009948 <[^>]*> nop ++0000994c <[^>]*> nop ++00009950 <[^>]*> nop ++00009954 <[^>]*> nop ++00009958 <[^>]*> nop ++0000995c <[^>]*> nop ++00009960 <[^>]*> nop ++00009964 <[^>]*> nop ++00009968 <[^>]*> nop ++0000996c <[^>]*> nop ++00009970 <[^>]*> nop ++00009974 <[^>]*> nop ++00009978 <[^>]*> nop ++0000997c <[^>]*> nop ++00009980 <[^>]*> nop ++00009984 <[^>]*> nop ++00009988 <[^>]*> nop ++0000998c <[^>]*> nop ++00009990 <[^>]*> nop ++00009994 <[^>]*> nop ++00009998 <[^>]*> nop ++0000999c <[^>]*> nop ++000099a0 <[^>]*> nop ++000099a4 <[^>]*> nop ++000099a8 <[^>]*> nop ++000099ac <[^>]*> nop ++000099b0 <[^>]*> nop ++000099b4 <[^>]*> nop ++000099b8 <[^>]*> nop ++000099bc <[^>]*> nop ++000099c0 <[^>]*> nop ++000099c4 <[^>]*> nop ++000099c8 <[^>]*> nop ++000099cc <[^>]*> nop ++000099d0 <[^>]*> nop ++000099d4 <[^>]*> nop ++000099d8 <[^>]*> nop ++000099dc <[^>]*> nop ++000099e0 <[^>]*> nop ++000099e4 <[^>]*> nop ++000099e8 <[^>]*> nop ++000099ec <[^>]*> nop ++000099f0 <[^>]*> nop ++000099f4 <[^>]*> nop ++000099f8 <[^>]*> nop ++000099fc <[^>]*> nop ++00009a00 <[^>]*> nop ++00009a04 <[^>]*> nop ++00009a08 <[^>]*> nop ++00009a0c <[^>]*> nop ++00009a10 <[^>]*> nop ++00009a14 <[^>]*> nop ++00009a18 <[^>]*> nop ++00009a1c <[^>]*> nop ++00009a20 <[^>]*> nop ++00009a24 <[^>]*> nop ++00009a28 <[^>]*> nop ++00009a2c <[^>]*> nop ++00009a30 <[^>]*> nop ++00009a34 <[^>]*> nop ++00009a38 <[^>]*> nop ++00009a3c <[^>]*> nop ++00009a40 <[^>]*> nop ++00009a44 <[^>]*> nop ++00009a48 <[^>]*> nop ++00009a4c <[^>]*> nop ++00009a50 <[^>]*> nop ++00009a54 <[^>]*> nop ++00009a58 <[^>]*> nop ++00009a5c <[^>]*> nop ++00009a60 <[^>]*> nop ++00009a64 <[^>]*> nop ++00009a68 <[^>]*> nop ++00009a6c <[^>]*> nop ++00009a70 <[^>]*> nop ++00009a74 <[^>]*> nop ++00009a78 <[^>]*> nop ++00009a7c <[^>]*> nop ++00009a80 <[^>]*> nop ++00009a84 <[^>]*> nop ++00009a88 <[^>]*> nop ++00009a8c <[^>]*> nop ++00009a90 <[^>]*> nop ++00009a94 <[^>]*> nop ++00009a98 <[^>]*> nop ++00009a9c <[^>]*> nop ++00009aa0 <[^>]*> nop ++00009aa4 <[^>]*> nop ++00009aa8 <[^>]*> nop ++00009aac <[^>]*> nop ++00009ab0 <[^>]*> nop ++00009ab4 <[^>]*> nop ++00009ab8 <[^>]*> nop ++00009abc <[^>]*> nop ++00009ac0 <[^>]*> nop ++00009ac4 <[^>]*> nop ++00009ac8 <[^>]*> nop ++00009acc <[^>]*> nop ++00009ad0 <[^>]*> nop ++00009ad4 <[^>]*> nop ++00009ad8 <[^>]*> nop ++00009adc <[^>]*> nop ++00009ae0 <[^>]*> nop ++00009ae4 <[^>]*> nop ++00009ae8 <[^>]*> nop ++00009aec <[^>]*> nop ++00009af0 <[^>]*> nop ++00009af4 <[^>]*> nop ++00009af8 <[^>]*> nop ++00009afc <[^>]*> nop ++00009b00 <[^>]*> nop ++00009b04 <[^>]*> nop ++00009b08 <[^>]*> nop ++00009b0c <[^>]*> nop ++00009b10 <[^>]*> nop ++00009b14 <[^>]*> nop ++00009b18 <[^>]*> nop ++00009b1c <[^>]*> nop ++00009b20 <[^>]*> nop ++00009b24 <[^>]*> nop ++00009b28 <[^>]*> nop ++00009b2c <[^>]*> nop ++00009b30 <[^>]*> nop ++00009b34 <[^>]*> nop ++00009b38 <[^>]*> nop ++00009b3c <[^>]*> nop ++00009b40 <[^>]*> nop ++00009b44 <[^>]*> nop ++00009b48 <[^>]*> nop ++00009b4c <[^>]*> nop ++00009b50 <[^>]*> nop ++00009b54 <[^>]*> nop ++00009b58 <[^>]*> nop ++00009b5c <[^>]*> nop ++00009b60 <[^>]*> nop ++00009b64 <[^>]*> nop ++00009b68 <[^>]*> nop ++00009b6c <[^>]*> nop ++00009b70 <[^>]*> nop ++00009b74 <[^>]*> nop ++00009b78 <[^>]*> nop ++00009b7c <[^>]*> nop ++00009b80 <[^>]*> nop ++00009b84 <[^>]*> nop ++00009b88 <[^>]*> nop ++00009b8c <[^>]*> nop ++00009b90 <[^>]*> nop ++00009b94 <[^>]*> nop ++00009b98 <[^>]*> nop ++00009b9c <[^>]*> nop ++00009ba0 <[^>]*> nop ++00009ba4 <[^>]*> nop ++00009ba8 <[^>]*> nop ++00009bac <[^>]*> nop ++00009bb0 <[^>]*> nop ++00009bb4 <[^>]*> nop ++00009bb8 <[^>]*> nop ++00009bbc <[^>]*> nop ++00009bc0 <[^>]*> nop ++00009bc4 <[^>]*> nop ++00009bc8 <[^>]*> nop ++00009bcc <[^>]*> nop ++00009bd0 <[^>]*> nop ++00009bd4 <[^>]*> nop ++00009bd8 <[^>]*> nop ++00009bdc <[^>]*> nop ++00009be0 <[^>]*> nop ++00009be4 <[^>]*> nop ++00009be8 <[^>]*> nop ++00009bec <[^>]*> nop ++00009bf0 <[^>]*> nop ++00009bf4 <[^>]*> nop ++00009bf8 <[^>]*> nop ++00009bfc <[^>]*> nop ++00009c00 <[^>]*> nop ++00009c04 <[^>]*> nop ++00009c08 <[^>]*> nop ++00009c0c <[^>]*> nop ++00009c10 <[^>]*> nop ++00009c14 <[^>]*> nop ++00009c18 <[^>]*> nop ++00009c1c <[^>]*> nop ++00009c20 <[^>]*> nop ++00009c24 <[^>]*> nop ++00009c28 <[^>]*> nop ++00009c2c <[^>]*> nop ++00009c30 <[^>]*> nop ++00009c34 <[^>]*> nop ++00009c38 <[^>]*> nop ++00009c3c <[^>]*> nop ++00009c40 <[^>]*> nop ++00009c44 <[^>]*> nop ++00009c48 <[^>]*> nop ++00009c4c <[^>]*> nop ++00009c50 <[^>]*> nop ++00009c54 <[^>]*> nop ++00009c58 <[^>]*> nop ++00009c5c <[^>]*> nop ++00009c60 <[^>]*> nop ++00009c64 <[^>]*> nop ++00009c68 <[^>]*> nop ++00009c6c <[^>]*> nop ++00009c70 <[^>]*> nop ++00009c74 <[^>]*> nop ++00009c78 <[^>]*> nop ++00009c7c <[^>]*> nop ++00009c80 <[^>]*> nop ++00009c84 <[^>]*> nop ++00009c88 <[^>]*> nop ++00009c8c <[^>]*> nop ++00009c90 <[^>]*> nop ++00009c94 <[^>]*> nop ++00009c98 <[^>]*> nop ++00009c9c <[^>]*> nop ++00009ca0 <[^>]*> nop ++00009ca4 <[^>]*> nop ++00009ca8 <[^>]*> nop ++00009cac <[^>]*> nop ++00009cb0 <[^>]*> nop ++00009cb4 <[^>]*> nop ++00009cb8 <[^>]*> nop ++00009cbc <[^>]*> nop ++00009cc0 <[^>]*> nop ++00009cc4 <[^>]*> nop ++00009cc8 <[^>]*> nop ++00009ccc <[^>]*> nop ++00009cd0 <[^>]*> nop ++00009cd4 <[^>]*> nop ++00009cd8 <[^>]*> nop ++00009cdc <[^>]*> nop ++00009ce0 <[^>]*> nop ++00009ce4 <[^>]*> nop ++00009ce8 <[^>]*> nop ++00009cec <[^>]*> nop ++00009cf0 <[^>]*> nop ++00009cf4 <[^>]*> nop ++00009cf8 <[^>]*> nop ++00009cfc <[^>]*> nop ++00009d00 <[^>]*> nop ++00009d04 <[^>]*> nop ++00009d08 <[^>]*> nop ++00009d0c <[^>]*> nop ++00009d10 <[^>]*> nop ++00009d14 <[^>]*> nop ++00009d18 <[^>]*> nop ++00009d1c <[^>]*> nop ++00009d20 <[^>]*> nop ++00009d24 <[^>]*> nop ++00009d28 <[^>]*> nop ++00009d2c <[^>]*> nop ++00009d30 <[^>]*> nop ++00009d34 <[^>]*> nop ++00009d38 <[^>]*> nop ++00009d3c <[^>]*> nop ++00009d40 <[^>]*> nop ++00009d44 <[^>]*> nop ++00009d48 <[^>]*> nop ++00009d4c <[^>]*> nop ++00009d50 <[^>]*> nop ++00009d54 <[^>]*> nop ++00009d58 <[^>]*> nop ++00009d5c <[^>]*> nop ++00009d60 <[^>]*> nop ++00009d64 <[^>]*> nop ++00009d68 <[^>]*> nop ++00009d6c <[^>]*> nop ++00009d70 <[^>]*> nop ++00009d74 <[^>]*> nop ++00009d78 <[^>]*> nop ++00009d7c <[^>]*> nop ++00009d80 <[^>]*> nop ++00009d84 <[^>]*> nop ++00009d88 <[^>]*> nop ++00009d8c <[^>]*> nop ++00009d90 <[^>]*> nop ++00009d94 <[^>]*> nop ++00009d98 <[^>]*> nop ++00009d9c <[^>]*> nop ++00009da0 <[^>]*> nop ++00009da4 <[^>]*> nop ++00009da8 <[^>]*> nop ++00009dac <[^>]*> nop ++00009db0 <[^>]*> nop ++00009db4 <[^>]*> nop ++00009db8 <[^>]*> nop ++00009dbc <[^>]*> nop ++00009dc0 <[^>]*> nop ++00009dc4 <[^>]*> nop ++00009dc8 <[^>]*> nop ++00009dcc <[^>]*> nop ++00009dd0 <[^>]*> nop ++00009dd4 <[^>]*> nop ++00009dd8 <[^>]*> nop ++00009ddc <[^>]*> nop ++00009de0 <[^>]*> nop ++00009de4 <[^>]*> nop ++00009de8 <[^>]*> nop ++00009dec <[^>]*> nop ++00009df0 <[^>]*> nop ++00009df4 <[^>]*> nop ++00009df8 <[^>]*> nop ++00009dfc <[^>]*> nop ++00009e00 <[^>]*> nop ++00009e04 <[^>]*> nop ++00009e08 <[^>]*> nop ++00009e0c <[^>]*> nop ++00009e10 <[^>]*> nop ++00009e14 <[^>]*> nop ++00009e18 <[^>]*> nop ++00009e1c <[^>]*> nop ++00009e20 <[^>]*> nop ++00009e24 <[^>]*> nop ++00009e28 <[^>]*> nop ++00009e2c <[^>]*> nop ++00009e30 <[^>]*> nop ++00009e34 <[^>]*> nop ++00009e38 <[^>]*> nop ++00009e3c <[^>]*> nop ++00009e40 <[^>]*> nop ++00009e44 <[^>]*> nop ++00009e48 <[^>]*> nop ++00009e4c <[^>]*> nop ++00009e50 <[^>]*> nop ++00009e54 <[^>]*> nop ++00009e58 <[^>]*> nop ++00009e5c <[^>]*> nop ++00009e60 <[^>]*> nop ++00009e64 <[^>]*> nop ++00009e68 <[^>]*> nop ++00009e6c <[^>]*> nop ++00009e70 <[^>]*> nop ++00009e74 <[^>]*> nop ++00009e78 <[^>]*> nop ++00009e7c <[^>]*> nop ++00009e80 <[^>]*> nop ++00009e84 <[^>]*> nop ++00009e88 <[^>]*> nop ++00009e8c <[^>]*> nop ++00009e90 <[^>]*> nop ++00009e94 <[^>]*> nop ++00009e98 <[^>]*> nop ++00009e9c <[^>]*> nop ++00009ea0 <[^>]*> nop ++00009ea4 <[^>]*> nop ++00009ea8 <[^>]*> nop ++00009eac <[^>]*> nop ++00009eb0 <[^>]*> nop ++00009eb4 <[^>]*> nop ++00009eb8 <[^>]*> nop ++00009ebc <[^>]*> nop ++00009ec0 <[^>]*> nop ++00009ec4 <[^>]*> nop ++00009ec8 <[^>]*> nop ++00009ecc <[^>]*> nop ++00009ed0 <[^>]*> nop ++00009ed4 <[^>]*> nop ++00009ed8 <[^>]*> nop ++00009edc <[^>]*> nop ++00009ee0 <[^>]*> nop ++00009ee4 <[^>]*> nop ++00009ee8 <[^>]*> nop ++00009eec <[^>]*> nop ++00009ef0 <[^>]*> nop ++00009ef4 <[^>]*> nop ++00009ef8 <[^>]*> nop ++00009efc <[^>]*> nop ++00009f00 <[^>]*> nop ++00009f04 <[^>]*> nop ++00009f08 <[^>]*> nop ++00009f0c <[^>]*> nop ++00009f10 <[^>]*> nop ++00009f14 <[^>]*> nop ++00009f18 <[^>]*> nop ++00009f1c <[^>]*> nop ++00009f20 <[^>]*> nop ++00009f24 <[^>]*> nop ++00009f28 <[^>]*> nop ++00009f2c <[^>]*> nop ++00009f30 <[^>]*> nop ++00009f34 <[^>]*> nop ++00009f38 <[^>]*> nop ++00009f3c <[^>]*> nop ++00009f40 <[^>]*> nop ++00009f44 <[^>]*> nop ++00009f48 <[^>]*> nop ++00009f4c <[^>]*> nop ++00009f50 <[^>]*> nop ++00009f54 <[^>]*> nop ++00009f58 <[^>]*> nop ++00009f5c <[^>]*> nop ++00009f60 <[^>]*> nop ++00009f64 <[^>]*> nop ++00009f68 <[^>]*> nop ++00009f6c <[^>]*> nop ++00009f70 <[^>]*> nop ++00009f74 <[^>]*> nop ++00009f78 <[^>]*> nop ++00009f7c <[^>]*> nop ++00009f80 <[^>]*> nop ++00009f84 <[^>]*> nop ++00009f88 <[^>]*> nop ++00009f8c <[^>]*> nop ++00009f90 <[^>]*> nop ++00009f94 <[^>]*> nop ++00009f98 <[^>]*> nop ++00009f9c <[^>]*> nop ++00009fa0 <[^>]*> nop ++00009fa4 <[^>]*> nop ++00009fa8 <[^>]*> nop ++00009fac <[^>]*> nop ++00009fb0 <[^>]*> nop ++00009fb4 <[^>]*> nop ++00009fb8 <[^>]*> nop ++00009fbc <[^>]*> nop ++00009fc0 <[^>]*> nop ++00009fc4 <[^>]*> nop ++00009fc8 <[^>]*> nop ++00009fcc <[^>]*> nop ++00009fd0 <[^>]*> nop ++00009fd4 <[^>]*> nop ++00009fd8 <[^>]*> nop ++00009fdc <[^>]*> nop ++00009fe0 <[^>]*> nop ++00009fe4 <[^>]*> nop ++00009fe8 <[^>]*> nop ++00009fec <[^>]*> nop ++00009ff0 <[^>]*> nop ++00009ff4 <[^>]*> nop ++00009ff8 <[^>]*> nop ++00009ffc <[^>]*> nop ++0000a000 <[^>]*> nop ++0000a004 <[^>]*> nop ++0000a008 <[^>]*> nop ++0000a00c <[^>]*> nop ++0000a010 <[^>]*> nop ++0000a014 <[^>]*> nop ++0000a018 <[^>]*> nop ++0000a01c <[^>]*> nop ++0000a020 <[^>]*> nop ++0000a024 <[^>]*> nop ++0000a028 <[^>]*> nop ++0000a02c <[^>]*> nop ++0000a030 <[^>]*> nop ++0000a034 <[^>]*> nop ++0000a038 <[^>]*> nop ++0000a03c <[^>]*> nop ++0000a040 <[^>]*> nop ++0000a044 <[^>]*> nop ++0000a048 <[^>]*> nop ++0000a04c <[^>]*> nop ++0000a050 <[^>]*> nop ++0000a054 <[^>]*> nop ++0000a058 <[^>]*> nop ++0000a05c <[^>]*> nop ++0000a060 <[^>]*> nop ++0000a064 <[^>]*> nop ++0000a068 <[^>]*> nop ++0000a06c <[^>]*> nop ++0000a070 <[^>]*> nop ++0000a074 <[^>]*> nop ++0000a078 <[^>]*> nop ++0000a07c <[^>]*> nop ++0000a080 <[^>]*> nop ++0000a084 <[^>]*> nop ++0000a088 <[^>]*> nop ++0000a08c <[^>]*> nop ++0000a090 <[^>]*> nop ++0000a094 <[^>]*> nop ++0000a098 <[^>]*> nop ++0000a09c <[^>]*> nop ++0000a0a0 <[^>]*> nop ++0000a0a4 <[^>]*> nop ++0000a0a8 <[^>]*> nop ++0000a0ac <[^>]*> nop ++0000a0b0 <[^>]*> nop ++0000a0b4 <[^>]*> nop ++0000a0b8 <[^>]*> nop ++0000a0bc <[^>]*> nop ++0000a0c0 <[^>]*> nop ++0000a0c4 <[^>]*> nop ++0000a0c8 <[^>]*> nop ++0000a0cc <[^>]*> nop ++0000a0d0 <[^>]*> nop ++0000a0d4 <[^>]*> nop ++0000a0d8 <[^>]*> nop ++0000a0dc <[^>]*> nop ++0000a0e0 <[^>]*> nop ++0000a0e4 <[^>]*> nop ++0000a0e8 <[^>]*> nop ++0000a0ec <[^>]*> nop ++0000a0f0 <[^>]*> nop ++0000a0f4 <[^>]*> nop ++0000a0f8 <[^>]*> nop ++0000a0fc <[^>]*> nop ++0000a100 <[^>]*> nop ++0000a104 <[^>]*> nop ++0000a108 <[^>]*> nop ++0000a10c <[^>]*> nop ++0000a110 <[^>]*> nop ++0000a114 <[^>]*> nop ++0000a118 <[^>]*> nop ++0000a11c <[^>]*> nop ++0000a120 <[^>]*> nop ++0000a124 <[^>]*> nop ++0000a128 <[^>]*> nop ++0000a12c <[^>]*> nop ++0000a130 <[^>]*> nop ++0000a134 <[^>]*> nop ++0000a138 <[^>]*> nop ++0000a13c <[^>]*> nop ++0000a140 <[^>]*> nop ++0000a144 <[^>]*> nop ++0000a148 <[^>]*> nop ++0000a14c <[^>]*> nop ++0000a150 <[^>]*> nop ++0000a154 <[^>]*> nop ++0000a158 <[^>]*> nop ++0000a15c <[^>]*> nop ++0000a160 <[^>]*> nop ++0000a164 <[^>]*> nop ++0000a168 <[^>]*> nop ++0000a16c <[^>]*> nop ++0000a170 <[^>]*> nop ++0000a174 <[^>]*> nop ++0000a178 <[^>]*> nop ++0000a17c <[^>]*> nop ++0000a180 <[^>]*> nop ++0000a184 <[^>]*> nop ++0000a188 <[^>]*> nop ++0000a18c <[^>]*> nop ++0000a190 <[^>]*> nop ++0000a194 <[^>]*> nop ++0000a198 <[^>]*> nop ++0000a19c <[^>]*> nop ++0000a1a0 <[^>]*> nop ++0000a1a4 <[^>]*> nop ++0000a1a8 <[^>]*> nop ++0000a1ac <[^>]*> nop ++0000a1b0 <[^>]*> nop ++0000a1b4 <[^>]*> nop ++0000a1b8 <[^>]*> nop ++0000a1bc <[^>]*> nop ++0000a1c0 <[^>]*> nop ++0000a1c4 <[^>]*> nop ++0000a1c8 <[^>]*> nop ++0000a1cc <[^>]*> nop ++0000a1d0 <[^>]*> nop ++0000a1d4 <[^>]*> nop ++0000a1d8 <[^>]*> nop ++0000a1dc <[^>]*> nop ++0000a1e0 <[^>]*> nop ++0000a1e4 <[^>]*> nop ++0000a1e8 <[^>]*> nop ++0000a1ec <[^>]*> nop ++0000a1f0 <[^>]*> nop ++0000a1f4 <[^>]*> nop ++0000a1f8 <[^>]*> nop ++0000a1fc <[^>]*> nop ++0000a200 <[^>]*> nop ++0000a204 <[^>]*> nop ++0000a208 <[^>]*> nop ++0000a20c <[^>]*> nop ++0000a210 <[^>]*> nop ++0000a214 <[^>]*> nop ++0000a218 <[^>]*> nop ++0000a21c <[^>]*> nop ++0000a220 <[^>]*> nop ++0000a224 <[^>]*> nop ++0000a228 <[^>]*> nop ++0000a22c <[^>]*> nop ++0000a230 <[^>]*> nop ++0000a234 <[^>]*> nop ++0000a238 <[^>]*> nop ++0000a23c <[^>]*> nop ++0000a240 <[^>]*> nop ++0000a244 <[^>]*> nop ++0000a248 <[^>]*> nop ++0000a24c <[^>]*> nop ++0000a250 <[^>]*> nop ++0000a254 <[^>]*> nop ++0000a258 <[^>]*> nop ++0000a25c <[^>]*> nop ++0000a260 <[^>]*> nop ++0000a264 <[^>]*> nop ++0000a268 <[^>]*> nop ++0000a26c <[^>]*> nop ++0000a270 <[^>]*> nop ++0000a274 <[^>]*> nop ++0000a278 <[^>]*> nop ++0000a27c <[^>]*> nop ++0000a280 <[^>]*> nop ++0000a284 <[^>]*> nop ++0000a288 <[^>]*> nop ++0000a28c <[^>]*> nop ++0000a290 <[^>]*> nop ++0000a294 <[^>]*> nop ++0000a298 <[^>]*> nop ++0000a29c <[^>]*> nop ++0000a2a0 <[^>]*> nop ++0000a2a4 <[^>]*> nop ++0000a2a8 <[^>]*> nop ++0000a2ac <[^>]*> nop ++0000a2b0 <[^>]*> nop ++0000a2b4 <[^>]*> nop ++0000a2b8 <[^>]*> nop ++0000a2bc <[^>]*> nop ++0000a2c0 <[^>]*> nop ++0000a2c4 <[^>]*> nop ++0000a2c8 <[^>]*> nop ++0000a2cc <[^>]*> nop ++0000a2d0 <[^>]*> nop ++0000a2d4 <[^>]*> nop ++0000a2d8 <[^>]*> nop ++0000a2dc <[^>]*> nop ++0000a2e0 <[^>]*> nop ++0000a2e4 <[^>]*> nop ++0000a2e8 <[^>]*> nop ++0000a2ec <[^>]*> nop ++0000a2f0 <[^>]*> nop ++0000a2f4 <[^>]*> nop ++0000a2f8 <[^>]*> nop ++0000a2fc <[^>]*> nop ++0000a300 <[^>]*> nop ++0000a304 <[^>]*> nop ++0000a308 <[^>]*> nop ++0000a30c <[^>]*> nop ++0000a310 <[^>]*> nop ++0000a314 <[^>]*> nop ++0000a318 <[^>]*> nop ++0000a31c <[^>]*> nop ++0000a320 <[^>]*> nop ++0000a324 <[^>]*> nop ++0000a328 <[^>]*> nop ++0000a32c <[^>]*> nop ++0000a330 <[^>]*> nop ++0000a334 <[^>]*> nop ++0000a338 <[^>]*> nop ++0000a33c <[^>]*> nop ++0000a340 <[^>]*> nop ++0000a344 <[^>]*> nop ++0000a348 <[^>]*> nop ++0000a34c <[^>]*> nop ++0000a350 <[^>]*> nop ++0000a354 <[^>]*> nop ++0000a358 <[^>]*> nop ++0000a35c <[^>]*> nop ++0000a360 <[^>]*> nop ++0000a364 <[^>]*> nop ++0000a368 <[^>]*> nop ++0000a36c <[^>]*> nop ++0000a370 <[^>]*> nop ++0000a374 <[^>]*> nop ++0000a378 <[^>]*> nop ++0000a37c <[^>]*> nop ++0000a380 <[^>]*> nop ++0000a384 <[^>]*> nop ++0000a388 <[^>]*> nop ++0000a38c <[^>]*> nop ++0000a390 <[^>]*> nop ++0000a394 <[^>]*> nop ++0000a398 <[^>]*> nop ++0000a39c <[^>]*> nop ++0000a3a0 <[^>]*> nop ++0000a3a4 <[^>]*> nop ++0000a3a8 <[^>]*> nop ++0000a3ac <[^>]*> nop ++0000a3b0 <[^>]*> nop ++0000a3b4 <[^>]*> nop ++0000a3b8 <[^>]*> nop ++0000a3bc <[^>]*> nop ++0000a3c0 <[^>]*> nop ++0000a3c4 <[^>]*> nop ++0000a3c8 <[^>]*> nop ++0000a3cc <[^>]*> nop ++0000a3d0 <[^>]*> nop ++0000a3d4 <[^>]*> nop ++0000a3d8 <[^>]*> nop ++0000a3dc <[^>]*> nop ++0000a3e0 <[^>]*> nop ++0000a3e4 <[^>]*> nop ++0000a3e8 <[^>]*> nop ++0000a3ec <[^>]*> nop ++0000a3f0 <[^>]*> nop ++0000a3f4 <[^>]*> nop ++0000a3f8 <[^>]*> nop ++0000a3fc <[^>]*> nop ++0000a400 <[^>]*> nop ++0000a404 <[^>]*> nop ++0000a408 <[^>]*> nop ++0000a40c <[^>]*> nop ++0000a410 <[^>]*> nop ++0000a414 <[^>]*> nop ++0000a418 <[^>]*> nop ++0000a41c <[^>]*> nop ++0000a420 <[^>]*> nop ++0000a424 <[^>]*> nop ++0000a428 <[^>]*> nop ++0000a42c <[^>]*> nop ++0000a430 <[^>]*> nop ++0000a434 <[^>]*> nop ++0000a438 <[^>]*> nop ++0000a43c <[^>]*> nop ++0000a440 <[^>]*> nop ++0000a444 <[^>]*> nop ++0000a448 <[^>]*> nop ++0000a44c <[^>]*> nop ++0000a450 <[^>]*> nop ++0000a454 <[^>]*> nop ++0000a458 <[^>]*> nop ++0000a45c <[^>]*> nop ++0000a460 <[^>]*> nop ++0000a464 <[^>]*> nop ++0000a468 <[^>]*> nop ++0000a46c <[^>]*> nop ++0000a470 <[^>]*> nop ++0000a474 <[^>]*> nop ++0000a478 <[^>]*> nop ++0000a47c <[^>]*> nop ++0000a480 <[^>]*> nop ++0000a484 <[^>]*> nop ++0000a488 <[^>]*> nop ++0000a48c <[^>]*> nop ++0000a490 <[^>]*> nop ++0000a494 <[^>]*> nop ++0000a498 <[^>]*> nop ++0000a49c <[^>]*> nop ++0000a4a0 <[^>]*> nop ++0000a4a4 <[^>]*> nop ++0000a4a8 <[^>]*> nop ++0000a4ac <[^>]*> nop ++0000a4b0 <[^>]*> nop ++0000a4b4 <[^>]*> nop ++0000a4b8 <[^>]*> nop ++0000a4bc <[^>]*> nop ++0000a4c0 <[^>]*> nop ++0000a4c4 <[^>]*> nop ++0000a4c8 <[^>]*> nop ++0000a4cc <[^>]*> nop ++0000a4d0 <[^>]*> nop ++0000a4d4 <[^>]*> nop ++0000a4d8 <[^>]*> nop ++0000a4dc <[^>]*> nop ++0000a4e0 <[^>]*> nop ++0000a4e4 <[^>]*> nop ++0000a4e8 <[^>]*> nop ++0000a4ec <[^>]*> nop ++0000a4f0 <[^>]*> nop ++0000a4f4 <[^>]*> nop ++0000a4f8 <[^>]*> nop ++0000a4fc <[^>]*> nop ++0000a500 <[^>]*> nop ++0000a504 <[^>]*> nop ++0000a508 <[^>]*> nop ++0000a50c <[^>]*> nop ++0000a510 <[^>]*> nop ++0000a514 <[^>]*> nop ++0000a518 <[^>]*> nop ++0000a51c <[^>]*> nop ++0000a520 <[^>]*> nop ++0000a524 <[^>]*> nop ++0000a528 <[^>]*> nop ++0000a52c <[^>]*> nop ++0000a530 <[^>]*> nop ++0000a534 <[^>]*> nop ++0000a538 <[^>]*> nop ++0000a53c <[^>]*> nop ++0000a540 <[^>]*> nop ++0000a544 <[^>]*> nop ++0000a548 <[^>]*> nop ++0000a54c <[^>]*> nop ++0000a550 <[^>]*> nop ++0000a554 <[^>]*> nop ++0000a558 <[^>]*> nop ++0000a55c <[^>]*> nop ++0000a560 <[^>]*> nop ++0000a564 <[^>]*> nop ++0000a568 <[^>]*> nop ++0000a56c <[^>]*> nop ++0000a570 <[^>]*> nop ++0000a574 <[^>]*> nop ++0000a578 <[^>]*> nop ++0000a57c <[^>]*> nop ++0000a580 <[^>]*> nop ++0000a584 <[^>]*> nop ++0000a588 <[^>]*> nop ++0000a58c <[^>]*> nop ++0000a590 <[^>]*> nop ++0000a594 <[^>]*> nop ++0000a598 <[^>]*> nop ++0000a59c <[^>]*> nop ++0000a5a0 <[^>]*> nop ++0000a5a4 <[^>]*> nop ++0000a5a8 <[^>]*> nop ++0000a5ac <[^>]*> nop ++0000a5b0 <[^>]*> nop ++0000a5b4 <[^>]*> nop ++0000a5b8 <[^>]*> nop ++0000a5bc <[^>]*> nop ++0000a5c0 <[^>]*> nop ++0000a5c4 <[^>]*> nop ++0000a5c8 <[^>]*> nop ++0000a5cc <[^>]*> nop ++0000a5d0 <[^>]*> nop ++0000a5d4 <[^>]*> nop ++0000a5d8 <[^>]*> nop ++0000a5dc <[^>]*> nop ++0000a5e0 <[^>]*> nop ++0000a5e4 <[^>]*> nop ++0000a5e8 <[^>]*> nop ++0000a5ec <[^>]*> nop ++0000a5f0 <[^>]*> nop ++0000a5f4 <[^>]*> nop ++0000a5f8 <[^>]*> nop ++0000a5fc <[^>]*> nop ++0000a600 <[^>]*> nop ++0000a604 <[^>]*> nop ++0000a608 <[^>]*> nop ++0000a60c <[^>]*> nop ++0000a610 <[^>]*> nop ++0000a614 <[^>]*> nop ++0000a618 <[^>]*> nop ++0000a61c <[^>]*> nop ++0000a620 <[^>]*> nop ++0000a624 <[^>]*> nop ++0000a628 <[^>]*> nop ++0000a62c <[^>]*> nop ++0000a630 <[^>]*> nop ++0000a634 <[^>]*> nop ++0000a638 <[^>]*> nop ++0000a63c <[^>]*> nop ++0000a640 <[^>]*> nop ++0000a644 <[^>]*> nop ++0000a648 <[^>]*> nop ++0000a64c <[^>]*> nop ++0000a650 <[^>]*> nop ++0000a654 <[^>]*> nop ++0000a658 <[^>]*> nop ++0000a65c <[^>]*> nop ++0000a660 <[^>]*> nop ++0000a664 <[^>]*> nop ++0000a668 <[^>]*> nop ++0000a66c <[^>]*> nop ++0000a670 <[^>]*> nop ++0000a674 <[^>]*> nop ++0000a678 <[^>]*> nop ++0000a67c <[^>]*> nop ++0000a680 <[^>]*> nop ++0000a684 <[^>]*> nop ++0000a688 <[^>]*> nop ++0000a68c <[^>]*> nop ++0000a690 <[^>]*> nop ++0000a694 <[^>]*> nop ++0000a698 <[^>]*> nop ++0000a69c <[^>]*> nop ++0000a6a0 <[^>]*> nop ++0000a6a4 <[^>]*> nop ++0000a6a8 <[^>]*> nop ++0000a6ac <[^>]*> nop ++0000a6b0 <[^>]*> nop ++0000a6b4 <[^>]*> nop ++0000a6b8 <[^>]*> nop ++0000a6bc <[^>]*> nop ++0000a6c0 <[^>]*> nop ++0000a6c4 <[^>]*> nop ++0000a6c8 <[^>]*> nop ++0000a6cc <[^>]*> nop ++0000a6d0 <[^>]*> nop ++0000a6d4 <[^>]*> nop ++0000a6d8 <[^>]*> nop ++0000a6dc <[^>]*> nop ++0000a6e0 <[^>]*> nop ++0000a6e4 <[^>]*> nop ++0000a6e8 <[^>]*> nop ++0000a6ec <[^>]*> nop ++0000a6f0 <[^>]*> nop ++0000a6f4 <[^>]*> nop ++0000a6f8 <[^>]*> nop ++0000a6fc <[^>]*> nop ++0000a700 <[^>]*> nop ++0000a704 <[^>]*> nop ++0000a708 <[^>]*> nop ++0000a70c <[^>]*> nop ++0000a710 <[^>]*> nop ++0000a714 <[^>]*> nop ++0000a718 <[^>]*> nop ++0000a71c <[^>]*> nop ++0000a720 <[^>]*> nop ++0000a724 <[^>]*> nop ++0000a728 <[^>]*> nop ++0000a72c <[^>]*> nop ++0000a730 <[^>]*> nop ++0000a734 <[^>]*> nop ++0000a738 <[^>]*> nop ++0000a73c <[^>]*> nop ++0000a740 <[^>]*> nop ++0000a744 <[^>]*> nop ++0000a748 <[^>]*> nop ++0000a74c <[^>]*> nop ++0000a750 <[^>]*> nop ++0000a754 <[^>]*> nop ++0000a758 <[^>]*> nop ++0000a75c <[^>]*> nop ++0000a760 <[^>]*> nop ++0000a764 <[^>]*> nop ++0000a768 <[^>]*> nop ++0000a76c <[^>]*> nop ++0000a770 <[^>]*> nop ++0000a774 <[^>]*> nop ++0000a778 <[^>]*> nop ++0000a77c <[^>]*> nop ++0000a780 <[^>]*> nop ++0000a784 <[^>]*> nop ++0000a788 <[^>]*> nop ++0000a78c <[^>]*> nop ++0000a790 <[^>]*> nop ++0000a794 <[^>]*> nop ++0000a798 <[^>]*> nop ++0000a79c <[^>]*> nop ++0000a7a0 <[^>]*> nop ++0000a7a4 <[^>]*> nop ++0000a7a8 <[^>]*> nop ++0000a7ac <[^>]*> nop ++0000a7b0 <[^>]*> nop ++0000a7b4 <[^>]*> nop ++0000a7b8 <[^>]*> nop ++0000a7bc <[^>]*> nop ++0000a7c0 <[^>]*> nop ++0000a7c4 <[^>]*> nop ++0000a7c8 <[^>]*> nop ++0000a7cc <[^>]*> nop ++0000a7d0 <[^>]*> nop ++0000a7d4 <[^>]*> nop ++0000a7d8 <[^>]*> nop ++0000a7dc <[^>]*> nop ++0000a7e0 <[^>]*> nop ++0000a7e4 <[^>]*> nop ++0000a7e8 <[^>]*> nop ++0000a7ec <[^>]*> nop ++0000a7f0 <[^>]*> nop ++0000a7f4 <[^>]*> nop ++0000a7f8 <[^>]*> nop ++0000a7fc <[^>]*> nop ++0000a800 <[^>]*> nop ++0000a804 <[^>]*> nop ++0000a808 <[^>]*> nop ++0000a80c <[^>]*> nop ++0000a810 <[^>]*> nop ++0000a814 <[^>]*> nop ++0000a818 <[^>]*> nop ++0000a81c <[^>]*> nop ++0000a820 <[^>]*> nop ++0000a824 <[^>]*> nop ++0000a828 <[^>]*> nop ++0000a82c <[^>]*> nop ++0000a830 <[^>]*> nop ++0000a834 <[^>]*> nop ++0000a838 <[^>]*> nop ++0000a83c <[^>]*> nop ++0000a840 <[^>]*> nop ++0000a844 <[^>]*> nop ++0000a848 <[^>]*> nop ++0000a84c <[^>]*> nop ++0000a850 <[^>]*> nop ++0000a854 <[^>]*> nop ++0000a858 <[^>]*> nop ++0000a85c <[^>]*> nop ++0000a860 <[^>]*> nop ++0000a864 <[^>]*> nop ++0000a868 <[^>]*> nop ++0000a86c <[^>]*> nop ++0000a870 <[^>]*> nop ++0000a874 <[^>]*> nop ++0000a878 <[^>]*> nop ++0000a87c <[^>]*> nop ++0000a880 <[^>]*> nop ++0000a884 <[^>]*> nop ++0000a888 <[^>]*> nop ++0000a88c <[^>]*> nop ++0000a890 <[^>]*> nop ++0000a894 <[^>]*> nop ++0000a898 <[^>]*> nop ++0000a89c <[^>]*> nop ++0000a8a0 <[^>]*> nop ++0000a8a4 <[^>]*> nop ++0000a8a8 <[^>]*> nop ++0000a8ac <[^>]*> nop ++0000a8b0 <[^>]*> nop ++0000a8b4 <[^>]*> nop ++0000a8b8 <[^>]*> nop ++0000a8bc <[^>]*> nop ++0000a8c0 <[^>]*> nop ++0000a8c4 <[^>]*> nop ++0000a8c8 <[^>]*> nop ++0000a8cc <[^>]*> nop ++0000a8d0 <[^>]*> nop ++0000a8d4 <[^>]*> nop ++0000a8d8 <[^>]*> nop ++0000a8dc <[^>]*> nop ++0000a8e0 <[^>]*> nop ++0000a8e4 <[^>]*> nop ++0000a8e8 <[^>]*> nop ++0000a8ec <[^>]*> nop ++0000a8f0 <[^>]*> nop ++0000a8f4 <[^>]*> nop ++0000a8f8 <[^>]*> nop ++0000a8fc <[^>]*> nop ++0000a900 <[^>]*> nop ++0000a904 <[^>]*> nop ++0000a908 <[^>]*> nop ++0000a90c <[^>]*> nop ++0000a910 <[^>]*> nop ++0000a914 <[^>]*> nop ++0000a918 <[^>]*> nop ++0000a91c <[^>]*> nop ++0000a920 <[^>]*> nop ++0000a924 <[^>]*> nop ++0000a928 <[^>]*> nop ++0000a92c <[^>]*> nop ++0000a930 <[^>]*> nop ++0000a934 <[^>]*> nop ++0000a938 <[^>]*> nop ++0000a93c <[^>]*> nop ++0000a940 <[^>]*> nop ++0000a944 <[^>]*> nop ++0000a948 <[^>]*> nop ++0000a94c <[^>]*> nop ++0000a950 <[^>]*> nop ++0000a954 <[^>]*> nop ++0000a958 <[^>]*> nop ++0000a95c <[^>]*> nop ++0000a960 <[^>]*> nop ++0000a964 <[^>]*> nop ++0000a968 <[^>]*> nop ++0000a96c <[^>]*> nop ++0000a970 <[^>]*> nop ++0000a974 <[^>]*> nop ++0000a978 <[^>]*> nop ++0000a97c <[^>]*> nop ++0000a980 <[^>]*> nop ++0000a984 <[^>]*> nop ++0000a988 <[^>]*> nop ++0000a98c <[^>]*> nop ++0000a990 <[^>]*> nop ++0000a994 <[^>]*> nop ++0000a998 <[^>]*> nop ++0000a99c <[^>]*> nop ++0000a9a0 <[^>]*> nop ++0000a9a4 <[^>]*> nop ++0000a9a8 <[^>]*> nop ++0000a9ac <[^>]*> nop ++0000a9b0 <[^>]*> nop ++0000a9b4 <[^>]*> nop ++0000a9b8 <[^>]*> nop ++0000a9bc <[^>]*> nop ++0000a9c0 <[^>]*> nop ++0000a9c4 <[^>]*> nop ++0000a9c8 <[^>]*> nop ++0000a9cc <[^>]*> nop ++0000a9d0 <[^>]*> nop ++0000a9d4 <[^>]*> nop ++0000a9d8 <[^>]*> nop ++0000a9dc <[^>]*> nop ++0000a9e0 <[^>]*> nop ++0000a9e4 <[^>]*> nop ++0000a9e8 <[^>]*> nop ++0000a9ec <[^>]*> nop ++0000a9f0 <[^>]*> nop ++0000a9f4 <[^>]*> nop ++0000a9f8 <[^>]*> nop ++0000a9fc <[^>]*> nop ++0000aa00 <[^>]*> nop ++0000aa04 <[^>]*> nop ++0000aa08 <[^>]*> nop ++0000aa0c <[^>]*> nop ++0000aa10 <[^>]*> nop ++0000aa14 <[^>]*> nop ++0000aa18 <[^>]*> nop ++0000aa1c <[^>]*> nop ++0000aa20 <[^>]*> nop ++0000aa24 <[^>]*> nop ++0000aa28 <[^>]*> nop ++0000aa2c <[^>]*> nop ++0000aa30 <[^>]*> nop ++0000aa34 <[^>]*> nop ++0000aa38 <[^>]*> nop ++0000aa3c <[^>]*> nop ++0000aa40 <[^>]*> nop ++0000aa44 <[^>]*> nop ++0000aa48 <[^>]*> nop ++0000aa4c <[^>]*> nop ++0000aa50 <[^>]*> nop ++0000aa54 <[^>]*> nop ++0000aa58 <[^>]*> nop ++0000aa5c <[^>]*> nop ++0000aa60 <[^>]*> nop ++0000aa64 <[^>]*> nop ++0000aa68 <[^>]*> nop ++0000aa6c <[^>]*> nop ++0000aa70 <[^>]*> nop ++0000aa74 <[^>]*> nop ++0000aa78 <[^>]*> nop ++0000aa7c <[^>]*> nop ++0000aa80 <[^>]*> nop ++0000aa84 <[^>]*> nop ++0000aa88 <[^>]*> nop ++0000aa8c <[^>]*> nop ++0000aa90 <[^>]*> nop ++0000aa94 <[^>]*> nop ++0000aa98 <[^>]*> nop ++0000aa9c <[^>]*> nop ++0000aaa0 <[^>]*> nop ++0000aaa4 <[^>]*> nop ++0000aaa8 <[^>]*> nop ++0000aaac <[^>]*> nop ++0000aab0 <[^>]*> nop ++0000aab4 <[^>]*> nop ++0000aab8 <[^>]*> nop ++0000aabc <[^>]*> nop ++0000aac0 <[^>]*> nop ++0000aac4 <[^>]*> nop ++0000aac8 <[^>]*> nop ++0000aacc <[^>]*> nop ++0000aad0 <[^>]*> nop ++0000aad4 <[^>]*> nop ++0000aad8 <[^>]*> nop ++0000aadc <[^>]*> nop ++0000aae0 <[^>]*> nop ++0000aae4 <[^>]*> nop ++0000aae8 <[^>]*> nop ++0000aaec <[^>]*> nop ++0000aaf0 <[^>]*> nop ++0000aaf4 <[^>]*> nop ++0000aaf8 <[^>]*> nop ++0000aafc <[^>]*> nop ++0000ab00 <[^>]*> nop ++0000ab04 <[^>]*> nop ++0000ab08 <[^>]*> nop ++0000ab0c <[^>]*> nop ++0000ab10 <[^>]*> nop ++0000ab14 <[^>]*> nop ++0000ab18 <[^>]*> nop ++0000ab1c <[^>]*> nop ++0000ab20 <[^>]*> nop ++0000ab24 <[^>]*> nop ++0000ab28 <[^>]*> nop ++0000ab2c <[^>]*> nop ++0000ab30 <[^>]*> nop ++0000ab34 <[^>]*> nop ++0000ab38 <[^>]*> nop ++0000ab3c <[^>]*> nop ++0000ab40 <[^>]*> nop ++0000ab44 <[^>]*> nop ++0000ab48 <[^>]*> nop ++0000ab4c <[^>]*> nop ++0000ab50 <[^>]*> nop ++0000ab54 <[^>]*> nop ++0000ab58 <[^>]*> nop ++0000ab5c <[^>]*> nop ++0000ab60 <[^>]*> nop ++0000ab64 <[^>]*> nop ++0000ab68 <[^>]*> nop ++0000ab6c <[^>]*> nop ++0000ab70 <[^>]*> nop ++0000ab74 <[^>]*> nop ++0000ab78 <[^>]*> nop ++0000ab7c <[^>]*> nop ++0000ab80 <[^>]*> nop ++0000ab84 <[^>]*> nop ++0000ab88 <[^>]*> nop ++0000ab8c <[^>]*> nop ++0000ab90 <[^>]*> nop ++0000ab94 <[^>]*> nop ++0000ab98 <[^>]*> nop ++0000ab9c <[^>]*> nop ++0000aba0 <[^>]*> nop ++0000aba4 <[^>]*> nop ++0000aba8 <[^>]*> nop ++0000abac <[^>]*> nop ++0000abb0 <[^>]*> nop ++0000abb4 <[^>]*> nop ++0000abb8 <[^>]*> nop ++0000abbc <[^>]*> nop ++0000abc0 <[^>]*> nop ++0000abc4 <[^>]*> nop ++0000abc8 <[^>]*> nop ++0000abcc <[^>]*> nop ++0000abd0 <[^>]*> nop ++0000abd4 <[^>]*> nop ++0000abd8 <[^>]*> nop ++0000abdc <[^>]*> nop ++0000abe0 <[^>]*> nop ++0000abe4 <[^>]*> nop ++0000abe8 <[^>]*> nop ++0000abec <[^>]*> nop ++0000abf0 <[^>]*> nop ++0000abf4 <[^>]*> nop ++0000abf8 <[^>]*> nop ++0000abfc <[^>]*> nop ++0000ac00 <[^>]*> nop ++0000ac04 <[^>]*> nop ++0000ac08 <[^>]*> nop ++0000ac0c <[^>]*> nop ++0000ac10 <[^>]*> nop ++0000ac14 <[^>]*> nop ++0000ac18 <[^>]*> nop ++0000ac1c <[^>]*> nop ++0000ac20 <[^>]*> nop ++0000ac24 <[^>]*> nop ++0000ac28 <[^>]*> nop ++0000ac2c <[^>]*> nop ++0000ac30 <[^>]*> nop ++0000ac34 <[^>]*> nop ++0000ac38 <[^>]*> nop ++0000ac3c <[^>]*> nop ++0000ac40 <[^>]*> nop ++0000ac44 <[^>]*> nop ++0000ac48 <[^>]*> nop ++0000ac4c <[^>]*> nop ++0000ac50 <[^>]*> nop ++0000ac54 <[^>]*> nop ++0000ac58 <[^>]*> nop ++0000ac5c <[^>]*> nop ++0000ac60 <[^>]*> nop ++0000ac64 <[^>]*> nop ++0000ac68 <[^>]*> nop ++0000ac6c <[^>]*> nop ++0000ac70 <[^>]*> nop ++0000ac74 <[^>]*> nop ++0000ac78 <[^>]*> nop ++0000ac7c <[^>]*> nop ++0000ac80 <[^>]*> nop ++0000ac84 <[^>]*> nop ++0000ac88 <[^>]*> nop ++0000ac8c <[^>]*> nop ++0000ac90 <[^>]*> nop ++0000ac94 <[^>]*> nop ++0000ac98 <[^>]*> nop ++0000ac9c <[^>]*> nop ++0000aca0 <[^>]*> nop ++0000aca4 <[^>]*> nop ++0000aca8 <[^>]*> nop ++0000acac <[^>]*> nop ++0000acb0 <[^>]*> nop ++0000acb4 <[^>]*> nop ++0000acb8 <[^>]*> nop ++0000acbc <[^>]*> nop ++0000acc0 <[^>]*> nop ++0000acc4 <[^>]*> nop ++0000acc8 <[^>]*> nop ++0000accc <[^>]*> nop ++0000acd0 <[^>]*> nop ++0000acd4 <[^>]*> nop ++0000acd8 <[^>]*> nop ++0000acdc <[^>]*> nop ++0000ace0 <[^>]*> nop ++0000ace4 <[^>]*> nop ++0000ace8 <[^>]*> nop ++0000acec <[^>]*> nop ++0000acf0 <[^>]*> nop ++0000acf4 <[^>]*> nop ++0000acf8 <[^>]*> nop ++0000acfc <[^>]*> nop ++0000ad00 <[^>]*> nop ++0000ad04 <[^>]*> nop ++0000ad08 <[^>]*> nop ++0000ad0c <[^>]*> nop ++0000ad10 <[^>]*> nop ++0000ad14 <[^>]*> nop ++0000ad18 <[^>]*> nop ++0000ad1c <[^>]*> nop ++0000ad20 <[^>]*> nop ++0000ad24 <[^>]*> nop ++0000ad28 <[^>]*> nop ++0000ad2c <[^>]*> nop ++0000ad30 <[^>]*> nop ++0000ad34 <[^>]*> nop ++0000ad38 <[^>]*> nop ++0000ad3c <[^>]*> nop ++0000ad40 <[^>]*> nop ++0000ad44 <[^>]*> nop ++0000ad48 <[^>]*> nop ++0000ad4c <[^>]*> nop ++0000ad50 <[^>]*> nop ++0000ad54 <[^>]*> nop ++0000ad58 <[^>]*> nop ++0000ad5c <[^>]*> nop ++0000ad60 <[^>]*> nop ++0000ad64 <[^>]*> nop ++0000ad68 <[^>]*> nop ++0000ad6c <[^>]*> nop ++0000ad70 <[^>]*> nop ++0000ad74 <[^>]*> nop ++0000ad78 <[^>]*> nop ++0000ad7c <[^>]*> nop ++0000ad80 <[^>]*> nop ++0000ad84 <[^>]*> nop ++0000ad88 <[^>]*> nop ++0000ad8c <[^>]*> nop ++0000ad90 <[^>]*> nop ++0000ad94 <[^>]*> nop ++0000ad98 <[^>]*> nop ++0000ad9c <[^>]*> nop ++0000ada0 <[^>]*> nop ++0000ada4 <[^>]*> nop ++0000ada8 <[^>]*> nop ++0000adac <[^>]*> nop ++0000adb0 <[^>]*> nop ++0000adb4 <[^>]*> nop ++0000adb8 <[^>]*> nop ++0000adbc <[^>]*> nop ++0000adc0 <[^>]*> nop ++0000adc4 <[^>]*> nop ++0000adc8 <[^>]*> nop ++0000adcc <[^>]*> nop ++0000add0 <[^>]*> nop ++0000add4 <[^>]*> nop ++0000add8 <[^>]*> nop ++0000addc <[^>]*> nop ++0000ade0 <[^>]*> nop ++0000ade4 <[^>]*> nop ++0000ade8 <[^>]*> nop ++0000adec <[^>]*> nop ++0000adf0 <[^>]*> nop ++0000adf4 <[^>]*> nop ++0000adf8 <[^>]*> nop ++0000adfc <[^>]*> nop ++0000ae00 <[^>]*> nop ++0000ae04 <[^>]*> nop ++0000ae08 <[^>]*> nop ++0000ae0c <[^>]*> nop ++0000ae10 <[^>]*> nop ++0000ae14 <[^>]*> nop ++0000ae18 <[^>]*> nop ++0000ae1c <[^>]*> nop ++0000ae20 <[^>]*> nop ++0000ae24 <[^>]*> nop ++0000ae28 <[^>]*> nop ++0000ae2c <[^>]*> nop ++0000ae30 <[^>]*> nop ++0000ae34 <[^>]*> nop ++0000ae38 <[^>]*> nop ++0000ae3c <[^>]*> nop ++0000ae40 <[^>]*> nop ++0000ae44 <[^>]*> nop ++0000ae48 <[^>]*> nop ++0000ae4c <[^>]*> nop ++0000ae50 <[^>]*> nop ++0000ae54 <[^>]*> nop ++0000ae58 <[^>]*> nop ++0000ae5c <[^>]*> nop ++0000ae60 <[^>]*> nop ++0000ae64 <[^>]*> nop ++0000ae68 <[^>]*> nop ++0000ae6c <[^>]*> nop ++0000ae70 <[^>]*> nop ++0000ae74 <[^>]*> nop ++0000ae78 <[^>]*> nop ++0000ae7c <[^>]*> nop ++0000ae80 <[^>]*> nop ++0000ae84 <[^>]*> nop ++0000ae88 <[^>]*> nop ++0000ae8c <[^>]*> nop ++0000ae90 <[^>]*> nop ++0000ae94 <[^>]*> nop ++0000ae98 <[^>]*> nop ++0000ae9c <[^>]*> nop ++0000aea0 <[^>]*> nop ++0000aea4 <[^>]*> nop ++0000aea8 <[^>]*> nop ++0000aeac <[^>]*> nop ++0000aeb0 <[^>]*> nop ++0000aeb4 <[^>]*> nop ++0000aeb8 <[^>]*> nop ++0000aebc <[^>]*> nop ++0000aec0 <[^>]*> nop ++0000aec4 <[^>]*> nop ++0000aec8 <[^>]*> nop ++0000aecc <[^>]*> nop ++0000aed0 <[^>]*> nop ++0000aed4 <[^>]*> nop ++0000aed8 <[^>]*> nop ++0000aedc <[^>]*> nop ++0000aee0 <[^>]*> nop ++0000aee4 <[^>]*> nop ++0000aee8 <[^>]*> nop ++0000aeec <[^>]*> nop ++0000aef0 <[^>]*> nop ++0000aef4 <[^>]*> nop ++0000aef8 <[^>]*> nop ++0000aefc <[^>]*> nop ++0000af00 <[^>]*> nop ++0000af04 <[^>]*> nop ++0000af08 <[^>]*> nop ++0000af0c <[^>]*> nop ++0000af10 <[^>]*> nop ++0000af14 <[^>]*> nop ++0000af18 <[^>]*> nop ++0000af1c <[^>]*> nop ++0000af20 <[^>]*> nop ++0000af24 <[^>]*> nop ++0000af28 <[^>]*> nop ++0000af2c <[^>]*> nop ++0000af30 <[^>]*> nop ++0000af34 <[^>]*> nop ++0000af38 <[^>]*> nop ++0000af3c <[^>]*> nop ++0000af40 <[^>]*> nop ++0000af44 <[^>]*> nop ++0000af48 <[^>]*> nop ++0000af4c <[^>]*> nop ++0000af50 <[^>]*> nop ++0000af54 <[^>]*> nop ++0000af58 <[^>]*> nop ++0000af5c <[^>]*> nop ++0000af60 <[^>]*> nop ++0000af64 <[^>]*> nop ++0000af68 <[^>]*> nop ++0000af6c <[^>]*> nop ++0000af70 <[^>]*> nop ++0000af74 <[^>]*> nop ++0000af78 <[^>]*> nop ++0000af7c <[^>]*> nop ++0000af80 <[^>]*> nop ++0000af84 <[^>]*> nop ++0000af88 <[^>]*> nop ++0000af8c <[^>]*> nop ++0000af90 <[^>]*> nop ++0000af94 <[^>]*> nop ++0000af98 <[^>]*> nop ++0000af9c <[^>]*> nop ++0000afa0 <[^>]*> nop ++0000afa4 <[^>]*> nop ++0000afa8 <[^>]*> nop ++0000afac <[^>]*> nop ++0000afb0 <[^>]*> nop ++0000afb4 <[^>]*> nop ++0000afb8 <[^>]*> nop ++0000afbc <[^>]*> nop ++0000afc0 <[^>]*> nop ++0000afc4 <[^>]*> nop ++0000afc8 <[^>]*> nop ++0000afcc <[^>]*> nop ++0000afd0 <[^>]*> nop ++0000afd4 <[^>]*> nop ++0000afd8 <[^>]*> nop ++0000afdc <[^>]*> nop ++0000afe0 <[^>]*> nop ++0000afe4 <[^>]*> nop ++0000afe8 <[^>]*> nop ++0000afec <[^>]*> nop ++0000aff0 <[^>]*> nop ++0000aff4 <[^>]*> nop ++0000aff8 <[^>]*> nop ++0000affc <[^>]*> nop ++0000b000 <[^>]*> nop ++0000b004 <[^>]*> nop ++0000b008 <[^>]*> nop ++0000b00c <[^>]*> nop ++0000b010 <[^>]*> nop ++0000b014 <[^>]*> nop ++0000b018 <[^>]*> nop ++0000b01c <[^>]*> nop ++0000b020 <[^>]*> nop ++0000b024 <[^>]*> nop ++0000b028 <[^>]*> nop ++0000b02c <[^>]*> nop ++0000b030 <[^>]*> nop ++0000b034 <[^>]*> nop ++0000b038 <[^>]*> nop ++0000b03c <[^>]*> nop ++0000b040 <[^>]*> nop ++0000b044 <[^>]*> nop ++0000b048 <[^>]*> nop ++0000b04c <[^>]*> nop ++0000b050 <[^>]*> nop ++0000b054 <[^>]*> nop ++0000b058 <[^>]*> nop ++0000b05c <[^>]*> nop ++0000b060 <[^>]*> nop ++0000b064 <[^>]*> nop ++0000b068 <[^>]*> nop ++0000b06c <[^>]*> nop ++0000b070 <[^>]*> nop ++0000b074 <[^>]*> nop ++0000b078 <[^>]*> nop ++0000b07c <[^>]*> nop ++0000b080 <[^>]*> nop ++0000b084 <[^>]*> nop ++0000b088 <[^>]*> nop ++0000b08c <[^>]*> nop ++0000b090 <[^>]*> nop ++0000b094 <[^>]*> nop ++0000b098 <[^>]*> nop ++0000b09c <[^>]*> nop ++0000b0a0 <[^>]*> nop ++0000b0a4 <[^>]*> nop ++0000b0a8 <[^>]*> nop ++0000b0ac <[^>]*> nop ++0000b0b0 <[^>]*> nop ++0000b0b4 <[^>]*> nop ++0000b0b8 <[^>]*> nop ++0000b0bc <[^>]*> nop ++0000b0c0 <[^>]*> nop ++0000b0c4 <[^>]*> nop ++0000b0c8 <[^>]*> nop ++0000b0cc <[^>]*> nop ++0000b0d0 <[^>]*> nop ++0000b0d4 <[^>]*> nop ++0000b0d8 <[^>]*> nop ++0000b0dc <[^>]*> nop ++0000b0e0 <[^>]*> nop ++0000b0e4 <[^>]*> nop ++0000b0e8 <[^>]*> nop ++0000b0ec <[^>]*> nop ++0000b0f0 <[^>]*> nop ++0000b0f4 <[^>]*> nop ++0000b0f8 <[^>]*> nop ++0000b0fc <[^>]*> nop ++0000b100 <[^>]*> nop ++0000b104 <[^>]*> nop ++0000b108 <[^>]*> nop ++0000b10c <[^>]*> nop ++0000b110 <[^>]*> nop ++0000b114 <[^>]*> nop ++0000b118 <[^>]*> nop ++0000b11c <[^>]*> nop ++0000b120 <[^>]*> nop ++0000b124 <[^>]*> nop ++0000b128 <[^>]*> nop ++0000b12c <[^>]*> nop ++0000b130 <[^>]*> nop ++0000b134 <[^>]*> nop ++0000b138 <[^>]*> nop ++0000b13c <[^>]*> nop ++0000b140 <[^>]*> nop ++0000b144 <[^>]*> nop ++0000b148 <[^>]*> nop ++0000b14c <[^>]*> nop ++0000b150 <[^>]*> nop ++0000b154 <[^>]*> nop ++0000b158 <[^>]*> nop ++0000b15c <[^>]*> nop ++0000b160 <[^>]*> nop ++0000b164 <[^>]*> nop ++0000b168 <[^>]*> nop ++0000b16c <[^>]*> nop ++0000b170 <[^>]*> nop ++0000b174 <[^>]*> nop ++0000b178 <[^>]*> nop ++0000b17c <[^>]*> nop ++0000b180 <[^>]*> nop ++0000b184 <[^>]*> nop ++0000b188 <[^>]*> nop ++0000b18c <[^>]*> nop ++0000b190 <[^>]*> nop ++0000b194 <[^>]*> nop ++0000b198 <[^>]*> nop ++0000b19c <[^>]*> nop ++0000b1a0 <[^>]*> nop ++0000b1a4 <[^>]*> nop ++0000b1a8 <[^>]*> nop ++0000b1ac <[^>]*> nop ++0000b1b0 <[^>]*> nop ++0000b1b4 <[^>]*> nop ++0000b1b8 <[^>]*> nop ++0000b1bc <[^>]*> nop ++0000b1c0 <[^>]*> nop ++0000b1c4 <[^>]*> nop ++0000b1c8 <[^>]*> nop ++0000b1cc <[^>]*> nop ++0000b1d0 <[^>]*> nop ++0000b1d4 <[^>]*> nop ++0000b1d8 <[^>]*> nop ++0000b1dc <[^>]*> nop ++0000b1e0 <[^>]*> nop ++0000b1e4 <[^>]*> nop ++0000b1e8 <[^>]*> nop ++0000b1ec <[^>]*> nop ++0000b1f0 <[^>]*> nop ++0000b1f4 <[^>]*> nop ++0000b1f8 <[^>]*> nop ++0000b1fc <[^>]*> nop ++0000b200 <[^>]*> nop ++0000b204 <[^>]*> nop ++0000b208 <[^>]*> nop ++0000b20c <[^>]*> nop ++0000b210 <[^>]*> nop ++0000b214 <[^>]*> nop ++0000b218 <[^>]*> nop ++0000b21c <[^>]*> nop ++0000b220 <[^>]*> nop ++0000b224 <[^>]*> nop ++0000b228 <[^>]*> nop ++0000b22c <[^>]*> nop ++0000b230 <[^>]*> nop ++0000b234 <[^>]*> nop ++0000b238 <[^>]*> nop ++0000b23c <[^>]*> nop ++0000b240 <[^>]*> nop ++0000b244 <[^>]*> nop ++0000b248 <[^>]*> nop ++0000b24c <[^>]*> nop ++0000b250 <[^>]*> nop ++0000b254 <[^>]*> nop ++0000b258 <[^>]*> nop ++0000b25c <[^>]*> nop ++0000b260 <[^>]*> nop ++0000b264 <[^>]*> nop ++0000b268 <[^>]*> nop ++0000b26c <[^>]*> nop ++0000b270 <[^>]*> nop ++0000b274 <[^>]*> nop ++0000b278 <[^>]*> nop ++0000b27c <[^>]*> nop ++0000b280 <[^>]*> nop ++0000b284 <[^>]*> nop ++0000b288 <[^>]*> nop ++0000b28c <[^>]*> nop ++0000b290 <[^>]*> nop ++0000b294 <[^>]*> nop ++0000b298 <[^>]*> nop ++0000b29c <[^>]*> nop ++0000b2a0 <[^>]*> nop ++0000b2a4 <[^>]*> nop ++0000b2a8 <[^>]*> nop ++0000b2ac <[^>]*> nop ++0000b2b0 <[^>]*> nop ++0000b2b4 <[^>]*> nop ++0000b2b8 <[^>]*> nop ++0000b2bc <[^>]*> nop ++0000b2c0 <[^>]*> nop ++0000b2c4 <[^>]*> nop ++0000b2c8 <[^>]*> nop ++0000b2cc <[^>]*> nop ++0000b2d0 <[^>]*> nop ++0000b2d4 <[^>]*> nop ++0000b2d8 <[^>]*> nop ++0000b2dc <[^>]*> nop ++0000b2e0 <[^>]*> nop ++0000b2e4 <[^>]*> nop ++0000b2e8 <[^>]*> nop ++0000b2ec <[^>]*> nop ++0000b2f0 <[^>]*> nop ++0000b2f4 <[^>]*> nop ++0000b2f8 <[^>]*> nop ++0000b2fc <[^>]*> nop ++0000b300 <[^>]*> nop ++0000b304 <[^>]*> nop ++0000b308 <[^>]*> nop ++0000b30c <[^>]*> nop ++0000b310 <[^>]*> nop ++0000b314 <[^>]*> nop ++0000b318 <[^>]*> nop ++0000b31c <[^>]*> nop ++0000b320 <[^>]*> nop ++0000b324 <[^>]*> nop ++0000b328 <[^>]*> nop ++0000b32c <[^>]*> nop ++0000b330 <[^>]*> nop ++0000b334 <[^>]*> nop ++0000b338 <[^>]*> nop ++0000b33c <[^>]*> nop ++0000b340 <[^>]*> nop ++0000b344 <[^>]*> nop ++0000b348 <[^>]*> nop ++0000b34c <[^>]*> nop ++0000b350 <[^>]*> nop ++0000b354 <[^>]*> nop ++0000b358 <[^>]*> nop ++0000b35c <[^>]*> nop ++0000b360 <[^>]*> nop ++0000b364 <[^>]*> nop ++0000b368 <[^>]*> nop ++0000b36c <[^>]*> nop ++0000b370 <[^>]*> nop ++0000b374 <[^>]*> nop ++0000b378 <[^>]*> nop ++0000b37c <[^>]*> nop ++0000b380 <[^>]*> nop ++0000b384 <[^>]*> nop ++0000b388 <[^>]*> nop ++0000b38c <[^>]*> nop ++0000b390 <[^>]*> nop ++0000b394 <[^>]*> nop ++0000b398 <[^>]*> nop ++0000b39c <[^>]*> nop ++0000b3a0 <[^>]*> nop ++0000b3a4 <[^>]*> nop ++0000b3a8 <[^>]*> nop ++0000b3ac <[^>]*> nop ++0000b3b0 <[^>]*> nop ++0000b3b4 <[^>]*> nop ++0000b3b8 <[^>]*> nop ++0000b3bc <[^>]*> nop ++0000b3c0 <[^>]*> nop ++0000b3c4 <[^>]*> nop ++0000b3c8 <[^>]*> nop ++0000b3cc <[^>]*> nop ++0000b3d0 <[^>]*> nop ++0000b3d4 <[^>]*> nop ++0000b3d8 <[^>]*> nop ++0000b3dc <[^>]*> nop ++0000b3e0 <[^>]*> nop ++0000b3e4 <[^>]*> nop ++0000b3e8 <[^>]*> nop ++0000b3ec <[^>]*> nop ++0000b3f0 <[^>]*> nop ++0000b3f4 <[^>]*> nop ++0000b3f8 <[^>]*> nop ++0000b3fc <[^>]*> nop ++0000b400 <[^>]*> nop ++0000b404 <[^>]*> nop ++0000b408 <[^>]*> nop ++0000b40c <[^>]*> nop ++0000b410 <[^>]*> nop ++0000b414 <[^>]*> nop ++0000b418 <[^>]*> nop ++0000b41c <[^>]*> nop ++0000b420 <[^>]*> nop ++0000b424 <[^>]*> nop ++0000b428 <[^>]*> nop ++0000b42c <[^>]*> nop ++0000b430 <[^>]*> nop ++0000b434 <[^>]*> nop ++0000b438 <[^>]*> nop ++0000b43c <[^>]*> nop ++0000b440 <[^>]*> nop ++0000b444 <[^>]*> nop ++0000b448 <[^>]*> nop ++0000b44c <[^>]*> nop ++0000b450 <[^>]*> nop ++0000b454 <[^>]*> nop ++0000b458 <[^>]*> nop ++0000b45c <[^>]*> nop ++0000b460 <[^>]*> nop ++0000b464 <[^>]*> nop ++0000b468 <[^>]*> nop ++0000b46c <[^>]*> nop ++0000b470 <[^>]*> nop ++0000b474 <[^>]*> nop ++0000b478 <[^>]*> nop ++0000b47c <[^>]*> nop ++0000b480 <[^>]*> nop ++0000b484 <[^>]*> nop ++0000b488 <[^>]*> nop ++0000b48c <[^>]*> nop ++0000b490 <[^>]*> nop ++0000b494 <[^>]*> nop ++0000b498 <[^>]*> nop ++0000b49c <[^>]*> nop ++0000b4a0 <[^>]*> nop ++0000b4a4 <[^>]*> nop ++0000b4a8 <[^>]*> nop ++0000b4ac <[^>]*> nop ++0000b4b0 <[^>]*> nop ++0000b4b4 <[^>]*> nop ++0000b4b8 <[^>]*> nop ++0000b4bc <[^>]*> nop ++0000b4c0 <[^>]*> nop ++0000b4c4 <[^>]*> nop ++0000b4c8 <[^>]*> nop ++0000b4cc <[^>]*> nop ++0000b4d0 <[^>]*> nop ++0000b4d4 <[^>]*> nop ++0000b4d8 <[^>]*> nop ++0000b4dc <[^>]*> nop ++0000b4e0 <[^>]*> nop ++0000b4e4 <[^>]*> nop ++0000b4e8 <[^>]*> nop ++0000b4ec <[^>]*> nop ++0000b4f0 <[^>]*> nop ++0000b4f4 <[^>]*> nop ++0000b4f8 <[^>]*> nop ++0000b4fc <[^>]*> nop ++0000b500 <[^>]*> nop ++0000b504 <[^>]*> nop ++0000b508 <[^>]*> nop ++0000b50c <[^>]*> nop ++0000b510 <[^>]*> nop ++0000b514 <[^>]*> nop ++0000b518 <[^>]*> nop ++0000b51c <[^>]*> nop ++0000b520 <[^>]*> nop ++0000b524 <[^>]*> nop ++0000b528 <[^>]*> nop ++0000b52c <[^>]*> nop ++0000b530 <[^>]*> nop ++0000b534 <[^>]*> nop ++0000b538 <[^>]*> nop ++0000b53c <[^>]*> nop ++0000b540 <[^>]*> nop ++0000b544 <[^>]*> nop ++0000b548 <[^>]*> nop ++0000b54c <[^>]*> nop ++0000b550 <[^>]*> nop ++0000b554 <[^>]*> nop ++0000b558 <[^>]*> nop ++0000b55c <[^>]*> nop ++0000b560 <[^>]*> nop ++0000b564 <[^>]*> nop ++0000b568 <[^>]*> nop ++0000b56c <[^>]*> nop ++0000b570 <[^>]*> nop ++0000b574 <[^>]*> nop ++0000b578 <[^>]*> nop ++0000b57c <[^>]*> nop ++0000b580 <[^>]*> nop ++0000b584 <[^>]*> nop ++0000b588 <[^>]*> nop ++0000b58c <[^>]*> nop ++0000b590 <[^>]*> nop ++0000b594 <[^>]*> nop ++0000b598 <[^>]*> nop ++0000b59c <[^>]*> nop ++0000b5a0 <[^>]*> nop ++0000b5a4 <[^>]*> nop ++0000b5a8 <[^>]*> nop ++0000b5ac <[^>]*> nop ++0000b5b0 <[^>]*> nop ++0000b5b4 <[^>]*> nop ++0000b5b8 <[^>]*> nop ++0000b5bc <[^>]*> nop ++0000b5c0 <[^>]*> nop ++0000b5c4 <[^>]*> nop ++0000b5c8 <[^>]*> nop ++0000b5cc <[^>]*> nop ++0000b5d0 <[^>]*> nop ++0000b5d4 <[^>]*> nop ++0000b5d8 <[^>]*> nop ++0000b5dc <[^>]*> nop ++0000b5e0 <[^>]*> nop ++0000b5e4 <[^>]*> nop ++0000b5e8 <[^>]*> nop ++0000b5ec <[^>]*> nop ++0000b5f0 <[^>]*> nop ++0000b5f4 <[^>]*> nop ++0000b5f8 <[^>]*> nop ++0000b5fc <[^>]*> nop ++0000b600 <[^>]*> nop ++0000b604 <[^>]*> nop ++0000b608 <[^>]*> nop ++0000b60c <[^>]*> nop ++0000b610 <[^>]*> nop ++0000b614 <[^>]*> nop ++0000b618 <[^>]*> nop ++0000b61c <[^>]*> nop ++0000b620 <[^>]*> nop ++0000b624 <[^>]*> nop ++0000b628 <[^>]*> nop ++0000b62c <[^>]*> nop ++0000b630 <[^>]*> nop ++0000b634 <[^>]*> nop ++0000b638 <[^>]*> nop ++0000b63c <[^>]*> nop ++0000b640 <[^>]*> nop ++0000b644 <[^>]*> nop ++0000b648 <[^>]*> nop ++0000b64c <[^>]*> nop ++0000b650 <[^>]*> nop ++0000b654 <[^>]*> nop ++0000b658 <[^>]*> nop ++0000b65c <[^>]*> nop ++0000b660 <[^>]*> nop ++0000b664 <[^>]*> nop ++0000b668 <[^>]*> nop ++0000b66c <[^>]*> nop ++0000b670 <[^>]*> nop ++0000b674 <[^>]*> nop ++0000b678 <[^>]*> nop ++0000b67c <[^>]*> nop ++0000b680 <[^>]*> nop ++0000b684 <[^>]*> nop ++0000b688 <[^>]*> nop ++0000b68c <[^>]*> nop ++0000b690 <[^>]*> nop ++0000b694 <[^>]*> nop ++0000b698 <[^>]*> nop ++0000b69c <[^>]*> nop ++0000b6a0 <[^>]*> nop ++0000b6a4 <[^>]*> nop ++0000b6a8 <[^>]*> nop ++0000b6ac <[^>]*> nop ++0000b6b0 <[^>]*> nop ++0000b6b4 <[^>]*> nop ++0000b6b8 <[^>]*> nop ++0000b6bc <[^>]*> nop ++0000b6c0 <[^>]*> nop ++0000b6c4 <[^>]*> nop ++0000b6c8 <[^>]*> nop ++0000b6cc <[^>]*> nop ++0000b6d0 <[^>]*> nop ++0000b6d4 <[^>]*> nop ++0000b6d8 <[^>]*> nop ++0000b6dc <[^>]*> nop ++0000b6e0 <[^>]*> nop ++0000b6e4 <[^>]*> nop ++0000b6e8 <[^>]*> nop ++0000b6ec <[^>]*> nop ++0000b6f0 <[^>]*> nop ++0000b6f4 <[^>]*> nop ++0000b6f8 <[^>]*> nop ++0000b6fc <[^>]*> nop ++0000b700 <[^>]*> nop ++0000b704 <[^>]*> nop ++0000b708 <[^>]*> nop ++0000b70c <[^>]*> nop ++0000b710 <[^>]*> nop ++0000b714 <[^>]*> nop ++0000b718 <[^>]*> nop ++0000b71c <[^>]*> nop ++0000b720 <[^>]*> nop ++0000b724 <[^>]*> nop ++0000b728 <[^>]*> nop ++0000b72c <[^>]*> nop ++0000b730 <[^>]*> nop ++0000b734 <[^>]*> nop ++0000b738 <[^>]*> nop ++0000b73c <[^>]*> nop ++0000b740 <[^>]*> nop ++0000b744 <[^>]*> nop ++0000b748 <[^>]*> nop ++0000b74c <[^>]*> nop ++0000b750 <[^>]*> nop ++0000b754 <[^>]*> nop ++0000b758 <[^>]*> nop ++0000b75c <[^>]*> nop ++0000b760 <[^>]*> nop ++0000b764 <[^>]*> nop ++0000b768 <[^>]*> nop ++0000b76c <[^>]*> nop ++0000b770 <[^>]*> nop ++0000b774 <[^>]*> nop ++0000b778 <[^>]*> nop ++0000b77c <[^>]*> nop ++0000b780 <[^>]*> nop ++0000b784 <[^>]*> nop ++0000b788 <[^>]*> nop ++0000b78c <[^>]*> nop ++0000b790 <[^>]*> nop ++0000b794 <[^>]*> nop ++0000b798 <[^>]*> nop ++0000b79c <[^>]*> nop ++0000b7a0 <[^>]*> nop ++0000b7a4 <[^>]*> nop ++0000b7a8 <[^>]*> nop ++0000b7ac <[^>]*> nop ++0000b7b0 <[^>]*> nop ++0000b7b4 <[^>]*> nop ++0000b7b8 <[^>]*> nop ++0000b7bc <[^>]*> nop ++0000b7c0 <[^>]*> nop ++0000b7c4 <[^>]*> nop ++0000b7c8 <[^>]*> nop ++0000b7cc <[^>]*> nop ++0000b7d0 <[^>]*> nop ++0000b7d4 <[^>]*> nop ++0000b7d8 <[^>]*> nop ++0000b7dc <[^>]*> nop ++0000b7e0 <[^>]*> nop ++0000b7e4 <[^>]*> nop ++0000b7e8 <[^>]*> nop ++0000b7ec <[^>]*> nop ++0000b7f0 <[^>]*> nop ++0000b7f4 <[^>]*> nop ++0000b7f8 <[^>]*> nop ++0000b7fc <[^>]*> nop ++0000b800 <[^>]*> nop ++0000b804 <[^>]*> nop ++0000b808 <[^>]*> nop ++0000b80c <[^>]*> nop ++0000b810 <[^>]*> nop ++0000b814 <[^>]*> nop ++0000b818 <[^>]*> nop ++0000b81c <[^>]*> nop ++0000b820 <[^>]*> nop ++0000b824 <[^>]*> nop ++0000b828 <[^>]*> nop ++0000b82c <[^>]*> nop ++0000b830 <[^>]*> nop ++0000b834 <[^>]*> nop ++0000b838 <[^>]*> nop ++0000b83c <[^>]*> nop ++0000b840 <[^>]*> nop ++0000b844 <[^>]*> nop ++0000b848 <[^>]*> nop ++0000b84c <[^>]*> nop ++0000b850 <[^>]*> nop ++0000b854 <[^>]*> nop ++0000b858 <[^>]*> nop ++0000b85c <[^>]*> nop ++0000b860 <[^>]*> nop ++0000b864 <[^>]*> nop ++0000b868 <[^>]*> nop ++0000b86c <[^>]*> nop ++0000b870 <[^>]*> nop ++0000b874 <[^>]*> nop ++0000b878 <[^>]*> nop ++0000b87c <[^>]*> nop ++0000b880 <[^>]*> nop ++0000b884 <[^>]*> nop ++0000b888 <[^>]*> nop ++0000b88c <[^>]*> nop ++0000b890 <[^>]*> nop ++0000b894 <[^>]*> nop ++0000b898 <[^>]*> nop ++0000b89c <[^>]*> nop ++0000b8a0 <[^>]*> nop ++0000b8a4 <[^>]*> nop ++0000b8a8 <[^>]*> nop ++0000b8ac <[^>]*> nop ++0000b8b0 <[^>]*> nop ++0000b8b4 <[^>]*> nop ++0000b8b8 <[^>]*> nop ++0000b8bc <[^>]*> nop ++0000b8c0 <[^>]*> nop ++0000b8c4 <[^>]*> nop ++0000b8c8 <[^>]*> nop ++0000b8cc <[^>]*> nop ++0000b8d0 <[^>]*> nop ++0000b8d4 <[^>]*> nop ++0000b8d8 <[^>]*> nop ++0000b8dc <[^>]*> nop ++0000b8e0 <[^>]*> nop ++0000b8e4 <[^>]*> nop ++0000b8e8 <[^>]*> nop ++0000b8ec <[^>]*> nop ++0000b8f0 <[^>]*> nop ++0000b8f4 <[^>]*> nop ++0000b8f8 <[^>]*> nop ++0000b8fc <[^>]*> nop ++0000b900 <[^>]*> nop ++0000b904 <[^>]*> nop ++0000b908 <[^>]*> nop ++0000b90c <[^>]*> nop ++0000b910 <[^>]*> nop ++0000b914 <[^>]*> nop ++0000b918 <[^>]*> nop ++0000b91c <[^>]*> nop ++0000b920 <[^>]*> nop ++0000b924 <[^>]*> nop ++0000b928 <[^>]*> nop ++0000b92c <[^>]*> nop ++0000b930 <[^>]*> nop ++0000b934 <[^>]*> nop ++0000b938 <[^>]*> nop ++0000b93c <[^>]*> nop ++0000b940 <[^>]*> nop ++0000b944 <[^>]*> nop ++0000b948 <[^>]*> nop ++0000b94c <[^>]*> nop ++0000b950 <[^>]*> nop ++0000b954 <[^>]*> nop ++0000b958 <[^>]*> nop ++0000b95c <[^>]*> nop ++0000b960 <[^>]*> nop ++0000b964 <[^>]*> nop ++0000b968 <[^>]*> nop ++0000b96c <[^>]*> nop ++0000b970 <[^>]*> nop ++0000b974 <[^>]*> nop ++0000b978 <[^>]*> nop ++0000b97c <[^>]*> nop ++0000b980 <[^>]*> nop ++0000b984 <[^>]*> nop ++0000b988 <[^>]*> nop ++0000b98c <[^>]*> nop ++0000b990 <[^>]*> nop ++0000b994 <[^>]*> nop ++0000b998 <[^>]*> nop ++0000b99c <[^>]*> nop ++0000b9a0 <[^>]*> nop ++0000b9a4 <[^>]*> nop ++0000b9a8 <[^>]*> nop ++0000b9ac <[^>]*> nop ++0000b9b0 <[^>]*> nop ++0000b9b4 <[^>]*> nop ++0000b9b8 <[^>]*> nop ++0000b9bc <[^>]*> nop ++0000b9c0 <[^>]*> nop ++0000b9c4 <[^>]*> nop ++0000b9c8 <[^>]*> nop ++0000b9cc <[^>]*> nop ++0000b9d0 <[^>]*> nop ++0000b9d4 <[^>]*> nop ++0000b9d8 <[^>]*> nop ++0000b9dc <[^>]*> nop ++0000b9e0 <[^>]*> nop ++0000b9e4 <[^>]*> nop ++0000b9e8 <[^>]*> nop ++0000b9ec <[^>]*> nop ++0000b9f0 <[^>]*> nop ++0000b9f4 <[^>]*> nop ++0000b9f8 <[^>]*> nop ++0000b9fc <[^>]*> nop ++0000ba00 <[^>]*> nop ++0000ba04 <[^>]*> nop ++0000ba08 <[^>]*> nop ++0000ba0c <[^>]*> nop ++0000ba10 <[^>]*> nop ++0000ba14 <[^>]*> nop ++0000ba18 <[^>]*> nop ++0000ba1c <[^>]*> nop ++0000ba20 <[^>]*> nop ++0000ba24 <[^>]*> nop ++0000ba28 <[^>]*> nop ++0000ba2c <[^>]*> nop ++0000ba30 <[^>]*> nop ++0000ba34 <[^>]*> nop ++0000ba38 <[^>]*> nop ++0000ba3c <[^>]*> nop ++0000ba40 <[^>]*> nop ++0000ba44 <[^>]*> nop ++0000ba48 <[^>]*> nop ++0000ba4c <[^>]*> nop ++0000ba50 <[^>]*> nop ++0000ba54 <[^>]*> nop ++0000ba58 <[^>]*> nop ++0000ba5c <[^>]*> nop ++0000ba60 <[^>]*> nop ++0000ba64 <[^>]*> nop ++0000ba68 <[^>]*> nop ++0000ba6c <[^>]*> nop ++0000ba70 <[^>]*> nop ++0000ba74 <[^>]*> nop ++0000ba78 <[^>]*> nop ++0000ba7c <[^>]*> nop ++0000ba80 <[^>]*> nop ++0000ba84 <[^>]*> nop ++0000ba88 <[^>]*> nop ++0000ba8c <[^>]*> nop ++0000ba90 <[^>]*> nop ++0000ba94 <[^>]*> nop ++0000ba98 <[^>]*> nop ++0000ba9c <[^>]*> nop ++0000baa0 <[^>]*> nop ++0000baa4 <[^>]*> nop ++0000baa8 <[^>]*> nop ++0000baac <[^>]*> nop ++0000bab0 <[^>]*> nop ++0000bab4 <[^>]*> nop ++0000bab8 <[^>]*> nop ++0000babc <[^>]*> nop ++0000bac0 <[^>]*> nop ++0000bac4 <[^>]*> nop ++0000bac8 <[^>]*> nop ++0000bacc <[^>]*> nop ++0000bad0 <[^>]*> nop ++0000bad4 <[^>]*> nop ++0000bad8 <[^>]*> nop ++0000badc <[^>]*> nop ++0000bae0 <[^>]*> nop ++0000bae4 <[^>]*> nop ++0000bae8 <[^>]*> nop ++0000baec <[^>]*> nop ++0000baf0 <[^>]*> nop ++0000baf4 <[^>]*> nop ++0000baf8 <[^>]*> nop ++0000bafc <[^>]*> nop ++0000bb00 <[^>]*> nop ++0000bb04 <[^>]*> nop ++0000bb08 <[^>]*> nop ++0000bb0c <[^>]*> nop ++0000bb10 <[^>]*> nop ++0000bb14 <[^>]*> nop ++0000bb18 <[^>]*> nop ++0000bb1c <[^>]*> nop ++0000bb20 <[^>]*> nop ++0000bb24 <[^>]*> nop ++0000bb28 <[^>]*> nop ++0000bb2c <[^>]*> nop ++0000bb30 <[^>]*> nop ++0000bb34 <[^>]*> nop ++0000bb38 <[^>]*> nop ++0000bb3c <[^>]*> nop ++0000bb40 <[^>]*> nop ++0000bb44 <[^>]*> nop ++0000bb48 <[^>]*> nop ++0000bb4c <[^>]*> nop ++0000bb50 <[^>]*> nop ++0000bb54 <[^>]*> nop ++0000bb58 <[^>]*> nop ++0000bb5c <[^>]*> nop ++0000bb60 <[^>]*> nop ++0000bb64 <[^>]*> nop ++0000bb68 <[^>]*> nop ++0000bb6c <[^>]*> nop ++0000bb70 <[^>]*> nop ++0000bb74 <[^>]*> nop ++0000bb78 <[^>]*> nop ++0000bb7c <[^>]*> nop ++0000bb80 <[^>]*> nop ++0000bb84 <[^>]*> nop ++0000bb88 <[^>]*> nop ++0000bb8c <[^>]*> nop ++0000bb90 <[^>]*> nop ++0000bb94 <[^>]*> nop ++0000bb98 <[^>]*> nop ++0000bb9c <[^>]*> nop ++0000bba0 <[^>]*> nop ++0000bba4 <[^>]*> nop ++0000bba8 <[^>]*> nop ++0000bbac <[^>]*> nop ++0000bbb0 <[^>]*> nop ++0000bbb4 <[^>]*> nop ++0000bbb8 <[^>]*> nop ++0000bbbc <[^>]*> nop ++0000bbc0 <[^>]*> nop ++0000bbc4 <[^>]*> nop ++0000bbc8 <[^>]*> nop ++0000bbcc <[^>]*> nop ++0000bbd0 <[^>]*> nop ++0000bbd4 <[^>]*> nop ++0000bbd8 <[^>]*> nop ++0000bbdc <[^>]*> nop ++0000bbe0 <[^>]*> nop ++0000bbe4 <[^>]*> nop ++0000bbe8 <[^>]*> nop ++0000bbec <[^>]*> nop ++0000bbf0 <[^>]*> nop ++0000bbf4 <[^>]*> nop ++0000bbf8 <[^>]*> nop ++0000bbfc <[^>]*> nop ++0000bc00 <[^>]*> nop ++0000bc04 <[^>]*> nop ++0000bc08 <[^>]*> nop ++0000bc0c <[^>]*> nop ++0000bc10 <[^>]*> nop ++0000bc14 <[^>]*> nop ++0000bc18 <[^>]*> nop ++0000bc1c <[^>]*> nop ++0000bc20 <[^>]*> nop ++0000bc24 <[^>]*> nop ++0000bc28 <[^>]*> nop ++0000bc2c <[^>]*> nop ++0000bc30 <[^>]*> nop ++0000bc34 <[^>]*> nop ++0000bc38 <[^>]*> nop ++0000bc3c <[^>]*> nop ++0000bc40 <[^>]*> nop ++0000bc44 <[^>]*> nop ++0000bc48 <[^>]*> nop ++0000bc4c <[^>]*> nop ++0000bc50 <[^>]*> nop ++0000bc54 <[^>]*> nop ++0000bc58 <[^>]*> nop ++0000bc5c <[^>]*> nop ++0000bc60 <[^>]*> nop ++0000bc64 <[^>]*> nop ++0000bc68 <[^>]*> nop ++0000bc6c <[^>]*> nop ++0000bc70 <[^>]*> nop ++0000bc74 <[^>]*> nop ++0000bc78 <[^>]*> nop ++0000bc7c <[^>]*> nop ++0000bc80 <[^>]*> nop ++0000bc84 <[^>]*> nop ++0000bc88 <[^>]*> nop ++0000bc8c <[^>]*> nop ++0000bc90 <[^>]*> nop ++0000bc94 <[^>]*> nop ++0000bc98 <[^>]*> nop ++0000bc9c <[^>]*> nop ++0000bca0 <[^>]*> nop ++0000bca4 <[^>]*> nop ++0000bca8 <[^>]*> nop ++0000bcac <[^>]*> nop ++0000bcb0 <[^>]*> nop ++0000bcb4 <[^>]*> nop ++0000bcb8 <[^>]*> nop ++0000bcbc <[^>]*> nop ++0000bcc0 <[^>]*> nop ++0000bcc4 <[^>]*> nop ++0000bcc8 <[^>]*> nop ++0000bccc <[^>]*> nop ++0000bcd0 <[^>]*> nop ++0000bcd4 <[^>]*> nop ++0000bcd8 <[^>]*> nop ++0000bcdc <[^>]*> nop ++0000bce0 <[^>]*> nop ++0000bce4 <[^>]*> nop ++0000bce8 <[^>]*> nop ++0000bcec <[^>]*> nop ++0000bcf0 <[^>]*> nop ++0000bcf4 <[^>]*> nop ++0000bcf8 <[^>]*> nop ++0000bcfc <[^>]*> nop ++0000bd00 <[^>]*> nop ++0000bd04 <[^>]*> nop ++0000bd08 <[^>]*> nop ++0000bd0c <[^>]*> nop ++0000bd10 <[^>]*> nop ++0000bd14 <[^>]*> nop ++0000bd18 <[^>]*> nop ++0000bd1c <[^>]*> nop ++0000bd20 <[^>]*> nop ++0000bd24 <[^>]*> nop ++0000bd28 <[^>]*> nop ++0000bd2c <[^>]*> nop ++0000bd30 <[^>]*> nop ++0000bd34 <[^>]*> nop ++0000bd38 <[^>]*> nop ++0000bd3c <[^>]*> nop ++0000bd40 <[^>]*> nop ++0000bd44 <[^>]*> nop ++0000bd48 <[^>]*> nop ++0000bd4c <[^>]*> nop ++0000bd50 <[^>]*> nop ++0000bd54 <[^>]*> nop ++0000bd58 <[^>]*> nop ++0000bd5c <[^>]*> nop ++0000bd60 <[^>]*> nop ++0000bd64 <[^>]*> nop ++0000bd68 <[^>]*> nop ++0000bd6c <[^>]*> nop ++0000bd70 <[^>]*> nop ++0000bd74 <[^>]*> nop ++0000bd78 <[^>]*> nop ++0000bd7c <[^>]*> nop ++0000bd80 <[^>]*> nop ++0000bd84 <[^>]*> nop ++0000bd88 <[^>]*> nop ++0000bd8c <[^>]*> nop ++0000bd90 <[^>]*> nop ++0000bd94 <[^>]*> nop ++0000bd98 <[^>]*> nop ++0000bd9c <[^>]*> nop ++0000bda0 <[^>]*> nop ++0000bda4 <[^>]*> nop ++0000bda8 <[^>]*> nop ++0000bdac <[^>]*> nop ++0000bdb0 <[^>]*> nop ++0000bdb4 <[^>]*> nop ++0000bdb8 <[^>]*> nop ++0000bdbc <[^>]*> nop ++0000bdc0 <[^>]*> nop ++0000bdc4 <[^>]*> nop ++0000bdc8 <[^>]*> nop ++0000bdcc <[^>]*> nop ++0000bdd0 <[^>]*> nop ++0000bdd4 <[^>]*> nop ++0000bdd8 <[^>]*> nop ++0000bddc <[^>]*> nop ++0000bde0 <[^>]*> nop ++0000bde4 <[^>]*> nop ++0000bde8 <[^>]*> nop ++0000bdec <[^>]*> nop ++0000bdf0 <[^>]*> nop ++0000bdf4 <[^>]*> nop ++0000bdf8 <[^>]*> nop ++0000bdfc <[^>]*> nop ++0000be00 <[^>]*> nop ++0000be04 <[^>]*> nop ++0000be08 <[^>]*> nop ++0000be0c <[^>]*> nop ++0000be10 <[^>]*> nop ++0000be14 <[^>]*> nop ++0000be18 <[^>]*> nop ++0000be1c <[^>]*> nop ++0000be20 <[^>]*> nop ++0000be24 <[^>]*> nop ++0000be28 <[^>]*> nop ++0000be2c <[^>]*> nop ++0000be30 <[^>]*> nop ++0000be34 <[^>]*> nop ++0000be38 <[^>]*> nop ++0000be3c <[^>]*> nop ++0000be40 <[^>]*> nop ++0000be44 <[^>]*> nop ++0000be48 <[^>]*> nop ++0000be4c <[^>]*> nop ++0000be50 <[^>]*> nop ++0000be54 <[^>]*> nop ++0000be58 <[^>]*> nop ++0000be5c <[^>]*> nop ++0000be60 <[^>]*> nop ++0000be64 <[^>]*> nop ++0000be68 <[^>]*> nop ++0000be6c <[^>]*> nop ++0000be70 <[^>]*> nop ++0000be74 <[^>]*> nop ++0000be78 <[^>]*> nop ++0000be7c <[^>]*> nop ++0000be80 <[^>]*> nop ++0000be84 <[^>]*> nop ++0000be88 <[^>]*> nop ++0000be8c <[^>]*> nop ++0000be90 <[^>]*> nop ++0000be94 <[^>]*> nop ++0000be98 <[^>]*> nop ++0000be9c <[^>]*> nop ++0000bea0 <[^>]*> nop ++0000bea4 <[^>]*> nop ++0000bea8 <[^>]*> nop ++0000beac <[^>]*> nop ++0000beb0 <[^>]*> nop ++0000beb4 <[^>]*> nop ++0000beb8 <[^>]*> nop ++0000bebc <[^>]*> nop ++0000bec0 <[^>]*> nop ++0000bec4 <[^>]*> nop ++0000bec8 <[^>]*> nop ++0000becc <[^>]*> nop ++0000bed0 <[^>]*> nop ++0000bed4 <[^>]*> nop ++0000bed8 <[^>]*> nop ++0000bedc <[^>]*> nop ++0000bee0 <[^>]*> nop ++0000bee4 <[^>]*> nop ++0000bee8 <[^>]*> nop ++0000beec <[^>]*> nop ++0000bef0 <[^>]*> nop ++0000bef4 <[^>]*> nop ++0000bef8 <[^>]*> nop ++0000befc <[^>]*> nop ++0000bf00 <[^>]*> nop ++0000bf04 <[^>]*> nop ++0000bf08 <[^>]*> nop ++0000bf0c <[^>]*> nop ++0000bf10 <[^>]*> nop ++0000bf14 <[^>]*> nop ++0000bf18 <[^>]*> nop ++0000bf1c <[^>]*> nop ++0000bf20 <[^>]*> nop ++0000bf24 <[^>]*> nop ++0000bf28 <[^>]*> nop ++0000bf2c <[^>]*> nop ++0000bf30 <[^>]*> nop ++0000bf34 <[^>]*> nop ++0000bf38 <[^>]*> nop ++0000bf3c <[^>]*> nop ++0000bf40 <[^>]*> nop ++0000bf44 <[^>]*> nop ++0000bf48 <[^>]*> nop ++0000bf4c <[^>]*> nop ++0000bf50 <[^>]*> nop ++0000bf54 <[^>]*> nop ++0000bf58 <[^>]*> nop ++0000bf5c <[^>]*> nop ++0000bf60 <[^>]*> nop ++0000bf64 <[^>]*> nop ++0000bf68 <[^>]*> nop ++0000bf6c <[^>]*> nop ++0000bf70 <[^>]*> nop ++0000bf74 <[^>]*> nop ++0000bf78 <[^>]*> nop ++0000bf7c <[^>]*> nop ++0000bf80 <[^>]*> nop ++0000bf84 <[^>]*> nop ++0000bf88 <[^>]*> nop ++0000bf8c <[^>]*> nop ++0000bf90 <[^>]*> nop ++0000bf94 <[^>]*> nop ++0000bf98 <[^>]*> nop ++0000bf9c <[^>]*> nop ++0000bfa0 <[^>]*> nop ++0000bfa4 <[^>]*> nop ++0000bfa8 <[^>]*> nop ++0000bfac <[^>]*> nop ++0000bfb0 <[^>]*> nop ++0000bfb4 <[^>]*> nop ++0000bfb8 <[^>]*> nop ++0000bfbc <[^>]*> nop ++0000bfc0 <[^>]*> nop ++0000bfc4 <[^>]*> nop ++0000bfc8 <[^>]*> nop ++0000bfcc <[^>]*> nop ++0000bfd0 <[^>]*> nop ++0000bfd4 <[^>]*> nop ++0000bfd8 <[^>]*> nop ++0000bfdc <[^>]*> nop ++0000bfe0 <[^>]*> nop ++0000bfe4 <[^>]*> nop ++0000bfe8 <[^>]*> nop ++0000bfec <[^>]*> nop ++0000bff0 <[^>]*> nop ++0000bff4 <[^>]*> nop ++0000bff8 <[^>]*> nop ++0000bffc <[^>]*> nop ++0000c000 <[^>]*> nop ++0000c004 <[^>]*> nop ++0000c008 <[^>]*> nop ++0000c00c <[^>]*> nop ++0000c010 <[^>]*> nop ++0000c014 <[^>]*> nop ++0000c018 <[^>]*> nop ++0000c01c <[^>]*> nop ++0000c020 <[^>]*> nop ++0000c024 <[^>]*> nop ++0000c028 <[^>]*> nop ++0000c02c <[^>]*> nop ++0000c030 <[^>]*> nop ++0000c034 <[^>]*> nop ++0000c038 <[^>]*> nop ++0000c03c <[^>]*> nop ++0000c040 <[^>]*> nop ++0000c044 <[^>]*> nop ++0000c048 <[^>]*> nop ++0000c04c <[^>]*> nop ++0000c050 <[^>]*> nop ++0000c054 <[^>]*> nop ++0000c058 <[^>]*> nop ++0000c05c <[^>]*> nop ++0000c060 <[^>]*> nop ++0000c064 <[^>]*> nop ++0000c068 <[^>]*> nop ++0000c06c <[^>]*> nop ++0000c070 <[^>]*> nop ++0000c074 <[^>]*> nop ++0000c078 <[^>]*> nop ++0000c07c <[^>]*> nop ++0000c080 <[^>]*> nop ++0000c084 <[^>]*> nop ++0000c088 <[^>]*> nop ++0000c08c <[^>]*> nop ++0000c090 <[^>]*> nop ++0000c094 <[^>]*> nop ++0000c098 <[^>]*> nop ++0000c09c <[^>]*> nop ++0000c0a0 <[^>]*> nop ++0000c0a4 <[^>]*> nop ++0000c0a8 <[^>]*> nop ++0000c0ac <[^>]*> nop ++0000c0b0 <[^>]*> nop ++0000c0b4 <[^>]*> nop ++0000c0b8 <[^>]*> nop ++0000c0bc <[^>]*> nop ++0000c0c0 <[^>]*> nop ++0000c0c4 <[^>]*> nop ++0000c0c8 <[^>]*> nop ++0000c0cc <[^>]*> nop ++0000c0d0 <[^>]*> nop ++0000c0d4 <[^>]*> nop ++0000c0d8 <[^>]*> nop ++0000c0dc <[^>]*> nop ++0000c0e0 <[^>]*> nop ++0000c0e4 <[^>]*> nop ++0000c0e8 <[^>]*> nop ++0000c0ec <[^>]*> nop ++0000c0f0 <[^>]*> nop ++0000c0f4 <[^>]*> nop ++0000c0f8 <[^>]*> nop ++0000c0fc <[^>]*> nop ++0000c100 <[^>]*> nop ++0000c104 <[^>]*> nop ++0000c108 <[^>]*> nop ++0000c10c <[^>]*> nop ++0000c110 <[^>]*> nop ++0000c114 <[^>]*> nop ++0000c118 <[^>]*> nop ++0000c11c <[^>]*> nop ++0000c120 <[^>]*> nop ++0000c124 <[^>]*> nop ++0000c128 <[^>]*> nop ++0000c12c <[^>]*> nop ++0000c130 <[^>]*> nop ++0000c134 <[^>]*> nop ++0000c138 <[^>]*> nop ++0000c13c <[^>]*> nop ++0000c140 <[^>]*> nop ++0000c144 <[^>]*> nop ++0000c148 <[^>]*> nop ++0000c14c <[^>]*> nop ++0000c150 <[^>]*> nop ++0000c154 <[^>]*> nop ++0000c158 <[^>]*> nop ++0000c15c <[^>]*> nop ++0000c160 <[^>]*> nop ++0000c164 <[^>]*> nop ++0000c168 <[^>]*> nop ++0000c16c <[^>]*> nop ++0000c170 <[^>]*> nop ++0000c174 <[^>]*> nop ++0000c178 <[^>]*> nop ++0000c17c <[^>]*> nop ++0000c180 <[^>]*> nop ++0000c184 <[^>]*> nop ++0000c188 <[^>]*> nop ++0000c18c <[^>]*> nop ++0000c190 <[^>]*> nop ++0000c194 <[^>]*> nop ++0000c198 <[^>]*> nop ++0000c19c <[^>]*> nop ++0000c1a0 <[^>]*> nop ++0000c1a4 <[^>]*> nop ++0000c1a8 <[^>]*> nop ++0000c1ac <[^>]*> nop ++0000c1b0 <[^>]*> nop ++0000c1b4 <[^>]*> nop ++0000c1b8 <[^>]*> nop ++0000c1bc <[^>]*> nop ++0000c1c0 <[^>]*> nop ++0000c1c4 <[^>]*> nop ++0000c1c8 <[^>]*> nop ++0000c1cc <[^>]*> nop ++0000c1d0 <[^>]*> nop ++0000c1d4 <[^>]*> nop ++0000c1d8 <[^>]*> nop ++0000c1dc <[^>]*> nop ++0000c1e0 <[^>]*> nop ++0000c1e4 <[^>]*> nop ++0000c1e8 <[^>]*> nop ++0000c1ec <[^>]*> nop ++0000c1f0 <[^>]*> nop ++0000c1f4 <[^>]*> nop ++0000c1f8 <[^>]*> nop ++0000c1fc <[^>]*> nop ++0000c200 <[^>]*> nop ++0000c204 <[^>]*> nop ++0000c208 <[^>]*> nop ++0000c20c <[^>]*> nop ++0000c210 <[^>]*> nop ++0000c214 <[^>]*> nop ++0000c218 <[^>]*> nop ++0000c21c <[^>]*> nop ++0000c220 <[^>]*> nop ++0000c224 <[^>]*> nop ++0000c228 <[^>]*> nop ++0000c22c <[^>]*> nop ++0000c230 <[^>]*> nop ++0000c234 <[^>]*> nop ++0000c238 <[^>]*> nop ++0000c23c <[^>]*> nop ++0000c240 <[^>]*> nop ++0000c244 <[^>]*> nop ++0000c248 <[^>]*> nop ++0000c24c <[^>]*> nop ++0000c250 <[^>]*> nop ++0000c254 <[^>]*> nop ++0000c258 <[^>]*> nop ++0000c25c <[^>]*> nop ++0000c260 <[^>]*> nop ++0000c264 <[^>]*> nop ++0000c268 <[^>]*> nop ++0000c26c <[^>]*> nop ++0000c270 <[^>]*> nop ++0000c274 <[^>]*> nop ++0000c278 <[^>]*> nop ++0000c27c <[^>]*> nop ++0000c280 <[^>]*> nop ++0000c284 <[^>]*> nop ++0000c288 <[^>]*> nop ++0000c28c <[^>]*> nop ++0000c290 <[^>]*> nop ++0000c294 <[^>]*> nop ++0000c298 <[^>]*> nop ++0000c29c <[^>]*> nop ++0000c2a0 <[^>]*> nop ++0000c2a4 <[^>]*> nop ++0000c2a8 <[^>]*> nop ++0000c2ac <[^>]*> nop ++0000c2b0 <[^>]*> nop ++0000c2b4 <[^>]*> nop ++0000c2b8 <[^>]*> nop ++0000c2bc <[^>]*> nop ++0000c2c0 <[^>]*> nop ++0000c2c4 <[^>]*> nop ++0000c2c8 <[^>]*> nop ++0000c2cc <[^>]*> nop ++0000c2d0 <[^>]*> nop ++0000c2d4 <[^>]*> nop ++0000c2d8 <[^>]*> nop ++0000c2dc <[^>]*> nop ++0000c2e0 <[^>]*> nop ++0000c2e4 <[^>]*> nop ++0000c2e8 <[^>]*> nop ++0000c2ec <[^>]*> nop ++0000c2f0 <[^>]*> nop ++0000c2f4 <[^>]*> nop ++0000c2f8 <[^>]*> nop ++0000c2fc <[^>]*> nop ++0000c300 <[^>]*> nop ++0000c304 <[^>]*> nop ++0000c308 <[^>]*> nop ++0000c30c <[^>]*> nop ++0000c310 <[^>]*> nop ++0000c314 <[^>]*> nop ++0000c318 <[^>]*> nop ++0000c31c <[^>]*> nop ++0000c320 <[^>]*> nop ++0000c324 <[^>]*> nop ++0000c328 <[^>]*> nop ++0000c32c <[^>]*> nop ++0000c330 <[^>]*> nop ++0000c334 <[^>]*> nop ++0000c338 <[^>]*> nop ++0000c33c <[^>]*> nop ++0000c340 <[^>]*> nop ++0000c344 <[^>]*> nop ++0000c348 <[^>]*> nop ++0000c34c <[^>]*> nop ++0000c350 <[^>]*> nop ++0000c354 <[^>]*> nop ++0000c358 <[^>]*> nop ++0000c35c <[^>]*> nop ++0000c360 <[^>]*> nop ++0000c364 <[^>]*> nop ++0000c368 <[^>]*> nop ++0000c36c <[^>]*> nop ++0000c370 <[^>]*> nop ++0000c374 <[^>]*> nop ++0000c378 <[^>]*> nop ++0000c37c <[^>]*> nop ++0000c380 <[^>]*> nop ++0000c384 <[^>]*> nop ++0000c388 <[^>]*> nop ++0000c38c <[^>]*> nop ++0000c390 <[^>]*> nop ++0000c394 <[^>]*> nop ++0000c398 <[^>]*> nop ++0000c39c <[^>]*> nop ++0000c3a0 <[^>]*> nop ++0000c3a4 <[^>]*> nop ++0000c3a8 <[^>]*> nop ++0000c3ac <[^>]*> nop ++0000c3b0 <[^>]*> nop ++0000c3b4 <[^>]*> nop ++0000c3b8 <[^>]*> nop ++0000c3bc <[^>]*> nop ++0000c3c0 <[^>]*> nop ++0000c3c4 <[^>]*> nop ++0000c3c8 <[^>]*> nop ++0000c3cc <[^>]*> nop ++0000c3d0 <[^>]*> nop ++0000c3d4 <[^>]*> nop ++0000c3d8 <[^>]*> nop ++0000c3dc <[^>]*> nop ++0000c3e0 <[^>]*> nop ++0000c3e4 <[^>]*> nop ++0000c3e8 <[^>]*> nop ++0000c3ec <[^>]*> nop ++0000c3f0 <[^>]*> nop ++0000c3f4 <[^>]*> nop ++0000c3f8 <[^>]*> nop ++0000c3fc <[^>]*> nop ++0000c400 <[^>]*> nop ++0000c404 <[^>]*> nop ++0000c408 <[^>]*> nop ++0000c40c <[^>]*> nop ++0000c410 <[^>]*> nop ++0000c414 <[^>]*> nop ++0000c418 <[^>]*> nop ++0000c41c <[^>]*> nop ++0000c420 <[^>]*> nop ++0000c424 <[^>]*> nop ++0000c428 <[^>]*> nop ++0000c42c <[^>]*> nop ++0000c430 <[^>]*> nop ++0000c434 <[^>]*> nop ++0000c438 <[^>]*> nop ++0000c43c <[^>]*> nop ++0000c440 <[^>]*> nop ++0000c444 <[^>]*> nop ++0000c448 <[^>]*> nop ++0000c44c <[^>]*> nop ++0000c450 <[^>]*> nop ++0000c454 <[^>]*> nop ++0000c458 <[^>]*> nop ++0000c45c <[^>]*> nop ++0000c460 <[^>]*> nop ++0000c464 <[^>]*> nop ++0000c468 <[^>]*> nop ++0000c46c <[^>]*> nop ++0000c470 <[^>]*> nop ++0000c474 <[^>]*> nop ++0000c478 <[^>]*> nop ++0000c47c <[^>]*> nop ++0000c480 <[^>]*> nop ++0000c484 <[^>]*> nop ++0000c488 <[^>]*> nop ++0000c48c <[^>]*> nop ++0000c490 <[^>]*> nop ++0000c494 <[^>]*> nop ++0000c498 <[^>]*> nop ++0000c49c <[^>]*> nop ++0000c4a0 <[^>]*> nop ++0000c4a4 <[^>]*> nop ++0000c4a8 <[^>]*> nop ++0000c4ac <[^>]*> nop ++0000c4b0 <[^>]*> nop ++0000c4b4 <[^>]*> nop ++0000c4b8 <[^>]*> nop ++0000c4bc <[^>]*> nop ++0000c4c0 <[^>]*> nop ++0000c4c4 <[^>]*> nop ++0000c4c8 <[^>]*> nop ++0000c4cc <[^>]*> nop ++0000c4d0 <[^>]*> nop ++0000c4d4 <[^>]*> nop ++0000c4d8 <[^>]*> nop ++0000c4dc <[^>]*> nop ++0000c4e0 <[^>]*> nop ++0000c4e4 <[^>]*> nop ++0000c4e8 <[^>]*> nop ++0000c4ec <[^>]*> nop ++0000c4f0 <[^>]*> nop ++0000c4f4 <[^>]*> nop ++0000c4f8 <[^>]*> nop ++0000c4fc <[^>]*> nop ++0000c500 <[^>]*> nop ++0000c504 <[^>]*> nop ++0000c508 <[^>]*> nop ++0000c50c <[^>]*> nop ++0000c510 <[^>]*> nop ++0000c514 <[^>]*> nop ++0000c518 <[^>]*> nop ++0000c51c <[^>]*> nop ++0000c520 <[^>]*> nop ++0000c524 <[^>]*> nop ++0000c528 <[^>]*> nop ++0000c52c <[^>]*> nop ++0000c530 <[^>]*> nop ++0000c534 <[^>]*> nop ++0000c538 <[^>]*> nop ++0000c53c <[^>]*> nop ++0000c540 <[^>]*> nop ++0000c544 <[^>]*> nop ++0000c548 <[^>]*> nop ++0000c54c <[^>]*> nop ++0000c550 <[^>]*> nop ++0000c554 <[^>]*> nop ++0000c558 <[^>]*> nop ++0000c55c <[^>]*> nop ++0000c560 <[^>]*> nop ++0000c564 <[^>]*> nop ++0000c568 <[^>]*> nop ++0000c56c <[^>]*> nop ++0000c570 <[^>]*> nop ++0000c574 <[^>]*> nop ++0000c578 <[^>]*> nop ++0000c57c <[^>]*> nop ++0000c580 <[^>]*> nop ++0000c584 <[^>]*> nop ++0000c588 <[^>]*> nop ++0000c58c <[^>]*> nop ++0000c590 <[^>]*> nop ++0000c594 <[^>]*> nop ++0000c598 <[^>]*> nop ++0000c59c <[^>]*> nop ++0000c5a0 <[^>]*> nop ++0000c5a4 <[^>]*> nop ++0000c5a8 <[^>]*> nop ++0000c5ac <[^>]*> nop ++0000c5b0 <[^>]*> nop ++0000c5b4 <[^>]*> nop ++0000c5b8 <[^>]*> nop ++0000c5bc <[^>]*> nop ++0000c5c0 <[^>]*> nop ++0000c5c4 <[^>]*> nop ++0000c5c8 <[^>]*> nop ++0000c5cc <[^>]*> nop ++0000c5d0 <[^>]*> nop ++0000c5d4 <[^>]*> nop ++0000c5d8 <[^>]*> nop ++0000c5dc <[^>]*> nop ++0000c5e0 <[^>]*> nop ++0000c5e4 <[^>]*> nop ++0000c5e8 <[^>]*> nop ++0000c5ec <[^>]*> nop ++0000c5f0 <[^>]*> nop ++0000c5f4 <[^>]*> nop ++0000c5f8 <[^>]*> nop ++0000c5fc <[^>]*> nop ++0000c600 <[^>]*> nop ++0000c604 <[^>]*> nop ++0000c608 <[^>]*> nop ++0000c60c <[^>]*> nop ++0000c610 <[^>]*> nop ++0000c614 <[^>]*> nop ++0000c618 <[^>]*> nop ++0000c61c <[^>]*> nop ++0000c620 <[^>]*> nop ++0000c624 <[^>]*> nop ++0000c628 <[^>]*> nop ++0000c62c <[^>]*> nop ++0000c630 <[^>]*> nop ++0000c634 <[^>]*> nop ++0000c638 <[^>]*> nop ++0000c63c <[^>]*> nop ++0000c640 <[^>]*> nop ++0000c644 <[^>]*> nop ++0000c648 <[^>]*> nop ++0000c64c <[^>]*> nop ++0000c650 <[^>]*> nop ++0000c654 <[^>]*> nop ++0000c658 <[^>]*> nop ++0000c65c <[^>]*> nop ++0000c660 <[^>]*> nop ++0000c664 <[^>]*> nop ++0000c668 <[^>]*> nop ++0000c66c <[^>]*> nop ++0000c670 <[^>]*> nop ++0000c674 <[^>]*> nop ++0000c678 <[^>]*> nop ++0000c67c <[^>]*> nop ++0000c680 <[^>]*> nop ++0000c684 <[^>]*> nop ++0000c688 <[^>]*> nop ++0000c68c <[^>]*> nop ++0000c690 <[^>]*> nop ++0000c694 <[^>]*> nop ++0000c698 <[^>]*> nop ++0000c69c <[^>]*> nop ++0000c6a0 <[^>]*> nop ++0000c6a4 <[^>]*> nop ++0000c6a8 <[^>]*> nop ++0000c6ac <[^>]*> nop ++0000c6b0 <[^>]*> nop ++0000c6b4 <[^>]*> nop ++0000c6b8 <[^>]*> nop ++0000c6bc <[^>]*> nop ++0000c6c0 <[^>]*> nop ++0000c6c4 <[^>]*> nop ++0000c6c8 <[^>]*> nop ++0000c6cc <[^>]*> nop ++0000c6d0 <[^>]*> nop ++0000c6d4 <[^>]*> nop ++0000c6d8 <[^>]*> nop ++0000c6dc <[^>]*> nop ++0000c6e0 <[^>]*> nop ++0000c6e4 <[^>]*> nop ++0000c6e8 <[^>]*> nop ++0000c6ec <[^>]*> nop ++0000c6f0 <[^>]*> nop ++0000c6f4 <[^>]*> nop ++0000c6f8 <[^>]*> nop ++0000c6fc <[^>]*> nop ++0000c700 <[^>]*> nop ++0000c704 <[^>]*> nop ++0000c708 <[^>]*> nop ++0000c70c <[^>]*> nop ++0000c710 <[^>]*> nop ++0000c714 <[^>]*> nop ++0000c718 <[^>]*> nop ++0000c71c <[^>]*> nop ++0000c720 <[^>]*> nop ++0000c724 <[^>]*> nop ++0000c728 <[^>]*> nop ++0000c72c <[^>]*> nop ++0000c730 <[^>]*> nop ++0000c734 <[^>]*> nop ++0000c738 <[^>]*> nop ++0000c73c <[^>]*> nop ++0000c740 <[^>]*> nop ++0000c744 <[^>]*> nop ++0000c748 <[^>]*> nop ++0000c74c <[^>]*> nop ++0000c750 <[^>]*> nop ++0000c754 <[^>]*> nop ++0000c758 <[^>]*> nop ++0000c75c <[^>]*> nop ++0000c760 <[^>]*> nop ++0000c764 <[^>]*> nop ++0000c768 <[^>]*> nop ++0000c76c <[^>]*> nop ++0000c770 <[^>]*> nop ++0000c774 <[^>]*> nop ++0000c778 <[^>]*> nop ++0000c77c <[^>]*> nop ++0000c780 <[^>]*> nop ++0000c784 <[^>]*> nop ++0000c788 <[^>]*> nop ++0000c78c <[^>]*> nop ++0000c790 <[^>]*> nop ++0000c794 <[^>]*> nop ++0000c798 <[^>]*> nop ++0000c79c <[^>]*> nop ++0000c7a0 <[^>]*> nop ++0000c7a4 <[^>]*> nop ++0000c7a8 <[^>]*> nop ++0000c7ac <[^>]*> nop ++0000c7b0 <[^>]*> nop ++0000c7b4 <[^>]*> nop ++0000c7b8 <[^>]*> nop ++0000c7bc <[^>]*> nop ++0000c7c0 <[^>]*> nop ++0000c7c4 <[^>]*> nop ++0000c7c8 <[^>]*> nop ++0000c7cc <[^>]*> nop ++0000c7d0 <[^>]*> nop ++0000c7d4 <[^>]*> nop ++0000c7d8 <[^>]*> nop ++0000c7dc <[^>]*> nop ++0000c7e0 <[^>]*> nop ++0000c7e4 <[^>]*> nop ++0000c7e8 <[^>]*> nop ++0000c7ec <[^>]*> nop ++0000c7f0 <[^>]*> nop ++0000c7f4 <[^>]*> nop ++0000c7f8 <[^>]*> nop ++0000c7fc <[^>]*> nop ++0000c800 <[^>]*> nop ++0000c804 <[^>]*> nop ++0000c808 <[^>]*> nop ++0000c80c <[^>]*> nop ++0000c810 <[^>]*> nop ++0000c814 <[^>]*> nop ++0000c818 <[^>]*> nop ++0000c81c <[^>]*> nop ++0000c820 <[^>]*> nop ++0000c824 <[^>]*> nop ++0000c828 <[^>]*> nop ++0000c82c <[^>]*> nop ++0000c830 <[^>]*> nop ++0000c834 <[^>]*> nop ++0000c838 <[^>]*> nop ++0000c83c <[^>]*> nop ++0000c840 <[^>]*> nop ++0000c844 <[^>]*> nop ++0000c848 <[^>]*> nop ++0000c84c <[^>]*> nop ++0000c850 <[^>]*> nop ++0000c854 <[^>]*> nop ++0000c858 <[^>]*> nop ++0000c85c <[^>]*> nop ++0000c860 <[^>]*> nop ++0000c864 <[^>]*> nop ++0000c868 <[^>]*> nop ++0000c86c <[^>]*> nop ++0000c870 <[^>]*> nop ++0000c874 <[^>]*> nop ++0000c878 <[^>]*> nop ++0000c87c <[^>]*> nop ++0000c880 <[^>]*> nop ++0000c884 <[^>]*> nop ++0000c888 <[^>]*> nop ++0000c88c <[^>]*> nop ++0000c890 <[^>]*> nop ++0000c894 <[^>]*> nop ++0000c898 <[^>]*> nop ++0000c89c <[^>]*> nop ++0000c8a0 <[^>]*> nop ++0000c8a4 <[^>]*> nop ++0000c8a8 <[^>]*> nop ++0000c8ac <[^>]*> nop ++0000c8b0 <[^>]*> nop ++0000c8b4 <[^>]*> nop ++0000c8b8 <[^>]*> nop ++0000c8bc <[^>]*> nop ++0000c8c0 <[^>]*> nop ++0000c8c4 <[^>]*> nop ++0000c8c8 <[^>]*> nop ++0000c8cc <[^>]*> nop ++0000c8d0 <[^>]*> nop ++0000c8d4 <[^>]*> nop ++0000c8d8 <[^>]*> nop ++0000c8dc <[^>]*> nop ++0000c8e0 <[^>]*> nop ++0000c8e4 <[^>]*> nop ++0000c8e8 <[^>]*> nop ++0000c8ec <[^>]*> nop ++0000c8f0 <[^>]*> nop ++0000c8f4 <[^>]*> nop ++0000c8f8 <[^>]*> nop ++0000c8fc <[^>]*> nop ++0000c900 <[^>]*> nop ++0000c904 <[^>]*> nop ++0000c908 <[^>]*> nop ++0000c90c <[^>]*> nop ++0000c910 <[^>]*> nop ++0000c914 <[^>]*> nop ++0000c918 <[^>]*> nop ++0000c91c <[^>]*> nop ++0000c920 <[^>]*> nop ++0000c924 <[^>]*> nop ++0000c928 <[^>]*> nop ++0000c92c <[^>]*> nop ++0000c930 <[^>]*> nop ++0000c934 <[^>]*> nop ++0000c938 <[^>]*> nop ++0000c93c <[^>]*> nop ++0000c940 <[^>]*> nop ++0000c944 <[^>]*> nop ++0000c948 <[^>]*> nop ++0000c94c <[^>]*> nop ++0000c950 <[^>]*> nop ++0000c954 <[^>]*> nop ++0000c958 <[^>]*> nop ++0000c95c <[^>]*> nop ++0000c960 <[^>]*> nop ++0000c964 <[^>]*> nop ++0000c968 <[^>]*> nop ++0000c96c <[^>]*> nop ++0000c970 <[^>]*> nop ++0000c974 <[^>]*> nop ++0000c978 <[^>]*> nop ++0000c97c <[^>]*> nop ++0000c980 <[^>]*> nop ++0000c984 <[^>]*> nop ++0000c988 <[^>]*> nop ++0000c98c <[^>]*> nop ++0000c990 <[^>]*> nop ++0000c994 <[^>]*> nop ++0000c998 <[^>]*> nop ++0000c99c <[^>]*> nop ++0000c9a0 <[^>]*> nop ++0000c9a4 <[^>]*> nop ++0000c9a8 <[^>]*> nop ++0000c9ac <[^>]*> nop ++0000c9b0 <[^>]*> nop ++0000c9b4 <[^>]*> nop ++0000c9b8 <[^>]*> nop ++0000c9bc <[^>]*> nop ++0000c9c0 <[^>]*> nop ++0000c9c4 <[^>]*> nop ++0000c9c8 <[^>]*> nop ++0000c9cc <[^>]*> nop ++0000c9d0 <[^>]*> nop ++0000c9d4 <[^>]*> nop ++0000c9d8 <[^>]*> nop ++0000c9dc <[^>]*> nop ++0000c9e0 <[^>]*> nop ++0000c9e4 <[^>]*> nop ++0000c9e8 <[^>]*> nop ++0000c9ec <[^>]*> nop ++0000c9f0 <[^>]*> nop ++0000c9f4 <[^>]*> nop ++0000c9f8 <[^>]*> nop ++0000c9fc <[^>]*> nop ++0000ca00 <[^>]*> nop ++0000ca04 <[^>]*> nop ++0000ca08 <[^>]*> nop ++0000ca0c <[^>]*> nop ++0000ca10 <[^>]*> nop ++0000ca14 <[^>]*> nop ++0000ca18 <[^>]*> nop ++0000ca1c <[^>]*> nop ++0000ca20 <[^>]*> nop ++0000ca24 <[^>]*> nop ++0000ca28 <[^>]*> nop ++0000ca2c <[^>]*> nop ++0000ca30 <[^>]*> nop ++0000ca34 <[^>]*> nop ++0000ca38 <[^>]*> nop ++0000ca3c <[^>]*> nop ++0000ca40 <[^>]*> nop ++0000ca44 <[^>]*> nop ++0000ca48 <[^>]*> nop ++0000ca4c <[^>]*> nop ++0000ca50 <[^>]*> nop ++0000ca54 <[^>]*> nop ++0000ca58 <[^>]*> nop ++0000ca5c <[^>]*> nop ++0000ca60 <[^>]*> nop ++0000ca64 <[^>]*> nop ++0000ca68 <[^>]*> nop ++0000ca6c <[^>]*> nop ++0000ca70 <[^>]*> nop ++0000ca74 <[^>]*> nop ++0000ca78 <[^>]*> nop ++0000ca7c <[^>]*> nop ++0000ca80 <[^>]*> nop ++0000ca84 <[^>]*> nop ++0000ca88 <[^>]*> nop ++0000ca8c <[^>]*> nop ++0000ca90 <[^>]*> nop ++0000ca94 <[^>]*> nop ++0000ca98 <[^>]*> nop ++0000ca9c <[^>]*> nop ++0000caa0 <[^>]*> nop ++0000caa4 <[^>]*> nop ++0000caa8 <[^>]*> nop ++0000caac <[^>]*> nop ++0000cab0 <[^>]*> nop ++0000cab4 <[^>]*> nop ++0000cab8 <[^>]*> nop ++0000cabc <[^>]*> nop ++0000cac0 <[^>]*> nop ++0000cac4 <[^>]*> nop ++0000cac8 <[^>]*> nop ++0000cacc <[^>]*> nop ++0000cad0 <[^>]*> nop ++0000cad4 <[^>]*> nop ++0000cad8 <[^>]*> nop ++0000cadc <[^>]*> nop ++0000cae0 <[^>]*> nop ++0000cae4 <[^>]*> nop ++0000cae8 <[^>]*> nop ++0000caec <[^>]*> nop ++0000caf0 <[^>]*> nop ++0000caf4 <[^>]*> nop ++0000caf8 <[^>]*> nop ++0000cafc <[^>]*> nop ++0000cb00 <[^>]*> nop ++0000cb04 <[^>]*> nop ++0000cb08 <[^>]*> nop ++0000cb0c <[^>]*> nop ++0000cb10 <[^>]*> nop ++0000cb14 <[^>]*> nop ++0000cb18 <[^>]*> nop ++0000cb1c <[^>]*> nop ++0000cb20 <[^>]*> nop ++0000cb24 <[^>]*> nop ++0000cb28 <[^>]*> nop ++0000cb2c <[^>]*> nop ++0000cb30 <[^>]*> nop ++0000cb34 <[^>]*> nop ++0000cb38 <[^>]*> nop ++0000cb3c <[^>]*> nop ++0000cb40 <[^>]*> nop ++0000cb44 <[^>]*> nop ++0000cb48 <[^>]*> nop ++0000cb4c <[^>]*> nop ++0000cb50 <[^>]*> nop ++0000cb54 <[^>]*> nop ++0000cb58 <[^>]*> nop ++0000cb5c <[^>]*> nop ++0000cb60 <[^>]*> nop ++0000cb64 <[^>]*> nop ++0000cb68 <[^>]*> nop ++0000cb6c <[^>]*> nop ++0000cb70 <[^>]*> nop ++0000cb74 <[^>]*> nop ++0000cb78 <[^>]*> nop ++0000cb7c <[^>]*> nop ++0000cb80 <[^>]*> nop ++0000cb84 <[^>]*> nop ++0000cb88 <[^>]*> nop ++0000cb8c <[^>]*> nop ++0000cb90 <[^>]*> nop ++0000cb94 <[^>]*> nop ++0000cb98 <[^>]*> nop ++0000cb9c <[^>]*> nop ++0000cba0 <[^>]*> nop ++0000cba4 <[^>]*> nop ++0000cba8 <[^>]*> nop ++0000cbac <[^>]*> nop ++0000cbb0 <[^>]*> nop ++0000cbb4 <[^>]*> nop ++0000cbb8 <[^>]*> nop ++0000cbbc <[^>]*> nop ++0000cbc0 <[^>]*> nop ++0000cbc4 <[^>]*> nop ++0000cbc8 <[^>]*> nop ++0000cbcc <[^>]*> nop ++0000cbd0 <[^>]*> nop ++0000cbd4 <[^>]*> nop ++0000cbd8 <[^>]*> nop ++0000cbdc <[^>]*> nop ++0000cbe0 <[^>]*> nop ++0000cbe4 <[^>]*> nop ++0000cbe8 <[^>]*> nop ++0000cbec <[^>]*> nop ++0000cbf0 <[^>]*> nop ++0000cbf4 <[^>]*> nop ++0000cbf8 <[^>]*> nop ++0000cbfc <[^>]*> nop ++0000cc00 <[^>]*> nop ++0000cc04 <[^>]*> nop ++0000cc08 <[^>]*> nop ++0000cc0c <[^>]*> nop ++0000cc10 <[^>]*> nop ++0000cc14 <[^>]*> nop ++0000cc18 <[^>]*> nop ++0000cc1c <[^>]*> nop ++0000cc20 <[^>]*> nop ++0000cc24 <[^>]*> nop ++0000cc28 <[^>]*> nop ++0000cc2c <[^>]*> nop ++0000cc30 <[^>]*> nop ++0000cc34 <[^>]*> nop ++0000cc38 <[^>]*> nop ++0000cc3c <[^>]*> nop ++0000cc40 <[^>]*> nop ++0000cc44 <[^>]*> nop ++0000cc48 <[^>]*> nop ++0000cc4c <[^>]*> nop ++0000cc50 <[^>]*> nop ++0000cc54 <[^>]*> nop ++0000cc58 <[^>]*> nop ++0000cc5c <[^>]*> nop ++0000cc60 <[^>]*> nop ++0000cc64 <[^>]*> nop ++0000cc68 <[^>]*> nop ++0000cc6c <[^>]*> nop ++0000cc70 <[^>]*> nop ++0000cc74 <[^>]*> nop ++0000cc78 <[^>]*> nop ++0000cc7c <[^>]*> nop ++0000cc80 <[^>]*> nop ++0000cc84 <[^>]*> nop ++0000cc88 <[^>]*> nop ++0000cc8c <[^>]*> nop ++0000cc90 <[^>]*> nop ++0000cc94 <[^>]*> nop ++0000cc98 <[^>]*> nop ++0000cc9c <[^>]*> nop ++0000cca0 <[^>]*> nop ++0000cca4 <[^>]*> nop ++0000cca8 <[^>]*> nop ++0000ccac <[^>]*> nop ++0000ccb0 <[^>]*> nop ++0000ccb4 <[^>]*> nop ++0000ccb8 <[^>]*> nop ++0000ccbc <[^>]*> nop ++0000ccc0 <[^>]*> nop ++0000ccc4 <[^>]*> nop ++0000ccc8 <[^>]*> nop ++0000cccc <[^>]*> nop ++0000ccd0 <[^>]*> nop ++0000ccd4 <[^>]*> nop ++0000ccd8 <[^>]*> nop ++0000ccdc <[^>]*> nop ++0000cce0 <[^>]*> nop ++0000cce4 <[^>]*> nop ++0000cce8 <[^>]*> nop ++0000ccec <[^>]*> nop ++0000ccf0 <[^>]*> nop ++0000ccf4 <[^>]*> nop ++0000ccf8 <[^>]*> nop ++0000ccfc <[^>]*> nop ++0000cd00 <[^>]*> nop ++0000cd04 <[^>]*> nop ++0000cd08 <[^>]*> nop ++0000cd0c <[^>]*> nop ++0000cd10 <[^>]*> nop ++0000cd14 <[^>]*> nop ++0000cd18 <[^>]*> nop ++0000cd1c <[^>]*> nop ++0000cd20 <[^>]*> nop ++0000cd24 <[^>]*> nop ++0000cd28 <[^>]*> nop ++0000cd2c <[^>]*> nop ++0000cd30 <[^>]*> nop ++0000cd34 <[^>]*> nop ++0000cd38 <[^>]*> nop ++0000cd3c <[^>]*> nop ++0000cd40 <[^>]*> nop ++0000cd44 <[^>]*> nop ++0000cd48 <[^>]*> nop ++0000cd4c <[^>]*> nop ++0000cd50 <[^>]*> nop ++0000cd54 <[^>]*> nop ++0000cd58 <[^>]*> nop ++0000cd5c <[^>]*> nop ++0000cd60 <[^>]*> nop ++0000cd64 <[^>]*> nop ++0000cd68 <[^>]*> nop ++0000cd6c <[^>]*> nop ++0000cd70 <[^>]*> nop ++0000cd74 <[^>]*> nop ++0000cd78 <[^>]*> nop ++0000cd7c <[^>]*> nop ++0000cd80 <[^>]*> nop ++0000cd84 <[^>]*> nop ++0000cd88 <[^>]*> nop ++0000cd8c <[^>]*> nop ++0000cd90 <[^>]*> nop ++0000cd94 <[^>]*> nop ++0000cd98 <[^>]*> nop ++0000cd9c <[^>]*> nop ++0000cda0 <[^>]*> nop ++0000cda4 <[^>]*> nop ++0000cda8 <[^>]*> nop ++0000cdac <[^>]*> nop ++0000cdb0 <[^>]*> nop ++0000cdb4 <[^>]*> nop ++0000cdb8 <[^>]*> nop ++0000cdbc <[^>]*> nop ++0000cdc0 <[^>]*> nop ++0000cdc4 <[^>]*> nop ++0000cdc8 <[^>]*> nop ++0000cdcc <[^>]*> nop ++0000cdd0 <[^>]*> nop ++0000cdd4 <[^>]*> nop ++0000cdd8 <[^>]*> nop ++0000cddc <[^>]*> nop ++0000cde0 <[^>]*> nop ++0000cde4 <[^>]*> nop ++0000cde8 <[^>]*> nop ++0000cdec <[^>]*> nop ++0000cdf0 <[^>]*> nop ++0000cdf4 <[^>]*> nop ++0000cdf8 <[^>]*> nop ++0000cdfc <[^>]*> nop ++0000ce00 <[^>]*> nop ++0000ce04 <[^>]*> nop ++0000ce08 <[^>]*> nop ++0000ce0c <[^>]*> nop ++0000ce10 <[^>]*> nop ++0000ce14 <[^>]*> nop ++0000ce18 <[^>]*> nop ++0000ce1c <[^>]*> nop ++0000ce20 <[^>]*> nop ++0000ce24 <[^>]*> nop ++0000ce28 <[^>]*> nop ++0000ce2c <[^>]*> nop ++0000ce30 <[^>]*> nop ++0000ce34 <[^>]*> nop ++0000ce38 <[^>]*> nop ++0000ce3c <[^>]*> nop ++0000ce40 <[^>]*> nop ++0000ce44 <[^>]*> nop ++0000ce48 <[^>]*> nop ++0000ce4c <[^>]*> nop ++0000ce50 <[^>]*> nop ++0000ce54 <[^>]*> nop ++0000ce58 <[^>]*> nop ++0000ce5c <[^>]*> nop ++0000ce60 <[^>]*> nop ++0000ce64 <[^>]*> nop ++0000ce68 <[^>]*> nop ++0000ce6c <[^>]*> nop ++0000ce70 <[^>]*> nop ++0000ce74 <[^>]*> nop ++0000ce78 <[^>]*> nop ++0000ce7c <[^>]*> nop ++0000ce80 <[^>]*> nop ++0000ce84 <[^>]*> nop ++0000ce88 <[^>]*> nop ++0000ce8c <[^>]*> nop ++0000ce90 <[^>]*> nop ++0000ce94 <[^>]*> nop ++0000ce98 <[^>]*> nop ++0000ce9c <[^>]*> nop ++0000cea0 <[^>]*> nop ++0000cea4 <[^>]*> nop ++0000cea8 <[^>]*> nop ++0000ceac <[^>]*> nop ++0000ceb0 <[^>]*> nop ++0000ceb4 <[^>]*> nop ++0000ceb8 <[^>]*> nop ++0000cebc <[^>]*> nop ++0000cec0 <[^>]*> nop ++0000cec4 <[^>]*> nop ++0000cec8 <[^>]*> nop ++0000cecc <[^>]*> nop ++0000ced0 <[^>]*> nop ++0000ced4 <[^>]*> nop ++0000ced8 <[^>]*> nop ++0000cedc <[^>]*> nop ++0000cee0 <[^>]*> nop ++0000cee4 <[^>]*> nop ++0000cee8 <[^>]*> nop ++0000ceec <[^>]*> nop ++0000cef0 <[^>]*> nop ++0000cef4 <[^>]*> nop ++0000cef8 <[^>]*> nop ++0000cefc <[^>]*> nop ++0000cf00 <[^>]*> nop ++0000cf04 <[^>]*> nop ++0000cf08 <[^>]*> nop ++0000cf0c <[^>]*> nop ++0000cf10 <[^>]*> nop ++0000cf14 <[^>]*> nop ++0000cf18 <[^>]*> nop ++0000cf1c <[^>]*> nop ++0000cf20 <[^>]*> nop ++0000cf24 <[^>]*> nop ++0000cf28 <[^>]*> nop ++0000cf2c <[^>]*> nop ++0000cf30 <[^>]*> nop ++0000cf34 <[^>]*> nop ++0000cf38 <[^>]*> nop ++0000cf3c <[^>]*> nop ++0000cf40 <[^>]*> nop ++0000cf44 <[^>]*> nop ++0000cf48 <[^>]*> nop ++0000cf4c <[^>]*> nop ++0000cf50 <[^>]*> nop ++0000cf54 <[^>]*> nop ++0000cf58 <[^>]*> nop ++0000cf5c <[^>]*> nop ++0000cf60 <[^>]*> nop ++0000cf64 <[^>]*> nop ++0000cf68 <[^>]*> nop ++0000cf6c <[^>]*> nop ++0000cf70 <[^>]*> nop ++0000cf74 <[^>]*> nop ++0000cf78 <[^>]*> nop ++0000cf7c <[^>]*> nop ++0000cf80 <[^>]*> nop ++0000cf84 <[^>]*> nop ++0000cf88 <[^>]*> nop ++0000cf8c <[^>]*> nop ++0000cf90 <[^>]*> nop ++0000cf94 <[^>]*> nop ++0000cf98 <[^>]*> nop ++0000cf9c <[^>]*> nop ++0000cfa0 <[^>]*> nop ++0000cfa4 <[^>]*> nop ++0000cfa8 <[^>]*> nop ++0000cfac <[^>]*> nop ++0000cfb0 <[^>]*> nop ++0000cfb4 <[^>]*> nop ++0000cfb8 <[^>]*> nop ++0000cfbc <[^>]*> nop ++0000cfc0 <[^>]*> nop ++0000cfc4 <[^>]*> nop ++0000cfc8 <[^>]*> nop ++0000cfcc <[^>]*> nop ++0000cfd0 <[^>]*> nop ++0000cfd4 <[^>]*> nop ++0000cfd8 <[^>]*> nop ++0000cfdc <[^>]*> nop ++0000cfe0 <[^>]*> nop ++0000cfe4 <[^>]*> nop ++0000cfe8 <[^>]*> nop ++0000cfec <[^>]*> nop ++0000cff0 <[^>]*> nop ++0000cff4 <[^>]*> nop ++0000cff8 <[^>]*> nop ++0000cffc <[^>]*> nop ++0000d000 <[^>]*> nop ++0000d004 <[^>]*> nop ++0000d008 <[^>]*> nop ++0000d00c <[^>]*> nop ++0000d010 <[^>]*> nop ++0000d014 <[^>]*> nop ++0000d018 <[^>]*> nop ++0000d01c <[^>]*> nop ++0000d020 <[^>]*> nop ++0000d024 <[^>]*> nop ++0000d028 <[^>]*> nop ++0000d02c <[^>]*> nop ++0000d030 <[^>]*> nop ++0000d034 <[^>]*> nop ++0000d038 <[^>]*> nop ++0000d03c <[^>]*> nop ++0000d040 <[^>]*> nop ++0000d044 <[^>]*> nop ++0000d048 <[^>]*> nop ++0000d04c <[^>]*> nop ++0000d050 <[^>]*> nop ++0000d054 <[^>]*> nop ++0000d058 <[^>]*> nop ++0000d05c <[^>]*> nop ++0000d060 <[^>]*> nop ++0000d064 <[^>]*> nop ++0000d068 <[^>]*> nop ++0000d06c <[^>]*> nop ++0000d070 <[^>]*> nop ++0000d074 <[^>]*> nop ++0000d078 <[^>]*> nop ++0000d07c <[^>]*> nop ++0000d080 <[^>]*> nop ++0000d084 <[^>]*> nop ++0000d088 <[^>]*> nop ++0000d08c <[^>]*> nop ++0000d090 <[^>]*> nop ++0000d094 <[^>]*> nop ++0000d098 <[^>]*> nop ++0000d09c <[^>]*> nop ++0000d0a0 <[^>]*> nop ++0000d0a4 <[^>]*> nop ++0000d0a8 <[^>]*> nop ++0000d0ac <[^>]*> nop ++0000d0b0 <[^>]*> nop ++0000d0b4 <[^>]*> nop ++0000d0b8 <[^>]*> nop ++0000d0bc <[^>]*> nop ++0000d0c0 <[^>]*> nop ++0000d0c4 <[^>]*> nop ++0000d0c8 <[^>]*> nop ++0000d0cc <[^>]*> nop ++0000d0d0 <[^>]*> nop ++0000d0d4 <[^>]*> nop ++0000d0d8 <[^>]*> nop ++0000d0dc <[^>]*> nop ++0000d0e0 <[^>]*> nop ++0000d0e4 <[^>]*> nop ++0000d0e8 <[^>]*> nop ++0000d0ec <[^>]*> nop ++0000d0f0 <[^>]*> nop ++0000d0f4 <[^>]*> nop ++0000d0f8 <[^>]*> nop ++0000d0fc <[^>]*> nop ++0000d100 <[^>]*> nop ++0000d104 <[^>]*> nop ++0000d108 <[^>]*> nop ++0000d10c <[^>]*> nop ++0000d110 <[^>]*> nop ++0000d114 <[^>]*> nop ++0000d118 <[^>]*> nop ++0000d11c <[^>]*> nop ++0000d120 <[^>]*> nop ++0000d124 <[^>]*> nop ++0000d128 <[^>]*> nop ++0000d12c <[^>]*> nop ++0000d130 <[^>]*> nop ++0000d134 <[^>]*> nop ++0000d138 <[^>]*> nop ++0000d13c <[^>]*> nop ++0000d140 <[^>]*> nop ++0000d144 <[^>]*> nop ++0000d148 <[^>]*> nop ++0000d14c <[^>]*> nop ++0000d150 <[^>]*> nop ++0000d154 <[^>]*> nop ++0000d158 <[^>]*> nop ++0000d15c <[^>]*> nop ++0000d160 <[^>]*> nop ++0000d164 <[^>]*> nop ++0000d168 <[^>]*> nop ++0000d16c <[^>]*> nop ++0000d170 <[^>]*> nop ++0000d174 <[^>]*> nop ++0000d178 <[^>]*> nop ++0000d17c <[^>]*> nop ++0000d180 <[^>]*> nop ++0000d184 <[^>]*> nop ++0000d188 <[^>]*> nop ++0000d18c <[^>]*> nop ++0000d190 <[^>]*> nop ++0000d194 <[^>]*> nop ++0000d198 <[^>]*> nop ++0000d19c <[^>]*> nop ++0000d1a0 <[^>]*> nop ++0000d1a4 <[^>]*> nop ++0000d1a8 <[^>]*> nop ++0000d1ac <[^>]*> nop ++0000d1b0 <[^>]*> nop ++0000d1b4 <[^>]*> nop ++0000d1b8 <[^>]*> nop ++0000d1bc <[^>]*> nop ++0000d1c0 <[^>]*> nop ++0000d1c4 <[^>]*> nop ++0000d1c8 <[^>]*> nop ++0000d1cc <[^>]*> nop ++0000d1d0 <[^>]*> nop ++0000d1d4 <[^>]*> nop ++0000d1d8 <[^>]*> nop ++0000d1dc <[^>]*> nop ++0000d1e0 <[^>]*> nop ++0000d1e4 <[^>]*> nop ++0000d1e8 <[^>]*> nop ++0000d1ec <[^>]*> nop ++0000d1f0 <[^>]*> nop ++0000d1f4 <[^>]*> nop ++0000d1f8 <[^>]*> nop ++0000d1fc <[^>]*> nop ++0000d200 <[^>]*> nop ++0000d204 <[^>]*> nop ++0000d208 <[^>]*> nop ++0000d20c <[^>]*> nop ++0000d210 <[^>]*> nop ++0000d214 <[^>]*> nop ++0000d218 <[^>]*> nop ++0000d21c <[^>]*> nop ++0000d220 <[^>]*> nop ++0000d224 <[^>]*> nop ++0000d228 <[^>]*> nop ++0000d22c <[^>]*> nop ++0000d230 <[^>]*> nop ++0000d234 <[^>]*> nop ++0000d238 <[^>]*> nop ++0000d23c <[^>]*> nop ++0000d240 <[^>]*> nop ++0000d244 <[^>]*> nop ++0000d248 <[^>]*> nop ++0000d24c <[^>]*> nop ++0000d250 <[^>]*> nop ++0000d254 <[^>]*> nop ++0000d258 <[^>]*> nop ++0000d25c <[^>]*> nop ++0000d260 <[^>]*> nop ++0000d264 <[^>]*> nop ++0000d268 <[^>]*> nop ++0000d26c <[^>]*> nop ++0000d270 <[^>]*> nop ++0000d274 <[^>]*> nop ++0000d278 <[^>]*> nop ++0000d27c <[^>]*> nop ++0000d280 <[^>]*> nop ++0000d284 <[^>]*> nop ++0000d288 <[^>]*> nop ++0000d28c <[^>]*> nop ++0000d290 <[^>]*> nop ++0000d294 <[^>]*> nop ++0000d298 <[^>]*> nop ++0000d29c <[^>]*> nop ++0000d2a0 <[^>]*> nop ++0000d2a4 <[^>]*> nop ++0000d2a8 <[^>]*> nop ++0000d2ac <[^>]*> nop ++0000d2b0 <[^>]*> nop ++0000d2b4 <[^>]*> nop ++0000d2b8 <[^>]*> nop ++0000d2bc <[^>]*> nop ++0000d2c0 <[^>]*> nop ++0000d2c4 <[^>]*> nop ++0000d2c8 <[^>]*> nop ++0000d2cc <[^>]*> nop ++0000d2d0 <[^>]*> nop ++0000d2d4 <[^>]*> nop ++0000d2d8 <[^>]*> nop ++0000d2dc <[^>]*> nop ++0000d2e0 <[^>]*> nop ++0000d2e4 <[^>]*> nop ++0000d2e8 <[^>]*> nop ++0000d2ec <[^>]*> nop ++0000d2f0 <[^>]*> nop ++0000d2f4 <[^>]*> nop ++0000d2f8 <[^>]*> nop ++0000d2fc <[^>]*> nop ++0000d300 <[^>]*> nop ++0000d304 <[^>]*> nop ++0000d308 <[^>]*> nop ++0000d30c <[^>]*> nop ++0000d310 <[^>]*> nop ++0000d314 <[^>]*> nop ++0000d318 <[^>]*> nop ++0000d31c <[^>]*> nop ++0000d320 <[^>]*> nop ++0000d324 <[^>]*> nop ++0000d328 <[^>]*> nop ++0000d32c <[^>]*> nop ++0000d330 <[^>]*> nop ++0000d334 <[^>]*> nop ++0000d338 <[^>]*> nop ++0000d33c <[^>]*> nop ++0000d340 <[^>]*> nop ++0000d344 <[^>]*> nop ++0000d348 <[^>]*> nop ++0000d34c <[^>]*> nop ++0000d350 <[^>]*> nop ++0000d354 <[^>]*> nop ++0000d358 <[^>]*> nop ++0000d35c <[^>]*> nop ++0000d360 <[^>]*> nop ++0000d364 <[^>]*> nop ++0000d368 <[^>]*> nop ++0000d36c <[^>]*> nop ++0000d370 <[^>]*> nop ++0000d374 <[^>]*> nop ++0000d378 <[^>]*> nop ++0000d37c <[^>]*> nop ++0000d380 <[^>]*> nop ++0000d384 <[^>]*> nop ++0000d388 <[^>]*> nop ++0000d38c <[^>]*> nop ++0000d390 <[^>]*> nop ++0000d394 <[^>]*> nop ++0000d398 <[^>]*> nop ++0000d39c <[^>]*> nop ++0000d3a0 <[^>]*> nop ++0000d3a4 <[^>]*> nop ++0000d3a8 <[^>]*> nop ++0000d3ac <[^>]*> nop ++0000d3b0 <[^>]*> nop ++0000d3b4 <[^>]*> nop ++0000d3b8 <[^>]*> nop ++0000d3bc <[^>]*> nop ++0000d3c0 <[^>]*> nop ++0000d3c4 <[^>]*> nop ++0000d3c8 <[^>]*> nop ++0000d3cc <[^>]*> nop ++0000d3d0 <[^>]*> nop ++0000d3d4 <[^>]*> nop ++0000d3d8 <[^>]*> nop ++0000d3dc <[^>]*> nop ++0000d3e0 <[^>]*> nop ++0000d3e4 <[^>]*> nop ++0000d3e8 <[^>]*> nop ++0000d3ec <[^>]*> nop ++0000d3f0 <[^>]*> nop ++0000d3f4 <[^>]*> nop ++0000d3f8 <[^>]*> nop ++0000d3fc <[^>]*> nop ++0000d400 <[^>]*> nop ++0000d404 <[^>]*> nop ++0000d408 <[^>]*> nop ++0000d40c <[^>]*> nop ++0000d410 <[^>]*> nop ++0000d414 <[^>]*> nop ++0000d418 <[^>]*> nop ++0000d41c <[^>]*> nop ++0000d420 <[^>]*> nop ++0000d424 <[^>]*> nop ++0000d428 <[^>]*> nop ++0000d42c <[^>]*> nop ++0000d430 <[^>]*> nop ++0000d434 <[^>]*> nop ++0000d438 <[^>]*> nop ++0000d43c <[^>]*> nop ++0000d440 <[^>]*> nop ++0000d444 <[^>]*> nop ++0000d448 <[^>]*> nop ++0000d44c <[^>]*> nop ++0000d450 <[^>]*> nop ++0000d454 <[^>]*> nop ++0000d458 <[^>]*> nop ++0000d45c <[^>]*> nop ++0000d460 <[^>]*> nop ++0000d464 <[^>]*> nop ++0000d468 <[^>]*> nop ++0000d46c <[^>]*> nop ++0000d470 <[^>]*> nop ++0000d474 <[^>]*> nop ++0000d478 <[^>]*> nop ++0000d47c <[^>]*> nop ++0000d480 <[^>]*> nop ++0000d484 <[^>]*> nop ++0000d488 <[^>]*> nop ++0000d48c <[^>]*> nop ++0000d490 <[^>]*> nop ++0000d494 <[^>]*> nop ++0000d498 <[^>]*> nop ++0000d49c <[^>]*> nop ++0000d4a0 <[^>]*> nop ++0000d4a4 <[^>]*> nop ++0000d4a8 <[^>]*> nop ++0000d4ac <[^>]*> nop ++0000d4b0 <[^>]*> nop ++0000d4b4 <[^>]*> nop ++0000d4b8 <[^>]*> nop ++0000d4bc <[^>]*> nop ++0000d4c0 <[^>]*> nop ++0000d4c4 <[^>]*> nop ++0000d4c8 <[^>]*> nop ++0000d4cc <[^>]*> nop ++0000d4d0 <[^>]*> nop ++0000d4d4 <[^>]*> nop ++0000d4d8 <[^>]*> nop ++0000d4dc <[^>]*> nop ++0000d4e0 <[^>]*> nop ++0000d4e4 <[^>]*> nop ++0000d4e8 <[^>]*> nop ++0000d4ec <[^>]*> nop ++0000d4f0 <[^>]*> nop ++0000d4f4 <[^>]*> nop ++0000d4f8 <[^>]*> nop ++0000d4fc <[^>]*> nop ++0000d500 <[^>]*> nop ++0000d504 <[^>]*> nop ++0000d508 <[^>]*> nop ++0000d50c <[^>]*> nop ++0000d510 <[^>]*> nop ++0000d514 <[^>]*> nop ++0000d518 <[^>]*> nop ++0000d51c <[^>]*> nop ++0000d520 <[^>]*> nop ++0000d524 <[^>]*> nop ++0000d528 <[^>]*> nop ++0000d52c <[^>]*> nop ++0000d530 <[^>]*> nop ++0000d534 <[^>]*> nop ++0000d538 <[^>]*> nop ++0000d53c <[^>]*> nop ++0000d540 <[^>]*> nop ++0000d544 <[^>]*> nop ++0000d548 <[^>]*> nop ++0000d54c <[^>]*> nop ++0000d550 <[^>]*> nop ++0000d554 <[^>]*> nop ++0000d558 <[^>]*> nop ++0000d55c <[^>]*> nop ++0000d560 <[^>]*> nop ++0000d564 <[^>]*> nop ++0000d568 <[^>]*> nop ++0000d56c <[^>]*> nop ++0000d570 <[^>]*> nop ++0000d574 <[^>]*> nop ++0000d578 <[^>]*> nop ++0000d57c <[^>]*> nop ++0000d580 <[^>]*> nop ++0000d584 <[^>]*> nop ++0000d588 <[^>]*> nop ++0000d58c <[^>]*> nop ++0000d590 <[^>]*> nop ++0000d594 <[^>]*> nop ++0000d598 <[^>]*> nop ++0000d59c <[^>]*> nop ++0000d5a0 <[^>]*> nop ++0000d5a4 <[^>]*> nop ++0000d5a8 <[^>]*> nop ++0000d5ac <[^>]*> nop ++0000d5b0 <[^>]*> nop ++0000d5b4 <[^>]*> nop ++0000d5b8 <[^>]*> nop ++0000d5bc <[^>]*> nop ++0000d5c0 <[^>]*> nop ++0000d5c4 <[^>]*> nop ++0000d5c8 <[^>]*> nop ++0000d5cc <[^>]*> nop ++0000d5d0 <[^>]*> nop ++0000d5d4 <[^>]*> nop ++0000d5d8 <[^>]*> nop ++0000d5dc <[^>]*> nop ++0000d5e0 <[^>]*> nop ++0000d5e4 <[^>]*> nop ++0000d5e8 <[^>]*> nop ++0000d5ec <[^>]*> nop ++0000d5f0 <[^>]*> nop ++0000d5f4 <[^>]*> nop ++0000d5f8 <[^>]*> nop ++0000d5fc <[^>]*> nop ++0000d600 <[^>]*> nop ++0000d604 <[^>]*> nop ++0000d608 <[^>]*> nop ++0000d60c <[^>]*> nop ++0000d610 <[^>]*> nop ++0000d614 <[^>]*> nop ++0000d618 <[^>]*> nop ++0000d61c <[^>]*> nop ++0000d620 <[^>]*> nop ++0000d624 <[^>]*> nop ++0000d628 <[^>]*> nop ++0000d62c <[^>]*> nop ++0000d630 <[^>]*> nop ++0000d634 <[^>]*> nop ++0000d638 <[^>]*> nop ++0000d63c <[^>]*> nop ++0000d640 <[^>]*> nop ++0000d644 <[^>]*> nop ++0000d648 <[^>]*> nop ++0000d64c <[^>]*> nop ++0000d650 <[^>]*> nop ++0000d654 <[^>]*> nop ++0000d658 <[^>]*> nop ++0000d65c <[^>]*> nop ++0000d660 <[^>]*> nop ++0000d664 <[^>]*> nop ++0000d668 <[^>]*> nop ++0000d66c <[^>]*> nop ++0000d670 <[^>]*> nop ++0000d674 <[^>]*> nop ++0000d678 <[^>]*> nop ++0000d67c <[^>]*> nop ++0000d680 <[^>]*> nop ++0000d684 <[^>]*> nop ++0000d688 <[^>]*> nop ++0000d68c <[^>]*> nop ++0000d690 <[^>]*> nop ++0000d694 <[^>]*> nop ++0000d698 <[^>]*> nop ++0000d69c <[^>]*> nop ++0000d6a0 <[^>]*> nop ++0000d6a4 <[^>]*> nop ++0000d6a8 <[^>]*> nop ++0000d6ac <[^>]*> nop ++0000d6b0 <[^>]*> nop ++0000d6b4 <[^>]*> nop ++0000d6b8 <[^>]*> nop ++0000d6bc <[^>]*> nop ++0000d6c0 <[^>]*> nop ++0000d6c4 <[^>]*> nop ++0000d6c8 <[^>]*> nop ++0000d6cc <[^>]*> nop ++0000d6d0 <[^>]*> nop ++0000d6d4 <[^>]*> nop ++0000d6d8 <[^>]*> nop ++0000d6dc <[^>]*> nop ++0000d6e0 <[^>]*> nop ++0000d6e4 <[^>]*> nop ++0000d6e8 <[^>]*> nop ++0000d6ec <[^>]*> nop ++0000d6f0 <[^>]*> nop ++0000d6f4 <[^>]*> nop ++0000d6f8 <[^>]*> nop ++0000d6fc <[^>]*> nop ++0000d700 <[^>]*> nop ++0000d704 <[^>]*> nop ++0000d708 <[^>]*> nop ++0000d70c <[^>]*> nop ++0000d710 <[^>]*> nop ++0000d714 <[^>]*> nop ++0000d718 <[^>]*> nop ++0000d71c <[^>]*> nop ++0000d720 <[^>]*> nop ++0000d724 <[^>]*> nop ++0000d728 <[^>]*> nop ++0000d72c <[^>]*> nop ++0000d730 <[^>]*> nop ++0000d734 <[^>]*> nop ++0000d738 <[^>]*> nop ++0000d73c <[^>]*> nop ++0000d740 <[^>]*> nop ++0000d744 <[^>]*> nop ++0000d748 <[^>]*> nop ++0000d74c <[^>]*> nop ++0000d750 <[^>]*> nop ++0000d754 <[^>]*> nop ++0000d758 <[^>]*> nop ++0000d75c <[^>]*> nop ++0000d760 <[^>]*> nop ++0000d764 <[^>]*> nop ++0000d768 <[^>]*> nop ++0000d76c <[^>]*> nop ++0000d770 <[^>]*> nop ++0000d774 <[^>]*> nop ++0000d778 <[^>]*> nop ++0000d77c <[^>]*> nop ++0000d780 <[^>]*> nop ++0000d784 <[^>]*> nop ++0000d788 <[^>]*> nop ++0000d78c <[^>]*> nop ++0000d790 <[^>]*> nop ++0000d794 <[^>]*> nop ++0000d798 <[^>]*> nop ++0000d79c <[^>]*> nop ++0000d7a0 <[^>]*> nop ++0000d7a4 <[^>]*> nop ++0000d7a8 <[^>]*> nop ++0000d7ac <[^>]*> nop ++0000d7b0 <[^>]*> nop ++0000d7b4 <[^>]*> nop ++0000d7b8 <[^>]*> nop ++0000d7bc <[^>]*> nop ++0000d7c0 <[^>]*> nop ++0000d7c4 <[^>]*> nop ++0000d7c8 <[^>]*> nop ++0000d7cc <[^>]*> nop ++0000d7d0 <[^>]*> nop ++0000d7d4 <[^>]*> nop ++0000d7d8 <[^>]*> nop ++0000d7dc <[^>]*> nop ++0000d7e0 <[^>]*> nop ++0000d7e4 <[^>]*> nop ++0000d7e8 <[^>]*> nop ++0000d7ec <[^>]*> nop ++0000d7f0 <[^>]*> nop ++0000d7f4 <[^>]*> nop ++0000d7f8 <[^>]*> nop ++0000d7fc <[^>]*> nop ++0000d800 <[^>]*> nop ++0000d804 <[^>]*> nop ++0000d808 <[^>]*> nop ++0000d80c <[^>]*> nop ++0000d810 <[^>]*> nop ++0000d814 <[^>]*> nop ++0000d818 <[^>]*> nop ++0000d81c <[^>]*> nop ++0000d820 <[^>]*> nop ++0000d824 <[^>]*> nop ++0000d828 <[^>]*> nop ++0000d82c <[^>]*> nop ++0000d830 <[^>]*> nop ++0000d834 <[^>]*> nop ++0000d838 <[^>]*> nop ++0000d83c <[^>]*> nop ++0000d840 <[^>]*> nop ++0000d844 <[^>]*> nop ++0000d848 <[^>]*> nop ++0000d84c <[^>]*> nop ++0000d850 <[^>]*> nop ++0000d854 <[^>]*> nop ++0000d858 <[^>]*> nop ++0000d85c <[^>]*> nop ++0000d860 <[^>]*> nop ++0000d864 <[^>]*> nop ++0000d868 <[^>]*> nop ++0000d86c <[^>]*> nop ++0000d870 <[^>]*> nop ++0000d874 <[^>]*> nop ++0000d878 <[^>]*> nop ++0000d87c <[^>]*> nop ++0000d880 <[^>]*> nop ++0000d884 <[^>]*> nop ++0000d888 <[^>]*> nop ++0000d88c <[^>]*> nop ++0000d890 <[^>]*> nop ++0000d894 <[^>]*> nop ++0000d898 <[^>]*> nop ++0000d89c <[^>]*> nop ++0000d8a0 <[^>]*> nop ++0000d8a4 <[^>]*> nop ++0000d8a8 <[^>]*> nop ++0000d8ac <[^>]*> nop ++0000d8b0 <[^>]*> nop ++0000d8b4 <[^>]*> nop ++0000d8b8 <[^>]*> nop ++0000d8bc <[^>]*> nop ++0000d8c0 <[^>]*> nop ++0000d8c4 <[^>]*> nop ++0000d8c8 <[^>]*> nop ++0000d8cc <[^>]*> nop ++0000d8d0 <[^>]*> nop ++0000d8d4 <[^>]*> nop ++0000d8d8 <[^>]*> nop ++0000d8dc <[^>]*> nop ++0000d8e0 <[^>]*> nop ++0000d8e4 <[^>]*> nop ++0000d8e8 <[^>]*> nop ++0000d8ec <[^>]*> nop ++0000d8f0 <[^>]*> nop ++0000d8f4 <[^>]*> nop ++0000d8f8 <[^>]*> nop ++0000d8fc <[^>]*> nop ++0000d900 <[^>]*> nop ++0000d904 <[^>]*> nop ++0000d908 <[^>]*> nop ++0000d90c <[^>]*> nop ++0000d910 <[^>]*> nop ++0000d914 <[^>]*> nop ++0000d918 <[^>]*> nop ++0000d91c <[^>]*> nop ++0000d920 <[^>]*> nop ++0000d924 <[^>]*> nop ++0000d928 <[^>]*> nop ++0000d92c <[^>]*> nop ++0000d930 <[^>]*> nop ++0000d934 <[^>]*> nop ++0000d938 <[^>]*> nop ++0000d93c <[^>]*> nop ++0000d940 <[^>]*> nop ++0000d944 <[^>]*> nop ++0000d948 <[^>]*> nop ++0000d94c <[^>]*> nop ++0000d950 <[^>]*> nop ++0000d954 <[^>]*> nop ++0000d958 <[^>]*> nop ++0000d95c <[^>]*> nop ++0000d960 <[^>]*> nop ++0000d964 <[^>]*> nop ++0000d968 <[^>]*> nop ++0000d96c <[^>]*> nop ++0000d970 <[^>]*> nop ++0000d974 <[^>]*> nop ++0000d978 <[^>]*> nop ++0000d97c <[^>]*> nop ++0000d980 <[^>]*> nop ++0000d984 <[^>]*> nop ++0000d988 <[^>]*> nop ++0000d98c <[^>]*> nop ++0000d990 <[^>]*> nop ++0000d994 <[^>]*> nop ++0000d998 <[^>]*> nop ++0000d99c <[^>]*> nop ++0000d9a0 <[^>]*> nop ++0000d9a4 <[^>]*> nop ++0000d9a8 <[^>]*> nop ++0000d9ac <[^>]*> nop ++0000d9b0 <[^>]*> nop ++0000d9b4 <[^>]*> nop ++0000d9b8 <[^>]*> nop ++0000d9bc <[^>]*> nop ++0000d9c0 <[^>]*> nop ++0000d9c4 <[^>]*> nop ++0000d9c8 <[^>]*> nop ++0000d9cc <[^>]*> nop ++0000d9d0 <[^>]*> nop ++0000d9d4 <[^>]*> nop ++0000d9d8 <[^>]*> nop ++0000d9dc <[^>]*> nop ++0000d9e0 <[^>]*> nop ++0000d9e4 <[^>]*> nop ++0000d9e8 <[^>]*> nop ++0000d9ec <[^>]*> nop ++0000d9f0 <[^>]*> nop ++0000d9f4 <[^>]*> nop ++0000d9f8 <[^>]*> nop ++0000d9fc <[^>]*> nop ++0000da00 <[^>]*> nop ++0000da04 <[^>]*> nop ++0000da08 <[^>]*> nop ++0000da0c <[^>]*> nop ++0000da10 <[^>]*> nop ++0000da14 <[^>]*> nop ++0000da18 <[^>]*> nop ++0000da1c <[^>]*> nop ++0000da20 <[^>]*> nop ++0000da24 <[^>]*> nop ++0000da28 <[^>]*> nop ++0000da2c <[^>]*> nop ++0000da30 <[^>]*> nop ++0000da34 <[^>]*> nop ++0000da38 <[^>]*> nop ++0000da3c <[^>]*> nop ++0000da40 <[^>]*> nop ++0000da44 <[^>]*> nop ++0000da48 <[^>]*> nop ++0000da4c <[^>]*> nop ++0000da50 <[^>]*> nop ++0000da54 <[^>]*> nop ++0000da58 <[^>]*> nop ++0000da5c <[^>]*> nop ++0000da60 <[^>]*> nop ++0000da64 <[^>]*> nop ++0000da68 <[^>]*> nop ++0000da6c <[^>]*> nop ++0000da70 <[^>]*> nop ++0000da74 <[^>]*> nop ++0000da78 <[^>]*> nop ++0000da7c <[^>]*> nop ++0000da80 <[^>]*> nop ++0000da84 <[^>]*> nop ++0000da88 <[^>]*> nop ++0000da8c <[^>]*> nop ++0000da90 <[^>]*> nop ++0000da94 <[^>]*> nop ++0000da98 <[^>]*> nop ++0000da9c <[^>]*> nop ++0000daa0 <[^>]*> nop ++0000daa4 <[^>]*> nop ++0000daa8 <[^>]*> nop ++0000daac <[^>]*> nop ++0000dab0 <[^>]*> nop ++0000dab4 <[^>]*> nop ++0000dab8 <[^>]*> nop ++0000dabc <[^>]*> nop ++0000dac0 <[^>]*> nop ++0000dac4 <[^>]*> nop ++0000dac8 <[^>]*> nop ++0000dacc <[^>]*> nop ++0000dad0 <[^>]*> nop ++0000dad4 <[^>]*> nop ++0000dad8 <[^>]*> nop ++0000dadc <[^>]*> nop ++0000dae0 <[^>]*> nop ++0000dae4 <[^>]*> nop ++0000dae8 <[^>]*> nop ++0000daec <[^>]*> nop ++0000daf0 <[^>]*> nop ++0000daf4 <[^>]*> nop ++0000daf8 <[^>]*> nop ++0000dafc <[^>]*> nop ++0000db00 <[^>]*> nop ++0000db04 <[^>]*> nop ++0000db08 <[^>]*> nop ++0000db0c <[^>]*> nop ++0000db10 <[^>]*> nop ++0000db14 <[^>]*> nop ++0000db18 <[^>]*> nop ++0000db1c <[^>]*> nop ++0000db20 <[^>]*> nop ++0000db24 <[^>]*> nop ++0000db28 <[^>]*> nop ++0000db2c <[^>]*> nop ++0000db30 <[^>]*> nop ++0000db34 <[^>]*> nop ++0000db38 <[^>]*> nop ++0000db3c <[^>]*> nop ++0000db40 <[^>]*> nop ++0000db44 <[^>]*> nop ++0000db48 <[^>]*> nop ++0000db4c <[^>]*> nop ++0000db50 <[^>]*> nop ++0000db54 <[^>]*> nop ++0000db58 <[^>]*> nop ++0000db5c <[^>]*> nop ++0000db60 <[^>]*> nop ++0000db64 <[^>]*> nop ++0000db68 <[^>]*> nop ++0000db6c <[^>]*> nop ++0000db70 <[^>]*> nop ++0000db74 <[^>]*> nop ++0000db78 <[^>]*> nop ++0000db7c <[^>]*> nop ++0000db80 <[^>]*> nop ++0000db84 <[^>]*> nop ++0000db88 <[^>]*> nop ++0000db8c <[^>]*> nop ++0000db90 <[^>]*> nop ++0000db94 <[^>]*> nop ++0000db98 <[^>]*> nop ++0000db9c <[^>]*> nop ++0000dba0 <[^>]*> nop ++0000dba4 <[^>]*> nop ++0000dba8 <[^>]*> nop ++0000dbac <[^>]*> nop ++0000dbb0 <[^>]*> nop ++0000dbb4 <[^>]*> nop ++0000dbb8 <[^>]*> nop ++0000dbbc <[^>]*> nop ++0000dbc0 <[^>]*> nop ++0000dbc4 <[^>]*> nop ++0000dbc8 <[^>]*> nop ++0000dbcc <[^>]*> nop ++0000dbd0 <[^>]*> nop ++0000dbd4 <[^>]*> nop ++0000dbd8 <[^>]*> nop ++0000dbdc <[^>]*> nop ++0000dbe0 <[^>]*> nop ++0000dbe4 <[^>]*> nop ++0000dbe8 <[^>]*> nop ++0000dbec <[^>]*> nop ++0000dbf0 <[^>]*> nop ++0000dbf4 <[^>]*> nop ++0000dbf8 <[^>]*> nop ++0000dbfc <[^>]*> nop ++0000dc00 <[^>]*> nop ++0000dc04 <[^>]*> nop ++0000dc08 <[^>]*> nop ++0000dc0c <[^>]*> nop ++0000dc10 <[^>]*> nop ++0000dc14 <[^>]*> nop ++0000dc18 <[^>]*> nop ++0000dc1c <[^>]*> nop ++0000dc20 <[^>]*> nop ++0000dc24 <[^>]*> nop ++0000dc28 <[^>]*> nop ++0000dc2c <[^>]*> nop ++0000dc30 <[^>]*> nop ++0000dc34 <[^>]*> nop ++0000dc38 <[^>]*> nop ++0000dc3c <[^>]*> nop ++0000dc40 <[^>]*> nop ++0000dc44 <[^>]*> nop ++0000dc48 <[^>]*> nop ++0000dc4c <[^>]*> nop ++0000dc50 <[^>]*> nop ++0000dc54 <[^>]*> nop ++0000dc58 <[^>]*> nop ++0000dc5c <[^>]*> nop ++0000dc60 <[^>]*> nop ++0000dc64 <[^>]*> nop ++0000dc68 <[^>]*> nop ++0000dc6c <[^>]*> nop ++0000dc70 <[^>]*> nop ++0000dc74 <[^>]*> nop ++0000dc78 <[^>]*> nop ++0000dc7c <[^>]*> nop ++0000dc80 <[^>]*> nop ++0000dc84 <[^>]*> nop ++0000dc88 <[^>]*> nop ++0000dc8c <[^>]*> nop ++0000dc90 <[^>]*> nop ++0000dc94 <[^>]*> nop ++0000dc98 <[^>]*> nop ++0000dc9c <[^>]*> nop ++0000dca0 <[^>]*> nop ++0000dca4 <[^>]*> nop ++0000dca8 <[^>]*> nop ++0000dcac <[^>]*> nop ++0000dcb0 <[^>]*> nop ++0000dcb4 <[^>]*> nop ++0000dcb8 <[^>]*> nop ++0000dcbc <[^>]*> nop ++0000dcc0 <[^>]*> nop ++0000dcc4 <[^>]*> nop ++0000dcc8 <[^>]*> nop ++0000dccc <[^>]*> nop ++0000dcd0 <[^>]*> nop ++0000dcd4 <[^>]*> nop ++0000dcd8 <[^>]*> nop ++0000dcdc <[^>]*> nop ++0000dce0 <[^>]*> nop ++0000dce4 <[^>]*> nop ++0000dce8 <[^>]*> nop ++0000dcec <[^>]*> nop ++0000dcf0 <[^>]*> nop ++0000dcf4 <[^>]*> nop ++0000dcf8 <[^>]*> nop ++0000dcfc <[^>]*> nop ++0000dd00 <[^>]*> nop ++0000dd04 <[^>]*> nop ++0000dd08 <[^>]*> nop ++0000dd0c <[^>]*> nop ++0000dd10 <[^>]*> nop ++0000dd14 <[^>]*> nop ++0000dd18 <[^>]*> nop ++0000dd1c <[^>]*> nop ++0000dd20 <[^>]*> nop ++0000dd24 <[^>]*> nop ++0000dd28 <[^>]*> nop ++0000dd2c <[^>]*> nop ++0000dd30 <[^>]*> nop ++0000dd34 <[^>]*> nop ++0000dd38 <[^>]*> nop ++0000dd3c <[^>]*> nop ++0000dd40 <[^>]*> nop ++0000dd44 <[^>]*> nop ++0000dd48 <[^>]*> nop ++0000dd4c <[^>]*> nop ++0000dd50 <[^>]*> nop ++0000dd54 <[^>]*> nop ++0000dd58 <[^>]*> nop ++0000dd5c <[^>]*> nop ++0000dd60 <[^>]*> nop ++0000dd64 <[^>]*> nop ++0000dd68 <[^>]*> nop ++0000dd6c <[^>]*> nop ++0000dd70 <[^>]*> nop ++0000dd74 <[^>]*> nop ++0000dd78 <[^>]*> nop ++0000dd7c <[^>]*> nop ++0000dd80 <[^>]*> nop ++0000dd84 <[^>]*> nop ++0000dd88 <[^>]*> nop ++0000dd8c <[^>]*> nop ++0000dd90 <[^>]*> nop ++0000dd94 <[^>]*> nop ++0000dd98 <[^>]*> nop ++0000dd9c <[^>]*> nop ++0000dda0 <[^>]*> nop ++0000dda4 <[^>]*> nop ++0000dda8 <[^>]*> nop ++0000ddac <[^>]*> nop ++0000ddb0 <[^>]*> nop ++0000ddb4 <[^>]*> nop ++0000ddb8 <[^>]*> nop ++0000ddbc <[^>]*> nop ++0000ddc0 <[^>]*> nop ++0000ddc4 <[^>]*> nop ++0000ddc8 <[^>]*> nop ++0000ddcc <[^>]*> nop ++0000ddd0 <[^>]*> nop ++0000ddd4 <[^>]*> nop ++0000ddd8 <[^>]*> nop ++0000dddc <[^>]*> nop ++0000dde0 <[^>]*> nop ++0000dde4 <[^>]*> nop ++0000dde8 <[^>]*> nop ++0000ddec <[^>]*> nop ++0000ddf0 <[^>]*> nop ++0000ddf4 <[^>]*> nop ++0000ddf8 <[^>]*> nop ++0000ddfc <[^>]*> nop ++0000de00 <[^>]*> nop ++0000de04 <[^>]*> nop ++0000de08 <[^>]*> nop ++0000de0c <[^>]*> nop ++0000de10 <[^>]*> nop ++0000de14 <[^>]*> nop ++0000de18 <[^>]*> nop ++0000de1c <[^>]*> nop ++0000de20 <[^>]*> nop ++0000de24 <[^>]*> nop ++0000de28 <[^>]*> nop ++0000de2c <[^>]*> nop ++0000de30 <[^>]*> nop ++0000de34 <[^>]*> nop ++0000de38 <[^>]*> nop ++0000de3c <[^>]*> nop ++0000de40 <[^>]*> nop ++0000de44 <[^>]*> nop ++0000de48 <[^>]*> nop ++0000de4c <[^>]*> nop ++0000de50 <[^>]*> nop ++0000de54 <[^>]*> nop ++0000de58 <[^>]*> nop ++0000de5c <[^>]*> nop ++0000de60 <[^>]*> nop ++0000de64 <[^>]*> nop ++0000de68 <[^>]*> nop ++0000de6c <[^>]*> nop ++0000de70 <[^>]*> nop ++0000de74 <[^>]*> nop ++0000de78 <[^>]*> nop ++0000de7c <[^>]*> nop ++0000de80 <[^>]*> nop ++0000de84 <[^>]*> nop ++0000de88 <[^>]*> nop ++0000de8c <[^>]*> nop ++0000de90 <[^>]*> nop ++0000de94 <[^>]*> nop ++0000de98 <[^>]*> nop ++0000de9c <[^>]*> nop ++0000dea0 <[^>]*> nop ++0000dea4 <[^>]*> nop ++0000dea8 <[^>]*> nop ++0000deac <[^>]*> nop ++0000deb0 <[^>]*> nop ++0000deb4 <[^>]*> nop ++0000deb8 <[^>]*> nop ++0000debc <[^>]*> nop ++0000dec0 <[^>]*> nop ++0000dec4 <[^>]*> nop ++0000dec8 <[^>]*> nop ++0000decc <[^>]*> nop ++0000ded0 <[^>]*> nop ++0000ded4 <[^>]*> nop ++0000ded8 <[^>]*> nop ++0000dedc <[^>]*> nop ++0000dee0 <[^>]*> nop ++0000dee4 <[^>]*> nop ++0000dee8 <[^>]*> nop ++0000deec <[^>]*> nop ++0000def0 <[^>]*> nop ++0000def4 <[^>]*> nop ++0000def8 <[^>]*> nop ++0000defc <[^>]*> nop ++0000df00 <[^>]*> nop ++0000df04 <[^>]*> nop ++0000df08 <[^>]*> nop ++0000df0c <[^>]*> nop ++0000df10 <[^>]*> nop ++0000df14 <[^>]*> nop ++0000df18 <[^>]*> nop ++0000df1c <[^>]*> nop ++0000df20 <[^>]*> nop ++0000df24 <[^>]*> nop ++0000df28 <[^>]*> nop ++0000df2c <[^>]*> nop ++0000df30 <[^>]*> nop ++0000df34 <[^>]*> nop ++0000df38 <[^>]*> nop ++0000df3c <[^>]*> nop ++0000df40 <[^>]*> nop ++0000df44 <[^>]*> nop ++0000df48 <[^>]*> nop ++0000df4c <[^>]*> nop ++0000df50 <[^>]*> nop ++0000df54 <[^>]*> nop ++0000df58 <[^>]*> nop ++0000df5c <[^>]*> nop ++0000df60 <[^>]*> nop ++0000df64 <[^>]*> nop ++0000df68 <[^>]*> nop ++0000df6c <[^>]*> nop ++0000df70 <[^>]*> nop ++0000df74 <[^>]*> nop ++0000df78 <[^>]*> nop ++0000df7c <[^>]*> nop ++0000df80 <[^>]*> nop ++0000df84 <[^>]*> nop ++0000df88 <[^>]*> nop ++0000df8c <[^>]*> nop ++0000df90 <[^>]*> nop ++0000df94 <[^>]*> nop ++0000df98 <[^>]*> nop ++0000df9c <[^>]*> nop ++0000dfa0 <[^>]*> nop ++0000dfa4 <[^>]*> nop ++0000dfa8 <[^>]*> nop ++0000dfac <[^>]*> nop ++0000dfb0 <[^>]*> nop ++0000dfb4 <[^>]*> nop ++0000dfb8 <[^>]*> nop ++0000dfbc <[^>]*> nop ++0000dfc0 <[^>]*> nop ++0000dfc4 <[^>]*> nop ++0000dfc8 <[^>]*> nop ++0000dfcc <[^>]*> nop ++0000dfd0 <[^>]*> nop ++0000dfd4 <[^>]*> nop ++0000dfd8 <[^>]*> nop ++0000dfdc <[^>]*> nop ++0000dfe0 <[^>]*> nop ++0000dfe4 <[^>]*> nop ++0000dfe8 <[^>]*> nop ++0000dfec <[^>]*> nop ++0000dff0 <[^>]*> nop ++0000dff4 <[^>]*> nop ++0000dff8 <[^>]*> nop ++0000dffc <[^>]*> nop ++0000e000 <[^>]*> nop ++0000e004 <[^>]*> nop ++0000e008 <[^>]*> nop ++0000e00c <[^>]*> nop ++0000e010 <[^>]*> nop ++0000e014 <[^>]*> nop ++0000e018 <[^>]*> nop ++0000e01c <[^>]*> nop ++0000e020 <[^>]*> nop ++0000e024 <[^>]*> nop ++0000e028 <[^>]*> nop ++0000e02c <[^>]*> nop ++0000e030 <[^>]*> nop ++0000e034 <[^>]*> nop ++0000e038 <[^>]*> nop ++0000e03c <[^>]*> nop ++0000e040 <[^>]*> nop ++0000e044 <[^>]*> nop ++0000e048 <[^>]*> nop ++0000e04c <[^>]*> nop ++0000e050 <[^>]*> nop ++0000e054 <[^>]*> nop ++0000e058 <[^>]*> nop ++0000e05c <[^>]*> nop ++0000e060 <[^>]*> nop ++0000e064 <[^>]*> nop ++0000e068 <[^>]*> nop ++0000e06c <[^>]*> nop ++0000e070 <[^>]*> nop ++0000e074 <[^>]*> nop ++0000e078 <[^>]*> nop ++0000e07c <[^>]*> nop ++0000e080 <[^>]*> nop ++0000e084 <[^>]*> nop ++0000e088 <[^>]*> nop ++0000e08c <[^>]*> nop ++0000e090 <[^>]*> nop ++0000e094 <[^>]*> nop ++0000e098 <[^>]*> nop ++0000e09c <[^>]*> nop ++0000e0a0 <[^>]*> nop ++0000e0a4 <[^>]*> nop ++0000e0a8 <[^>]*> nop ++0000e0ac <[^>]*> nop ++0000e0b0 <[^>]*> nop ++0000e0b4 <[^>]*> nop ++0000e0b8 <[^>]*> nop ++0000e0bc <[^>]*> nop ++0000e0c0 <[^>]*> nop ++0000e0c4 <[^>]*> nop ++0000e0c8 <[^>]*> nop ++0000e0cc <[^>]*> nop ++0000e0d0 <[^>]*> nop ++0000e0d4 <[^>]*> nop ++0000e0d8 <[^>]*> nop ++0000e0dc <[^>]*> nop ++0000e0e0 <[^>]*> nop ++0000e0e4 <[^>]*> nop ++0000e0e8 <[^>]*> nop ++0000e0ec <[^>]*> nop ++0000e0f0 <[^>]*> nop ++0000e0f4 <[^>]*> nop ++0000e0f8 <[^>]*> nop ++0000e0fc <[^>]*> nop ++0000e100 <[^>]*> nop ++0000e104 <[^>]*> nop ++0000e108 <[^>]*> nop ++0000e10c <[^>]*> nop ++0000e110 <[^>]*> nop ++0000e114 <[^>]*> nop ++0000e118 <[^>]*> nop ++0000e11c <[^>]*> nop ++0000e120 <[^>]*> nop ++0000e124 <[^>]*> nop ++0000e128 <[^>]*> nop ++0000e12c <[^>]*> nop ++0000e130 <[^>]*> nop ++0000e134 <[^>]*> nop ++0000e138 <[^>]*> nop ++0000e13c <[^>]*> nop ++0000e140 <[^>]*> nop ++0000e144 <[^>]*> nop ++0000e148 <[^>]*> nop ++0000e14c <[^>]*> nop ++0000e150 <[^>]*> nop ++0000e154 <[^>]*> nop ++0000e158 <[^>]*> nop ++0000e15c <[^>]*> nop ++0000e160 <[^>]*> nop ++0000e164 <[^>]*> nop ++0000e168 <[^>]*> nop ++0000e16c <[^>]*> nop ++0000e170 <[^>]*> nop ++0000e174 <[^>]*> nop ++0000e178 <[^>]*> nop ++0000e17c <[^>]*> nop ++0000e180 <[^>]*> nop ++0000e184 <[^>]*> nop ++0000e188 <[^>]*> nop ++0000e18c <[^>]*> nop ++0000e190 <[^>]*> nop ++0000e194 <[^>]*> nop ++0000e198 <[^>]*> nop ++0000e19c <[^>]*> nop ++0000e1a0 <[^>]*> nop ++0000e1a4 <[^>]*> nop ++0000e1a8 <[^>]*> nop ++0000e1ac <[^>]*> nop ++0000e1b0 <[^>]*> nop ++0000e1b4 <[^>]*> nop ++0000e1b8 <[^>]*> nop ++0000e1bc <[^>]*> nop ++0000e1c0 <[^>]*> nop ++0000e1c4 <[^>]*> nop ++0000e1c8 <[^>]*> nop ++0000e1cc <[^>]*> nop ++0000e1d0 <[^>]*> nop ++0000e1d4 <[^>]*> nop ++0000e1d8 <[^>]*> nop ++0000e1dc <[^>]*> nop ++0000e1e0 <[^>]*> nop ++0000e1e4 <[^>]*> nop ++0000e1e8 <[^>]*> nop ++0000e1ec <[^>]*> nop ++0000e1f0 <[^>]*> nop ++0000e1f4 <[^>]*> nop ++0000e1f8 <[^>]*> nop ++0000e1fc <[^>]*> nop ++0000e200 <[^>]*> nop ++0000e204 <[^>]*> nop ++0000e208 <[^>]*> nop ++0000e20c <[^>]*> nop ++0000e210 <[^>]*> nop ++0000e214 <[^>]*> nop ++0000e218 <[^>]*> nop ++0000e21c <[^>]*> nop ++0000e220 <[^>]*> nop ++0000e224 <[^>]*> nop ++0000e228 <[^>]*> nop ++0000e22c <[^>]*> nop ++0000e230 <[^>]*> nop ++0000e234 <[^>]*> nop ++0000e238 <[^>]*> nop ++0000e23c <[^>]*> nop ++0000e240 <[^>]*> nop ++0000e244 <[^>]*> nop ++0000e248 <[^>]*> nop ++0000e24c <[^>]*> nop ++0000e250 <[^>]*> nop ++0000e254 <[^>]*> nop ++0000e258 <[^>]*> nop ++0000e25c <[^>]*> nop ++0000e260 <[^>]*> nop ++0000e264 <[^>]*> nop ++0000e268 <[^>]*> nop ++0000e26c <[^>]*> nop ++0000e270 <[^>]*> nop ++0000e274 <[^>]*> nop ++0000e278 <[^>]*> nop ++0000e27c <[^>]*> nop ++0000e280 <[^>]*> nop ++0000e284 <[^>]*> nop ++0000e288 <[^>]*> nop ++0000e28c <[^>]*> nop ++0000e290 <[^>]*> nop ++0000e294 <[^>]*> nop ++0000e298 <[^>]*> nop ++0000e29c <[^>]*> nop ++0000e2a0 <[^>]*> nop ++0000e2a4 <[^>]*> nop ++0000e2a8 <[^>]*> nop ++0000e2ac <[^>]*> nop ++0000e2b0 <[^>]*> nop ++0000e2b4 <[^>]*> nop ++0000e2b8 <[^>]*> nop ++0000e2bc <[^>]*> nop ++0000e2c0 <[^>]*> nop ++0000e2c4 <[^>]*> nop ++0000e2c8 <[^>]*> nop ++0000e2cc <[^>]*> nop ++0000e2d0 <[^>]*> nop ++0000e2d4 <[^>]*> nop ++0000e2d8 <[^>]*> nop ++0000e2dc <[^>]*> nop ++0000e2e0 <[^>]*> nop ++0000e2e4 <[^>]*> nop ++0000e2e8 <[^>]*> nop ++0000e2ec <[^>]*> nop ++0000e2f0 <[^>]*> nop ++0000e2f4 <[^>]*> nop ++0000e2f8 <[^>]*> nop ++0000e2fc <[^>]*> nop ++0000e300 <[^>]*> nop ++0000e304 <[^>]*> nop ++0000e308 <[^>]*> nop ++0000e30c <[^>]*> nop ++0000e310 <[^>]*> nop ++0000e314 <[^>]*> nop ++0000e318 <[^>]*> nop ++0000e31c <[^>]*> nop ++0000e320 <[^>]*> nop ++0000e324 <[^>]*> nop ++0000e328 <[^>]*> nop ++0000e32c <[^>]*> nop ++0000e330 <[^>]*> nop ++0000e334 <[^>]*> nop ++0000e338 <[^>]*> nop ++0000e33c <[^>]*> nop ++0000e340 <[^>]*> nop ++0000e344 <[^>]*> nop ++0000e348 <[^>]*> nop ++0000e34c <[^>]*> nop ++0000e350 <[^>]*> nop ++0000e354 <[^>]*> nop ++0000e358 <[^>]*> nop ++0000e35c <[^>]*> nop ++0000e360 <[^>]*> nop ++0000e364 <[^>]*> nop ++0000e368 <[^>]*> nop ++0000e36c <[^>]*> nop ++0000e370 <[^>]*> nop ++0000e374 <[^>]*> nop ++0000e378 <[^>]*> nop ++0000e37c <[^>]*> nop ++0000e380 <[^>]*> nop ++0000e384 <[^>]*> nop ++0000e388 <[^>]*> nop ++0000e38c <[^>]*> nop ++0000e390 <[^>]*> nop ++0000e394 <[^>]*> nop ++0000e398 <[^>]*> nop ++0000e39c <[^>]*> nop ++0000e3a0 <[^>]*> nop ++0000e3a4 <[^>]*> nop ++0000e3a8 <[^>]*> nop ++0000e3ac <[^>]*> nop ++0000e3b0 <[^>]*> nop ++0000e3b4 <[^>]*> nop ++0000e3b8 <[^>]*> nop ++0000e3bc <[^>]*> nop ++0000e3c0 <[^>]*> nop ++0000e3c4 <[^>]*> nop ++0000e3c8 <[^>]*> nop ++0000e3cc <[^>]*> nop ++0000e3d0 <[^>]*> nop ++0000e3d4 <[^>]*> nop ++0000e3d8 <[^>]*> nop ++0000e3dc <[^>]*> nop ++0000e3e0 <[^>]*> nop ++0000e3e4 <[^>]*> nop ++0000e3e8 <[^>]*> nop ++0000e3ec <[^>]*> nop ++0000e3f0 <[^>]*> nop ++0000e3f4 <[^>]*> nop ++0000e3f8 <[^>]*> nop ++0000e3fc <[^>]*> nop ++0000e400 <[^>]*> nop ++0000e404 <[^>]*> nop ++0000e408 <[^>]*> nop ++0000e40c <[^>]*> nop ++0000e410 <[^>]*> nop ++0000e414 <[^>]*> nop ++0000e418 <[^>]*> nop ++0000e41c <[^>]*> nop ++0000e420 <[^>]*> nop ++0000e424 <[^>]*> nop ++0000e428 <[^>]*> nop ++0000e42c <[^>]*> nop ++0000e430 <[^>]*> nop ++0000e434 <[^>]*> nop ++0000e438 <[^>]*> nop ++0000e43c <[^>]*> nop ++0000e440 <[^>]*> nop ++0000e444 <[^>]*> nop ++0000e448 <[^>]*> nop ++0000e44c <[^>]*> nop ++0000e450 <[^>]*> nop ++0000e454 <[^>]*> nop ++0000e458 <[^>]*> nop ++0000e45c <[^>]*> nop ++0000e460 <[^>]*> nop ++0000e464 <[^>]*> nop ++0000e468 <[^>]*> nop ++0000e46c <[^>]*> nop ++0000e470 <[^>]*> nop ++0000e474 <[^>]*> nop ++0000e478 <[^>]*> nop ++0000e47c <[^>]*> nop ++0000e480 <[^>]*> nop ++0000e484 <[^>]*> nop ++0000e488 <[^>]*> nop ++0000e48c <[^>]*> nop ++0000e490 <[^>]*> nop ++0000e494 <[^>]*> nop ++0000e498 <[^>]*> nop ++0000e49c <[^>]*> nop ++0000e4a0 <[^>]*> nop ++0000e4a4 <[^>]*> nop ++0000e4a8 <[^>]*> nop ++0000e4ac <[^>]*> nop ++0000e4b0 <[^>]*> nop ++0000e4b4 <[^>]*> nop ++0000e4b8 <[^>]*> nop ++0000e4bc <[^>]*> nop ++0000e4c0 <[^>]*> nop ++0000e4c4 <[^>]*> nop ++0000e4c8 <[^>]*> nop ++0000e4cc <[^>]*> nop ++0000e4d0 <[^>]*> nop ++0000e4d4 <[^>]*> nop ++0000e4d8 <[^>]*> nop ++0000e4dc <[^>]*> nop ++0000e4e0 <[^>]*> nop ++0000e4e4 <[^>]*> nop ++0000e4e8 <[^>]*> nop ++0000e4ec <[^>]*> nop ++0000e4f0 <[^>]*> nop ++0000e4f4 <[^>]*> nop ++0000e4f8 <[^>]*> nop ++0000e4fc <[^>]*> nop ++0000e500 <[^>]*> nop ++0000e504 <[^>]*> nop ++0000e508 <[^>]*> nop ++0000e50c <[^>]*> nop ++0000e510 <[^>]*> nop ++0000e514 <[^>]*> nop ++0000e518 <[^>]*> nop ++0000e51c <[^>]*> nop ++0000e520 <[^>]*> nop ++0000e524 <[^>]*> nop ++0000e528 <[^>]*> nop ++0000e52c <[^>]*> nop ++0000e530 <[^>]*> nop ++0000e534 <[^>]*> nop ++0000e538 <[^>]*> nop ++0000e53c <[^>]*> nop ++0000e540 <[^>]*> nop ++0000e544 <[^>]*> nop ++0000e548 <[^>]*> nop ++0000e54c <[^>]*> nop ++0000e550 <[^>]*> nop ++0000e554 <[^>]*> nop ++0000e558 <[^>]*> nop ++0000e55c <[^>]*> nop ++0000e560 <[^>]*> nop ++0000e564 <[^>]*> nop ++0000e568 <[^>]*> nop ++0000e56c <[^>]*> nop ++0000e570 <[^>]*> nop ++0000e574 <[^>]*> nop ++0000e578 <[^>]*> nop ++0000e57c <[^>]*> nop ++0000e580 <[^>]*> nop ++0000e584 <[^>]*> nop ++0000e588 <[^>]*> nop ++0000e58c <[^>]*> nop ++0000e590 <[^>]*> nop ++0000e594 <[^>]*> nop ++0000e598 <[^>]*> nop ++0000e59c <[^>]*> nop ++0000e5a0 <[^>]*> nop ++0000e5a4 <[^>]*> nop ++0000e5a8 <[^>]*> nop ++0000e5ac <[^>]*> nop ++0000e5b0 <[^>]*> nop ++0000e5b4 <[^>]*> nop ++0000e5b8 <[^>]*> nop ++0000e5bc <[^>]*> nop ++0000e5c0 <[^>]*> nop ++0000e5c4 <[^>]*> nop ++0000e5c8 <[^>]*> nop ++0000e5cc <[^>]*> nop ++0000e5d0 <[^>]*> nop ++0000e5d4 <[^>]*> nop ++0000e5d8 <[^>]*> nop ++0000e5dc <[^>]*> nop ++0000e5e0 <[^>]*> nop ++0000e5e4 <[^>]*> nop ++0000e5e8 <[^>]*> nop ++0000e5ec <[^>]*> nop ++0000e5f0 <[^>]*> nop ++0000e5f4 <[^>]*> nop ++0000e5f8 <[^>]*> nop ++0000e5fc <[^>]*> nop ++0000e600 <[^>]*> nop ++0000e604 <[^>]*> nop ++0000e608 <[^>]*> nop ++0000e60c <[^>]*> nop ++0000e610 <[^>]*> nop ++0000e614 <[^>]*> nop ++0000e618 <[^>]*> nop ++0000e61c <[^>]*> nop ++0000e620 <[^>]*> nop ++0000e624 <[^>]*> nop ++0000e628 <[^>]*> nop ++0000e62c <[^>]*> nop ++0000e630 <[^>]*> nop ++0000e634 <[^>]*> nop ++0000e638 <[^>]*> nop ++0000e63c <[^>]*> nop ++0000e640 <[^>]*> nop ++0000e644 <[^>]*> nop ++0000e648 <[^>]*> nop ++0000e64c <[^>]*> nop ++0000e650 <[^>]*> nop ++0000e654 <[^>]*> nop ++0000e658 <[^>]*> nop ++0000e65c <[^>]*> nop ++0000e660 <[^>]*> nop ++0000e664 <[^>]*> nop ++0000e668 <[^>]*> nop ++0000e66c <[^>]*> nop ++0000e670 <[^>]*> nop ++0000e674 <[^>]*> nop ++0000e678 <[^>]*> nop ++0000e67c <[^>]*> nop ++0000e680 <[^>]*> nop ++0000e684 <[^>]*> nop ++0000e688 <[^>]*> nop ++0000e68c <[^>]*> nop ++0000e690 <[^>]*> nop ++0000e694 <[^>]*> nop ++0000e698 <[^>]*> nop ++0000e69c <[^>]*> nop ++0000e6a0 <[^>]*> nop ++0000e6a4 <[^>]*> nop ++0000e6a8 <[^>]*> nop ++0000e6ac <[^>]*> nop ++0000e6b0 <[^>]*> nop ++0000e6b4 <[^>]*> nop ++0000e6b8 <[^>]*> nop ++0000e6bc <[^>]*> nop ++0000e6c0 <[^>]*> nop ++0000e6c4 <[^>]*> nop ++0000e6c8 <[^>]*> nop ++0000e6cc <[^>]*> nop ++0000e6d0 <[^>]*> nop ++0000e6d4 <[^>]*> nop ++0000e6d8 <[^>]*> nop ++0000e6dc <[^>]*> nop ++0000e6e0 <[^>]*> nop ++0000e6e4 <[^>]*> nop ++0000e6e8 <[^>]*> nop ++0000e6ec <[^>]*> nop ++0000e6f0 <[^>]*> nop ++0000e6f4 <[^>]*> nop ++0000e6f8 <[^>]*> nop ++0000e6fc <[^>]*> nop ++0000e700 <[^>]*> nop ++0000e704 <[^>]*> nop ++0000e708 <[^>]*> nop ++0000e70c <[^>]*> nop ++0000e710 <[^>]*> nop ++0000e714 <[^>]*> nop ++0000e718 <[^>]*> nop ++0000e71c <[^>]*> nop ++0000e720 <[^>]*> nop ++0000e724 <[^>]*> nop ++0000e728 <[^>]*> nop ++0000e72c <[^>]*> nop ++0000e730 <[^>]*> nop ++0000e734 <[^>]*> nop ++0000e738 <[^>]*> nop ++0000e73c <[^>]*> nop ++0000e740 <[^>]*> nop ++0000e744 <[^>]*> nop ++0000e748 <[^>]*> nop ++0000e74c <[^>]*> nop ++0000e750 <[^>]*> nop ++0000e754 <[^>]*> nop ++0000e758 <[^>]*> nop ++0000e75c <[^>]*> nop ++0000e760 <[^>]*> nop ++0000e764 <[^>]*> nop ++0000e768 <[^>]*> nop ++0000e76c <[^>]*> nop ++0000e770 <[^>]*> nop ++0000e774 <[^>]*> nop ++0000e778 <[^>]*> nop ++0000e77c <[^>]*> nop ++0000e780 <[^>]*> nop ++0000e784 <[^>]*> nop ++0000e788 <[^>]*> nop ++0000e78c <[^>]*> nop ++0000e790 <[^>]*> nop ++0000e794 <[^>]*> nop ++0000e798 <[^>]*> nop ++0000e79c <[^>]*> nop ++0000e7a0 <[^>]*> nop ++0000e7a4 <[^>]*> nop ++0000e7a8 <[^>]*> nop ++0000e7ac <[^>]*> nop ++0000e7b0 <[^>]*> nop ++0000e7b4 <[^>]*> nop ++0000e7b8 <[^>]*> nop ++0000e7bc <[^>]*> nop ++0000e7c0 <[^>]*> nop ++0000e7c4 <[^>]*> nop ++0000e7c8 <[^>]*> nop ++0000e7cc <[^>]*> nop ++0000e7d0 <[^>]*> nop ++0000e7d4 <[^>]*> nop ++0000e7d8 <[^>]*> nop ++0000e7dc <[^>]*> nop ++0000e7e0 <[^>]*> nop ++0000e7e4 <[^>]*> nop ++0000e7e8 <[^>]*> nop ++0000e7ec <[^>]*> nop ++0000e7f0 <[^>]*> nop ++0000e7f4 <[^>]*> nop ++0000e7f8 <[^>]*> nop ++0000e7fc <[^>]*> nop ++0000e800 <[^>]*> nop ++0000e804 <[^>]*> nop ++0000e808 <[^>]*> nop ++0000e80c <[^>]*> nop ++0000e810 <[^>]*> nop ++0000e814 <[^>]*> nop ++0000e818 <[^>]*> nop ++0000e81c <[^>]*> nop ++0000e820 <[^>]*> nop ++0000e824 <[^>]*> nop ++0000e828 <[^>]*> nop ++0000e82c <[^>]*> nop ++0000e830 <[^>]*> nop ++0000e834 <[^>]*> nop ++0000e838 <[^>]*> nop ++0000e83c <[^>]*> nop ++0000e840 <[^>]*> nop ++0000e844 <[^>]*> nop ++0000e848 <[^>]*> nop ++0000e84c <[^>]*> nop ++0000e850 <[^>]*> nop ++0000e854 <[^>]*> nop ++0000e858 <[^>]*> nop ++0000e85c <[^>]*> nop ++0000e860 <[^>]*> nop ++0000e864 <[^>]*> nop ++0000e868 <[^>]*> nop ++0000e86c <[^>]*> nop ++0000e870 <[^>]*> nop ++0000e874 <[^>]*> nop ++0000e878 <[^>]*> nop ++0000e87c <[^>]*> nop ++0000e880 <[^>]*> nop ++0000e884 <[^>]*> nop ++0000e888 <[^>]*> nop ++0000e88c <[^>]*> nop ++0000e890 <[^>]*> nop ++0000e894 <[^>]*> nop ++0000e898 <[^>]*> nop ++0000e89c <[^>]*> nop ++0000e8a0 <[^>]*> nop ++0000e8a4 <[^>]*> nop ++0000e8a8 <[^>]*> nop ++0000e8ac <[^>]*> nop ++0000e8b0 <[^>]*> nop ++0000e8b4 <[^>]*> nop ++0000e8b8 <[^>]*> nop ++0000e8bc <[^>]*> nop ++0000e8c0 <[^>]*> nop ++0000e8c4 <[^>]*> nop ++0000e8c8 <[^>]*> nop ++0000e8cc <[^>]*> nop ++0000e8d0 <[^>]*> nop ++0000e8d4 <[^>]*> nop ++0000e8d8 <[^>]*> nop ++0000e8dc <[^>]*> nop ++0000e8e0 <[^>]*> nop ++0000e8e4 <[^>]*> nop ++0000e8e8 <[^>]*> nop ++0000e8ec <[^>]*> nop ++0000e8f0 <[^>]*> nop ++0000e8f4 <[^>]*> nop ++0000e8f8 <[^>]*> nop ++0000e8fc <[^>]*> nop ++0000e900 <[^>]*> nop ++0000e904 <[^>]*> nop ++0000e908 <[^>]*> nop ++0000e90c <[^>]*> nop ++0000e910 <[^>]*> nop ++0000e914 <[^>]*> nop ++0000e918 <[^>]*> nop ++0000e91c <[^>]*> nop ++0000e920 <[^>]*> nop ++0000e924 <[^>]*> nop ++0000e928 <[^>]*> nop ++0000e92c <[^>]*> nop ++0000e930 <[^>]*> nop ++0000e934 <[^>]*> nop ++0000e938 <[^>]*> nop ++0000e93c <[^>]*> nop ++0000e940 <[^>]*> nop ++0000e944 <[^>]*> nop ++0000e948 <[^>]*> nop ++0000e94c <[^>]*> nop ++0000e950 <[^>]*> nop ++0000e954 <[^>]*> nop ++0000e958 <[^>]*> nop ++0000e95c <[^>]*> nop ++0000e960 <[^>]*> nop ++0000e964 <[^>]*> nop ++0000e968 <[^>]*> nop ++0000e96c <[^>]*> nop ++0000e970 <[^>]*> nop ++0000e974 <[^>]*> nop ++0000e978 <[^>]*> nop ++0000e97c <[^>]*> nop ++0000e980 <[^>]*> nop ++0000e984 <[^>]*> nop ++0000e988 <[^>]*> nop ++0000e98c <[^>]*> nop ++0000e990 <[^>]*> nop ++0000e994 <[^>]*> nop ++0000e998 <[^>]*> nop ++0000e99c <[^>]*> nop ++0000e9a0 <[^>]*> nop ++0000e9a4 <[^>]*> nop ++0000e9a8 <[^>]*> nop ++0000e9ac <[^>]*> nop ++0000e9b0 <[^>]*> nop ++0000e9b4 <[^>]*> nop ++0000e9b8 <[^>]*> nop ++0000e9bc <[^>]*> nop ++0000e9c0 <[^>]*> nop ++0000e9c4 <[^>]*> nop ++0000e9c8 <[^>]*> nop ++0000e9cc <[^>]*> nop ++0000e9d0 <[^>]*> nop ++0000e9d4 <[^>]*> nop ++0000e9d8 <[^>]*> nop ++0000e9dc <[^>]*> nop ++0000e9e0 <[^>]*> nop ++0000e9e4 <[^>]*> nop ++0000e9e8 <[^>]*> nop ++0000e9ec <[^>]*> nop ++0000e9f0 <[^>]*> nop ++0000e9f4 <[^>]*> nop ++0000e9f8 <[^>]*> nop ++0000e9fc <[^>]*> nop ++0000ea00 <[^>]*> nop ++0000ea04 <[^>]*> nop ++0000ea08 <[^>]*> nop ++0000ea0c <[^>]*> nop ++0000ea10 <[^>]*> nop ++0000ea14 <[^>]*> nop ++0000ea18 <[^>]*> nop ++0000ea1c <[^>]*> nop ++0000ea20 <[^>]*> nop ++0000ea24 <[^>]*> nop ++0000ea28 <[^>]*> nop ++0000ea2c <[^>]*> nop ++0000ea30 <[^>]*> nop ++0000ea34 <[^>]*> nop ++0000ea38 <[^>]*> nop ++0000ea3c <[^>]*> nop ++0000ea40 <[^>]*> nop ++0000ea44 <[^>]*> nop ++0000ea48 <[^>]*> nop ++0000ea4c <[^>]*> nop ++0000ea50 <[^>]*> nop ++0000ea54 <[^>]*> nop ++0000ea58 <[^>]*> nop ++0000ea5c <[^>]*> nop ++0000ea60 <[^>]*> nop ++0000ea64 <[^>]*> nop ++0000ea68 <[^>]*> nop ++0000ea6c <[^>]*> nop ++0000ea70 <[^>]*> nop ++0000ea74 <[^>]*> nop ++0000ea78 <[^>]*> nop ++0000ea7c <[^>]*> nop ++0000ea80 <[^>]*> nop ++0000ea84 <[^>]*> nop ++0000ea88 <[^>]*> nop ++0000ea8c <[^>]*> nop ++0000ea90 <[^>]*> nop ++0000ea94 <[^>]*> nop ++0000ea98 <[^>]*> nop ++0000ea9c <[^>]*> nop ++0000eaa0 <[^>]*> nop ++0000eaa4 <[^>]*> nop ++0000eaa8 <[^>]*> nop ++0000eaac <[^>]*> nop ++0000eab0 <[^>]*> nop ++0000eab4 <[^>]*> nop ++0000eab8 <[^>]*> nop ++0000eabc <[^>]*> nop ++0000eac0 <[^>]*> nop ++0000eac4 <[^>]*> nop ++0000eac8 <[^>]*> nop ++0000eacc <[^>]*> nop ++0000ead0 <[^>]*> nop ++0000ead4 <[^>]*> nop ++0000ead8 <[^>]*> nop ++0000eadc <[^>]*> nop ++0000eae0 <[^>]*> nop ++0000eae4 <[^>]*> nop ++0000eae8 <[^>]*> nop ++0000eaec <[^>]*> nop ++0000eaf0 <[^>]*> nop ++0000eaf4 <[^>]*> nop ++0000eaf8 <[^>]*> nop ++0000eafc <[^>]*> nop ++0000eb00 <[^>]*> nop ++0000eb04 <[^>]*> nop ++0000eb08 <[^>]*> nop ++0000eb0c <[^>]*> nop ++0000eb10 <[^>]*> nop ++0000eb14 <[^>]*> nop ++0000eb18 <[^>]*> nop ++0000eb1c <[^>]*> nop ++0000eb20 <[^>]*> nop ++0000eb24 <[^>]*> nop ++0000eb28 <[^>]*> nop ++0000eb2c <[^>]*> nop ++0000eb30 <[^>]*> nop ++0000eb34 <[^>]*> nop ++0000eb38 <[^>]*> nop ++0000eb3c <[^>]*> nop ++0000eb40 <[^>]*> nop ++0000eb44 <[^>]*> nop ++0000eb48 <[^>]*> nop ++0000eb4c <[^>]*> nop ++0000eb50 <[^>]*> nop ++0000eb54 <[^>]*> nop ++0000eb58 <[^>]*> nop ++0000eb5c <[^>]*> nop ++0000eb60 <[^>]*> nop ++0000eb64 <[^>]*> nop ++0000eb68 <[^>]*> nop ++0000eb6c <[^>]*> nop ++0000eb70 <[^>]*> nop ++0000eb74 <[^>]*> nop ++0000eb78 <[^>]*> nop ++0000eb7c <[^>]*> nop ++0000eb80 <[^>]*> nop ++0000eb84 <[^>]*> nop ++0000eb88 <[^>]*> nop ++0000eb8c <[^>]*> nop ++0000eb90 <[^>]*> nop ++0000eb94 <[^>]*> nop ++0000eb98 <[^>]*> nop ++0000eb9c <[^>]*> nop ++0000eba0 <[^>]*> nop ++0000eba4 <[^>]*> nop ++0000eba8 <[^>]*> nop ++0000ebac <[^>]*> nop ++0000ebb0 <[^>]*> nop ++0000ebb4 <[^>]*> nop ++0000ebb8 <[^>]*> nop ++0000ebbc <[^>]*> nop ++0000ebc0 <[^>]*> nop ++0000ebc4 <[^>]*> nop ++0000ebc8 <[^>]*> nop ++0000ebcc <[^>]*> nop ++0000ebd0 <[^>]*> nop ++0000ebd4 <[^>]*> nop ++0000ebd8 <[^>]*> nop ++0000ebdc <[^>]*> nop ++0000ebe0 <[^>]*> nop ++0000ebe4 <[^>]*> nop ++0000ebe8 <[^>]*> nop ++0000ebec <[^>]*> nop ++0000ebf0 <[^>]*> nop ++0000ebf4 <[^>]*> nop ++0000ebf8 <[^>]*> nop ++0000ebfc <[^>]*> nop ++0000ec00 <[^>]*> nop ++0000ec04 <[^>]*> nop ++0000ec08 <[^>]*> nop ++0000ec0c <[^>]*> nop ++0000ec10 <[^>]*> nop ++0000ec14 <[^>]*> nop ++0000ec18 <[^>]*> nop ++0000ec1c <[^>]*> nop ++0000ec20 <[^>]*> nop ++0000ec24 <[^>]*> nop ++0000ec28 <[^>]*> nop ++0000ec2c <[^>]*> nop ++0000ec30 <[^>]*> nop ++0000ec34 <[^>]*> nop ++0000ec38 <[^>]*> nop ++0000ec3c <[^>]*> nop ++0000ec40 <[^>]*> nop ++0000ec44 <[^>]*> nop ++0000ec48 <[^>]*> nop ++0000ec4c <[^>]*> nop ++0000ec50 <[^>]*> nop ++0000ec54 <[^>]*> nop ++0000ec58 <[^>]*> nop ++0000ec5c <[^>]*> nop ++0000ec60 <[^>]*> nop ++0000ec64 <[^>]*> nop ++0000ec68 <[^>]*> nop ++0000ec6c <[^>]*> nop ++0000ec70 <[^>]*> nop ++0000ec74 <[^>]*> nop ++0000ec78 <[^>]*> nop ++0000ec7c <[^>]*> nop ++0000ec80 <[^>]*> nop ++0000ec84 <[^>]*> nop ++0000ec88 <[^>]*> nop ++0000ec8c <[^>]*> nop ++0000ec90 <[^>]*> nop ++0000ec94 <[^>]*> nop ++0000ec98 <[^>]*> nop ++0000ec9c <[^>]*> nop ++0000eca0 <[^>]*> nop ++0000eca4 <[^>]*> nop ++0000eca8 <[^>]*> nop ++0000ecac <[^>]*> nop ++0000ecb0 <[^>]*> nop ++0000ecb4 <[^>]*> nop ++0000ecb8 <[^>]*> nop ++0000ecbc <[^>]*> nop ++0000ecc0 <[^>]*> nop ++0000ecc4 <[^>]*> nop ++0000ecc8 <[^>]*> nop ++0000eccc <[^>]*> nop ++0000ecd0 <[^>]*> nop ++0000ecd4 <[^>]*> nop ++0000ecd8 <[^>]*> nop ++0000ecdc <[^>]*> nop ++0000ece0 <[^>]*> nop ++0000ece4 <[^>]*> nop ++0000ece8 <[^>]*> nop ++0000ecec <[^>]*> nop ++0000ecf0 <[^>]*> nop ++0000ecf4 <[^>]*> nop ++0000ecf8 <[^>]*> nop ++0000ecfc <[^>]*> nop ++0000ed00 <[^>]*> nop ++0000ed04 <[^>]*> nop ++0000ed08 <[^>]*> nop ++0000ed0c <[^>]*> nop ++0000ed10 <[^>]*> nop ++0000ed14 <[^>]*> nop ++0000ed18 <[^>]*> nop ++0000ed1c <[^>]*> nop ++0000ed20 <[^>]*> nop ++0000ed24 <[^>]*> nop ++0000ed28 <[^>]*> nop ++0000ed2c <[^>]*> nop ++0000ed30 <[^>]*> nop ++0000ed34 <[^>]*> nop ++0000ed38 <[^>]*> nop ++0000ed3c <[^>]*> nop ++0000ed40 <[^>]*> nop ++0000ed44 <[^>]*> nop ++0000ed48 <[^>]*> nop ++0000ed4c <[^>]*> nop ++0000ed50 <[^>]*> nop ++0000ed54 <[^>]*> nop ++0000ed58 <[^>]*> nop ++0000ed5c <[^>]*> nop ++0000ed60 <[^>]*> nop ++0000ed64 <[^>]*> nop ++0000ed68 <[^>]*> nop ++0000ed6c <[^>]*> nop ++0000ed70 <[^>]*> nop ++0000ed74 <[^>]*> nop ++0000ed78 <[^>]*> nop ++0000ed7c <[^>]*> nop ++0000ed80 <[^>]*> nop ++0000ed84 <[^>]*> nop ++0000ed88 <[^>]*> nop ++0000ed8c <[^>]*> nop ++0000ed90 <[^>]*> nop ++0000ed94 <[^>]*> nop ++0000ed98 <[^>]*> nop ++0000ed9c <[^>]*> nop ++0000eda0 <[^>]*> nop ++0000eda4 <[^>]*> nop ++0000eda8 <[^>]*> nop ++0000edac <[^>]*> nop ++0000edb0 <[^>]*> nop ++0000edb4 <[^>]*> nop ++0000edb8 <[^>]*> nop ++0000edbc <[^>]*> nop ++0000edc0 <[^>]*> nop ++0000edc4 <[^>]*> nop ++0000edc8 <[^>]*> nop ++0000edcc <[^>]*> nop ++0000edd0 <[^>]*> nop ++0000edd4 <[^>]*> nop ++0000edd8 <[^>]*> nop ++0000eddc <[^>]*> nop ++0000ede0 <[^>]*> nop ++0000ede4 <[^>]*> nop ++0000ede8 <[^>]*> nop ++0000edec <[^>]*> nop ++0000edf0 <[^>]*> nop ++0000edf4 <[^>]*> nop ++0000edf8 <[^>]*> nop ++0000edfc <[^>]*> nop ++0000ee00 <[^>]*> nop ++0000ee04 <[^>]*> nop ++0000ee08 <[^>]*> nop ++0000ee0c <[^>]*> nop ++0000ee10 <[^>]*> nop ++0000ee14 <[^>]*> nop ++0000ee18 <[^>]*> nop ++0000ee1c <[^>]*> nop ++0000ee20 <[^>]*> nop ++0000ee24 <[^>]*> nop ++0000ee28 <[^>]*> nop ++0000ee2c <[^>]*> nop ++0000ee30 <[^>]*> nop ++0000ee34 <[^>]*> nop ++0000ee38 <[^>]*> nop ++0000ee3c <[^>]*> nop ++0000ee40 <[^>]*> nop ++0000ee44 <[^>]*> nop ++0000ee48 <[^>]*> nop ++0000ee4c <[^>]*> nop ++0000ee50 <[^>]*> nop ++0000ee54 <[^>]*> nop ++0000ee58 <[^>]*> nop ++0000ee5c <[^>]*> nop ++0000ee60 <[^>]*> nop ++0000ee64 <[^>]*> nop ++0000ee68 <[^>]*> nop ++0000ee6c <[^>]*> nop ++0000ee70 <[^>]*> nop ++0000ee74 <[^>]*> nop ++0000ee78 <[^>]*> nop ++0000ee7c <[^>]*> nop ++0000ee80 <[^>]*> nop ++0000ee84 <[^>]*> nop ++0000ee88 <[^>]*> nop ++0000ee8c <[^>]*> nop ++0000ee90 <[^>]*> nop ++0000ee94 <[^>]*> nop ++0000ee98 <[^>]*> nop ++0000ee9c <[^>]*> nop ++0000eea0 <[^>]*> nop ++0000eea4 <[^>]*> nop ++0000eea8 <[^>]*> nop ++0000eeac <[^>]*> nop ++0000eeb0 <[^>]*> nop ++0000eeb4 <[^>]*> nop ++0000eeb8 <[^>]*> nop ++0000eebc <[^>]*> nop ++0000eec0 <[^>]*> nop ++0000eec4 <[^>]*> nop ++0000eec8 <[^>]*> nop ++0000eecc <[^>]*> nop ++0000eed0 <[^>]*> nop ++0000eed4 <[^>]*> nop ++0000eed8 <[^>]*> nop ++0000eedc <[^>]*> nop ++0000eee0 <[^>]*> nop ++0000eee4 <[^>]*> nop ++0000eee8 <[^>]*> nop ++0000eeec <[^>]*> nop ++0000eef0 <[^>]*> nop ++0000eef4 <[^>]*> nop ++0000eef8 <[^>]*> nop ++0000eefc <[^>]*> nop ++0000ef00 <[^>]*> nop ++0000ef04 <[^>]*> nop ++0000ef08 <[^>]*> nop ++0000ef0c <[^>]*> nop ++0000ef10 <[^>]*> nop ++0000ef14 <[^>]*> nop ++0000ef18 <[^>]*> nop ++0000ef1c <[^>]*> nop ++0000ef20 <[^>]*> nop ++0000ef24 <[^>]*> nop ++0000ef28 <[^>]*> nop ++0000ef2c <[^>]*> nop ++0000ef30 <[^>]*> nop ++0000ef34 <[^>]*> nop ++0000ef38 <[^>]*> nop ++0000ef3c <[^>]*> nop ++0000ef40 <[^>]*> nop ++0000ef44 <[^>]*> nop ++0000ef48 <[^>]*> nop ++0000ef4c <[^>]*> nop ++0000ef50 <[^>]*> nop ++0000ef54 <[^>]*> nop ++0000ef58 <[^>]*> nop ++0000ef5c <[^>]*> nop ++0000ef60 <[^>]*> nop ++0000ef64 <[^>]*> nop ++0000ef68 <[^>]*> nop ++0000ef6c <[^>]*> nop ++0000ef70 <[^>]*> nop ++0000ef74 <[^>]*> nop ++0000ef78 <[^>]*> nop ++0000ef7c <[^>]*> nop ++0000ef80 <[^>]*> nop ++0000ef84 <[^>]*> nop ++0000ef88 <[^>]*> nop ++0000ef8c <[^>]*> nop ++0000ef90 <[^>]*> nop ++0000ef94 <[^>]*> nop ++0000ef98 <[^>]*> nop ++0000ef9c <[^>]*> nop ++0000efa0 <[^>]*> nop ++0000efa4 <[^>]*> nop ++0000efa8 <[^>]*> nop ++0000efac <[^>]*> nop ++0000efb0 <[^>]*> nop ++0000efb4 <[^>]*> nop ++0000efb8 <[^>]*> nop ++0000efbc <[^>]*> nop ++0000efc0 <[^>]*> nop ++0000efc4 <[^>]*> nop ++0000efc8 <[^>]*> nop ++0000efcc <[^>]*> nop ++0000efd0 <[^>]*> nop ++0000efd4 <[^>]*> nop ++0000efd8 <[^>]*> nop ++0000efdc <[^>]*> nop ++0000efe0 <[^>]*> nop ++0000efe4 <[^>]*> nop ++0000efe8 <[^>]*> nop ++0000efec <[^>]*> nop ++0000eff0 <[^>]*> nop ++0000eff4 <[^>]*> nop ++0000eff8 <[^>]*> nop ++0000effc <[^>]*> nop ++0000f000 <[^>]*> nop ++0000f004 <[^>]*> nop ++0000f008 <[^>]*> nop ++0000f00c <[^>]*> nop ++0000f010 <[^>]*> nop ++0000f014 <[^>]*> nop ++0000f018 <[^>]*> nop ++0000f01c <[^>]*> nop ++0000f020 <[^>]*> nop ++0000f024 <[^>]*> nop ++0000f028 <[^>]*> nop ++0000f02c <[^>]*> nop ++0000f030 <[^>]*> nop ++0000f034 <[^>]*> nop ++0000f038 <[^>]*> nop ++0000f03c <[^>]*> nop ++0000f040 <[^>]*> nop ++0000f044 <[^>]*> nop ++0000f048 <[^>]*> nop ++0000f04c <[^>]*> nop ++0000f050 <[^>]*> nop ++0000f054 <[^>]*> nop ++0000f058 <[^>]*> nop ++0000f05c <[^>]*> nop ++0000f060 <[^>]*> nop ++0000f064 <[^>]*> nop ++0000f068 <[^>]*> nop ++0000f06c <[^>]*> nop ++0000f070 <[^>]*> nop ++0000f074 <[^>]*> nop ++0000f078 <[^>]*> nop ++0000f07c <[^>]*> nop ++0000f080 <[^>]*> nop ++0000f084 <[^>]*> nop ++0000f088 <[^>]*> nop ++0000f08c <[^>]*> nop ++0000f090 <[^>]*> nop ++0000f094 <[^>]*> nop ++0000f098 <[^>]*> nop ++0000f09c <[^>]*> nop ++0000f0a0 <[^>]*> nop ++0000f0a4 <[^>]*> nop ++0000f0a8 <[^>]*> nop ++0000f0ac <[^>]*> nop ++0000f0b0 <[^>]*> nop ++0000f0b4 <[^>]*> nop ++0000f0b8 <[^>]*> nop ++0000f0bc <[^>]*> nop ++0000f0c0 <[^>]*> nop ++0000f0c4 <[^>]*> nop ++0000f0c8 <[^>]*> nop ++0000f0cc <[^>]*> nop ++0000f0d0 <[^>]*> nop ++0000f0d4 <[^>]*> nop ++0000f0d8 <[^>]*> nop ++0000f0dc <[^>]*> nop ++0000f0e0 <[^>]*> nop ++0000f0e4 <[^>]*> nop ++0000f0e8 <[^>]*> nop ++0000f0ec <[^>]*> nop ++0000f0f0 <[^>]*> nop ++0000f0f4 <[^>]*> nop ++0000f0f8 <[^>]*> nop ++0000f0fc <[^>]*> nop ++0000f100 <[^>]*> nop ++0000f104 <[^>]*> nop ++0000f108 <[^>]*> nop ++0000f10c <[^>]*> nop ++0000f110 <[^>]*> nop ++0000f114 <[^>]*> nop ++0000f118 <[^>]*> nop ++0000f11c <[^>]*> nop ++0000f120 <[^>]*> nop ++0000f124 <[^>]*> nop ++0000f128 <[^>]*> nop ++0000f12c <[^>]*> nop ++0000f130 <[^>]*> nop ++0000f134 <[^>]*> nop ++0000f138 <[^>]*> nop ++0000f13c <[^>]*> nop ++0000f140 <[^>]*> nop ++0000f144 <[^>]*> nop ++0000f148 <[^>]*> nop ++0000f14c <[^>]*> nop ++0000f150 <[^>]*> nop ++0000f154 <[^>]*> nop ++0000f158 <[^>]*> nop ++0000f15c <[^>]*> nop ++0000f160 <[^>]*> nop ++0000f164 <[^>]*> nop ++0000f168 <[^>]*> nop ++0000f16c <[^>]*> nop ++0000f170 <[^>]*> nop ++0000f174 <[^>]*> nop ++0000f178 <[^>]*> nop ++0000f17c <[^>]*> nop ++0000f180 <[^>]*> nop ++0000f184 <[^>]*> nop ++0000f188 <[^>]*> nop ++0000f18c <[^>]*> nop ++0000f190 <[^>]*> nop ++0000f194 <[^>]*> nop ++0000f198 <[^>]*> nop ++0000f19c <[^>]*> nop ++0000f1a0 <[^>]*> nop ++0000f1a4 <[^>]*> nop ++0000f1a8 <[^>]*> nop ++0000f1ac <[^>]*> nop ++0000f1b0 <[^>]*> nop ++0000f1b4 <[^>]*> nop ++0000f1b8 <[^>]*> nop ++0000f1bc <[^>]*> nop ++0000f1c0 <[^>]*> nop ++0000f1c4 <[^>]*> nop ++0000f1c8 <[^>]*> nop ++0000f1cc <[^>]*> nop ++0000f1d0 <[^>]*> nop ++0000f1d4 <[^>]*> nop ++0000f1d8 <[^>]*> nop ++0000f1dc <[^>]*> nop ++0000f1e0 <[^>]*> nop ++0000f1e4 <[^>]*> nop ++0000f1e8 <[^>]*> nop ++0000f1ec <[^>]*> nop ++0000f1f0 <[^>]*> nop ++0000f1f4 <[^>]*> nop ++0000f1f8 <[^>]*> nop ++0000f1fc <[^>]*> nop ++0000f200 <[^>]*> nop ++0000f204 <[^>]*> nop ++0000f208 <[^>]*> nop ++0000f20c <[^>]*> nop ++0000f210 <[^>]*> nop ++0000f214 <[^>]*> nop ++0000f218 <[^>]*> nop ++0000f21c <[^>]*> nop ++0000f220 <[^>]*> nop ++0000f224 <[^>]*> nop ++0000f228 <[^>]*> nop ++0000f22c <[^>]*> nop ++0000f230 <[^>]*> nop ++0000f234 <[^>]*> nop ++0000f238 <[^>]*> nop ++0000f23c <[^>]*> nop ++0000f240 <[^>]*> nop ++0000f244 <[^>]*> nop ++0000f248 <[^>]*> nop ++0000f24c <[^>]*> nop ++0000f250 <[^>]*> nop ++0000f254 <[^>]*> nop ++0000f258 <[^>]*> nop ++0000f25c <[^>]*> nop ++0000f260 <[^>]*> nop ++0000f264 <[^>]*> nop ++0000f268 <[^>]*> nop ++0000f26c <[^>]*> nop ++0000f270 <[^>]*> nop ++0000f274 <[^>]*> nop ++0000f278 <[^>]*> nop ++0000f27c <[^>]*> nop ++0000f280 <[^>]*> nop ++0000f284 <[^>]*> nop ++0000f288 <[^>]*> nop ++0000f28c <[^>]*> nop ++0000f290 <[^>]*> nop ++0000f294 <[^>]*> nop ++0000f298 <[^>]*> nop ++0000f29c <[^>]*> nop ++0000f2a0 <[^>]*> nop ++0000f2a4 <[^>]*> nop ++0000f2a8 <[^>]*> nop ++0000f2ac <[^>]*> nop ++0000f2b0 <[^>]*> nop ++0000f2b4 <[^>]*> nop ++0000f2b8 <[^>]*> nop ++0000f2bc <[^>]*> nop ++0000f2c0 <[^>]*> nop ++0000f2c4 <[^>]*> nop ++0000f2c8 <[^>]*> nop ++0000f2cc <[^>]*> nop ++0000f2d0 <[^>]*> nop ++0000f2d4 <[^>]*> nop ++0000f2d8 <[^>]*> nop ++0000f2dc <[^>]*> nop ++0000f2e0 <[^>]*> nop ++0000f2e4 <[^>]*> nop ++0000f2e8 <[^>]*> nop ++0000f2ec <[^>]*> nop ++0000f2f0 <[^>]*> nop ++0000f2f4 <[^>]*> nop ++0000f2f8 <[^>]*> nop ++0000f2fc <[^>]*> nop ++0000f300 <[^>]*> nop ++0000f304 <[^>]*> nop ++0000f308 <[^>]*> nop ++0000f30c <[^>]*> nop ++0000f310 <[^>]*> nop ++0000f314 <[^>]*> nop ++0000f318 <[^>]*> nop ++0000f31c <[^>]*> nop ++0000f320 <[^>]*> nop ++0000f324 <[^>]*> nop ++0000f328 <[^>]*> nop ++0000f32c <[^>]*> nop ++0000f330 <[^>]*> nop ++0000f334 <[^>]*> nop ++0000f338 <[^>]*> nop ++0000f33c <[^>]*> nop ++0000f340 <[^>]*> nop ++0000f344 <[^>]*> nop ++0000f348 <[^>]*> nop ++0000f34c <[^>]*> nop ++0000f350 <[^>]*> nop ++0000f354 <[^>]*> nop ++0000f358 <[^>]*> nop ++0000f35c <[^>]*> nop ++0000f360 <[^>]*> nop ++0000f364 <[^>]*> nop ++0000f368 <[^>]*> nop ++0000f36c <[^>]*> nop ++0000f370 <[^>]*> nop ++0000f374 <[^>]*> nop ++0000f378 <[^>]*> nop ++0000f37c <[^>]*> nop ++0000f380 <[^>]*> nop ++0000f384 <[^>]*> nop ++0000f388 <[^>]*> nop ++0000f38c <[^>]*> nop ++0000f390 <[^>]*> nop ++0000f394 <[^>]*> nop ++0000f398 <[^>]*> nop ++0000f39c <[^>]*> nop ++0000f3a0 <[^>]*> nop ++0000f3a4 <[^>]*> nop ++0000f3a8 <[^>]*> nop ++0000f3ac <[^>]*> nop ++0000f3b0 <[^>]*> nop ++0000f3b4 <[^>]*> nop ++0000f3b8 <[^>]*> nop ++0000f3bc <[^>]*> nop ++0000f3c0 <[^>]*> nop ++0000f3c4 <[^>]*> nop ++0000f3c8 <[^>]*> nop ++0000f3cc <[^>]*> nop ++0000f3d0 <[^>]*> nop ++0000f3d4 <[^>]*> nop ++0000f3d8 <[^>]*> nop ++0000f3dc <[^>]*> nop ++0000f3e0 <[^>]*> nop ++0000f3e4 <[^>]*> nop ++0000f3e8 <[^>]*> nop ++0000f3ec <[^>]*> nop ++0000f3f0 <[^>]*> nop ++0000f3f4 <[^>]*> nop ++0000f3f8 <[^>]*> nop ++0000f3fc <[^>]*> nop ++0000f400 <[^>]*> nop ++0000f404 <[^>]*> nop ++0000f408 <[^>]*> nop ++0000f40c <[^>]*> nop ++0000f410 <[^>]*> nop ++0000f414 <[^>]*> nop ++0000f418 <[^>]*> nop ++0000f41c <[^>]*> nop ++0000f420 <[^>]*> nop ++0000f424 <[^>]*> nop ++0000f428 <[^>]*> nop ++0000f42c <[^>]*> nop ++0000f430 <[^>]*> nop ++0000f434 <[^>]*> nop ++0000f438 <[^>]*> nop ++0000f43c <[^>]*> nop ++0000f440 <[^>]*> nop ++0000f444 <[^>]*> nop ++0000f448 <[^>]*> nop ++0000f44c <[^>]*> nop ++0000f450 <[^>]*> nop ++0000f454 <[^>]*> nop ++0000f458 <[^>]*> nop ++0000f45c <[^>]*> nop ++0000f460 <[^>]*> nop ++0000f464 <[^>]*> nop ++0000f468 <[^>]*> nop ++0000f46c <[^>]*> nop ++0000f470 <[^>]*> nop ++0000f474 <[^>]*> nop ++0000f478 <[^>]*> nop ++0000f47c <[^>]*> nop ++0000f480 <[^>]*> nop ++0000f484 <[^>]*> nop ++0000f488 <[^>]*> nop ++0000f48c <[^>]*> nop ++0000f490 <[^>]*> nop ++0000f494 <[^>]*> nop ++0000f498 <[^>]*> nop ++0000f49c <[^>]*> nop ++0000f4a0 <[^>]*> nop ++0000f4a4 <[^>]*> nop ++0000f4a8 <[^>]*> nop ++0000f4ac <[^>]*> nop ++0000f4b0 <[^>]*> nop ++0000f4b4 <[^>]*> nop ++0000f4b8 <[^>]*> nop ++0000f4bc <[^>]*> nop ++0000f4c0 <[^>]*> nop ++0000f4c4 <[^>]*> nop ++0000f4c8 <[^>]*> nop ++0000f4cc <[^>]*> nop ++0000f4d0 <[^>]*> nop ++0000f4d4 <[^>]*> nop ++0000f4d8 <[^>]*> nop ++0000f4dc <[^>]*> nop ++0000f4e0 <[^>]*> nop ++0000f4e4 <[^>]*> nop ++0000f4e8 <[^>]*> nop ++0000f4ec <[^>]*> nop ++0000f4f0 <[^>]*> nop ++0000f4f4 <[^>]*> nop ++0000f4f8 <[^>]*> nop ++0000f4fc <[^>]*> nop ++0000f500 <[^>]*> nop ++0000f504 <[^>]*> nop ++0000f508 <[^>]*> nop ++0000f50c <[^>]*> nop ++0000f510 <[^>]*> nop ++0000f514 <[^>]*> nop ++0000f518 <[^>]*> nop ++0000f51c <[^>]*> nop ++0000f520 <[^>]*> nop ++0000f524 <[^>]*> nop ++0000f528 <[^>]*> nop ++0000f52c <[^>]*> nop ++0000f530 <[^>]*> nop ++0000f534 <[^>]*> nop ++0000f538 <[^>]*> nop ++0000f53c <[^>]*> nop ++0000f540 <[^>]*> nop ++0000f544 <[^>]*> nop ++0000f548 <[^>]*> nop ++0000f54c <[^>]*> nop ++0000f550 <[^>]*> nop ++0000f554 <[^>]*> nop ++0000f558 <[^>]*> nop ++0000f55c <[^>]*> nop ++0000f560 <[^>]*> nop ++0000f564 <[^>]*> nop ++0000f568 <[^>]*> nop ++0000f56c <[^>]*> nop ++0000f570 <[^>]*> nop ++0000f574 <[^>]*> nop ++0000f578 <[^>]*> nop ++0000f57c <[^>]*> nop ++0000f580 <[^>]*> nop ++0000f584 <[^>]*> nop ++0000f588 <[^>]*> nop ++0000f58c <[^>]*> nop ++0000f590 <[^>]*> nop ++0000f594 <[^>]*> nop ++0000f598 <[^>]*> nop ++0000f59c <[^>]*> nop ++0000f5a0 <[^>]*> nop ++0000f5a4 <[^>]*> nop ++0000f5a8 <[^>]*> nop ++0000f5ac <[^>]*> nop ++0000f5b0 <[^>]*> nop ++0000f5b4 <[^>]*> nop ++0000f5b8 <[^>]*> nop ++0000f5bc <[^>]*> nop ++0000f5c0 <[^>]*> nop ++0000f5c4 <[^>]*> nop ++0000f5c8 <[^>]*> nop ++0000f5cc <[^>]*> nop ++0000f5d0 <[^>]*> nop ++0000f5d4 <[^>]*> nop ++0000f5d8 <[^>]*> nop ++0000f5dc <[^>]*> nop ++0000f5e0 <[^>]*> nop ++0000f5e4 <[^>]*> nop ++0000f5e8 <[^>]*> nop ++0000f5ec <[^>]*> nop ++0000f5f0 <[^>]*> nop ++0000f5f4 <[^>]*> nop ++0000f5f8 <[^>]*> nop ++0000f5fc <[^>]*> nop ++0000f600 <[^>]*> nop ++0000f604 <[^>]*> nop ++0000f608 <[^>]*> nop ++0000f60c <[^>]*> nop ++0000f610 <[^>]*> nop ++0000f614 <[^>]*> nop ++0000f618 <[^>]*> nop ++0000f61c <[^>]*> nop ++0000f620 <[^>]*> nop ++0000f624 <[^>]*> nop ++0000f628 <[^>]*> nop ++0000f62c <[^>]*> nop ++0000f630 <[^>]*> nop ++0000f634 <[^>]*> nop ++0000f638 <[^>]*> nop ++0000f63c <[^>]*> nop ++0000f640 <[^>]*> nop ++0000f644 <[^>]*> nop ++0000f648 <[^>]*> nop ++0000f64c <[^>]*> nop ++0000f650 <[^>]*> nop ++0000f654 <[^>]*> nop ++0000f658 <[^>]*> nop ++0000f65c <[^>]*> nop ++0000f660 <[^>]*> nop ++0000f664 <[^>]*> nop ++0000f668 <[^>]*> nop ++0000f66c <[^>]*> nop ++0000f670 <[^>]*> nop ++0000f674 <[^>]*> nop ++0000f678 <[^>]*> nop ++0000f67c <[^>]*> nop ++0000f680 <[^>]*> nop ++0000f684 <[^>]*> nop ++0000f688 <[^>]*> nop ++0000f68c <[^>]*> nop ++0000f690 <[^>]*> nop ++0000f694 <[^>]*> nop ++0000f698 <[^>]*> nop ++0000f69c <[^>]*> nop ++0000f6a0 <[^>]*> nop ++0000f6a4 <[^>]*> nop ++0000f6a8 <[^>]*> nop ++0000f6ac <[^>]*> nop ++0000f6b0 <[^>]*> nop ++0000f6b4 <[^>]*> nop ++0000f6b8 <[^>]*> nop ++0000f6bc <[^>]*> nop ++0000f6c0 <[^>]*> nop ++0000f6c4 <[^>]*> nop ++0000f6c8 <[^>]*> nop ++0000f6cc <[^>]*> nop ++0000f6d0 <[^>]*> nop ++0000f6d4 <[^>]*> nop ++0000f6d8 <[^>]*> nop ++0000f6dc <[^>]*> nop ++0000f6e0 <[^>]*> nop ++0000f6e4 <[^>]*> nop ++0000f6e8 <[^>]*> nop ++0000f6ec <[^>]*> nop ++0000f6f0 <[^>]*> nop ++0000f6f4 <[^>]*> nop ++0000f6f8 <[^>]*> nop ++0000f6fc <[^>]*> nop ++0000f700 <[^>]*> nop ++0000f704 <[^>]*> nop ++0000f708 <[^>]*> nop ++0000f70c <[^>]*> nop ++0000f710 <[^>]*> nop ++0000f714 <[^>]*> nop ++0000f718 <[^>]*> nop ++0000f71c <[^>]*> nop ++0000f720 <[^>]*> nop ++0000f724 <[^>]*> nop ++0000f728 <[^>]*> nop ++0000f72c <[^>]*> nop ++0000f730 <[^>]*> nop ++0000f734 <[^>]*> nop ++0000f738 <[^>]*> nop ++0000f73c <[^>]*> nop ++0000f740 <[^>]*> nop ++0000f744 <[^>]*> nop ++0000f748 <[^>]*> nop ++0000f74c <[^>]*> nop ++0000f750 <[^>]*> nop ++0000f754 <[^>]*> nop ++0000f758 <[^>]*> nop ++0000f75c <[^>]*> nop ++0000f760 <[^>]*> nop ++0000f764 <[^>]*> nop ++0000f768 <[^>]*> nop ++0000f76c <[^>]*> nop ++0000f770 <[^>]*> nop ++0000f774 <[^>]*> nop ++0000f778 <[^>]*> nop ++0000f77c <[^>]*> nop ++0000f780 <[^>]*> nop ++0000f784 <[^>]*> nop ++0000f788 <[^>]*> nop ++0000f78c <[^>]*> nop ++0000f790 <[^>]*> nop ++0000f794 <[^>]*> nop ++0000f798 <[^>]*> nop ++0000f79c <[^>]*> nop ++0000f7a0 <[^>]*> nop ++0000f7a4 <[^>]*> nop ++0000f7a8 <[^>]*> nop ++0000f7ac <[^>]*> nop ++0000f7b0 <[^>]*> nop ++0000f7b4 <[^>]*> nop ++0000f7b8 <[^>]*> nop ++0000f7bc <[^>]*> nop ++0000f7c0 <[^>]*> nop ++0000f7c4 <[^>]*> nop ++0000f7c8 <[^>]*> nop ++0000f7cc <[^>]*> nop ++0000f7d0 <[^>]*> nop ++0000f7d4 <[^>]*> nop ++0000f7d8 <[^>]*> nop ++0000f7dc <[^>]*> nop ++0000f7e0 <[^>]*> nop ++0000f7e4 <[^>]*> nop ++0000f7e8 <[^>]*> nop ++0000f7ec <[^>]*> nop ++0000f7f0 <[^>]*> nop ++0000f7f4 <[^>]*> nop ++0000f7f8 <[^>]*> nop ++0000f7fc <[^>]*> nop ++0000f800 <[^>]*> nop ++0000f804 <[^>]*> nop ++0000f808 <[^>]*> nop ++0000f80c <[^>]*> nop ++0000f810 <[^>]*> nop ++0000f814 <[^>]*> nop ++0000f818 <[^>]*> nop ++0000f81c <[^>]*> nop ++0000f820 <[^>]*> nop ++0000f824 <[^>]*> nop ++0000f828 <[^>]*> nop ++0000f82c <[^>]*> nop ++0000f830 <[^>]*> nop ++0000f834 <[^>]*> nop ++0000f838 <[^>]*> nop ++0000f83c <[^>]*> nop ++0000f840 <[^>]*> nop ++0000f844 <[^>]*> nop ++0000f848 <[^>]*> nop ++0000f84c <[^>]*> nop ++0000f850 <[^>]*> nop ++0000f854 <[^>]*> nop ++0000f858 <[^>]*> nop ++0000f85c <[^>]*> nop ++0000f860 <[^>]*> nop ++0000f864 <[^>]*> nop ++0000f868 <[^>]*> nop ++0000f86c <[^>]*> nop ++0000f870 <[^>]*> nop ++0000f874 <[^>]*> nop ++0000f878 <[^>]*> nop ++0000f87c <[^>]*> nop ++0000f880 <[^>]*> nop ++0000f884 <[^>]*> nop ++0000f888 <[^>]*> nop ++0000f88c <[^>]*> nop ++0000f890 <[^>]*> nop ++0000f894 <[^>]*> nop ++0000f898 <[^>]*> nop ++0000f89c <[^>]*> nop ++0000f8a0 <[^>]*> nop ++0000f8a4 <[^>]*> nop ++0000f8a8 <[^>]*> nop ++0000f8ac <[^>]*> nop ++0000f8b0 <[^>]*> nop ++0000f8b4 <[^>]*> nop ++0000f8b8 <[^>]*> nop ++0000f8bc <[^>]*> nop ++0000f8c0 <[^>]*> nop ++0000f8c4 <[^>]*> nop ++0000f8c8 <[^>]*> nop ++0000f8cc <[^>]*> nop ++0000f8d0 <[^>]*> nop ++0000f8d4 <[^>]*> nop ++0000f8d8 <[^>]*> nop ++0000f8dc <[^>]*> nop ++0000f8e0 <[^>]*> nop ++0000f8e4 <[^>]*> nop ++0000f8e8 <[^>]*> nop ++0000f8ec <[^>]*> nop ++0000f8f0 <[^>]*> nop ++0000f8f4 <[^>]*> nop ++0000f8f8 <[^>]*> nop ++0000f8fc <[^>]*> nop ++0000f900 <[^>]*> nop ++0000f904 <[^>]*> nop ++0000f908 <[^>]*> nop ++0000f90c <[^>]*> nop ++0000f910 <[^>]*> nop ++0000f914 <[^>]*> nop ++0000f918 <[^>]*> nop ++0000f91c <[^>]*> nop ++0000f920 <[^>]*> nop ++0000f924 <[^>]*> nop ++0000f928 <[^>]*> nop ++0000f92c <[^>]*> nop ++0000f930 <[^>]*> nop ++0000f934 <[^>]*> nop ++0000f938 <[^>]*> nop ++0000f93c <[^>]*> nop ++0000f940 <[^>]*> nop ++0000f944 <[^>]*> nop ++0000f948 <[^>]*> nop ++0000f94c <[^>]*> nop ++0000f950 <[^>]*> nop ++0000f954 <[^>]*> nop ++0000f958 <[^>]*> nop ++0000f95c <[^>]*> nop ++0000f960 <[^>]*> nop ++0000f964 <[^>]*> nop ++0000f968 <[^>]*> nop ++0000f96c <[^>]*> nop ++0000f970 <[^>]*> nop ++0000f974 <[^>]*> nop ++0000f978 <[^>]*> nop ++0000f97c <[^>]*> nop ++0000f980 <[^>]*> nop ++0000f984 <[^>]*> nop ++0000f988 <[^>]*> nop ++0000f98c <[^>]*> nop ++0000f990 <[^>]*> nop ++0000f994 <[^>]*> nop ++0000f998 <[^>]*> nop ++0000f99c <[^>]*> nop ++0000f9a0 <[^>]*> nop ++0000f9a4 <[^>]*> nop ++0000f9a8 <[^>]*> nop ++0000f9ac <[^>]*> nop ++0000f9b0 <[^>]*> nop ++0000f9b4 <[^>]*> nop ++0000f9b8 <[^>]*> nop ++0000f9bc <[^>]*> nop ++0000f9c0 <[^>]*> nop ++0000f9c4 <[^>]*> nop ++0000f9c8 <[^>]*> nop ++0000f9cc <[^>]*> nop ++0000f9d0 <[^>]*> nop ++0000f9d4 <[^>]*> nop ++0000f9d8 <[^>]*> nop ++0000f9dc <[^>]*> nop ++0000f9e0 <[^>]*> nop ++0000f9e4 <[^>]*> nop ++0000f9e8 <[^>]*> nop ++0000f9ec <[^>]*> nop ++0000f9f0 <[^>]*> nop ++0000f9f4 <[^>]*> nop ++0000f9f8 <[^>]*> nop ++0000f9fc <[^>]*> nop ++0000fa00 <[^>]*> nop ++0000fa04 <[^>]*> nop ++0000fa08 <[^>]*> nop ++0000fa0c <[^>]*> nop ++0000fa10 <[^>]*> nop ++0000fa14 <[^>]*> nop ++0000fa18 <[^>]*> nop ++0000fa1c <[^>]*> nop ++0000fa20 <[^>]*> nop ++0000fa24 <[^>]*> nop ++0000fa28 <[^>]*> nop ++0000fa2c <[^>]*> nop ++0000fa30 <[^>]*> nop ++0000fa34 <[^>]*> nop ++0000fa38 <[^>]*> nop ++0000fa3c <[^>]*> nop ++0000fa40 <[^>]*> nop ++0000fa44 <[^>]*> nop ++0000fa48 <[^>]*> nop ++0000fa4c <[^>]*> nop ++0000fa50 <[^>]*> nop ++0000fa54 <[^>]*> nop ++0000fa58 <[^>]*> nop ++0000fa5c <[^>]*> nop ++0000fa60 <[^>]*> nop ++0000fa64 <[^>]*> nop ++0000fa68 <[^>]*> nop ++0000fa6c <[^>]*> nop ++0000fa70 <[^>]*> nop ++0000fa74 <[^>]*> nop ++0000fa78 <[^>]*> nop ++0000fa7c <[^>]*> nop ++0000fa80 <[^>]*> nop ++0000fa84 <[^>]*> nop ++0000fa88 <[^>]*> nop ++0000fa8c <[^>]*> nop ++0000fa90 <[^>]*> nop ++0000fa94 <[^>]*> nop ++0000fa98 <[^>]*> nop ++0000fa9c <[^>]*> nop ++0000faa0 <[^>]*> nop ++0000faa4 <[^>]*> nop ++0000faa8 <[^>]*> nop ++0000faac <[^>]*> nop ++0000fab0 <[^>]*> nop ++0000fab4 <[^>]*> nop ++0000fab8 <[^>]*> nop ++0000fabc <[^>]*> nop ++0000fac0 <[^>]*> nop ++0000fac4 <[^>]*> nop ++0000fac8 <[^>]*> nop ++0000facc <[^>]*> nop ++0000fad0 <[^>]*> nop ++0000fad4 <[^>]*> nop ++0000fad8 <[^>]*> nop ++0000fadc <[^>]*> nop ++0000fae0 <[^>]*> nop ++0000fae4 <[^>]*> nop ++0000fae8 <[^>]*> nop ++0000faec <[^>]*> nop ++0000faf0 <[^>]*> nop ++0000faf4 <[^>]*> nop ++0000faf8 <[^>]*> nop ++0000fafc <[^>]*> nop ++0000fb00 <[^>]*> nop ++0000fb04 <[^>]*> nop ++0000fb08 <[^>]*> nop ++0000fb0c <[^>]*> nop ++0000fb10 <[^>]*> nop ++0000fb14 <[^>]*> nop ++0000fb18 <[^>]*> nop ++0000fb1c <[^>]*> nop ++0000fb20 <[^>]*> nop ++0000fb24 <[^>]*> nop ++0000fb28 <[^>]*> nop ++0000fb2c <[^>]*> nop ++0000fb30 <[^>]*> nop ++0000fb34 <[^>]*> nop ++0000fb38 <[^>]*> nop ++0000fb3c <[^>]*> nop ++0000fb40 <[^>]*> nop ++0000fb44 <[^>]*> nop ++0000fb48 <[^>]*> nop ++0000fb4c <[^>]*> nop ++0000fb50 <[^>]*> nop ++0000fb54 <[^>]*> nop ++0000fb58 <[^>]*> nop ++0000fb5c <[^>]*> nop ++0000fb60 <[^>]*> nop ++0000fb64 <[^>]*> nop ++0000fb68 <[^>]*> nop ++0000fb6c <[^>]*> nop ++0000fb70 <[^>]*> nop ++0000fb74 <[^>]*> nop ++0000fb78 <[^>]*> nop ++0000fb7c <[^>]*> nop ++0000fb80 <[^>]*> nop ++0000fb84 <[^>]*> nop ++0000fb88 <[^>]*> nop ++0000fb8c <[^>]*> nop ++0000fb90 <[^>]*> nop ++0000fb94 <[^>]*> nop ++0000fb98 <[^>]*> nop ++0000fb9c <[^>]*> nop ++0000fba0 <[^>]*> nop ++0000fba4 <[^>]*> nop ++0000fba8 <[^>]*> nop ++0000fbac <[^>]*> nop ++0000fbb0 <[^>]*> nop ++0000fbb4 <[^>]*> nop ++0000fbb8 <[^>]*> nop ++0000fbbc <[^>]*> nop ++0000fbc0 <[^>]*> nop ++0000fbc4 <[^>]*> nop ++0000fbc8 <[^>]*> nop ++0000fbcc <[^>]*> nop ++0000fbd0 <[^>]*> nop ++0000fbd4 <[^>]*> nop ++0000fbd8 <[^>]*> nop ++0000fbdc <[^>]*> nop ++0000fbe0 <[^>]*> nop ++0000fbe4 <[^>]*> nop ++0000fbe8 <[^>]*> nop ++0000fbec <[^>]*> nop ++0000fbf0 <[^>]*> nop ++0000fbf4 <[^>]*> nop ++0000fbf8 <[^>]*> nop ++0000fbfc <[^>]*> nop ++0000fc00 <[^>]*> nop ++0000fc04 <[^>]*> nop ++0000fc08 <[^>]*> nop ++0000fc0c <[^>]*> nop ++0000fc10 <[^>]*> nop ++0000fc14 <[^>]*> nop ++0000fc18 <[^>]*> nop ++0000fc1c <[^>]*> nop ++0000fc20 <[^>]*> nop ++0000fc24 <[^>]*> nop ++0000fc28 <[^>]*> nop ++0000fc2c <[^>]*> nop ++0000fc30 <[^>]*> nop ++0000fc34 <[^>]*> nop ++0000fc38 <[^>]*> nop ++0000fc3c <[^>]*> nop ++0000fc40 <[^>]*> nop ++0000fc44 <[^>]*> nop ++0000fc48 <[^>]*> nop ++0000fc4c <[^>]*> nop ++0000fc50 <[^>]*> nop ++0000fc54 <[^>]*> nop ++0000fc58 <[^>]*> nop ++0000fc5c <[^>]*> nop ++0000fc60 <[^>]*> nop ++0000fc64 <[^>]*> nop ++0000fc68 <[^>]*> nop ++0000fc6c <[^>]*> nop ++0000fc70 <[^>]*> nop ++0000fc74 <[^>]*> nop ++0000fc78 <[^>]*> nop ++0000fc7c <[^>]*> nop ++0000fc80 <[^>]*> nop ++0000fc84 <[^>]*> nop ++0000fc88 <[^>]*> nop ++0000fc8c <[^>]*> nop ++0000fc90 <[^>]*> nop ++0000fc94 <[^>]*> nop ++0000fc98 <[^>]*> nop ++0000fc9c <[^>]*> nop ++0000fca0 <[^>]*> nop ++0000fca4 <[^>]*> nop ++0000fca8 <[^>]*> nop ++0000fcac <[^>]*> nop ++0000fcb0 <[^>]*> nop ++0000fcb4 <[^>]*> nop ++0000fcb8 <[^>]*> nop ++0000fcbc <[^>]*> nop ++0000fcc0 <[^>]*> nop ++0000fcc4 <[^>]*> nop ++0000fcc8 <[^>]*> nop ++0000fccc <[^>]*> nop ++0000fcd0 <[^>]*> nop ++0000fcd4 <[^>]*> nop ++0000fcd8 <[^>]*> nop ++0000fcdc <[^>]*> nop ++0000fce0 <[^>]*> nop ++0000fce4 <[^>]*> nop ++0000fce8 <[^>]*> nop ++0000fcec <[^>]*> nop ++0000fcf0 <[^>]*> nop ++0000fcf4 <[^>]*> nop ++0000fcf8 <[^>]*> nop ++0000fcfc <[^>]*> nop ++0000fd00 <[^>]*> nop ++0000fd04 <[^>]*> nop ++0000fd08 <[^>]*> nop ++0000fd0c <[^>]*> nop ++0000fd10 <[^>]*> nop ++0000fd14 <[^>]*> nop ++0000fd18 <[^>]*> nop ++0000fd1c <[^>]*> nop ++0000fd20 <[^>]*> nop ++0000fd24 <[^>]*> nop ++0000fd28 <[^>]*> nop ++0000fd2c <[^>]*> nop ++0000fd30 <[^>]*> nop ++0000fd34 <[^>]*> nop ++0000fd38 <[^>]*> nop ++0000fd3c <[^>]*> nop ++0000fd40 <[^>]*> nop ++0000fd44 <[^>]*> nop ++0000fd48 <[^>]*> nop ++0000fd4c <[^>]*> nop ++0000fd50 <[^>]*> nop ++0000fd54 <[^>]*> nop ++0000fd58 <[^>]*> nop ++0000fd5c <[^>]*> nop ++0000fd60 <[^>]*> nop ++0000fd64 <[^>]*> nop ++0000fd68 <[^>]*> nop ++0000fd6c <[^>]*> nop ++0000fd70 <[^>]*> nop ++0000fd74 <[^>]*> nop ++0000fd78 <[^>]*> nop ++0000fd7c <[^>]*> nop ++0000fd80 <[^>]*> nop ++0000fd84 <[^>]*> nop ++0000fd88 <[^>]*> nop ++0000fd8c <[^>]*> nop ++0000fd90 <[^>]*> nop ++0000fd94 <[^>]*> nop ++0000fd98 <[^>]*> nop ++0000fd9c <[^>]*> nop ++0000fda0 <[^>]*> nop ++0000fda4 <[^>]*> nop ++0000fda8 <[^>]*> nop ++0000fdac <[^>]*> nop ++0000fdb0 <[^>]*> nop ++0000fdb4 <[^>]*> nop ++0000fdb8 <[^>]*> nop ++0000fdbc <[^>]*> nop ++0000fdc0 <[^>]*> nop ++0000fdc4 <[^>]*> nop ++0000fdc8 <[^>]*> nop ++0000fdcc <[^>]*> nop ++0000fdd0 <[^>]*> nop ++0000fdd4 <[^>]*> nop ++0000fdd8 <[^>]*> nop ++0000fddc <[^>]*> nop ++0000fde0 <[^>]*> nop ++0000fde4 <[^>]*> nop ++0000fde8 <[^>]*> nop ++0000fdec <[^>]*> nop ++0000fdf0 <[^>]*> nop ++0000fdf4 <[^>]*> nop ++0000fdf8 <[^>]*> nop ++0000fdfc <[^>]*> nop ++0000fe00 <[^>]*> nop ++0000fe04 <[^>]*> nop ++0000fe08 <[^>]*> nop ++0000fe0c <[^>]*> nop ++0000fe10 <[^>]*> nop ++0000fe14 <[^>]*> nop ++0000fe18 <[^>]*> nop ++0000fe1c <[^>]*> nop ++0000fe20 <[^>]*> nop ++0000fe24 <[^>]*> nop ++0000fe28 <[^>]*> nop ++0000fe2c <[^>]*> nop ++0000fe30 <[^>]*> nop ++0000fe34 <[^>]*> nop ++0000fe38 <[^>]*> nop ++0000fe3c <[^>]*> nop ++0000fe40 <[^>]*> nop ++0000fe44 <[^>]*> nop ++0000fe48 <[^>]*> nop ++0000fe4c <[^>]*> nop ++0000fe50 <[^>]*> nop ++0000fe54 <[^>]*> nop ++0000fe58 <[^>]*> nop ++0000fe5c <[^>]*> nop ++0000fe60 <[^>]*> nop ++0000fe64 <[^>]*> nop ++0000fe68 <[^>]*> nop ++0000fe6c <[^>]*> nop ++0000fe70 <[^>]*> nop ++0000fe74 <[^>]*> nop ++0000fe78 <[^>]*> nop ++0000fe7c <[^>]*> nop ++0000fe80 <[^>]*> nop ++0000fe84 <[^>]*> nop ++0000fe88 <[^>]*> nop ++0000fe8c <[^>]*> nop ++0000fe90 <[^>]*> nop ++0000fe94 <[^>]*> nop ++0000fe98 <[^>]*> nop ++0000fe9c <[^>]*> nop ++0000fea0 <[^>]*> nop ++0000fea4 <[^>]*> nop ++0000fea8 <[^>]*> nop ++0000feac <[^>]*> nop ++0000feb0 <[^>]*> nop ++0000feb4 <[^>]*> nop ++0000feb8 <[^>]*> nop ++0000febc <[^>]*> nop ++0000fec0 <[^>]*> nop ++0000fec4 <[^>]*> nop ++0000fec8 <[^>]*> nop ++0000fecc <[^>]*> nop ++0000fed0 <[^>]*> nop ++0000fed4 <[^>]*> nop ++0000fed8 <[^>]*> nop ++0000fedc <[^>]*> nop ++0000fee0 <[^>]*> nop ++0000fee4 <[^>]*> nop ++0000fee8 <[^>]*> nop ++0000feec <[^>]*> nop ++0000fef0 <[^>]*> nop ++0000fef4 <[^>]*> nop ++0000fef8 <[^>]*> nop ++0000fefc <[^>]*> nop ++0000ff00 <[^>]*> nop ++0000ff04 <[^>]*> nop ++0000ff08 <[^>]*> nop ++0000ff0c <[^>]*> nop ++0000ff10 <[^>]*> nop ++0000ff14 <[^>]*> nop ++0000ff18 <[^>]*> nop ++0000ff1c <[^>]*> nop ++0000ff20 <[^>]*> nop ++0000ff24 <[^>]*> nop ++0000ff28 <[^>]*> nop ++0000ff2c <[^>]*> nop ++0000ff30 <[^>]*> nop ++0000ff34 <[^>]*> nop ++0000ff38 <[^>]*> nop ++0000ff3c <[^>]*> nop ++0000ff40 <[^>]*> nop ++0000ff44 <[^>]*> nop ++0000ff48 <[^>]*> nop ++0000ff4c <[^>]*> nop ++0000ff50 <[^>]*> nop ++0000ff54 <[^>]*> nop ++0000ff58 <[^>]*> nop ++0000ff5c <[^>]*> nop ++0000ff60 <[^>]*> nop ++0000ff64 <[^>]*> nop ++0000ff68 <[^>]*> nop ++0000ff6c <[^>]*> nop ++0000ff70 <[^>]*> nop ++0000ff74 <[^>]*> nop ++0000ff78 <[^>]*> nop ++0000ff7c <[^>]*> nop ++0000ff80 <[^>]*> nop ++0000ff84 <[^>]*> nop ++0000ff88 <[^>]*> nop ++0000ff8c <[^>]*> nop ++0000ff90 <[^>]*> nop ++0000ff94 <[^>]*> nop ++0000ff98 <[^>]*> nop ++0000ff9c <[^>]*> nop ++0000ffa0 <[^>]*> nop ++0000ffa4 <[^>]*> nop ++0000ffa8 <[^>]*> nop ++0000ffac <[^>]*> nop ++0000ffb0 <[^>]*> nop ++0000ffb4 <[^>]*> nop ++0000ffb8 <[^>]*> nop ++0000ffbc <[^>]*> nop ++0000ffc0 <[^>]*> nop ++0000ffc4 <[^>]*> nop ++0000ffc8 <[^>]*> nop ++0000ffcc <[^>]*> nop ++0000ffd0 <[^>]*> nop ++0000ffd4 <[^>]*> nop ++0000ffd8 <[^>]*> nop ++0000ffdc <[^>]*> nop ++0000ffe0 <[^>]*> nop ++0000ffe4 <[^>]*> nop ++0000ffe8 <[^>]*> nop ++0000ffec <[^>]*> nop ++0000fff0 <[^>]*> nop ++0000fff4 <[^>]*> nop ++0000fff8 <[^>]*> nop ++0000fffc <[^>]*> nop ++00010000 <[^>]*> br 00010018 <[^>]*> ++00010004 <[^>]*> nop ++00010008 <[^>]*> nop ++0001000c <[^>]*> nop ++00010010 <[^>]*> nop ++00010014 <[^>]*> nop ++00010018 <[^>]*> nop ++ ... +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/relax_ujmp.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/relax_ujmp.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,37 @@ ++# relaxing unconditional jumps ++ ++.globl text1 ++.section text1, "ax", @progbits ++ ++ br on_border ++ br out_of_range ++ nop ++ nop ++ ++ ++.align 15 ++# nop ++# nop ++on_border: ++ br in_range ++ nop ++ nop ++ nop ++out_of_range: ++in_range: ++ nop ++ ++.globl text2 ++.section text2, "ax", @progbits ++ ++ br text1 ++ br out_of_range ++ br sym ++ nop ++ nop ++sym: ++ nop ++ ++ ++ ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/reloc_symbols.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/reloc_symbols.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,21 @@ ++.text ++# byte aligned ++.align 0 ++.byte byte_sym ++ ++# short aligned ++.align 1 ++.short short_sym ++ ++# word aligned ++.align 2 ++.long long_sym ++ ++# now lets try some unaligned words and halfwords ++.byte byte_sym ++.2byte short_sym ++.4byte long_sym ++ ++#.align 2 ++#nop ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/ret.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/ret.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,8 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 ret ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> ret ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/ret.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/ret.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,5 @@ ++# Source file used to test the ret instructions ++foo: ++ ret ++ ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/rol.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/rol.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,40 @@ ++#objdump: -dr --prefix-addresses -mmips:3000 ++#as: -march=r3000 -mtune=r3000 ++#name: MIPS R3000 rol ++ ++# Test the rol and ror macros. ++ ++.*: +file format .*mips.* ++ ++Disassembly of section .text: ++0+0000 <[^>]*> negu at,a1 ++0+0004 <[^>]*> srlv at,a0,at ++0+0008 <[^>]*> sllv a0,a0,a1 ++0+000c <[^>]*> or a0,a0,at ++0+0010 <[^>]*> negu at,a2 ++0+0014 <[^>]*> srlv at,a1,at ++0+0018 <[^>]*> sllv a0,a1,a2 ++0+001c <[^>]*> or a0,a0,at ++0+0020 <[^>]*> sll at,a0,0x1 ++0+0024 <[^>]*> srl a0,a0,0x1f ++0+0028 <[^>]*> or a0,a0,at ++0+002c <[^>]*> sll at,a1,0x1 ++0+0030 <[^>]*> srl a0,a1,0x1f ++0+0034 <[^>]*> or a0,a0,at ++0+0038 <[^>]*> srl a0,a1,0x0 ++0+003c <[^>]*> negu at,a1 ++0+0040 <[^>]*> sllv at,a0,at ++0+0044 <[^>]*> srlv a0,a0,a1 ++0+0048 <[^>]*> or a0,a0,at ++0+004c <[^>]*> negu at,a2 ++0+0050 <[^>]*> sllv at,a1,at ++0+0054 <[^>]*> srlv a0,a1,a2 ++0+0058 <[^>]*> or a0,a0,at ++0+005c <[^>]*> srl at,a0,0x1 ++0+0060 <[^>]*> sll a0,a0,0x1f ++0+0064 <[^>]*> or a0,a0,at ++0+0068 <[^>]*> srl at,a1,0x1 ++0+006c <[^>]*> sll a0,a1,0x1f ++0+0070 <[^>]*> or a0,a0,at ++0+0074 <[^>]*> srl a0,a1,0x0 ++ ... +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/rol.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/rol.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,15 @@ ++# Source file used to test the rol and ror macros. ++ ++foo: ++ rol $4,$5 ++ rol $4,$5,$6 ++ rol $4,1 ++ rol $4,$5,1 ++ rol $4,$5,0 ++ ++ ror $4,$5 ++ ror $4,$5,$6 ++ ror $4,1 ++ ror $4,$5,1 ++ ror $4,$5,0 ++ .space 8 +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/rotate.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/rotate.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,17 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 rotate ++ ++# Test the and macro. ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> rol r4,r4,r4 ++0+0004 <[^>]*> roli r4,r4,31 ++0+0008 <[^>]*> ror r4,r4,r4 ++0+000c <[^>]*> sll r4,r4,r4 ++0+0010 <[^>]*> slli r4,r4,24 ++0+0014 <[^>]*> sra r4,r4,r4 ++0+0018 <[^>]*> srai r4,r4,10 ++0+001c <[^>]*> srl r4,r4,r4 ++0+0020 <[^>]*> srli r4,r4,5 +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/rotate.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/rotate.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,13 @@ ++# test New Jersey rotate instructions ++ ++.text ++foo: ++ rol r4,r4,r4 ++ roli r4,r4,31 ++ ror r4,r4,r4 ++ sll r4,r4,r4 ++ slli r4,r4,24 ++ sra r4,r4,r4 ++ srai r4,r4,10 ++ srl r4,r4,r4 ++ srli r4,r4,5 +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/s16_symbol.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/s16_symbol.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,10 @@ ++.global some_sym ++.global some_other_sym ++.global min ++.global max ++ ++.set max, 0x7fff ++.set min, -0x8000 ++.set some_sym, 0x1000 ++ ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/stb.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/stb.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,196 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 stb ++ ++# Test the ld instruction ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> stb r4,0\(zero\) ++0+0004 <[^>]*> stb r4,4\(zero\) ++0+0008 <[^>]*> stb r4,32764\(zero\) ++0+000c <[^>]*> stb r4,-32768\(zero\) ++0+0010 <[^>]*> stb r4,0\(r5\) ++0+0014 <[^>]*> stb r4,4\(r5\) ++0+0018 <[^>]*> stb r4,32764\(r5\) ++0+001c <[^>]*> stb r4,-32768\(r5\) ++0+0020 <[^>]*> stb r4,0\(zero\) ++[ ]*20: R_NIOS2_S16 .data ++0+0024 <[^>]*> stb r4,0\(zero\) ++[ ]*24: R_NIOS2_S16 big_external_data_label ++0+0028 <[^>]*> stb r4,0\(zero\) ++[ ]*28: R_NIOS2_S16 small_external_data_label ++0+002c <[^>]*> stb r4,0\(zero\) ++[ ]*2c: R_NIOS2_S16 big_external_common ++0+0030 <[^>]*> stb r4,0\(zero\) ++[ ]*30: R_NIOS2_S16 small_external_common ++0+0034 <[^>]*> stb r4,0\(zero\) ++[ ]*34: R_NIOS2_S16 .bss ++0+0038 <[^>]*> stb r4,0\(zero\) ++[ ]*38: R_NIOS2_S16 .bss\+0x4000 ++0+003c <[^>]*> stb r4,0\(zero\) ++[ ]*3c: R_NIOS2_S16 .data\+0x4 ++0+0040 <[^>]*> stb r4,0\(zero\) ++[ ]*40: R_NIOS2_S16 big_external_data_label\+0x4 ++0+0044 <[^>]*> stb r4,0\(zero\) ++[ ]*44: R_NIOS2_S16 small_external_data_label\+0x4 ++0+0048 <[^>]*> stb r4,0\(zero\) ++[ ]*48: R_NIOS2_S16 big_external_common\+0x4 ++0+004c <[^>]*> stb r4,0\(zero\) ++[ ]*4c: R_NIOS2_S16 small_external_common\+0x4 ++0+0050 <[^>]*> stb r4,0\(zero\) ++[ ]*50: R_NIOS2_S16 .bss\+0x4 ++0+0054 <[^>]*> stb r4,0\(zero\) ++[ ]*54: R_NIOS2_S16 .bss\+0x4004 ++0+0058 <[^>]*> stb r4,0\(zero\) ++[ ]*58: R_NIOS2_S16 .data\+0xffff8000 ++0+005c <[^>]*> stb r4,0\(zero\) ++[ ]*5c: R_NIOS2_S16 big_external_data_label\+0xffff8000 ++0+0060 <[^>]*> stb r4,0\(zero\) ++[ ]*60: R_NIOS2_S16 small_external_data_label\+0xffff8000 ++0+0064 <[^>]*> stb r4,0\(zero\) ++[ ]*64: R_NIOS2_S16 big_external_common\+0xffff8000 ++0+0068 <[^>]*> stb r4,0\(zero\) ++[ ]*68: R_NIOS2_S16 small_external_common\+0xffff8000 ++0+006c <[^>]*> stb r4,0\(zero\) ++[ ]*6c: R_NIOS2_S16 .bss\+0xffff8000 ++0+0070 <[^>]*> stb r4,0\(zero\) ++[ ]*70: R_NIOS2_S16 .bss\+0xffffc000 ++0+0074 <[^>]*> stb r4,0\(zero\) ++[ ]*74: R_NIOS2_S16 .data\+0x10000 ++0+0078 <[^>]*> stb r4,0\(r5\) ++[ ]*78: R_NIOS2_S16 .data ++0+007c <[^>]*> stb r4,0\(r5\) ++[ ]*7c: R_NIOS2_S16 big_external_data_label ++0+0080 <[^>]*> stb r4,0\(r5\) ++[ ]*80: R_NIOS2_S16 small_external_data_label ++0+0084 <[^>]*> stb r4,0\(r5\) ++[ ]*84: R_NIOS2_S16 big_external_common ++0+0088 <[^>]*> stb r4,0\(r5\) ++[ ]*88: R_NIOS2_S16 small_external_common ++0+008c <[^>]*> stb r4,0\(r5\) ++[ ]*8c: R_NIOS2_S16 .bss ++0+0090 <[^>]*> stb r4,0\(r5\) ++[ ]*90: R_NIOS2_S16 .bss\+0x4000 ++0+0094 <[^>]*> stb r4,0\(r5\) ++[ ]*94: R_NIOS2_S16 .data\+0x4 ++0+0098 <[^>]*> stb r4,0\(r5\) ++[ ]*98: R_NIOS2_S16 big_external_data_label\+0x4 ++0+009c <[^>]*> stb r4,0\(r5\) ++[ ]*9c: R_NIOS2_S16 small_external_data_label\+0x4 ++0+00a0 <[^>]*> stb r4,0\(r5\) ++[ ]*a0: R_NIOS2_S16 big_external_common\+0x4 ++0+00a4 <[^>]*> stb r4,0\(r5\) ++[ ]*a4: R_NIOS2_S16 small_external_common\+0x4 ++0+00a8 <[^>]*> stb r4,0\(r5\) ++[ ]*a8: R_NIOS2_S16 .bss\+0x4 ++0+00ac <[^>]*> stb r4,0\(r5\) ++[ ]*ac: R_NIOS2_S16 .bss\+0x4004 ++0+00b0 <[^>]*> stb r4,0\(r5\) ++[ ]*b0: R_NIOS2_S16 .data\+0xffff8000 ++0+00b4 <[^>]*> stb r4,0\(r5\) ++[ ]*b4: R_NIOS2_S16 big_external_data_label\+0xffff8000 ++0+00b8 <[^>]*> stb r4,0\(r5\) ++[ ]*b8: R_NIOS2_S16 small_external_data_label\+0xffff8000 ++0+00bc <[^>]*> stb r4,0\(r5\) ++[ ]*bc: R_NIOS2_S16 big_external_common\+0xffff8000 ++0+00c0 <[^>]*> stb r4,0\(r5\) ++[ ]*c0: R_NIOS2_S16 small_external_common\+0xffff8000 ++0+00c4 <[^>]*> stb r4,0\(r5\) ++[ ]*c4: R_NIOS2_S16 .bss\+0xffff8000 ++0+00c8 <[^>]*> stb r4,0\(r5\) ++[ ]*c8: R_NIOS2_S16 .bss\+0xffffc000 ++0+00cc <[^>]*> stbio r4,0\(zero\) ++0+00d0 <[^>]*> stbio r4,4\(zero\) ++0+00d4 <[^>]*> stbio r4,32764\(zero\) ++0+00d8 <[^>]*> stbio r4,-32768\(zero\) ++0+00dc <[^>]*> stbio r4,0\(r5\) ++0+00e0 <[^>]*> stbio r4,4\(r5\) ++0+00e4 <[^>]*> stbio r4,32764\(r5\) ++0+00e8 <[^>]*> stbio r4,-32768\(r5\) ++0+00ec <[^>]*> stbio r4,0\(zero\) ++[ ]*ec: R_NIOS2_S16 .data ++0+00f0 <[^>]*> stbio r4,0\(zero\) ++[ ]*f0: R_NIOS2_S16 big_external_data_label ++0+00f4 <[^>]*> stbio r4,0\(zero\) ++[ ]*f4: R_NIOS2_S16 small_external_data_label ++0+00f8 <[^>]*> stbio r4,0\(zero\) ++[ ]*f8: R_NIOS2_S16 big_external_common ++0+00fc <[^>]*> stbio r4,0\(zero\) ++[ ]*fc: R_NIOS2_S16 small_external_common ++0+0100 <[^>]*> stbio r4,0\(zero\) ++[ ]*100: R_NIOS2_S16 .bss ++0+0104 <[^>]*> stbio r4,0\(zero\) ++[ ]*104: R_NIOS2_S16 .bss\+0x4000 ++0+0108 <[^>]*> stbio r4,0\(zero\) ++[ ]*108: R_NIOS2_S16 .data\+0x4 ++0+010c <[^>]*> stbio r4,0\(zero\) ++[ ]*10c: R_NIOS2_S16 big_external_data_label\+0x4 ++0+0110 <[^>]*> stbio r4,0\(zero\) ++[ ]*110: R_NIOS2_S16 small_external_data_label\+0x4 ++0+0114 <[^>]*> stbio r4,0\(zero\) ++[ ]*114: R_NIOS2_S16 big_external_common\+0x4 ++0+0118 <[^>]*> stbio r4,0\(zero\) ++[ ]*118: R_NIOS2_S16 small_external_common\+0x4 ++0+011c <[^>]*> stbio r4,0\(zero\) ++[ ]*11c: R_NIOS2_S16 .bss\+0x4 ++0+0120 <[^>]*> stbio r4,0\(zero\) ++[ ]*120: R_NIOS2_S16 .bss\+0x4004 ++0+0124 <[^>]*> stbio r4,0\(zero\) ++[ ]*124: R_NIOS2_S16 .data\+0xffff8000 ++0+0128 <[^>]*> stbio r4,0\(zero\) ++[ ]*128: R_NIOS2_S16 big_external_data_label\+0xffff8000 ++0+012c <[^>]*> stbio r4,0\(zero\) ++[ ]*12c: R_NIOS2_S16 small_external_data_label\+0xffff8000 ++0+0130 <[^>]*> stbio r4,0\(zero\) ++[ ]*130: R_NIOS2_S16 big_external_common\+0xffff8000 ++0+0134 <[^>]*> stbio r4,0\(zero\) ++[ ]*134: R_NIOS2_S16 small_external_common\+0xffff8000 ++0+0138 <[^>]*> stbio r4,0\(zero\) ++[ ]*138: R_NIOS2_S16 .bss\+0xffff8000 ++0+013c <[^>]*> stbio r4,0\(zero\) ++[ ]*13c: R_NIOS2_S16 .bss\+0xffffc000 ++0+0140 <[^>]*> stbio r4,0\(zero\) ++[ ]*140: R_NIOS2_S16 .data\+0x10000 ++0+0144 <[^>]*> stbio r4,0\(r5\) ++[ ]*144: R_NIOS2_S16 .data ++0+0148 <[^>]*> stbio r4,0\(r5\) ++[ ]*148: R_NIOS2_S16 big_external_data_label ++0+014c <[^>]*> stbio r4,0\(r5\) ++[ ]*14c: R_NIOS2_S16 small_external_data_label ++0+0150 <[^>]*> stbio r4,0\(r5\) ++[ ]*150: R_NIOS2_S16 big_external_common ++0+0154 <[^>]*> stbio r4,0\(r5\) ++[ ]*154: R_NIOS2_S16 small_external_common ++0+0158 <[^>]*> stbio r4,0\(r5\) ++[ ]*158: R_NIOS2_S16 .bss ++0+015c <[^>]*> stbio r4,0\(r5\) ++[ ]*15c: R_NIOS2_S16 .bss\+0x4000 ++0+0160 <[^>]*> stbio r4,0\(r5\) ++[ ]*160: R_NIOS2_S16 .data\+0x4 ++0+0164 <[^>]*> stbio r4,0\(r5\) ++[ ]*164: R_NIOS2_S16 big_external_data_label\+0x4 ++0+0168 <[^>]*> stbio r4,0\(r5\) ++[ ]*168: R_NIOS2_S16 small_external_data_label\+0x4 ++0+016c <[^>]*> stbio r4,0\(r5\) ++[ ]*16c: R_NIOS2_S16 big_external_common\+0x4 ++0+0170 <[^>]*> stbio r4,0\(r5\) ++[ ]*170: R_NIOS2_S16 small_external_common\+0x4 ++0+0174 <[^>]*> stbio r4,0\(r5\) ++[ ]*174: R_NIOS2_S16 .bss\+0x4 ++0+0178 <[^>]*> stbio r4,0\(r5\) ++[ ]*178: R_NIOS2_S16 .bss\+0x4004 ++0+017c <[^>]*> stbio r4,0\(r5\) ++[ ]*17c: R_NIOS2_S16 .data\+0xffff8000 ++0+0180 <[^>]*> stbio r4,0\(r5\) ++[ ]*180: R_NIOS2_S16 big_external_data_label\+0xffff8000 ++0+0184 <[^>]*> stbio r4,0\(r5\) ++[ ]*184: R_NIOS2_S16 small_external_data_label\+0xffff8000 ++0+0188 <[^>]*> stbio r4,0\(r5\) ++[ ]*188: R_NIOS2_S16 big_external_common\+0xffff8000 ++0+018c <[^>]*> stbio r4,0\(r5\) ++[ ]*18c: R_NIOS2_S16 small_external_common\+0xffff8000 ++0+0190 <[^>]*> stbio r4,0\(r5\) ++[ ]*190: R_NIOS2_S16 .bss\+0xffff8000 ++0+0194 <[^>]*> stbio r4,0\(r5\) ++[ ]*194: R_NIOS2_S16 .bss\+0xffffc000 +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/stb.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/stb.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,117 @@ ++ .data ++data_label: ++ .extern big_external_data_label,0x4000 ++ .extern small_external_data_label,4 ++ .comm big_external_common,0x4000 ++ .comm small_external_common,4 ++ .lcomm big_local_common,0x4000 ++ .lcomm small_local_common,4 ++ ++# the small symbols should have space allocated in the sbss section ++# but this is not yet supported in the assembler, so space is allocated ++# in the .bss section and the relocations are not gp-relative. this will ++# be updated when gp-relative relocations are added ++ .text ++ stb r4,0(r0) ++ stb r4,4(r0) ++ stb r4,0x7ffc(r0) ++ stb r4,-0x8000(r0) ++ stb r4,0(r5) ++ stb r4,4(r5) ++ stb r4,0x7ffc(r5) ++ stb r4,-0x8000(r5) ++ stb r4,data_label(r0) ++ stb r4,big_external_data_label(r0) ++ stb r4,small_external_data_label(r0) ++ stb r4,big_external_common(r0) ++ stb r4,small_external_common(r0) ++ stb r4,big_local_common(r0) ++ stb r4,small_local_common(r0) ++ stb r4,data_label+4(r0) ++ stb r4,big_external_data_label+4(r0) ++ stb r4,small_external_data_label+4(r0) ++ stb r4,big_external_common+4(r0) ++ stb r4,small_external_common+4(r0) ++ stb r4,big_local_common+4(r0) ++ stb r4,small_local_common+4(r0) ++ stb r4,data_label-0x8000(r0) ++ stb r4,big_external_data_label-0x8000(r0) ++ stb r4,small_external_data_label-0x8000(r0) ++ stb r4,big_external_common-0x8000(r0) ++ stb r4,small_external_common-0x8000(r0) ++ stb r4,big_local_common-0x8000(r0) ++ stb r4,small_local_common-0x8000(r0) ++ stb r4,data_label+0x10000(r0) ++ stb r4,data_label(r5) ++ stb r4,big_external_data_label(r5) ++ stb r4,small_external_data_label(r5) ++ stb r4,big_external_common(r5) ++ stb r4,small_external_common(r5) ++ stb r4,big_local_common(r5) ++ stb r4,small_local_common(r5) ++ stb r4,data_label+4(r5) ++ stb r4,big_external_data_label+4(r5) ++ stb r4,small_external_data_label+4(r5) ++ stb r4,big_external_common+4(r5) ++ stb r4,small_external_common+4(r5) ++ stb r4,big_local_common+4(r5) ++ stb r4,small_local_common+4(r5) ++ stb r4,data_label-0x8000(r5) ++ stb r4,big_external_data_label-0x8000(r5) ++ stb r4,small_external_data_label-0x8000(r5) ++ stb r4,big_external_common-0x8000(r5) ++ stb r4,small_external_common-0x8000(r5) ++ stb r4,big_local_common-0x8000(r5) ++ stb r4,small_local_common-0x8000(r5) ++ ++ stbio r4,0(r0) ++ stbio r4,4(r0) ++ stbio r4,0x7ffc(r0) ++ stbio r4,-0x8000(r0) ++ stbio r4,0(r5) ++ stbio r4,4(r5) ++ stbio r4,0x7ffc(r5) ++ stbio r4,-0x8000(r5) ++ stbio r4,data_label(r0) ++ stbio r4,big_external_data_label(r0) ++ stbio r4,small_external_data_label(r0) ++ stbio r4,big_external_common(r0) ++ stbio r4,small_external_common(r0) ++ stbio r4,big_local_common(r0) ++ stbio r4,small_local_common(r0) ++ stbio r4,data_label+4(r0) ++ stbio r4,big_external_data_label+4(r0) ++ stbio r4,small_external_data_label+4(r0) ++ stbio r4,big_external_common+4(r0) ++ stbio r4,small_external_common+4(r0) ++ stbio r4,big_local_common+4(r0) ++ stbio r4,small_local_common+4(r0) ++ stbio r4,data_label-0x8000(r0) ++ stbio r4,big_external_data_label-0x8000(r0) ++ stbio r4,small_external_data_label-0x8000(r0) ++ stbio r4,big_external_common-0x8000(r0) ++ stbio r4,small_external_common-0x8000(r0) ++ stbio r4,big_local_common-0x8000(r0) ++ stbio r4,small_local_common-0x8000(r0) ++ stbio r4,data_label+0x10000(r0) ++ stbio r4,data_label(r5) ++ stbio r4,big_external_data_label(r5) ++ stbio r4,small_external_data_label(r5) ++ stbio r4,big_external_common(r5) ++ stbio r4,small_external_common(r5) ++ stbio r4,big_local_common(r5) ++ stbio r4,small_local_common(r5) ++ stbio r4,data_label+4(r5) ++ stbio r4,big_external_data_label+4(r5) ++ stbio r4,small_external_data_label+4(r5) ++ stbio r4,big_external_common+4(r5) ++ stbio r4,small_external_common+4(r5) ++ stbio r4,big_local_common+4(r5) ++ stbio r4,small_local_common+4(r5) ++ stbio r4,data_label-0x8000(r5) ++ stbio r4,big_external_data_label-0x8000(r5) ++ stbio r4,small_external_data_label-0x8000(r5) ++ stbio r4,big_external_common-0x8000(r5) ++ stbio r4,small_external_common-0x8000(r5) ++ stbio r4,big_local_common-0x8000(r5) ++ stbio r4,small_local_common-0x8000(r5) +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/sth.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/sth.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,196 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 sth ++ ++# Test the ld instruction ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> sth r4,0\(zero\) ++0+0004 <[^>]*> sth r4,4\(zero\) ++0+0008 <[^>]*> sth r4,32764\(zero\) ++0+000c <[^>]*> sth r4,-32768\(zero\) ++0+0010 <[^>]*> sth r4,0\(r5\) ++0+0014 <[^>]*> sth r4,4\(r5\) ++0+0018 <[^>]*> sth r4,32764\(r5\) ++0+001c <[^>]*> sth r4,-32768\(r5\) ++0+0020 <[^>]*> sth r4,0\(zero\) ++[ ]*20: R_NIOS2_S16 .data ++0+0024 <[^>]*> sth r4,0\(zero\) ++[ ]*24: R_NIOS2_S16 big_external_data_label ++0+0028 <[^>]*> sth r4,0\(zero\) ++[ ]*28: R_NIOS2_S16 small_external_data_label ++0+002c <[^>]*> sth r4,0\(zero\) ++[ ]*2c: R_NIOS2_S16 big_external_common ++0+0030 <[^>]*> sth r4,0\(zero\) ++[ ]*30: R_NIOS2_S16 small_external_common ++0+0034 <[^>]*> sth r4,0\(zero\) ++[ ]*34: R_NIOS2_S16 .bss ++0+0038 <[^>]*> sth r4,0\(zero\) ++[ ]*38: R_NIOS2_S16 .bss\+0x4000 ++0+003c <[^>]*> sth r4,0\(zero\) ++[ ]*3c: R_NIOS2_S16 .data\+0x4 ++0+0040 <[^>]*> sth r4,0\(zero\) ++[ ]*40: R_NIOS2_S16 big_external_data_label\+0x4 ++0+0044 <[^>]*> sth r4,0\(zero\) ++[ ]*44: R_NIOS2_S16 small_external_data_label\+0x4 ++0+0048 <[^>]*> sth r4,0\(zero\) ++[ ]*48: R_NIOS2_S16 big_external_common\+0x4 ++0+004c <[^>]*> sth r4,0\(zero\) ++[ ]*4c: R_NIOS2_S16 small_external_common\+0x4 ++0+0050 <[^>]*> sth r4,0\(zero\) ++[ ]*50: R_NIOS2_S16 .bss\+0x4 ++0+0054 <[^>]*> sth r4,0\(zero\) ++[ ]*54: R_NIOS2_S16 .bss\+0x4004 ++0+0058 <[^>]*> sth r4,0\(zero\) ++[ ]*58: R_NIOS2_S16 .data\+0xffff8000 ++0+005c <[^>]*> sth r4,0\(zero\) ++[ ]*5c: R_NIOS2_S16 big_external_data_label\+0xffff8000 ++0+0060 <[^>]*> sth r4,0\(zero\) ++[ ]*60: R_NIOS2_S16 small_external_data_label\+0xffff8000 ++0+0064 <[^>]*> sth r4,0\(zero\) ++[ ]*64: R_NIOS2_S16 big_external_common\+0xffff8000 ++0+0068 <[^>]*> sth r4,0\(zero\) ++[ ]*68: R_NIOS2_S16 small_external_common\+0xffff8000 ++0+006c <[^>]*> sth r4,0\(zero\) ++[ ]*6c: R_NIOS2_S16 .bss\+0xffff8000 ++0+0070 <[^>]*> sth r4,0\(zero\) ++[ ]*70: R_NIOS2_S16 .bss\+0xffffc000 ++0+0074 <[^>]*> sth r4,0\(zero\) ++[ ]*74: R_NIOS2_S16 .data\+0x10000 ++0+0078 <[^>]*> sth r4,0\(r5\) ++[ ]*78: R_NIOS2_S16 .data ++0+007c <[^>]*> sth r4,0\(r5\) ++[ ]*7c: R_NIOS2_S16 big_external_data_label ++0+0080 <[^>]*> sth r4,0\(r5\) ++[ ]*80: R_NIOS2_S16 small_external_data_label ++0+0084 <[^>]*> sth r4,0\(r5\) ++[ ]*84: R_NIOS2_S16 big_external_common ++0+0088 <[^>]*> sth r4,0\(r5\) ++[ ]*88: R_NIOS2_S16 small_external_common ++0+008c <[^>]*> sth r4,0\(r5\) ++[ ]*8c: R_NIOS2_S16 .bss ++0+0090 <[^>]*> sth r4,0\(r5\) ++[ ]*90: R_NIOS2_S16 .bss\+0x4000 ++0+0094 <[^>]*> sth r4,0\(r5\) ++[ ]*94: R_NIOS2_S16 .data\+0x4 ++0+0098 <[^>]*> sth r4,0\(r5\) ++[ ]*98: R_NIOS2_S16 big_external_data_label\+0x4 ++0+009c <[^>]*> sth r4,0\(r5\) ++[ ]*9c: R_NIOS2_S16 small_external_data_label\+0x4 ++0+00a0 <[^>]*> sth r4,0\(r5\) ++[ ]*a0: R_NIOS2_S16 big_external_common\+0x4 ++0+00a4 <[^>]*> sth r4,0\(r5\) ++[ ]*a4: R_NIOS2_S16 small_external_common\+0x4 ++0+00a8 <[^>]*> sth r4,0\(r5\) ++[ ]*a8: R_NIOS2_S16 .bss\+0x4 ++0+00ac <[^>]*> sth r4,0\(r5\) ++[ ]*ac: R_NIOS2_S16 .bss\+0x4004 ++0+00b0 <[^>]*> sth r4,0\(r5\) ++[ ]*b0: R_NIOS2_S16 .data\+0xffff8000 ++0+00b4 <[^>]*> sth r4,0\(r5\) ++[ ]*b4: R_NIOS2_S16 big_external_data_label\+0xffff8000 ++0+00b8 <[^>]*> sth r4,0\(r5\) ++[ ]*b8: R_NIOS2_S16 small_external_data_label\+0xffff8000 ++0+00bc <[^>]*> sth r4,0\(r5\) ++[ ]*bc: R_NIOS2_S16 big_external_common\+0xffff8000 ++0+00c0 <[^>]*> sth r4,0\(r5\) ++[ ]*c0: R_NIOS2_S16 small_external_common\+0xffff8000 ++0+00c4 <[^>]*> sth r4,0\(r5\) ++[ ]*c4: R_NIOS2_S16 .bss\+0xffff8000 ++0+00c8 <[^>]*> sth r4,0\(r5\) ++[ ]*c8: R_NIOS2_S16 .bss\+0xffffc000 ++0+00cc <[^>]*> sthio r4,0\(zero\) ++0+00d0 <[^>]*> sthio r4,4\(zero\) ++0+00d4 <[^>]*> sthio r4,32764\(zero\) ++0+00d8 <[^>]*> sthio r4,-32768\(zero\) ++0+00dc <[^>]*> sthio r4,0\(r5\) ++0+00e0 <[^>]*> sthio r4,4\(r5\) ++0+00e4 <[^>]*> sthio r4,32764\(r5\) ++0+00e8 <[^>]*> sthio r4,-32768\(r5\) ++0+00ec <[^>]*> sthio r4,0\(zero\) ++[ ]*ec: R_NIOS2_S16 .data ++0+00f0 <[^>]*> sthio r4,0\(zero\) ++[ ]*f0: R_NIOS2_S16 big_external_data_label ++0+00f4 <[^>]*> sthio r4,0\(zero\) ++[ ]*f4: R_NIOS2_S16 small_external_data_label ++0+00f8 <[^>]*> sthio r4,0\(zero\) ++[ ]*f8: R_NIOS2_S16 big_external_common ++0+00fc <[^>]*> sthio r4,0\(zero\) ++[ ]*fc: R_NIOS2_S16 small_external_common ++0+0100 <[^>]*> sthio r4,0\(zero\) ++[ ]*100: R_NIOS2_S16 .bss ++0+0104 <[^>]*> sthio r4,0\(zero\) ++[ ]*104: R_NIOS2_S16 .bss\+0x4000 ++0+0108 <[^>]*> sthio r4,0\(zero\) ++[ ]*108: R_NIOS2_S16 .data\+0x4 ++0+010c <[^>]*> sthio r4,0\(zero\) ++[ ]*10c: R_NIOS2_S16 big_external_data_label\+0x4 ++0+0110 <[^>]*> sthio r4,0\(zero\) ++[ ]*110: R_NIOS2_S16 small_external_data_label\+0x4 ++0+0114 <[^>]*> sthio r4,0\(zero\) ++[ ]*114: R_NIOS2_S16 big_external_common\+0x4 ++0+0118 <[^>]*> sthio r4,0\(zero\) ++[ ]*118: R_NIOS2_S16 small_external_common\+0x4 ++0+011c <[^>]*> sthio r4,0\(zero\) ++[ ]*11c: R_NIOS2_S16 .bss\+0x4 ++0+0120 <[^>]*> sthio r4,0\(zero\) ++[ ]*120: R_NIOS2_S16 .bss\+0x4004 ++0+0124 <[^>]*> sthio r4,0\(zero\) ++[ ]*124: R_NIOS2_S16 .data\+0xffff8000 ++0+0128 <[^>]*> sthio r4,0\(zero\) ++[ ]*128: R_NIOS2_S16 big_external_data_label\+0xffff8000 ++0+012c <[^>]*> sthio r4,0\(zero\) ++[ ]*12c: R_NIOS2_S16 small_external_data_label\+0xffff8000 ++0+0130 <[^>]*> sthio r4,0\(zero\) ++[ ]*130: R_NIOS2_S16 big_external_common\+0xffff8000 ++0+0134 <[^>]*> sthio r4,0\(zero\) ++[ ]*134: R_NIOS2_S16 small_external_common\+0xffff8000 ++0+0138 <[^>]*> sthio r4,0\(zero\) ++[ ]*138: R_NIOS2_S16 .bss\+0xffff8000 ++0+013c <[^>]*> sthio r4,0\(zero\) ++[ ]*13c: R_NIOS2_S16 .bss\+0xffffc000 ++0+0140 <[^>]*> sthio r4,0\(zero\) ++[ ]*140: R_NIOS2_S16 .data\+0x10000 ++0+0144 <[^>]*> sthio r4,0\(r5\) ++[ ]*144: R_NIOS2_S16 .data ++0+0148 <[^>]*> sthio r4,0\(r5\) ++[ ]*148: R_NIOS2_S16 big_external_data_label ++0+014c <[^>]*> sthio r4,0\(r5\) ++[ ]*14c: R_NIOS2_S16 small_external_data_label ++0+0150 <[^>]*> sthio r4,0\(r5\) ++[ ]*150: R_NIOS2_S16 big_external_common ++0+0154 <[^>]*> sthio r4,0\(r5\) ++[ ]*154: R_NIOS2_S16 small_external_common ++0+0158 <[^>]*> sthio r4,0\(r5\) ++[ ]*158: R_NIOS2_S16 .bss ++0+015c <[^>]*> sthio r4,0\(r5\) ++[ ]*15c: R_NIOS2_S16 .bss\+0x4000 ++0+0160 <[^>]*> sthio r4,0\(r5\) ++[ ]*160: R_NIOS2_S16 .data\+0x4 ++0+0164 <[^>]*> sthio r4,0\(r5\) ++[ ]*164: R_NIOS2_S16 big_external_data_label\+0x4 ++0+0168 <[^>]*> sthio r4,0\(r5\) ++[ ]*168: R_NIOS2_S16 small_external_data_label\+0x4 ++0+016c <[^>]*> sthio r4,0\(r5\) ++[ ]*16c: R_NIOS2_S16 big_external_common\+0x4 ++0+0170 <[^>]*> sthio r4,0\(r5\) ++[ ]*170: R_NIOS2_S16 small_external_common\+0x4 ++0+0174 <[^>]*> sthio r4,0\(r5\) ++[ ]*174: R_NIOS2_S16 .bss\+0x4 ++0+0178 <[^>]*> sthio r4,0\(r5\) ++[ ]*178: R_NIOS2_S16 .bss\+0x4004 ++0+017c <[^>]*> sthio r4,0\(r5\) ++[ ]*17c: R_NIOS2_S16 .data\+0xffff8000 ++0+0180 <[^>]*> sthio r4,0\(r5\) ++[ ]*180: R_NIOS2_S16 big_external_data_label\+0xffff8000 ++0+0184 <[^>]*> sthio r4,0\(r5\) ++[ ]*184: R_NIOS2_S16 small_external_data_label\+0xffff8000 ++0+0188 <[^>]*> sthio r4,0\(r5\) ++[ ]*188: R_NIOS2_S16 big_external_common\+0xffff8000 ++0+018c <[^>]*> sthio r4,0\(r5\) ++[ ]*18c: R_NIOS2_S16 small_external_common\+0xffff8000 ++0+0190 <[^>]*> sthio r4,0\(r5\) ++[ ]*190: R_NIOS2_S16 .bss\+0xffff8000 ++0+0194 <[^>]*> sthio r4,0\(r5\) ++[ ]*194: R_NIOS2_S16 .bss\+0xffffc000 +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/sth.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/sth.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,117 @@ ++ .data ++data_label: ++ .extern big_external_data_label,0x4000 ++ .extern small_external_data_label,4 ++ .comm big_external_common,0x4000 ++ .comm small_external_common,4 ++ .lcomm big_local_common,0x4000 ++ .lcomm small_local_common,4 ++ ++# the small symbols should have space allocated in the sbss section ++# but this is not yet supported in the assembler, so space is allocated ++# in the .bss section and the relocations are not gp-relative. this will ++# be updated when gp-relative relocations are added ++ .text ++ sth r4,0(r0) ++ sth r4,4(r0) ++ sth r4,0x7ffc(r0) ++ sth r4,-0x8000(r0) ++ sth r4,0(r5) ++ sth r4,4(r5) ++ sth r4,0x7ffc(r5) ++ sth r4,-0x8000(r5) ++ sth r4,data_label(r0) ++ sth r4,big_external_data_label(r0) ++ sth r4,small_external_data_label(r0) ++ sth r4,big_external_common(r0) ++ sth r4,small_external_common(r0) ++ sth r4,big_local_common(r0) ++ sth r4,small_local_common(r0) ++ sth r4,data_label+4(r0) ++ sth r4,big_external_data_label+4(r0) ++ sth r4,small_external_data_label+4(r0) ++ sth r4,big_external_common+4(r0) ++ sth r4,small_external_common+4(r0) ++ sth r4,big_local_common+4(r0) ++ sth r4,small_local_common+4(r0) ++ sth r4,data_label-0x8000(r0) ++ sth r4,big_external_data_label-0x8000(r0) ++ sth r4,small_external_data_label-0x8000(r0) ++ sth r4,big_external_common-0x8000(r0) ++ sth r4,small_external_common-0x8000(r0) ++ sth r4,big_local_common-0x8000(r0) ++ sth r4,small_local_common-0x8000(r0) ++ sth r4,data_label+0x10000(r0) ++ sth r4,data_label(r5) ++ sth r4,big_external_data_label(r5) ++ sth r4,small_external_data_label(r5) ++ sth r4,big_external_common(r5) ++ sth r4,small_external_common(r5) ++ sth r4,big_local_common(r5) ++ sth r4,small_local_common(r5) ++ sth r4,data_label+4(r5) ++ sth r4,big_external_data_label+4(r5) ++ sth r4,small_external_data_label+4(r5) ++ sth r4,big_external_common+4(r5) ++ sth r4,small_external_common+4(r5) ++ sth r4,big_local_common+4(r5) ++ sth r4,small_local_common+4(r5) ++ sth r4,data_label-0x8000(r5) ++ sth r4,big_external_data_label-0x8000(r5) ++ sth r4,small_external_data_label-0x8000(r5) ++ sth r4,big_external_common-0x8000(r5) ++ sth r4,small_external_common-0x8000(r5) ++ sth r4,big_local_common-0x8000(r5) ++ sth r4,small_local_common-0x8000(r5) ++ ++ sthio r4,0(r0) ++ sthio r4,4(r0) ++ sthio r4,0x7ffc(r0) ++ sthio r4,-0x8000(r0) ++ sthio r4,0(r5) ++ sthio r4,4(r5) ++ sthio r4,0x7ffc(r5) ++ sthio r4,-0x8000(r5) ++ sthio r4,data_label(r0) ++ sthio r4,big_external_data_label(r0) ++ sthio r4,small_external_data_label(r0) ++ sthio r4,big_external_common(r0) ++ sthio r4,small_external_common(r0) ++ sthio r4,big_local_common(r0) ++ sthio r4,small_local_common(r0) ++ sthio r4,data_label+4(r0) ++ sthio r4,big_external_data_label+4(r0) ++ sthio r4,small_external_data_label+4(r0) ++ sthio r4,big_external_common+4(r0) ++ sthio r4,small_external_common+4(r0) ++ sthio r4,big_local_common+4(r0) ++ sthio r4,small_local_common+4(r0) ++ sthio r4,data_label-0x8000(r0) ++ sthio r4,big_external_data_label-0x8000(r0) ++ sthio r4,small_external_data_label-0x8000(r0) ++ sthio r4,big_external_common-0x8000(r0) ++ sthio r4,small_external_common-0x8000(r0) ++ sthio r4,big_local_common-0x8000(r0) ++ sthio r4,small_local_common-0x8000(r0) ++ sthio r4,data_label+0x10000(r0) ++ sthio r4,data_label(r5) ++ sthio r4,big_external_data_label(r5) ++ sthio r4,small_external_data_label(r5) ++ sthio r4,big_external_common(r5) ++ sthio r4,small_external_common(r5) ++ sthio r4,big_local_common(r5) ++ sthio r4,small_local_common(r5) ++ sthio r4,data_label+4(r5) ++ sthio r4,big_external_data_label+4(r5) ++ sthio r4,small_external_data_label+4(r5) ++ sthio r4,big_external_common+4(r5) ++ sthio r4,small_external_common+4(r5) ++ sthio r4,big_local_common+4(r5) ++ sthio r4,small_local_common+4(r5) ++ sthio r4,data_label-0x8000(r5) ++ sthio r4,big_external_data_label-0x8000(r5) ++ sthio r4,small_external_data_label-0x8000(r5) ++ sthio r4,big_external_common-0x8000(r5) ++ sthio r4,small_external_common-0x8000(r5) ++ sthio r4,big_local_common-0x8000(r5) ++ sthio r4,small_local_common-0x8000(r5) +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/str2.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/str2.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,21 @@ ++ .section .rodata.str1.1,"aMS",@progbits,1 ++.LC0: ++ .string "DHRYSTONE PROGRAM, 3'RD STRING" ++.LC1: ++ .string "COMMON" ++.LC2: ++ .string "DHRYSTONE PROGRAM, 4'TH STRING" ++ ++ .section .text ++ .align 3 ++ .global func2 ++ .type func2, @function ++func2: ++ #movhi r2, %hiadj(.LC0) ++ addi r2, r2, .LC0 ++ #movhi r3, %hiadj(.LC1) ++ addi r3, r3, .LC1 ++ #movhi r4, %hiadj(.LC2) ++ addi r4, r4, .LC2 ++ .size func2, .-func2 ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/stw.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/stw.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,196 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 stw ++ ++# Test the ld instruction ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> stw r4,0\(zero\) ++0+0004 <[^>]*> stw r4,4\(zero\) ++0+0008 <[^>]*> stw r4,32764\(zero\) ++0+000c <[^>]*> stw r4,-32768\(zero\) ++0+0010 <[^>]*> stw r4,0\(r5\) ++0+0014 <[^>]*> stw r4,4\(r5\) ++0+0018 <[^>]*> stw r4,32764\(r5\) ++0+001c <[^>]*> stw r4,-32768\(r5\) ++0+0020 <[^>]*> stw r4,0\(zero\) ++[ ]*20: R_NIOS2_S16 .data ++0+0024 <[^>]*> stw r4,0\(zero\) ++[ ]*24: R_NIOS2_S16 big_external_data_label ++0+0028 <[^>]*> stw r4,0\(zero\) ++[ ]*28: R_NIOS2_S16 small_external_data_label ++0+002c <[^>]*> stw r4,0\(zero\) ++[ ]*2c: R_NIOS2_S16 big_external_common ++0+0030 <[^>]*> stw r4,0\(zero\) ++[ ]*30: R_NIOS2_S16 small_external_common ++0+0034 <[^>]*> stw r4,0\(zero\) ++[ ]*34: R_NIOS2_S16 .bss ++0+0038 <[^>]*> stw r4,0\(zero\) ++[ ]*38: R_NIOS2_S16 .bss\+0x4000 ++0+003c <[^>]*> stw r4,0\(zero\) ++[ ]*3c: R_NIOS2_S16 .data\+0x4 ++0+0040 <[^>]*> stw r4,0\(zero\) ++[ ]*40: R_NIOS2_S16 big_external_data_label\+0x4 ++0+0044 <[^>]*> stw r4,0\(zero\) ++[ ]*44: R_NIOS2_S16 small_external_data_label\+0x4 ++0+0048 <[^>]*> stw r4,0\(zero\) ++[ ]*48: R_NIOS2_S16 big_external_common\+0x4 ++0+004c <[^>]*> stw r4,0\(zero\) ++[ ]*4c: R_NIOS2_S16 small_external_common\+0x4 ++0+0050 <[^>]*> stw r4,0\(zero\) ++[ ]*50: R_NIOS2_S16 .bss\+0x4 ++0+0054 <[^>]*> stw r4,0\(zero\) ++[ ]*54: R_NIOS2_S16 .bss\+0x4004 ++0+0058 <[^>]*> stw r4,0\(zero\) ++[ ]*58: R_NIOS2_S16 .data\+0xffff8000 ++0+005c <[^>]*> stw r4,0\(zero\) ++[ ]*5c: R_NIOS2_S16 big_external_data_label\+0xffff8000 ++0+0060 <[^>]*> stw r4,0\(zero\) ++[ ]*60: R_NIOS2_S16 small_external_data_label\+0xffff8000 ++0+0064 <[^>]*> stw r4,0\(zero\) ++[ ]*64: R_NIOS2_S16 big_external_common\+0xffff8000 ++0+0068 <[^>]*> stw r4,0\(zero\) ++[ ]*68: R_NIOS2_S16 small_external_common\+0xffff8000 ++0+006c <[^>]*> stw r4,0\(zero\) ++[ ]*6c: R_NIOS2_S16 .bss\+0xffff8000 ++0+0070 <[^>]*> stw r4,0\(zero\) ++[ ]*70: R_NIOS2_S16 .bss\+0xffffc000 ++0+0074 <[^>]*> stw r4,0\(zero\) ++[ ]*74: R_NIOS2_S16 .data\+0x10000 ++0+0078 <[^>]*> stw r4,0\(r5\) ++[ ]*78: R_NIOS2_S16 .data ++0+007c <[^>]*> stw r4,0\(r5\) ++[ ]*7c: R_NIOS2_S16 big_external_data_label ++0+0080 <[^>]*> stw r4,0\(r5\) ++[ ]*80: R_NIOS2_S16 small_external_data_label ++0+0084 <[^>]*> stw r4,0\(r5\) ++[ ]*84: R_NIOS2_S16 big_external_common ++0+0088 <[^>]*> stw r4,0\(r5\) ++[ ]*88: R_NIOS2_S16 small_external_common ++0+008c <[^>]*> stw r4,0\(r5\) ++[ ]*8c: R_NIOS2_S16 .bss ++0+0090 <[^>]*> stw r4,0\(r5\) ++[ ]*90: R_NIOS2_S16 .bss\+0x4000 ++0+0094 <[^>]*> stw r4,0\(r5\) ++[ ]*94: R_NIOS2_S16 .data\+0x4 ++0+0098 <[^>]*> stw r4,0\(r5\) ++[ ]*98: R_NIOS2_S16 big_external_data_label\+0x4 ++0+009c <[^>]*> stw r4,0\(r5\) ++[ ]*9c: R_NIOS2_S16 small_external_data_label\+0x4 ++0+00a0 <[^>]*> stw r4,0\(r5\) ++[ ]*a0: R_NIOS2_S16 big_external_common\+0x4 ++0+00a4 <[^>]*> stw r4,0\(r5\) ++[ ]*a4: R_NIOS2_S16 small_external_common\+0x4 ++0+00a8 <[^>]*> stw r4,0\(r5\) ++[ ]*a8: R_NIOS2_S16 .bss\+0x4 ++0+00ac <[^>]*> stw r4,0\(r5\) ++[ ]*ac: R_NIOS2_S16 .bss\+0x4004 ++0+00b0 <[^>]*> stw r4,0\(r5\) ++[ ]*b0: R_NIOS2_S16 .data\+0xffff8000 ++0+00b4 <[^>]*> stw r4,0\(r5\) ++[ ]*b4: R_NIOS2_S16 big_external_data_label\+0xffff8000 ++0+00b8 <[^>]*> stw r4,0\(r5\) ++[ ]*b8: R_NIOS2_S16 small_external_data_label\+0xffff8000 ++0+00bc <[^>]*> stw r4,0\(r5\) ++[ ]*bc: R_NIOS2_S16 big_external_common\+0xffff8000 ++0+00c0 <[^>]*> stw r4,0\(r5\) ++[ ]*c0: R_NIOS2_S16 small_external_common\+0xffff8000 ++0+00c4 <[^>]*> stw r4,0\(r5\) ++[ ]*c4: R_NIOS2_S16 .bss\+0xffff8000 ++0+00c8 <[^>]*> stw r4,0\(r5\) ++[ ]*c8: R_NIOS2_S16 .bss\+0xffffc000 ++0+00cc <[^>]*> stwio r4,0\(zero\) ++0+00d0 <[^>]*> stwio r4,4\(zero\) ++0+00d4 <[^>]*> stwio r4,32764\(zero\) ++0+00d8 <[^>]*> stwio r4,-32768\(zero\) ++0+00dc <[^>]*> stwio r4,0\(r5\) ++0+00e0 <[^>]*> stwio r4,4\(r5\) ++0+00e4 <[^>]*> stwio r4,32764\(r5\) ++0+00e8 <[^>]*> stwio r4,-32768\(r5\) ++0+00ec <[^>]*> stwio r4,0\(zero\) ++[ ]*ec: R_NIOS2_S16 .data ++0+00f0 <[^>]*> stwio r4,0\(zero\) ++[ ]*f0: R_NIOS2_S16 big_external_data_label ++0+00f4 <[^>]*> stwio r4,0\(zero\) ++[ ]*f4: R_NIOS2_S16 small_external_data_label ++0+00f8 <[^>]*> stwio r4,0\(zero\) ++[ ]*f8: R_NIOS2_S16 big_external_common ++0+00fc <[^>]*> stwio r4,0\(zero\) ++[ ]*fc: R_NIOS2_S16 small_external_common ++0+0100 <[^>]*> stwio r4,0\(zero\) ++[ ]*100: R_NIOS2_S16 .bss ++0+0104 <[^>]*> stwio r4,0\(zero\) ++[ ]*104: R_NIOS2_S16 .bss\+0x4000 ++0+0108 <[^>]*> stwio r4,0\(zero\) ++[ ]*108: R_NIOS2_S16 .data\+0x4 ++0+010c <[^>]*> stwio r4,0\(zero\) ++[ ]*10c: R_NIOS2_S16 big_external_data_label\+0x4 ++0+0110 <[^>]*> stwio r4,0\(zero\) ++[ ]*110: R_NIOS2_S16 small_external_data_label\+0x4 ++0+0114 <[^>]*> stwio r4,0\(zero\) ++[ ]*114: R_NIOS2_S16 big_external_common\+0x4 ++0+0118 <[^>]*> stwio r4,0\(zero\) ++[ ]*118: R_NIOS2_S16 small_external_common\+0x4 ++0+011c <[^>]*> stwio r4,0\(zero\) ++[ ]*11c: R_NIOS2_S16 .bss\+0x4 ++0+0120 <[^>]*> stwio r4,0\(zero\) ++[ ]*120: R_NIOS2_S16 .bss\+0x4004 ++0+0124 <[^>]*> stwio r4,0\(zero\) ++[ ]*124: R_NIOS2_S16 .data\+0xffff8000 ++0+0128 <[^>]*> stwio r4,0\(zero\) ++[ ]*128: R_NIOS2_S16 big_external_data_label\+0xffff8000 ++0+012c <[^>]*> stwio r4,0\(zero\) ++[ ]*12c: R_NIOS2_S16 small_external_data_label\+0xffff8000 ++0+0130 <[^>]*> stwio r4,0\(zero\) ++[ ]*130: R_NIOS2_S16 big_external_common\+0xffff8000 ++0+0134 <[^>]*> stwio r4,0\(zero\) ++[ ]*134: R_NIOS2_S16 small_external_common\+0xffff8000 ++0+0138 <[^>]*> stwio r4,0\(zero\) ++[ ]*138: R_NIOS2_S16 .bss\+0xffff8000 ++0+013c <[^>]*> stwio r4,0\(zero\) ++[ ]*13c: R_NIOS2_S16 .bss\+0xffffc000 ++0+0140 <[^>]*> stwio r4,0\(zero\) ++[ ]*140: R_NIOS2_S16 .data\+0x10000 ++0+0144 <[^>]*> stwio r4,0\(r5\) ++[ ]*144: R_NIOS2_S16 .data ++0+0148 <[^>]*> stwio r4,0\(r5\) ++[ ]*148: R_NIOS2_S16 big_external_data_label ++0+014c <[^>]*> stwio r4,0\(r5\) ++[ ]*14c: R_NIOS2_S16 small_external_data_label ++0+0150 <[^>]*> stwio r4,0\(r5\) ++[ ]*150: R_NIOS2_S16 big_external_common ++0+0154 <[^>]*> stwio r4,0\(r5\) ++[ ]*154: R_NIOS2_S16 small_external_common ++0+0158 <[^>]*> stwio r4,0\(r5\) ++[ ]*158: R_NIOS2_S16 .bss ++0+015c <[^>]*> stwio r4,0\(r5\) ++[ ]*15c: R_NIOS2_S16 .bss\+0x4000 ++0+0160 <[^>]*> stwio r4,0\(r5\) ++[ ]*160: R_NIOS2_S16 .data\+0x4 ++0+0164 <[^>]*> stwio r4,0\(r5\) ++[ ]*164: R_NIOS2_S16 big_external_data_label\+0x4 ++0+0168 <[^>]*> stwio r4,0\(r5\) ++[ ]*168: R_NIOS2_S16 small_external_data_label\+0x4 ++0+016c <[^>]*> stwio r4,0\(r5\) ++[ ]*16c: R_NIOS2_S16 big_external_common\+0x4 ++0+0170 <[^>]*> stwio r4,0\(r5\) ++[ ]*170: R_NIOS2_S16 small_external_common\+0x4 ++0+0174 <[^>]*> stwio r4,0\(r5\) ++[ ]*174: R_NIOS2_S16 .bss\+0x4 ++0+0178 <[^>]*> stwio r4,0\(r5\) ++[ ]*178: R_NIOS2_S16 .bss\+0x4004 ++0+017c <[^>]*> stwio r4,0\(r5\) ++[ ]*17c: R_NIOS2_S16 .data\+0xffff8000 ++0+0180 <[^>]*> stwio r4,0\(r5\) ++[ ]*180: R_NIOS2_S16 big_external_data_label\+0xffff8000 ++0+0184 <[^>]*> stwio r4,0\(r5\) ++[ ]*184: R_NIOS2_S16 small_external_data_label\+0xffff8000 ++0+0188 <[^>]*> stwio r4,0\(r5\) ++[ ]*188: R_NIOS2_S16 big_external_common\+0xffff8000 ++0+018c <[^>]*> stwio r4,0\(r5\) ++[ ]*18c: R_NIOS2_S16 small_external_common\+0xffff8000 ++0+0190 <[^>]*> stwio r4,0\(r5\) ++[ ]*190: R_NIOS2_S16 .bss\+0xffff8000 ++0+0194 <[^>]*> stwio r4,0\(r5\) ++[ ]*194: R_NIOS2_S16 .bss\+0xffffc000 +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/stw.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/stw.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,117 @@ ++ .data ++data_label: ++ .extern big_external_data_label,0x4000 ++ .extern small_external_data_label,4 ++ .comm big_external_common,0x4000 ++ .comm small_external_common,4 ++ .lcomm big_local_common,0x4000 ++ .lcomm small_local_common,4 ++ ++# the small symbols should have space allocated in the sbss section ++# but this is not yet supported in the assembler, so space is allocated ++# in the .bss section and the relocations are not gp-relative. this will ++# be updated when gp-relative relocations are added ++ .text ++ stw r4,0(r0) ++ stw r4,4(r0) ++ stw r4,0x7ffc(r0) ++ stw r4,-0x8000(r0) ++ stw r4,0(r5) ++ stw r4,4(r5) ++ stw r4,0x7ffc(r5) ++ stw r4,-0x8000(r5) ++ stw r4,data_label(r0) ++ stw r4,big_external_data_label(r0) ++ stw r4,small_external_data_label(r0) ++ stw r4,big_external_common(r0) ++ stw r4,small_external_common(r0) ++ stw r4,big_local_common(r0) ++ stw r4,small_local_common(r0) ++ stw r4,data_label+4(r0) ++ stw r4,big_external_data_label+4(r0) ++ stw r4,small_external_data_label+4(r0) ++ stw r4,big_external_common+4(r0) ++ stw r4,small_external_common+4(r0) ++ stw r4,big_local_common+4(r0) ++ stw r4,small_local_common+4(r0) ++ stw r4,data_label-0x8000(r0) ++ stw r4,big_external_data_label-0x8000(r0) ++ stw r4,small_external_data_label-0x8000(r0) ++ stw r4,big_external_common-0x8000(r0) ++ stw r4,small_external_common-0x8000(r0) ++ stw r4,big_local_common-0x8000(r0) ++ stw r4,small_local_common-0x8000(r0) ++ stw r4,data_label+0x10000(r0) ++ stw r4,data_label(r5) ++ stw r4,big_external_data_label(r5) ++ stw r4,small_external_data_label(r5) ++ stw r4,big_external_common(r5) ++ stw r4,small_external_common(r5) ++ stw r4,big_local_common(r5) ++ stw r4,small_local_common(r5) ++ stw r4,data_label+4(r5) ++ stw r4,big_external_data_label+4(r5) ++ stw r4,small_external_data_label+4(r5) ++ stw r4,big_external_common+4(r5) ++ stw r4,small_external_common+4(r5) ++ stw r4,big_local_common+4(r5) ++ stw r4,small_local_common+4(r5) ++ stw r4,data_label-0x8000(r5) ++ stw r4,big_external_data_label-0x8000(r5) ++ stw r4,small_external_data_label-0x8000(r5) ++ stw r4,big_external_common-0x8000(r5) ++ stw r4,small_external_common-0x8000(r5) ++ stw r4,big_local_common-0x8000(r5) ++ stw r4,small_local_common-0x8000(r5) ++ ++ stwio r4,0(r0) ++ stwio r4,4(r0) ++ stwio r4,0x7ffc(r0) ++ stwio r4,-0x8000(r0) ++ stwio r4,0(r5) ++ stwio r4,4(r5) ++ stwio r4,0x7ffc(r5) ++ stwio r4,-0x8000(r5) ++ stwio r4,data_label(r0) ++ stwio r4,big_external_data_label(r0) ++ stwio r4,small_external_data_label(r0) ++ stwio r4,big_external_common(r0) ++ stwio r4,small_external_common(r0) ++ stwio r4,big_local_common(r0) ++ stwio r4,small_local_common(r0) ++ stwio r4,data_label+4(r0) ++ stwio r4,big_external_data_label+4(r0) ++ stwio r4,small_external_data_label+4(r0) ++ stwio r4,big_external_common+4(r0) ++ stwio r4,small_external_common+4(r0) ++ stwio r4,big_local_common+4(r0) ++ stwio r4,small_local_common+4(r0) ++ stwio r4,data_label-0x8000(r0) ++ stwio r4,big_external_data_label-0x8000(r0) ++ stwio r4,small_external_data_label-0x8000(r0) ++ stwio r4,big_external_common-0x8000(r0) ++ stwio r4,small_external_common-0x8000(r0) ++ stwio r4,big_local_common-0x8000(r0) ++ stwio r4,small_local_common-0x8000(r0) ++ stwio r4,data_label+0x10000(r0) ++ stwio r4,data_label(r5) ++ stwio r4,big_external_data_label(r5) ++ stwio r4,small_external_data_label(r5) ++ stwio r4,big_external_common(r5) ++ stwio r4,small_external_common(r5) ++ stwio r4,big_local_common(r5) ++ stwio r4,small_local_common(r5) ++ stwio r4,data_label+4(r5) ++ stwio r4,big_external_data_label+4(r5) ++ stwio r4,small_external_data_label+4(r5) ++ stwio r4,big_external_common+4(r5) ++ stwio r4,small_external_common+4(r5) ++ stwio r4,big_local_common+4(r5) ++ stwio r4,small_local_common+4(r5) ++ stwio r4,data_label-0x8000(r5) ++ stwio r4,big_external_data_label-0x8000(r5) ++ stwio r4,small_external_data_label-0x8000(r5) ++ stwio r4,big_external_common-0x8000(r5) ++ stwio r4,small_external_common-0x8000(r5) ++ stwio r4,big_local_common-0x8000(r5) ++ stwio r4,small_local_common-0x8000(r5) +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/sub.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/sub.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,10 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 sub ++ ++# Test the add instruction ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> sub r4,r4,r4 ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/sub.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/sub.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,4 @@ ++# Source file used to test the add and addi instructions. ++ ++foo: ++ sub r4,r4,r4 +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/sync.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/sync.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,8 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 sync ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section \.text: ++0+0000 <foo> sync ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/sync.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/sync.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,5 @@ ++# Source file used to test the sync instructions ++foo: ++ sync ++ ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/trap.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/trap.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,7 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 trap ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> trap +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/trap.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/trap.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,3 @@ ++# Source file used to test the ret instructions ++foo: ++ trap +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/tret.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/tret.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,8 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 tret ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> eret ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/tret.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/tret.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,5 @@ ++# Source file used to test the ret instructions ++foo: ++ eret ++ ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/u16_symbol.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/u16_symbol.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,9 @@ ++.global some_sym ++.global min ++.global max ++ ++.set max, 0xffff ++.set min, 0 ++.set some_sym, 0x1000 ++ ++ +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/warn_noat.l +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/warn_noat.l 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,5 @@ ++.*warn_noat.s: Assembler messages: ++.*warn_noat.s:2: Warning: Register at \(r1\) can sometimes be corrupted by assembler optimizations. ++Use .set noat to turn off those optimizations \(and this warning\). ++.*warn_noat.s:8: Warning: Register at \(r1\) can sometimes be corrupted by assembler optimizations. ++Use .set noat to turn off those optimizations \(and this warning\). +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/warn_noat.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/warn_noat.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,8 @@ ++.set noat, 2 # This should not cause warning for at to be turned off ++add at, r2, r2 ++.set noat # this should turn the warnings off ++add at, r2, r2 ++.set at, 3 # this should not turn the warnings on ++add at, r2, r2 ++.set at # this should turn the warnings on ++add at, r2, r2 +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/warn_nobreak.l +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/warn_nobreak.l 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,9 @@ ++.*warn_nobreak.s: Assembler messages: ++.*warn_nobreak.s:2: Warning: The debugger will corrupt ba \(r30\). If you don't need to debug this ++code then use .set nobreak to turn off this warning. ++.*warn_nobreak.s:3: Warning: The debugger will corrupt bt \(r25\). If you don't need to debug this ++code then use .set nobreak to turn off this warning. ++.*warn_nobreak.s:11: Warning: The debugger will corrupt ba \(r30\). If you don't need to debug this ++code then use .set nobreak to turn off this warning. ++.*warn_nobreak.s:12: Warning: The debugger will corrupt bt \(r25\). If you don't need to debug this ++code then use .set nobreak to turn off this warning. +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/warn_nobreak.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/warn_nobreak.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,12 @@ ++.set nobreak , 2 # This should not cause warning for ba, bt to be turned off ++add ba, r2, r2 ++add bt, r2, r2 ++.set nobreak # this should turn the warnings off ++add ba, r3, r4 ++add bt, r3, r4 ++.set break, 3 # this should not turn the warnings on ++add ba, r3, r4 ++add bt, r3, r4 ++.set break # this should turn the warnings on ++add ba, r3, r4 ++add bt, r3, r4 +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/xor.d +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/xor.d 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,11 @@ ++#objdump: -dr --prefix-addresses ++#name: NIOS2 xor ++ ++# Test the nor instruction ++ ++.*: +file format elf32-littlenios2 ++ ++Disassembly of section .text: ++0+0000 <[^>]*> xor r6,r8,r10 ++0+0004 <[^>]*> xorhi r6,r7,65535 ++0+0008 <[^>]*> xori r6,r7,65535 +Index: binutils-2.17.50.0.12/gas/testsuite/gas/nios2/xor.s +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/gas/testsuite/gas/nios2/xor.s 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,7 @@ ++# Source file used to test the nor instruction ++ ++foo: ++ xor r6,r8,r10 ++ xorhi r6,r7,0xffff ++ xori r6,r7,0xffff ++ +Index: binutils-2.17.50.0.12/include/elf/nios2.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/include/elf/nios2.h 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,90 @@ ++/* NOT ASSIGNED TO FSF. COPYRIGHT ALTERA. */ ++/* Altera New Jersey ELF support for BFD ++ ++ Copyright (C) 2003 ++ by Nigel Gray (ngray@altera.com). ++ ++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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ++ ++/* This file holds definitions specific to the Altera New Jersey ELF ABI. Note ++ that most of this is not actually implemented by BFD. */ ++ ++#ifndef _ELF_NIOS2_H ++#define _ELF_NIOS2_H ++ ++#include "elf/reloc-macros.h" ++ ++/* the order of these numbers must match the order in ++ the elf_nios2_howto_table_rel table for the lookup ++ function to work properly */ ++ ++START_RELOC_NUMBERS (elf_nios2_reloc_type) ++ RELOC_NUMBER (R_NIOS2_NONE, 0) ++ RELOC_NUMBER (R_NIOS2_S16, 1) ++ RELOC_NUMBER (R_NIOS2_U16, 2) ++ RELOC_NUMBER (R_NIOS2_PCREL16, 3) ++ RELOC_NUMBER (R_NIOS2_CALL26, 4) ++ RELOC_NUMBER (R_NIOS2_IMM5, 5) ++ RELOC_NUMBER (R_NIOS2_CACHE_OPX, 6) ++ RELOC_NUMBER (R_NIOS2_IMM6, 7) ++ RELOC_NUMBER (R_NIOS2_IMM8, 8) ++ RELOC_NUMBER (R_NIOS2_HI16, 9) ++ RELOC_NUMBER (R_NIOS2_LO16, 10) ++ RELOC_NUMBER (R_NIOS2_HIADJ16, 11) ++ RELOC_NUMBER (R_NIOS2_BFD_RELOC_32, 12) ++ RELOC_NUMBER (R_NIOS2_BFD_RELOC_16, 13) ++ RELOC_NUMBER (R_NIOS2_BFD_RELOC_8, 14) ++ RELOC_NUMBER (R_NIOS2_GPREL, 15) ++ RELOC_NUMBER (R_NIOS2_GNU_VTINHERIT, 16) ++ RELOC_NUMBER (R_NIOS2_GNU_VTENTRY, 17) ++ RELOC_NUMBER (R_NIOS2_UJMP, 18) ++ RELOC_NUMBER (R_NIOS2_CJMP, 19) ++ RELOC_NUMBER (R_NIOS2_CALLR, 20) ++ RELOC_NUMBER (R_NIOS2_ALIGN, 21) ++ RELOC_NUMBER (R_NIOS2_GOT16, 22) ++ RELOC_NUMBER (R_NIOS2_CALL16, 23) ++ RELOC_NUMBER (R_NIOS2_GOTOFF_LO, 24) ++ RELOC_NUMBER (R_NIOS2_GOTOFF_HA, 25) ++ RELOC_NUMBER (R_NIOS2_PCREL_LO, 26) ++ RELOC_NUMBER (R_NIOS2_PCREL_HA, 27) ++ RELOC_NUMBER (R_NIOS2_TLS_GD16, 28) ++ RELOC_NUMBER (R_NIOS2_TLS_LDM16, 29) ++ RELOC_NUMBER (R_NIOS2_TLS_LDO16, 30) ++ RELOC_NUMBER (R_NIOS2_TLS_IE16, 31) ++ RELOC_NUMBER (R_NIOS2_TLS_LE16, 32) ++ RELOC_NUMBER (R_NIOS2_TLS_DTPMOD, 33) ++ RELOC_NUMBER (R_NIOS2_TLS_DTPREL, 34) ++ RELOC_NUMBER (R_NIOS2_TLS_TPREL, 35) ++ RELOC_NUMBER (R_NIOS2_COPY, 36) ++ RELOC_NUMBER (R_NIOS2_GLOB_DAT, 37) ++ RELOC_NUMBER (R_NIOS2_JUMP_SLOT, 38) ++ RELOC_NUMBER (R_NIOS2_RELATIVE, 39) ++ RELOC_NUMBER (R_NIOS2_GOTOFF, 40) ++ RELOC_NUMBER (R_NIOS2_ILLEGAL, 41) ++END_RELOC_NUMBERS (R_NIOS2_maxext) ++ ++/* Processor specific section flags */ ++ ++/* This is used to mark gp-relative sections */ ++#define SHF_NIOS2_GPREL 0x10000000 ++ ++/* Processor specific dynamic array tags. */ ++ ++/* Address of _gp. */ ++#define DT_NIOS2_GP 0x70000002 ++ ++#endif //_ELF_NIOS2_H +Index: binutils-2.17.50.0.12/include/opcode/nios2-isa.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/include/opcode/nios2-isa.h 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,2144 @@ ++/* ++ * This file defines Nios II instruction set constants. ++ * To include it in assembly code (.S file), define ALT_ASM_SRC ++ * before including this file. ++ * ++ * This file is automatically generated by gen_isa.pl - do not edit ++ */ ++ ++#ifndef _NIOS2_ISA_H_ ++#define _NIOS2_ISA_H_ ++ ++/* OP instruction opcode values (index is OP field) */ ++#define NUM_OP_INSTS 64 ++ ++#ifndef ALT_ASM_SRC ++extern const char* op_names[NUM_OP_INSTS]; ++#endif /* ALT_ASM_SRC */ ++ ++/* OPX instruction opcode values (index is OPX field) */ ++#define NUM_OPX_INSTS 64 ++ ++#ifndef ALT_ASM_SRC ++extern const char* opx_names[NUM_OPX_INSTS]; ++#endif /* ALT_ASM_SRC */ ++ ++/* Constants for instruction fields and ISA */ ++#define BREAK_INST_EXC_ID 7 ++#define CPU_RESET_CAUSE_ID 1 ++#define CPU_RESET_EXC_ID 1 ++#define DIV_ERROR_CAUSE_ID 8 ++#define DIV_ERROR_EXC_ID 10 ++#define EMPTY_SLAVE_DATA_ACCESS_ERROR_CAUSE_ID 30 ++#define EMPTY_SLAVE_DATA_ACCESS_ERROR_EXC_ID 22 ++#define EMPTY_SLAVE_INST_ACCESS_ERROR_CAUSE_ID 29 ++#define EMPTY_SLAVE_INST_ACCESS_ERROR_EXC_ID 21 ++#define HBREAK_EXC_ID 2 ++#define ILLEGAL_INST_CAUSE_ID 5 ++#define ILLEGAL_INST_EXC_ID 6 ++#define MAX_CAUSE_ID 31 ++#define MISALIGNED_DATA_ADDR_CAUSE_ID 6 ++#define MISALIGNED_DATA_ADDR_EXC_ID 8 ++#define MISALIGNED_TARGET_PC_CAUSE_ID 7 ++#define MISALIGNED_TARGET_PC_EXC_ID 9 ++#define MPU_DATA_REGION_VIOLATION_CAUSE_ID 17 ++#define MPU_DATA_REGION_VIOLATION_EXC_ID 20 ++#define MPU_INST_REGION_VIOLATION_CAUSE_ID 16 ++#define MPU_INST_REGION_VIOLATION_EXC_ID 19 ++#define NIOS2_DISPLAY_INST_TRACE 1 ++#define NIOS2_DISPLAY_MEM_TRAFFIC 2 ++#define NONE_EXC_ID 0 ++#define NORM_INTR_CAUSE_ID 2 ++#define NORM_INTR_EXC_ID 3 ++#define NUM_EXC_IDS 24 ++#define READONLY_SLAVE_DATA_ACCESS_ERROR_CAUSE_ID 31 ++#define READONLY_SLAVE_DATA_ACCESS_ERROR_EXC_ID 23 ++#define RECORD_DATA_ADDR 2 ++#define RECORD_NOTHING 0 ++#define RECORD_TARGET_PCB 1 ++#define RESET_CAUSE_ID 0 ++#define SUPERVISOR_DATA_ADDR_CAUSE_ID 11 ++#define SUPERVISOR_DATA_ADDR_EXC_ID 13 ++#define SUPERVISOR_INST_ADDR_CAUSE_ID 9 ++#define SUPERVISOR_INST_ADDR_EXC_ID 11 ++#define SUPERVISOR_INST_CAUSE_ID 10 ++#define SUPERVISOR_INST_EXC_ID 12 ++#define TLB_DATA_MISS_EXC_ID 15 ++#define TLB_INST_MISS_EXC_ID 14 ++#define TLB_MISS_CAUSE_ID 12 ++#define TLB_R_PERM_CAUSE_ID 14 ++#define TLB_R_PERM_EXC_ID 17 ++#define TLB_W_PERM_CAUSE_ID 15 ++#define TLB_W_PERM_EXC_ID 18 ++#define TLB_X_PERM_CAUSE_ID 13 ++#define TLB_X_PERM_EXC_ID 16 ++#define TRAP_INST_CAUSE_ID 3 ++#define TRAP_INST_EXC_ID 4 ++#define UNIMP_INST_CAUSE_ID 4 ++#define UNIMP_INST_EXC_ID 5 ++#define AT_REGNUM 1 ++#define BADADDR_REG_BADDR_LSB 0 ++#define BADADDR_REG_BADDR_MSB 31 ++#define BADADDR_REG_BADDR_SZ 32 ++#define BADADDR_REG_BADDR_MASK 0xffffffff ++#define BADADDR_REG_LSB 0 ++#define BADADDR_REG_MSB 31 ++#define BADADDR_REG_REGNUM 12 ++#define BADADDR_REG_SZ 32 ++#define BADADDR_REG_MASK 0xffffffff ++#define BRETADDR_REGNUM 30 ++#define BSTATUS_REG_LSB 0 ++#define BSTATUS_REG_MMU_LSB 0 ++#define BSTATUS_REG_MMU_MSB 2 ++#define BSTATUS_REG_MMU_SZ 3 ++#define BSTATUS_REG_MMU_MASK 0x7 ++#define BSTATUS_REG_MPU_LSB 0 ++#define BSTATUS_REG_MPU_MSB 1 ++#define BSTATUS_REG_MPU_SZ 2 ++#define BSTATUS_REG_MPU_MASK 0x3 ++#define BSTATUS_REG_MSB 2 ++#define BSTATUS_REG_NO_MMU_LSB 0 ++#define BSTATUS_REG_NO_MMU_MSB 0 ++#define BSTATUS_REG_NO_MMU_SZ 1 ++#define BSTATUS_REG_NO_MMU_MASK 0x1 ++#define BSTATUS_REG_REGNUM 2 ++#define BSTATUS_REG_SZ 3 ++#define BSTATUS_REG_MASK 0x7 ++#define BT_REGNUM 25 ++#define CACHE_MAX_BYTES 65536 ++#define CACHE_MAX_LINE_BYTES 32 ++#define CACHE_MIN_LINE_BYTES 4 ++#define COMPARE_OP_EQ 0x0 ++#define COMPARE_OP_GE 0x1 ++#define COMPARE_OP_LSB 3 ++#define COMPARE_OP_LT 0x2 ++#define COMPARE_OP_MSB 4 ++#define COMPARE_OP_NE 0x3 ++#define COMPARE_OP_SZ 2 ++#define COMPARE_OP_MASK 0x3 ++#define CONFIG_REG_LSB 0 ++#define CONFIG_REG_MSB 0 ++#define CONFIG_REG_PE_LSB 0 ++#define CONFIG_REG_PE_MSB 0 ++#define CONFIG_REG_PE_SZ 1 ++#define CONFIG_REG_PE_MASK 0x1 ++#define CONFIG_REG_REGNUM 13 ++#define CONFIG_REG_SZ 1 ++#define CONFIG_REG_MASK 0x1 ++#define CPUID_REG_LSB 0 ++#define CPUID_REG_MSB 31 ++#define CPUID_REG_REGNUM 5 ++#define CPUID_REG_SZ 32 ++#define CPUID_REG_MASK 0xffffffff ++#define DATAPATH_LOG2_SZ 5 ++#define DATAPATH_LOG2_MASK 0x1f ++#define DATAPATH_LSB 0 ++#define DATAPATH_MSB 31 ++#define DATAPATH_SZ 32 ++#define DATAPATH_MASK 0xffffffff ++#define EMPTY_CRST_IW 127034 ++#define EMPTY_HBREAK_IW 4040762 ++#define EMPTY_INTR_IW 3926074 ++#define EMPTY_NOP_IW 100410 ++#define EMPTY_RET_IW 4160759866 ++#define ERETADDR_REGNUM 29 ++#define ESTATUS_REG_LSB 0 ++#define ESTATUS_REG_MMU_LSB 0 ++#define ESTATUS_REG_MMU_MSB 2 ++#define ESTATUS_REG_MMU_SZ 3 ++#define ESTATUS_REG_MMU_MASK 0x7 ++#define ESTATUS_REG_MPU_LSB 0 ++#define ESTATUS_REG_MPU_MSB 1 ++#define ESTATUS_REG_MPU_SZ 2 ++#define ESTATUS_REG_MPU_MASK 0x3 ++#define ESTATUS_REG_MSB 2 ++#define ESTATUS_REG_NO_MMU_LSB 0 ++#define ESTATUS_REG_NO_MMU_MSB 0 ++#define ESTATUS_REG_NO_MMU_SZ 1 ++#define ESTATUS_REG_NO_MMU_MASK 0x1 ++#define ESTATUS_REG_REGNUM 1 ++#define ESTATUS_REG_SZ 3 ++#define ESTATUS_REG_MASK 0x7 ++#define ET_REGNUM 24 ++#define EXCEPTION_REG_CAUSE_LSB 2 ++#define EXCEPTION_REG_CAUSE_MSB 6 ++#define EXCEPTION_REG_CAUSE_SZ 5 ++#define EXCEPTION_REG_CAUSE_MASK 0x1f ++#define EXCEPTION_REG_LSB 0 ++#define EXCEPTION_REG_MEA_LSB 0 ++#define EXCEPTION_REG_MEA_MSB 0 ++#define EXCEPTION_REG_MEA_SZ 1 ++#define EXCEPTION_REG_MEA_MASK 0x1 ++#define EXCEPTION_REG_MEE_LSB 1 ++#define EXCEPTION_REG_MEE_MSB 1 ++#define EXCEPTION_REG_MEE_SZ 1 ++#define EXCEPTION_REG_MEE_MASK 0x1 ++#define EXCEPTION_REG_MSB 6 ++#define EXCEPTION_REG_REGNUM 7 ++#define EXCEPTION_REG_SZ 7 ++#define EXCEPTION_REG_MASK 0x7f ++#define FP_REGNUM 28 ++#define FSTATUS_REG_REGNUM 11 ++#define GP_REGNUM 26 ++#define IENABLE_REG_LSB 0 ++#define IENABLE_REG_MSB 31 ++#define IENABLE_REG_REGNUM 3 ++#define IENABLE_REG_SZ 32 ++#define IENABLE_REG_MASK 0xffffffff ++#define IPENDING_REG_LSB 0 ++#define IPENDING_REG_MSB 31 ++#define IPENDING_REG_REGNUM 4 ++#define IPENDING_REG_SZ 32 ++#define IPENDING_REG_MASK 0xffffffff ++#define IW_A_LSB 27 ++#define IW_A_MSB 31 ++#define IW_A_SZ 5 ++#define IW_A_MASK 0x1f ++#define IW_B_LSB 22 ++#define IW_B_MSB 26 ++#define IW_B_SZ 5 ++#define IW_B_MASK 0x1f ++#define IW_C_LSB 17 ++#define IW_C_MSB 21 ++#define IW_C_SZ 5 ++#define IW_C_MASK 0x1f ++#define IW_CONTROL_REGNUM_BASE 0 ++#define IW_CONTROL_REGNUM_LSB 6 ++#define IW_CONTROL_REGNUM_MSB 9 ++#define IW_CONTROL_REGNUM_SZ 4 ++#define IW_CONTROL_REGNUM_MASK 0xf ++#define IW_CUSTOM_N_LSB 6 ++#define IW_CUSTOM_N_MSB 13 ++#define IW_CUSTOM_N_SZ 8 ++#define IW_CUSTOM_N_MASK 0xff ++#define IW_CUSTOM_READRA_LSB 16 ++#define IW_CUSTOM_READRA_MSB 16 ++#define IW_CUSTOM_READRA_SZ 1 ++#define IW_CUSTOM_READRA_MASK 0x1 ++#define IW_CUSTOM_READRB_LSB 15 ++#define IW_CUSTOM_READRB_MSB 15 ++#define IW_CUSTOM_READRB_SZ 1 ++#define IW_CUSTOM_READRB_MASK 0x1 ++#define IW_CUSTOM_WRITERC_LSB 14 ++#define IW_CUSTOM_WRITERC_MSB 14 ++#define IW_CUSTOM_WRITERC_SZ 1 ++#define IW_CUSTOM_WRITERC_MASK 0x1 ++#define IW_IMM16_LSB 6 ++#define IW_IMM16_MSB 21 ++#define IW_IMM16_SZ 16 ++#define IW_IMM16_MASK 0xffff ++#define IW_IMM26_LSB 6 ++#define IW_IMM26_MSB 31 ++#define IW_IMM26_SZ 26 ++#define IW_IMM26_MASK 0x3ffffff ++#define IW_MEMSZ_BYTE 0x0 ++#define IW_MEMSZ_HWORD 0x1 ++#define IW_MEMSZ_LSB 3 ++#define IW_MEMSZ_MSB 4 ++#define IW_MEMSZ_SZ 2 ++#define IW_MEMSZ_MASK 0x3 ++#define IW_MEMSZ_WORD_MSB 0x1 ++#define IW_OP_LSB 0 ++#define IW_OP_MSB 5 ++#define IW_OP_SZ 6 ++#define IW_OP_MASK 0x3f ++#define IW_OPX_LSB 11 ++#define IW_OPX_MSB 16 ++#define IW_OPX_SZ 6 ++#define IW_OPX_MASK 0x3f ++#define IW_SHIFT_IMM5_LSB 6 ++#define IW_SHIFT_IMM5_MSB 10 ++#define IW_SHIFT_IMM5_SZ 5 ++#define IW_SHIFT_IMM5_MASK 0x1f ++#define IW_SZ 32 ++#define IW_MASK 0xffffffff ++#define IW_TRAP_BREAK_IMM5_LSB 6 ++#define IW_TRAP_BREAK_IMM5_MSB 10 ++#define IW_TRAP_BREAK_IMM5_SZ 5 ++#define IW_TRAP_BREAK_IMM5_MASK 0x1f ++#define JMP_CALLR_VS_RET_IS_RET 0 ++#define JMP_CALLR_VS_RET_OPX_BIT 3 ++#define LOGIC_OP_AND 0x1 ++#define LOGIC_OP_LSB 3 ++#define LOGIC_OP_MSB 4 ++#define LOGIC_OP_NOR 0x0 ++#define LOGIC_OP_OR 0x2 ++#define LOGIC_OP_SZ 2 ++#define LOGIC_OP_MASK 0x3 ++#define LOGIC_OP_XOR 0x3 ++#define MMU_ADDR_BYPASS_TLB 0x3 ++#define MMU_ADDR_BYPASS_TLB_CACHEABLE 0x0 ++#define MMU_ADDR_BYPASS_TLB_CACHEABLE_LSB 29 ++#define MMU_ADDR_BYPASS_TLB_CACHEABLE_MSB 29 ++#define MMU_ADDR_BYPASS_TLB_CACHEABLE_SZ 1 ++#define MMU_ADDR_BYPASS_TLB_CACHEABLE_MASK 0x1 ++#define MMU_ADDR_BYPASS_TLB_LSB 30 ++#define MMU_ADDR_BYPASS_TLB_MSB 31 ++#define MMU_ADDR_BYPASS_TLB_PADDR_LSB 0 ++#define MMU_ADDR_BYPASS_TLB_PADDR_MSB 28 ++#define MMU_ADDR_BYPASS_TLB_PADDR_SZ 29 ++#define MMU_ADDR_BYPASS_TLB_PADDR_MASK 0x1fffffff ++#define MMU_ADDR_BYPASS_TLB_SZ 2 ++#define MMU_ADDR_BYPASS_TLB_MASK 0x3 ++#define MMU_ADDR_IO_REGION 0x7 ++#define MMU_ADDR_IO_REGION_LSB 29 ++#define MMU_ADDR_IO_REGION_MSB 31 ++#define MMU_ADDR_IO_REGION_SZ 3 ++#define MMU_ADDR_IO_REGION_MASK 0x7 ++#define MMU_ADDR_IO_REGION_VPN 0xe0000 ++#define MMU_ADDR_KERNEL_MMU_REGION 0x2 ++#define MMU_ADDR_KERNEL_MMU_REGION_LSB 30 ++#define MMU_ADDR_KERNEL_MMU_REGION_MSB 31 ++#define MMU_ADDR_KERNEL_MMU_REGION_SZ 2 ++#define MMU_ADDR_KERNEL_MMU_REGION_MASK 0x3 ++#define MMU_ADDR_KERNEL_REGION 0x6 ++#define MMU_ADDR_KERNEL_REGION_INT 6 ++#define MMU_ADDR_KERNEL_REGION_LSB 29 ++#define MMU_ADDR_KERNEL_REGION_MSB 31 ++#define MMU_ADDR_KERNEL_REGION_SZ 3 ++#define MMU_ADDR_KERNEL_REGION_MASK 0x7 ++#define MMU_ADDR_PAGE_OFFSET_LSB 0 ++#define MMU_ADDR_PAGE_OFFSET_MSB 11 ++#define MMU_ADDR_PAGE_OFFSET_SZ 12 ++#define MMU_ADDR_PAGE_OFFSET_MASK 0xfff ++#define MMU_ADDR_PFN_LSB 12 ++#define MMU_ADDR_PFN_MSB 31 ++#define MMU_ADDR_PFN_SZ 20 ++#define MMU_ADDR_PFN_MASK 0xfffff ++#define MMU_ADDR_USER_REGION 0x0 ++#define MMU_ADDR_USER_REGION_LSB 31 ++#define MMU_ADDR_USER_REGION_MSB 31 ++#define MMU_ADDR_USER_REGION_SZ 1 ++#define MMU_ADDR_USER_REGION_MASK 0x1 ++#define MMU_ADDR_VPN_LSB 12 ++#define MMU_ADDR_VPN_MSB 31 ++#define MMU_ADDR_VPN_SZ 20 ++#define MMU_ADDR_VPN_MASK 0xfffff ++#define MPU_DATA_PERM_SUPER_NONE_USER_NONE 0 ++#define MPU_DATA_PERM_SUPER_RD_USER_NONE 1 ++#define MPU_DATA_PERM_SUPER_RD_USER_RD 2 ++#define MPU_DATA_PERM_SUPER_RW_USER_NONE 4 ++#define MPU_DATA_PERM_SUPER_RW_USER_RD 5 ++#define MPU_DATA_PERM_SUPER_RW_USER_RW 6 ++#define MPU_DATA_PERM_SZ 3 ++#define MPU_DATA_PERM_MASK 0x7 ++#define MPU_INST_PERM_SUPER_EXEC_USER_EXEC 2 ++#define MPU_INST_PERM_SUPER_EXEC_USER_NONE 1 ++#define MPU_INST_PERM_SUPER_NONE_USER_NONE 0 ++#define MPU_INST_PERM_SZ 2 ++#define MPU_INST_PERM_MASK 0x3 ++#define MPU_MAX_REGION_SIZE_LOG2 20 ++#define MPU_MAX_REGIONS 32 ++#define MPU_MIN_REGION_SIZE_LOG2 6 ++#define MPU_MIN_REGIONS 1 ++#define MPUACC_REG_C_LSB 5 ++#define MPUACC_REG_C_MSB 5 ++#define MPUACC_REG_C_SZ 1 ++#define MPUACC_REG_C_MASK 0x1 ++#define MPUACC_REG_LIMIT_LSB 6 ++#define MPUACC_REG_LIMIT_MSB 31 ++#define MPUACC_REG_LIMIT_SZ 26 ++#define MPUACC_REG_LIMIT_MASK 0x3ffffff ++#define MPUACC_REG_LSB 0 ++#define MPUACC_REG_MASK_LSB 6 ++#define MPUACC_REG_MASK_MSB 30 ++#define MPUACC_REG_MASK_SZ 25 ++#define MPUACC_REG_MASK_MASK 0x1ffffff ++#define MPUACC_REG_MSB 31 ++#define MPUACC_REG_PERM_LSB 2 ++#define MPUACC_REG_PERM_MSB 4 ++#define MPUACC_REG_PERM_SZ 3 ++#define MPUACC_REG_PERM_MASK 0x7 ++#define MPUACC_REG_RD_LSB 1 ++#define MPUACC_REG_RD_MSB 1 ++#define MPUACC_REG_RD_SZ 1 ++#define MPUACC_REG_RD_MASK 0x1 ++#define MPUACC_REG_REGNUM 15 ++#define MPUACC_REG_RSV1_LSB 31 ++#define MPUACC_REG_RSV1_MSB 31 ++#define MPUACC_REG_RSV1_SZ 1 ++#define MPUACC_REG_RSV1_MASK 0x1 ++#define MPUACC_REG_SZ 32 ++#define MPUACC_REG_MASK 0xffffffff ++#define MPUACC_REG_WR_LSB 0 ++#define MPUACC_REG_WR_MSB 0 ++#define MPUACC_REG_WR_SZ 1 ++#define MPUACC_REG_WR_MASK 0x1 ++#define MPUBASE_REG_BASE_LSB 6 ++#define MPUBASE_REG_BASE_MSB 30 ++#define MPUBASE_REG_BASE_SZ 25 ++#define MPUBASE_REG_BASE_MASK 0x1ffffff ++#define MPUBASE_REG_D_LSB 0 ++#define MPUBASE_REG_D_MSB 0 ++#define MPUBASE_REG_D_SZ 1 ++#define MPUBASE_REG_D_MASK 0x1 ++#define MPUBASE_REG_INDEX_LSB 1 ++#define MPUBASE_REG_INDEX_MSB 5 ++#define MPUBASE_REG_INDEX_SZ 5 ++#define MPUBASE_REG_INDEX_MASK 0x1f ++#define MPUBASE_REG_LSB 0 ++#define MPUBASE_REG_MSB 31 ++#define MPUBASE_REG_REGNUM 14 ++#define MPUBASE_REG_RSV1_LSB 31 ++#define MPUBASE_REG_RSV1_MSB 31 ++#define MPUBASE_REG_RSV1_SZ 1 ++#define MPUBASE_REG_RSV1_MASK 0x1 ++#define MPUBASE_REG_SZ 32 ++#define MPUBASE_REG_MASK 0xffffffff ++#define PTEADDR_REG_LSB 0 ++#define PTEADDR_REG_MSB 31 ++#define PTEADDR_REG_PTBASE_LSB 22 ++#define PTEADDR_REG_PTBASE_MSB 31 ++#define PTEADDR_REG_PTBASE_SZ 10 ++#define PTEADDR_REG_PTBASE_MASK 0x3ff ++#define PTEADDR_REG_REGNUM 8 ++#define PTEADDR_REG_RSV_LSB 0 ++#define PTEADDR_REG_RSV_MSB 1 ++#define PTEADDR_REG_RSV_SZ 2 ++#define PTEADDR_REG_RSV_MASK 0x3 ++#define PTEADDR_REG_SZ 32 ++#define PTEADDR_REG_MASK 0xffffffff ++#define PTEADDR_REG_VPN_LSB 2 ++#define PTEADDR_REG_VPN_MSB 21 ++#define PTEADDR_REG_VPN_SZ 20 ++#define PTEADDR_REG_VPN_MASK 0xfffff ++#define REGNUM_SZ 5 ++#define REGNUM_MASK 0x1f ++#define RETADDR_REGNUM 31 ++#define RF_ADDR_SZ 5 ++#define RF_ADDR_MASK 0x1f ++#define RF_NUM_REG 32 ++#define SIM_REG_LSB 0 ++#define SIM_REG_MSB 2 ++#define SIM_REG_PERF_CNT_CLR_LSB 2 ++#define SIM_REG_PERF_CNT_CLR_MSB 2 ++#define SIM_REG_PERF_CNT_CLR_SZ 1 ++#define SIM_REG_PERF_CNT_CLR_MASK 0x1 ++#define SIM_REG_PERF_CNT_EN_LSB 1 ++#define SIM_REG_PERF_CNT_EN_MSB 1 ++#define SIM_REG_PERF_CNT_EN_SZ 1 ++#define SIM_REG_PERF_CNT_EN_MASK 0x1 ++#define SIM_REG_REGNUM 6 ++#define SIM_REG_SHOW_MMU_REGS_LSB 4 ++#define SIM_REG_SHOW_MMU_REGS_MSB 4 ++#define SIM_REG_SHOW_MMU_REGS_SZ 1 ++#define SIM_REG_SHOW_MMU_REGS_MASK 0x1 ++#define SIM_REG_SHOW_TLB_LSB 3 ++#define SIM_REG_SHOW_TLB_MSB 3 ++#define SIM_REG_SHOW_TLB_SZ 1 ++#define SIM_REG_SHOW_TLB_MASK 0x1 ++#define SIM_REG_STOP_LSB 0 ++#define SIM_REG_STOP_MSB 0 ++#define SIM_REG_STOP_SZ 1 ++#define SIM_REG_STOP_MASK 0x1 ++#define SIM_REG_SZ 3 ++#define SIM_REG_MASK 0x7 ++#define SP_REGNUM 27 ++#define STATUS_REG_EH_LSB 2 ++#define STATUS_REG_EH_MSB 2 ++#define STATUS_REG_EH_SZ 1 ++#define STATUS_REG_EH_MASK 0x1 ++#define STATUS_REG_LSB 0 ++#define STATUS_REG_MMU_LSB 0 ++#define STATUS_REG_MMU_MSB 2 ++#define STATUS_REG_MMU_RSV_LSB 3 ++#define STATUS_REG_MMU_RSV_MSB 31 ++#define STATUS_REG_MMU_RSV_SZ 29 ++#define STATUS_REG_MMU_RSV_MASK 0x1fffffff ++#define STATUS_REG_MMU_SZ 3 ++#define STATUS_REG_MMU_MASK 0x7 ++#define STATUS_REG_MPU_LSB 0 ++#define STATUS_REG_MPU_MSB 1 ++#define STATUS_REG_MPU_RSV_LSB 2 ++#define STATUS_REG_MPU_RSV_MSB 31 ++#define STATUS_REG_MPU_RSV_SZ 30 ++#define STATUS_REG_MPU_RSV_MASK 0x3fffffff ++#define STATUS_REG_MPU_SZ 2 ++#define STATUS_REG_MPU_MASK 0x3 ++#define STATUS_REG_MSB 2 ++#define STATUS_REG_NO_MMU_LSB 0 ++#define STATUS_REG_NO_MMU_MSB 0 ++#define STATUS_REG_NO_MMU_RSV_LSB 1 ++#define STATUS_REG_NO_MMU_RSV_MSB 31 ++#define STATUS_REG_NO_MMU_RSV_SZ 31 ++#define STATUS_REG_NO_MMU_RSV_MASK 0x7fffffff ++#define STATUS_REG_NO_MMU_SZ 1 ++#define STATUS_REG_NO_MMU_MASK 0x1 ++#define STATUS_REG_PIE_LSB 0 ++#define STATUS_REG_PIE_MSB 0 ++#define STATUS_REG_PIE_SZ 1 ++#define STATUS_REG_PIE_MASK 0x1 ++#define STATUS_REG_REGNUM 0 ++#define STATUS_REG_SZ 3 ++#define STATUS_REG_MASK 0x7 ++#define STATUS_REG_U_LSB 1 ++#define STATUS_REG_U_MSB 1 ++#define STATUS_REG_U_SZ 1 ++#define STATUS_REG_U_MASK 0x1 ++#define TLB_MAX_ENTRIES 1024 ++#define TLB_MAX_LINES 128 ++#define TLB_MAX_PID_SZ 14 ++#define TLB_MAX_PID_MASK 0x3fff ++#define TLB_MAX_PTR_SZ 10 ++#define TLB_MAX_PTR_MASK 0x3ff ++#define TLB_MAX_WAYS 16 ++#define TLB_MIN_PID_SZ 8 ++#define TLB_MIN_PID_MASK 0xff ++#define TLB_MIN_PTR_SZ 7 ++#define TLB_MIN_PTR_MASK 0x7f ++#define TLB_MIN_WAYS 8 ++#define TLBACC_REG_C_LSB 24 ++#define TLBACC_REG_C_MSB 24 ++#define TLBACC_REG_C_SZ 1 ++#define TLBACC_REG_C_MASK 0x1 ++#define TLBACC_REG_G_LSB 20 ++#define TLBACC_REG_G_MSB 20 ++#define TLBACC_REG_G_SZ 1 ++#define TLBACC_REG_G_MASK 0x1 ++#define TLBACC_REG_IG_LSB 25 ++#define TLBACC_REG_IG_MSB 31 ++#define TLBACC_REG_IG_SZ 7 ++#define TLBACC_REG_IG_MASK 0x7f ++#define TLBACC_REG_LSB 0 ++#define TLBACC_REG_MSB 24 ++#define TLBACC_REG_PFN_LSB 0 ++#define TLBACC_REG_PFN_MSB 19 ++#define TLBACC_REG_PFN_SZ 20 ++#define TLBACC_REG_PFN_MASK 0xfffff ++#define TLBACC_REG_R_LSB 23 ++#define TLBACC_REG_R_MSB 23 ++#define TLBACC_REG_R_SZ 1 ++#define TLBACC_REG_R_MASK 0x1 ++#define TLBACC_REG_REGNUM 9 ++#define TLBACC_REG_SZ 25 ++#define TLBACC_REG_MASK 0x1ffffff ++#define TLBACC_REG_W_LSB 22 ++#define TLBACC_REG_W_MSB 22 ++#define TLBACC_REG_W_SZ 1 ++#define TLBACC_REG_W_MASK 0x1 ++#define TLBACC_REG_X_LSB 21 ++#define TLBACC_REG_X_MSB 21 ++#define TLBACC_REG_X_SZ 1 ++#define TLBACC_REG_X_MASK 0x1 ++#define TLBMISC_REG_BAD_LSB 2 ++#define TLBMISC_REG_BAD_MSB 2 ++#define TLBMISC_REG_BAD_SZ 1 ++#define TLBMISC_REG_BAD_MASK 0x1 ++#define TLBMISC_REG_D_LSB 0 ++#define TLBMISC_REG_D_MSB 0 ++#define TLBMISC_REG_D_SZ 1 ++#define TLBMISC_REG_D_MASK 0x1 ++#define TLBMISC_REG_DBL_LSB 3 ++#define TLBMISC_REG_DBL_MSB 3 ++#define TLBMISC_REG_DBL_SZ 1 ++#define TLBMISC_REG_DBL_MASK 0x1 ++#define TLBMISC_REG_LSB 0 ++#define TLBMISC_REG_MSB 23 ++#define TLBMISC_REG_PERM_LSB 1 ++#define TLBMISC_REG_PERM_MSB 1 ++#define TLBMISC_REG_PERM_SZ 1 ++#define TLBMISC_REG_PERM_MASK 0x1 ++#define TLBMISC_REG_PID_LSB 4 ++#define TLBMISC_REG_PID_MSB 17 ++#define TLBMISC_REG_PID_SZ 14 ++#define TLBMISC_REG_PID_MASK 0x3fff ++#define TLBMISC_REG_RD_LSB 19 ++#define TLBMISC_REG_RD_MSB 19 ++#define TLBMISC_REG_RD_SZ 1 ++#define TLBMISC_REG_RD_MASK 0x1 ++#define TLBMISC_REG_REGNUM 10 ++#define TLBMISC_REG_RSV1_LSB 24 ++#define TLBMISC_REG_RSV1_MSB 31 ++#define TLBMISC_REG_RSV1_SZ 8 ++#define TLBMISC_REG_RSV1_MASK 0xff ++#define TLBMISC_REG_SZ 24 ++#define TLBMISC_REG_MASK 0xffffff ++#define TLBMISC_REG_WAY_LSB 20 ++#define TLBMISC_REG_WAY_MSB 23 ++#define TLBMISC_REG_WAY_SZ 4 ++#define TLBMISC_REG_WAY_MASK 0xf ++#define TLBMISC_REG_WE_LSB 18 ++#define TLBMISC_REG_WE_MSB 18 ++#define TLBMISC_REG_WE_SZ 1 ++#define TLBMISC_REG_WE_MASK 0x1 ++ ++/* Macros to extract instruction fields */ ++#define GET_IW_A(Iw) \ ++ (((Iw) >> IW_A_LSB) & IW_A_MASK) ++#define SET_IW_A(Iw, Val) \ ++ Iw = (((Iw) & (~(IW_A_MASK << IW_A_LSB))) | \ ++ (((Val) & IW_A_MASK) << IW_A_LSB)) ++#define GET_IW_B(Iw) \ ++ (((Iw) >> IW_B_LSB) & IW_B_MASK) ++#define SET_IW_B(Iw, Val) \ ++ Iw = (((Iw) & (~(IW_B_MASK << IW_B_LSB))) | \ ++ (((Val) & IW_B_MASK) << IW_B_LSB)) ++#define GET_IW_C(Iw) \ ++ (((Iw) >> IW_C_LSB) & IW_C_MASK) ++#define SET_IW_C(Iw, Val) \ ++ Iw = (((Iw) & (~(IW_C_MASK << IW_C_LSB))) | \ ++ (((Val) & IW_C_MASK) << IW_C_LSB)) ++#define GET_IW_CONTROL_REGNUM(Iw) \ ++ (((Iw) >> IW_CONTROL_REGNUM_LSB) & IW_CONTROL_REGNUM_MASK) ++#define SET_IW_CONTROL_REGNUM(Iw, Val) \ ++ Iw = (((Iw) & (~(IW_CONTROL_REGNUM_MASK << IW_CONTROL_REGNUM_LSB))) | \ ++ (((Val) & IW_CONTROL_REGNUM_MASK) << IW_CONTROL_REGNUM_LSB)) ++#define GET_IW_CUSTOM_N(Iw) \ ++ (((Iw) >> IW_CUSTOM_N_LSB) & IW_CUSTOM_N_MASK) ++#define SET_IW_CUSTOM_N(Iw, Val) \ ++ Iw = (((Iw) & (~(IW_CUSTOM_N_MASK << IW_CUSTOM_N_LSB))) | \ ++ (((Val) & IW_CUSTOM_N_MASK) << IW_CUSTOM_N_LSB)) ++#define GET_IW_CUSTOM_READRA(Iw) \ ++ (((Iw) >> IW_CUSTOM_READRA_LSB) & IW_CUSTOM_READRA_MASK) ++#define SET_IW_CUSTOM_READRA(Iw, Val) \ ++ Iw = (((Iw) & (~(IW_CUSTOM_READRA_MASK << IW_CUSTOM_READRA_LSB))) | \ ++ (((Val) & IW_CUSTOM_READRA_MASK) << IW_CUSTOM_READRA_LSB)) ++#define GET_IW_CUSTOM_READRB(Iw) \ ++ (((Iw) >> IW_CUSTOM_READRB_LSB) & IW_CUSTOM_READRB_MASK) ++#define SET_IW_CUSTOM_READRB(Iw, Val) \ ++ Iw = (((Iw) & (~(IW_CUSTOM_READRB_MASK << IW_CUSTOM_READRB_LSB))) | \ ++ (((Val) & IW_CUSTOM_READRB_MASK) << IW_CUSTOM_READRB_LSB)) ++#define GET_IW_CUSTOM_WRITERC(Iw) \ ++ (((Iw) >> IW_CUSTOM_WRITERC_LSB) & IW_CUSTOM_WRITERC_MASK) ++#define SET_IW_CUSTOM_WRITERC(Iw, Val) \ ++ Iw = (((Iw) & (~(IW_CUSTOM_WRITERC_MASK << IW_CUSTOM_WRITERC_LSB))) | \ ++ (((Val) & IW_CUSTOM_WRITERC_MASK) << IW_CUSTOM_WRITERC_LSB)) ++#define GET_IW_IMM16(Iw) \ ++ (((Iw) >> IW_IMM16_LSB) & IW_IMM16_MASK) ++#define SET_IW_IMM16(Iw, Val) \ ++ Iw = (((Iw) & (~(IW_IMM16_MASK << IW_IMM16_LSB))) | \ ++ (((Val) & IW_IMM16_MASK) << IW_IMM16_LSB)) ++#define GET_IW_IMM26(Iw) \ ++ (((Iw) >> IW_IMM26_LSB) & IW_IMM26_MASK) ++#define SET_IW_IMM26(Iw, Val) \ ++ Iw = (((Iw) & (~(IW_IMM26_MASK << IW_IMM26_LSB))) | \ ++ (((Val) & IW_IMM26_MASK) << IW_IMM26_LSB)) ++#define GET_IW_MEMSZ(Iw) \ ++ (((Iw) >> IW_MEMSZ_LSB) & IW_MEMSZ_MASK) ++#define SET_IW_MEMSZ(Iw, Val) \ ++ Iw = (((Iw) & (~(IW_MEMSZ_MASK << IW_MEMSZ_LSB))) | \ ++ (((Val) & IW_MEMSZ_MASK) << IW_MEMSZ_LSB)) ++#define GET_IW_OP(Iw) \ ++ (((Iw) >> IW_OP_LSB) & IW_OP_MASK) ++#define SET_IW_OP(Iw, Val) \ ++ Iw = (((Iw) & (~(IW_OP_MASK << IW_OP_LSB))) | \ ++ (((Val) & IW_OP_MASK) << IW_OP_LSB)) ++#define GET_IW_OPX(Iw) \ ++ (((Iw) >> IW_OPX_LSB) & IW_OPX_MASK) ++#define SET_IW_OPX(Iw, Val) \ ++ Iw = (((Iw) & (~(IW_OPX_MASK << IW_OPX_LSB))) | \ ++ (((Val) & IW_OPX_MASK) << IW_OPX_LSB)) ++#define GET_IW_SHIFT_IMM5(Iw) \ ++ (((Iw) >> IW_SHIFT_IMM5_LSB) & IW_SHIFT_IMM5_MASK) ++#define SET_IW_SHIFT_IMM5(Iw, Val) \ ++ Iw = (((Iw) & (~(IW_SHIFT_IMM5_MASK << IW_SHIFT_IMM5_LSB))) | \ ++ (((Val) & IW_SHIFT_IMM5_MASK) << IW_SHIFT_IMM5_LSB)) ++#define GET_IW_TRAP_BREAK_IMM5(Iw) \ ++ (((Iw) >> IW_TRAP_BREAK_IMM5_LSB) & IW_TRAP_BREAK_IMM5_MASK) ++#define SET_IW_TRAP_BREAK_IMM5(Iw, Val) \ ++ Iw = (((Iw) & (~(IW_TRAP_BREAK_IMM5_MASK << IW_TRAP_BREAK_IMM5_LSB))) | \ ++ (((Val) & IW_TRAP_BREAK_IMM5_MASK) << IW_TRAP_BREAK_IMM5_LSB)) ++ ++/* Macros to extract control register fields */ ++#define GET_BADADDR_REG_BADDR(Reg) \ ++ (((Reg) >> BADADDR_REG_BADDR_LSB) & BADADDR_REG_BADDR_MASK) ++#define SET_BADADDR_REG_BADDR(Reg, Val) \ ++ Reg = (((Reg) & (~(BADADDR_REG_BADDR_MASK << BADADDR_REG_BADDR_LSB))) | \ ++ (((Val) & BADADDR_REG_BADDR_MASK) << BADADDR_REG_BADDR_LSB)) ++#define GET_BSTATUS_REG_MMU(Reg) \ ++ (((Reg) >> BSTATUS_REG_MMU_LSB) & BSTATUS_REG_MMU_MASK) ++#define SET_BSTATUS_REG_MMU(Reg, Val) \ ++ Reg = (((Reg) & (~(BSTATUS_REG_MMU_MASK << BSTATUS_REG_MMU_LSB))) | \ ++ (((Val) & BSTATUS_REG_MMU_MASK) << BSTATUS_REG_MMU_LSB)) ++#define GET_BSTATUS_REG_MPU(Reg) \ ++ (((Reg) >> BSTATUS_REG_MPU_LSB) & BSTATUS_REG_MPU_MASK) ++#define SET_BSTATUS_REG_MPU(Reg, Val) \ ++ Reg = (((Reg) & (~(BSTATUS_REG_MPU_MASK << BSTATUS_REG_MPU_LSB))) | \ ++ (((Val) & BSTATUS_REG_MPU_MASK) << BSTATUS_REG_MPU_LSB)) ++#define GET_BSTATUS_REG_NO_MMU(Reg) \ ++ (((Reg) >> BSTATUS_REG_NO_MMU_LSB) & BSTATUS_REG_NO_MMU_MASK) ++#define SET_BSTATUS_REG_NO_MMU(Reg, Val) \ ++ Reg = (((Reg) & (~(BSTATUS_REG_NO_MMU_MASK << BSTATUS_REG_NO_MMU_LSB))) | \ ++ (((Val) & BSTATUS_REG_NO_MMU_MASK) << BSTATUS_REG_NO_MMU_LSB)) ++#define GET_CONFIG_REG_PE(Reg) \ ++ (((Reg) >> CONFIG_REG_PE_LSB) & CONFIG_REG_PE_MASK) ++#define SET_CONFIG_REG_PE(Reg, Val) \ ++ Reg = (((Reg) & (~(CONFIG_REG_PE_MASK << CONFIG_REG_PE_LSB))) | \ ++ (((Val) & CONFIG_REG_PE_MASK) << CONFIG_REG_PE_LSB)) ++#define GET_ESTATUS_REG_MMU(Reg) \ ++ (((Reg) >> ESTATUS_REG_MMU_LSB) & ESTATUS_REG_MMU_MASK) ++#define SET_ESTATUS_REG_MMU(Reg, Val) \ ++ Reg = (((Reg) & (~(ESTATUS_REG_MMU_MASK << ESTATUS_REG_MMU_LSB))) | \ ++ (((Val) & ESTATUS_REG_MMU_MASK) << ESTATUS_REG_MMU_LSB)) ++#define GET_ESTATUS_REG_MPU(Reg) \ ++ (((Reg) >> ESTATUS_REG_MPU_LSB) & ESTATUS_REG_MPU_MASK) ++#define SET_ESTATUS_REG_MPU(Reg, Val) \ ++ Reg = (((Reg) & (~(ESTATUS_REG_MPU_MASK << ESTATUS_REG_MPU_LSB))) | \ ++ (((Val) & ESTATUS_REG_MPU_MASK) << ESTATUS_REG_MPU_LSB)) ++#define GET_ESTATUS_REG_NO_MMU(Reg) \ ++ (((Reg) >> ESTATUS_REG_NO_MMU_LSB) & ESTATUS_REG_NO_MMU_MASK) ++#define SET_ESTATUS_REG_NO_MMU(Reg, Val) \ ++ Reg = (((Reg) & (~(ESTATUS_REG_NO_MMU_MASK << ESTATUS_REG_NO_MMU_LSB))) | \ ++ (((Val) & ESTATUS_REG_NO_MMU_MASK) << ESTATUS_REG_NO_MMU_LSB)) ++#define GET_EXCEPTION_REG_CAUSE(Reg) \ ++ (((Reg) >> EXCEPTION_REG_CAUSE_LSB) & EXCEPTION_REG_CAUSE_MASK) ++#define SET_EXCEPTION_REG_CAUSE(Reg, Val) \ ++ Reg = (((Reg) & (~(EXCEPTION_REG_CAUSE_MASK << EXCEPTION_REG_CAUSE_LSB))) | \ ++ (((Val) & EXCEPTION_REG_CAUSE_MASK) << EXCEPTION_REG_CAUSE_LSB)) ++#define GET_EXCEPTION_REG_MEA(Reg) \ ++ (((Reg) >> EXCEPTION_REG_MEA_LSB) & EXCEPTION_REG_MEA_MASK) ++#define SET_EXCEPTION_REG_MEA(Reg, Val) \ ++ Reg = (((Reg) & (~(EXCEPTION_REG_MEA_MASK << EXCEPTION_REG_MEA_LSB))) | \ ++ (((Val) & EXCEPTION_REG_MEA_MASK) << EXCEPTION_REG_MEA_LSB)) ++#define GET_EXCEPTION_REG_MEE(Reg) \ ++ (((Reg) >> EXCEPTION_REG_MEE_LSB) & EXCEPTION_REG_MEE_MASK) ++#define SET_EXCEPTION_REG_MEE(Reg, Val) \ ++ Reg = (((Reg) & (~(EXCEPTION_REG_MEE_MASK << EXCEPTION_REG_MEE_LSB))) | \ ++ (((Val) & EXCEPTION_REG_MEE_MASK) << EXCEPTION_REG_MEE_LSB)) ++#define GET_MPUACC_REG_C(Reg) \ ++ (((Reg) >> MPUACC_REG_C_LSB) & MPUACC_REG_C_MASK) ++#define SET_MPUACC_REG_C(Reg, Val) \ ++ Reg = (((Reg) & (~(MPUACC_REG_C_MASK << MPUACC_REG_C_LSB))) | \ ++ (((Val) & MPUACC_REG_C_MASK) << MPUACC_REG_C_LSB)) ++#define GET_MPUACC_REG_LIMIT(Reg) \ ++ (((Reg) >> MPUACC_REG_LIMIT_LSB) & MPUACC_REG_LIMIT_MASK) ++#define SET_MPUACC_REG_LIMIT(Reg, Val) \ ++ Reg = (((Reg) & (~(MPUACC_REG_LIMIT_MASK << MPUACC_REG_LIMIT_LSB))) | \ ++ (((Val) & MPUACC_REG_LIMIT_MASK) << MPUACC_REG_LIMIT_LSB)) ++#define GET_MPUACC_REG_MASK(Reg) \ ++ (((Reg) >> MPUACC_REG_MASK_LSB) & MPUACC_REG_MASK_MASK) ++#define SET_MPUACC_REG_MASK(Reg, Val) \ ++ Reg = (((Reg) & (~(MPUACC_REG_MASK_MASK << MPUACC_REG_MASK_LSB))) | \ ++ (((Val) & MPUACC_REG_MASK_MASK) << MPUACC_REG_MASK_LSB)) ++#define GET_MPUACC_REG_PERM(Reg) \ ++ (((Reg) >> MPUACC_REG_PERM_LSB) & MPUACC_REG_PERM_MASK) ++#define SET_MPUACC_REG_PERM(Reg, Val) \ ++ Reg = (((Reg) & (~(MPUACC_REG_PERM_MASK << MPUACC_REG_PERM_LSB))) | \ ++ (((Val) & MPUACC_REG_PERM_MASK) << MPUACC_REG_PERM_LSB)) ++#define GET_MPUACC_REG_RD(Reg) \ ++ (((Reg) >> MPUACC_REG_RD_LSB) & MPUACC_REG_RD_MASK) ++#define SET_MPUACC_REG_RD(Reg, Val) \ ++ Reg = (((Reg) & (~(MPUACC_REG_RD_MASK << MPUACC_REG_RD_LSB))) | \ ++ (((Val) & MPUACC_REG_RD_MASK) << MPUACC_REG_RD_LSB)) ++#define GET_MPUACC_REG_RSV1(Reg) \ ++ (((Reg) >> MPUACC_REG_RSV1_LSB) & MPUACC_REG_RSV1_MASK) ++#define SET_MPUACC_REG_RSV1(Reg, Val) \ ++ Reg = (((Reg) & (~(MPUACC_REG_RSV1_MASK << MPUACC_REG_RSV1_LSB))) | \ ++ (((Val) & MPUACC_REG_RSV1_MASK) << MPUACC_REG_RSV1_LSB)) ++#define GET_MPUACC_REG_WR(Reg) \ ++ (((Reg) >> MPUACC_REG_WR_LSB) & MPUACC_REG_WR_MASK) ++#define SET_MPUACC_REG_WR(Reg, Val) \ ++ Reg = (((Reg) & (~(MPUACC_REG_WR_MASK << MPUACC_REG_WR_LSB))) | \ ++ (((Val) & MPUACC_REG_WR_MASK) << MPUACC_REG_WR_LSB)) ++#define GET_MPUBASE_REG_BASE(Reg) \ ++ (((Reg) >> MPUBASE_REG_BASE_LSB) & MPUBASE_REG_BASE_MASK) ++#define SET_MPUBASE_REG_BASE(Reg, Val) \ ++ Reg = (((Reg) & (~(MPUBASE_REG_BASE_MASK << MPUBASE_REG_BASE_LSB))) | \ ++ (((Val) & MPUBASE_REG_BASE_MASK) << MPUBASE_REG_BASE_LSB)) ++#define GET_MPUBASE_REG_D(Reg) \ ++ (((Reg) >> MPUBASE_REG_D_LSB) & MPUBASE_REG_D_MASK) ++#define SET_MPUBASE_REG_D(Reg, Val) \ ++ Reg = (((Reg) & (~(MPUBASE_REG_D_MASK << MPUBASE_REG_D_LSB))) | \ ++ (((Val) & MPUBASE_REG_D_MASK) << MPUBASE_REG_D_LSB)) ++#define GET_MPUBASE_REG_INDEX(Reg) \ ++ (((Reg) >> MPUBASE_REG_INDEX_LSB) & MPUBASE_REG_INDEX_MASK) ++#define SET_MPUBASE_REG_INDEX(Reg, Val) \ ++ Reg = (((Reg) & (~(MPUBASE_REG_INDEX_MASK << MPUBASE_REG_INDEX_LSB))) | \ ++ (((Val) & MPUBASE_REG_INDEX_MASK) << MPUBASE_REG_INDEX_LSB)) ++#define GET_MPUBASE_REG_RSV1(Reg) \ ++ (((Reg) >> MPUBASE_REG_RSV1_LSB) & MPUBASE_REG_RSV1_MASK) ++#define SET_MPUBASE_REG_RSV1(Reg, Val) \ ++ Reg = (((Reg) & (~(MPUBASE_REG_RSV1_MASK << MPUBASE_REG_RSV1_LSB))) | \ ++ (((Val) & MPUBASE_REG_RSV1_MASK) << MPUBASE_REG_RSV1_LSB)) ++#define GET_PTEADDR_REG_PTBASE(Reg) \ ++ (((Reg) >> PTEADDR_REG_PTBASE_LSB) & PTEADDR_REG_PTBASE_MASK) ++#define SET_PTEADDR_REG_PTBASE(Reg, Val) \ ++ Reg = (((Reg) & (~(PTEADDR_REG_PTBASE_MASK << PTEADDR_REG_PTBASE_LSB))) | \ ++ (((Val) & PTEADDR_REG_PTBASE_MASK) << PTEADDR_REG_PTBASE_LSB)) ++#define GET_PTEADDR_REG_RSV(Reg) \ ++ (((Reg) >> PTEADDR_REG_RSV_LSB) & PTEADDR_REG_RSV_MASK) ++#define SET_PTEADDR_REG_RSV(Reg, Val) \ ++ Reg = (((Reg) & (~(PTEADDR_REG_RSV_MASK << PTEADDR_REG_RSV_LSB))) | \ ++ (((Val) & PTEADDR_REG_RSV_MASK) << PTEADDR_REG_RSV_LSB)) ++#define GET_PTEADDR_REG_VPN(Reg) \ ++ (((Reg) >> PTEADDR_REG_VPN_LSB) & PTEADDR_REG_VPN_MASK) ++#define SET_PTEADDR_REG_VPN(Reg, Val) \ ++ Reg = (((Reg) & (~(PTEADDR_REG_VPN_MASK << PTEADDR_REG_VPN_LSB))) | \ ++ (((Val) & PTEADDR_REG_VPN_MASK) << PTEADDR_REG_VPN_LSB)) ++#define GET_SIM_REG_PERF_CNT_CLR(Reg) \ ++ (((Reg) >> SIM_REG_PERF_CNT_CLR_LSB) & SIM_REG_PERF_CNT_CLR_MASK) ++#define SET_SIM_REG_PERF_CNT_CLR(Reg, Val) \ ++ Reg = (((Reg) & (~(SIM_REG_PERF_CNT_CLR_MASK << \ ++ SIM_REG_PERF_CNT_CLR_LSB))) | \ ++ (((Val) & SIM_REG_PERF_CNT_CLR_MASK) << SIM_REG_PERF_CNT_CLR_LSB)) ++#define GET_SIM_REG_PERF_CNT_EN(Reg) \ ++ (((Reg) >> SIM_REG_PERF_CNT_EN_LSB) & SIM_REG_PERF_CNT_EN_MASK) ++#define SET_SIM_REG_PERF_CNT_EN(Reg, Val) \ ++ Reg = (((Reg) & (~(SIM_REG_PERF_CNT_EN_MASK << \ ++ SIM_REG_PERF_CNT_EN_LSB))) | \ ++ (((Val) & SIM_REG_PERF_CNT_EN_MASK) << SIM_REG_PERF_CNT_EN_LSB)) ++#define GET_SIM_REG_SHOW_MMU_REGS(Reg) \ ++ (((Reg) >> SIM_REG_SHOW_MMU_REGS_LSB) & SIM_REG_SHOW_MMU_REGS_MASK) ++#define SET_SIM_REG_SHOW_MMU_REGS(Reg, Val) \ ++ Reg = (((Reg) & (~(SIM_REG_SHOW_MMU_REGS_MASK << \ ++ SIM_REG_SHOW_MMU_REGS_LSB))) | \ ++ (((Val) & SIM_REG_SHOW_MMU_REGS_MASK) << SIM_REG_SHOW_MMU_REGS_LSB)) ++#define GET_SIM_REG_SHOW_TLB(Reg) \ ++ (((Reg) >> SIM_REG_SHOW_TLB_LSB) & SIM_REG_SHOW_TLB_MASK) ++#define SET_SIM_REG_SHOW_TLB(Reg, Val) \ ++ Reg = (((Reg) & (~(SIM_REG_SHOW_TLB_MASK << SIM_REG_SHOW_TLB_LSB))) | \ ++ (((Val) & SIM_REG_SHOW_TLB_MASK) << SIM_REG_SHOW_TLB_LSB)) ++#define GET_SIM_REG_STOP(Reg) \ ++ (((Reg) >> SIM_REG_STOP_LSB) & SIM_REG_STOP_MASK) ++#define SET_SIM_REG_STOP(Reg, Val) \ ++ Reg = (((Reg) & (~(SIM_REG_STOP_MASK << SIM_REG_STOP_LSB))) | \ ++ (((Val) & SIM_REG_STOP_MASK) << SIM_REG_STOP_LSB)) ++#define GET_STATUS_REG_EH(Reg) \ ++ (((Reg) >> STATUS_REG_EH_LSB) & STATUS_REG_EH_MASK) ++#define SET_STATUS_REG_EH(Reg, Val) \ ++ Reg = (((Reg) & (~(STATUS_REG_EH_MASK << STATUS_REG_EH_LSB))) | \ ++ (((Val) & STATUS_REG_EH_MASK) << STATUS_REG_EH_LSB)) ++#define GET_STATUS_REG_MMU(Reg) \ ++ (((Reg) >> STATUS_REG_MMU_LSB) & STATUS_REG_MMU_MASK) ++#define SET_STATUS_REG_MMU(Reg, Val) \ ++ Reg = (((Reg) & (~(STATUS_REG_MMU_MASK << STATUS_REG_MMU_LSB))) | \ ++ (((Val) & STATUS_REG_MMU_MASK) << STATUS_REG_MMU_LSB)) ++#define GET_STATUS_REG_MMU_RSV(Reg) \ ++ (((Reg) >> STATUS_REG_MMU_RSV_LSB) & STATUS_REG_MMU_RSV_MASK) ++#define SET_STATUS_REG_MMU_RSV(Reg, Val) \ ++ Reg = (((Reg) & (~(STATUS_REG_MMU_RSV_MASK << STATUS_REG_MMU_RSV_LSB))) | \ ++ (((Val) & STATUS_REG_MMU_RSV_MASK) << STATUS_REG_MMU_RSV_LSB)) ++#define GET_STATUS_REG_MPU(Reg) \ ++ (((Reg) >> STATUS_REG_MPU_LSB) & STATUS_REG_MPU_MASK) ++#define SET_STATUS_REG_MPU(Reg, Val) \ ++ Reg = (((Reg) & (~(STATUS_REG_MPU_MASK << STATUS_REG_MPU_LSB))) | \ ++ (((Val) & STATUS_REG_MPU_MASK) << STATUS_REG_MPU_LSB)) ++#define GET_STATUS_REG_MPU_RSV(Reg) \ ++ (((Reg) >> STATUS_REG_MPU_RSV_LSB) & STATUS_REG_MPU_RSV_MASK) ++#define SET_STATUS_REG_MPU_RSV(Reg, Val) \ ++ Reg = (((Reg) & (~(STATUS_REG_MPU_RSV_MASK << STATUS_REG_MPU_RSV_LSB))) | \ ++ (((Val) & STATUS_REG_MPU_RSV_MASK) << STATUS_REG_MPU_RSV_LSB)) ++#define GET_STATUS_REG_NO_MMU(Reg) \ ++ (((Reg) >> STATUS_REG_NO_MMU_LSB) & STATUS_REG_NO_MMU_MASK) ++#define SET_STATUS_REG_NO_MMU(Reg, Val) \ ++ Reg = (((Reg) & (~(STATUS_REG_NO_MMU_MASK << STATUS_REG_NO_MMU_LSB))) | \ ++ (((Val) & STATUS_REG_NO_MMU_MASK) << STATUS_REG_NO_MMU_LSB)) ++#define GET_STATUS_REG_NO_MMU_RSV(Reg) \ ++ (((Reg) >> STATUS_REG_NO_MMU_RSV_LSB) & STATUS_REG_NO_MMU_RSV_MASK) ++#define SET_STATUS_REG_NO_MMU_RSV(Reg, Val) \ ++ Reg = (((Reg) & (~(STATUS_REG_NO_MMU_RSV_MASK << \ ++ STATUS_REG_NO_MMU_RSV_LSB))) | \ ++ (((Val) & STATUS_REG_NO_MMU_RSV_MASK) << STATUS_REG_NO_MMU_RSV_LSB)) ++#define GET_STATUS_REG_PIE(Reg) \ ++ (((Reg) >> STATUS_REG_PIE_LSB) & STATUS_REG_PIE_MASK) ++#define SET_STATUS_REG_PIE(Reg, Val) \ ++ Reg = (((Reg) & (~(STATUS_REG_PIE_MASK << STATUS_REG_PIE_LSB))) | \ ++ (((Val) & STATUS_REG_PIE_MASK) << STATUS_REG_PIE_LSB)) ++#define GET_STATUS_REG_U(Reg) \ ++ (((Reg) >> STATUS_REG_U_LSB) & STATUS_REG_U_MASK) ++#define SET_STATUS_REG_U(Reg, Val) \ ++ Reg = (((Reg) & (~(STATUS_REG_U_MASK << STATUS_REG_U_LSB))) | \ ++ (((Val) & STATUS_REG_U_MASK) << STATUS_REG_U_LSB)) ++#define GET_TLBACC_REG_C(Reg) \ ++ (((Reg) >> TLBACC_REG_C_LSB) & TLBACC_REG_C_MASK) ++#define SET_TLBACC_REG_C(Reg, Val) \ ++ Reg = (((Reg) & (~(TLBACC_REG_C_MASK << TLBACC_REG_C_LSB))) | \ ++ (((Val) & TLBACC_REG_C_MASK) << TLBACC_REG_C_LSB)) ++#define GET_TLBACC_REG_G(Reg) \ ++ (((Reg) >> TLBACC_REG_G_LSB) & TLBACC_REG_G_MASK) ++#define SET_TLBACC_REG_G(Reg, Val) \ ++ Reg = (((Reg) & (~(TLBACC_REG_G_MASK << TLBACC_REG_G_LSB))) | \ ++ (((Val) & TLBACC_REG_G_MASK) << TLBACC_REG_G_LSB)) ++#define GET_TLBACC_REG_IG(Reg) \ ++ (((Reg) >> TLBACC_REG_IG_LSB) & TLBACC_REG_IG_MASK) ++#define SET_TLBACC_REG_IG(Reg, Val) \ ++ Reg = (((Reg) & (~(TLBACC_REG_IG_MASK << TLBACC_REG_IG_LSB))) | \ ++ (((Val) & TLBACC_REG_IG_MASK) << TLBACC_REG_IG_LSB)) ++#define GET_TLBACC_REG_PFN(Reg) \ ++ (((Reg) >> TLBACC_REG_PFN_LSB) & TLBACC_REG_PFN_MASK) ++#define SET_TLBACC_REG_PFN(Reg, Val) \ ++ Reg = (((Reg) & (~(TLBACC_REG_PFN_MASK << TLBACC_REG_PFN_LSB))) | \ ++ (((Val) & TLBACC_REG_PFN_MASK) << TLBACC_REG_PFN_LSB)) ++#define GET_TLBACC_REG_R(Reg) \ ++ (((Reg) >> TLBACC_REG_R_LSB) & TLBACC_REG_R_MASK) ++#define SET_TLBACC_REG_R(Reg, Val) \ ++ Reg = (((Reg) & (~(TLBACC_REG_R_MASK << TLBACC_REG_R_LSB))) | \ ++ (((Val) & TLBACC_REG_R_MASK) << TLBACC_REG_R_LSB)) ++#define GET_TLBACC_REG_W(Reg) \ ++ (((Reg) >> TLBACC_REG_W_LSB) & TLBACC_REG_W_MASK) ++#define SET_TLBACC_REG_W(Reg, Val) \ ++ Reg = (((Reg) & (~(TLBACC_REG_W_MASK << TLBACC_REG_W_LSB))) | \ ++ (((Val) & TLBACC_REG_W_MASK) << TLBACC_REG_W_LSB)) ++#define GET_TLBACC_REG_X(Reg) \ ++ (((Reg) >> TLBACC_REG_X_LSB) & TLBACC_REG_X_MASK) ++#define SET_TLBACC_REG_X(Reg, Val) \ ++ Reg = (((Reg) & (~(TLBACC_REG_X_MASK << TLBACC_REG_X_LSB))) | \ ++ (((Val) & TLBACC_REG_X_MASK) << TLBACC_REG_X_LSB)) ++#define GET_TLBMISC_REG_BAD(Reg) \ ++ (((Reg) >> TLBMISC_REG_BAD_LSB) & TLBMISC_REG_BAD_MASK) ++#define SET_TLBMISC_REG_BAD(Reg, Val) \ ++ Reg = (((Reg) & (~(TLBMISC_REG_BAD_MASK << TLBMISC_REG_BAD_LSB))) | \ ++ (((Val) & TLBMISC_REG_BAD_MASK) << TLBMISC_REG_BAD_LSB)) ++#define GET_TLBMISC_REG_D(Reg) \ ++ (((Reg) >> TLBMISC_REG_D_LSB) & TLBMISC_REG_D_MASK) ++#define SET_TLBMISC_REG_D(Reg, Val) \ ++ Reg = (((Reg) & (~(TLBMISC_REG_D_MASK << TLBMISC_REG_D_LSB))) | \ ++ (((Val) & TLBMISC_REG_D_MASK) << TLBMISC_REG_D_LSB)) ++#define GET_TLBMISC_REG_DBL(Reg) \ ++ (((Reg) >> TLBMISC_REG_DBL_LSB) & TLBMISC_REG_DBL_MASK) ++#define SET_TLBMISC_REG_DBL(Reg, Val) \ ++ Reg = (((Reg) & (~(TLBMISC_REG_DBL_MASK << TLBMISC_REG_DBL_LSB))) | \ ++ (((Val) & TLBMISC_REG_DBL_MASK) << TLBMISC_REG_DBL_LSB)) ++#define GET_TLBMISC_REG_PERM(Reg) \ ++ (((Reg) >> TLBMISC_REG_PERM_LSB) & TLBMISC_REG_PERM_MASK) ++#define SET_TLBMISC_REG_PERM(Reg, Val) \ ++ Reg = (((Reg) & (~(TLBMISC_REG_PERM_MASK << TLBMISC_REG_PERM_LSB))) | \ ++ (((Val) & TLBMISC_REG_PERM_MASK) << TLBMISC_REG_PERM_LSB)) ++#define GET_TLBMISC_REG_PID(Reg) \ ++ (((Reg) >> TLBMISC_REG_PID_LSB) & TLBMISC_REG_PID_MASK) ++#define SET_TLBMISC_REG_PID(Reg, Val) \ ++ Reg = (((Reg) & (~(TLBMISC_REG_PID_MASK << TLBMISC_REG_PID_LSB))) | \ ++ (((Val) & TLBMISC_REG_PID_MASK) << TLBMISC_REG_PID_LSB)) ++#define GET_TLBMISC_REG_RD(Reg) \ ++ (((Reg) >> TLBMISC_REG_RD_LSB) & TLBMISC_REG_RD_MASK) ++#define SET_TLBMISC_REG_RD(Reg, Val) \ ++ Reg = (((Reg) & (~(TLBMISC_REG_RD_MASK << TLBMISC_REG_RD_LSB))) | \ ++ (((Val) & TLBMISC_REG_RD_MASK) << TLBMISC_REG_RD_LSB)) ++#define GET_TLBMISC_REG_RSV1(Reg) \ ++ (((Reg) >> TLBMISC_REG_RSV1_LSB) & TLBMISC_REG_RSV1_MASK) ++#define SET_TLBMISC_REG_RSV1(Reg, Val) \ ++ Reg = (((Reg) & (~(TLBMISC_REG_RSV1_MASK << TLBMISC_REG_RSV1_LSB))) | \ ++ (((Val) & TLBMISC_REG_RSV1_MASK) << TLBMISC_REG_RSV1_LSB)) ++#define GET_TLBMISC_REG_WAY(Reg) \ ++ (((Reg) >> TLBMISC_REG_WAY_LSB) & TLBMISC_REG_WAY_MASK) ++#define SET_TLBMISC_REG_WAY(Reg, Val) \ ++ Reg = (((Reg) & (~(TLBMISC_REG_WAY_MASK << TLBMISC_REG_WAY_LSB))) | \ ++ (((Val) & TLBMISC_REG_WAY_MASK) << TLBMISC_REG_WAY_LSB)) ++#define GET_TLBMISC_REG_WE(Reg) \ ++ (((Reg) >> TLBMISC_REG_WE_LSB) & TLBMISC_REG_WE_MASK) ++#define SET_TLBMISC_REG_WE(Reg, Val) \ ++ Reg = (((Reg) & (~(TLBMISC_REG_WE_MASK << TLBMISC_REG_WE_LSB))) | \ ++ (((Val) & TLBMISC_REG_WE_MASK) << TLBMISC_REG_WE_LSB)) ++ ++/* Macros to extract MMU fields */ ++#define GET_MMU_ADDR_BYPASS_TLB_CACHEABLE(Addr) \ ++ (((Addr) >> MMU_ADDR_BYPASS_TLB_CACHEABLE_LSB) & \ ++ MMU_ADDR_BYPASS_TLB_CACHEABLE_MASK) ++#define SET_MMU_ADDR_BYPASS_TLB_CACHEABLE(Addr, Val) \ ++ Addr = (((Addr) & (~(MMU_ADDR_BYPASS_TLB_CACHEABLE_MASK << \ ++ MMU_ADDR_BYPASS_TLB_CACHEABLE_LSB))) | \ ++ (((Val) & MMU_ADDR_BYPASS_TLB_CACHEABLE_MASK) << \ ++ MMU_ADDR_BYPASS_TLB_CACHEABLE_LSB)) ++#define GET_MMU_ADDR_BYPASS_TLB(Addr) \ ++ (((Addr) >> MMU_ADDR_BYPASS_TLB_LSB) & MMU_ADDR_BYPASS_TLB_MASK) ++#define SET_MMU_ADDR_BYPASS_TLB(Addr, Val) \ ++ Addr = (((Addr) & (~(MMU_ADDR_BYPASS_TLB_MASK << \ ++ MMU_ADDR_BYPASS_TLB_LSB))) | \ ++ (((Val) & MMU_ADDR_BYPASS_TLB_MASK) << MMU_ADDR_BYPASS_TLB_LSB)) ++#define GET_MMU_ADDR_BYPASS_TLB_PADDR(Addr) \ ++ (((Addr) >> MMU_ADDR_BYPASS_TLB_PADDR_LSB) & MMU_ADDR_BYPASS_TLB_PADDR_MASK) ++#define SET_MMU_ADDR_BYPASS_TLB_PADDR(Addr, Val) \ ++ Addr = (((Addr) & (~(MMU_ADDR_BYPASS_TLB_PADDR_MASK << \ ++ MMU_ADDR_BYPASS_TLB_PADDR_LSB))) | \ ++ (((Val) & MMU_ADDR_BYPASS_TLB_PADDR_MASK) << \ ++ MMU_ADDR_BYPASS_TLB_PADDR_LSB)) ++#define GET_MMU_ADDR_IO_REGION(Addr) \ ++ (((Addr) >> MMU_ADDR_IO_REGION_LSB) & MMU_ADDR_IO_REGION_MASK) ++#define SET_MMU_ADDR_IO_REGION(Addr, Val) \ ++ Addr = (((Addr) & (~(MMU_ADDR_IO_REGION_MASK << \ ++ MMU_ADDR_IO_REGION_LSB))) | \ ++ (((Val) & MMU_ADDR_IO_REGION_MASK) << MMU_ADDR_IO_REGION_LSB)) ++#define GET_MMU_ADDR_KERNEL_MMU_REGION(Addr) \ ++ (((Addr) >> MMU_ADDR_KERNEL_MMU_REGION_LSB) & \ ++ MMU_ADDR_KERNEL_MMU_REGION_MASK) ++#define SET_MMU_ADDR_KERNEL_MMU_REGION(Addr, Val) \ ++ Addr = (((Addr) & (~(MMU_ADDR_KERNEL_MMU_REGION_MASK << \ ++ MMU_ADDR_KERNEL_MMU_REGION_LSB))) | \ ++ (((Val) & MMU_ADDR_KERNEL_MMU_REGION_MASK) << \ ++ MMU_ADDR_KERNEL_MMU_REGION_LSB)) ++#define GET_MMU_ADDR_KERNEL_REGION(Addr) \ ++ (((Addr) >> MMU_ADDR_KERNEL_REGION_LSB) & MMU_ADDR_KERNEL_REGION_MASK) ++#define SET_MMU_ADDR_KERNEL_REGION(Addr, Val) \ ++ Addr = (((Addr) & (~(MMU_ADDR_KERNEL_REGION_MASK << \ ++ MMU_ADDR_KERNEL_REGION_LSB))) | \ ++ (((Val) & MMU_ADDR_KERNEL_REGION_MASK) << \ ++ MMU_ADDR_KERNEL_REGION_LSB)) ++#define GET_MMU_ADDR_PAGE_OFFSET(Addr) \ ++ (((Addr) >> MMU_ADDR_PAGE_OFFSET_LSB) & MMU_ADDR_PAGE_OFFSET_MASK) ++#define SET_MMU_ADDR_PAGE_OFFSET(Addr, Val) \ ++ Addr = (((Addr) & (~(MMU_ADDR_PAGE_OFFSET_MASK << \ ++ MMU_ADDR_PAGE_OFFSET_LSB))) | \ ++ (((Val) & MMU_ADDR_PAGE_OFFSET_MASK) << MMU_ADDR_PAGE_OFFSET_LSB)) ++#define GET_MMU_ADDR_PFN(Addr) \ ++ (((Addr) >> MMU_ADDR_PFN_LSB) & MMU_ADDR_PFN_MASK) ++#define SET_MMU_ADDR_PFN(Addr, Val) \ ++ Addr = (((Addr) & (~(MMU_ADDR_PFN_MASK << MMU_ADDR_PFN_LSB))) | \ ++ (((Val) & MMU_ADDR_PFN_MASK) << MMU_ADDR_PFN_LSB)) ++#define GET_MMU_ADDR_USER_REGION(Addr) \ ++ (((Addr) >> MMU_ADDR_USER_REGION_LSB) & MMU_ADDR_USER_REGION_MASK) ++#define SET_MMU_ADDR_USER_REGION(Addr, Val) \ ++ Addr = (((Addr) & (~(MMU_ADDR_USER_REGION_MASK << \ ++ MMU_ADDR_USER_REGION_LSB))) | \ ++ (((Val) & MMU_ADDR_USER_REGION_MASK) << MMU_ADDR_USER_REGION_LSB)) ++#define GET_MMU_ADDR_VPN(Addr) \ ++ (((Addr) >> MMU_ADDR_VPN_LSB) & MMU_ADDR_VPN_MASK) ++#define SET_MMU_ADDR_VPN(Addr, Val) \ ++ Addr = (((Addr) & (~(MMU_ADDR_VPN_MASK << MMU_ADDR_VPN_LSB))) | \ ++ (((Val) & MMU_ADDR_VPN_MASK) << MMU_ADDR_VPN_LSB)) ++ ++/* OP instruction values */ ++#define OP_ADDI 4 ++#define OP_ANDHI 44 ++#define OP_ANDI 12 ++#define OP_BEQ 38 ++#define OP_BGE 14 ++#define OP_BGEU 46 ++#define OP_BLT 22 ++#define OP_BLTU 54 ++#define OP_BNE 30 ++#define OP_BR 6 ++#define OP_CALL 0 ++#define OP_CMPEQI 32 ++#define OP_CMPGEI 8 ++#define OP_CMPGEUI 40 ++#define OP_CMPLTI 16 ++#define OP_CMPLTUI 48 ++#define OP_CMPNEI 24 ++#define OP_CUSTOM 50 ++#define OP_FLUSHD 59 ++#define OP_FLUSHDA 27 ++#define OP_INITD 51 ++#define OP_INITDA 19 ++#define OP_JMPI 1 ++#define OP_LDB 7 ++#define OP_LDBIO 39 ++#define OP_LDBU 3 ++#define OP_LDBUIO 35 ++#define OP_LDH 15 ++#define OP_LDHIO 47 ++#define OP_LDHU 11 ++#define OP_LDHUIO 43 ++#define OP_LDL 31 ++#define OP_LDW 23 ++#define OP_LDWIO 55 ++#define OP_MULI 36 ++#define OP_OPX 58 ++#define OP_ORHI 52 ++#define OP_ORI 20 ++#define OP_STB 5 ++#define OP_STBIO 37 ++#define OP_STC 29 ++#define OP_STH 13 ++#define OP_STHIO 45 ++#define OP_STW 21 ++#define OP_STWIO 53 ++#define OP_XORHI 60 ++#define OP_XORI 28 ++ ++/* OPX instruction values */ ++#define OPX_ADD 49 ++#define OPX_AND 14 ++#define OPX_BREAK 52 ++#define OPX_BRET 9 ++#define OPX_CALLR 29 ++#define OPX_CMPEQ 32 ++#define OPX_CMPGE 8 ++#define OPX_CMPGEU 40 ++#define OPX_CMPLT 16 ++#define OPX_CMPLTU 48 ++#define OPX_CMPNE 24 ++#define OPX_CRST 62 ++#define OPX_DIV 37 ++#define OPX_DIVU 36 ++#define OPX_ERET 1 ++#define OPX_FLUSHI 12 ++#define OPX_FLUSHP 4 ++#define OPX_HBREAK 53 ++#define OPX_INITI 41 ++#define OPX_INTR 61 ++#define OPX_JMP 13 ++#define OPX_MUL 39 ++#define OPX_MULXSS 31 ++#define OPX_MULXSU 23 ++#define OPX_MULXUU 7 ++#define OPX_NEXTPC 28 ++#define OPX_NOR 6 ++#define OPX_OR 22 ++#define OPX_RDCTL 38 ++#define OPX_RET 5 ++#define OPX_ROL 3 ++#define OPX_ROLI 2 ++#define OPX_ROR 11 ++#define OPX_SLL 19 ++#define OPX_SLLI 18 ++#define OPX_SRA 59 ++#define OPX_SRAI 58 ++#define OPX_SRL 27 ++#define OPX_SRLI 26 ++#define OPX_SUB 57 ++#define OPX_SYNC 54 ++#define OPX_TRAP 45 ++#define OPX_WRCTL 46 ++#define OPX_XOR 30 ++ ++/* Macros to detect sub-opcode instructions */ ++#define IS_OPX_INST(Iw) (GET_IW_OP(Iw) == OP_OPX) ++#define IS_CUSTOM_INST(Iw) (GET_IW_OP(Iw) == OP_CUSTOM) ++ ++/* Instruction property macros */ ++#define IW_PROP_RESERVED_OP(Iw) (0) ++ ++#define IW_PROP_RESERVED_OPX(Iw) (0) ++ ++#define IW_PROP_RESERVED(Iw) (0) ++ ++#define IW_PROP_SUPERVISOR_ONLY(Iw) ( \ ++ (op_prop_supervisor_only[GET_IW_OP(Iw)] || \ ++ (IS_OPX_INST(Iw) && opx_prop_supervisor_only[GET_IW_OPX(Iw)]))) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_supervisor_only[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char opx_prop_supervisor_only[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_INITI_FLUSHI(Iw) ( \ ++ ( \ ++ ((GET_IW_OPX((Iw)) == OPX_INITI) && IS_OPX_INST(Iw)) || \ ++ ((GET_IW_OPX((Iw)) == OPX_FLUSHI) && IS_OPX_INST(Iw)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_FLUSH_PIPE(Iw) ( \ ++ (IS_OPX_INST(Iw) && opx_prop_flush_pipe[GET_IW_OPX(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char opx_prop_flush_pipe[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_JMP_INDIRECT_NON_TRAP(Iw) ( \ ++ (IS_OPX_INST(Iw) && opx_prop_jmp_indirect_non_trap[GET_IW_OPX(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char opx_prop_jmp_indirect_non_trap[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_JMP_INDIRECT(Iw) ( \ ++ (IS_OPX_INST(Iw) && opx_prop_jmp_indirect[GET_IW_OPX(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char opx_prop_jmp_indirect[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_JMP_DIRECT(Iw) ( \ ++ ( \ ++ ((GET_IW_OP((Iw)) == OP_CALL)) || \ ++ ((GET_IW_OP((Iw)) == OP_JMPI)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_MUL_LSW(Iw) ( \ ++ ( \ ++ ((GET_IW_OP((Iw)) == OP_MULI)) || \ ++ ((GET_IW_OPX((Iw)) == OPX_MUL) && IS_OPX_INST(Iw)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_MULX(Iw) ( \ ++ (IS_OPX_INST(Iw) && opx_prop_mulx[GET_IW_OPX(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char opx_prop_mulx[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_MUL(Iw) ( \ ++ (op_prop_mul[GET_IW_OP(Iw)] || \ ++ (IS_OPX_INST(Iw) && opx_prop_mul[GET_IW_OPX(Iw)]))) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_mul[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char opx_prop_mul[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_DIV_UNSIGNED(Iw) ( \ ++ ( \ ++ ((GET_IW_OPX((Iw)) == OPX_DIVU) && IS_OPX_INST(Iw)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_DIV_SIGNED(Iw) ( \ ++ ( \ ++ ((GET_IW_OPX((Iw)) == OPX_DIV) && IS_OPX_INST(Iw)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_DIV(Iw) ( \ ++ ( \ ++ ((GET_IW_OPX((Iw)) == OPX_DIVU) && IS_OPX_INST(Iw)) || \ ++ ((GET_IW_OPX((Iw)) == OPX_DIV) && IS_OPX_INST(Iw)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_UNIMPLEMENTED(Iw) (0) ++ ++#define IW_PROP_ILLEGAL(Iw) (0) ++ ++#define IW_PROP_IMPLICIT_DST_RETADDR(Iw) ( \ ++ ( \ ++ ((GET_IW_OP((Iw)) == OP_CALL)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_IMPLICIT_DST_ERETADDR(Iw) (0) ++ ++#define IW_PROP_INTR(Iw) ( \ ++ ( \ ++ ((GET_IW_OPX((Iw)) == OPX_INTR) && IS_OPX_INST(Iw)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_EXCEPTION(Iw) ( \ ++ ( \ ++ ((GET_IW_OPX((Iw)) == OPX_TRAP) && IS_OPX_INST(Iw)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_BREAK(Iw) ( \ ++ ( \ ++ ((GET_IW_OPX((Iw)) == OPX_BREAK) && IS_OPX_INST(Iw)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_CRST(Iw) (0) ++ ++#define IW_PROP_WR_CTL_REG(Iw) ( \ ++ (IS_OPX_INST(Iw) && opx_prop_wr_ctl_reg[GET_IW_OPX(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char opx_prop_wr_ctl_reg[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_UNCOND_CTI_NON_BR(Iw) ( \ ++ (op_prop_uncond_cti_non_br[GET_IW_OP(Iw)] || \ ++ (IS_OPX_INST(Iw) && opx_prop_uncond_cti_non_br[GET_IW_OPX(Iw)]))) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_uncond_cti_non_br[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char opx_prop_uncond_cti_non_br[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_RETADDR(Iw) ( \ ++ (op_prop_retaddr[GET_IW_OP(Iw)] || \ ++ (IS_OPX_INST(Iw) && opx_prop_retaddr[GET_IW_OPX(Iw)]))) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_retaddr[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char opx_prop_retaddr[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_SHIFT_LEFT(Iw) ( \ ++ ( \ ++ ((GET_IW_OPX((Iw)) == OPX_SLLI) && IS_OPX_INST(Iw)) || \ ++ ((GET_IW_OPX((Iw)) == OPX_SLL) && IS_OPX_INST(Iw)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_SHIFT_LOGICAL(Iw) ( \ ++ (IS_OPX_INST(Iw) && opx_prop_shift_logical[GET_IW_OPX(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char opx_prop_shift_logical[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_ROT_LEFT(Iw) ( \ ++ ( \ ++ ((GET_IW_OPX((Iw)) == OPX_ROLI) && IS_OPX_INST(Iw)) || \ ++ ((GET_IW_OPX((Iw)) == OPX_ROL) && IS_OPX_INST(Iw)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_SHIFT_ROT_LEFT(Iw) ( \ ++ (IS_OPX_INST(Iw) && opx_prop_shift_rot_left[GET_IW_OPX(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char opx_prop_shift_rot_left[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_SHIFT_RIGHT_LOGICAL(Iw) ( \ ++ ( \ ++ ((GET_IW_OPX((Iw)) == OPX_SRLI) && IS_OPX_INST(Iw)) || \ ++ ((GET_IW_OPX((Iw)) == OPX_SRL) && IS_OPX_INST(Iw)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_SHIFT_RIGHT_ARITH(Iw) ( \ ++ ( \ ++ ((GET_IW_OPX((Iw)) == OPX_SRAI) && IS_OPX_INST(Iw)) || \ ++ ((GET_IW_OPX((Iw)) == OPX_SRA) && IS_OPX_INST(Iw)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_SHIFT_RIGHT(Iw) ( \ ++ (IS_OPX_INST(Iw) && opx_prop_shift_right[GET_IW_OPX(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char opx_prop_shift_right[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_ROT_RIGHT(Iw) ( \ ++ ( \ ++ ((GET_IW_OPX((Iw)) == OPX_ROR) && IS_OPX_INST(Iw)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_SHIFT_ROT_RIGHT(Iw) ( \ ++ (IS_OPX_INST(Iw) && opx_prop_shift_rot_right[GET_IW_OPX(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char opx_prop_shift_rot_right[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_SHIFT_ROT(Iw) ( \ ++ (IS_OPX_INST(Iw) && opx_prop_shift_rot[GET_IW_OPX(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char opx_prop_shift_rot[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_SHIFT_ROT_IMM(Iw) ( \ ++ (IS_OPX_INST(Iw) && opx_prop_shift_rot_imm[GET_IW_OPX(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char opx_prop_shift_rot_imm[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_ROTATE(Iw) ( \ ++ (IS_OPX_INST(Iw) && opx_prop_rotate[GET_IW_OPX(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char opx_prop_rotate[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_LOGIC_REG(Iw) ( \ ++ (IS_OPX_INST(Iw) && opx_prop_logic_reg[GET_IW_OPX(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char opx_prop_logic_reg[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_LOGIC_HI_IMM16(Iw) ( \ ++ (op_prop_logic_hi_imm16[GET_IW_OP(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_logic_hi_imm16[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_LOGIC_LO_IMM16(Iw) ( \ ++ (op_prop_logic_lo_imm16[GET_IW_OP(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_logic_lo_imm16[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_LOGIC_IMM16(Iw) ( \ ++ (op_prop_logic_imm16[GET_IW_OP(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_logic_imm16[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_LOGIC(Iw) ( \ ++ (op_prop_logic[GET_IW_OP(Iw)] || \ ++ (IS_OPX_INST(Iw) && opx_prop_logic[GET_IW_OPX(Iw)]))) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_logic[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char opx_prop_logic[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_UNSIGNED_LO_IMM16(Iw) ( \ ++ (op_prop_unsigned_lo_imm16[GET_IW_OP(Iw)] || \ ++ (IS_OPX_INST(Iw) && opx_prop_unsigned_lo_imm16[GET_IW_OPX(Iw)]))) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_unsigned_lo_imm16[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char opx_prop_unsigned_lo_imm16[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_ARITH_IMM16(Iw) ( \ ++ ( \ ++ ((GET_IW_OP((Iw)) == OP_ADDI)) || \ ++ ((GET_IW_OP((Iw)) == OP_MULI)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_CMP_IMM16(Iw) ( \ ++ (op_prop_cmp_imm16[GET_IW_OP(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_cmp_imm16[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_JMPI(Iw) ( \ ++ ( \ ++ ((GET_IW_OP((Iw)) == OP_JMPI)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_CMP_IMM16_WITH_CALL_JMPI(Iw) ( \ ++ (op_prop_cmp_imm16_with_call_jmpi[GET_IW_OP(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_cmp_imm16_with_call_jmpi[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_CMP_REG(Iw) ( \ ++ (IS_OPX_INST(Iw) && opx_prop_cmp_reg[GET_IW_OPX(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char opx_prop_cmp_reg[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_SRC_IMM5(Iw) ( \ ++ (IS_OPX_INST(Iw) && opx_prop_src_imm5[GET_IW_OPX(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char opx_prop_src_imm5[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_CMP_WITH_LT(Iw) ( \ ++ (op_prop_cmp_with_lt[GET_IW_OP(Iw)] || \ ++ (IS_OPX_INST(Iw) && opx_prop_cmp_with_lt[GET_IW_OPX(Iw)]))) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_cmp_with_lt[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char opx_prop_cmp_with_lt[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_CMP_WITH_EQ(Iw) ( \ ++ (op_prop_cmp_with_eq[GET_IW_OP(Iw)] || \ ++ (IS_OPX_INST(Iw) && opx_prop_cmp_with_eq[GET_IW_OPX(Iw)]))) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_cmp_with_eq[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char opx_prop_cmp_with_eq[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_CMP_WITH_GE(Iw) ( \ ++ (op_prop_cmp_with_ge[GET_IW_OP(Iw)] || \ ++ (IS_OPX_INST(Iw) && opx_prop_cmp_with_ge[GET_IW_OPX(Iw)]))) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_cmp_with_ge[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char opx_prop_cmp_with_ge[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_CMP_WITH_NE(Iw) ( \ ++ ( \ ++ ((GET_IW_OP((Iw)) == OP_CMPNEI)) || \ ++ ((GET_IW_OPX((Iw)) == OPX_CMPNE) && IS_OPX_INST(Iw)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_CMP_ALU_SIGNED(Iw) ( \ ++ (op_prop_cmp_alu_signed[GET_IW_OP(Iw)] || \ ++ (IS_OPX_INST(Iw) && opx_prop_cmp_alu_signed[GET_IW_OPX(Iw)]))) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_cmp_alu_signed[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char opx_prop_cmp_alu_signed[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_CMP(Iw) ( \ ++ (op_prop_cmp[GET_IW_OP(Iw)] || \ ++ (IS_OPX_INST(Iw) && opx_prop_cmp[GET_IW_OPX(Iw)]))) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_cmp[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char opx_prop_cmp[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_BR_WITH_LT(Iw) ( \ ++ ( \ ++ ((GET_IW_OP((Iw)) == OP_BLT)) || \ ++ ((GET_IW_OP((Iw)) == OP_BLTU)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_BR_WITH_GE(Iw) ( \ ++ ( \ ++ ((GET_IW_OP((Iw)) == OP_BGE)) || \ ++ ((GET_IW_OP((Iw)) == OP_BGEU)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_BR_WITH_EQ(Iw) ( \ ++ (op_prop_br_with_eq[GET_IW_OP(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_br_with_eq[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_BR_WITH_NE(Iw) ( \ ++ ( \ ++ ((GET_IW_OP((Iw)) == OP_BNE)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_BR_ALU_SIGNED(Iw) ( \ ++ ( \ ++ ((GET_IW_OP((Iw)) == OP_BGE)) || \ ++ ((GET_IW_OP((Iw)) == OP_BLT)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_BR_COND(Iw) ( \ ++ (op_prop_br_cond[GET_IW_OP(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_br_cond[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_BR_UNCOND(Iw) ( \ ++ ( \ ++ ((GET_IW_OP((Iw)) == OP_BR)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_BR(Iw) ( \ ++ (op_prop_br[GET_IW_OP(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_br[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_ALU_SUB(Iw) ( \ ++ (op_prop_alu_sub[GET_IW_OP(Iw)] || \ ++ (IS_OPX_INST(Iw) && opx_prop_alu_sub[GET_IW_OPX(Iw)]))) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_alu_sub[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char opx_prop_alu_sub[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_FORCE_XOR(Iw) ( \ ++ (op_prop_force_xor[GET_IW_OP(Iw)] || \ ++ (IS_OPX_INST(Iw) && opx_prop_force_xor[GET_IW_OPX(Iw)]))) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_force_xor[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char opx_prop_force_xor[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_LOAD8(Iw) ( \ ++ (op_prop_load8[GET_IW_OP(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_load8[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_LOAD16(Iw) ( \ ++ (op_prop_load16[GET_IW_OP(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_load16[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_LOAD32(Iw) ( \ ++ (op_prop_load32[GET_IW_OP(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_load32[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_LOAD_SIGNED(Iw) ( \ ++ (op_prop_load_signed[GET_IW_OP(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_load_signed[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_LOAD_UNSIGNED(Iw) ( \ ++ (op_prop_load_unsigned[GET_IW_OP(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_load_unsigned[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_LOAD(Iw) ( \ ++ (op_prop_load[GET_IW_OP(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_load[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_DCACHE_MANAGEMENT_NOP(Iw) ( \ ++ (op_prop_dcache_management_nop[GET_IW_OP(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_dcache_management_nop[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_LOAD_DCACHE_MANAGEMENT(Iw) ( \ ++ (op_prop_load_dcache_management[GET_IW_OP(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_load_dcache_management[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_LOAD_NON_IO(Iw) ( \ ++ (op_prop_load_non_io[GET_IW_OP(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_load_non_io[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_STORE8(Iw) ( \ ++ ( \ ++ ((GET_IW_OP((Iw)) == OP_STB)) || \ ++ ((GET_IW_OP((Iw)) == OP_STBIO)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_STORE16(Iw) ( \ ++ ( \ ++ ((GET_IW_OP((Iw)) == OP_STH)) || \ ++ ((GET_IW_OP((Iw)) == OP_STHIO)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_STORE32(Iw) ( \ ++ (op_prop_store32[GET_IW_OP(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_store32[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_STORE(Iw) ( \ ++ (op_prop_store[GET_IW_OP(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_store[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_STORE_NON_IO(Iw) ( \ ++ (op_prop_store_non_io[GET_IW_OP(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_store_non_io[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_MEM(Iw) ( \ ++ (op_prop_mem[GET_IW_OP(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_mem[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_INITD(Iw) ( \ ++ ( \ ++ ((GET_IW_OP((Iw)) == OP_INITD)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_INITDA(Iw) ( \ ++ ( \ ++ ((GET_IW_OP((Iw)) == OP_INITDA)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_FLUSHD(Iw) ( \ ++ ( \ ++ ((GET_IW_OP((Iw)) == OP_FLUSHD)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_FLUSHDA(Iw) ( \ ++ ( \ ++ ((GET_IW_OP((Iw)) == OP_FLUSHDA)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_INITD_FLUSHD(Iw) ( \ ++ ( \ ++ ((GET_IW_OP((Iw)) == OP_INITD)) || \ ++ ((GET_IW_OP((Iw)) == OP_FLUSHD)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_INITDA_FLUSHDA(Iw) ( \ ++ ( \ ++ ((GET_IW_OP((Iw)) == OP_INITDA)) || \ ++ ((GET_IW_OP((Iw)) == OP_FLUSHDA)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_INITD_INITDA(Iw) ( \ ++ ( \ ++ ((GET_IW_OP((Iw)) == OP_INITD)) || \ ++ ((GET_IW_OP((Iw)) == OP_INITDA)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_FLUSHD_FLUSHDA(Iw) ( \ ++ ( \ ++ ((GET_IW_OP((Iw)) == OP_FLUSHD)) || \ ++ ((GET_IW_OP((Iw)) == OP_FLUSHDA)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_INITD_FLUSHD_FLUSHDA(Iw) ( \ ++ (op_prop_initd_flushd_flushda[GET_IW_OP(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_initd_flushd_flushda[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_DCACHE_MANAGEMENT(Iw) ( \ ++ (op_prop_dcache_management[GET_IW_OP(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_dcache_management[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_LOAD_IO(Iw) ( \ ++ (op_prop_load_io[GET_IW_OP(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_load_io[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_STORE_IO(Iw) ( \ ++ (op_prop_store_io[GET_IW_OP(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_store_io[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_MEM_IO(Iw) ( \ ++ (op_prop_mem_io[GET_IW_OP(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_mem_io[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_ARITH(Iw) ( \ ++ (op_prop_arith[GET_IW_OP(Iw)] || \ ++ (IS_OPX_INST(Iw) && opx_prop_arith[GET_IW_OPX(Iw)]))) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_arith[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char opx_prop_arith[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_A_NOT_SRC(Iw) ( \ ++ ( \ ++ ((GET_IW_OP((Iw)) == OP_CALL)) || \ ++ ((GET_IW_OP((Iw)) == OP_JMPI)) \ ++ ) \ ++ || (IS_CUSTOM_INST(Iw) && !GET_IW_CUSTOM_READRA(Iw)) \ ++) ++ ++#define IW_PROP_B_NOT_SRC(Iw) ( \ ++ (op_prop_b_not_src[GET_IW_OP(Iw)]) \ ++ || (IS_CUSTOM_INST(Iw) && !GET_IW_CUSTOM_READRB(Iw))) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_b_not_src[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_IGNORE_DST(Iw) ( \ ++ (op_prop_ignore_dst[GET_IW_OP(Iw)]) \ ++ || (IS_CUSTOM_INST(Iw) && !GET_IW_CUSTOM_WRITERC(Iw))) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_ignore_dst[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_SRC2_CHOOSE_IMM(Iw) ( \ ++ (op_prop_src2_choose_imm[GET_IW_OP(Iw)] || \ ++ (IS_OPX_INST(Iw) && opx_prop_src2_choose_imm[GET_IW_OPX(Iw)]))) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_src2_choose_imm[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char opx_prop_src2_choose_imm[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_WRCTL_INST(Iw) ( \ ++ ( \ ++ ((GET_IW_OPX((Iw)) == OPX_WRCTL) && IS_OPX_INST(Iw)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_RDCTL_INST(Iw) ( \ ++ ( \ ++ ((GET_IW_OPX((Iw)) == OPX_RDCTL) && IS_OPX_INST(Iw)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_MUL_SRC1_SIGNED(Iw) ( \ ++ ( \ ++ ((GET_IW_OPX((Iw)) == OPX_MULXSS) && IS_OPX_INST(Iw)) || \ ++ ((GET_IW_OPX((Iw)) == OPX_MULXSU) && IS_OPX_INST(Iw)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_MUL_SRC2_SIGNED(Iw) ( \ ++ ( \ ++ ((GET_IW_OPX((Iw)) == OPX_MULXSS) && IS_OPX_INST(Iw)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_MUL_SHIFT_SRC1_SIGNED(Iw) ( \ ++ (IS_OPX_INST(Iw) && opx_prop_mul_shift_src1_signed[GET_IW_OPX(Iw)])) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char opx_prop_mul_shift_src1_signed[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_MUL_SHIFT_SRC2_SIGNED(Iw) ( \ ++ ( \ ++ ((GET_IW_OPX((Iw)) == OPX_MULXSS) && IS_OPX_INST(Iw)) \ ++ ) \ ++ \ ++) ++ ++#define IW_PROP_DONT_DISPLAY_DST_REG(Iw) ( \ ++ (op_prop_dont_display_dst_reg[GET_IW_OP(Iw)] || \ ++ (IS_OPX_INST(Iw) && opx_prop_dont_display_dst_reg[GET_IW_OPX(Iw)]))) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_dont_display_dst_reg[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char opx_prop_dont_display_dst_reg[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_DONT_DISPLAY_SRC1_REG(Iw) ( \ ++ (op_prop_dont_display_src1_reg[GET_IW_OP(Iw)] || \ ++ (IS_OPX_INST(Iw) && opx_prop_dont_display_src1_reg[GET_IW_OPX(Iw)]))) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_dont_display_src1_reg[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char opx_prop_dont_display_src1_reg[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_DONT_DISPLAY_SRC2_REG(Iw) ( \ ++ (op_prop_dont_display_src2_reg[GET_IW_OP(Iw)] || \ ++ (IS_OPX_INST(Iw) && opx_prop_dont_display_src2_reg[GET_IW_OPX(Iw)]))) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_dont_display_src2_reg[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char opx_prop_dont_display_src2_reg[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_SRC1_NO_X(Iw) ( \ ++ (op_prop_src1_no_x[GET_IW_OP(Iw)] || \ ++ (IS_OPX_INST(Iw) && opx_prop_src1_no_x[GET_IW_OPX(Iw)]))) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_src1_no_x[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char opx_prop_src1_no_x[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#define IW_PROP_SRC2_NO_X(Iw) ( \ ++ (op_prop_src2_no_x[GET_IW_OP(Iw)] || \ ++ (IS_OPX_INST(Iw) && opx_prop_src2_no_x[GET_IW_OPX(Iw)]))) ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char op_prop_src2_no_x[64]; ++#endif /* ALT_ASM_SRC */ ++ ++#ifndef ALT_ASM_SRC ++extern unsigned char opx_prop_src2_no_x[64]; ++#endif /* ALT_ASM_SRC */ ++ ++/* Instruction types */ ++#define INST_TYPE_OP 0 ++#define INST_TYPE_OPX 1 ++ ++/* Canonical instruction codes independent of encoding */ ++#define CALL_INST_CODE 0 ++#define JMPI_INST_CODE 1 ++#define LDBU_INST_CODE 2 ++#define ADDI_INST_CODE 3 ++#define STB_INST_CODE 4 ++#define BR_INST_CODE 5 ++#define LDB_INST_CODE 6 ++#define CMPGEI_INST_CODE 7 ++#define LDHU_INST_CODE 8 ++#define ANDI_INST_CODE 9 ++#define STH_INST_CODE 10 ++#define BGE_INST_CODE 11 ++#define LDH_INST_CODE 12 ++#define CMPLTI_INST_CODE 13 ++#define INITDA_INST_CODE 14 ++#define ORI_INST_CODE 15 ++#define STW_INST_CODE 16 ++#define BLT_INST_CODE 17 ++#define LDW_INST_CODE 18 ++#define CMPNEI_INST_CODE 19 ++#define FLUSHDA_INST_CODE 20 ++#define XORI_INST_CODE 21 ++#define STC_INST_CODE 22 ++#define BNE_INST_CODE 23 ++#define LDL_INST_CODE 24 ++#define CMPEQI_INST_CODE 25 ++#define LDBUIO_INST_CODE 26 ++#define MULI_INST_CODE 27 ++#define STBIO_INST_CODE 28 ++#define BEQ_INST_CODE 29 ++#define LDBIO_INST_CODE 30 ++#define CMPGEUI_INST_CODE 31 ++#define LDHUIO_INST_CODE 32 ++#define ANDHI_INST_CODE 33 ++#define STHIO_INST_CODE 34 ++#define BGEU_INST_CODE 35 ++#define LDHIO_INST_CODE 36 ++#define CMPLTUI_INST_CODE 37 ++#define CUSTOM_INST_CODE 38 ++#define INITD_INST_CODE 39 ++#define ORHI_INST_CODE 40 ++#define STWIO_INST_CODE 41 ++#define BLTU_INST_CODE 42 ++#define LDWIO_INST_CODE 43 ++#define FLUSHD_INST_CODE 44 ++#define XORHI_INST_CODE 45 ++#define ERET_INST_CODE 46 ++#define ROLI_INST_CODE 47 ++#define ROL_INST_CODE 48 ++#define FLUSHP_INST_CODE 49 ++#define RET_INST_CODE 50 ++#define NOR_INST_CODE 51 ++#define MULXUU_INST_CODE 52 ++#define CMPGE_INST_CODE 53 ++#define BRET_INST_CODE 54 ++#define ROR_INST_CODE 55 ++#define FLUSHI_INST_CODE 56 ++#define JMP_INST_CODE 57 ++#define AND_INST_CODE 58 ++#define CMPLT_INST_CODE 59 ++#define SLLI_INST_CODE 60 ++#define SLL_INST_CODE 61 ++#define OR_INST_CODE 62 ++#define MULXSU_INST_CODE 63 ++#define CMPNE_INST_CODE 64 ++#define SRLI_INST_CODE 65 ++#define SRL_INST_CODE 66 ++#define NEXTPC_INST_CODE 67 ++#define CALLR_INST_CODE 68 ++#define XOR_INST_CODE 69 ++#define MULXSS_INST_CODE 70 ++#define CMPEQ_INST_CODE 71 ++#define DIVU_INST_CODE 72 ++#define DIV_INST_CODE 73 ++#define RDCTL_INST_CODE 74 ++#define MUL_INST_CODE 75 ++#define CMPGEU_INST_CODE 76 ++#define INITI_INST_CODE 77 ++#define TRAP_INST_CODE 78 ++#define WRCTL_INST_CODE 79 ++#define CMPLTU_INST_CODE 80 ++#define ADD_INST_CODE 81 ++#define BREAK_INST_CODE 82 ++#define HBREAK_INST_CODE 83 ++#define SYNC_INST_CODE 84 ++#define SUB_INST_CODE 85 ++#define SRAI_INST_CODE 86 ++#define SRA_INST_CODE 87 ++#define INTR_INST_CODE 88 ++#define CRST_INST_CODE 89 ++#define RSV_INST_CODE 90 ++#define NUM_NIOS2_INST_CODES 91 ++ ++#ifndef ALT_ASM_SRC ++/* Instruction information entry. */ ++typedef struct { ++ const char* name; /* Assembly-language instruction name */ ++ int instType; /* INST_TYPE_OP or INST_TYPE_OPX */ ++ unsigned opcode; /* Value of instruction word OP/OPX field */ ++} Nios2InstInfo; ++ ++extern Nios2InstInfo nios2InstInfo[NUM_NIOS2_INST_CODES]; ++#endif /* ALT_ASM_SRC */ ++ ++/* Returns the instruction code given the 32-bit instruction word. */ ++#define GET_INST_CODE(Iw) \ ++ (IS_OPX_INST(Iw) ? opxToInstCode[GET_IW_OPX(Iw)] : \ ++ opToInstCode[GET_IW_OP(Iw)]) ++ ++#ifndef ALT_ASM_SRC ++extern int opToInstCode[64]; ++extern int opxToInstCode[64]; ++#endif /* ALT_ASM_SRC */ ++ ++/* ++ * MMU Memory Region Macros ++ */ ++#define USER_REGION_MIN_VADDR 0x00000000 ++#define USER_REGION_MAX_VADDR 0x7fffffff ++#define KERNEL_MMU_REGION_MIN_VADDR 0x80000000 ++#define KERNEL_MMU_REGION_MAX_VADDR 0xbfffffff ++#define KERNEL_REGION_MIN_VADDR 0xc0000000 ++#define KERNEL_REGION_MAX_VADDR 0xdfffffff ++#define IO_REGION_MIN_VADDR 0xe0000000 ++#define IO_REGION_MAX_VADDR 0xffffffff ++ ++#define MMU_PAGE_SIZE (0x1 << (MMU_ADDR_PAGE_OFFSET_SZ)) ++ ++#define isMmuUserRegion(Vaddr) \ ++ (GET_MMU_ADDR_USER_REGION(Vaddr) == MMU_ADDR_USER_REGION) ++#define isMmuKernelMmuRegion(Vaddr) \ ++ (GET_MMU_ADDR_KERNEL_MMU_REGION(Vaddr) == MMU_ADDR_KERNEL_MMU_REGION) ++#define isMmuKernelRegion(Vaddr) \ ++ (GET_MMU_ADDR_KERNEL_REGION(Vaddr) == MMU_ADDR_KERNEL_REGION) ++#define isMmuIORegion(Vaddr) \ ++ (GET_MMU_ADDR_IO_REGION(Vaddr) == MMU_ADDR_IO_REGION) ++ ++/* Does this virtual address bypass the TLB? */ ++#define vaddrBypassTlb(Vaddr) \ ++ (GET_MMU_ADDR_BYPASS_TLB(Vaddr) == MMU_ADDR_BYPASS_TLB) ++ ++/* If TLB is bypassed, is the address cacheable or uncachable. */ ++#define vaddrBypassTlbCacheable(Vaddr) \ ++ (GET_MMU_ADDR_BYPASS_TLB_CACHEABLE(Vaddr) == MMU_ADDR_BYPASS_TLB_CACHEABLE) ++ ++/* Compute physical address for regions that bypass the TLB. ++ Just need to clear some top bits. */ ++#define bypassTlbVaddrToPaddr(Vaddr) \ ++ ((Vaddr) & (MMU_ADDR_BYPASS_TLB_PADDR_MASK << MMU_ADDR_BYPASS_TLB_PADDR_LSB)) ++ ++/* Will the physical address fit in the Kernel/IO region virtual address space? ++ */ ++#define fitsInKernelRegion(Paddr) \ ++ (GET_MMU_ADDR_KERNEL_REGION(Paddr) == 0) ++#define fitsInIORegion(Paddr) \ ++ (GET_MMU_ADDR_IO_REGION(Paddr) == 0) ++ ++/* Convert a physical address to a Kernel/IO region virtual address. */ ++#define paddrToKernelRegionVaddr(Paddr) \ ++ ((Paddr) | (MMU_ADDR_KERNEL_REGION << MMU_ADDR_KERNEL_REGION_LSB)) ++#define paddrToIORegionVaddr(Paddr) \ ++ ((Paddr) | (MMU_ADDR_IO_REGION << MMU_ADDR_IO_REGION_LSB)) ++ ++/* Convert a virtual address to a Kernel/IO region virtual address. ++ Uses bypassTlbVaddrToPaddr to clear top bits. */ ++#define vaddrToKernelRegionVaddr(Vaddr) \ ++ paddrToKernelRegionVaddr(bypassTlbVaddrToPaddr(Vaddr)) ++#define vaddrToIORegionVaddr(Vaddr) \ ++ paddrToIORegionVaddr(bypassTlbVaddrToPaddr(Vaddr)) ++ ++/* Convert between VPN/PFN and virtual/physical addresses. */ ++#define vpnToVaddr(Vpn) ((Vpn) << MMU_ADDR_VPN_LSB) ++#define pfnToPaddr(Pfn) ((Pfn) << MMU_ADDR_PFN_LSB) ++#define vaddrToVpn(Vaddr) GET_MMU_ADDR_VPN(Vaddr) ++#define paddrToPfn(Paddr) GET_MMU_ADDR_PFN(Paddr) ++ ++/* Bitwise OR with a KERNEL region address to make it an IO region address. */ ++#define KERNEL_TO_IO_REGION 0x20000000 ++ ++/* Exception information. */ ++#ifndef ALT_ASM_SRC ++typedef struct { ++ const char* name; ++ int priority; ++ int subPriority; /* -1 if none */ ++ int causeId; /* -1 if none */ ++ int recordAddr; ++} ExcInfo; ++ ++extern ExcInfo excInfo[NUM_EXC_IDS]; ++#endif /* ALT_ASM_SRC */ ++ ++#endif /* _NIOS2_ISA_H_ */ +Index: binutils-2.17.50.0.12/include/opcode/nios2.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/include/opcode/nios2.h 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,386 @@ ++/* NOT ASSIGNED TO FSF. COPYRIGHT ALTERA. */ ++/* nios2.h. Altera New Jersey opcode list for GAS, the GNU assembler. ++ ++ Copyright (C) 2003 ++ by Nigel Gray (ngray@altera.com). ++ ++This file is part of GDB, GAS, and the GNU binutils. ++ ++GDB, GAS, and the GNU binutils are free software; you can redistribute ++them and/or modify them under the terms of the GNU General Public ++License as published by the Free Software Foundation; either version ++1, or (at your option) any later version. ++ ++GDB, GAS, and the GNU binutils are distributed in the hope that they ++will be useful, but WITHOUT ANY WARRANTY; without even the implied ++warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 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 file; see the file COPYING. If not, write to the Free ++Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++*/ ++ ++#ifndef _NIOS2_H_ ++#define _NIOS2_H_ ++ ++ ++/**************************************************************************** ++ * This file contains structures, bit masks and shift counts used ++ * by the GNU toolchain to define the New Jersey instruction set and ++ * access various opcode fields. ++ ****************************************************************************/ ++ ++enum overflow_type ++{ ++ call_target_overflow = 0, ++ branch_target_overflow, ++ address_offset_overflow, ++ signed_immed16_overflow, ++ unsigned_immed16_overflow, ++ unsigned_immed5_overflow, ++ custom_opcode_overflow, ++ no_overflow ++}; ++ ++/*--------------------------------------------------------------------------- ++ This structure holds information for a particular instruction ++ ---------------------------------------------------------------------------*/ ++ ++/* match When assembling, this ++ opcode is modified by the arguments to produce the actual opcode ++ that is used. If pinfo is INSN_MACRO, then this is 0. */ ++ ++/* mask If pinfo is not INSN_MACRO, then this is a bit mask for the ++ relevant portions of the opcode when disassembling. If the ++ actual opcode anded with the match field equals the opcode field, ++ then we have found the correct instruction. If pinfo is ++ INSN_MACRO, then this field is the macro identifier. */ ++ ++/* For a macro, this is INSN_MACRO. Otherwise, it is a collection ++ of bits describing the instruction, notably any relevant hazard ++ information. */ ++ ++struct nios2_opcode ++{ ++ const char *name; /* The name of the instruction. */ ++ const char *args; /* A string describing the arguments for this ++ instruction. */ ++ const char *args_test; /* Like args, but with an extra argument for ++ the expected opcode. */ ++ unsigned long num_args; /* The number of arguments the instruction ++ takes. */ ++ unsigned long match; /* The basic opcode for the instruction. */ ++ unsigned long mask; /* Mask for the opcode field of the ++ instruction. */ ++ unsigned long pinfo; /* Is this a real instruction or instruction ++ macro? */ ++ enum overflow_type overflow_msg; /* Msg template used to generate informative ++ message when fixup overflows. */ ++}; ++ ++/* This value is used in the nios2_opcode.pinfo field to indicate that the ++ instruction is a macro or pseudo-op. This requires special treatment by ++ the assembler, and is used by the disassembler to determine whether to ++ check for a nop. */ ++#define NIOS2_INSN_MACRO 0x80000000 ++#define NIOS2_INSN_MACRO_MOV 0x80000001 ++#define NIOS2_INSN_MACRO_MOVI 0x80000002 ++#define NIOS2_INSN_MACRO_MOVIA 0x80000004 ++ ++#define NIOS2_INSN_RELAXABLE 0x40000000 ++#define NIOS2_INSN_UBRANCH 0x00000010 ++#define NIOS2_INSN_CBRANCH 0x00000020 ++#define NIOS2_INSN_CALL 0x00000040 ++ ++#define NIOS2_INSN_ADDI 0x00000080 ++#define NIOS2_INSN_ANDI 0x00000100 ++#define NIOS2_INSN_ORI 0x00000200 ++#define NIOS2_INSN_XORI 0x00000400 ++ ++ ++ ++/* Associates a register name ($6) with a 5-bit index (eg 6). */ ++struct nios2_reg ++{ ++ const char *name; ++ const int index; ++}; ++ ++ ++/* ------------------------------------------------------------------------- ++ Bitfield masks for New Jersey instructions ++ -------------------------------------------------------------------------*/ ++ ++/* These are bit masks and shift counts to use to access the various ++ fields of an instruction. */ ++ ++/* Macros for getting and setting an instruction field. */ ++#define GET_INSN_FIELD(X, i) ((i) & OP_MASK_##X) >> OP_SH_##X ++#define SET_INSN_FIELD(X, i, j) (i) = ((i) &~ (OP_MASK_##X)) | \ ++ ((j) << OP_SH_##X) ++ ++ ++/* We include the auto-generated file nios2-isa.h and define the mask ++ and shifts below in terms of those in nios2-isa.h. This ensures ++ that the binutils and hardware are always in sync. */ ++ ++#include "nios2-isa.h" ++ ++#define OP_MASK_OP (IW_OP_MASK << IW_OP_LSB) ++#define OP_SH_OP IW_OP_LSB ++ ++ ++/* Masks and shifts for I-type instructions. */ ++ ++#define OP_MASK_IOP (IW_OP_MASK << IW_OP_LSB) ++#define OP_SH_IOP IW_OP_LSB ++ ++#define OP_MASK_IMM16 (IW_IMM16_MASK << IW_IMM16_LSB) ++#define OP_SH_IMM16 IW_IMM16_LSB ++ ++#define OP_MASK_IRD (IW_B_MASK << IW_B_LSB) ++ /* The same as T for I-type. */ ++#define OP_SH_IRD IW_B_LSB ++ ++#define OP_MASK_IRT (IW_B_MASK << IW_B_LSB) ++#define OP_SH_IRT IW_B_LSB ++ ++#define OP_MASK_IRS (IW_A_MASK << IW_A_LSB) ++#define OP_SH_IRS IW_A_LSB ++ ++/* Masks and shifts for R-type instructions. */ ++ ++#define OP_MASK_ROP (IW_OP_MASK << IW_OP_LSB) ++#define OP_SH_ROP IW_OP_LSB ++ ++#define OP_MASK_ROPX (IW_OPX_MASK << IW_OPX_LSB) ++#define OP_SH_ROPX IW_OPX_LSB ++ ++#define OP_MASK_RRD (IW_C_MASK << IW_C_LSB) ++#define OP_SH_RRD IW_C_LSB ++ ++#define OP_MASK_RRT (IW_B_MASK << IW_B_LSB) ++#define OP_SH_RRT IW_B_LSB ++ ++#define OP_MASK_RRS (IW_A_MASK << IW_A_LSB) ++#define OP_SH_RRS IW_A_LSB ++ ++/* Masks and shifts for J-type instructions. */ ++ ++#define OP_MASK_JOP (IW_OP_MASK << IW_OP_LSB) ++#define OP_SH_JOP IW_OP_LSB ++ ++#define OP_MASK_IMM26 (IW_IMM26_MASK << IW_IMM26_LSB) ++#define OP_SH_IMM26 IW_IMM26_LSB ++ ++/* Masks and shifts for CTL instructions. */ ++ ++#define OP_MASK_RCTL 0x000007c0 ++#define OP_SH_RCTL 6 ++ ++/* Break instruction imm5 field. */ ++#define OP_MASK_TRAP_IMM5 0x000007c0 ++#define OP_SH_TRAP_IMM5 6 ++ ++/* Instruction imm5 field. */ ++#define OP_MASK_IMM5 (IW_SHIFT_IMM5_MASK << IW_SHIFT_IMM5_LSB) ++#define OP_SH_IMM5 IW_SHIFT_IMM5_LSB ++ ++/* Cache operation fields (type j,i(s)). */ ++#define OP_MASK_CACHE_OPX (IW_B_MASK << IW_B_LSB) ++#define OP_SH_CACHE_OPX IW_B_LSB ++#define OP_MASK_CACHE_RRS (IW_A_MASK << IW_A_LSB) ++#define OP_SH_CACHE_RRS IW_A_LSB ++ ++/* Custom instruction masks. */ ++#define OP_MASK_CUSTOM_A 0x00010000 ++#define OP_SH_CUSTOM_A 16 ++ ++#define OP_MASK_CUSTOM_B 0x00008000 ++#define OP_SH_CUSTOM_B 15 ++ ++#define OP_MASK_CUSTOM_C 0x00004000 ++#define OP_SH_CUSTOM_C 14 ++ ++#define OP_MASK_CUSTOM_N 0x00003fc0 ++#define OP_SH_CUSTOM_N 6 ++#define OP_MAX_CUSTOM_N 255 ++ ++/* The following macros define the opcode matches for each ++ instruction code & OP_MASK_INST == OP_MATCH_INST. */ ++ ++/* OP instruction matches. */ ++#define OP_MATCH_ADDI OP_ADDI ++#define OP_MATCH_ANDHI OP_ANDHI ++#define OP_MATCH_ANDI OP_ANDI ++#define OP_MATCH_BEQ OP_BEQ ++#define OP_MATCH_BGE OP_BGE ++#define OP_MATCH_BGEU OP_BGEU ++#define OP_MATCH_BLT OP_BLT ++#define OP_MATCH_BLTU OP_BLTU ++#define OP_MATCH_BNE OP_BNE ++#define OP_MATCH_BR OP_BR ++#define OP_MATCH_FLUSHD OP_FLUSHD ++#define OP_MATCH_FLUSHDA OP_FLUSHDA ++#define OP_MATCH_INITD OP_INITD ++#define OP_MATCH_INITDA OP_INITDA ++#define OP_MATCH_CALL OP_CALL ++#define OP_MATCH_CMPEQI OP_CMPEQI ++#define OP_MATCH_CMPGEI OP_CMPGEI ++#define OP_MATCH_CMPGEUI OP_CMPGEUI ++#define OP_MATCH_CMPLTI OP_CMPLTI ++#define OP_MATCH_CMPLTUI OP_CMPLTUI ++#define OP_MATCH_CMPNEI OP_CMPNEI ++#define OP_MATCH_JMPI OP_JMPI ++#define OP_MATCH_LDB OP_LDB ++#define OP_MATCH_LDBIO OP_LDBIO ++#define OP_MATCH_LDBU OP_LDBU ++#define OP_MATCH_LDBUIO OP_LDBUIO ++#define OP_MATCH_LDH OP_LDH ++#define OP_MATCH_LDHIO OP_LDHIO ++#define OP_MATCH_LDHU OP_LDHU ++#define OP_MATCH_LDHUIO OP_LDHUIO ++#define OP_MATCH_LDL OP_LDL ++#define OP_MATCH_LDW OP_LDW ++#define OP_MATCH_LDWIO OP_LDWIO ++#define OP_MATCH_MULI OP_MULI ++#define OP_MATCH_OPX OP_OPX ++#define OP_MATCH_ORHI OP_ORHI ++#define OP_MATCH_ORI OP_ORI ++#define OP_MATCH_STB OP_STB ++#define OP_MATCH_STBIO OP_STBIO ++#define OP_MATCH_STC OP_STC ++#define OP_MATCH_STH OP_STH ++#define OP_MATCH_STHIO OP_STHIO ++#define OP_MATCH_STW OP_STW ++#define OP_MATCH_STWIO OP_STWIO ++#define OP_MATCH_CUSTOM OP_CUSTOM ++#define OP_MATCH_XORHI OP_XORHI ++#define OP_MATCH_XORI OP_XORI ++#define OP_MATCH_OPX OP_OPX ++ ++ ++ ++/* OPX instruction values. */ ++#define OP_MATCH_ADD ((OPX_ADD << IW_OPX_LSB) | (OP_OPX)) ++#define OP_MATCH_AND ((OPX_AND << IW_OPX_LSB) | (OP_OPX)) ++#define OP_MATCH_BREAK ((0x1e << 17) | (OPX_BREAK << IW_OPX_LSB) | \ ++ (OP_OPX)) ++#define OP_MATCH_BRET ((0xf0000000) | (OPX_BRET << IW_OPX_LSB) | \ ++ (OP_OPX)) ++#define OP_MATCH_CALLR ((0x1f << 17) | (OPX_CALLR << IW_OPX_LSB) | \ ++ (OP_OPX)) ++#define OP_MATCH_CMPEQ ((OPX_CMPEQ << IW_OPX_LSB) | (OP_OPX)) ++#define OP_MATCH_CMPGE ((OPX_CMPGE << IW_OPX_LSB) | (OP_OPX)) ++#define OP_MATCH_CMPGEU ((OPX_CMPGEU << IW_OPX_LSB) | (OP_OPX)) ++#define OP_MATCH_CMPLT ((OPX_CMPLT << IW_OPX_LSB) | (OP_OPX)) ++#define OP_MATCH_CMPLTU ((OPX_CMPLTU << IW_OPX_LSB) | (OP_OPX)) ++#define OP_MATCH_CMPNE ((OPX_CMPNE << IW_OPX_LSB) | (OP_OPX)) ++#define OP_MATCH_DIV ((OPX_DIV << IW_OPX_LSB) | (OP_OPX)) ++#define OP_MATCH_DIVU ((OPX_DIVU << IW_OPX_LSB) | (OP_OPX)) ++#define OP_MATCH_JMP ((OPX_JMP << IW_OPX_LSB) | (OP_OPX)) ++#define OP_MATCH_MUL ((OPX_MUL << IW_OPX_LSB) | (OP_OPX)) ++#define OP_MATCH_MULXSS ((OPX_MULXSS << IW_OPX_LSB) | (OP_OPX)) ++#define OP_MATCH_MULXSU ((OPX_MULXSU << IW_OPX_LSB) | (OP_OPX)) ++#define OP_MATCH_MULXUU ((OPX_MULXUU << IW_OPX_LSB) | (OP_OPX)) ++#define OP_MATCH_NEXTPC ((OPX_NEXTPC << IW_OPX_LSB) | (OP_OPX)) ++#define OP_MATCH_NOR ((OPX_NOR << IW_OPX_LSB) | (OP_OPX)) ++#define OP_MATCH_OR ((OPX_OR << IW_OPX_LSB) | (OP_OPX)) ++#define OP_MATCH_RDCTL ((OPX_RDCTL << IW_OPX_LSB) | (OP_OPX)) ++#define OP_MATCH_RET ((0xf8000000) | (OPX_RET << IW_OPX_LSB) | \ ++ (OP_OPX)) ++#define OP_MATCH_ROL ((OPX_ROL << IW_OPX_LSB) | (OP_OPX)) ++#define OP_MATCH_ROLI ((OPX_ROLI << IW_OPX_LSB) | (OP_OPX)) ++#define OP_MATCH_ROR ((OPX_ROR << IW_OPX_LSB) | (OP_OPX)) ++#define OP_MATCH_SLL ((OPX_SLL << IW_OPX_LSB) | (OP_OPX)) ++#define OP_MATCH_SLLI ((OPX_SLLI << IW_OPX_LSB) | (OP_OPX)) ++#define OP_MATCH_SRA ((OPX_SRA << IW_OPX_LSB) | (OP_OPX)) ++#define OP_MATCH_SRAI ((OPX_SRAI << IW_OPX_LSB) | (OP_OPX)) ++#define OP_MATCH_SRL ((OPX_SRL << IW_OPX_LSB) | (OP_OPX)) ++#define OP_MATCH_SRLI ((OPX_SRLI << IW_OPX_LSB) | (OP_OPX)) ++#define OP_MATCH_SUB ((OPX_SUB << IW_OPX_LSB) | (OP_OPX)) ++#define OP_MATCH_SYNC ((OPX_SYNC << IW_OPX_LSB) | (OP_OPX)) ++#define OP_MATCH_TRAP ((0x1d << 17) | (OPX_TRAP << IW_OPX_LSB) | \ ++ (OP_OPX)) ++#define OP_MATCH_ERET ((0xe8000000) | (OPX_ERET << IW_OPX_LSB) | \ ++ (OP_OPX)) ++#define OP_MATCH_WRCTL ((OPX_WRCTL << IW_OPX_LSB) | (OP_OPX)) ++#define OP_MATCH_XOR ((OPX_XOR << IW_OPX_LSB) | (OP_OPX)) ++#define OP_MATCH_FLUSHI ((OPX_FLUSHI << IW_OPX_LSB) | (OP_OPX)) ++#define OP_MATCH_FLUSHP ((OPX_FLUSHP << IW_OPX_LSB) | (OP_OPX)) ++#define OP_MATCH_INITI ((OPX_INITI << IW_OPX_LSB) | (OP_OPX)) ++ ++/* Some unusual op masks. */ ++#define OP_MASK_BREAK ((OP_MASK_RRS | OP_MASK_RRT | OP_MASK_RRD | \ ++ OP_MASK_ROPX | OP_MASK_OP) & 0xfffff03f) ++#define OP_MASK_CALLR ((OP_MASK_RRT | OP_MASK_RRD | OP_MASK_ROPX | \ ++ OP_MASK_OP)) ++#define OP_MASK_JMP ((OP_MASK_RRT | OP_MASK_RRD | OP_MASK_ROPX | \ ++ OP_MASK_OP)) ++#define OP_MASK_SYNC ((OP_MASK_RRT | OP_MASK_RRD | OP_MASK_ROPX | \ ++ OP_MASK_OP)) ++#define OP_MASK_TRAP ((OP_MASK_RRS | OP_MASK_RRT | OP_MASK_RRD | \ ++ OP_MASK_ROPX | OP_MASK_OP) & 0xfffff83f) ++#define OP_MASK_WRCTL ((OP_MASK_RRT | OP_MASK_RRD | OP_MASK_ROPX | \ ++ OP_MASK_OP)) /*& 0xfffff83f */ ++#define OP_MASK_NEXTPC ((OP_MASK_RRS | OP_MASK_RRT | OP_MASK_ROPX | \ ++ OP_MASK_OP)) ++#define OP_MASK_FLUSHI ((OP_MASK_RRT | OP_MASK_RRD | OP_MASK_ROPX | \ ++ OP_MASK_OP)) ++#define OP_MASK_INITI ((OP_MASK_RRT | OP_MASK_RRD | OP_MASK_ROPX | \ ++ OP_MASK_OP)) ++ ++#define OP_MASK_ROLI ((OP_MASK_RRT | OP_MASK_ROPX | OP_MASK_OP)) ++#define OP_MASK_SLLI ((OP_MASK_RRT | OP_MASK_ROPX | OP_MASK_OP)) ++#define OP_MASK_SRAI ((OP_MASK_RRT | OP_MASK_ROPX | OP_MASK_OP)) ++#define OP_MASK_SRLI ((OP_MASK_RRT | OP_MASK_ROPX | OP_MASK_OP)) ++#define OP_MASK_RDCTL ((OP_MASK_RRS | OP_MASK_RRT | OP_MASK_ROPX | \ ++ OP_MASK_OP)) /*& 0xfffff83f */ ++ ++#ifndef OP_MASK ++#define OP_MASK 0xffffffff ++#endif ++ ++/* These are the data structures we use to hold the instruction information. */ ++ ++extern const struct nios2_opcode nios2_builtin_opcodes[]; ++extern const int bfd_nios2_num_builtin_opcodes; ++extern struct nios2_opcode *nios2_opcodes; ++extern int bfd_nios2_num_opcodes; ++ ++/* These are the data structures used to hold the operand parsing information. */ ++#if 0 ++extern const struct nios2_arg_parser nios2_arg_parsers[]; ++extern struct nios2_arg_parser* nios2_arg_parsers; ++extern const int nios2_num_builtin_arg_parsers; ++extern int nios2_num_arg_parsers; ++#endif ++ ++/* These are the data structures used to hold the register information. */ ++extern const struct nios2_reg nios2_builtin_regs[]; ++extern struct nios2_reg *nios2_regs; ++extern const int nios2_num_builtin_regs; ++extern int nios2_num_regs; ++ ++/* Machine-independent macro for number of opcodes. */ ++ ++#define NUMOPCODES bfd_nios2_num_opcodes ++#define NUMREGISTERS nios2_num_regs; ++ ++/* These are used in disassembly to get the correct register names. */ ++#define NUMREGNAMES 32 ++#define NUMCTLREGNAMES 32 ++#define CTLREGBASE 42 ++#define COPROCREGBASE 83 ++#define NUMCOPROCREGNAMES 32 ++ ++ ++/* This is made extern so that the assembler can use it to find out ++ what instruction caused an error. */ ++extern const struct nios2_opcode *nios2_find_opcode_hash (unsigned long); ++ ++/* Overflow message strings used in the assembler. */ ++extern char *overflow_msgs[]; ++ ++#endif /* _NIOS2_H */ +Index: binutils-2.17.50.0.12/ld/emulparams/nios2elf.sh +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/ld/emulparams/nios2elf.sh 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,20 @@ ++SCRIPT_NAME=elf ++TEMPLATE_NAME=elf32 ++EXTRA_EM_FILE= ++OUTPUT_FORMAT="elf32-littlenios2" ++LITTLE_OUTPUT_FORMAT="elf32-littlenios2" ++BIG_OUTPUT_FORMAT="elf32-bignios2" ++TEXT_START_ADDR=0x1000 ++OTHER_GOT_SYMBOLS=' ++ _gp = ALIGN(16) + 0x7ff0; ++ PROVIDE(gp = _gp); ++' ++ARCH=nios2 ++MACHINE= ++MAXPAGESIZE="CONSTANT (MAXPAGESIZE)" ++COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)" ++ENTRY=_start ++NOP=0x0001883a ++ ++GENERATE_SHLIB_SCRIPT=yes ++GENERATE_PIE_SCRIPT=yes +Index: binutils-2.17.50.0.12/opcodes/nios2-dis.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/opcodes/nios2-dis.c 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,463 @@ ++/* NOT ASSIGNED TO FSF. COPYRIGHT ALTERA. */ ++/* nios2-dis.c -- Altera New Jersey disassemble routines. ++ ++ Copyright (C) 2003 ++ by Nigel Gray (ngray@altera.com). ++ ++This file is part of GDB, GAS, and the GNU binutils. ++ ++GDB, GAS, and the GNU binutils are free software; you can redistribute ++them and/or modify them under the terms of the GNU General Public ++License as published by the Free Software Foundation; either version ++1, or (at your option) any later version. ++ ++GDB, GAS, and the GNU binutils are distributed in the hope that they ++will be useful, but WITHOUT ANY WARRANTY; without even the implied ++warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 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 file; see the file COPYING. If not, write to the Free ++Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ++ ++#include <stdlib.h> ++#include <assert.h> ++#include <string.h> ++#include "dis-asm.h" ++#include "opcode/nios2.h" ++ ++/* No symbol table is available when this code runs out in an embedded ++ system as when it is used for disassembler support in a monitor. */ ++ ++#if !defined(EMBEDDED_ENV) ++#define SYMTAB_AVAILABLE 1 ++#include "elf-bfd.h" ++#include "elf/nios2.h" ++#endif ++ ++/* length of New Jersey instruction in bytes */ ++#define INSNLEN 4 ++ ++/* helper function prototypes */ ++static int nios2_disassemble (bfd_vma, unsigned long, disassemble_info *); ++static void nios2_init_opcode_hash (void); ++ ++ ++static int nios2_print_insn_arg (const char *argptr, unsigned long opcode, ++ bfd_vma address, disassemble_info * info); ++ ++ ++/* print_insn_nios2 is the main disassemble function for New Jersey. ++ The function diassembler(abfd) (source in disassemble.c) returns a ++ pointer to this either print_insn_big_nios2 or ++ print_insn_little_nios2, which in turn call this function, when the ++ bfd machine type is New Jersey. print_insn_nios2 reads the ++ instruction word at the address given, and prints the disassembled ++ instruction on the stream info->stream using info->fprintf_func. */ ++ ++static int ++print_insn_nios2 (bfd_vma address, disassemble_info * info, ++ enum bfd_endian endianness) ++{ ++ /* buffer into which the instruction bytes are written */ ++ bfd_byte buffer[INSNLEN]; ++ /* used to indicate return status from function calls */ ++ int status; ++ ++ assert (info != NULL); ++ ++ status = (*info->read_memory_func) (address, buffer, INSNLEN, info); ++ if (status == 0) ++ { ++ unsigned long insn; ++ if (endianness == BFD_ENDIAN_BIG) ++ insn = (unsigned long) bfd_getb32 (buffer); ++ else ++ insn = (unsigned long) bfd_getl32 (buffer); ++ status = nios2_disassemble (address, insn, info); ++ } ++ else ++ { ++ (*info->memory_error_func) (status, address, info); ++ status = -1; ++ } ++ return status; ++} ++ ++int ++print_insn_big_nios2 (bfd_vma address, disassemble_info * info) ++{ ++ return print_insn_nios2 (address, info, BFD_ENDIAN_BIG); ++} ++ ++int ++print_insn_little_nios2 (bfd_vma address, disassemble_info * info) ++{ ++ return print_insn_nios2 (address, info, BFD_ENDIAN_LITTLE); ++} ++ ++/* Data structures used by the opcode hash table */ ++ ++typedef struct _nios2_opcode_hash ++{ ++ const struct nios2_opcode *opcode; ++ struct _nios2_opcode_hash *next; ++} nios2_opcode_hash; ++ ++static bfd_boolean nios2_hash_init = 0; ++static nios2_opcode_hash *nios2_hash[(OP_MASK_OP) + 1]; ++ ++/* separate hash table for pseudo-ops */ ++static nios2_opcode_hash *nios2_ps_hash[(OP_MASK_OP) + 1]; ++ ++/* Function to initialize the opcode hash table */ ++ ++void ++nios2_init_opcode_hash () ++{ ++ unsigned int i; ++ register const struct nios2_opcode *op; ++ nios2_opcode_hash *tmp_hash; ++ ++ for (i = 0; i <= OP_MASK_OP; ++i) ++ { ++ nios2_hash[0] = NULL; ++ } ++ for (i = 0; i <= OP_MASK_OP; i++) ++ { ++ for (op = nios2_opcodes; op < &nios2_opcodes[NUMOPCODES]; op++) ++ { ++ if ((op->pinfo & NIOS2_INSN_MACRO) == NIOS2_INSN_MACRO) ++ { ++ if (i == ((op->match >> OP_SH_OP) & OP_MASK_OP) && ++ (op-> ++ pinfo & (NIOS2_INSN_MACRO_MOV | NIOS2_INSN_MACRO_MOVI) & ++ 0x7fffffff) != 0) ++ { ++ tmp_hash = nios2_ps_hash[i]; ++ if (tmp_hash == NULL) ++ { ++ tmp_hash = ++ (nios2_opcode_hash *) ++ malloc (sizeof (nios2_opcode_hash)); ++ nios2_ps_hash[i] = tmp_hash; ++ } ++ else ++ { ++ while (tmp_hash->next != NULL) ++ tmp_hash = tmp_hash->next; ++ tmp_hash->next = ++ (nios2_opcode_hash *) ++ malloc (sizeof (nios2_opcode_hash)); ++ tmp_hash = tmp_hash->next; ++ } ++ if (tmp_hash == NULL) ++ { ++ fprintf (stderr, ++ "error allocating memory...broken disassembler\n"); ++ abort (); ++ } ++ tmp_hash->opcode = op; ++ tmp_hash->next = NULL; ++ } ++ } ++ else if (i == ((op->match >> OP_SH_OP) & OP_MASK_OP)) ++ { ++ tmp_hash = nios2_hash[i]; ++ if (tmp_hash == NULL) ++ { ++ tmp_hash = ++ (nios2_opcode_hash *) malloc (sizeof (nios2_opcode_hash)); ++ nios2_hash[i] = tmp_hash; ++ } ++ else ++ { ++ while (tmp_hash->next != NULL) ++ tmp_hash = tmp_hash->next; ++ tmp_hash->next = ++ (nios2_opcode_hash *) malloc (sizeof (nios2_opcode_hash)); ++ tmp_hash = tmp_hash->next; ++ } ++ if (tmp_hash == NULL) ++ { ++ fprintf (stderr, ++ "error allocating memory...broken disassembler\n"); ++ abort (); ++ } ++ tmp_hash->opcode = op; ++ tmp_hash->next = NULL; ++ } ++ } ++ } ++ nios2_hash_init = 1; ++#ifdef DEBUG_HASHTABLE ++ for (i = 0; i <= OP_MASK_OP; ++i) ++ { ++ printf ("index: 0x%02X ops: ", i); ++ tmp_hash = nios2_hash[i]; ++ if (tmp_hash != NULL) ++ { ++ while (tmp_hash != NULL) ++ { ++ printf ("%s ", tmp_hash->opcode->name); ++ tmp_hash = tmp_hash->next; ++ } ++ } ++ printf ("\n"); ++ } ++ ++ for (i = 0; i <= OP_MASK_OP; ++i) ++ { ++ printf ("index: 0x%02X ops: ", i); ++ tmp_hash = nios2_ps_hash[i]; ++ if (tmp_hash != NULL) ++ { ++ while (tmp_hash != NULL) ++ { ++ printf ("%s ", tmp_hash->opcode->name); ++ tmp_hash = tmp_hash->next; ++ } ++ } ++ printf ("\n"); ++ } ++#endif ++} ++ ++/* Function which returns a pointer to an nios2_opcode struct for ++ a given instruction opcode, or NULL if there is an error */ ++ ++const struct nios2_opcode * ++nios2_find_opcode_hash (unsigned long opcode) ++{ ++ nios2_opcode_hash *entry; ++ ++ /* Build a hash table to shorten the search time. */ ++ if (!nios2_hash_init) ++ { ++ nios2_init_opcode_hash (); ++ } ++ ++ /* first look in the pseudo-op hashtable */ ++ entry = nios2_ps_hash[(opcode >> OP_SH_OP) & OP_MASK_OP]; ++ ++ /* look for a match and if we get one, this is the instruction we decode */ ++ while (entry != NULL) ++ { ++ if ((entry->opcode->match) == (opcode & entry->opcode->mask)) ++ return entry->opcode; ++ else ++ entry = entry->next; ++ } ++ ++ /* if we haven't yet returned, then we need to look in the main ++ hashtable */ ++ entry = nios2_hash[(opcode >> OP_SH_OP) & OP_MASK_OP]; ++ ++ if (entry == NULL) ++ return NULL; ++ ++ ++ while (entry != NULL) ++ { ++ if ((entry->opcode->match) == (opcode & entry->opcode->mask)) ++ return entry->opcode; ++ else ++ entry = entry->next; ++ } ++ ++ return NULL; ++} ++ ++/* nios2_disassemble does all the work of disassembling a New Jersey ++ instruction opcode */ ++ ++int ++nios2_disassemble (bfd_vma address, unsigned long opcode, ++ disassemble_info * info) ++{ ++ const struct nios2_opcode *op; ++ const char *argstr; ++ ++ info->bytes_per_line = INSNLEN; ++ info->bytes_per_chunk = INSNLEN; ++ info->display_endian = info->endian; ++ info->insn_info_valid = 1; ++ info->branch_delay_insns = 0; ++ info->data_size = 0; ++ info->insn_type = dis_nonbranch; ++ info->target = 0; ++ info->target2 = 0; ++ ++ /* Find the major opcode and use this to disassemble ++ the instruction and its arguments */ ++ op = nios2_find_opcode_hash (opcode); ++ ++ if (op != NULL) ++ { ++ bfd_boolean is_nop = FALSE; ++ if (op->pinfo == NIOS2_INSN_MACRO_MOV) ++ { ++ /* check for mov r0, r0 and if it is ++ change to nop */ ++ int dst, src; ++ dst = GET_INSN_FIELD (RRD, opcode); ++ src = GET_INSN_FIELD (RRS, opcode); ++ if (dst == 0 && src == 0) ++ { ++ (*info->fprintf_func) (info->stream, "nop"); ++ is_nop = TRUE; ++ } ++ else ++ { ++ (*info->fprintf_func) (info->stream, "%s", op->name); ++ } ++ } ++ else ++ { ++ (*info->fprintf_func) (info->stream, "%s", op->name); ++ } ++ ++ if (!is_nop) ++ { ++ argstr = op->args; ++ if (argstr != NULL && *argstr != '\0') ++ { ++ (*info->fprintf_func) (info->stream, "\t"); ++ while (*argstr != '\0') ++ { ++ nios2_print_insn_arg (argstr, opcode, address, info); ++ ++argstr; ++ } ++ } ++ } ++ } ++ else ++ { ++ /* Handle undefined instructions. */ ++ info->insn_type = dis_noninsn; ++ (*info->fprintf_func) (info->stream, "0x%x", opcode); ++ } ++ // this tells the caller how far to advance the program counter ++ return INSNLEN; ++} ++ ++/* The function nios2_print_insn_arg uses the character pointed ++ to by argptr to determine how it print the next token or separator ++ character in the arguments to an instruction */ ++int ++nios2_print_insn_arg (const char *argptr, ++ unsigned long opcode, bfd_vma address, ++ disassemble_info * info) ++{ ++ unsigned long i = 0; ++ unsigned long reg_base; ++ ++ assert (argptr != NULL); ++ assert (info != NULL); ++ ++ switch (*argptr) ++ { ++ case ',': ++ case '(': ++ case ')': ++ (*info->fprintf_func) (info->stream, "%c", *argptr); ++ break; ++ case 'd': ++ i = GET_INSN_FIELD (RRD, opcode); ++ ++ if (GET_INSN_FIELD (OP, opcode) == OP_MATCH_CUSTOM ++ && GET_INSN_FIELD (CUSTOM_C, opcode) == 0) ++ reg_base = COPROCREGBASE; ++ else ++ reg_base = 0; ++ ++ if (i < NUMREGNAMES) ++ (*info->fprintf_func) (info->stream, "%s", ++ nios2_regs[i + reg_base].name); ++ else ++ (*info->fprintf_func) (info->stream, "unknown"); ++ break; ++ case 's': ++ i = GET_INSN_FIELD (RRS, opcode); ++ ++ if (GET_INSN_FIELD (OP, opcode) == OP_MATCH_CUSTOM ++ && GET_INSN_FIELD (CUSTOM_A, opcode) == 0) ++ reg_base = COPROCREGBASE; ++ else ++ reg_base = 0; ++ ++ if (i < NUMREGNAMES) ++ (*info->fprintf_func) (info->stream, "%s", ++ nios2_regs[i + reg_base].name); ++ else ++ (*info->fprintf_func) (info->stream, "unknown"); ++ break; ++ case 't': ++ i = GET_INSN_FIELD (RRT, opcode); ++ ++ if (GET_INSN_FIELD (OP, opcode) == OP_MATCH_CUSTOM ++ && GET_INSN_FIELD (CUSTOM_B, opcode) == 0) ++ reg_base = COPROCREGBASE; ++ else ++ reg_base = 0; ++ ++ if (i < NUMREGNAMES) ++ (*info->fprintf_func) (info->stream, "%s", ++ nios2_regs[i + reg_base].name); ++ else ++ (*info->fprintf_func) (info->stream, "unknown"); ++ break; ++ case 'i': ++ /* 16-bit signed immediate */ ++ i = (signed) (GET_INSN_FIELD (IMM16, opcode) << 16) >> 16; ++ (*info->fprintf_func) (info->stream, "%d", i); ++ break; ++ case 'u': ++ /* 16-bit unsigned immediate */ ++ i = GET_INSN_FIELD (IMM16, opcode); ++ (*info->fprintf_func) (info->stream, "%d", i); ++ break; ++ case 'o': ++ /* 16-bit signed immediate address offset */ ++ i = (signed) (GET_INSN_FIELD (IMM16, opcode) << 16) >> 16; ++ address = address + 4 + i; /* NG changed to byte offset 1/9/03 */ ++ (*info->print_address_func) (address, info); ++ break; ++ case 'p': ++ /* 5-bit unsigned immediate */ ++ i = GET_INSN_FIELD (CACHE_OPX, opcode); ++ (*info->fprintf_func) (info->stream, "%d", i); ++ break; ++ case 'j': ++ /* 5-bit unsigned immediate */ ++ i = GET_INSN_FIELD (IMM5, opcode); ++ (*info->fprintf_func) (info->stream, "%d", i); ++ break; ++ case 'l': ++ /* 8-bit unsigned immediate */ ++ /* FIXME - not yet implemented */ ++ i = GET_INSN_FIELD (CUSTOM_N, opcode); ++ (*info->fprintf_func) (info->stream, "%u", i); ++ break; ++ case 'm': ++ /* 26-bit unsigned immediate */ ++ i = GET_INSN_FIELD (IMM26, opcode); ++ /* this translates to an address because its only used in call instructions */ ++ address = (address & 0xf0000000) | (i << 2); ++ (*info->print_address_func) (address, info); ++ break; ++ case 'c': ++ i = GET_INSN_FIELD (IMM5, opcode); /* ctrl register index */ ++ (*info->fprintf_func) (info->stream, "%s", ++ nios2_regs[CTLREGBASE + i].name); ++ break; ++ case 'b': ++ i = GET_INSN_FIELD (IMM5, opcode); ++ (*info->fprintf_func) (info->stream, "%d", i); ++ break; ++ default: ++ (*info->fprintf_func) (info->stream, "unknown"); ++ break; ++ } ++ return 0; ++} +Index: binutils-2.17.50.0.12/opcodes/nios2-opc.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ binutils-2.17.50.0.12/opcodes/nios2-opc.c 2010-06-30 15:06:08.000000000 +0200 +@@ -0,0 +1,330 @@ ++/* NOT ASSIGNED TO FSF. COPYRIGHT ALTERA. */ ++/* nios2-opc.c -- Altera New Jersey opcode list. ++ ++ Copyright (C) 2003 ++ by Nigel Gray (ngray@altera.com). ++ ++This file is part of GDB, GAS, and the GNU binutils. ++ ++GDB, GAS, and the GNU binutils are free software; you can redistribute ++them and/or modify them under the terms of the GNU General Public ++License as published by the Free Software Foundation; either version ++1, or (at your option) any later version. ++ ++GDB, GAS, and the GNU binutils are distributed in the hope that they ++will be useful, but WITHOUT ANY WARRANTY; without even the implied ++warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 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 file; see the file COPYING. If not, write to the Free ++Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ++ ++#include <stdio.h> ++#include "opcode/nios2.h" ++ ++/* Register string table */ ++ ++const struct nios2_reg nios2_builtin_regs[] = { ++ {"zero", 0}, ++ {"at", 1}, // assembler temporary ++ {"r2", 2}, ++ {"r3", 3}, ++ {"r4", 4}, ++ {"r5", 5}, ++ {"r6", 6}, ++ {"r7", 7}, ++ {"r8", 8}, ++ {"r9", 9}, ++ {"r10", 10}, ++ {"r11", 11}, ++ {"r12", 12}, ++ {"r13", 13}, ++ {"r14", 14}, ++ {"r15", 15}, ++ {"r16", 16}, ++ {"r17", 17}, ++ {"r18", 18}, ++ {"r19", 19}, ++ {"r20", 20}, ++ {"r21", 21}, ++ {"r22", 22}, ++ {"r23", 23}, ++ {"et", 24}, ++ {"bt", 25}, ++ {"gp", 26}, /* global pointer */ ++ {"sp", 27}, /* stack pointer */ ++ {"fp", 28}, /* frame pointer */ ++ {"ea", 29}, /* exception return address */ ++ {"ba", 30}, /* breakpoint return address */ ++ {"ra", 31}, /* return address */ ++ ++ /* alternative names for special registers */ ++ {"r0", 0}, ++ {"r1", 1}, ++ {"r24", 24}, ++ {"r25", 25}, ++ {"r26", 26}, ++ {"r27", 27}, ++ {"r28", 28}, ++ {"r29", 29}, ++ {"r30", 30}, ++ {"r31", 31}, ++ ++ /* control register names */ ++ {"status", 0}, ++ {"estatus", 1}, ++ {"bstatus", 2}, ++ {"ienable", 3}, ++ {"ipending", 4}, ++ {"cpuid", 5}, ++ {"ctl6", 6}, ++ {"exception", 7}, ++ {"pteaddr", 8}, ++ {"tlbacc", 9}, ++ {"tlbmisc", 10}, ++ {"fstatus", 11}, ++ {"badaddr", 12}, ++ {"config", 13}, ++ {"mpubase", 14}, ++ {"mpuacc", 15}, ++ {"ctl16", 16}, ++ {"ctl17", 17}, ++ {"ctl18", 18}, ++ {"ctl19", 19}, ++ {"ctl20", 20}, ++ {"ctl21", 21}, ++ {"ctl22", 22}, ++ {"ctl23", 23}, ++ {"ctl24", 24}, ++ {"ctl25", 25}, ++ {"ctl26", 26}, ++ {"ctl27", 27}, ++ {"ctl28", 28}, ++ {"ctl29", 29}, ++ {"ctl30", 30}, ++ {"ctl31", 31}, ++ ++ /* alternative names for special control registers */ ++ {"ctl0", 0}, ++ {"ctl1", 1}, ++ {"ctl2", 2}, ++ {"ctl3", 3}, ++ {"ctl4", 4}, ++ {"ctl5", 5}, ++ {"ctl7", 7}, ++ {"ctl8", 8}, ++ {"ctl9", 9}, ++ {"ctl10", 10}, ++ {"ctl11", 11}, ++ {"ctl12", 12}, ++ {"ctl13", 13}, ++ {"ctl14", 14}, ++ {"ctl15", 15}, ++ ++ ++ /* coprocessor register names */ ++ {"c0", 0}, ++ {"c1", 1}, ++ {"c2", 2}, ++ {"c3", 3}, ++ {"c4", 4}, ++ {"c5", 5}, ++ {"c6", 6}, ++ {"c7", 7}, ++ {"c8", 8}, ++ {"c9", 9}, ++ {"c10", 10}, ++ {"c11", 11}, ++ {"c12", 12}, ++ {"c13", 13}, ++ {"c14", 14}, ++ {"c15", 15}, ++ {"c16", 16}, ++ {"c17", 17}, ++ {"c18", 18}, ++ {"c19", 19}, ++ {"c20", 20}, ++ {"c21", 21}, ++ {"c22", 22}, ++ {"c23", 23}, ++ {"c24", 24}, ++ {"c25", 25}, ++ {"c26", 26}, ++ {"c27", 27}, ++ {"c28", 28}, ++ {"c29", 29}, ++ {"c30", 30}, ++ {"c31", 31}, ++}; ++ ++#define NIOS2_NUM_REGS \ ++ ((sizeof nios2_builtin_regs) / (sizeof (nios2_builtin_regs[0]))) ++const int nios2_num_builtin_regs = NIOS2_NUM_REGS; ++ ++/* const removed from the following to allow for dynamic extensions to the ++ * built-in instruction set. */ ++struct nios2_reg *nios2_regs = (struct nios2_reg *) nios2_builtin_regs; ++int nios2_num_regs = NIOS2_NUM_REGS; ++#undef NIOS2_NUM_REGS ++ ++/* overflow message string templates */ ++ ++char *overflow_msgs[] = { ++ "call target address 0x%08x out of range 0x%08x to 0x%08x", ++ "branch offset %d out of range %d to %d", ++ "%s offset %d out of range %d to %d", ++ "immediate value %d out of range %d to %d", ++ "immediate value %u out of range %u to %u", ++ "immediate value %u out of range %u to %u", ++ "custom instruction opcode %u out of range %u to %u", ++}; ++ ++ ++ ++/*-------------------------------------------------------------------------------- ++ This is the opcode table used by the New Jersey GNU as, disassembler and GDB ++ --------------------------------------------------------------------------------*/ ++ ++/* ++ The following letters can appear in the args field of the nios2_opcode ++ structure: ++ ++ c - a 5-bit control register index or break opcode ++ d - a 5-bit destination register index ++ s - a 5-bit left source register index ++ t - a 5-bit right source register index ++ i - a 16-bit signed immediate ++ u - a 16-bit unsigned immediate ++ ++ j - a 5-bit unsigned immediate ++ k - a 6-bit unsigned immediate ++ l - an 8-bit unsigned immediate ++ m - a 26-bit unsigned immediate ++*/ ++ ++/* *INDENT-OFF* */ ++/* FIXME: Re-format for GNU standards */ ++const struct nios2_opcode nios2_builtin_opcodes[] = ++{ ++ /* name, args, args_test num_args, match, mask, pinfo */ ++ {"add", "d,s,t", "d,s,t,E", 3, OP_MATCH_ADD, OP_MASK_ROPX | OP_MASK_ROP, 0, no_overflow }, ++ {"addi", "t,s,i", "t,s,i,E", 3, OP_MATCH_ADDI, OP_MASK_IOP, NIOS2_INSN_ADDI, signed_immed16_overflow }, ++ {"subi", "t,s,i", "t,s,i,E", 3, OP_MATCH_ADDI, OP_MASK_IOP, NIOS2_INSN_MACRO, signed_immed16_overflow }, ++ {"and", "d,s,t", "d,s,t,E", 3, OP_MATCH_AND, OP_MASK_ROPX | OP_MASK_ROP, 0, no_overflow }, ++ {"andhi", "t,s,u", "t,s,u,E", 3, OP_MATCH_ANDHI, OP_MASK_IOP, 0, unsigned_immed16_overflow }, ++ {"andi", "t,s,u", "t,s,u,E", 3, OP_MATCH_ANDI, OP_MASK_IOP, NIOS2_INSN_ANDI, unsigned_immed16_overflow }, ++ {"beq", "s,t,o", "s,t,o,E", 3, OP_MATCH_BEQ, OP_MASK_IOP, NIOS2_INSN_CBRANCH, branch_target_overflow }, ++ {"bge", "s,t,o", "s,t,o,E", 3, OP_MATCH_BGE, OP_MASK_IOP, NIOS2_INSN_CBRANCH, branch_target_overflow }, ++ {"bgeu", "s,t,o", "s,t,o,E", 3, OP_MATCH_BGEU, OP_MASK_IOP, NIOS2_INSN_CBRANCH, branch_target_overflow }, ++ {"bgt", "s,t,o", "s,t,o,E", 3, OP_MATCH_BLT, OP_MASK_IOP, NIOS2_INSN_MACRO|NIOS2_INSN_CBRANCH, branch_target_overflow }, ++ {"bgtu", "s,t,o", "s,t,o,E", 3, OP_MATCH_BLTU, OP_MASK_IOP, NIOS2_INSN_MACRO|NIOS2_INSN_CBRANCH, branch_target_overflow }, ++ {"ble", "s,t,o", "s,t,o,E", 3, OP_MATCH_BGE, OP_MASK_IOP, NIOS2_INSN_MACRO|NIOS2_INSN_CBRANCH, branch_target_overflow }, ++ {"bleu", "s,t,o", "s,t,o,E", 3, OP_MATCH_BGEU, OP_MASK_IOP, NIOS2_INSN_MACRO|NIOS2_INSN_CBRANCH, branch_target_overflow }, ++ {"blt", "s,t,o", "s,t,o,E", 3, OP_MATCH_BLT, OP_MASK_IOP, NIOS2_INSN_CBRANCH, branch_target_overflow }, ++ {"bltu", "s,t,o", "s,t,o,E", 3, OP_MATCH_BLTU, OP_MASK_IOP, NIOS2_INSN_CBRANCH, branch_target_overflow }, ++ {"bne", "s,t,o", "s,t,o,E", 3, OP_MATCH_BNE, OP_MASK_IOP, NIOS2_INSN_CBRANCH, branch_target_overflow }, ++ {"br", "o", "o,E", 1, OP_MATCH_BR, OP_MASK_IOP, NIOS2_INSN_UBRANCH, branch_target_overflow }, ++ {"break", "b", "b,E", 1, OP_MATCH_BREAK, OP_MASK_BREAK, 0, no_overflow }, ++ {"bret", "", "E", 0, OP_MATCH_BRET, OP_MASK, 0, no_overflow }, ++ {"flushd", "i(s)", "i(s)E", 2, OP_MATCH_FLUSHD, OP_MASK_IOP, 0, signed_immed16_overflow }, ++ {"flushda", "i(s)", "i(s)E", 2, OP_MATCH_FLUSHDA, OP_MASK_IOP, 0, signed_immed16_overflow }, ++ {"flushi", "s", "s,E", 1, OP_MATCH_FLUSHI, OP_MASK_FLUSHI, 0, no_overflow }, ++ {"flushp", "", "E", 0, OP_MATCH_FLUSHP, OP_MASK, 0, no_overflow }, ++ {"initd", "i(s)", "i(s)E", 2, OP_MATCH_INITD, OP_MASK_IOP, 0, signed_immed16_overflow }, ++ {"initda", "i(s)", "i(s)E", 2, OP_MATCH_INITDA, OP_MASK_IOP, 0, signed_immed16_overflow }, ++ {"initi", "s", "s,E", 1, OP_MATCH_INITI, OP_MASK_INITI, 0, no_overflow }, ++ {"call", "m", "m,E", 1, OP_MATCH_CALL, OP_MASK_IOP, NIOS2_INSN_CALL, call_target_overflow }, ++ {"callr", "s", "s,E", 1, OP_MATCH_CALLR, OP_MASK_CALLR, 0, no_overflow }, ++ {"cmpeq", "d,s,t", "d,s,t,E", 3, OP_MATCH_CMPEQ, OP_MASK_ROPX | OP_MASK_ROP, 0, no_overflow }, ++ {"cmpeqi", "t,s,i", "t,s,i,E", 3, OP_MATCH_CMPEQI, OP_MASK_IOP, 0, signed_immed16_overflow }, ++ {"cmpge", "d,s,t", "d,s,t,E", 3, OP_MATCH_CMPGE, OP_MASK_ROPX | OP_MASK_ROP, 0, no_overflow }, ++ {"cmpgei", "t,s,i", "t,s,i,E", 3, OP_MATCH_CMPGEI, OP_MASK_IOP, 0, signed_immed16_overflow }, ++ {"cmpgeu", "d,s,t", "d,s,t,E", 3, OP_MATCH_CMPGEU, OP_MASK_ROPX | OP_MASK_ROP, 0, no_overflow }, ++ {"cmpgeui", "t,s,u", "t,s,u,E", 3, OP_MATCH_CMPGEUI, OP_MASK_IOP, 0, unsigned_immed16_overflow }, ++ {"cmpgt", "d,s,t", "d,s,t,E", 3, OP_MATCH_CMPLT, OP_MASK_ROPX | OP_MASK_ROP, NIOS2_INSN_MACRO, no_overflow }, ++ {"cmpgti", "t,s,i", "t,s,i,E", 3, OP_MATCH_CMPGEI, OP_MASK_IOP, NIOS2_INSN_MACRO, signed_immed16_overflow }, ++ {"cmpgtu", "d,s,t", "d,s,t,E", 3, OP_MATCH_CMPLTU, OP_MASK_ROPX | OP_MASK_ROP, NIOS2_INSN_MACRO, no_overflow }, ++ {"cmpgtui", "t,s,u", "t,s,u,E", 3, OP_MATCH_CMPGEUI, OP_MASK_IOP, NIOS2_INSN_MACRO, unsigned_immed16_overflow }, ++ {"cmple", "d,s,t", "d,s,t,E", 3, OP_MATCH_CMPGE, OP_MASK_ROPX | OP_MASK_ROP, NIOS2_INSN_MACRO, no_overflow }, ++ {"cmplei", "t,s,i", "t,s,i,E", 3, OP_MATCH_CMPLTI, OP_MASK_IOP, NIOS2_INSN_MACRO, signed_immed16_overflow }, ++ {"cmpleu", "d,s,t", "d,s,t,E", 3, OP_MATCH_CMPGEU, OP_MASK_ROPX | OP_MASK_ROP, NIOS2_INSN_MACRO, no_overflow }, ++ {"cmpleui", "t,s,u", "t,s,u,E", 3, OP_MATCH_CMPLTUI, OP_MASK_IOP, NIOS2_INSN_MACRO, unsigned_immed16_overflow }, ++ {"cmplt", "d,s,t", "d,s,t,E", 3, OP_MATCH_CMPLT, OP_MASK_ROPX | OP_MASK_ROP, 0, no_overflow }, ++ {"cmplti", "t,s,i", "t,s,i,E", 3, OP_MATCH_CMPLTI, OP_MASK_IOP, 0, signed_immed16_overflow }, ++ {"cmpltu", "d,s,t", "d,s,t,E", 3, OP_MATCH_CMPLTU, OP_MASK_ROPX | OP_MASK_ROP, 0, no_overflow }, ++ {"cmpltui", "t,s,u", "t,s,u,E", 3, OP_MATCH_CMPLTUI, OP_MASK_IOP, 0, unsigned_immed16_overflow }, ++ {"cmpne", "d,s,t", "d,s,t,E", 3, OP_MATCH_CMPNE, OP_MASK_ROPX | OP_MASK_ROP, 0, no_overflow }, ++ {"cmpnei", "t,s,i", "t,s,i,E", 3, OP_MATCH_CMPNEI, OP_MASK_IOP, 0, signed_immed16_overflow }, ++ {"div", "d,s,t", "d,s,t,E", 3, OP_MATCH_DIV, OP_MASK_ROPX | OP_MASK_ROP, 0, no_overflow }, ++ {"divu", "d,s,t", "d,s,t,E", 3, OP_MATCH_DIVU, OP_MASK_ROPX | OP_MASK_ROP, 0, no_overflow }, ++ {"jmp", "s", "s,E", 1, OP_MATCH_JMP, OP_MASK_JMP, 0, no_overflow }, ++ {"jmpi", "m", "m,E", 1, OP_MATCH_JMPI, OP_MASK_IOP, 0, no_overflow }, ++ {"ldb", "t,i(s)", "t,i(s)E", 3, OP_MATCH_LDB, OP_MASK_IOP, 0, address_offset_overflow }, ++ {"ldbio", "t,i(s)", "t,i(s)E", 3, OP_MATCH_LDBIO, OP_MASK_IOP, 0, address_offset_overflow }, ++ {"ldbu", "t,i(s)", "t,i(s)E", 3, OP_MATCH_LDBU, OP_MASK_IOP, 0, address_offset_overflow }, ++ {"ldbuio", "t,i(s)", "t,i(s)E", 3, OP_MATCH_LDBUIO, OP_MASK_IOP, 0, address_offset_overflow }, ++ {"ldh", "t,i(s)", "t,i(s)E", 3, OP_MATCH_LDH, OP_MASK_IOP, 0, address_offset_overflow }, ++ {"ldhio", "t,i(s)", "t,i(s)E", 3, OP_MATCH_LDHIO, OP_MASK_IOP, 0, address_offset_overflow }, ++ {"ldhu", "t,i(s)", "t,i(s)E", 3, OP_MATCH_LDHU, OP_MASK_IOP, 0, address_offset_overflow }, ++ {"ldhuio", "t,i(s)", "t,i(s)E", 3, OP_MATCH_LDHUIO, OP_MASK_IOP, 0, address_offset_overflow }, ++ {"ldl", "t,i(s)", "t,i(s)E", 3, OP_MATCH_LDL, OP_MASK_IOP, 0, address_offset_overflow }, ++ {"ldw", "t,i(s)", "t,i(s)E", 3, OP_MATCH_LDW, OP_MASK_IOP, 0, address_offset_overflow }, ++ {"ldwio", "t,i(s)", "t,i(s)E", 3, OP_MATCH_LDWIO, OP_MASK_IOP, 0, address_offset_overflow }, ++ {"mov", "d,s", "d,s,E", 2, OP_MATCH_ADD, OP_MASK_RRT|OP_MASK_ROPX|OP_MASK_ROP, NIOS2_INSN_MACRO_MOV, no_overflow }, ++ {"movhi", "t,u", "t,u,E", 2, OP_MATCH_ORHI, OP_MASK_IRS|OP_MASK_IOP, NIOS2_INSN_MACRO_MOVI, unsigned_immed16_overflow }, ++ {"movui", "t,u", "t,u,E", 2, OP_MATCH_ORI, OP_MASK_IRS|OP_MASK_IOP, NIOS2_INSN_MACRO_MOVI, unsigned_immed16_overflow }, ++ {"movi", "t,i", "t,i,E", 2, OP_MATCH_ADDI, OP_MASK_IRS|OP_MASK_IOP, NIOS2_INSN_MACRO_MOVI, signed_immed16_overflow }, ++ /* movia expands to two instructions so there is no mask or match */ ++ {"movia", "t,o", "t,o,E", 2, OP_MATCH_ORHI, OP_MASK_IOP, NIOS2_INSN_MACRO_MOVIA, no_overflow }, ++ {"mul", "d,s,t", "d,s,t,E", 3, OP_MATCH_MUL, OP_MASK_ROPX | OP_MASK_ROP, 0, no_overflow }, ++ {"muli", "t,s,i", "t,s,i,E", 3, OP_MATCH_MULI, OP_MASK_IOP, 0, signed_immed16_overflow }, ++ {"mulxss", "d,s,t", "d,s,t,E", 3, OP_MATCH_MULXSS, OP_MASK_ROPX | OP_MASK_ROP, 0, no_overflow }, ++ {"mulxsu", "d,s,t", "d,s,t,E", 3, OP_MATCH_MULXSU, OP_MASK_ROPX | OP_MASK_ROP, 0, no_overflow }, ++ {"mulxuu", "d,s,t", "d,s,t,E", 3, OP_MATCH_MULXUU, OP_MASK_ROPX | OP_MASK_ROP, 0, no_overflow }, ++ {"nextpc", "d", "d,E", 1, OP_MATCH_NEXTPC, OP_MASK_NEXTPC, 0, no_overflow }, ++ {"nop", "", "E", 0, OP_MATCH_ADD, OP_MASK, NIOS2_INSN_MACRO_MOV, no_overflow }, ++ {"nor", "d,s,t", "d,s,t,E", 3, OP_MATCH_NOR, OP_MASK_ROPX | OP_MASK_ROP, 0, no_overflow }, ++ {"or", "d,s,t", "d,s,t,E", 3, OP_MATCH_OR, OP_MASK_ROPX | OP_MASK_ROP, 0, no_overflow }, ++ {"orhi", "t,s,u", "t,s,u,E", 3, OP_MATCH_ORHI, OP_MASK_IOP, 0, unsigned_immed16_overflow }, ++ {"ori", "t,s,u", "t,s,u,E", 3, OP_MATCH_ORI, OP_MASK_IOP, NIOS2_INSN_ORI, unsigned_immed16_overflow }, ++ {"rdctl", "d,c", "d,c,E", 2, OP_MATCH_RDCTL, OP_MASK_RDCTL, 0, no_overflow }, ++ {"ret", "", "E", 0, OP_MATCH_RET, OP_MASK, 0, no_overflow }, ++ {"rol", "d,s,t", "d,s,t,E", 3, OP_MATCH_ROL, OP_MASK_ROPX | OP_MASK_ROP, 0, no_overflow }, ++ {"roli", "d,s,j", "d,s,j,E", 3, OP_MATCH_ROLI, OP_MASK_ROLI, 0, unsigned_immed5_overflow }, ++ {"ror", "d,s,t", "d,s,t,E", 3, OP_MATCH_ROR, OP_MASK_ROPX | OP_MASK_ROP, 0, no_overflow }, ++ {"sll", "d,s,t", "d,s,t,E", 3, OP_MATCH_SLL, OP_MASK_ROPX | OP_MASK_ROP, 0, no_overflow }, ++ {"slli", "d,s,j", "d,s,j,E", 3, OP_MATCH_SLLI, OP_MASK_SLLI, 0, unsigned_immed5_overflow }, ++ {"sra", "d,s,t", "d,s,t,E", 3, OP_MATCH_SRA, OP_MASK_ROPX | OP_MASK_ROP, 0, no_overflow }, ++ {"srai", "d,s,j", "d,s,j,E", 3, OP_MATCH_SRAI, OP_MASK_SRAI, 0, unsigned_immed5_overflow }, ++ {"srl", "d,s,t", "d,s,t,E", 3, OP_MATCH_SRL, OP_MASK_ROPX | OP_MASK_ROP, 0, no_overflow }, ++ {"srli", "d,s,j", "d,s,j,E", 3, OP_MATCH_SRLI, OP_MASK_SRLI, 0, unsigned_immed5_overflow }, ++ {"stb", "t,i(s)", "t,i(s)E", 3, OP_MATCH_STB, OP_MASK_IOP, 0, address_offset_overflow }, ++ {"stbio", "t,i(s)", "t,i(s)E", 3, OP_MATCH_STBIO, OP_MASK_IOP, 0, address_offset_overflow }, ++ {"stc", "t,i(s)", "t,i(s)E", 3, OP_MATCH_STC, OP_MASK_IOP, 0, address_offset_overflow }, ++ {"sth", "t,i(s)", "t,i(s)E", 3, OP_MATCH_STH, OP_MASK_IOP, 0, address_offset_overflow }, ++ {"sthio", "t,i(s)", "t,i(s)E", 3, OP_MATCH_STHIO, OP_MASK_IOP, 0, address_offset_overflow }, ++ {"stw", "t,i(s)", "t,i(s)E", 3, OP_MATCH_STW, OP_MASK_IOP, 0, address_offset_overflow }, ++ {"stwio", "t,i(s)", "t,i(s)E", 3, OP_MATCH_STWIO, OP_MASK_IOP, 0, address_offset_overflow }, ++ {"sub", "d,s,t", "d,s,t,E", 3, OP_MATCH_SUB, OP_MASK_ROPX | OP_MASK_ROP, 0, no_overflow }, ++ {"sync", "", "E", 0, OP_MATCH_SYNC, OP_MASK_SYNC, 0, no_overflow }, ++ {"trap", "", "E", 0, OP_MATCH_TRAP, OP_MASK_TRAP, 0, no_overflow }, ++ {"eret", "", "E", 0, OP_MATCH_ERET, OP_MASK, 0, no_overflow }, ++ {"custom", "l,d,s,t", "l,d,s,t,E", 4, OP_MATCH_CUSTOM, OP_MASK_ROP, 0, custom_opcode_overflow }, ++ {"wrctl", "c,s", "c,s,E", 2, OP_MATCH_WRCTL, OP_MASK_WRCTL, 0, no_overflow }, ++ {"xor", "d,s,t", "d,s,t,E", 3, OP_MATCH_XOR, OP_MASK_ROPX | OP_MASK_ROP, 0, no_overflow }, ++ {"xorhi", "t,s,u", "t,s,u,E", 3, OP_MATCH_XORHI, OP_MASK_IOP, 0, unsigned_immed16_overflow }, ++ {"xori", "t,s,u", "t,s,u,E", 3, OP_MATCH_XORI, OP_MASK_IOP, NIOS2_INSN_XORI, unsigned_immed16_overflow } ++}; ++/* *INDENT-ON* */ ++ ++#define NIOS2_NUM_OPCODES \ ++ ((sizeof nios2_builtin_opcodes) / (sizeof (nios2_builtin_opcodes[0]))) ++const int bfd_nios2_num_builtin_opcodes = NIOS2_NUM_OPCODES; ++ ++/* const removed from the following to allow for dynamic extensions to the ++ * built-in instruction set. */ ++struct nios2_opcode *nios2_opcodes = ++ (struct nios2_opcode *) nios2_builtin_opcodes; ++int bfd_nios2_num_opcodes = NIOS2_NUM_OPCODES; ++#undef NIOS2_NUM_OPCODES diff --git a/recipes/binutils/binutils-2.17.50.0.12/binutils-nios2.patch b/recipes/binutils/binutils-2.17.50.0.12/binutils-nios2.patch new file mode 100644 index 0000000000..06d9e85f6d --- /dev/null +++ b/recipes/binutils/binutils-2.17.50.0.12/binutils-nios2.patch @@ -0,0 +1,576 @@ +Only in .: .pc +Index: binutils-2.17.50.0.12/bfd/Makefile.am +=================================================================== +--- binutils-2.17.50.0.12.orig/bfd/Makefile.am 2007-01-23 22:37:00.000000000 +0100 ++++ binutils-2.17.50.0.12/bfd/Makefile.am 2010-06-09 15:04:03.000000000 +0200 +@@ -95,6 +95,7 @@ + cpu-mmix.lo \ + cpu-mt.lo \ + cpu-msp430.lo \ ++ cpu-nios2.lo \ + cpu-or32.lo \ + cpu-ns32k.lo \ + cpu-openrisc.lo \ +@@ -161,6 +162,7 @@ + cpu-msp430.c \ + cpu-or32.c \ + cpu-ns32k.c \ ++ cpu-nios2.c \ + cpu-openrisc.c \ + cpu-pdp11.c \ + cpu-pj.c \ +@@ -270,6 +272,7 @@ + elf32-mips.lo \ + elf32-mt.lo \ + elf32-msp430.lo \ ++ elf32-nios2.lo \ + elf32-openrisc.lo \ + elf32-or32.lo \ + elf32-pj.lo \ +@@ -446,6 +449,7 @@ + elf32-mips.c \ + elf32-mt.c \ + elf32-msp430.c \ ++ elf32-nios2.c \ + elf32-openrisc.c \ + elf32-or32.c \ + elf32-pj.c \ +@@ -1071,6 +1075,7 @@ + cpu-mt.lo: cpu-mt.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h + cpu-msp430.lo: cpu-msp430.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h + cpu-or32.lo: cpu-or32.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h ++cpu-nios2.lo: cpu-nios2.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h + cpu-ns32k.lo: cpu-ns32k.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ + ns32k.h + cpu-openrisc.lo: cpu-openrisc.c $(INCDIR)/filenames.h \ +@@ -1430,6 +1435,11 @@ + $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \ + $(INCDIR)/bfdlink.h $(INCDIR)/elf/msp430.h $(INCDIR)/elf/reloc-macros.h \ + elf32-target.h ++elf32-nios2.lo: elf32-nios2.c $(INCDIR)/filenames.h \ ++ $(INCDIR)/libiberty.h $(INCDIR)/hashtab.h elf-bfd.h \ ++ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \ ++ $(INCDIR)/bfdlink.h $(INCDIR)/elf/reloc-macros.h \ ++ elf32-target.h + elf32-openrisc.lo: elf32-openrisc.c $(INCDIR)/filenames.h \ + $(INCDIR)/hashtab.h elf-bfd.h $(INCDIR)/elf/common.h \ + $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h \ +Index: binutils-2.17.50.0.12/bfd/Makefile.in +=================================================================== +--- binutils-2.17.50.0.12.orig/bfd/Makefile.in 2007-01-23 22:37:00.000000000 +0100 ++++ binutils-2.17.50.0.12/bfd/Makefile.in 2010-06-09 15:04:03.000000000 +0200 +@@ -328,6 +328,7 @@ + cpu-mt.lo \ + cpu-msp430.lo \ + cpu-or32.lo \ ++ cpu-nios2.lo \ + cpu-ns32k.lo \ + cpu-openrisc.lo \ + cpu-pdp11.lo \ +@@ -392,6 +393,7 @@ + cpu-mt.c \ + cpu-msp430.c \ + cpu-or32.c \ ++ cpu-nio2.c \ + cpu-ns32k.c \ + cpu-openrisc.c \ + cpu-pdp11.c \ +@@ -503,6 +505,7 @@ + elf32-mips.lo \ + elf32-mt.lo \ + elf32-msp430.lo \ ++ elf32-nios2.lo \ + elf32-openrisc.lo \ + elf32-or32.lo \ + elf32-pj.lo \ +@@ -679,6 +682,7 @@ + elf32-mips.c \ + elf32-mt.c \ + elf32-msp430.c \ ++ elf32-nios2.c \ + elf32-openrisc.c \ + elf32-or32.c \ + elf32-pj.c \ +@@ -1633,6 +1637,7 @@ + cpu-mmix.lo: cpu-mmix.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h + cpu-mt.lo: cpu-mt.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h + cpu-msp430.lo: cpu-msp430.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h ++cpu-nios2.lo: cpu-nios2.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h + cpu-or32.lo: cpu-or32.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h + cpu-ns32k.lo: cpu-ns32k.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ + ns32k.h +@@ -1993,6 +1998,11 @@ + $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \ + $(INCDIR)/bfdlink.h $(INCDIR)/elf/msp430.h $(INCDIR)/elf/reloc-macros.h \ + elf32-target.h ++elf32-nios2.lo: elf32-nios2.c $(INCDIR)/filenames.h \ ++ $(INCDIR)/libiberty.h $(INCDIR)/hashtab.h elf-bfd.h \ ++ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \ ++ $(INCDIR)/bfdlink.h $(INCDIR)/elf/reloc-macros.h \ ++ elf32-target.h + elf32-openrisc.lo: elf32-openrisc.c $(INCDIR)/filenames.h \ + $(INCDIR)/hashtab.h elf-bfd.h $(INCDIR)/elf/common.h \ + $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h \ +Index: binutils-2.17.50.0.12/bfd/archures.c +=================================================================== +--- binutils-2.17.50.0.12.orig/bfd/archures.c 2007-01-23 22:37:00.000000000 +0100 ++++ binutils-2.17.50.0.12/bfd/archures.c 2010-06-09 15:04:03.000000000 +0200 +@@ -387,6 +387,8 @@ + .#define bfd_mach_z80 3 {* With ixl, ixh, iyl, and iyh. *} + .#define bfd_mach_z80full 7 {* All undocumented instructions. *} + .#define bfd_mach_r800 11 {* R800: successor with multiplication. *} ++. bfd_arch_nios2, ++.#define bfd_mach_nios2 1 + . bfd_arch_last + . }; + */ +@@ -488,6 +490,7 @@ + extern const bfd_arch_info_type bfd_xc16x_arch; + extern const bfd_arch_info_type bfd_z80_arch; + extern const bfd_arch_info_type bfd_z8k_arch; ++extern const bfd_arch_info_type bfd_nios2_arch; + + static const bfd_arch_info_type * const bfd_archures_list[] = + { +@@ -531,6 +534,7 @@ + &bfd_mn10300_arch, + &bfd_mt_arch, + &bfd_msp430_arch, ++ &bfd_nios2_arch, + &bfd_ns32k_arch, + &bfd_openrisc_arch, + &bfd_or32_arch, +Index: binutils-2.17.50.0.12/bfd/bfd-in2.h +=================================================================== +--- binutils-2.17.50.0.12.orig/bfd/bfd-in2.h 2007-01-23 22:37:00.000000000 +0100 ++++ binutils-2.17.50.0.12/bfd/bfd-in2.h 2010-06-09 15:04:03.000000000 +0200 +@@ -2022,6 +2022,8 @@ + #define bfd_mach_z80 3 /* With ixl, ixh, iyl, and iyh. */ + #define bfd_mach_z80full 7 /* All undocumented instructions. */ + #define bfd_mach_r800 11 /* R800: successor with multiplication. */ ++ bfd_arch_nios2, ++#define bfd_mach_nios2 1 + bfd_arch_last + }; + +@@ -4199,6 +4201,42 @@ + BFD_RELOC_IQ2000_OFFSET_21, + BFD_RELOC_IQ2000_UHI16, + ++/* Relocations used by the Altera New Jersey core */ ++ BFD_RELOC_NIOS2_S16, ++ BFD_RELOC_NIOS2_U16, ++ BFD_RELOC_NIOS2_CALL26, ++ BFD_RELOC_NIOS2_IMM5, ++ BFD_RELOC_NIOS2_CACHE_OPX, ++ BFD_RELOC_NIOS2_IMM6, ++ BFD_RELOC_NIOS2_IMM8, ++ BFD_RELOC_NIOS2_HI16, ++ BFD_RELOC_NIOS2_LO16, ++ BFD_RELOC_NIOS2_HIADJ16, ++ BFD_RELOC_NIOS2_GPREL, ++ BFD_RELOC_NIOS2_UJMP, ++ BFD_RELOC_NIOS2_CJMP, ++ BFD_RELOC_NIOS2_CALLR, ++ BFD_RELOC_NIOS2_ALIGN, ++ BFD_RELOC_NIOS2_GOT16, ++ BFD_RELOC_NIOS2_CALL16, ++ BFD_RELOC_NIOS2_GOTOFF_LO, ++ BFD_RELOC_NIOS2_GOTOFF_HA, ++ BFD_RELOC_NIOS2_PCREL_LO, ++ BFD_RELOC_NIOS2_PCREL_HA, ++ BFD_RELOC_NIOS2_TLS_GD16, ++ BFD_RELOC_NIOS2_TLS_LDM16, ++ BFD_RELOC_NIOS2_TLS_LDO16, ++ BFD_RELOC_NIOS2_TLS_IE16, ++ BFD_RELOC_NIOS2_TLS_LE16, ++ BFD_RELOC_NIOS2_TLS_DTPMOD, ++ BFD_RELOC_NIOS2_TLS_DTPREL, ++ BFD_RELOC_NIOS2_TLS_TPREL, ++ BFD_RELOC_NIOS2_COPY, ++ BFD_RELOC_NIOS2_GLOB_DAT, ++ BFD_RELOC_NIOS2_JUMP_SLOT, ++ BFD_RELOC_NIOS2_RELATIVE, ++ BFD_RELOC_NIOS2_GOTOFF, ++ + /* Special Xtensa relocation used only by PLT entries in ELF shared + objects to indicate that the runtime linker should set the value + to one of its own internal functions or data structures. */ +Index: binutils-2.17.50.0.12/bfd/config.bfd +=================================================================== +--- binutils-2.17.50.0.12.orig/bfd/config.bfd 2007-01-23 22:37:00.000000000 +0100 ++++ binutils-2.17.50.0.12/bfd/config.bfd 2010-06-09 15:04:03.000000000 +0200 +@@ -89,6 +89,7 @@ + m88*) targ_archs=bfd_m88k_arch ;; + maxq*) targ_archs=bfd_maxq_arch ;; + mips*) targ_archs=bfd_mips_arch ;; ++nios2*) targ_archs=bfd_nios2_arch ;; + or32*) targ_archs=bfd_or32_arch ;; + pdp11*) targ_archs=bfd_pdp11_arch ;; + pj*) targ_archs="bfd_pj_arch bfd_i386_arch";; +@@ -991,6 +992,21 @@ + targ_underscore=yes + ;; + ++ nios2eb-*-*) ++ targ_defvec=bfd_elf32_bignios2_vec ++ targ_selvecs=bfd_elf32_littlenios2_vec ++ ;; ++ ++ nios2el-*-*) ++ targ_defvec=bfd_elf32_littlenios2_vec ++ targ_selvecs=bfd_elf32_bignios2_vec ++ ;; ++ ++ nios2-*-*) ++ targ_defvec=bfd_elf32_littlenios2_vec ++ targ_selvecs=bfd_elf32_bignios2_vec ++ ;; ++ + openrisc-*-elf) + targ_defvec=bfd_elf32_openrisc_vec + ;; +Index: binutils-2.17.50.0.12/bfd/configure +=================================================================== +--- binutils-2.17.50.0.12.orig/bfd/configure 2010-06-09 15:04:02.000000000 +0200 ++++ binutils-2.17.50.0.12/bfd/configure 2010-06-09 15:04:03.000000000 +0200 +@@ -10871,6 +10871,8 @@ + bfd_elf32_mcore_little_vec) tb="$tb elf32-mcore.lo elf32.lo $elf" ;; + bfd_elf32_mn10200_vec) tb="$tb elf-m10200.lo elf32.lo $elf" ;; + bfd_elf32_mn10300_vec) tb="$tb elf-m10300.lo elf32.lo $elf" ;; ++ bfd_elf32_littlenios2_vec) tb="$tb elf32-nios2.lo elf32.lo $elf" ;; ++ bfd_elf32_bignios2_vec) tb="$tb elf32-nios2.lo elf32.lo $elf" ;; + bfd_elf32_mt_vec) tb="$tb elf32-mt.lo elf32.lo $elf" ;; + bfd_elf32_msp430_vec) tb="$tb elf32-msp430.lo elf32.lo $elf" ;; + bfd_elf32_nbigmips_vec) tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;; +Index: binutils-2.17.50.0.12/bfd/configure.in +=================================================================== +--- binutils-2.17.50.0.12.orig/bfd/configure.in 2007-01-28 17:48:46.000000000 +0100 ++++ binutils-2.17.50.0.12/bfd/configure.in 2010-06-09 15:04:03.000000000 +0200 +@@ -652,6 +652,8 @@ + bfd_elf32_mcore_little_vec) tb="$tb elf32-mcore.lo elf32.lo $elf" ;; + bfd_elf32_mn10200_vec) tb="$tb elf-m10200.lo elf32.lo $elf" ;; + bfd_elf32_mn10300_vec) tb="$tb elf-m10300.lo elf32.lo $elf" ;; ++ bfd_elf32_littlenios2_vec) tb="$tb elf32-nios2.lo elf32.lo $elf" ;; ++ bfd_elf32_bignios2_vec) tb="$tb elf32-nios2.lo elf32.lo $elf" ;; + bfd_elf32_mt_vec) tb="$tb elf32-mt.lo elf32.lo $elf" ;; + bfd_elf32_msp430_vec) tb="$tb elf32-msp430.lo elf32.lo $elf" ;; + bfd_elf32_nbigmips_vec) tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;; +Index: binutils-2.17.50.0.12/bfd/targets.c +=================================================================== +--- binutils-2.17.50.0.12.orig/bfd/targets.c 2006-11-27 23:21:04.000000000 +0100 ++++ binutils-2.17.50.0.12/bfd/targets.c 2010-06-09 15:04:03.000000000 +0200 +@@ -617,6 +617,8 @@ + extern const bfd_target bfd_elf32_nlittlemips_vec; + extern const bfd_target bfd_elf32_ntradbigmips_vec; + extern const bfd_target bfd_elf32_ntradlittlemips_vec; ++extern const bfd_target bfd_elf32_littlenios2_vec; ++extern const bfd_target bfd_elf32_bignios2_vec; + extern const bfd_target bfd_elf32_openrisc_vec; + extern const bfd_target bfd_elf32_or32_big_vec; + extern const bfd_target bfd_elf32_pj_vec; +@@ -944,6 +946,8 @@ + &bfd_elf32_ntradbigmips_vec, + &bfd_elf32_ntradlittlemips_vec, + #endif ++ &bfd_elf32_littlenios2_vec, ++ &bfd_elf32_bignios2_vec, + &bfd_elf32_openrisc_vec, + &bfd_elf32_or32_big_vec, + &bfd_elf32_pj_vec, +Index: binutils-2.17.50.0.12/ld/Makefile.am +=================================================================== +--- binutils-2.17.50.0.12.orig/ld/Makefile.am 2010-06-09 15:04:02.000000000 +0200 ++++ binutils-2.17.50.0.12/ld/Makefile.am 2010-06-09 15:04:03.000000000 +0200 +@@ -331,6 +331,7 @@ + emsp430x448.o \ + emsp430x449.o \ + enews.o \ ++ enios2elf.o \ + ens32knbsd.o \ + eor32.o \ + eor32elf.o \ +@@ -1450,6 +1451,9 @@ + enews.c: $(srcdir)/emulparams/news.sh \ + $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} + ${GENSCRIPTS} news "$(tdir_news)" ++enios2elf.c: $(srcdir)/emulparams/nios2elf.sh \ ++ $(ELFDEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} ++ ${GENSCRIPTS} nios2elf "$(tdir_nios2)" + ens32knbsd.c: $(srcdir)/emulparams/ns32knbsd.sh \ + $(srcdir)/emultempl/generic.em $(srcdir)/emultempl/netbsd.em \ + $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} +Index: binutils-2.17.50.0.12/ld/Makefile.in +=================================================================== +--- binutils-2.17.50.0.12.orig/ld/Makefile.in 2010-06-09 15:04:02.000000000 +0200 ++++ binutils-2.17.50.0.12/ld/Makefile.in 2010-06-09 15:04:03.000000000 +0200 +@@ -566,6 +566,7 @@ + emsp430x448.o \ + emsp430x449.o \ + enews.o \ ++ enios2elf.o \ + ens32knbsd.o \ + eor32.o \ + eor32elf.o \ +@@ -2264,6 +2265,9 @@ + enews.c: $(srcdir)/emulparams/news.sh \ + $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} + ${GENSCRIPTS} news "$(tdir_news)" ++enios2elf.c: $(srcdir)/emulparams/nios2elf.sh \ ++ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} ++ ${GENSCRIPTS} nios2elf "$(tdir_nios2)" + ens32knbsd.c: $(srcdir)/emulparams/ns32knbsd.sh \ + $(srcdir)/emultempl/generic.em $(srcdir)/emultempl/netbsd.em \ + $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} +Index: binutils-2.17.50.0.12/ld/configure.tgt +=================================================================== +--- binutils-2.17.50.0.12.orig/ld/configure.tgt 2007-01-23 22:37:00.000000000 +0100 ++++ binutils-2.17.50.0.12/ld/configure.tgt 2010-06-09 15:04:03.000000000 +0200 +@@ -382,6 +382,7 @@ + msp430-*-*) targ_emul=msp430x110 + targ_extra_emuls="msp430x112 msp430x1101 msp430x1111 msp430x1121 msp430x1122 msp430x1132 msp430x122 msp430x123 msp430x1222 msp430x1232 msp430x133 msp430x135 msp430x1331 msp430x1351 msp430x147 msp430x148 msp430x149 msp430x155 msp430x156 msp430x157 msp430x167 msp430x168 msp430x169 msp430x1610 msp430x1611 msp430x1612 msp430x2101 msp430x2111 msp430x2121 msp430x2131 msp430x311 msp430x312 msp430x313 msp430x314 msp430x315 msp430x323 msp430x325 msp430x336 msp430x337 msp430x412 msp430x413 msp430x415 msp430x417 msp430xE423 msp430xE425 msp430xE427 msp430xW423 msp430xW425 msp430xW427 msp430xG437 msp430xG438 msp430xG439 msp430x435 msp430x436 msp430x437 msp430x447 msp430x448 msp430x449" + ;; ++nios2*-*-*) targ_emul=nios2elf ;; + ns32k-pc532-mach* | ns32k-pc532-ux*) targ_emul=pc532macha ;; + ns32k-*-netbsd* | ns32k-pc532-lites*) targ_emul=ns32knbsd + ;; +Index: binutils-2.17.50.0.12/ld/testsuite/ld-elfcomm/elfcomm.exp +=================================================================== +--- binutils-2.17.50.0.12.orig/ld/testsuite/ld-elfcomm/elfcomm.exp 2006-09-24 17:19:59.000000000 +0200 ++++ binutils-2.17.50.0.12/ld/testsuite/ld-elfcomm/elfcomm.exp 2010-06-09 15:04:03.000000000 +0200 +@@ -63,6 +63,10 @@ + return 1 + } + ++if [istarget nios2*-*-*] { ++ set CFLAGS "$CFLAGS -G0" ++} ++ + if { ![ld_compile "$CC $CFLAGS" $srcdir/$subdir/common1a.c tmpdir/common1a.o] + || ![ld_compile "$CC $CFLAGS" $srcdir/$subdir/common1b.c tmpdir/common1b.o] } { + unresolved $test1 +Index: binutils-2.17.50.0.12/opcodes/configure +=================================================================== +--- binutils-2.17.50.0.12.orig/opcodes/configure 2010-06-09 15:04:02.000000000 +0200 ++++ binutils-2.17.50.0.12/opcodes/configure 2010-06-09 15:04:03.000000000 +0200 +@@ -6562,6 +6562,7 @@ + bfd_mt_arch) ta="$ta mt-asm.lo mt-desc.lo mt-dis.lo mt-ibld.lo mt-opc.lo" using_cgen=yes ;; + bfd_msp430_arch) ta="$ta msp430-dis.lo" ;; + bfd_ns32k_arch) ta="$ta ns32k-dis.lo" ;; ++ bfd_nios2_arch) ta="$ta nios2-dis.lo nios2-opc.lo" ;; + bfd_openrisc_arch) ta="$ta openrisc-asm.lo openrisc-desc.lo openrisc-dis.lo openrisc-ibld.lo openrisc-opc.lo" using_cgen=yes ;; + bfd_or32_arch) ta="$ta or32-dis.lo or32-opc.lo" using_cgen=yes ;; + bfd_pdp11_arch) ta="$ta pdp11-dis.lo pdp11-opc.lo" ;; +Index: binutils-2.17.50.0.12/opcodes/configure.in +=================================================================== +--- binutils-2.17.50.0.12.orig/opcodes/configure.in 2006-11-27 23:21:04.000000000 +0100 ++++ binutils-2.17.50.0.12/opcodes/configure.in 2010-06-09 15:04:03.000000000 +0200 +@@ -191,6 +191,7 @@ + bfd_mt_arch) ta="$ta mt-asm.lo mt-desc.lo mt-dis.lo mt-ibld.lo mt-opc.lo" using_cgen=yes ;; + bfd_msp430_arch) ta="$ta msp430-dis.lo" ;; + bfd_ns32k_arch) ta="$ta ns32k-dis.lo" ;; ++ bfd_nios2_arch) ta="$ta nios2-dis.lo nios2-opc.lo" ;; + bfd_openrisc_arch) ta="$ta openrisc-asm.lo openrisc-desc.lo openrisc-dis.lo openrisc-ibld.lo openrisc-opc.lo" using_cgen=yes ;; + bfd_or32_arch) ta="$ta or32-dis.lo or32-opc.lo" using_cgen=yes ;; + bfd_pdp11_arch) ta="$ta pdp11-dis.lo pdp11-opc.lo" ;; +Index: binutils-2.17.50.0.12/binutils/readelf.c +=================================================================== +--- binutils-2.17.50.0.12.orig/binutils/readelf.c 2007-01-28 17:49:30.000000000 +0100 ++++ binutils-2.17.50.0.12/binutils/readelf.c 2010-06-09 15:04:03.000000000 +0200 +@@ -118,6 +118,7 @@ + #include "elf/mn10300.h" + #include "elf/mt.h" + #include "elf/msp430.h" ++#include "elf/nios2.h" + #include "elf/or32.h" + #include "elf/pj.h" + #include "elf/ppc.h" +@@ -1480,6 +1481,17 @@ + } + } + ++static const char * ++get_nios2_dynamic_type (unsigned long type) ++{ ++ switch (type) ++ { ++ case DT_NIOS2_GP: return "NIOS2_GP"; ++ default: ++ return NULL; ++ } ++} ++ + + static const char * + get_dynamic_type (unsigned long type) +@@ -1592,6 +1604,9 @@ + case EM_SCORE: + result = get_score_dynamic_type (type); + break; ++ case EM_ALTERA_NIOS2: ++ result = get_nios2_dynamic_type (type); ++ break; + default: + result = NULL; + break; +Index: binutils-2.17.50.0.12/binutils/testsuite/binutils-all/bintest.s +=================================================================== +--- binutils-2.17.50.0.12.orig/binutils/testsuite/binutils-all/bintest.s 1999-06-03 20:01:56.000000000 +0200 ++++ binutils-2.17.50.0.12/binutils/testsuite/binutils-all/bintest.s 2010-06-09 15:04:03.000000000 +0200 +@@ -1,5 +1,8 @@ + .globl text_symbol + .text ++ # this is needed to get the readelf -s, -S and -r tests to work ++ # with nios2 as it has relaxation on by default ++ .set norelax + text_symbol: + static_text_symbol: + .long 1 +Index: binutils-2.17.50.0.12/configure +=================================================================== +--- binutils-2.17.50.0.12.orig/configure 2010-06-09 15:04:02.000000000 +0200 ++++ binutils-2.17.50.0.12/configure 2010-06-09 15:05:56.000000000 +0200 +@@ -1591,6 +1591,10 @@ + mips*-*-*) + noconfigdirs="$noconfigdirs gprof ${libgcj}" + ;; ++ nios2*-*-*) ++ skipdirs=`echo " ${skipdirs} " | sed -e 's/ gprof / /'` ++ noconfigdirs="$noconfigdirs" ++ ;; + romp-*-*) + noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes target-libgloss ${libgcj}" + ;; +@@ -3838,7 +3842,7 @@ + # For an installed makeinfo, we require it to be from texinfo 4.4 or + # higher, else we use the "missing" dummy. + if ${MAKEINFO} --version \ +- | egrep 'texinfo[^0-9]*([1-3][0-9]|4\.[4-9]|[5-9])' >/dev/null 2>&1; then ++ | egrep 'texinfo[^0-9]*([1-3][0-9]|4.[4-9]|4.[1-9][0-9]+|[5-9])' >/dev/null 2>&1; then + : + else + MAKEINFO="$MISSING makeinfo" +Index: binutils-2.17.50.0.12/gas/config/obj-elf.c +=================================================================== +--- binutils-2.17.50.0.12.orig/gas/config/obj-elf.c 2007-01-28 17:49:30.000000000 +0100 ++++ binutils-2.17.50.0.12/gas/config/obj-elf.c 2010-06-09 15:04:03.000000000 +0200 +@@ -57,6 +57,10 @@ + #include "elf/x86-64.h" + #endif + ++#ifdef TC_NIOS2 ++#include "elf/nios2.h" ++#endif ++ + static void obj_elf_line (int); + static void obj_elf_size (int); + static void obj_elf_type (int); +Index: binutils-2.17.50.0.12/gas/configure.tgt +=================================================================== +--- binutils-2.17.50.0.12.orig/gas/configure.tgt 2007-01-23 22:37:00.000000000 +0100 ++++ binutils-2.17.50.0.12/gas/configure.tgt 2010-06-09 15:04:03.000000000 +0200 +@@ -291,6 +291,8 @@ + + msp430-*-*) fmt=elf ;; + ++ nios2*-linux*) fmt=elf em=linux ;; ++ + ns32k-pc532-mach*) fmt=aout em=pc532mach ;; + ns32k-pc532-ux*) fmt=aout em=pc532mach ;; + ns32k-pc532-lites*) fmt=aout em=nbsd532 ;; +Index: binutils-2.17.50.0.12/gas/doc/Makefile.am +=================================================================== +--- binutils-2.17.50.0.12.orig/gas/doc/Makefile.am 2007-01-03 20:49:13.000000000 +0100 ++++ binutils-2.17.50.0.12/gas/doc/Makefile.am 2010-06-09 15:04:03.000000000 +0200 +@@ -49,6 +49,7 @@ + c-mmix.texi \ + c-mt.texi \ + c-msp430.texi \ ++ c-nios2.texi \ + c-ns32k.texi \ + c-pdp11.texi \ + c-pj.texi \ +Index: binutils-2.17.50.0.12/gas/doc/as.texinfo +=================================================================== +--- binutils-2.17.50.0.12.orig/gas/doc/as.texinfo 2006-11-27 23:21:04.000000000 +0100 ++++ binutils-2.17.50.0.12/gas/doc/as.texinfo 2010-06-09 15:04:03.000000000 +0200 +@@ -802,6 +802,21 @@ + @end table + @end ifset + ++@ifset NIOSII ++The following options are available when @value{AS} is configured for ++an Altera Nios II processor. ++ ++@table @gcctabopt ++@item -relax-all ++Replace all branch and call instructions with @code{jmp} and @code{callr} sequences ++@item -relax-section ++Replace identified out of range branches with @code{jmp} sequences (default) ++@item -no-relax ++Do not replace any branches or calls ++@end table ++@end ifset ++ ++ + @ifset PDP11 + + For details about the PDP-11 machine dependent features options, +@@ -6508,6 +6523,10 @@ + @include c-msp430.texi + @end ifset + ++@ifset NIOSII ++@include c-nios2.texi ++@end ifset ++ + @ifset NS32K + @include c-ns32k.texi + @end ifset +Index: binutils-2.17.50.0.12/include/dis-asm.h +=================================================================== +--- binutils-2.17.50.0.12.orig/include/dis-asm.h 2006-11-27 23:21:04.000000000 +0100 ++++ binutils-2.17.50.0.12/include/dis-asm.h 2010-06-09 15:04:03.000000000 +0200 +@@ -214,6 +214,7 @@ + extern int print_insn_bfin (bfd_vma, disassemble_info *); + extern int print_insn_big_arm (bfd_vma, disassemble_info *); + extern int print_insn_big_mips (bfd_vma, disassemble_info *); ++extern int print_insn_big_nios2 (bfd_vma, disassemble_info *); + extern int print_insn_big_or32 (bfd_vma, disassemble_info *); + extern int print_insn_big_powerpc (bfd_vma, disassemble_info *); + extern int print_insn_big_score (bfd_vma, disassemble_info *); +@@ -239,6 +240,7 @@ + extern int print_insn_iq2000 (bfd_vma, disassemble_info *); + extern int print_insn_little_arm (bfd_vma, disassemble_info *); + extern int print_insn_little_mips (bfd_vma, disassemble_info *); ++extern int print_insn_little_nios2 (bfd_vma, disassemble_info *); + extern int print_insn_little_or32 (bfd_vma, disassemble_info *); + extern int print_insn_little_powerpc (bfd_vma, disassemble_info *); + extern int print_insn_little_score (bfd_vma, disassemble_info *); +Index: binutils-2.17.50.0.12/opcodes/disassemble.c +=================================================================== +--- binutils-2.17.50.0.12.orig/opcodes/disassemble.c 2006-11-27 23:21:04.000000000 +0100 ++++ binutils-2.17.50.0.12/opcodes/disassemble.c 2010-06-09 15:07:20.000000000 +0200 +@@ -57,6 +57,7 @@ + #define ARCH_mt + #define ARCH_msp430 + #define ARCH_ns32k ++#define ARCH_nios2 + #define ARCH_openrisc + #define ARCH_or32 + #define ARCH_pdp11 +@@ -251,6 +252,14 @@ + disassemble = print_insn_msp430; + break; + #endif ++#ifdef ARCH_nios2 ++ case bfd_arch_nios2: ++ if (bfd_big_endian (abfd)) ++ disassemble = print_insn_big_nios2; ++ else ++ disassemble = print_insn_little_nios2; ++ break; ++#endif + #ifdef ARCH_ns32k + case bfd_arch_ns32k: + disassemble = print_insn_ns32k; diff --git a/recipes/binutils/binutils_2.17.50.0.12.bb b/recipes/binutils/binutils_2.17.50.0.12.bb index dc0c538526..70c080196c 100644 --- a/recipes/binutils/binutils_2.17.50.0.12.bb +++ b/recipes/binutils/binutils_2.17.50.0.12.bb @@ -11,5 +11,10 @@ SRC_URI = \ file://binutils-uclibc-300-012_check_ldrunpath_length.patch \ " +SRC_URI_append_nios2 =" \ + file://binutils-nios2-files.patch \ + file://binutils-nios2.patch \ + " + SRC_URI[md5sum] = "6f3e83399b965d70008860f697c50ec2" SRC_URI[sha256sum] = "7360808266f72aed6fda41735242fb9f1b6dd3307cd6e283a646932438eaa929" diff --git a/recipes/gcc/gcc-4.1.2.inc b/recipes/gcc/gcc-4.1.2.inc index e89a8de241..3b6cf30913 100644 --- a/recipes/gcc/gcc-4.1.2.inc +++ b/recipes/gcc/gcc-4.1.2.inc @@ -33,6 +33,12 @@ SRC_URI = "${GNU_MIRROR}/gcc/gcc-${PV}/gcc-${PV}.tar.bz2;name=archive \ SRC_URI_append_sh3 = " file://sh3-installfix-fixheaders.patch " +SRC_URI_append_nios2 = " \ + file://gcc-nios2.patch \ + file://gcc-config-nios2.patch \ + file://nios2-lib-flags.patch \ + " + SRC_URI_avr32 = "http://www.angstrom-distribution.org/unstable/sources/gcc-4.1.2-atmel.1.1.0.tar.gz;name=atmel \ # file://100-uclibc-conf.patch \ # file://200-uclibc-locale.patch \ diff --git a/recipes/gcc/gcc-4.1.2/gcc-config-nios2.patch b/recipes/gcc/gcc-4.1.2/gcc-config-nios2.patch new file mode 100644 index 0000000000..1cd5a955d3 --- /dev/null +++ b/recipes/gcc/gcc-4.1.2/gcc-config-nios2.patch @@ -0,0 +1,41 @@ +Index: gcc-4.1.2/config.sub +=================================================================== +--- gcc-4.1.2.orig/config.sub 2010-05-27 15:30:45.069455792 +0200 ++++ gcc-4.1.2/config.sub 2010-05-27 15:36:32.868205558 +0200 +@@ -267,6 +267,7 @@ + | mn10200 | mn10300 \ + | mt \ + | msp430 \ ++ | nios2 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ +@@ -349,6 +350,7 @@ + | mmix-* \ + | mt-* \ + | msp430-* \ ++ | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ +Index: gcc-4.1.2/gcc/config.gcc +=================================================================== +--- gcc-4.1.2.orig/gcc/config.gcc 2010-05-27 15:30:45.039455207 +0200 ++++ gcc-4.1.2/gcc/config.gcc 2010-05-27 15:33:26.249455379 +0200 +@@ -1597,6 +1597,16 @@ + tm_file="dbxelf.h elfos.h svr4.h ${tm_file}" + tmake_file="${tmake_file} mt/t-mt" + ;; ++nios2-*-*) ++ tm_file="elfos.h ${tm_file}" ++ tmake_file="${tmake_file} nios2/t-nios2" ++ case ${target} in ++ nios2-*-linux*) ++ tm_file="${tm_file} linux.h nios2/linux.h" ++ tmake_file="${tmake_file} nios2/t-linux" ++ ;; ++ esac ++ ;; + ns32k-*-netbsdelf*) + echo "GCC does not yet support the ${target} target"; exit 1 + ;; diff --git a/recipes/gcc/gcc-4.1.2/gcc-nios2.patch b/recipes/gcc/gcc-4.1.2/gcc-nios2.patch new file mode 100644 index 0000000000..80a46b7751 --- /dev/null +++ b/recipes/gcc/gcc-4.1.2/gcc-nios2.patch @@ -0,0 +1,11017 @@ +Index: gcc-4.1.2/gcc/config/nios2/crti.asm +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gcc-4.1.2/gcc/config/nios2/crti.asm 2010-06-30 08:50:26.000000000 +0200 +@@ -0,0 +1,97 @@ ++/* NOT ASSIGNED TO FSF. COPYRIGHT ALTERA. */ ++/* ++ Copyright (C) 2003 ++ by Jonah Graham (jgraham@altera.com) ++ ++This file is free software; you can 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. ++ ++In addition to the permissions in the GNU General Public License, the ++Free Software Foundation gives you unlimited permission to link the ++compiled version of this file with other programs, and to distribute ++those programs without any restriction coming from the use of this ++file. (The General Public License restrictions do apply in other ++respects; for example, they cover modification of the file, and ++distribution when not linked into another program.) ++ ++This file is distributed in the hope that it will be useful, but ++WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR 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 COPYING. If not, write to ++the Free Software Foundation, 59 Temple Place - Suite 330, ++Boston, MA 02111-1307, USA. ++ ++ As a special exception, if you link this library with files ++ compiled with GCC to produce an executable, this does not cause ++ the resulting executable to be covered by the GNU General Public License. ++ This exception does not however invalidate any other reasons why ++ the executable file might be covered by the GNU General Public License. ++ ++ ++This file just make a stack frame for the contents of the .fini and ++.init sections. Users may put any desired instructions in those ++sections. ++ ++ ++While technically any code can be put in the init and fini sections ++most stuff will not work other than stuff which obeys the call frame ++and ABI. All the call-preserved registers are saved, the call clobbered ++registers should have been saved by the code calling init and fini. ++ ++See crtstuff.c for an example of code that inserts itself in the ++init and fini sections. ++ ++See crt0.s for the code that calls init and fini. ++*/ ++ ++ .file "crti.asm" ++ ++ .section ".init" ++ .align 2 ++ .global _init ++_init: ++ addi sp, sp, -48 ++ stw ra, 44(sp) ++ stw r23, 40(sp) ++ stw r22, 36(sp) ++ stw r21, 32(sp) ++ stw r20, 28(sp) ++ stw r19, 24(sp) ++ stw r18, 20(sp) ++ stw r17, 16(sp) ++ stw r16, 12(sp) ++ stw fp, 8(sp) ++ addi fp, sp, 8 ++ nextpc r22 ++1: movhi r2, %hiadj(_GLOBAL_OFFSET_TABLE_ - 1b) ++ addi r2, r2, %lo(_GLOBAL_OFFSET_TABLE_ - 1b) ++ add r22, r22, r2 ++ ++ ++ .section ".fini" ++ .align 2 ++ .global _fini ++_fini: ++ addi sp, sp, -48 ++ stw ra, 44(sp) ++ stw r23, 40(sp) ++ stw r22, 36(sp) ++ stw r21, 32(sp) ++ stw r20, 28(sp) ++ stw r19, 24(sp) ++ stw r18, 20(sp) ++ stw r17, 16(sp) ++ stw r16, 12(sp) ++ stw fp, 8(sp) ++ addi fp, sp, 8 ++ nextpc r22 ++1: movhi r2, %hiadj(_GLOBAL_OFFSET_TABLE_ - 1b) ++ addi r2, r2, %lo(_GLOBAL_OFFSET_TABLE_ - 1b) ++ add r22, r22, r2 ++ ++ +Index: gcc-4.1.2/gcc/config/nios2/crtn.asm +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gcc-4.1.2/gcc/config/nios2/crtn.asm 2010-06-30 08:50:26.000000000 +0200 +@@ -0,0 +1,71 @@ ++/* NOT ASSIGNED TO FSF. COPYRIGHT ALTERA. */ ++/* ++ Copyright (C) 2003 ++ by Jonah Graham (jgraham@altera.com) ++ ++This file is free software; you can 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. ++ ++In addition to the permissions in the GNU General Public License, the ++Free Software Foundation gives you unlimited permission to link the ++compiled version of this file with other programs, and to distribute ++those programs without any restriction coming from the use of this ++file. (The General Public License restrictions do apply in other ++respects; for example, they cover modification of the file, and ++distribution when not linked into another program.) ++ ++This file is distributed in the hope that it will be useful, but ++WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR 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 COPYING. If not, write to ++the Free Software Foundation, 59 Temple Place - Suite 330, ++Boston, MA 02111-1307, USA. ++ ++ As a special exception, if you link this library with files ++ compiled with GCC to produce an executable, this does not cause ++ the resulting executable to be covered by the GNU General Public License. ++ This exception does not however invalidate any other reasons why ++ the executable file might be covered by the GNU General Public License. ++ ++ ++This file just makes sure that the .fini and .init sections do in ++fact return. Users may put any desired instructions in those sections. ++This file is the last thing linked into any executable. ++*/ ++ .file "crtn.asm" ++ ++ ++ ++ .section ".init" ++ ldw ra, 44(sp) ++ ldw r23, 40(sp) ++ ldw r22, 36(sp) ++ ldw r21, 32(sp) ++ ldw r20, 28(sp) ++ ldw r19, 24(sp) ++ ldw r18, 20(sp) ++ ldw r17, 16(sp) ++ ldw r16, 12(sp) ++ ldw fp, 8(sp) ++ addi sp, sp, 48 ++ ret ++ ++ .section ".fini" ++ ldw ra, 44(sp) ++ ldw r23, 40(sp) ++ ldw r22, 36(sp) ++ ldw r21, 32(sp) ++ ldw r20, 28(sp) ++ ldw r19, 24(sp) ++ ldw r18, 20(sp) ++ ldw r17, 16(sp) ++ ldw r16, 12(sp) ++ ldw fp, 8(sp) ++ addi sp, sp, 48 ++ ret ++ +Index: gcc-4.1.2/gcc/config/nios2/lib2-divmod-hi.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gcc-4.1.2/gcc/config/nios2/lib2-divmod-hi.c 2010-06-30 08:50:26.000000000 +0200 +@@ -0,0 +1,133 @@ ++ ++/* We include auto-host.h here to get HAVE_GAS_HIDDEN. This is ++ supposedly valid even though this is a "target" file. */ ++#include "auto-host.h" ++#undef gid_t ++#undef pid_t ++#undef rlim_t ++#undef ssize_t ++#undef uid_t ++#undef vfork ++ ++ ++#include "tconfig.h" ++#include "tsystem.h" ++#include "coretypes.h" ++#include "tm.h" ++ ++ ++/* Don't use `fancy_abort' here even if config.h says to use it. */ ++#ifdef abort ++#undef abort ++#endif ++ ++ ++#ifdef HAVE_GAS_HIDDEN ++#define ATTRIBUTE_HIDDEN __attribute__ ((__visibility__ ("hidden"))) ++#else ++#define ATTRIBUTE_HIDDEN ++#endif ++ ++#ifndef MIN_UNITS_PER_WORD ++#define MIN_UNITS_PER_WORD UNITS_PER_WORD ++#endif ++ ++#include "libgcc2.h" ++ ++extern HItype __modhi3 (HItype, HItype); ++extern HItype __divhi3 (HItype, HItype); ++extern UHItype __umodhi3 (UHItype, UHItype); ++extern UHItype __udivhi3 (UHItype, UHItype); ++ ++static UHItype udivmodhi4(UHItype, UHItype, word_type); ++ ++static UHItype ++udivmodhi4(UHItype num, UHItype den, word_type modwanted) ++{ ++ UHItype bit = 1; ++ UHItype res = 0; ++ ++ while (den < num && bit && !(den & (1L<<15))) ++ { ++ den <<=1; ++ bit <<=1; ++ } ++ while (bit) ++ { ++ if (num >= den) ++ { ++ num -= den; ++ res |= bit; ++ } ++ bit >>=1; ++ den >>=1; ++ } ++ if (modwanted) return num; ++ return res; ++} ++ ++ ++HItype ++__divhi3 (HItype a, HItype b) ++{ ++ word_type neg = 0; ++ HItype res; ++ ++ if (a < 0) ++ { ++ a = -a; ++ neg = !neg; ++ } ++ ++ if (b < 0) ++ { ++ b = -b; ++ neg = !neg; ++ } ++ ++ res = udivmodhi4 (a, b, 0); ++ ++ if (neg) ++ res = -res; ++ ++ return res; ++} ++ ++ ++HItype ++__modhi3 (HItype a, HItype b) ++{ ++ word_type neg = 0; ++ HItype res; ++ ++ if (a < 0) ++ { ++ a = -a; ++ neg = 1; ++ } ++ ++ if (b < 0) ++ b = -b; ++ ++ res = udivmodhi4 (a, b, 1); ++ ++ if (neg) ++ res = -res; ++ ++ return res; ++} ++ ++ ++UHItype ++__udivhi3 (UHItype a, UHItype b) ++{ ++ return udivmodhi4 (a, b, 0); ++} ++ ++ ++UHItype ++__umodhi3 (UHItype a, UHItype b) ++{ ++ return udivmodhi4 (a, b, 1); ++} ++ +Index: gcc-4.1.2/gcc/config/nios2/lib2-divmod.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gcc-4.1.2/gcc/config/nios2/lib2-divmod.c 2010-06-30 08:50:26.000000000 +0200 +@@ -0,0 +1,136 @@ ++ ++/* We include auto-host.h here to get HAVE_GAS_HIDDEN. This is ++ supposedly valid even though this is a "target" file. */ ++#include "auto-host.h" ++#undef gid_t ++#undef pid_t ++#undef rlim_t ++#undef ssize_t ++#undef uid_t ++#undef vfork ++ ++ ++#include "tconfig.h" ++#include "tsystem.h" ++#include "coretypes.h" ++#include "tm.h" ++ ++ ++/* Don't use `fancy_abort' here even if config.h says to use it. */ ++#ifdef abort ++#undef abort ++#endif ++ ++ ++#ifdef HAVE_GAS_HIDDEN ++#define ATTRIBUTE_HIDDEN __attribute__ ((__visibility__ ("hidden"))) ++#else ++#define ATTRIBUTE_HIDDEN ++#endif ++ ++#ifndef MIN_UNITS_PER_WORD ++#define MIN_UNITS_PER_WORD UNITS_PER_WORD ++#endif ++ ++#include "libgcc2.h" ++ ++extern SItype __modsi3 (SItype, SItype); ++extern SItype __divsi3 (SItype, SItype); ++extern SItype __umodsi3 (SItype, SItype); ++extern SItype __udivsi3 (SItype, SItype); ++ ++static USItype udivmodsi4(USItype, USItype, word_type); ++ ++/* 16-bit SI divide and modulo as used in NIOS */ ++ ++ ++static USItype ++udivmodsi4(USItype num, USItype den, word_type modwanted) ++{ ++ USItype bit = 1; ++ USItype res = 0; ++ ++ while (den < num && bit && !(den & (1L<<31))) ++ { ++ den <<=1; ++ bit <<=1; ++ } ++ while (bit) ++ { ++ if (num >= den) ++ { ++ num -= den; ++ res |= bit; ++ } ++ bit >>=1; ++ den >>=1; ++ } ++ if (modwanted) return num; ++ return res; ++} ++ ++ ++SItype ++__divsi3 (SItype a, SItype b) ++{ ++ word_type neg = 0; ++ SItype res; ++ ++ if (a < 0) ++ { ++ a = -a; ++ neg = !neg; ++ } ++ ++ if (b < 0) ++ { ++ b = -b; ++ neg = !neg; ++ } ++ ++ res = udivmodsi4 (a, b, 0); ++ ++ if (neg) ++ res = -res; ++ ++ return res; ++} ++ ++ ++SItype ++__modsi3 (SItype a, SItype b) ++{ ++ word_type neg = 0; ++ SItype res; ++ ++ if (a < 0) ++ { ++ a = -a; ++ neg = 1; ++ } ++ ++ if (b < 0) ++ b = -b; ++ ++ res = udivmodsi4 (a, b, 1); ++ ++ if (neg) ++ res = -res; ++ ++ return res; ++} ++ ++ ++SItype ++__udivsi3 (SItype a, SItype b) ++{ ++ return udivmodsi4 (a, b, 0); ++} ++ ++ ++SItype ++__umodsi3 (SItype a, SItype b) ++{ ++ return udivmodsi4 (a, b, 1); ++} ++ +Index: gcc-4.1.2/gcc/config/nios2/lib2-divtable.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gcc-4.1.2/gcc/config/nios2/lib2-divtable.c 2010-06-30 08:50:26.000000000 +0200 +@@ -0,0 +1,52 @@ ++ ++/* We include auto-host.h here to get HAVE_GAS_HIDDEN. This is ++ supposedly valid even though this is a "target" file. */ ++#include "auto-host.h" ++#undef gid_t ++#undef pid_t ++#undef rlim_t ++#undef ssize_t ++#undef uid_t ++#undef vfork ++ ++ ++#include "tconfig.h" ++#include "tsystem.h" ++#include "coretypes.h" ++#include "tm.h" ++ ++ ++/* Don't use `fancy_abort' here even if config.h says to use it. */ ++#ifdef abort ++#undef abort ++#endif ++ ++ ++#ifdef HAVE_GAS_HIDDEN ++#define ATTRIBUTE_HIDDEN __attribute__ ((__visibility__ ("hidden"))) ++#else ++#define ATTRIBUTE_HIDDEN ++#endif ++ ++#include "libgcc2.h" ++ ++UQItype __divsi3_table[] = ++{ ++ 0, 0/1, 0/2, 0/3, 0/4, 0/5, 0/6, 0/7, 0/8, 0/9, 0/10, 0/11, 0/12, 0/13, 0/14, 0/15, ++ 0, 1/1, 1/2, 1/3, 1/4, 1/5, 1/6, 1/7, 1/8, 1/9, 1/10, 1/11, 1/12, 1/13, 1/14, 1/15, ++ 0, 2/1, 2/2, 2/3, 2/4, 2/5, 2/6, 2/7, 2/8, 2/9, 2/10, 2/11, 2/12, 2/13, 2/14, 2/15, ++ 0, 3/1, 3/2, 3/3, 3/4, 3/5, 3/6, 3/7, 3/8, 3/9, 3/10, 3/11, 3/12, 3/13, 3/14, 3/15, ++ 0, 4/1, 4/2, 4/3, 4/4, 4/5, 4/6, 4/7, 4/8, 4/9, 4/10, 4/11, 4/12, 4/13, 4/14, 4/15, ++ 0, 5/1, 5/2, 5/3, 5/4, 5/5, 5/6, 5/7, 5/8, 5/9, 5/10, 5/11, 5/12, 5/13, 5/14, 5/15, ++ 0, 6/1, 6/2, 6/3, 6/4, 6/5, 6/6, 6/7, 6/8, 6/9, 6/10, 6/11, 6/12, 6/13, 6/14, 6/15, ++ 0, 7/1, 7/2, 7/3, 7/4, 7/5, 7/6, 7/7, 7/8, 7/9, 7/10, 7/11, 7/12, 7/13, 7/14, 7/15, ++ 0, 8/1, 8/2, 8/3, 8/4, 8/5, 8/6, 8/7, 8/8, 8/9, 8/10, 8/11, 8/12, 8/13, 8/14, 8/15, ++ 0, 9/1, 9/2, 9/3, 9/4, 9/5, 9/6, 9/7, 9/8, 9/9, 9/10, 9/11, 9/12, 9/13, 9/14, 9/15, ++ 0, 10/1, 10/2, 10/3, 10/4, 10/5, 10/6, 10/7, 10/8, 10/9, 10/10, 10/11, 10/12, 10/13, 10/14, 10/15, ++ 0, 11/1, 11/2, 11/3, 11/4, 11/5, 11/6, 11/7, 11/8, 11/9, 11/10, 11/11, 11/12, 11/13, 11/14, 11/15, ++ 0, 12/1, 12/2, 12/3, 12/4, 12/5, 12/6, 12/7, 12/8, 12/9, 12/10, 12/11, 12/12, 12/13, 12/14, 12/15, ++ 0, 13/1, 13/2, 13/3, 13/4, 13/5, 13/6, 13/7, 13/8, 13/9, 13/10, 13/11, 13/12, 13/13, 13/14, 13/15, ++ 0, 14/1, 14/2, 14/3, 14/4, 14/5, 14/6, 14/7, 14/8, 14/9, 14/10, 14/11, 14/12, 14/13, 14/14, 14/15, ++ 0, 15/1, 15/2, 15/3, 15/4, 15/5, 15/6, 15/7, 15/8, 15/9, 15/10, 15/11, 15/12, 15/13, 15/14, 15/15, ++}; ++ +Index: gcc-4.1.2/gcc/config/nios2/lib2-mul.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gcc-4.1.2/gcc/config/nios2/lib2-mul.c 2010-06-30 08:50:26.000000000 +0200 +@@ -0,0 +1,113 @@ ++/* while we are debugging (ie compile outside of gcc build) ++ disable gcc specific headers */ ++#ifndef DEBUG_MULSI3 ++ ++ ++/* We include auto-host.h here to get HAVE_GAS_HIDDEN. This is ++ supposedly valid even though this is a "target" file. */ ++#include "auto-host.h" ++#undef gid_t ++#undef pid_t ++#undef rlim_t ++#undef ssize_t ++#undef uid_t ++#undef vfork ++ ++ ++#include "tconfig.h" ++#include "tsystem.h" ++#include "coretypes.h" ++#include "tm.h" ++ ++ ++/* Don't use `fancy_abort' here even if config.h says to use it. */ ++#ifdef abort ++#undef abort ++#endif ++ ++ ++#ifdef HAVE_GAS_HIDDEN ++#define ATTRIBUTE_HIDDEN __attribute__ ((__visibility__ ("hidden"))) ++#else ++#define ATTRIBUTE_HIDDEN ++#endif ++ ++#ifndef MIN_UNITS_PER_WORD ++#define MIN_UNITS_PER_WORD UNITS_PER_WORD ++#endif ++ ++#include "libgcc2.h" ++ ++#else ++#define SItype int ++#define USItype unsigned int ++#endif ++ ++ ++extern SItype __mulsi3 (SItype, SItype); ++ ++SItype ++__mulsi3 (SItype a, SItype b) ++{ ++ SItype res = 0; ++ USItype cnt = a; ++ ++ while (cnt) ++ { ++ if (cnt & 1) ++ { ++ res += b; ++ } ++ b <<= 1; ++ cnt >>= 1; ++ } ++ ++ return res; ++} ++/* ++TODO: Choose best alternative implementation. ++ ++SItype ++__divsi3 (SItype a, SItype b) ++{ ++ SItype res = 0; ++ USItype cnt = 0; ++ ++ while (cnt < 32) ++ { ++ if (a & (1L << cnt)) ++ { ++ res += b; ++ } ++ b <<= 1; ++ cnt++; ++ } ++ ++ return res; ++} ++*/ ++ ++ ++#ifdef DEBUG_MULSI3 ++ ++int ++main () ++{ ++ int i, j; ++ int error = 0; ++ ++ for (i = -1000; i < 1000; i++) ++ for (j = -1000; j < 1000; j++) ++ { ++ int expect = i * j; ++ int actual = A__divsi3 (i, j); ++ if (expect != actual) ++ { ++ printf ("error: %d * %d = %d not %d\n", i, j, expect, actual); ++ error = 1; ++ } ++ } ++ ++ return error; ++} ++#endif +Index: gcc-4.1.2/gcc/config/nios2/linux-atomic.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gcc-4.1.2/gcc/config/nios2/linux-atomic.c 2010-06-30 08:50:26.000000000 +0200 +@@ -0,0 +1,302 @@ ++/* Linux-specific atomic operations for Nios II Linux. ++ Copyright (C) 2008 Free Software Foundation, Inc. ++ ++This file is part of GCC. ++ ++GCC is free software; you can 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. ++ ++In addition to the permissions in the GNU General Public License, the ++Free Software Foundation gives you unlimited permission to link the ++compiled version of this file into combinations with other programs, ++and to distribute those combinations without any restriction coming ++from the use of this file. (The General Public License restrictions ++do apply in other respects; for example, they cover modification of ++the file, and distribution when not linked into a combine ++executable.) ++ ++GCC is distributed in the hope that it will be useful, but WITHOUT ANY ++WARRANTY; without even the implied warranty of MERCHANTABILITY or ++FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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. */ ++ ++#include <asm/unistd.h> ++#define EFAULT 14 ++#define EBUSY 16 ++#define ENOSYS 38 ++ ++/* We implement byte, short and int versions of each atomic operation ++ using the kernel helper defined below. There is no support for ++ 64-bit operations yet. */ ++ ++/* Crash a userspace program with SIGSEV. */ ++#define ABORT_INSTRUCTION asm ("stw zero, 0(zero)") ++ ++/* Kernel helper for compare-and-exchange a 32-bit value. */ ++static inline long ++__kernel_cmpxchg (int oldval, int newval, int *mem) ++{ ++ register int r2 asm ("r2") = __NR_nios2cmpxchg; ++ register unsigned long lws_mem asm("r4") = (unsigned long) (mem); ++ register int lws_old asm("r5") = oldval; ++ register int lws_new asm("r6") = newval; ++ register int err asm ("r7"); ++ asm volatile ("trap" ++ : "=r" (r2), "=r" (err) ++ : "r" (r2), "r" (lws_mem), "r" (lws_old), "r" (lws_new) ++ : "r1", "r3", "r8", "r9", "r10", "r11", "r12", "r13", "r14", ++ "r15", "r29", "memory"); ++ ++ /* If the kernel LWS call succeeded (err == 0), r2 contains the old value ++ from memory. If this value is equal to OLDVAL, the new value was written ++ to memory. If not, return EBUSY. */ ++ if (__builtin_expect (err, 0)) ++ { ++ if(__builtin_expect (r2 == EFAULT || r2 == ENOSYS,0)) ++ ABORT_INSTRUCTION; ++ } ++ else ++ { ++ if (__builtin_expect (r2 != oldval, 0)) ++ r2 = EBUSY; ++ else ++ r2 = 0; ++ } ++ ++ return r2; ++} ++ ++#define HIDDEN __attribute__ ((visibility ("hidden"))) ++ ++/* Big endian masks */ ++#define INVERT_MASK_1 24 ++#define INVERT_MASK_2 16 ++ ++#define MASK_1 0xffu ++#define MASK_2 0xffffu ++ ++#define FETCH_AND_OP_WORD(OP, PFX_OP, INF_OP) \ ++ int HIDDEN \ ++ __sync_fetch_and_##OP##_4 (int *ptr, int val) \ ++ { \ ++ int failure, tmp; \ ++ \ ++ do { \ ++ tmp = *ptr; \ ++ failure = __kernel_cmpxchg (tmp, PFX_OP tmp INF_OP val, ptr); \ ++ } while (failure != 0); \ ++ \ ++ return tmp; \ ++ } ++ ++FETCH_AND_OP_WORD (add, , +) ++FETCH_AND_OP_WORD (sub, , -) ++FETCH_AND_OP_WORD (or, , |) ++FETCH_AND_OP_WORD (and, , &) ++FETCH_AND_OP_WORD (xor, , ^) ++FETCH_AND_OP_WORD (nand, ~, &) ++ ++#define NAME_oldval(OP, WIDTH) __sync_fetch_and_##OP##_##WIDTH ++#define NAME_newval(OP, WIDTH) __sync_##OP##_and_fetch_##WIDTH ++ ++/* Implement both __sync_<op>_and_fetch and __sync_fetch_and_<op> for ++ subword-sized quantities. */ ++ ++#define SUBWORD_SYNC_OP(OP, PFX_OP, INF_OP, TYPE, WIDTH, RETURN) \ ++ TYPE HIDDEN \ ++ NAME##_##RETURN (OP, WIDTH) (TYPE *ptr, TYPE val) \ ++ { \ ++ int *wordptr = (int *) ((unsigned long) ptr & ~3); \ ++ unsigned int mask, shift, oldval, newval; \ ++ int failure; \ ++ \ ++ shift = (((unsigned long) ptr & 3) << 3) ^ INVERT_MASK_##WIDTH; \ ++ mask = MASK_##WIDTH << shift; \ ++ \ ++ do { \ ++ oldval = *wordptr; \ ++ newval = ((PFX_OP ((oldval & mask) >> shift) \ ++ INF_OP (unsigned int) val) << shift) & mask; \ ++ newval |= oldval & ~mask; \ ++ failure = __kernel_cmpxchg (oldval, newval, wordptr); \ ++ } while (failure != 0); \ ++ \ ++ return (RETURN & mask) >> shift; \ ++ } ++ ++SUBWORD_SYNC_OP (add, , +, short, 2, oldval) ++SUBWORD_SYNC_OP (sub, , -, short, 2, oldval) ++SUBWORD_SYNC_OP (or, , |, short, 2, oldval) ++SUBWORD_SYNC_OP (and, , &, short, 2, oldval) ++SUBWORD_SYNC_OP (xor, , ^, short, 2, oldval) ++SUBWORD_SYNC_OP (nand, ~, &, short, 2, oldval) ++ ++SUBWORD_SYNC_OP (add, , +, char, 1, oldval) ++SUBWORD_SYNC_OP (sub, , -, char, 1, oldval) ++SUBWORD_SYNC_OP (or, , |, char, 1, oldval) ++SUBWORD_SYNC_OP (and, , &, char, 1, oldval) ++SUBWORD_SYNC_OP (xor, , ^, char, 1, oldval) ++SUBWORD_SYNC_OP (nand, ~, &, char, 1, oldval) ++ ++#define OP_AND_FETCH_WORD(OP, PFX_OP, INF_OP) \ ++ int HIDDEN \ ++ __sync_##OP##_and_fetch_4 (int *ptr, int val) \ ++ { \ ++ int tmp, failure; \ ++ \ ++ do { \ ++ tmp = *ptr; \ ++ failure = __kernel_cmpxchg (tmp, PFX_OP tmp INF_OP val, ptr); \ ++ } while (failure != 0); \ ++ \ ++ return PFX_OP tmp INF_OP val; \ ++ } ++ ++OP_AND_FETCH_WORD (add, , +) ++OP_AND_FETCH_WORD (sub, , -) ++OP_AND_FETCH_WORD (or, , |) ++OP_AND_FETCH_WORD (and, , &) ++OP_AND_FETCH_WORD (xor, , ^) ++OP_AND_FETCH_WORD (nand, ~, &) ++ ++SUBWORD_SYNC_OP (add, , +, short, 2, newval) ++SUBWORD_SYNC_OP (sub, , -, short, 2, newval) ++SUBWORD_SYNC_OP (or, , |, short, 2, newval) ++SUBWORD_SYNC_OP (and, , &, short, 2, newval) ++SUBWORD_SYNC_OP (xor, , ^, short, 2, newval) ++SUBWORD_SYNC_OP (nand, ~, &, short, 2, newval) ++ ++SUBWORD_SYNC_OP (add, , +, char, 1, newval) ++SUBWORD_SYNC_OP (sub, , -, char, 1, newval) ++SUBWORD_SYNC_OP (or, , |, char, 1, newval) ++SUBWORD_SYNC_OP (and, , &, char, 1, newval) ++SUBWORD_SYNC_OP (xor, , ^, char, 1, newval) ++SUBWORD_SYNC_OP (nand, ~, &, char, 1, newval) ++ ++int HIDDEN ++__sync_val_compare_and_swap_4 (int *ptr, int oldval, int newval) ++{ ++ int actual_oldval, fail; ++ ++ while (1) ++ { ++ actual_oldval = *ptr; ++ ++ if (oldval != actual_oldval) ++ return actual_oldval; ++ ++ fail = __kernel_cmpxchg (actual_oldval, newval, ptr); ++ ++ if (!fail) ++ return oldval; ++ } ++} ++ ++#define SUBWORD_VAL_CAS(TYPE, WIDTH) \ ++ TYPE HIDDEN \ ++ __sync_val_compare_and_swap_##WIDTH (TYPE *ptr, TYPE oldval, \ ++ TYPE newval) \ ++ { \ ++ int *wordptr = (int *)((unsigned long) ptr & ~3), fail; \ ++ unsigned int mask, shift, actual_oldval, actual_newval; \ ++ \ ++ shift = (((unsigned long) ptr & 3) << 3) ^ INVERT_MASK_##WIDTH; \ ++ mask = MASK_##WIDTH << shift; \ ++ \ ++ while (1) \ ++ { \ ++ actual_oldval = *wordptr; \ ++ \ ++ if (((actual_oldval & mask) >> shift) != (unsigned int) oldval) \ ++ return (actual_oldval & mask) >> shift; \ ++ \ ++ actual_newval = (actual_oldval & ~mask) \ ++ | (((unsigned int) newval << shift) & mask); \ ++ \ ++ fail = __kernel_cmpxchg (actual_oldval, actual_newval, \ ++ wordptr); \ ++ \ ++ if (!fail) \ ++ return oldval; \ ++ } \ ++ } ++ ++SUBWORD_VAL_CAS (short, 2) ++SUBWORD_VAL_CAS (char, 1) ++ ++typedef unsigned char bool; ++ ++bool HIDDEN ++__sync_bool_compare_and_swap_4 (int *ptr, int oldval, int newval) ++{ ++ int failure = __kernel_cmpxchg (oldval, newval, ptr); ++ return (failure == 0); ++} ++ ++#define SUBWORD_BOOL_CAS(TYPE, WIDTH) \ ++ bool HIDDEN \ ++ __sync_bool_compare_and_swap_##WIDTH (TYPE *ptr, TYPE oldval, \ ++ TYPE newval) \ ++ { \ ++ TYPE actual_oldval \ ++ = __sync_val_compare_and_swap_##WIDTH (ptr, oldval, newval); \ ++ return (oldval == actual_oldval); \ ++ } ++ ++SUBWORD_BOOL_CAS (short, 2) ++SUBWORD_BOOL_CAS (char, 1) ++ ++int HIDDEN ++__sync_lock_test_and_set_4 (int *ptr, int val) ++{ ++ int failure, oldval; ++ ++ do { ++ oldval = *ptr; ++ failure = __kernel_cmpxchg (oldval, val, ptr); ++ } while (failure != 0); ++ ++ return oldval; ++} ++ ++#define SUBWORD_TEST_AND_SET(TYPE, WIDTH) \ ++ TYPE HIDDEN \ ++ __sync_lock_test_and_set_##WIDTH (TYPE *ptr, TYPE val) \ ++ { \ ++ int failure; \ ++ unsigned int oldval, newval, shift, mask; \ ++ int *wordptr = (int *) ((unsigned long) ptr & ~3); \ ++ \ ++ shift = (((unsigned long) ptr & 3) << 3) ^ INVERT_MASK_##WIDTH; \ ++ mask = MASK_##WIDTH << shift; \ ++ \ ++ do { \ ++ oldval = *wordptr; \ ++ newval = (oldval & ~mask) \ ++ | (((unsigned int) val << shift) & mask); \ ++ failure = __kernel_cmpxchg (oldval, newval, wordptr); \ ++ } while (failure != 0); \ ++ \ ++ return (oldval & mask) >> shift; \ ++ } ++ ++SUBWORD_TEST_AND_SET (short, 2) ++SUBWORD_TEST_AND_SET (char, 1) ++ ++#define SYNC_LOCK_RELEASE(TYPE, WIDTH) \ ++ void HIDDEN \ ++ __sync_lock_release_##WIDTH (TYPE *ptr) \ ++ { \ ++ *ptr = 0; \ ++ } ++ ++SYNC_LOCK_RELEASE (int, 4) ++SYNC_LOCK_RELEASE (short, 2) ++SYNC_LOCK_RELEASE (char, 1) +Index: gcc-4.1.2/gcc/config/nios2/linux-unwind.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gcc-4.1.2/gcc/config/nios2/linux-unwind.h 2010-06-30 08:50:26.000000000 +0200 +@@ -0,0 +1,166 @@ ++/* DWARF2 EH unwinding support for NIOS2 Linux. ++ Copyright (C) 2008 Free Software Foundation, Inc. ++ ++This file is part of GCC. ++ ++GCC is free software; you can 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. ++ ++In addition to the permissions in the GNU General Public License, the ++Free Software Foundation gives you unlimited permission to link the ++compiled version of this file with other programs, and to distribute ++those programs without any restriction coming from the use of this ++file. (The General Public License restrictions do apply in other ++respects; for example, they cover modification of the file, and ++distribution when not linked into another program.) ++ ++GCC is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++GNU 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. */ ++ ++#ifndef inhibit_libc ++ ++/* Do code reading to identify a signal frame, and set the frame ++ state data appropriately. See unwind-dw2.c for the structs. */ ++ ++#include <signal.h> ++#include <asm/unistd.h> ++ ++/* Unfortunately the kernel headers define the wrong shape of the ++ register file, so we define our own version here. This problem has ++ been reported. */ ++ ++struct nios2_mcontext ++{ ++ int version; /* 2 */ ++ unsigned seq_regs[23]; /* regs 1..23 */ ++ unsigned ra; /* Return address, r31 */ ++ unsigned fp; /* Frame pointer, r28 */ ++ unsigned gp; /* Global pointer, r26 */ ++ unsigned pad1; ++ unsigned ea; /* Exception return address (pc) */ ++ unsigned sp; /* Stack pointer, r27 */ ++ unsigned pad2; ++ /* Note r24, r25, r29, r30 are reserved registers */ ++}; ++ ++/* The kernel's definition of this structure also doesn't match ++ reality. Again, this has been reported. */ ++ ++struct nios2_ucontext { ++ unsigned long uc_flags; ++ unsigned pad1; ++ void *uc_link; ++ stack_t uc_stack; ++ struct siginfo info; ++ struct nios2_mcontext uc_mcontext; ++}; ++ ++#define MD_FALLBACK_FRAME_STATE_FOR nios2_fallback_frame_state ++ ++static _Unwind_Reason_Code ++nios2_fallback_frame_state (struct _Unwind_Context *context, ++ _Unwind_FrameState *fs) ++{ ++ u_int32_t *pc = (u_int32_t *) context->ra; ++ _Unwind_Ptr new_cfa; ++ int i; ++ ++ /* movi r2,(sigreturn/rt_sigreturn) ++ trap */ ++ if (pc[1] != 0x003b683a) /* trap */ ++ return _URC_END_OF_STACK; ++ ++#define NIOS2_REG(NUM,NAME) \ ++ (fs->regs.reg[NUM].how = REG_SAVED_OFFSET, \ ++ fs->regs.reg[NUM].loc.offset = (_Unwind_Ptr)®s->NAME - new_cfa) ++ ++ if (pc[0] == (0x00800004 | (__NR_sigreturn << 6))) ++ { ++ struct sigframe { ++ u_int32_t trampoline[2]; ++ u_int32_t pad1; ++ u_int32_t pad2; ++ struct sigcontext ctx; ++ } *rt_ = context->ra; ++ struct pt_regs *regs = &rt_->ctx.regs; ++ ++ /* The CFA is the user's incoming stack pointer value. */ ++ new_cfa = (_Unwind_Ptr)regs->sp; ++ fs->cfa_how = CFA_REG_OFFSET; ++ fs->cfa_reg = STACK_POINTER_REGNUM; ++ fs->cfa_offset = new_cfa - (_Unwind_Ptr) context->cfa; ++ ++ /* Regs 1..15 */ ++ NIOS2_REG (1, r1); ++ NIOS2_REG (2, r2); ++ NIOS2_REG (3, r3); ++ NIOS2_REG (4, r4); ++ NIOS2_REG (5, r5); ++ NIOS2_REG (6, r6); ++ NIOS2_REG (7, r7); ++ NIOS2_REG (8, r8); ++ NIOS2_REG (9, r9); ++ NIOS2_REG (10, r10); ++ NIOS2_REG (11, r11); ++ NIOS2_REG (12, r12); ++ NIOS2_REG (13, r13); ++ NIOS2_REG (14, r14); ++ NIOS2_REG (15, r15); ++ ++ /* Regs 16..23 are not saved here. They are callee saved or ++ special. */ ++ ++ /* The random registers. */ ++ NIOS2_REG (RA_REGNO, ra); ++ NIOS2_REG (FP_REGNO, fp); ++ NIOS2_REG (GP_REGNO, gp); ++ NIOS2_REG (SIGNAL_UNWIND_RETURN_COLUMN, ea); ++ ++ fs->retaddr_column = SIGNAL_UNWIND_RETURN_COLUMN; ++ ++ return _URC_NO_REASON; ++ } ++ else if (pc[0] == (0x00800004 | (__NR_rt_sigreturn << 6))) ++ { ++ struct sigframe { ++ u_int32_t trampoline[2]; ++ struct nios2_ucontext sigctx; ++ } *rt_ = context->ra; ++ struct nios2_mcontext *regs = &rt_->sigctx.uc_mcontext; ++ ++ if (regs->version != 2) ++ return _URC_END_OF_STACK; ++ ++ /* The CFA is the user's incoming stack pointer value. */ ++ new_cfa = (_Unwind_Ptr)regs->sp; ++ fs->cfa_how = CFA_REG_OFFSET; ++ fs->cfa_reg = STACK_POINTER_REGNUM; ++ fs->cfa_offset = new_cfa - (_Unwind_Ptr) context->cfa; ++ ++ /* The sequential registers. */ ++ for (i = 1; i != 24; i++) ++ NIOS2_REG (i, seq_regs[i-1]); ++ ++ /* The random registers. */ ++ NIOS2_REG (RA_REGNO, ra); ++ NIOS2_REG (FP_REGNO, fp); ++ NIOS2_REG (GP_REGNO, gp); ++ NIOS2_REG (SIGNAL_UNWIND_RETURN_COLUMN, ea); ++ ++ fs->retaddr_column = SIGNAL_UNWIND_RETURN_COLUMN; ++ ++ return _URC_NO_REASON; ++ } ++#undef NIOS2_REG ++ return _URC_END_OF_STACK; ++} ++#endif +Index: gcc-4.1.2/gcc/config/nios2/linux.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gcc-4.1.2/gcc/config/nios2/linux.h 2010-06-30 08:50:26.000000000 +0200 +@@ -0,0 +1,58 @@ ++/* Definitions for Nios II running Linux-based GNU systems with ++ ELF format. ++ Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2008 ++ Free Software Foundation, Inc. ++ ++This file is part of GCC. ++ ++GCC is free software; you can 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. */ ++ ++#undef LIB_SPEC ++#define LIB_SPEC "-lc \ ++ %{pthread:-lpthread}" ++ ++#undef STARTFILE_SPEC ++#define STARTFILE_SPEC \ ++"%{!shared: crt1.o%s} \ ++ crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}" ++ ++#undef ENDFILE_SPEC ++#define ENDFILE_SPEC \ ++"%{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s" ++ ++#define TARGET_OS_CPP_BUILTINS() \ ++ do \ ++ { \ ++ LINUX_TARGET_OS_CPP_BUILTINS(); \ ++ if (flag_pic) \ ++ { \ ++ builtin_define ("__PIC__"); \ ++ builtin_define ("__pic__"); \ ++ } \ ++ } \ ++ while (0) ++ ++#undef SYSROOT_SUFFIX_SPEC ++#define SYSROOT_SUFFIX_SPEC \ ++ "%{EB:/EB}" ++ ++#undef LINK_SPEC ++#define LINK_SPEC LINK_SPEC_ENDIAN \ ++ " %{shared:-shared} \ ++ %{static:-Bstatic} \ ++ %{rdynamic:-export-dynamic}" ++ ++#define MD_UNWIND_SUPPORT "config/nios2/linux-unwind.h" +Index: gcc-4.1.2/gcc/config/nios2/nios2-protos.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gcc-4.1.2/gcc/config/nios2/nios2-protos.h 2010-06-30 08:50:26.000000000 +0200 +@@ -0,0 +1,92 @@ ++/* NOT ASSIGNED TO FSF. COPYRIGHT ALTERA. */ ++/* Subroutines for assembler code output for Altera NIOS 2G NIOS2 version. ++ Copyright (C) 2003 Altera ++ Contributed by Jonah Graham (jgraham@altera.com). ++ ++This file is part of GNU CC. ++ ++GNU CC is free software; you can 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. ++ ++GNU CC is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++GNU General Public License for more details. ++ ++You should have received a copy of the GNU General Public License ++along with GNU CC; see the file COPYING. If not, write to ++the Free Software Foundation, 59 Temple Place - Suite 330, ++Boston, MA 02111-1307, USA. */ ++ ++extern void dump_frame_size (FILE *); ++extern HOST_WIDE_INT compute_frame_size (void); ++extern int nios2_initial_elimination_offset (int, int); ++extern void override_options (void); ++extern void optimization_options (int, int); ++extern int nios2_can_use_return_insn (void); ++extern void expand_prologue (void); ++extern void expand_epilogue (bool); ++extern void function_profiler (FILE *, int); ++extern enum reg_class reg_class_from_constraint (char, const char *); ++extern void nios2_register_target_pragmas (void); ++ ++#ifdef RTX_CODE ++extern int nios2_legitimate_address (rtx, enum machine_mode, int); ++extern int nios2_legitimate_constant (rtx); ++extern void nios2_print_operand (FILE *, rtx, int); ++extern void nios2_print_operand_address (FILE *, rtx); ++extern rtx nios2_legitimize_address (rtx, rtx, enum machine_mode); ++extern bool nios2_legitimate_pic_operand_p (rtx); ++ ++extern int nios2_emit_move_sequence (rtx *, enum machine_mode); ++extern int nios2_emit_expensive_div (rtx *, enum machine_mode); ++extern void nios2_adjust_call_address (rtx *); ++ ++extern rtx nios2_get_return_address (int); ++extern void nios2_set_return_address (rtx, rtx); ++ ++extern void gen_int_relational (enum rtx_code, rtx, rtx, rtx, rtx); ++extern void gen_conditional_move (rtx *, enum machine_mode); ++extern const char *asm_output_opcode (FILE *, const char *); ++ ++/* predicates */ ++extern int call_operand (rtx, enum machine_mode); ++extern int arith_operand (rtx, enum machine_mode); ++extern int uns_arith_operand (rtx, enum machine_mode); ++extern int logical_operand (rtx, enum machine_mode); ++extern int shift_operand (rtx, enum machine_mode); ++extern int reg_or_0_operand (rtx, enum machine_mode); ++extern int equality_op (rtx, enum machine_mode); ++extern int custom_insn_opcode (rtx, enum machine_mode); ++extern int rdwrctl_operand (rtx, enum machine_mode); ++ ++/* custom fpu instruction output */ ++extern const char *nios2_output_fpu_insn_cmps (rtx, enum rtx_code); ++extern const char *nios2_output_fpu_insn_cmpd (rtx, enum rtx_code); ++ ++# ifdef HAVE_MACHINE_MODES ++# if defined TREE_CODE ++extern rtx function_arg (const CUMULATIVE_ARGS *, enum machine_mode, tree, int); ++extern bool nios2_must_pass_in_stack (enum machine_mode, tree); ++extern int function_arg_partial_nregs (const CUMULATIVE_ARGS *, ++ enum machine_mode, tree, int); ++extern void function_arg_advance (CUMULATIVE_ARGS *, enum machine_mode, tree, ++ int); ++extern int nios2_function_arg_padding (enum machine_mode, tree); ++extern int nios2_function_arg_padding_upward (enum machine_mode, tree); ++extern int nios2_block_reg_padding (enum machine_mode, tree, int); ++extern int nios2_block_reg_padding_upward (enum machine_mode, tree, int); ++extern void init_cumulative_args (CUMULATIVE_ARGS *, tree, rtx, tree, int); ++extern void nios2_setup_incoming_varargs (CUMULATIVE_ARGS *, enum machine_mode, ++ tree, int *, int); ++ ++# endif /* TREE_CODE */ ++# endif /* HAVE_MACHINE_MODES */ ++#endif ++ ++#ifdef TREE_CODE ++extern int nios2_return_in_memory (tree); ++ ++#endif /* TREE_CODE */ +Index: gcc-4.1.2/gcc/config/nios2/nios2.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gcc-4.1.2/gcc/config/nios2/nios2.c 2010-06-30 08:52:12.000000000 +0200 +@@ -0,0 +1,4937 @@ ++/* NOT ASSIGNED TO FSF. COPYRIGHT ALTERA. */ ++/* Subroutines for assembler code output for Altera NIOS 2G NIOS2 version. ++ Copyright (C) 2005 Altera ++ Contributed by Jonah Graham (jgraham@altera.com), Will Reece (wreece@altera.com), ++ and Jeff DaSilva (jdasilva@altera.com). ++ ++This file is part of GNU CC. ++ ++GNU CC is free software; you can 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. ++ ++GNU CC is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++GNU General Public License for more details. ++ ++You should have received a copy of the GNU General Public License ++along with GNU CC; see the file COPYING. If not, write to ++the Free Software Foundation, 59 Temple Place - Suite 330, ++Boston, MA 02111-1307, USA. */ ++ ++ ++#include <stdio.h> ++#include "config.h" ++#include "system.h" ++#include "coretypes.h" ++#include "tm.h" ++#include "rtl.h" ++#include "tree.h" ++#include "tm_p.h" ++#include "regs.h" ++#include "hard-reg-set.h" ++#include "real.h" ++#include "insn-config.h" ++#include "conditions.h" ++#include "output.h" ++#include "insn-attr.h" ++#include "flags.h" ++#include "recog.h" ++#include "expr.h" ++#include "toplev.h" ++#include "basic-block.h" ++#include "function.h" ++#include "integrate.h" ++#include "ggc.h" ++#include "reload.h" ++#include "debug.h" ++#include "optabs.h" ++#include "target.h" ++#include "target-def.h" ++#include "c-pragma.h" /* For c_register_pragma. */ ++#include "cpplib.h" /* For CPP_NUMBER. */ ++#include "c-tree.h" /* For builtin_function. */ ++ ++/* Local prototypes. */ ++static bool nios2_rtx_costs (rtx, int, int, int *); ++ ++static void nios2_asm_function_prologue (FILE *, HOST_WIDE_INT); ++static int nios2_issue_rate (void); ++static struct machine_function *nios2_init_machine_status (void); ++static bool nios2_in_small_data_p (tree); ++static void save_reg (int, HOST_WIDE_INT); ++static void restore_reg (int, HOST_WIDE_INT); ++static unsigned int nios2_section_type_flags (tree, const char *, int); ++ ++/* 0 --> no #pragma seen ++ 1 --> in scope of #pragma reverse_bitfields ++ -1 --> in scope of #pragma no_reverse_bitfields. */ ++static int nios2_pragma_reverse_bitfields_flag = 0; ++static void nios2_pragma_reverse_bitfields (struct cpp_reader *); ++static void nios2_pragma_no_reverse_bitfields (struct cpp_reader *); ++static tree nios2_handle_struct_attribute (tree *, tree, tree, int, bool *); ++static void nios2_insert_attributes (tree, tree *); ++static void nios2_load_pic_register (void); ++static bool nios2_cannot_force_const_mem (rtx); ++bool nios2_legitimate_pic_operand_p (rtx x); ++static rtx nios2_legitimize_pic_address (rtx orig, enum machine_mode mode, ++ rtx reg); ++rtx nios2_legitimize_address (rtx x, rtx orig_x, enum machine_mode mode); ++static void nios2_init_builtins (void); ++static rtx nios2_expand_builtin (tree, rtx, rtx, enum machine_mode, int); ++static bool nios2_function_ok_for_sibcall (tree, tree); ++static int nios2_arg_partial_bytes (CUMULATIVE_ARGS *cum, ++ enum machine_mode mode, tree type, ++ bool named ATTRIBUTE_UNUSED); ++static bool nios2_pass_by_reference (CUMULATIVE_ARGS *cum ATTRIBUTE_UNUSED, ++ enum machine_mode mode ATTRIBUTE_UNUSED, ++ tree type, bool named ATTRIBUTE_UNUSED); ++static void nios2_encode_section_info (tree, rtx, int); ++int nios2_function_arg_padding_upward (enum machine_mode mode, tree type); ++int nios2_block_reg_padding_upward (enum machine_mode mode, tree type, ++ int first ATTRIBUTE_UNUSED); ++static void nios2_output_dwarf_dtprel (FILE *fuke, int size, rtx x); ++ ++/* Initialize the GCC target structure. */ ++#undef TARGET_ASM_FUNCTION_PROLOGUE ++#define TARGET_ASM_FUNCTION_PROLOGUE nios2_asm_function_prologue ++ ++#undef TARGET_DEFAULT_TARGET_FLAGS ++#define TARGET_DEFAULT_TARGET_FLAGS TARGET_DEFAULT ++ ++#undef TARGET_SCHED_ISSUE_RATE ++#define TARGET_SCHED_ISSUE_RATE nios2_issue_rate ++#undef TARGET_IN_SMALL_DATA_P ++#define TARGET_IN_SMALL_DATA_P nios2_in_small_data_p ++#undef TARGET_ENCODE_SECTION_INFO ++#define TARGET_ENCODE_SECTION_INFO nios2_encode_section_info ++#undef TARGET_SECTION_TYPE_FLAGS ++#define TARGET_SECTION_TYPE_FLAGS nios2_section_type_flags ++ ++#undef TARGET_INIT_BUILTINS ++#define TARGET_INIT_BUILTINS nios2_init_builtins ++#undef TARGET_EXPAND_BUILTIN ++#define TARGET_EXPAND_BUILTIN nios2_expand_builtin ++ ++#undef TARGET_FUNCTION_OK_FOR_SIBCALL ++#define TARGET_FUNCTION_OK_FOR_SIBCALL nios2_function_ok_for_sibcall ++ ++#undef TARGET_PASS_BY_REFERENCE ++#define TARGET_PASS_BY_REFERENCE nios2_pass_by_reference ++ ++#undef TARGET_ARG_PARTIAL_BYTES ++#define TARGET_ARG_PARTIAL_BYTES nios2_arg_partial_bytes ++ ++#undef TARGET_PROMOTE_PROTOTYPES ++#define TARGET_PROMOTE_PROTOTYPES hook_bool_tree_true ++ ++#undef TARGET_SETUP_INCOMING_VARARGS ++#define TARGET_SETUP_INCOMING_VARARGS nios2_setup_incoming_varargs ++ ++#undef TARGET_MUST_PASS_IN_STACK ++#define TARGET_MUST_PASS_IN_STACK must_pass_in_stack_var_size ++ ++#undef TARGET_RTX_COSTS ++#define TARGET_RTX_COSTS nios2_rtx_costs ++ ++#undef TARGET_HAVE_TLS ++#define TARGET_HAVE_TLS true ++ ++#undef TARGET_CANNOT_FORCE_CONST_MEM ++#define TARGET_CANNOT_FORCE_CONST_MEM nios2_cannot_force_const_mem ++ ++#undef TARGET_ASM_OUTPUT_DWARF_DTPREL ++#define TARGET_ASM_OUTPUT_DWARF_DTPREL nios2_output_dwarf_dtprel ++ ++const struct attribute_spec nios2_attribute_table[] = ++{ ++ /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */ ++ { "reverse_bitfields", 0, 0, false, false, false, ++ nios2_handle_struct_attribute }, ++ { "no_reverse_bitfields", 0, 0, false, false, false, ++ nios2_handle_struct_attribute }, ++ { NULL, 0, 0, false, false, false, NULL } ++}; ++ ++#undef TARGET_ATTRIBUTE_TABLE ++#define TARGET_ATTRIBUTE_TABLE nios2_attribute_table ++ ++#undef TARGET_INSERT_ATTRIBUTES ++#define TARGET_INSERT_ATTRIBUTES nios2_insert_attributes ++ ++/* ??? Might want to redefine TARGET_RETURN_IN_MSB here to handle ++ big-endian case; depends on what ABI we choose. */ ++ ++struct gcc_target targetm = TARGET_INITIALIZER; ++ ++ ++ ++/* Threshold for data being put into the small data/bss area, instead ++ of the normal data area (references to the small data/bss area take ++ 1 instruction, and use the global pointer, references to the normal ++ data area takes 2 instructions). */ ++unsigned HOST_WIDE_INT nios2_section_threshold = NIOS2_DEFAULT_GVALUE; ++ ++/* Structure to be filled in by compute_frame_size with register ++ save masks, and offsets for the current function. */ ++ ++struct nios2_frame_info ++GTY (()) ++{ ++ unsigned HOST_WIDE_INT save_mask; /* Mask of registers to save */ ++ long total_size; /* # bytes that the entire frame takes up. */ ++ long var_size; /* # bytes that variables take up. */ ++ long args_size; /* # bytes that outgoing arguments take up. */ ++ int save_reg_size; /* # bytes needed to store gp regs. */ ++ long save_regs_offset; /* Offset from new sp to store gp registers. */ ++ int initialized; /* != 0 if frame size already calculated. */ ++}; ++ ++struct machine_function ++GTY (()) ++{ ++ ++ /* Current frame information, calculated by compute_frame_size. */ ++ struct nios2_frame_info frame; ++}; ++ ++/* Supported TLS relocations. */ ++ ++enum tls_reloc { ++ TLS_GD16, ++ TLS_LDM16, ++ TLS_LDO16, ++ TLS_IE16, ++ TLS_LE16 ++}; ++ ++#define IS_UNSPEC_TLS(x) ((x)>=UNSPEC_TLS && (x)<=UNSPEC_ADD_TLS_LDO) ++ ++ ++ ++/*************************************** ++ * Register Classes ++ ***************************************/ ++ ++enum reg_class ++reg_class_from_constraint (char chr, const char *str) ++{ ++ if (chr == 'D' && ISDIGIT (str[1]) && ISDIGIT (str[2])) ++ { ++ int regno; ++ int ones = str[2] - '0'; ++ int tens = str[1] - '0'; ++ ++ regno = ones + (10 * tens); ++ if (regno < 0 || regno > 31) ++ return NO_REGS; ++ ++ return D00_REG + regno; ++ } ++ ++ return NO_REGS; ++} ++ ++ ++/*************************************** ++ * Stack Layout and Calling Conventions ++ ***************************************/ ++ ++ ++#define TOO_BIG_OFFSET(X) ((X) > ((1 << 15) - 1)) ++#define TEMP_REG_NUM 8 ++ ++static void ++nios2_asm_function_prologue (FILE *file, HOST_WIDE_INT size ATTRIBUTE_UNUSED) ++{ ++ if (flag_verbose_asm || flag_debug_asm) ++ { ++ compute_frame_size (); ++ dump_frame_size (file); ++ } ++} ++ ++static void ++save_reg (int regno, HOST_WIDE_INT offset) ++{ ++ rtx reg = gen_rtx_REG (SImode, regno); ++ rtx addr = gen_rtx_PLUS (Pmode, stack_pointer_rtx, GEN_INT (offset)); ++ ++ rtx pattern = gen_rtx_SET (SImode, gen_frame_mem (Pmode, addr), reg); ++ rtx insn = emit_insn (pattern); ++ RTX_FRAME_RELATED_P (insn) = 1; ++} ++ ++static void ++restore_reg (int regno, HOST_WIDE_INT offset) ++{ ++ rtx reg = gen_rtx_REG (SImode, regno); ++ rtx addr = gen_rtx_PLUS (Pmode, stack_pointer_rtx, GEN_INT (offset)); ++ ++ rtx pattern = gen_rtx_SET (SImode, reg, gen_frame_mem (Pmode, addr)); ++ emit_insn (pattern); ++} ++ ++ ++void ++expand_prologue (void) ++{ ++ int ix; ++ HOST_WIDE_INT total_frame_size = compute_frame_size (); ++ HOST_WIDE_INT sp_offset; /* offset from base_reg to final stack value */ ++ HOST_WIDE_INT fp_offset; /* offset from base_reg to final fp value */ ++ HOST_WIDE_INT save_offset; ++ rtx insn; ++ unsigned HOST_WIDE_INT save_mask; ++ ++ total_frame_size = compute_frame_size (); ++ ++ /* Decrement the stack pointer */ ++ if (TOO_BIG_OFFSET (total_frame_size)) ++ { ++ /* We need an intermediary point, this will point at the spill ++ block */ ++ insn = emit_insn ++ (gen_add3_insn (stack_pointer_rtx, ++ stack_pointer_rtx, ++ GEN_INT (cfun->machine->frame.save_regs_offset ++ - total_frame_size))); ++ RTX_FRAME_RELATED_P (insn) = 1; ++ ++ fp_offset = 0; ++ sp_offset = -cfun->machine->frame.save_regs_offset; ++ } ++ else if (total_frame_size) ++ { ++ insn = emit_insn (gen_add3_insn (stack_pointer_rtx, ++ stack_pointer_rtx, ++ GEN_INT (-total_frame_size))); ++ RTX_FRAME_RELATED_P (insn) = 1; ++ fp_offset = cfun->machine->frame.save_regs_offset; ++ sp_offset = 0; ++ } ++ else ++ fp_offset = sp_offset = 0; ++ ++ if (current_function_limit_stack) ++ emit_insn (gen_stack_overflow_detect_and_trap ()); ++ ++ save_offset = fp_offset + cfun->machine->frame.save_reg_size; ++ save_mask = cfun->machine->frame.save_mask; ++ ++ for (ix = 32; ix--;) ++ if (save_mask & ((unsigned HOST_WIDE_INT)1 << ix)) ++ { ++ save_offset -= 4; ++ save_reg (ix, save_offset); ++ } ++ ++ if (frame_pointer_needed) ++ { ++ insn = emit_insn (gen_add3_insn (hard_frame_pointer_rtx, ++ stack_pointer_rtx, ++ GEN_INT (fp_offset))); ++ ++ RTX_FRAME_RELATED_P (insn) = 1; ++ } ++ ++ if (sp_offset) ++ { ++ rtx tmp = gen_rtx_REG (Pmode, TEMP_REG_NUM); ++ emit_insn (gen_rtx_SET (Pmode, tmp, GEN_INT (sp_offset))); ++ ++ insn = emit_insn (gen_add3_insn (stack_pointer_rtx, stack_pointer_rtx, ++ tmp)); ++ if (!frame_pointer_needed) ++ { ++ /* Attache a note indicating what just happened */ ++ rtx note = gen_rtx_SET (Pmode, stack_pointer_rtx, ++ gen_rtx_PLUS (Pmode, stack_pointer_rtx, ++ GEN_INT (sp_offset))); ++ REG_NOTES (insn) = alloc_EXPR_LIST (REG_FRAME_RELATED_EXPR, ++ note, REG_NOTES (insn)); ++ RTX_FRAME_RELATED_P (insn) = 1; ++ } ++ if (current_function_limit_stack) ++ emit_insn (gen_stack_overflow_detect_and_trap ()); ++ } ++ ++ /* Load the PIC register if needed. */ ++ if (current_function_uses_pic_offset_table) ++ nios2_load_pic_register (); ++ ++ /* If we are profiling, make sure no instructions are scheduled before ++ the call to mcount. */ ++ if (current_function_profile) ++ emit_insn (gen_blockage ()); ++} ++ ++void ++expand_epilogue (bool sibcall_p) ++{ ++ rtx insn; ++ int ix; ++ HOST_WIDE_INT total_frame_size = compute_frame_size (); ++ unsigned HOST_WIDE_INT save_mask; ++ HOST_WIDE_INT sp_adjust; ++ HOST_WIDE_INT save_offset; ++ ++ if (!sibcall_p && nios2_can_use_return_insn ()) ++ { ++ insn = emit_jump_insn (gen_return ()); ++ return; ++ } ++ ++ emit_insn (gen_blockage ()); ++ ++ if (frame_pointer_needed) ++ { ++ /* Recover the stack pointer. */ ++ emit_insn (gen_rtx_SET (Pmode, stack_pointer_rtx, ++ hard_frame_pointer_rtx)); ++ save_offset = 0; ++ sp_adjust = total_frame_size - cfun->machine->frame.save_regs_offset; ++ } ++ else if (TOO_BIG_OFFSET (total_frame_size)) ++ { ++ rtx tmp = gen_rtx_REG (Pmode, TEMP_REG_NUM); ++ ++ emit_insn ++ (gen_rtx_SET ++ (Pmode, tmp, GEN_INT (cfun->machine->frame.save_regs_offset))); ++ emit_insn (gen_add3_insn (stack_pointer_rtx, stack_pointer_rtx, tmp)); ++ save_offset = 0; ++ sp_adjust = total_frame_size - cfun->machine->frame.save_regs_offset; ++ } ++ else ++ { ++ save_offset = cfun->machine->frame.save_regs_offset; ++ sp_adjust = total_frame_size; ++ } ++ ++ save_mask = cfun->machine->frame.save_mask; ++ save_offset += cfun->machine->frame.save_reg_size; ++ ++ for (ix = 32; ix--;) ++ if (save_mask & ((unsigned HOST_WIDE_INT)1 << ix)) ++ { ++ save_offset -= 4; ++ restore_reg (ix, save_offset); ++ } ++ ++ if (sp_adjust) ++ emit_insn (gen_add3_insn (stack_pointer_rtx, stack_pointer_rtx, ++ GEN_INT (sp_adjust))); ++ ++ /* Add in the __builtin_eh_return stack adjustment. */ ++ if (current_function_calls_eh_return) ++ emit_insn (gen_add3_insn (stack_pointer_rtx, ++ stack_pointer_rtx, ++ EH_RETURN_STACKADJ_RTX)); ++ ++ if (!sibcall_p) ++ insn = emit_jump_insn ++ (gen_return_from_epilogue (gen_rtx_REG (Pmode, RA_REGNO))); ++} ++ ++/* Implement RETURN_ADDR_RTX. Note, we do not support moving ++ back to a previous frame. */ ++rtx ++nios2_get_return_address (int count) ++{ ++ if (count != 0) ++ return const0_rtx; ++ ++ return get_hard_reg_initial_val (Pmode, RA_REGNO); ++} ++ ++/* Emit code to change the current function's return address to ++ ADDRESS. SCRATCH is available as a scratch register, if needed. ++ ADDRESS and SCRATCH are both word-mode GPRs. */ ++ ++void ++nios2_set_return_address (rtx address, rtx scratch) ++{ ++ compute_frame_size (); ++ if ((cfun->machine->frame.save_mask >> RA_REGNO) & 1) ++ { ++ HOST_WIDE_INT offset = cfun->machine->frame.save_reg_size - 4; ++ rtx base; ++ ++ if (frame_pointer_needed) ++ base = hard_frame_pointer_rtx; ++ else ++ { ++ base = stack_pointer_rtx; ++ offset += cfun->machine->frame.save_regs_offset; ++ ++ if (TOO_BIG_OFFSET (offset)) ++ { ++ emit_insn (gen_rtx_SET (Pmode, scratch, GEN_INT (offset))); ++ emit_insn (gen_add3_insn (scratch, scratch, base)); ++ base = scratch; ++ offset = 0; ++ } ++ } ++ if (offset) ++ base = gen_rtx_PLUS (Pmode, base, GEN_INT (offset)); ++ emit_insn (gen_rtx_SET (Pmode, gen_rtx_MEM (Pmode, base), address)); ++ } ++ else ++ emit_insn (gen_rtx_SET (Pmode, gen_rtx_REG (Pmode, RA_REGNO), address)); ++} ++ ++bool ++nios2_function_ok_for_sibcall (tree a ATTRIBUTE_UNUSED, tree b ATTRIBUTE_UNUSED) ++{ ++ return true; ++} ++ ++ ++ ++ ++ ++/* ----------------------- * ++ * Profiling ++ * ----------------------- */ ++ ++void ++function_profiler (FILE *file, int labelno ATTRIBUTE_UNUSED) ++{ ++ fprintf (file, "\tmov\tr8, ra\n"); ++ if (flag_pic) ++ { ++ fprintf (file, "\tnextpc\tr2\n"); ++ fprintf (file, "\t1: movhi\tr3, %%hiadj(_GLOBAL_OFFSET_TABLE_ - 1b)\n"); ++ fprintf (file, "\taddi\tr3, r3, %%lo(_GLOBAL_OFFSET_TABLE_ - 1b)\n"); ++ fprintf (file, "\tadd\tr2, r2, r3\n"); ++ fprintf (file, "\tldw\tr2, %%call(_mcount)(r2)\n"); ++ fprintf (file, "\tcallr\tr2\n"); ++ } ++ else ++ fprintf (file, "\tcall\t_mcount\n"); ++ fprintf (file, "\tmov\tra, r8\n"); ++} ++ ++ ++/*************************************** ++ * Stack Layout ++ ***************************************/ ++ ++ ++void ++dump_frame_size (FILE *file) ++{ ++ fprintf (file, "\t%s Current Frame Info\n", ASM_COMMENT_START); ++ ++ fprintf (file, "\t%s total_size = %ld\n", ASM_COMMENT_START, ++ cfun->machine->frame.total_size); ++ fprintf (file, "\t%s var_size = %ld\n", ASM_COMMENT_START, ++ cfun->machine->frame.var_size); ++ fprintf (file, "\t%s args_size = %ld\n", ASM_COMMENT_START, ++ cfun->machine->frame.args_size); ++ fprintf (file, "\t%s save_reg_size = %d\n", ASM_COMMENT_START, ++ cfun->machine->frame.save_reg_size); ++ fprintf (file, "\t%s initialized = %d\n", ASM_COMMENT_START, ++ cfun->machine->frame.initialized); ++ fprintf (file, "\t%s save_regs_offset = %ld\n", ASM_COMMENT_START, ++ cfun->machine->frame.save_regs_offset); ++ fprintf (file, "\t%s current_function_is_leaf = %d\n", ASM_COMMENT_START, ++ current_function_is_leaf); ++ fprintf (file, "\t%s frame_pointer_needed = %d\n", ASM_COMMENT_START, ++ frame_pointer_needed); ++ fprintf (file, "\t%s pretend_args_size = %d\n", ASM_COMMENT_START, ++ current_function_pretend_args_size); ++ ++} ++ ++/* Return true if RENOG should be saved in a prologue. */ ++ ++static bool ++save_reg_p (unsigned regno) ++{ ++ gcc_assert (GP_REGNO_P (regno)); ++ ++ if (regs_ever_live[regno] && !call_used_regs[regno]) ++ return true; ++ ++ if (regno == HARD_FRAME_POINTER_REGNUM && frame_pointer_needed) ++ return true; ++ ++ if (regno == PIC_OFFSET_TABLE_REGNUM ++ && current_function_uses_pic_offset_table) ++ return true; ++ ++ if (regno == RA_REGNO && regs_ever_live[RA_REGNO]) ++ return true; ++ ++ return false; ++} ++ ++/* Return the bytes needed to compute the frame pointer from the current ++ stack pointer. */ ++ ++HOST_WIDE_INT ++compute_frame_size (void) ++{ ++ unsigned int regno; ++ HOST_WIDE_INT var_size; /* # of var. bytes allocated */ ++ HOST_WIDE_INT total_size; /* # bytes that the entire frame takes up. */ ++ HOST_WIDE_INT save_reg_size; /* # bytes needed to store callee save regs. */ ++ HOST_WIDE_INT out_args_size; /* # bytes needed for outgoing args. */ ++ unsigned HOST_WIDE_INT save_mask = 0; ++ ++ if (cfun->machine->frame.initialized) ++ return cfun->machine->frame.total_size; ++ ++ save_reg_size = 0; ++ var_size = STACK_ALIGN (get_frame_size ()); ++ out_args_size = STACK_ALIGN (current_function_outgoing_args_size); ++ ++ total_size = var_size + out_args_size; ++ ++ /* Calculate space needed for gp registers. */ ++ for (regno = 0; GP_REGNO_P (regno); regno++) ++ if (save_reg_p (regno)) ++ { ++ save_mask |= (unsigned HOST_WIDE_INT)1 << regno; ++ save_reg_size += 4; ++ } ++ ++ /* If we call eh_return, we need to save the EH data registers. */ ++ if (current_function_calls_eh_return) ++ { ++ unsigned i; ++ unsigned r; ++ ++ for (i = 0; (r = EH_RETURN_DATA_REGNO (i)) != INVALID_REGNUM; i++) ++ if (!(save_mask & (1 << r))) ++ { ++ save_mask |= 1 << r; ++ save_reg_size += 4; ++ } ++ } ++ ++ save_reg_size = STACK_ALIGN (save_reg_size); ++ total_size += save_reg_size; ++ ++ total_size += STACK_ALIGN (current_function_pretend_args_size); ++ ++ /* Save other computed information. */ ++ cfun->machine->frame.save_mask = save_mask; ++ cfun->machine->frame.total_size = total_size; ++ cfun->machine->frame.var_size = var_size; ++ cfun->machine->frame.args_size = out_args_size; ++ cfun->machine->frame.save_reg_size = save_reg_size; ++ cfun->machine->frame.initialized = reload_completed; ++ ++ cfun->machine->frame.save_regs_offset = out_args_size + var_size; ++ ++ return total_size; ++} ++ ++ ++int ++nios2_initial_elimination_offset (int from, int to) ++{ ++ int offset; ++ ++ compute_frame_size (); ++ ++ /* Set OFFSET to the offset from the stack pointer. */ ++ switch (from) ++ { ++ case FRAME_POINTER_REGNUM: ++ offset = cfun->machine->frame.args_size; ++ break; ++ ++ case ARG_POINTER_REGNUM: ++ offset = cfun->machine->frame.total_size; ++ offset -= current_function_pretend_args_size; ++ break; ++ ++ default: ++ gcc_unreachable (); ++ } ++ ++ /* If we are asked for the frame pointer offset, then adjust OFFSET ++ by the offset from the frame pointer to the stack pointer. */ ++ if (to == HARD_FRAME_POINTER_REGNUM) ++ offset -= cfun->machine->frame.save_regs_offset; ++ ++ return offset; ++} ++ ++/* Return nonzero if this function is known to have a null epilogue. ++ This allows the optimizer to omit jumps to jumps if no stack ++ was created. */ ++int ++nios2_can_use_return_insn (void) ++{ ++ if (!reload_completed) ++ return 0; ++ ++ if (regs_ever_live[RA_REGNO] || current_function_profile) ++ return 0; ++ ++ if (cfun->machine->frame.initialized) ++ return cfun->machine->frame.total_size == 0; ++ ++ return compute_frame_size () == 0; ++} ++ ++ ++ ++ ++ ++/* Try to take a bit of tedium out of the __builtin_custom_<blah> ++ builtin functions, too. */ ++ ++#define NIOS2_FOR_ALL_CUSTOM_BUILTINS \ ++ NIOS2_DO_BUILTIN (N, n, n ) \ ++ NIOS2_DO_BUILTIN (NI, ni, nX ) \ ++ NIOS2_DO_BUILTIN (NF, nf, nX ) \ ++ NIOS2_DO_BUILTIN (NP, np, nX ) \ ++ NIOS2_DO_BUILTIN (NII, nii, nXX ) \ ++ NIOS2_DO_BUILTIN (NIF, nif, nXX ) \ ++ NIOS2_DO_BUILTIN (NIP, nip, nXX ) \ ++ NIOS2_DO_BUILTIN (NFI, nfi, nXX ) \ ++ NIOS2_DO_BUILTIN (NFF, nff, nXX ) \ ++ NIOS2_DO_BUILTIN (NFP, nfp, nXX ) \ ++ NIOS2_DO_BUILTIN (NPI, npi, nXX ) \ ++ NIOS2_DO_BUILTIN (NPF, npf, nXX ) \ ++ NIOS2_DO_BUILTIN (NPP, npp, nXX ) \ ++ NIOS2_DO_BUILTIN (IN, in, Xn ) \ ++ NIOS2_DO_BUILTIN (INI, ini, XnX ) \ ++ NIOS2_DO_BUILTIN (INF, inf, XnX ) \ ++ NIOS2_DO_BUILTIN (INP, inp, XnX ) \ ++ NIOS2_DO_BUILTIN (INII, inii, XnXX ) \ ++ NIOS2_DO_BUILTIN (INIF, inif, XnXX ) \ ++ NIOS2_DO_BUILTIN (INIP, inip, XnXX ) \ ++ NIOS2_DO_BUILTIN (INFI, infi, XnXX ) \ ++ NIOS2_DO_BUILTIN (INFF, inff, XnXX ) \ ++ NIOS2_DO_BUILTIN (INFP, infp, XnXX ) \ ++ NIOS2_DO_BUILTIN (INPI, inpi, XnXX ) \ ++ NIOS2_DO_BUILTIN (INPF, inpf, XnXX ) \ ++ NIOS2_DO_BUILTIN (INPP, inpp, XnXX ) \ ++ NIOS2_DO_BUILTIN (FN, fn, Xn ) \ ++ NIOS2_DO_BUILTIN (FNI, fni, XnX ) \ ++ NIOS2_DO_BUILTIN (FNF, fnf, XnX ) \ ++ NIOS2_DO_BUILTIN (FNP, fnp, XnX ) \ ++ NIOS2_DO_BUILTIN (FNII, fnii, XnXX ) \ ++ NIOS2_DO_BUILTIN (FNIF, fnif, XnXX ) \ ++ NIOS2_DO_BUILTIN (FNIP, fnip, XnXX ) \ ++ NIOS2_DO_BUILTIN (FNFI, fnfi, XnXX ) \ ++ NIOS2_DO_BUILTIN (FNFF, fnff, XnXX ) \ ++ NIOS2_DO_BUILTIN (FNFP, fnfp, XnXX ) \ ++ NIOS2_DO_BUILTIN (FNPI, fnpi, XnXX ) \ ++ NIOS2_DO_BUILTIN (FNPF, fnpf, XnXX ) \ ++ NIOS2_DO_BUILTIN (FNPP, fnpp, XnXX ) \ ++ NIOS2_DO_BUILTIN (PN, pn, Xn ) \ ++ NIOS2_DO_BUILTIN (PNI, pni, XnX ) \ ++ NIOS2_DO_BUILTIN (PNF, pnf, XnX ) \ ++ NIOS2_DO_BUILTIN (PNP, pnp, XnX ) \ ++ NIOS2_DO_BUILTIN (PNII, pnii, XnXX ) \ ++ NIOS2_DO_BUILTIN (PNIF, pnif, XnXX ) \ ++ NIOS2_DO_BUILTIN (PNIP, pnip, XnXX ) \ ++ NIOS2_DO_BUILTIN (PNFI, pnfi, XnXX ) \ ++ NIOS2_DO_BUILTIN (PNFF, pnff, XnXX ) \ ++ NIOS2_DO_BUILTIN (PNFP, pnfp, XnXX ) \ ++ NIOS2_DO_BUILTIN (PNPI, pnpi, XnXX ) \ ++ NIOS2_DO_BUILTIN (PNPF, pnpf, XnXX ) \ ++ NIOS2_DO_BUILTIN (PNPP, pnpp, XnXX ) ++ ++#undef NIOS2_FPU_INSN ++#define NIOS2_FPU_INSN(opt, insn, args) \ ++static const char *NIOS2_CONCAT (nios2_output_fpu_insn_, insn) (rtx); \ ++static void NIOS2_CONCAT (nios2_pragma_, insn) (struct cpp_reader *); \ ++static void NIOS2_CONCAT (nios2_pragma_no_, insn) (struct cpp_reader *); \ ++int NIOS2_CONCAT (nios2_custom_, opt) = -1; ++NIOS2_FOR_ALL_FPU_INSNS ++ ++nios2_fpu_info nios2_fpu_insns[nios2_fpu_max_insn] = { ++#undef NIOS2_FPU_INSN ++#define NIOS2_FPU_INSN(opt, insn, args) \ ++ { NIOS2_STRINGIFY (opt), \ ++ NIOS2_STRINGIFY (insn), \ ++ NIOS2_STRINGIFY (args), \ ++ -1, \ ++ NIOS2_CONCAT (nios2_output_fpu_insn_, insn), \ ++ "custom_" NIOS2_STRINGIFY (opt), \ ++ NIOS2_CONCAT (nios2_pragma_, insn), \ ++ "no_custom_" NIOS2_STRINGIFY (opt), \ ++ NIOS2_CONCAT (nios2_pragma_no_, insn), \ ++ 0, \ ++ 0, \ ++ 0, \ ++ 0, \ ++ 0, \ ++ &NIOS2_CONCAT (nios2_custom_, opt) }, ++ NIOS2_FOR_ALL_FPU_INSNS ++}; ++ ++const char *nios2_custom_fpu_cfg_string; ++ ++static const char *builtin_custom_seen[256]; ++ ++static void ++nios2_custom_switch (int parameter, int *value, const char *opt) ++{ ++ /* We only document values from 0-255, but we secretly allow -1 so ++ * that the -mno-custom-<opt> switches work. */ ++ if (parameter != -1) ++ { ++ if (parameter < -1 || parameter > 255) ++ error ("switch `-mcustom-%s' value %ld must be between 0 and 255", ++ opt, parameter); ++ *value = (int)parameter; ++ } ++} ++ ++static void ++nios2_custom_check_insns (int is_pragma) ++{ ++ int i; ++ int has_double = 0; ++ int errors = 0; ++ const char *ns[256]; ++ int ps[256]; ++ ++ for (i = 0; i < nios2_fpu_max_insn; i++) ++ if (nios2_fpu_insns[i].is_double && nios2_fpu_insns[i].N >= 0) ++ has_double = 1; ++ ++ if (has_double) ++ { ++ for (i = 0; i < nios2_fpu_max_insn; i++) ++ { ++ if (nios2_fpu_insns[i].needed_by_double ++ && nios2_fpu_insns[i].N < 0) ++ { ++ if (is_pragma) ++ error ("either switch `-mcustom-%s' or `#pragma custom_%s' is " ++ "required for double precision floating point", ++ nios2_fpu_insns[i].option, ++ nios2_fpu_insns[i].option); ++ else ++ error ("switch `-mcustom-%s' is required for double precision " ++ "floating point", ++ nios2_fpu_insns[i].option); ++ errors = 1; ++ } ++ } ++ } ++ ++ /* Warn if the user has certain exotic operations that won't get used ++ without -funsafe-math-optimizations, See expand_builtin () in ++ bulitins.c. */ ++ if (!flag_unsafe_math_optimizations) ++ { ++ for (i = 0; i < nios2_fpu_max_insn; i++) ++ { ++ if (nios2_fpu_insns[i].needs_unsafe && nios2_fpu_insns[i].N >= 0) ++ { ++ warning (0, "%s%s' has no effect unless " ++ "-funsafe-math-optimizations is specified", ++ is_pragma ? "`#pragma custom_" : "switch `-mcustom-", ++ nios2_fpu_insns[i].option); ++ /* Just one warning per function per compilation unit, please. */ ++ nios2_fpu_insns[i].needs_unsafe = 0; ++ } ++ } ++ } ++ ++ /* Warn if the user is trying to use -mcustom-fmins et. al, that won't ++ get used without -ffinite-math-only. See fold in fold () in ++ fold-const.c. */ ++ if (!flag_finite_math_only) ++ { ++ for (i = 0; i < nios2_fpu_max_insn; i++) ++ { ++ if (nios2_fpu_insns[i].needs_finite && nios2_fpu_insns[i].N >= 0) ++ { ++ warning (0, "%s%s' has no effect unless -ffinite-math-only " ++ "is specified", ++ is_pragma ? "`#pragma custom_" : "switch `-mcustom-", ++ nios2_fpu_insns[i].option); ++ /* Just one warning per function per compilation unit, please. */ ++ nios2_fpu_insns[i].needs_finite = 0; ++ } ++ } ++ } ++ ++ /* Warn the user about double precision divide braindamage until we ++ can fix it properly. See the RDIV_EXPR case of expand_expr_real in ++ expr.c. */ ++ { ++ static int warned = 0; ++ if (flag_unsafe_math_optimizations ++ && !optimize_size ++ && nios2_fpu_insns[nios2_fpu_divdf3].N >= 0 ++ && !warned) ++ { ++ warning (0, "%s%s' behaves poorly without -Os", ++ is_pragma ? "`#pragma custom_" : "switch `-mcustom-", ++ nios2_fpu_insns[nios2_fpu_divdf3].option); ++ warned = 1; ++ } ++ } ++ ++ /* The following bit of voodoo is lifted from the generated file ++ insn-opinit.c: to allow #pragmas to work properly, we have to tweak ++ the optab_table manually -- it only gets initialized once after the ++ switches are handled and before any #pragmas are seen. */ ++ if (is_pragma) ++ { ++ /* Only do this if the optabs have already been defined, not ++ when we're handling command line switches. */ ++ addv_optab->handlers[SFmode].insn_code = ++ add_optab->handlers[SFmode].insn_code = CODE_FOR_nothing; ++ addv_optab->handlers[DFmode].insn_code = ++ add_optab->handlers[DFmode].insn_code = CODE_FOR_nothing; ++ subv_optab->handlers[SFmode].insn_code = ++ sub_optab->handlers[SFmode].insn_code = CODE_FOR_nothing; ++ subv_optab->handlers[DFmode].insn_code = ++ sub_optab->handlers[DFmode].insn_code = CODE_FOR_nothing; ++ smulv_optab->handlers[SFmode].insn_code = ++ smul_optab->handlers[SFmode].insn_code = CODE_FOR_nothing; ++ smulv_optab->handlers[DFmode].insn_code = ++ smul_optab->handlers[DFmode].insn_code = CODE_FOR_nothing; ++ sdiv_optab->handlers[SFmode].insn_code = CODE_FOR_nothing; ++ sdiv_optab->handlers[DFmode].insn_code = CODE_FOR_nothing; ++ negv_optab->handlers[SFmode].insn_code = ++ neg_optab->handlers[SFmode].insn_code = CODE_FOR_nothing; ++ negv_optab->handlers[DFmode].insn_code = ++ neg_optab->handlers[DFmode].insn_code = CODE_FOR_nothing; ++ smin_optab->handlers[SFmode].insn_code = CODE_FOR_nothing; ++ smin_optab->handlers[DFmode].insn_code = CODE_FOR_nothing; ++ smax_optab->handlers[SFmode].insn_code = CODE_FOR_nothing; ++ smax_optab->handlers[DFmode].insn_code = CODE_FOR_nothing; ++ absv_optab->handlers[SFmode].insn_code = ++ abs_optab->handlers[SFmode].insn_code = CODE_FOR_nothing; ++ absv_optab->handlers[DFmode].insn_code = ++ abs_optab->handlers[DFmode].insn_code = CODE_FOR_nothing; ++ sqrt_optab->handlers[SFmode].insn_code = CODE_FOR_nothing; ++ sqrt_optab->handlers[DFmode].insn_code = CODE_FOR_nothing; ++ cos_optab->handlers[SFmode].insn_code = CODE_FOR_nothing; ++ cos_optab->handlers[DFmode].insn_code = CODE_FOR_nothing; ++ sin_optab->handlers[SFmode].insn_code = CODE_FOR_nothing; ++ sin_optab->handlers[DFmode].insn_code = CODE_FOR_nothing; ++ tan_optab->handlers[SFmode].insn_code = CODE_FOR_nothing; ++ tan_optab->handlers[DFmode].insn_code = CODE_FOR_nothing; ++ atan_optab->handlers[SFmode].insn_code = CODE_FOR_nothing; ++ atan_optab->handlers[DFmode].insn_code = CODE_FOR_nothing; ++ exp_optab->handlers[SFmode].insn_code = CODE_FOR_nothing; ++ exp_optab->handlers[DFmode].insn_code = CODE_FOR_nothing; ++ log_optab->handlers[SFmode].insn_code = CODE_FOR_nothing; ++ log_optab->handlers[DFmode].insn_code = CODE_FOR_nothing; ++ sfloat_optab->handlers[SFmode][SImode].insn_code = CODE_FOR_nothing; ++ sfloat_optab->handlers[DFmode][SImode].insn_code = CODE_FOR_nothing; ++ ufloat_optab->handlers[SFmode][SImode].insn_code = CODE_FOR_nothing; ++ ufloat_optab->handlers[DFmode][SImode].insn_code = CODE_FOR_nothing; ++ sfix_optab->handlers[SImode][SFmode].insn_code = CODE_FOR_nothing; ++ sfix_optab->handlers[SImode][DFmode].insn_code = CODE_FOR_nothing; ++ ufix_optab->handlers[SImode][SFmode].insn_code = CODE_FOR_nothing; ++ ufix_optab->handlers[SImode][DFmode].insn_code = CODE_FOR_nothing; ++ sext_optab->handlers[DFmode][SFmode].insn_code = CODE_FOR_nothing; ++ trunc_optab->handlers[SFmode][DFmode].insn_code = CODE_FOR_nothing; ++ cmp_optab->handlers[SFmode].insn_code = CODE_FOR_nothing; ++ cmp_optab->handlers[DFmode].insn_code = CODE_FOR_nothing; ++ ++ if (HAVE_addsf3) ++ addv_optab->handlers[SFmode].insn_code = ++ add_optab->handlers[SFmode].insn_code = CODE_FOR_addsf3; ++ if (HAVE_adddf3) ++ addv_optab->handlers[DFmode].insn_code = ++ add_optab->handlers[DFmode].insn_code = CODE_FOR_adddf3; ++ if (HAVE_subsf3) ++ subv_optab->handlers[SFmode].insn_code = ++ sub_optab->handlers[SFmode].insn_code = CODE_FOR_subsf3; ++ if (HAVE_subdf3) ++ subv_optab->handlers[DFmode].insn_code = ++ sub_optab->handlers[DFmode].insn_code = CODE_FOR_subdf3; ++ if (HAVE_mulsf3) ++ smulv_optab->handlers[SFmode].insn_code = ++ smul_optab->handlers[SFmode].insn_code = CODE_FOR_mulsf3; ++ if (HAVE_muldf3) ++ smulv_optab->handlers[DFmode].insn_code = ++ smul_optab->handlers[DFmode].insn_code = CODE_FOR_muldf3; ++ if (HAVE_divsf3) ++ sdiv_optab->handlers[SFmode].insn_code = CODE_FOR_divsf3; ++ if (HAVE_divdf3) ++ sdiv_optab->handlers[DFmode].insn_code = CODE_FOR_divdf3; ++ if (HAVE_negsf2) ++ negv_optab->handlers[SFmode].insn_code = ++ neg_optab->handlers[SFmode].insn_code = CODE_FOR_negsf2; ++ if (HAVE_negdf2) ++ negv_optab->handlers[DFmode].insn_code = ++ neg_optab->handlers[DFmode].insn_code = CODE_FOR_negdf2; ++ if (HAVE_minsf3) ++ smin_optab->handlers[SFmode].insn_code = CODE_FOR_minsf3; ++ if (HAVE_mindf3) ++ smin_optab->handlers[DFmode].insn_code = CODE_FOR_mindf3; ++ if (HAVE_maxsf3) ++ smax_optab->handlers[SFmode].insn_code = CODE_FOR_maxsf3; ++ if (HAVE_maxdf3) ++ smax_optab->handlers[DFmode].insn_code = CODE_FOR_maxdf3; ++ if (HAVE_abssf2) ++ absv_optab->handlers[SFmode].insn_code = ++ abs_optab->handlers[SFmode].insn_code = CODE_FOR_abssf2; ++ if (HAVE_absdf2) ++ absv_optab->handlers[DFmode].insn_code = ++ abs_optab->handlers[DFmode].insn_code = CODE_FOR_absdf2; ++ if (HAVE_sqrtsf2) ++ sqrt_optab->handlers[SFmode].insn_code = CODE_FOR_sqrtsf2; ++ if (HAVE_sqrtdf2) ++ sqrt_optab->handlers[DFmode].insn_code = CODE_FOR_sqrtdf2; ++ if (HAVE_cossf2) ++ cos_optab->handlers[SFmode].insn_code = CODE_FOR_cossf2; ++ if (HAVE_cosdf2) ++ cos_optab->handlers[DFmode].insn_code = CODE_FOR_cosdf2; ++ if (HAVE_sinsf2) ++ sin_optab->handlers[SFmode].insn_code = CODE_FOR_sinsf2; ++ if (HAVE_sindf2) ++ sin_optab->handlers[DFmode].insn_code = CODE_FOR_sindf2; ++ if (HAVE_tansf2) ++ tan_optab->handlers[SFmode].insn_code = CODE_FOR_tansf2; ++ if (HAVE_tandf2) ++ tan_optab->handlers[DFmode].insn_code = CODE_FOR_tandf2; ++ if (HAVE_atansf2) ++ atan_optab->handlers[SFmode].insn_code = CODE_FOR_atansf2; ++ if (HAVE_atandf2) ++ atan_optab->handlers[DFmode].insn_code = CODE_FOR_atandf2; ++ if (HAVE_expsf2) ++ exp_optab->handlers[SFmode].insn_code = CODE_FOR_expsf2; ++ if (HAVE_expdf2) ++ exp_optab->handlers[DFmode].insn_code = CODE_FOR_expdf2; ++ if (HAVE_logsf2) ++ log_optab->handlers[SFmode].insn_code = CODE_FOR_logsf2; ++ if (HAVE_logdf2) ++ log_optab->handlers[DFmode].insn_code = CODE_FOR_logdf2; ++ if (HAVE_floatsisf2) ++ sfloat_optab->handlers[SFmode][SImode].insn_code = CODE_FOR_floatsisf2; ++ if (HAVE_floatsidf2) ++ sfloat_optab->handlers[DFmode][SImode].insn_code = CODE_FOR_floatsidf2; ++ if (HAVE_floatunssisf2) ++ ufloat_optab->handlers[SFmode][SImode].insn_code = CODE_FOR_floatunssisf2; ++ if (HAVE_floatunssidf2) ++ ufloat_optab->handlers[DFmode][SImode].insn_code = CODE_FOR_floatunssidf2; ++ if (HAVE_fixsfsi2) ++ sfix_optab->handlers[SImode][SFmode].insn_code = CODE_FOR_fixsfsi2; ++ if (HAVE_fixdfsi2) ++ sfix_optab->handlers[SImode][DFmode].insn_code = CODE_FOR_fixdfsi2; ++ if (HAVE_fixunssfsi2) ++ ufix_optab->handlers[SImode][SFmode].insn_code = CODE_FOR_fixunssfsi2; ++ if (HAVE_fixunsdfsi2) ++ ufix_optab->handlers[SImode][DFmode].insn_code = CODE_FOR_fixunsdfsi2; ++ if (HAVE_extendsfdf2) ++ sext_optab->handlers[DFmode][SFmode].insn_code = CODE_FOR_extendsfdf2; ++ if (HAVE_truncdfsf2) ++ trunc_optab->handlers[SFmode][DFmode].insn_code = CODE_FOR_truncdfsf2; ++ if (HAVE_cmpsf) ++ cmp_optab->handlers[SFmode].insn_code = CODE_FOR_cmpsf; ++ if (HAVE_cmpdf) ++ cmp_optab->handlers[DFmode].insn_code = CODE_FOR_cmpdf; ++ } ++ ++ /* Check for duplicate values of N. */ ++ for (i = 0; i < 256; i++) ++ { ++ ns[i] = 0; ++ ps[i] = 0; ++ } ++ ++ for (i = 0; i < nios2_fpu_max_insn; i++) ++ { ++ int N = nios2_fpu_insns[i].N; ++ if (N >= 0) ++ { ++ if (ns[N]) ++ { ++ error ("%s%s' conflicts with %s%s'", ++ is_pragma ? "`#pragma custom_" : "switch `-mcustom-", ++ nios2_fpu_insns[i].option, ++ ps[N] ? "`#pragma custom_" : "switch `-mcustom-", ++ ns[N]); ++ errors = 1; ++ } ++ else if (builtin_custom_seen[N]) ++ { ++ error ("call to `%s' conflicts with %s%s'", ++ builtin_custom_seen[N], ++ (nios2_fpu_insns[i].pragma_seen ++ ? "`#pragma custom_" : "switch `-mcustom-"), ++ nios2_fpu_insns[i].option); ++ errors = 1; ++ } ++ else ++ { ++ ns[N] = nios2_fpu_insns[i].option; ++ ps[N] = nios2_fpu_insns[i].pragma_seen; ++ } ++ } ++ } ++ ++ if (errors) ++ fatal_error ("conflicting use of -mcustom switches, #pragmas, and/or " ++ "__builtin_custom_ functions"); ++} ++ ++static void ++nios2_handle_custom_fpu_cfg (const char *cfg, int is_pragma) ++{ ++#undef NIOS2_FPU_INSN ++#define NIOS2_FPU_INSN(opt, insn, args) \ ++ int opt = nios2_fpu_insns[NIOS2_CONCAT (nios2_fpu_, insn)].N; ++NIOS2_FOR_ALL_FPU_INSNS ++ ++ /* ++ * ??? These are just some sample possibilities. We'll change these ++ * at the last minute to match the capabilities of the actual fpu. ++ */ ++ if (!strcasecmp (cfg, "60-1")) ++ { ++ fmuls = 252; ++ fadds = 253; ++ fsubs = 254; ++ flag_single_precision_constant = 1; ++ } ++ else if (!strcasecmp (cfg, "60-2")) ++ { ++ fmuls = 252; ++ fadds = 253; ++ fsubs = 254; ++ fdivs = 255; ++ flag_single_precision_constant = 1; ++ } ++ else if (!strcasecmp (cfg, "72-3")) ++ { ++ floatus = 243; ++ fixsi = 244; ++ floatis = 245; ++ fcmpgts = 246; ++ fcmples = 249; ++ fcmpeqs = 250; ++ fcmpnes = 251; ++ fmuls = 252; ++ fadds = 253; ++ fsubs = 254; ++ fdivs = 255; ++ flag_single_precision_constant = 1; ++ } ++ else ++ warning (0, "ignoring unrecognized %sfpu-cfg' value `%s'", ++ is_pragma ? "`#pragma custom_" : "switch -mcustom-", cfg); ++ ++#undef NIOS2_FPU_INSN ++#define NIOS2_FPU_INSN(opt, insn, args) \ ++ nios2_fpu_insns[NIOS2_CONCAT (nios2_fpu_, insn)].N = opt; ++NIOS2_FOR_ALL_FPU_INSNS ++ ++ /* Guard against errors in the standard configurations. */ ++ nios2_custom_check_insns (is_pragma); ++} ++ ++void ++override_options (void) ++{ ++ int i; ++ ++ /* Function to allocate machine-dependent function status. */ ++ init_machine_status = &nios2_init_machine_status; ++ ++ nios2_section_threshold ++ = g_switch_set ? g_switch_value : NIOS2_DEFAULT_GVALUE; ++ ++ /* If we don't have mul, we don't have mulx either! */ ++ if (!TARGET_HAS_MUL && TARGET_HAS_MULX) ++ target_flags &= ~MASK_HAS_MULX; ++ ++ /* Set up for stack limit checking. */ ++ if (TARGET_STACK_CHECK) ++ stack_limit_rtx = gen_rtx_REG(SImode, ET_REGNO); ++ ++ for (i = 0; i < nios2_fpu_max_insn; i++) ++ { ++ nios2_fpu_insns[i].is_double = (nios2_fpu_insns[i].args[0] == 'd' ++ || nios2_fpu_insns[i].args[0] == 'd' ++ || nios2_fpu_insns[i].args[0] == 'd'); ++ nios2_fpu_insns[i].needed_by_double = (i == nios2_fpu_nios2_fwrx ++ || i == nios2_fpu_nios2_fwry ++ || i == nios2_fpu_nios2_frdxlo ++ || i == nios2_fpu_nios2_frdxhi ++ || i == nios2_fpu_nios2_frdy); ++ nios2_fpu_insns[i].needs_unsafe = (i == nios2_fpu_cossf2 ++ || i == nios2_fpu_cosdf2 ++ || i == nios2_fpu_sinsf2 ++ || i == nios2_fpu_sindf2 ++ || i == nios2_fpu_tansf2 ++ || i == nios2_fpu_tandf2 ++ || i == nios2_fpu_atansf2 ++ || i == nios2_fpu_atandf2 ++ || i == nios2_fpu_expsf2 ++ || i == nios2_fpu_expdf2 ++ || i == nios2_fpu_logsf2 ++ || i == nios2_fpu_logdf2); ++ nios2_fpu_insns[i].needs_finite = (i == nios2_fpu_minsf3 ++ || i == nios2_fpu_maxsf3 ++ || i == nios2_fpu_mindf3 ++ || i == nios2_fpu_maxdf3); ++ } ++ ++ /* We haven't seen any __builtin_custom functions yet. */ ++ for (i = 0; i < 256; i++) ++ builtin_custom_seen[i] = 0; ++ ++ /* Set up default handling for floating point custom instructions. ++ ++ Putting things in this order means that the -mcustom-fpu-cfg= ++ switch will always be overridden by individual -mcustom-fadds= ++ switches, regardless of the order in which they were specified ++ on the command line. ??? Remember to document this. */ ++ if (nios2_custom_fpu_cfg_string && *nios2_custom_fpu_cfg_string) ++ nios2_handle_custom_fpu_cfg (nios2_custom_fpu_cfg_string, 0); ++ ++ for (i = 0; i < nios2_fpu_max_insn; i++) ++ nios2_custom_switch (*nios2_fpu_insns[i].pN, ++ &nios2_fpu_insns[i].N, ++ nios2_fpu_insns[i].option); ++ ++ nios2_custom_check_insns (0); ++} ++ ++void ++optimization_options (int level, int size) ++{ ++ if (level || size) ++ target_flags |= MASK_INLINE_MEMCPY; ++ ++ if (level >= 3 && !size) ++ target_flags |= MASK_FAST_SW_DIV; ++} ++ ++/* Allocate a chunk of memory for per-function machine-dependent data. */ ++static struct machine_function * ++nios2_init_machine_status (void) ++{ ++ return ((struct machine_function *) ++ ggc_alloc_cleared (sizeof (struct machine_function))); ++} ++ ++ ++ ++/***************** ++ * Describing Relative Costs of Operations ++ *****************/ ++ ++/* 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. */ ++ ++ ++ ++static bool ++nios2_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int *total) ++{ ++ switch (code) ++ { ++ case CONST_INT: ++ if (INTVAL (x) == 0) ++ { ++ *total = COSTS_N_INSNS (0); ++ return true; ++ } ++ else if (SMALL_INT (INTVAL (x)) ++ || SMALL_INT_UNSIGNED (INTVAL (x)) ++ || UPPER16_INT (INTVAL (x))) ++ { ++ *total = COSTS_N_INSNS (2); ++ return true; ++ } ++ else ++ { ++ *total = COSTS_N_INSNS (4); ++ return true; ++ } ++ ++ case LABEL_REF: ++ case SYMBOL_REF: ++ /* ??? gp relative stuff will fit in here. */ ++ /* fall through */ ++ case CONST: ++ case CONST_DOUBLE: ++ { ++ *total = COSTS_N_INSNS (4); ++ return true; ++ } ++ ++ case MULT: ++ { ++ *total = COSTS_N_INSNS (1); ++ return false; ++ } ++ case SIGN_EXTEND: ++ { ++ *total = COSTS_N_INSNS (3); ++ return false; ++ } ++ case ZERO_EXTEND: ++ { ++ *total = COSTS_N_INSNS (1); ++ return false; ++ } ++ ++ default: ++ return false; ++ } ++} ++ ++ ++/*************************************** ++ * INSTRUCTION SUPPORT ++ * ++ * These functions are used within the Machine Description to ++ * handle common or complicated output and expansions from ++ * instructions. ++ ***************************************/ ++ ++/* Return TRUE if X references a SYMBOL_REF. */ ++static int ++symbol_mentioned_p (rtx x) ++{ ++ const char * fmt; ++ int i; ++ ++ if (GET_CODE (x) == SYMBOL_REF) ++ return 1; ++ ++ /* UNSPEC_TLS entries for a symbol include the SYMBOL_REF, but they ++ are constant offsets, not symbols. */ ++ if (GET_CODE (x) == UNSPEC && IS_UNSPEC_TLS (XINT (x, 1))) ++ return 0; ++ ++ fmt = GET_RTX_FORMAT (GET_CODE (x)); ++ ++ for (i = GET_RTX_LENGTH (GET_CODE (x)) - 1; i >= 0; i--) ++ { ++ if (fmt[i] == 'E') ++ { ++ int j; ++ ++ for (j = XVECLEN (x, i) - 1; j >= 0; j--) ++ if (symbol_mentioned_p (XVECEXP (x, i, j))) ++ return 1; ++ } ++ else if (fmt[i] == 'e' && symbol_mentioned_p (XEXP (x, i))) ++ return 1; ++ } ++ ++ return 0; ++} ++ ++/* Return TRUE if X references a LABEL_REF. */ ++static int ++label_mentioned_p (rtx x) ++{ ++ const char * fmt; ++ int i; ++ ++ if (GET_CODE (x) == LABEL_REF) ++ return 1; ++ ++ /* UNSPEC_TLS entries for a symbol include a LABEL_REF for the referencing ++ instruction, but they are constant offsets, not symbols. */ ++ if (GET_CODE (x) == UNSPEC && IS_UNSPEC_TLS (XINT (x, 1))) ++ return 0; ++ ++ fmt = GET_RTX_FORMAT (GET_CODE (x)); ++ for (i = GET_RTX_LENGTH (GET_CODE (x)) - 1; i >= 0; i--) ++ { ++ if (fmt[i] == 'E') ++ { ++ int j; ++ ++ for (j = XVECLEN (x, i) - 1; j >= 0; j--) ++ if (label_mentioned_p (XVECEXP (x, i, j))) ++ return 1; ++ } ++ else if (fmt[i] == 'e' && label_mentioned_p (XEXP (x, i))) ++ return 1; ++ } ++ ++ return 0; ++} ++ ++static int ++tls_mentioned_p (rtx x) ++{ ++ switch (GET_CODE (x)) ++ { ++ case CONST: ++ return tls_mentioned_p (XEXP (x, 0)); ++ ++ case UNSPEC: ++ if (IS_UNSPEC_TLS (XINT (x, 1))) ++ return 1; ++ ++ default: ++ return 0; ++ } ++} ++ ++/* Helper for nios2_tls_referenced_p. */ ++ ++static int ++nios2_tls_operand_p_1 (rtx *x, void *data ATTRIBUTE_UNUSED) ++{ ++ if (GET_CODE (*x) == SYMBOL_REF) ++ return SYMBOL_REF_TLS_MODEL (*x) != 0; ++ ++ /* Don't recurse into UNSPEC_TLS looking for TLS symbols; these are ++ TLS offsets, not real symbol references. */ ++ if (GET_CODE (*x) == UNSPEC ++ && IS_UNSPEC_TLS (XINT (*x, 1))) ++ return -1; ++ ++ return 0; ++} ++ ++/* Return TRUE if X contains any TLS symbol references. */ ++ ++static bool ++nios2_tls_referenced_p (rtx x) ++{ ++ if (! TARGET_HAVE_TLS) ++ return false; ++ ++ return for_each_rtx (&x, nios2_tls_operand_p_1, NULL); ++} ++ ++static bool ++nios2_cannot_force_const_mem (rtx x) ++{ ++ return nios2_tls_referenced_p (x); ++} ++ ++/* Emit a call to __tls_get_addr. TI is the argument to this function. RET is ++ an RTX for the return value location. The entire insn sequence is ++ returned. */ ++ ++static GTY(()) rtx nios2_tls_symbol; ++ ++static rtx ++nios2_call_tls_get_addr (rtx ti) ++{ ++ rtx arg = gen_rtx_REG (Pmode, FIRST_ARG_REGNO); ++ rtx ret = gen_rtx_REG (Pmode, FIRST_RETVAL_REGNO); ++ rtx fn, insn; ++ ++ if (!nios2_tls_symbol) ++ nios2_tls_symbol = init_one_libfunc ("__tls_get_addr"); ++ ++ emit_insn (gen_rtx_SET (Pmode, arg, ti)); ++ fn = gen_rtx_MEM (QImode, nios2_tls_symbol); ++ insn = emit_call_insn (gen_call_value (ret, fn, const0_rtx)); ++ CONST_OR_PURE_CALL_P (insn) = 1; ++ use_reg (&CALL_INSN_FUNCTION_USAGE (insn), ret); ++ use_reg (&CALL_INSN_FUNCTION_USAGE (insn), arg); ++ ++ return ret; ++} ++ ++/* Generate the code to access LOC, a thread local SYMBOL_REF. The ++ return value will be a valid address and move_operand (either a REG ++ or a LO_SUM). */ ++ ++static rtx ++nios2_legitimize_tls_address (rtx loc) ++{ ++ rtx dest = gen_reg_rtx (Pmode); ++ rtx ret, tmp1; ++ enum tls_model model = SYMBOL_REF_TLS_MODEL (loc); ++ ++ switch (model) ++ { ++ case TLS_MODEL_GLOBAL_DYNAMIC: ++ tmp1 = gen_reg_rtx (Pmode); ++ emit_insn (gen_add_tls_gd (tmp1, pic_offset_table_rtx, loc)); ++ current_function_uses_pic_offset_table = 1; ++ ret = nios2_call_tls_get_addr (tmp1); ++ emit_insn (gen_rtx_SET (Pmode, dest, ret)); ++ break; ++ ++ case TLS_MODEL_LOCAL_DYNAMIC: ++ tmp1 = gen_reg_rtx (Pmode); ++ emit_insn (gen_add_tls_ldm (tmp1, pic_offset_table_rtx, loc)); ++ current_function_uses_pic_offset_table = 1; ++ ret = nios2_call_tls_get_addr (tmp1); ++ ++ emit_insn (gen_add_tls_ldo (dest, ret, loc)); ++ ++ break; ++ ++ case TLS_MODEL_INITIAL_EXEC: ++ tmp1 = gen_reg_rtx (Pmode); ++ emit_insn (gen_load_tls_ie (tmp1, pic_offset_table_rtx, loc)); ++ current_function_uses_pic_offset_table = 1; ++ emit_insn (gen_add3_insn (dest, ++ gen_rtx_REG (Pmode, THREAD_POINTER_REGNUM), ++ tmp1)); ++ break; ++ ++ case TLS_MODEL_LOCAL_EXEC: ++ emit_insn (gen_add_tls_le (dest, ++ gen_rtx_REG (Pmode, THREAD_POINTER_REGNUM), ++ loc)); ++ break; ++ ++ default: ++ gcc_unreachable (); ++ } ++ ++ return dest; ++} ++ ++int ++nios2_emit_move_sequence (rtx *operands, enum machine_mode mode) ++{ ++ rtx to = operands[0]; ++ rtx from = operands[1]; ++ ++ if (!register_operand (to, mode) && !reg_or_0_operand (from, mode)) ++ { ++ if (no_new_pseudos) ++ internal_error ("Trying to force_reg no_new_pseudos == 1"); ++ from = copy_to_mode_reg (mode, from); ++ } ++ ++ /* Recognize the case where from is a reference to thread-local ++ data and load its address to a register. */ ++ if (nios2_tls_referenced_p (from)) ++ { ++ rtx tmp = from; ++ rtx addend = NULL; ++ ++ if (GET_CODE (tmp) == CONST && GET_CODE (XEXP (tmp, 0)) == PLUS) ++ { ++ addend = XEXP (XEXP (tmp, 0), 1); ++ tmp = XEXP (XEXP (tmp, 0), 0); ++ } ++ ++ gcc_assert (GET_CODE (tmp) == SYMBOL_REF); ++ gcc_assert (SYMBOL_REF_TLS_MODEL (tmp) != 0); ++ ++ tmp = nios2_legitimize_tls_address (tmp); ++ if (addend) ++ { ++ tmp = gen_rtx_PLUS (SImode, tmp, addend); ++ tmp = force_operand (tmp, to); ++ } ++ from = tmp; ++ } ++ else if (flag_pic && (CONSTANT_P (from) || symbol_mentioned_p (from) || ++ label_mentioned_p (from))) ++ from = nios2_legitimize_pic_address (from, SImode, ++ (no_new_pseudos ? to : 0)); ++ ++ operands[0] = to; ++ operands[1] = from; ++ return 0; ++} ++ ++/* Divide Support */ ++ ++/* ++ If -O3 is used, we want to output a table lookup for ++ divides between small numbers (both num and den >= 0 ++ and < 0x10). The overhead of this method in the worse ++ case is 40 bytes in the text section (10 insns) and ++ 256 bytes in the data section. Additional divides do ++ not incur additional penalties in the data section. ++ ++ Code speed is improved for small divides by about 5x ++ when using this method in the worse case (~9 cycles ++ vs ~45). And in the worse case divides not within the ++ table are penalized by about 10% (~5 cycles vs ~45). ++ However in the typical case the penalty is not as bad ++ because doing the long divide in only 45 cycles is ++ quite optimistic. ++ ++ ??? It would be nice to have some benchmarks other ++ than Dhrystone to back this up. ++ ++ This bit of expansion is to create this instruction ++ sequence as rtl. ++ or $8, $4, $5 ++ slli $9, $4, 4 ++ cmpgeui $3, $8, 16 ++ beq $3, $0, .L3 ++ or $10, $9, $5 ++ add $12, $11, divide_table ++ ldbu $2, 0($12) ++ br .L1 ++.L3: ++ call slow_div ++.L1: ++# continue here with result in $2 ++ ++ ??? Ideally I would like the emit libcall block to contain ++ all of this code, but I don't know how to do that. What it ++ means is that if the divide can be eliminated, it may not ++ completely disappear. ++ ++ ??? The __divsi3_table label should ideally be moved out ++ of this block and into a global. If it is placed into the ++ sdata section we can save even more cycles by doing things ++ gp relative. ++*/ ++int ++nios2_emit_expensive_div (rtx *operands, enum machine_mode mode) ++{ ++ rtx or_result, shift_left_result; ++ rtx lookup_value; ++ rtx lab1, lab3; ++ rtx insns; ++ rtx libfunc; ++ rtx final_result; ++ rtx tmp; ++ ++ /* It may look a little generic, but only SImode ++ is supported for now. */ ++ gcc_assert (mode == SImode); ++ ++ libfunc = sdiv_optab->handlers[(int) SImode].libfunc; ++ ++ ++ ++ lab1 = gen_label_rtx (); ++ lab3 = gen_label_rtx (); ++ ++ or_result = expand_simple_binop (SImode, IOR, ++ operands[1], operands[2], ++ 0, 0, OPTAB_LIB_WIDEN); ++ ++ emit_cmp_and_jump_insns (or_result, GEN_INT (15), GTU, 0, ++ GET_MODE (or_result), 0, lab3); ++ JUMP_LABEL (get_last_insn ()) = lab3; ++ ++ shift_left_result = expand_simple_binop (SImode, ASHIFT, ++ operands[1], GEN_INT (4), ++ 0, 0, OPTAB_LIB_WIDEN); ++ ++ lookup_value = expand_simple_binop (SImode, IOR, ++ shift_left_result, operands[2], ++ 0, 0, OPTAB_LIB_WIDEN); ++ ++ convert_move (operands[0], ++ gen_rtx_MEM (QImode, ++ gen_rtx_PLUS (SImode, ++ lookup_value, ++ gen_rtx_SYMBOL_REF (SImode, "__divsi3_table"))), ++ 1); ++ ++ ++ tmp = emit_jump_insn (gen_jump (lab1)); ++ JUMP_LABEL (tmp) = lab1; ++ emit_barrier (); ++ ++ emit_label (lab3); ++ LABEL_NUSES (lab3) = 1; ++ ++ start_sequence (); ++ final_result = emit_library_call_value (libfunc, NULL_RTX, ++ LCT_CONST, SImode, 2, ++ operands[1], SImode, ++ operands[2], SImode); ++ ++ ++ insns = get_insns (); ++ end_sequence (); ++ emit_libcall_block (insns, operands[0], final_result, ++ gen_rtx_DIV (SImode, operands[1], operands[2])); ++ ++ emit_label (lab1); ++ LABEL_NUSES (lab1) = 1; ++ return 1; ++} ++ ++/* The function with address *ADDR is being called. If the address ++ needs to be loaded from the GOT, emit the instruction to do so and ++ update *ADDR to point to the rtx for the loaded value. */ ++ ++void ++nios2_adjust_call_address (rtx *addr) ++{ ++ if (flag_pic ++ && (GET_CODE (*addr) == SYMBOL_REF || GET_CODE (*addr) == LABEL_REF)) ++ { ++ rtx addr_orig; ++ current_function_uses_pic_offset_table = 1; ++ addr_orig = *addr; ++ *addr = gen_reg_rtx (GET_MODE (addr_orig)); ++ emit_insn (gen_pic_load_call_addr (*addr, ++ pic_offset_table_rtx, addr_orig)); ++ } ++} ++ ++/* Branches/Compares. */ ++ ++/* The way of handling branches/compares ++ in gcc is heavily borrowed from MIPS. */ ++ ++enum internal_test ++{ ++ ITEST_EQ, ++ ITEST_NE, ++ ITEST_GT, ++ ITEST_GE, ++ ITEST_LT, ++ ITEST_LE, ++ ITEST_GTU, ++ ITEST_GEU, ++ ITEST_LTU, ++ ITEST_LEU, ++ ITEST_MAX ++}; ++ ++static enum internal_test map_test_to_internal_test (enum rtx_code); ++ ++/* Cached operands, and operator to compare for use in set/branch/trap ++ on condition codes. */ ++rtx branch_cmp[2]; ++enum cmp_type branch_type; ++ ++/* Make normal rtx_code into something we can index from an array. */ ++ ++static enum internal_test ++map_test_to_internal_test (enum rtx_code test_code) ++{ ++ enum internal_test test = ITEST_MAX; ++ ++ switch (test_code) ++ { ++ case EQ: ++ test = ITEST_EQ; ++ break; ++ case NE: ++ test = ITEST_NE; ++ break; ++ case GT: ++ test = ITEST_GT; ++ break; ++ case GE: ++ test = ITEST_GE; ++ break; ++ case LT: ++ test = ITEST_LT; ++ break; ++ case LE: ++ test = ITEST_LE; ++ break; ++ case GTU: ++ test = ITEST_GTU; ++ break; ++ case GEU: ++ test = ITEST_GEU; ++ break; ++ case LTU: ++ test = ITEST_LTU; ++ break; ++ case LEU: ++ test = ITEST_LEU; ++ break; ++ default: ++ break; ++ } ++ ++ return test; ++} ++ ++bool have_nios2_fpu_cmp_insn( enum rtx_code cond_t, enum cmp_type cmp_t ); ++enum rtx_code get_reverse_cond(enum rtx_code cond_t); ++ ++bool ++have_nios2_fpu_cmp_insn( enum rtx_code cond_t, enum cmp_type cmp_t ) ++{ ++ if (cmp_t == CMP_SF) ++ { ++ switch (cond_t) ++ { ++ case EQ: ++ return (nios2_fpu_insns[nios2_fpu_nios2_seqsf].N >= 0); ++ case NE: ++ return (nios2_fpu_insns[nios2_fpu_nios2_snesf].N >= 0); ++ case GT: ++ return (nios2_fpu_insns[nios2_fpu_nios2_sgtsf].N >= 0); ++ case GE: ++ return (nios2_fpu_insns[nios2_fpu_nios2_sgesf].N >= 0); ++ case LT: ++ return (nios2_fpu_insns[nios2_fpu_nios2_sltsf].N >= 0); ++ case LE: ++ return (nios2_fpu_insns[nios2_fpu_nios2_slesf].N >= 0); ++ default: ++ break; ++ } ++ } ++ else if (cmp_t == CMP_DF) ++ { ++ switch (cond_t) ++ { ++ case EQ: ++ return (nios2_fpu_insns[nios2_fpu_nios2_seqdf].N >= 0); ++ case NE: ++ return (nios2_fpu_insns[nios2_fpu_nios2_snedf].N >= 0); ++ case GT: ++ return (nios2_fpu_insns[nios2_fpu_nios2_sgtdf].N >= 0); ++ case GE: ++ return (nios2_fpu_insns[nios2_fpu_nios2_sgedf].N >= 0); ++ case LT: ++ return (nios2_fpu_insns[nios2_fpu_nios2_sltdf].N >= 0); ++ case LE: ++ return (nios2_fpu_insns[nios2_fpu_nios2_sledf].N >= 0); ++ default: ++ break; ++ } ++ } ++ ++ return false; ++} ++ ++/* Note that get_reverse_cond() is not the same as get_inverse_cond() ++ get_reverse_cond() means that if the operand order is reversed, ++ what is the operand that is needed to generate the same condition? */ ++enum rtx_code ++get_reverse_cond(enum rtx_code cond_t) ++{ ++ switch (cond_t) ++ { ++ case GT: return LT; ++ case GE: return LE; ++ case LT: return GT; ++ case LE: return GE; ++ case GTU: return LTU; ++ case GEU: return LEU; ++ case LTU: return GTU; ++ case LEU: return GEU; ++ default: break; ++ } ++ ++ return cond_t; ++} ++ ++ ++/* Generate the code to compare (and possibly branch) two integer values ++ TEST_CODE is the comparison code we are trying to emulate ++ (or implement directly) ++ RESULT is where to store the result of the comparison, ++ or null to emit a branch ++ CMP0 CMP1 are the two comparison operands ++ DESTINATION is the destination of the branch, or null to only compare. */ ++ ++void ++gen_int_relational (enum rtx_code test_code, /* Relational test (EQ, etc). */ ++ rtx result, /* Result to store comp. or 0 if branch. */ ++ rtx cmp0, /* First operand to compare. */ ++ rtx cmp1, /* Second operand to compare. */ ++ rtx destination) /* Destination of the branch, ++ or 0 if compare. */ ++{ ++ struct cmp_info ++ { ++ /* For register (or 0) compares. */ ++ enum rtx_code test_code_reg; /* Code to use in instruction (LT vs. LTU). */ ++ int reverse_regs; /* Reverse registers in test. */ ++ ++ /* for immediate compares */ ++ enum rtx_code test_code_const; /* Code to use in instruction (LT vs. LTU). */ ++ int const_low; /* Low bound of constant we can accept. */ ++ int const_high; /* High bound of constant we can accept. */ ++ int const_add; /* Constant to add. */ ++ ++ /* generic info */ ++ int unsignedp; /* != 0 for unsigned comparisons. */ ++ }; ++ ++ static const struct cmp_info info[(int) ITEST_MAX] = { ++ ++ {EQ, 0, EQ, -32768, 32767, 0, 0}, /* EQ */ ++ {NE, 0, NE, -32768, 32767, 0, 0}, /* NE */ ++ ++ {LT, 1, GE, -32769, 32766, 1, 0}, /* GT */ ++ {GE, 0, GE, -32768, 32767, 0, 0}, /* GE */ ++ {LT, 0, LT, -32768, 32767, 0, 0}, /* LT */ ++ {GE, 1, LT, -32769, 32766, 1, 0}, /* LE */ ++ ++ {LTU, 1, GEU, 0, 65534, 1, 0}, /* GTU */ ++ {GEU, 0, GEU, 0, 65535, 0, 0}, /* GEU */ ++ {LTU, 0, LTU, 0, 65535, 0, 0}, /* LTU */ ++ {GEU, 1, LTU, 0, 65534, 1, 0}, /* LEU */ ++ }; ++ ++ enum internal_test test; ++ enum machine_mode mode; ++ const struct cmp_info *p_info; ++ int branch_p; ++ ++ ++ test = map_test_to_internal_test (test_code); ++ gcc_assert (test != ITEST_MAX); ++ ++ p_info = &info[(int) test]; ++ ++ mode = GET_MODE (cmp0); ++ if (mode == VOIDmode) ++ mode = GET_MODE (cmp1); ++ ++ branch_p = (destination != 0); ++ ++ /* Handle floating point comparison directly. */ ++ if (branch_type == CMP_SF || branch_type == CMP_DF) ++ { ++ ++ bool reverse_operands = false; ++ ++ enum machine_mode float_mode = (branch_type == CMP_SF) ? SFmode : DFmode; ++ ++ gcc_assert (register_operand (cmp0, float_mode) && ++ register_operand (cmp1, float_mode)); ++ ++ if (branch_p) ++ { ++ test_code = p_info->test_code_reg; ++ reverse_operands = (p_info->reverse_regs); ++ } ++ ++ if (!have_nios2_fpu_cmp_insn(test_code, branch_type) && ++ have_nios2_fpu_cmp_insn(get_reverse_cond(test_code), branch_type) ) ++ { ++ test_code = get_reverse_cond(test_code); ++ reverse_operands = !reverse_operands; ++ } ++ ++ if (reverse_operands) ++ { ++ rtx temp = cmp0; ++ cmp0 = cmp1; ++ cmp1 = temp; ++ } ++ ++ if (branch_p) ++ { ++ rtx cond = gen_rtx_fmt_ee (test_code, SImode, cmp0, cmp1); ++ rtx label = gen_rtx_LABEL_REF (VOIDmode, destination); ++ rtx insn = gen_rtx_SET (VOIDmode, pc_rtx, ++ gen_rtx_IF_THEN_ELSE (VOIDmode, ++ cond, label, pc_rtx)); ++ emit_jump_insn (insn); ++ } ++ else ++ emit_move_insn (result, gen_rtx_fmt_ee (test_code, SImode, cmp0, ++ cmp1)); ++ return; ++ } ++ ++ /* We can't, under any circumstances, have const_ints in cmp0 ++ ??? Actually we could have const0. */ ++ if (GET_CODE (cmp0) == CONST_INT) ++ cmp0 = force_reg (mode, cmp0); ++ ++ /* If the comparison is against an int not in legal range ++ move it into a register. */ ++ if (GET_CODE (cmp1) == CONST_INT) ++ { ++ HOST_WIDE_INT value = INTVAL (cmp1); ++ ++ if (value < p_info->const_low || value > p_info->const_high) ++ cmp1 = force_reg (mode, cmp1); ++ } ++ ++ /* Comparison to constants, may involve adding 1 to change a GT into GE. ++ Comparison between two registers, may involve switching operands. */ ++ if (GET_CODE (cmp1) == CONST_INT) ++ { ++ if (p_info->const_add != 0) ++ { ++ HOST_WIDE_INT new = INTVAL (cmp1) + p_info->const_add; ++ ++ /* If modification of cmp1 caused overflow, ++ we would get the wrong answer if we follow the usual path; ++ thus, x > 0xffffffffU would turn into x > 0U. */ ++ gcc_assert ((p_info->unsignedp ++ ? (unsigned HOST_WIDE_INT) new > ++ (unsigned HOST_WIDE_INT) INTVAL (cmp1) ++ : new > INTVAL (cmp1)) == (p_info->const_add > 0)); ++ ++ cmp1 = GEN_INT (new); ++ } ++ } ++ ++ else if (p_info->reverse_regs) ++ { ++ rtx temp = cmp0; ++ cmp0 = cmp1; ++ cmp1 = temp; ++ } ++ ++ ++ ++ if (branch_p) ++ { ++ if (register_operand (cmp0, mode) && register_operand (cmp1, mode)) ++ { ++ rtx insn; ++ rtx cond = gen_rtx_fmt_ee (p_info->test_code_reg, mode, cmp0, cmp1); ++ rtx label = gen_rtx_LABEL_REF (VOIDmode, destination); ++ ++ insn = gen_rtx_SET (VOIDmode, pc_rtx, ++ gen_rtx_IF_THEN_ELSE (VOIDmode, ++ cond, label, pc_rtx)); ++ emit_jump_insn (insn); ++ } ++ else ++ { ++ rtx cond, label; ++ ++ result = gen_reg_rtx (mode); ++ ++ emit_move_insn (result, ++ gen_rtx_fmt_ee (p_info->test_code_const, mode, cmp0, ++ cmp1)); ++ ++ cond = gen_rtx_NE (mode, result, const0_rtx); ++ label = gen_rtx_LABEL_REF (VOIDmode, destination); ++ ++ emit_jump_insn (gen_rtx_SET (VOIDmode, pc_rtx, ++ gen_rtx_IF_THEN_ELSE (VOIDmode, ++ cond, ++ label, pc_rtx))); ++ } ++ } ++ else ++ { ++ if (register_operand (cmp0, mode) && register_operand (cmp1, mode)) ++ emit_move_insn (result, ++ gen_rtx_fmt_ee (p_info->test_code_reg, mode, cmp0, cmp1)); ++ else ++ emit_move_insn (result, ++ gen_rtx_fmt_ee (p_info->test_code_const, mode, cmp0, ++ cmp1)); ++ } ++ ++} ++ ++ ++/* ??? For now conditional moves are only supported ++ when the mode of the operands being compared are ++ the same as the ones being moved. */ ++ ++void ++gen_conditional_move (rtx *operands, enum machine_mode mode) ++{ ++ rtx insn, cond; ++ rtx cmp_reg = gen_reg_rtx (mode); ++ enum rtx_code cmp_code = GET_CODE (operands[1]); ++ enum rtx_code move_code = EQ; ++ ++ /* Emit a comparison if it is not "simple". ++ Simple comparisons are X eq 0 and X ne 0. */ ++ if ((cmp_code == EQ || cmp_code == NE) && branch_cmp[1] == const0_rtx) ++ { ++ cmp_reg = branch_cmp[0]; ++ move_code = cmp_code; ++ } ++ else if ((cmp_code == EQ || cmp_code == NE) && branch_cmp[0] == const0_rtx) ++ { ++ cmp_reg = branch_cmp[1]; ++ move_code = cmp_code == EQ ? NE : EQ; ++ } ++ else ++ gen_int_relational (cmp_code, cmp_reg, branch_cmp[0], branch_cmp[1], ++ NULL_RTX); ++ ++ cond = gen_rtx_fmt_ee (move_code, VOIDmode, cmp_reg, CONST0_RTX (mode)); ++ insn = gen_rtx_SET (mode, operands[0], ++ gen_rtx_IF_THEN_ELSE (mode, ++ cond, operands[2], operands[3])); ++ emit_insn (insn); ++} ++ ++/******************* ++ * Addressing Modes ++ *******************/ ++ ++int ++nios2_legitimate_constant (rtx x) ++{ ++ switch (GET_CODE (x)) ++ { ++ case SYMBOL_REF: ++ return !SYMBOL_REF_TLS_MODEL (x); ++ case CONST: ++ { ++ rtx op = XEXP (x, 0); ++ if (GET_CODE (op) != PLUS) ++ return false; ++ return nios2_legitimate_constant (XEXP (op, 0)) ++ && nios2_legitimate_constant (XEXP (op, 1)); ++ } ++ default: ++ return true; ++ } ++} ++ ++int ++nios2_legitimate_address (rtx operand, enum machine_mode mode ATTRIBUTE_UNUSED, ++ int strict) ++{ ++ int ret_val = 0; ++ ++ switch (GET_CODE (operand)) ++ { ++ /* direct. */ ++ case SYMBOL_REF: ++ if (SYMBOL_REF_TLS_MODEL (operand)) ++ break; ++ ++ if (SYMBOL_REF_IN_NIOS2_SMALL_DATA_P (operand)) ++ { ++ ret_val = 1; ++ break; ++ } ++ /* else, fall through */ ++ case LABEL_REF: ++ case CONST_INT: ++ case CONST: ++ case CONST_DOUBLE: ++ /* ??? In here I need to add gp addressing */ ++ ret_val = 0; ++ ++ break; ++ ++ /* Register indirect. */ ++ case REG: ++ ret_val = REG_OK_FOR_BASE_P2 (operand, strict); ++ break; ++ ++ /* Register indirect with displacement. */ ++ case PLUS: ++ { ++ rtx op0 = XEXP (operand, 0); ++ rtx op1 = XEXP (operand, 1); ++ ++ if (REG_P (op0) && REG_P (op1)) ++ ret_val = 0; ++ else if (REG_P (op0) && GET_CODE (op1) == CONST_INT) ++ ret_val = REG_OK_FOR_BASE_P2 (op0, strict) ++ && SMALL_INT (INTVAL (op1)); ++ else if (REG_P (op1) && GET_CODE (op0) == CONST_INT) ++ ret_val = REG_OK_FOR_BASE_P2 (op1, strict) ++ && SMALL_INT (INTVAL (op0)); ++ else ++ ret_val = 0; ++ } ++ break; ++ ++ default: ++ ret_val = 0; ++ break; ++ } ++ ++ return ret_val; ++} ++ ++/* Return true if EXP should be placed in the small data section. */ ++ ++static bool ++nios2_in_small_data_p (tree exp) ++{ ++ /* We want to merge strings, so we never consider them small data. */ ++ if (TREE_CODE (exp) == STRING_CST) ++ return false; ++ ++ if (TREE_CODE (exp) == VAR_DECL && DECL_SECTION_NAME (exp)) ++ { ++ const char *section = TREE_STRING_POINTER (DECL_SECTION_NAME (exp)); ++ /* ??? these string names need moving into ++ an array in some header file */ ++ if (nios2_section_threshold > 0 ++ && (strcmp (section, ".sbss") == 0 ++ || strncmp (section, ".sbss.", 6) == 0 ++ || strcmp (section, ".sdata") == 0 ++ || strncmp (section, ".sdata.", 7) == 0)) ++ return true; ++ } ++ else if (TREE_CODE (exp) == VAR_DECL) ++ { ++ HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (exp)); ++ ++ /* If this is an incomplete type with size 0, then we can't put it ++ in sdata because it might be too big when completed. */ ++ if (size > 0 && (unsigned HOST_WIDE_INT)size <= nios2_section_threshold) ++ return true; ++ } ++ ++ return false; ++} ++ ++static void ++nios2_encode_section_info (tree decl, rtx rtl, int first) ++{ ++ ++ rtx symbol; ++ int flags; ++ ++ default_encode_section_info (decl, rtl, first); ++ ++ /* Careful not to prod global register variables. */ ++ if (GET_CODE (rtl) != MEM) ++ return; ++ symbol = XEXP (rtl, 0); ++ if (GET_CODE (symbol) != SYMBOL_REF) ++ return; ++ ++ flags = SYMBOL_REF_FLAGS (symbol); ++ ++ /* We don't want weak variables to be addressed with gp in case they end up ++ with value 0 which is not within 2^15 of $gp. */ ++ if (DECL_P (decl) && DECL_WEAK (decl)) ++ flags |= SYMBOL_FLAG_WEAK_DECL; ++ ++ SYMBOL_REF_FLAGS (symbol) = flags; ++} ++ ++ ++static unsigned int ++nios2_section_type_flags (tree decl, const char *name, int reloc) ++{ ++ unsigned int flags; ++ ++ flags = default_section_type_flags (decl, name, reloc); ++ ++ if (strcmp (name, ".sbss") == 0 ++ || strncmp (name, ".sbss.", 6) == 0 ++ || strcmp (name, ".sdata") == 0 ++ || strncmp (name, ".sdata.", 7) == 0) ++ flags |= SECTION_SMALL; ++ ++ return flags; ++} ++ ++/* Handle a #pragma reverse_bitfields. */ ++static void ++nios2_pragma_reverse_bitfields (struct cpp_reader *pfile ATTRIBUTE_UNUSED) ++{ ++ nios2_pragma_reverse_bitfields_flag = 1; /* Reverse */ ++} ++ ++/* Handle a #pragma no_reverse_bitfields. */ ++static void ++nios2_pragma_no_reverse_bitfields (struct cpp_reader *pfile ATTRIBUTE_UNUSED) ++{ ++ nios2_pragma_reverse_bitfields_flag = -1; /* Forward */ ++} ++ ++/* Handle the various #pragma custom_<switch>s. */ ++static void ++nios2_pragma_fpu (int *value, const char *opt, int *seen) ++{ ++ tree t; ++ if (c_lex (&t) != CPP_NUMBER) ++ { ++ error ("`#pragma custom_%s' value must be a number between 0 and 255", ++ opt); ++ return; ++ } ++ ++ if (TREE_INT_CST_HIGH (t) == 0 ++ && TREE_INT_CST_LOW (t) <= 255) ++ { ++ *value = (int)TREE_INT_CST_LOW (t); ++ *seen = 1; ++ } ++ else ++ error ("`#pragma custom_%s' value must be between 0 and 255", opt); ++ nios2_custom_check_insns (1); ++} ++ ++/* Handle the various #pragma no_custom_<switch>s. */ ++static void ++nios2_pragma_no_fpu (int *value, const char *opt ATTRIBUTE_UNUSED) ++{ ++ *value = -1; ++ nios2_custom_check_insns (1); ++} ++ ++#undef NIOS2_FPU_INSN ++#define NIOS2_FPU_INSN(opt, insn, args) \ ++static void \ ++NIOS2_CONCAT (nios2_pragma_, insn) \ ++ (struct cpp_reader *pfile ATTRIBUTE_UNUSED) \ ++{ \ ++ nios2_fpu_info *inf = &(nios2_fpu_insns[NIOS2_CONCAT (nios2_fpu_, insn)]); \ ++ nios2_pragma_fpu (&(inf->N), inf->option, &(inf->pragma_seen)); \ ++} \ ++static void \ ++NIOS2_CONCAT (nios2_pragma_no_, insn) \ ++ (struct cpp_reader *pfile ATTRIBUTE_UNUSED) \ ++{ \ ++ nios2_fpu_info *inf = &(nios2_fpu_insns[NIOS2_CONCAT (nios2_fpu_, insn)]); \ ++ nios2_pragma_no_fpu (&(inf->N), inf->option); \ ++} ++NIOS2_FOR_ALL_FPU_INSNS ++ ++static void ++nios2_pragma_handle_custom_fpu_cfg (struct cpp_reader *pfile ATTRIBUTE_UNUSED) ++{ ++ tree t; ++ if (c_lex (&t) != CPP_STRING) ++ { ++ error ("`#pragma custom_fpu_cfg' value must be a string"); ++ return; ++ } ++ ++ if (TREE_STRING_LENGTH (t) > 0) ++ nios2_handle_custom_fpu_cfg (TREE_STRING_POINTER (t), 1); ++} ++ ++void ++nios2_register_target_pragmas (void) ++{ ++ int i; ++ ++ c_register_pragma (0, "reverse_bitfields", ++ nios2_pragma_reverse_bitfields); ++ c_register_pragma (0, "no_reverse_bitfields", ++ nios2_pragma_no_reverse_bitfields); ++ ++ for (i = 0; i < nios2_fpu_max_insn; i++) ++ { ++ nios2_fpu_info *inf = &(nios2_fpu_insns[i]); ++ c_register_pragma (0, inf->pname, inf->pragma); ++ c_register_pragma (0, inf->nopname, inf->nopragma); ++ } ++ ++ c_register_pragma (0, "custom_fpu_cfg", ++ nios2_pragma_handle_custom_fpu_cfg); ++} ++ ++/* Handle a "reverse_bitfields" or "no_reverse_bitfields" attribute. ++ ??? What do these attributes mean on a union? */ ++static tree ++nios2_handle_struct_attribute (tree *node, tree name, ++ tree args ATTRIBUTE_UNUSED, ++ int flags ATTRIBUTE_UNUSED, ++ bool *no_add_attrs) ++{ ++ tree *type = NULL; ++ if (DECL_P (*node)) ++ { ++ if (TREE_CODE (*node) == TYPE_DECL) ++ type = &TREE_TYPE (*node); ++ } ++ else ++ type = node; ++ ++ if (!(type && (TREE_CODE (*type) == RECORD_TYPE ++ || TREE_CODE (*type) == UNION_TYPE))) ++ { ++ warning (0, "`%s' attribute ignored", IDENTIFIER_POINTER (name)); ++ *no_add_attrs = true; ++ } ++ ++ else if ((is_attribute_p ("reverse_bitfields", name) ++ && lookup_attribute ("no_reverse_bitfields", ++ TYPE_ATTRIBUTES (*type))) ++ || ((is_attribute_p ("no_reverse_bitfields", name) ++ && lookup_attribute ("reverse_bitfields", ++ TYPE_ATTRIBUTES (*type))))) ++ { ++ warning (0, "`%s' incompatible attribute ignored", ++ IDENTIFIER_POINTER (name)); ++ *no_add_attrs = true; ++ } ++ ++ return NULL_TREE; ++} ++ ++/* Add __attribute__ ((pragma_reverse_bitfields)) when in the scope of a ++ #pragma reverse_bitfields, or __attribute__ ++ ((pragma_no_reverse_bitfields)) when in the scope of a #pragma ++ no_reverse_bitfields. This gets called before ++ nios2_handle_struct_attribute above, so we can't just reuse the same ++ attributes. */ ++static void ++nios2_insert_attributes (tree node, tree *attr_ptr) ++{ ++ tree type = NULL; ++ if (DECL_P (node)) ++ { ++ if (TREE_CODE (node) == TYPE_DECL) ++ type = TREE_TYPE (node); ++ } ++ else ++ type = node; ++ ++ if (!type ++ || (TREE_CODE (type) != RECORD_TYPE ++ && TREE_CODE (type) != UNION_TYPE)) ++ { ++ /* We can ignore things other than structs & unions. */ ++ return; ++ } ++ ++ if (lookup_attribute ("reverse_bitfields", TYPE_ATTRIBUTES (type)) ++ || lookup_attribute ("no_reverse_bitfields", TYPE_ATTRIBUTES (type))) ++ { ++ /* If an attribute is already set, it silently overrides the ++ current #pragma, if any. */ ++ return; ++ } ++ ++ if (nios2_pragma_reverse_bitfields_flag) ++ { ++ const char *id = (nios2_pragma_reverse_bitfields_flag == 1 ? ++ "pragma_reverse_bitfields" : ++ "pragma_no_reverse_bitfields"); ++ /* No attribute set, and we are in the scope of a #pragma. */ ++ *attr_ptr = tree_cons (get_identifier (id), NULL, *attr_ptr); ++ } ++} ++ ++/***************************************** ++ * Position Independent Code ++ *****************************************/ ++ ++/* Emit code to load the PIC register. */ ++ ++static void ++nios2_load_pic_register (void) ++{ ++ rtx tmp = gen_rtx_REG (Pmode, TEMP_REG_NUM); ++ ++ emit_insn (gen_load_got_register (pic_offset_table_rtx, tmp)); ++ emit_insn (gen_add3_insn (pic_offset_table_rtx, pic_offset_table_rtx, tmp)); ++} ++ ++/* Nonzero if the constant value X is a legitimate general operand ++ when generating PIC code. It is given that flag_pic is on and ++ that X satisfies CONSTANT_P or is a CONST_DOUBLE. */ ++ ++bool ++nios2_legitimate_pic_operand_p (rtx x) ++{ ++ rtx inner; ++ ++ /* UNSPEC_TLS is always PIC. */ ++ if (tls_mentioned_p (x)) ++ return true; ++ ++ if (GET_CODE (x) == SYMBOL_REF) ++ return false; ++ if (GET_CODE (x) == LABEL_REF) ++ return false; ++ if (GET_CODE (x) == CONST) ++ { ++ inner = XEXP (x, 0); ++ if (GET_CODE (inner) == PLUS && ++ GET_CODE (XEXP (inner, 0)) == SYMBOL_REF && ++ GET_CODE (XEXP (inner, 1)) == CONST) ++ return false; ++ } ++ return true; ++} ++ ++rtx ++nios2_legitimize_pic_address (rtx orig, ++ enum machine_mode mode ATTRIBUTE_UNUSED, rtx reg) ++{ ++ if (GET_CODE (orig) == SYMBOL_REF ++ || GET_CODE (orig) == LABEL_REF) ++ { ++ if (reg == 0) ++ { ++ gcc_assert (!no_new_pseudos); ++ reg = gen_reg_rtx (Pmode); ++ } ++ ++ emit_insn (gen_pic_load_addr (reg, pic_offset_table_rtx, orig)); ++ ++ current_function_uses_pic_offset_table = 1; ++ ++ return reg; ++ } ++ else if (GET_CODE (orig) == CONST) ++ { ++ rtx base, offset; ++ ++ if (GET_CODE (XEXP (orig, 0)) == PLUS ++ && XEXP (XEXP (orig, 0), 0) == pic_offset_table_rtx) ++ return orig; ++ ++ if (GET_CODE (XEXP (orig, 0)) == UNSPEC ++ && IS_UNSPEC_TLS (XINT (XEXP (orig, 0), 1))) ++ return orig; ++ ++ if (reg == 0) ++ { ++ gcc_assert (!no_new_pseudos); ++ reg = gen_reg_rtx (Pmode); ++ } ++ ++ gcc_assert (GET_CODE (XEXP (orig, 0)) == PLUS); ++ ++ base = nios2_legitimize_pic_address (XEXP (XEXP (orig, 0), 0), Pmode, ++ reg); ++ offset = nios2_legitimize_pic_address (XEXP (XEXP (orig, 0), 1), Pmode, ++ base == reg ? 0 : reg); ++ ++ if (GET_CODE (offset) == CONST_INT) ++ return plus_constant (base, INTVAL (offset)); ++ ++ return gen_rtx_PLUS (Pmode, base, offset); ++ } ++ ++ return orig; ++} ++ ++/* Test for various thread-local symbols. */ ++ ++/* Return TRUE if X is a thread-local symbol. */ ++ ++static bool ++nios2_tls_symbol_p (rtx x) ++{ ++ if (! TARGET_HAVE_TLS) ++ return false; ++ ++ if (GET_CODE (x) != SYMBOL_REF) ++ return false; ++ ++ return SYMBOL_REF_TLS_MODEL (x) != 0; ++} ++ ++rtx ++nios2_legitimize_address (rtx x, rtx orig_x, enum machine_mode mode) ++{ ++ if (nios2_tls_symbol_p (x)) ++ return nios2_legitimize_tls_address (x); ++ ++ if (flag_pic) ++ { ++ /* We need to find and carefully transform any SYMBOL and LABEL ++ references; so go back to the original address expression. */ ++ rtx new_x = nios2_legitimize_pic_address (orig_x, mode, NULL_RTX); ++ ++ if (new_x != orig_x) ++ x = new_x; ++ } ++ ++ return x; ++} ++ ++/***************************************** ++ * Defining the Output Assembler Language ++ *****************************************/ ++ ++/* -------------- * ++ * Output of Data ++ * -------------- */ ++ ++ ++/* -------------------------------- * ++ * Output of Assembler Instructions ++ * -------------------------------- */ ++ ++ ++/* print the operand OP to file stream ++ FILE modified by LETTER. LETTER ++ can be one of: ++ i: print "i" if OP is an immediate, except 0 ++ o: print "io" if OP is volatile ++ ++ z: for const0_rtx print $0 instead of 0 ++ H: for %hiadj ++ L: for %lo ++ U: for upper half of 32 bit value ++ D: for the upper 32-bits of a 64-bit double value ++ */ ++ ++void ++nios2_print_operand (FILE *file, rtx op, int letter) ++{ ++ ++ switch (letter) ++ { ++ case 'i': ++ if (CONSTANT_P (op) && (op != const0_rtx)) ++ fprintf (file, "i"); ++ return; ++ ++ case 'o': ++ if (GET_CODE (op) == MEM && TARGET_BYPASS_CACHE) ++ fprintf (file, "io"); ++ return; ++ ++ default: ++ break; ++ } ++ ++ if (comparison_operator (op, VOIDmode)) ++ { ++ if (letter == 0) ++ { ++ fprintf (file, "%s", GET_RTX_NAME (GET_CODE (op))); ++ return; ++ } ++ } ++ ++ ++ switch (GET_CODE (op)) ++ { ++ case REG: ++ if (letter == 0 || letter == 'z') ++ { ++ fprintf (file, "%s", reg_names[REGNO (op)]); ++ return; ++ } ++ else if (letter == 'D') ++ { ++ fprintf (file, "%s", reg_names[REGNO (op)+1]); ++ return; ++ } ++ break; ++ ++ case CONST_INT: ++ if (INTVAL (op) == 0 && letter == 'z') ++ { ++ fprintf (file, "zero"); ++ return; ++ } ++ else if (letter == 'U') ++ { ++ HOST_WIDE_INT val = INTVAL (op); ++ rtx new_op; ++ val = (val / 65536) & 0xFFFF; ++ new_op = GEN_INT (val); ++ output_addr_const (file, new_op); ++ return; ++ } ++ ++ /* else, fall through. */ ++ case CONST: ++ case LABEL_REF: ++ case SYMBOL_REF: ++ case CONST_DOUBLE: ++ if (letter == 0 || letter == 'z') ++ { ++ output_addr_const (file, op); ++ return; ++ } ++ else if (letter == 'H') ++ { ++ fprintf (file, "%%hiadj("); ++ output_addr_const (file, op); ++ fprintf (file, ")"); ++ return; ++ } ++ else if (letter == 'L') ++ { ++ fprintf (file, "%%lo("); ++ output_addr_const (file, op); ++ fprintf (file, ")"); ++ return; ++ } ++ break; ++ ++ ++ case SUBREG: ++ case MEM: ++ if (letter == 0) ++ { ++ output_address (op); ++ return; ++ } ++ break; ++ ++ case CODE_LABEL: ++ if (letter == 0) ++ { ++ output_addr_const (file, op); ++ return; ++ } ++ break; ++ ++ default: ++ break; ++ } ++ ++ fprintf (stderr, "Missing way to print (%c) ", letter); ++ debug_rtx (op); ++ gcc_unreachable (); ++} ++ ++static int gprel_constant (rtx); ++ ++static int ++gprel_constant (rtx op) ++{ ++ if (GET_CODE (op) == SYMBOL_REF ++ && SYMBOL_REF_IN_NIOS2_SMALL_DATA_P (op)) ++ return 1; ++ else if (GET_CODE (op) == CONST ++ && GET_CODE (XEXP (op, 0)) == PLUS) ++ return gprel_constant (XEXP (XEXP (op, 0), 0)); ++ else ++ return 0; ++} ++ ++void ++nios2_print_operand_address (FILE *file, rtx op) ++{ ++ switch (GET_CODE (op)) ++ { ++ case CONST: ++ case CONST_INT: ++ case LABEL_REF: ++ case CONST_DOUBLE: ++ case SYMBOL_REF: ++ if (gprel_constant (op)) ++ { ++ fprintf (file, "%%gprel("); ++ output_addr_const (file, op); ++ fprintf (file, ")(%s)", reg_names[GP_REGNO]); ++ return; ++ } ++ ++ break; ++ ++ case PLUS: ++ { ++ rtx op0 = XEXP (op, 0); ++ rtx op1 = XEXP (op, 1); ++ ++ if (REG_P (op0) && CONSTANT_P (op1)) ++ { ++ output_addr_const (file, op1); ++ fprintf (file, "(%s)", reg_names[REGNO (op0)]); ++ return; ++ } ++ else if (REG_P (op1) && CONSTANT_P (op0)) ++ { ++ output_addr_const (file, op0); ++ fprintf (file, "(%s)", reg_names[REGNO (op1)]); ++ return; ++ } ++ } ++ break; ++ ++ case REG: ++ fprintf (file, "0(%s)", reg_names[REGNO (op)]); ++ return; ++ ++ case MEM: ++ { ++ rtx base = XEXP (op, 0); ++ PRINT_OPERAND_ADDRESS (file, base); ++ return; ++ } ++ default: ++ break; ++ } ++ ++ fprintf (stderr, "Missing way to print address\n"); ++ debug_rtx (op); ++ gcc_unreachable (); ++} ++ ++ ++ ++/**************************** ++ * Debug information ++ ****************************/ ++ ++static void ++nios2_output_dwarf_dtprel (FILE *file, int size, rtx x) ++{ ++ gcc_assert (size == 4); ++ fputs ("\t.4byte\t%tls_ldo(", file); ++ output_addr_const (file, x); ++ fputs (")", file); ++} ++ ++ ++/**************************** ++ * Predicates ++ ****************************/ ++ ++/* An operand to a call or sibcall. This must be an immediate operand ++ or a register. */ ++int ++call_operand (rtx x, enum machine_mode mode) ++{ ++ return (immediate_operand (x, mode) ++ || register_operand (x, mode)); ++} ++ ++int ++arith_operand (rtx op, enum machine_mode mode) ++{ ++ if (GET_CODE (op) == CONST_INT && SMALL_INT (INTVAL (op))) ++ return 1; ++ ++ return register_operand (op, mode); ++} ++ ++int ++uns_arith_operand (rtx op, enum machine_mode mode) ++{ ++ if (GET_CODE (op) == CONST_INT && SMALL_INT_UNSIGNED (INTVAL (op))) ++ return 1; ++ ++ return register_operand (op, mode); ++} ++ ++int ++logical_operand (rtx op, enum machine_mode mode) ++{ ++ if (GET_CODE (op) == CONST_INT ++ && (SMALL_INT_UNSIGNED (INTVAL (op)) || UPPER16_INT (INTVAL (op)))) ++ return 1; ++ ++ return register_operand (op, mode); ++} ++ ++int ++shift_operand (rtx op, enum machine_mode mode) ++{ ++ if (GET_CODE (op) == CONST_INT && SHIFT_INT (INTVAL (op))) ++ return 1; ++ ++ return register_operand (op, mode); ++} ++ ++int ++rdwrctl_operand (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED) ++{ ++ return GET_CODE (op) == CONST_INT && RDWRCTL_INT (INTVAL (op)); ++} ++ ++/* Return truth value of whether OP is a register or the constant 0. */ ++ ++int ++reg_or_0_operand (rtx op, enum machine_mode mode) ++{ ++ switch (GET_CODE (op)) ++ { ++ case CONST_INT: ++ return INTVAL (op) == 0; ++ ++ case CONST_DOUBLE: ++ return op == CONST0_RTX (mode); ++ ++ default: ++ break; ++ } ++ ++ return register_operand (op, mode); ++} ++ ++ ++int ++equality_op (rtx op, enum machine_mode mode) ++{ ++ if (mode != GET_MODE (op)) ++ return 0; ++ ++ return GET_CODE (op) == EQ || GET_CODE (op) == NE; ++} ++ ++int ++custom_insn_opcode (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED) ++{ ++ return GET_CODE (op) == CONST_INT && CUSTOM_INSN_OPCODE (INTVAL (op)); ++} ++ ++ ++ ++ ++/***************************************************************************** ++** ++** custom fpu instruction output ++** ++*****************************************************************************/ ++ ++static const char *nios2_custom_fpu_insn_zdz (rtx, int, const char *); ++static const char *nios2_custom_fpu_insn_zsz (rtx, int, const char *); ++static const char *nios2_custom_fpu_insn_szz (rtx, int, const char *); ++static const char *nios2_custom_fpu_insn_sss (rtx, int, const char *); ++static const char *nios2_custom_fpu_insn_ssz (rtx, int, const char *); ++static const char *nios2_custom_fpu_insn_iss (rtx, int, const char *); ++static const char *nios2_custom_fpu_insn_ddd (rtx, int, const char *); ++static const char *nios2_custom_fpu_insn_ddz (rtx, int, const char *); ++static const char *nios2_custom_fpu_insn_idd (rtx, int, const char *); ++static const char *nios2_custom_fpu_insn_siz (rtx, int, const char *); ++static const char *nios2_custom_fpu_insn_suz (rtx, int, const char *); ++static const char *nios2_custom_fpu_insn_diz (rtx, int, const char *); ++static const char *nios2_custom_fpu_insn_duz (rtx, int, const char *); ++static const char *nios2_custom_fpu_insn_isz (rtx, int, const char *); ++static const char *nios2_custom_fpu_insn_usz (rtx, int, const char *); ++static const char *nios2_custom_fpu_insn_idz (rtx, int, const char *); ++static const char *nios2_custom_fpu_insn_udz (rtx, int, const char *); ++static const char *nios2_custom_fpu_insn_dsz (rtx, int, const char *); ++static const char *nios2_custom_fpu_insn_sdz (rtx, int, const char *); ++ ++static const char * ++nios2_custom_fpu_insn_zdz (rtx insn, int N, const char *opt) ++{ ++ static char buf[1024]; ++ ++ if (N < 0) ++ fatal_insn ("attempt to use disabled fpu instruction", insn); ++ if (snprintf (buf, sizeof (buf), ++ "custom\t%d, zero, %%0, %%D0 # %s %%0", ++ N, opt) >= (int)sizeof (buf)) ++ fatal_insn ("buffer overflow", insn); ++ return buf; ++} ++ ++static const char * ++nios2_custom_fpu_insn_zsz (rtx insn, int N, const char *opt) ++{ ++ static char buf[1024]; ++ ++ if (N < 0) ++ fatal_insn ("attempt to use disabled fpu instruction", insn); ++ if (snprintf (buf, sizeof (buf), ++ "custom\t%d, zero, %%0, zero # %s %%0", ++ N, opt) >= (int)sizeof (buf)) ++ fatal_insn ("buffer overflow", insn); ++ return buf; ++} ++ ++static const char * ++nios2_custom_fpu_insn_szz (rtx insn, int N, const char *opt) ++{ ++ static char buf[1024]; ++ ++ if (N < 0) ++ fatal_insn ("attempt to use disabled fpu instruction", insn); ++ if (snprintf (buf, sizeof (buf), ++ "custom\t%d, %%0, zero, zero # %s %%0", ++ N, opt) >= (int)sizeof (buf)) ++ fatal_insn ("buffer overflow", insn); ++ return buf; ++} ++ ++static const char * ++nios2_custom_fpu_insn_sss (rtx insn, int N, const char *opt) ++{ ++ static char buf[1024]; ++ ++ if (N < 0) ++ fatal_insn ("attempt to use disabled fpu instruction", insn); ++ if (snprintf (buf, sizeof (buf), ++ "custom\t%d, %%0, %%1, %%2 # %s %%0, %%1, %%2", ++ N, opt) >= (int)sizeof (buf)) ++ fatal_insn ("buffer overflow", insn); ++ return buf; ++} ++ ++static const char * ++nios2_custom_fpu_insn_ssz (rtx insn, int N, const char *opt) ++{ ++ static char buf[1024]; ++ ++ if (N < 0) ++ fatal_insn ("attempt to use disabled fpu instruction", insn); ++ if (snprintf (buf, sizeof (buf), ++ "custom\t%d, %%0, %%1, zero # %s %%0, %%1", ++ N, opt) >= (int)sizeof (buf)) ++ fatal_insn ("buffer overflow", insn); ++ return buf; ++} ++ ++static const char * ++nios2_custom_fpu_insn_iss (rtx insn, int N, const char *opt) ++{ ++ return nios2_custom_fpu_insn_sss (insn, N, opt); ++} ++ ++static const char * ++nios2_custom_fpu_insn_ddd (rtx insn, int N, const char *opt) ++{ ++ static char buf[1024]; ++ ++ if (N < 0 ++ || nios2_fpu_insns[nios2_fpu_nios2_frdy].N < 0 ++ || nios2_fpu_insns[nios2_fpu_nios2_fwrx].N < 0) ++ fatal_insn ("attempt to use disabled fpu instruction", insn); ++ if (snprintf (buf, sizeof (buf), ++ "custom\t%d, zero, %%1, %%D1 # fwrx %%1\n\t" ++ "custom\t%d, %%D0, %%2, %%D2 # %s %%0, %%1, %%2\n\t" ++ "custom\t%d, %%0, zero, zero # frdy %%0", ++ nios2_fpu_insns[nios2_fpu_nios2_fwrx].N, ++ N, opt, ++ nios2_fpu_insns[nios2_fpu_nios2_frdy].N) >= (int)sizeof (buf)) ++ fatal_insn ("buffer overflow", insn); ++ return buf; ++} ++ ++static const char * ++nios2_custom_fpu_insn_ddz (rtx insn, int N, const char *opt) ++{ ++ static char buf[1024]; ++ ++ if (N < 0 || nios2_fpu_insns[nios2_fpu_nios2_frdy].N < 0) ++ fatal_insn ("attempt to use disabled fpu instruction", insn); ++ if (snprintf (buf, sizeof (buf), ++ "custom\t%d, %%D0, %%1, %%D1 # %s %%0, %%1\n\t" ++ "custom\t%d, %%0, zero, zero # frdy %%0", ++ N, opt, ++ nios2_fpu_insns[nios2_fpu_nios2_frdy].N) >= (int)sizeof (buf)) ++ fatal_insn ("buffer overflow", insn); ++ return buf; ++} ++ ++static const char * ++nios2_custom_fpu_insn_idd (rtx insn, int N, const char *opt) ++{ ++ static char buf[1024]; ++ ++ if (N < 0 || nios2_fpu_insns[nios2_fpu_nios2_fwrx].N < 0) ++ fatal_insn ("attempt to use disabled fpu instruction", insn); ++ if (snprintf (buf, sizeof (buf), ++ "custom\t%d, zero, %%1, %%D1 # fwrx %%1\n\t" ++ "custom\t%d, %%0, %%2, %%D2 # %s %%0, %%1, %%2", ++ nios2_fpu_insns[nios2_fpu_nios2_fwrx].N, ++ N, opt) >= (int)sizeof (buf)) ++ fatal_insn ("buffer overflow", insn); ++ return buf; ++} ++ ++static const char * ++nios2_custom_fpu_insn_siz (rtx insn, int N, const char *opt) ++{ ++ return nios2_custom_fpu_insn_ssz (insn, N, opt); ++} ++ ++static const char * ++nios2_custom_fpu_insn_suz (rtx insn, int N, const char *opt) ++{ ++ return nios2_custom_fpu_insn_ssz (insn, N, opt); ++} ++ ++static const char * ++nios2_custom_fpu_insn_diz (rtx insn, int N, const char *opt) ++{ ++ return nios2_custom_fpu_insn_dsz (insn, N, opt); ++} ++ ++static const char * ++nios2_custom_fpu_insn_duz (rtx insn, int N, const char *opt) ++{ ++ return nios2_custom_fpu_insn_dsz (insn, N, opt); ++} ++ ++static const char * ++nios2_custom_fpu_insn_isz (rtx insn, int N, const char *opt) ++{ ++ return nios2_custom_fpu_insn_ssz (insn, N, opt); ++} ++ ++static const char * ++nios2_custom_fpu_insn_usz (rtx insn, int N, const char *opt) ++{ ++ return nios2_custom_fpu_insn_ssz (insn, N, opt); ++} ++ ++static const char * ++nios2_custom_fpu_insn_idz (rtx insn, int N, const char *opt) ++{ ++ return nios2_custom_fpu_insn_sdz (insn, N, opt); ++} ++ ++static const char * ++nios2_custom_fpu_insn_udz (rtx insn, int N, const char *opt) ++{ ++ return nios2_custom_fpu_insn_sdz (insn, N, opt); ++} ++ ++static const char * ++nios2_custom_fpu_insn_dsz (rtx insn, int N, const char *opt) ++{ ++ static char buf[1024]; ++ ++ if (N < 0 || nios2_fpu_insns[nios2_fpu_nios2_frdy].N < 0) ++ fatal_insn ("attempt to use disabled fpu instruction", insn); ++ if (snprintf (buf, sizeof (buf), ++ "custom\t%d, %%D0, %%1, zero # %s %%0, %%1\n\t" ++ "custom\t%d, %%0, zero, zero # frdy %%0", ++ N, opt, ++ nios2_fpu_insns[nios2_fpu_nios2_frdy].N) >= (int)sizeof (buf)) ++ fatal_insn ("buffer overflow", insn); ++ return buf; ++} ++ ++static const char * ++nios2_custom_fpu_insn_sdz (rtx insn, int N, const char *opt) ++{ ++ static char buf[1024]; ++ ++ if (N < 0) ++ fatal_insn ("attempt to use disabled fpu instruction", insn); ++ if (snprintf (buf, sizeof (buf), ++ "custom\t%d, %%0, %%1, %%D1 # %s %%0, %%1", ++ N, opt) >= (int)sizeof (buf)) ++ fatal_insn ("buffer overflow", insn); ++ return buf; ++} ++ ++#undef NIOS2_FPU_INSN ++#define NIOS2_FPU_INSN(opt, insn, args) \ ++static const char * \ ++NIOS2_CONCAT (nios2_output_fpu_insn_, insn) (rtx i) \ ++{ \ ++ return NIOS2_CONCAT (nios2_custom_fpu_insn_, args) \ ++ (i, \ ++ nios2_fpu_insns[NIOS2_CONCAT (nios2_fpu_, insn)].N, \ ++ nios2_fpu_insns[NIOS2_CONCAT (nios2_fpu_, insn)].option); \ ++} ++NIOS2_FOR_ALL_FPU_INSNS ++ ++ ++ ++const char * ++nios2_output_fpu_insn_cmps (rtx insn, enum rtx_code cond) ++{ ++ static char buf[1024]; ++ int N; ++ const char *opt; ++ ++ int operandL = 2; ++ int operandR = 3; ++ ++ if (!have_nios2_fpu_cmp_insn(cond, CMP_SF) && ++ have_nios2_fpu_cmp_insn(get_reverse_cond(cond), CMP_SF) ) { ++ ++ int temp = operandL; ++ operandL = operandR; ++ operandR = temp; ++ ++ cond = get_reverse_cond(cond); ++ } ++ ++ switch (cond) ++ { ++ case EQ: ++ N = nios2_fpu_insns[nios2_fpu_nios2_seqsf].N; ++ opt = "fcmpeqs"; ++ break; ++ case NE: ++ N = nios2_fpu_insns[nios2_fpu_nios2_snesf].N; ++ opt = "fcmpnes"; ++ break; ++ case GT: ++ N = nios2_fpu_insns[nios2_fpu_nios2_sgtsf].N; ++ opt = "fcmpgts"; ++ break; ++ case GE: ++ N = nios2_fpu_insns[nios2_fpu_nios2_sgesf].N; ++ opt = "fcmpges"; ++ break; ++ case LT: ++ N = nios2_fpu_insns[nios2_fpu_nios2_sltsf].N; ++ opt = "fcmplts"; ++ break; ++ case LE: ++ N = nios2_fpu_insns[nios2_fpu_nios2_slesf].N; ++ opt = "fcmples"; break; ++ default: ++ fatal_insn ("bad single compare", insn); ++ } ++ ++ if (N < 0) ++ fatal_insn ("attempt to use disabled fpu instruction", insn); ++ ++ /* ??? This raises the whole vexing issue of how to handle ++ out-of-range branches. Punt for now, seeing as how nios2-elf-as ++ doesn't even _try_ to handle out-of-range branches yet! */ ++ if (snprintf (buf, sizeof (buf), ++ ".set\tnoat\n\t" ++ "custom\t%d, at, %%%d, %%%d # %s at, %%%d, %%%d\n\t" ++ "bne\tat, zero, %%l1\n\t" ++ ".set\tat", ++ N, operandL, operandR, opt, operandL, operandR ++ ) >= (int)sizeof (buf)) ++ fatal_insn ("buffer overflow", insn); ++ return buf; ++} ++ ++const char * ++nios2_output_fpu_insn_cmpd (rtx insn, enum rtx_code cond) ++{ ++ static char buf[1024]; ++ int N; ++ const char *opt; ++ ++ int operandL = 2; ++ int operandR = 3; ++ ++ if ( !have_nios2_fpu_cmp_insn(cond, CMP_DF) && ++ have_nios2_fpu_cmp_insn(get_reverse_cond(cond), CMP_DF) ) ++ { ++ ++ int temp = operandL; ++ operandL = operandR; ++ operandR = temp; ++ ++ cond = get_reverse_cond(cond); ++ } ++ ++ switch (cond) ++ { ++ case EQ: ++ N = nios2_fpu_insns[nios2_fpu_nios2_seqdf].N; ++ opt = "fcmpeqd"; ++ break; ++ case NE: ++ N = nios2_fpu_insns[nios2_fpu_nios2_snedf].N; ++ opt = "fcmpned"; ++ break; ++ case GT: ++ N = nios2_fpu_insns[nios2_fpu_nios2_sgtdf].N; ++ opt = "fcmpgtd"; ++ break; ++ case GE: ++ N = nios2_fpu_insns[nios2_fpu_nios2_sgedf].N; ++ opt = "fcmpged"; ++ break; ++ case LT: ++ N = nios2_fpu_insns[nios2_fpu_nios2_sltdf].N; ++ opt = "fcmpltd"; ++ break; ++ case LE: ++ N = nios2_fpu_insns[nios2_fpu_nios2_sledf].N; ++ opt = "fcmpled"; ++ break; ++ default: ++ fatal_insn ("bad double compare", insn); ++ } ++ ++ if (N < 0 || nios2_fpu_insns[nios2_fpu_nios2_fwrx].N < 0) ++ fatal_insn ("attempt to use disabled fpu instruction", insn); ++ if (snprintf (buf, sizeof (buf), ++ ".set\tnoat\n\t" ++ "custom\t%d, zero, %%%d, %%D%d # fwrx %%%d\n\t" ++ "custom\t%d, at, %%%d, %%D%d # %s at, %%%d, %%%d\n\t" ++ "bne\tat, zero, %%l1\n\t" ++ ".set\tat", ++ nios2_fpu_insns[nios2_fpu_nios2_fwrx].N, operandL, operandL, ++ operandL, N, operandR, operandR, opt, operandL, operandR ++ ) >= (int)sizeof (buf)) ++ fatal_insn ("buffer overflow", insn); ++ return buf; ++} ++ ++ ++ ++ ++/***************************************************************************** ++** ++** Instruction scheduler ++** ++*****************************************************************************/ ++static int ++nios2_issue_rate (void) ++{ ++#ifdef MAX_DFA_ISSUE_RATE ++ return MAX_DFA_ISSUE_RATE; ++#else ++ return 1; ++#endif ++} ++ ++ ++const char * ++asm_output_opcode (FILE *file ATTRIBUTE_UNUSED, ++ const char *ptr ATTRIBUTE_UNUSED) ++{ ++ const char *p; ++ ++ p = ptr; ++ return ptr; ++} ++ ++ ++ ++/***************************************************************************** ++** ++** Function arguments ++** ++*****************************************************************************/ ++ ++void ++init_cumulative_args (CUMULATIVE_ARGS *cum, ++ tree fntype ATTRIBUTE_UNUSED, ++ rtx libname ATTRIBUTE_UNUSED, ++ tree fndecl ATTRIBUTE_UNUSED, ++ int n_named_args ATTRIBUTE_UNUSED) ++{ ++ cum->regs_used = 0; ++} ++ ++ ++/* Define where to put the arguments to a function. Value is zero to ++ push the argument on the stack, or a hard register in which to ++ store the argument. ++ ++ MODE is the argument's machine mode. ++ TYPE is the data type of the argument (as a tree). ++ This is null for libcalls where that information may ++ not be available. ++ CUM is a variable of type CUMULATIVE_ARGS which gives info about ++ the preceding args and about the function being called. ++ NAMED is nonzero if this argument is a named parameter ++ (otherwise it is an extra parameter matching an ellipsis). */ ++rtx ++function_arg (const CUMULATIVE_ARGS *cum, enum machine_mode mode, ++ tree type ATTRIBUTE_UNUSED, int named ATTRIBUTE_UNUSED) ++{ ++ rtx return_rtx = NULL_RTX; ++ ++ if (cum->regs_used < NUM_ARG_REGS) ++ return_rtx = gen_rtx_REG (mode, FIRST_ARG_REGNO + cum->regs_used); ++ ++ return return_rtx; ++} ++ ++/* Return number of bytes, at the beginning of the argument, that must be ++ put in registers. 0 is the argument is entirely in registers or entirely ++ in memory. */ ++ ++static int ++nios2_arg_partial_bytes (CUMULATIVE_ARGS *cum, ++ enum machine_mode mode, tree type, ++ bool named ATTRIBUTE_UNUSED) ++{ ++ HOST_WIDE_INT param_size; ++ ++ if (mode == BLKmode) ++ { ++ param_size = int_size_in_bytes (type); ++ if (param_size < 0) ++ internal_error ++ ("Do not know how to handle large structs or variable length types"); ++ } ++ else ++ param_size = GET_MODE_SIZE (mode); ++ ++ /* Convert to words (round up). */ ++ param_size = (3 + param_size) / 4; ++ ++ if (cum->regs_used < NUM_ARG_REGS ++ && cum->regs_used + param_size > NUM_ARG_REGS) ++ return (NUM_ARG_REGS - cum->regs_used) * UNITS_PER_WORD; ++ else ++ return 0; ++} ++ ++static bool ++nios2_pass_by_reference (CUMULATIVE_ARGS *cum ATTRIBUTE_UNUSED, ++ enum machine_mode mode ATTRIBUTE_UNUSED, ++ tree type ATTRIBUTE_UNUSED, ++ bool named ATTRIBUTE_UNUSED) ++{ ++ return false; ++} ++ ++ ++/* Update the data in CUM to advance over an argument ++ of mode MODE and data type TYPE. ++ (TYPE is null for libcalls where that information may not be available.) */ ++ ++void ++function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode, ++ tree type ATTRIBUTE_UNUSED, int named ATTRIBUTE_UNUSED) ++{ ++ HOST_WIDE_INT param_size; ++ ++ if (mode == BLKmode) ++ { ++ param_size = int_size_in_bytes (type); ++ if (param_size < 0) ++ internal_error ++ ("Do not know how to handle large structs or variable length types"); ++ } ++ else ++ param_size = GET_MODE_SIZE (mode); ++ ++ /* Convert to words (round up). */ ++ param_size = (3 + param_size) / 4; ++ ++ if (cum->regs_used + param_size > NUM_ARG_REGS) ++ cum->regs_used = NUM_ARG_REGS; ++ else ++ cum->regs_used += param_size; ++ ++ return; ++} ++ ++int ++nios2_function_arg_padding_upward (enum machine_mode mode, tree type) ++{ ++ /* On little-endian targets, the first byte of every stack argument ++ is passed in the first byte of the stack slot. */ ++ if (!BYTES_BIG_ENDIAN) ++ return 1; ++ ++ /* Otherwise, integral types are padded downward: the last byte of a ++ stack argument is passed in the last byte of the stack slot. */ ++ if (type != 0 ++ ? INTEGRAL_TYPE_P (type) || POINTER_TYPE_P (type) ++ : GET_MODE_CLASS (mode) == MODE_INT) ++ return 0; ++ ++ /* Arguments smaller than a stack slot are padded downward. */ ++ if (mode != BLKmode) ++ return (GET_MODE_BITSIZE (mode) >= PARM_BOUNDARY) ? 1 : 0; ++ else ++ return ((int_size_in_bytes (type) >= (PARM_BOUNDARY / BITS_PER_UNIT)) ++ ? 1 : 0); ++} ++ ++int ++nios2_block_reg_padding_upward (enum machine_mode mode, tree type, ++ int first ATTRIBUTE_UNUSED) ++{ ++ /* ??? Do we need to treat floating point specially, ala MIPS? */ ++ return nios2_function_arg_padding_upward (mode, type); ++} ++ ++int ++nios2_return_in_memory (tree type) ++{ ++ int res = ((int_size_in_bytes (type) > (2 * UNITS_PER_WORD)) ++ || (int_size_in_bytes (type) == -1)); ++ ++ return res; ++} ++ ++/* ??? It may be possible to eliminate the copyback and implement ++ my own va_arg type, but that is more work for now. */ ++void ++nios2_setup_incoming_varargs (CUMULATIVE_ARGS *cum, ++ enum machine_mode mode, tree type, ++ int *pretend_size, int second_time) ++{ ++ CUMULATIVE_ARGS local_cum; ++ int regs_to_push; ++ int pret_size; ++ ++ local_cum = *cum; ++ FUNCTION_ARG_ADVANCE (local_cum, mode, type, 1); ++ ++ regs_to_push = NUM_ARG_REGS - local_cum.regs_used; ++ ++ if (!second_time) ++ { ++ if (regs_to_push > 0) ++ { ++ rtx ptr, mem; ++ ++ ptr = virtual_incoming_args_rtx; ++ mem = gen_rtx_MEM (BLKmode, ptr); ++ ++ /* va_arg is an array access in this case, which causes ++ it to get MEM_IN_STRUCT_P set. We must set it here ++ so that the insn scheduler won't assume that these ++ stores can't possibly overlap with the va_arg loads. */ ++ MEM_SET_IN_STRUCT_P (mem, 1); ++ ++ emit_insn (gen_blockage ()); ++ move_block_from_reg (local_cum.regs_used + FIRST_ARG_REGNO, mem, ++ regs_to_push); ++ emit_insn (gen_blockage ()); ++ } ++ } ++ ++ pret_size = regs_to_push * UNITS_PER_WORD; ++ ++ if (pret_size) ++ *pretend_size = pret_size; ++} ++ ++ ++ ++/***************************************************************************** ++** ++** builtins ++** ++** This method for handling builtins is from CSP where _many_ more types of ++** expanders have already been written. Check there first before writing ++** new ones. ++** ++*****************************************************************************/ ++ ++enum nios2_builtins ++{ ++ NIOS2_BUILTIN_LDBIO, ++ NIOS2_BUILTIN_LDBUIO, ++ NIOS2_BUILTIN_LDHIO, ++ NIOS2_BUILTIN_LDHUIO, ++ NIOS2_BUILTIN_LDWIO, ++ NIOS2_BUILTIN_STBIO, ++ NIOS2_BUILTIN_STHIO, ++ NIOS2_BUILTIN_STWIO, ++ NIOS2_BUILTIN_SYNC, ++ NIOS2_BUILTIN_RDCTL, ++ NIOS2_BUILTIN_WRCTL, ++ ++#undef NIOS2_DO_BUILTIN ++#define NIOS2_DO_BUILTIN(upper, lower, handler) \ ++ NIOS2_CONCAT (NIOS2_BUILTIN_CUSTOM_, upper), ++NIOS2_FOR_ALL_CUSTOM_BUILTINS ++ ++ NIOS2_FIRST_FPU_INSN, ++ ++#undef NIOS2_FPU_INSN ++#define NIOS2_FPU_INSN(opt, insn, args) \ ++ NIOS2_CONCAT (NIOS2_BUILTIN_FPU_, opt), ++NIOS2_FOR_ALL_FPU_INSNS ++ ++ NIOS2_LAST_FPU_INSN, ++ ++ LIM_NIOS2_BUILTINS ++}; ++ ++struct builtin_description ++{ ++ const enum insn_code icode; ++ const char *const name; ++ const enum nios2_builtins code; ++ const tree *type; ++ rtx (* expander) (const struct builtin_description *, ++ tree, rtx, rtx, enum machine_mode, int); ++}; ++ ++static rtx nios2_expand_STXIO (const struct builtin_description *, ++ tree, rtx, rtx, enum machine_mode, int); ++static rtx nios2_expand_LDXIO (const struct builtin_description *, ++ tree, rtx, rtx, enum machine_mode, int); ++static rtx nios2_expand_sync (const struct builtin_description *, ++ tree, rtx, rtx, enum machine_mode, int); ++static rtx nios2_expand_rdctl (const struct builtin_description *, ++ tree, rtx, rtx, enum machine_mode, int); ++static rtx nios2_expand_wrctl (const struct builtin_description *, ++ tree, rtx, rtx, enum machine_mode, int); ++ ++static rtx nios2_expand_custom_n (const struct builtin_description *, ++ tree, rtx, rtx, enum machine_mode, int); ++static rtx nios2_expand_custom_Xn (const struct builtin_description *, ++ tree, rtx, rtx, enum machine_mode, int); ++static rtx nios2_expand_custom_nX (const struct builtin_description *, ++ tree, rtx, rtx, enum machine_mode, int); ++static rtx nios2_expand_custom_XnX (const struct builtin_description *, ++ tree, rtx, rtx, enum machine_mode, int); ++static rtx nios2_expand_custom_nXX (const struct builtin_description *, ++ tree, rtx, rtx, enum machine_mode, int); ++static rtx nios2_expand_custom_XnXX (const struct builtin_description *, ++ tree, rtx, rtx, enum machine_mode, int); ++ ++static rtx nios2_expand_custom_zdz (const struct builtin_description *, ++ tree, rtx, rtx, enum machine_mode, int); ++static rtx nios2_expand_custom_zsz (const struct builtin_description *, ++ tree, rtx, rtx, enum machine_mode, int); ++static rtx nios2_expand_custom_szz (const struct builtin_description *, ++ tree, rtx, rtx, enum machine_mode, int); ++static rtx nios2_expand_custom_sss (const struct builtin_description *, ++ tree, rtx, rtx, enum machine_mode, int); ++static rtx nios2_expand_custom_ssz (const struct builtin_description *, ++ tree, rtx, rtx, enum machine_mode, int); ++static rtx nios2_expand_custom_iss (const struct builtin_description *, ++ tree, rtx, rtx, enum machine_mode, int); ++static rtx nios2_expand_custom_ddd (const struct builtin_description *, ++ tree, rtx, rtx, enum machine_mode, int); ++static rtx nios2_expand_custom_ddz (const struct builtin_description *, ++ tree, rtx, rtx, enum machine_mode, int); ++static rtx nios2_expand_custom_idd (const struct builtin_description *, ++ tree, rtx, rtx, enum machine_mode, int); ++static rtx nios2_expand_custom_siz (const struct builtin_description *, ++ tree, rtx, rtx, enum machine_mode, int); ++static rtx nios2_expand_custom_suz (const struct builtin_description *, ++ tree, rtx, rtx, enum machine_mode, int); ++static rtx nios2_expand_custom_diz (const struct builtin_description *, ++ tree, rtx, rtx, enum machine_mode, int); ++static rtx nios2_expand_custom_duz (const struct builtin_description *, ++ tree, rtx, rtx, enum machine_mode, int); ++static rtx nios2_expand_custom_isz (const struct builtin_description *, ++ tree, rtx, rtx, enum machine_mode, int); ++static rtx nios2_expand_custom_usz (const struct builtin_description *, ++ tree, rtx, rtx, enum machine_mode, int); ++static rtx nios2_expand_custom_idz (const struct builtin_description *, ++ tree, rtx, rtx, enum machine_mode, int); ++static rtx nios2_expand_custom_udz (const struct builtin_description *, ++ tree, rtx, rtx, enum machine_mode, int); ++static rtx nios2_expand_custom_dsz (const struct builtin_description *, ++ tree, rtx, rtx, enum machine_mode, int); ++static rtx nios2_expand_custom_sdz (const struct builtin_description *, ++ tree, rtx, rtx, enum machine_mode, int); ++ ++static tree endlink; ++ ++/* int fn (volatile const void *) ++ */ ++static tree int_ftype_volatile_const_void_p; ++ ++/* int fn (int) ++ */ ++static tree int_ftype_int; ++ ++/* void fn (int, int) ++ */ ++static tree void_ftype_int_int; ++ ++/* void fn (volatile void *, int) ++ */ ++static tree void_ftype_volatile_void_p_int; ++ ++/* void fn (void) ++ */ ++static tree void_ftype_void; ++ ++#undef NIOS2_DO_BUILTIN ++#define NIOS2_DO_BUILTIN(upper, lower, handler) \ ++ static tree NIOS2_CONCAT (custom_, lower); ++NIOS2_FOR_ALL_CUSTOM_BUILTINS ++ ++static tree custom_zdz; ++static tree custom_zsz; ++static tree custom_szz; ++static tree custom_sss; ++static tree custom_ssz; ++static tree custom_iss; ++static tree custom_ddd; ++static tree custom_ddz; ++static tree custom_idd; ++static tree custom_siz; ++static tree custom_suz; ++static tree custom_diz; ++static tree custom_duz; ++static tree custom_isz; ++static tree custom_usz; ++static tree custom_idz; ++static tree custom_udz; ++static tree custom_dsz; ++static tree custom_sdz; ++ ++static const struct builtin_description bdesc[] = { ++ {CODE_FOR_ldbio, "__builtin_ldbio", NIOS2_BUILTIN_LDBIO, ++ &int_ftype_volatile_const_void_p, nios2_expand_LDXIO}, ++ {CODE_FOR_ldbuio, "__builtin_ldbuio", NIOS2_BUILTIN_LDBUIO, ++ &int_ftype_volatile_const_void_p, nios2_expand_LDXIO}, ++ {CODE_FOR_ldhio, "__builtin_ldhio", NIOS2_BUILTIN_LDHIO, ++ &int_ftype_volatile_const_void_p, nios2_expand_LDXIO}, ++ {CODE_FOR_ldhuio, "__builtin_ldhuio", NIOS2_BUILTIN_LDHUIO, ++ &int_ftype_volatile_const_void_p, nios2_expand_LDXIO}, ++ {CODE_FOR_ldwio, "__builtin_ldwio", NIOS2_BUILTIN_LDWIO, ++ &int_ftype_volatile_const_void_p, nios2_expand_LDXIO}, ++ ++ {CODE_FOR_stbio, "__builtin_stbio", NIOS2_BUILTIN_STBIO, ++ &void_ftype_volatile_void_p_int, nios2_expand_STXIO}, ++ {CODE_FOR_sthio, "__builtin_sthio", NIOS2_BUILTIN_STHIO, ++ &void_ftype_volatile_void_p_int, nios2_expand_STXIO}, ++ {CODE_FOR_stwio, "__builtin_stwio", NIOS2_BUILTIN_STWIO, ++ &void_ftype_volatile_void_p_int, nios2_expand_STXIO}, ++ ++ {CODE_FOR_sync, "__builtin_sync", NIOS2_BUILTIN_SYNC, ++ &void_ftype_void, nios2_expand_sync}, ++ {CODE_FOR_rdctl, "__builtin_rdctl", NIOS2_BUILTIN_RDCTL, ++ &int_ftype_int, nios2_expand_rdctl}, ++ {CODE_FOR_wrctl, "__builtin_wrctl", NIOS2_BUILTIN_WRCTL, ++ &void_ftype_int_int, nios2_expand_wrctl}, ++ ++#undef NIOS2_DO_BUILTIN ++#define NIOS2_DO_BUILTIN(upper, lower, handler) \ ++ {NIOS2_CONCAT (CODE_FOR_custom_, lower), \ ++ "__builtin_custom_" NIOS2_STRINGIFY (lower), \ ++ NIOS2_CONCAT (NIOS2_BUILTIN_CUSTOM_, upper), \ ++ &NIOS2_CONCAT (custom_, lower), \ ++ NIOS2_CONCAT (nios2_expand_custom_, handler)}, ++NIOS2_FOR_ALL_CUSTOM_BUILTINS ++ ++#undef NIOS2_FPU_INSN ++#define NIOS2_FPU_INSN(opt, insn, args) \ ++ {NIOS2_CONCAT (CODE_FOR_, insn), \ ++ "__builtin_custom_" NIOS2_STRINGIFY (opt), \ ++ NIOS2_CONCAT (NIOS2_BUILTIN_FPU_, opt), \ ++ &NIOS2_CONCAT (custom_, args), \ ++ NIOS2_CONCAT (nios2_expand_custom_, args)}, ++NIOS2_FOR_ALL_FPU_INSNS ++ ++ {0, 0, 0, 0, 0}, ++}; ++ ++static void ++nios2_init_builtins (void) ++{ ++ const struct builtin_description *d; ++ ++ ++ endlink = void_list_node; ++ ++ /* int fn (volatile const void *) ++ */ ++ int_ftype_volatile_const_void_p = build_function_type ( ++ integer_type_node, ++ tree_cons (NULL_TREE, ++ build_qualified_type (ptr_type_node, ++ TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE), ++ endlink)); ++ ++ /* void fn (volatile void *, int) ++ */ ++ void_ftype_volatile_void_p_int = build_function_type ( ++ void_type_node, ++ tree_cons (NULL_TREE, ++ build_qualified_type (ptr_type_node, TYPE_QUAL_VOLATILE), ++ tree_cons (NULL_TREE, integer_type_node, endlink))); ++ ++ /* void fn (void) ++ */ ++ void_ftype_void ++ = build_function_type (void_type_node, ++ endlink); ++ ++ /* int fn (int) ++ */ ++ int_ftype_int ++ = build_function_type (integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ endlink)); ++ ++ /* void fn (int, int) ++ */ ++ void_ftype_int_int ++ = build_function_type (void_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ endlink))); ++ ++ custom_n ++ = build_function_type (void_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ endlink)); ++ custom_ni ++ = build_function_type (void_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ endlink))); ++ custom_nf ++ = build_function_type (void_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ endlink))); ++ custom_np ++ = build_function_type (void_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ endlink))); ++ custom_nii ++ = build_function_type (void_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ endlink)))); ++ custom_nif ++ = build_function_type (void_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ endlink)))); ++ custom_nip ++ = build_function_type (void_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ endlink)))); ++ custom_nfi ++ = build_function_type (void_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ endlink)))); ++ custom_nff ++ = build_function_type (void_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ endlink)))); ++ custom_nfp ++ = build_function_type (void_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ endlink)))); ++ custom_npi ++ = build_function_type (void_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ endlink)))); ++ custom_npf ++ = build_function_type (void_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ endlink)))); ++ custom_npp ++ = build_function_type (void_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ endlink)))); ++ ++ custom_in ++ = build_function_type (integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ endlink)); ++ custom_ini ++ = build_function_type (integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ endlink))); ++ custom_inf ++ = build_function_type (integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ endlink))); ++ custom_inp ++ = build_function_type (integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ endlink))); ++ custom_inii ++ = build_function_type (integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ endlink)))); ++ custom_inif ++ = build_function_type (integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ endlink)))); ++ custom_inip ++ = build_function_type (integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ endlink)))); ++ custom_infi ++ = build_function_type (integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ endlink)))); ++ custom_inff ++ = build_function_type (integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ endlink)))); ++ custom_infp ++ = build_function_type (integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ endlink)))); ++ custom_inpi ++ = build_function_type (integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ endlink)))); ++ custom_inpf ++ = build_function_type (integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ endlink)))); ++ custom_inpp ++ = build_function_type (integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ endlink)))); ++ ++ custom_fn ++ = build_function_type (float_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ endlink)); ++ custom_fni ++ = build_function_type (float_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ endlink))); ++ custom_fnf ++ = build_function_type (float_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ endlink))); ++ custom_fnp ++ = build_function_type (float_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ endlink))); ++ custom_fnii ++ = build_function_type (float_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ endlink)))); ++ custom_fnif ++ = build_function_type (float_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ endlink)))); ++ custom_fnip ++ = build_function_type (float_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ endlink)))); ++ custom_fnfi ++ = build_function_type (float_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ endlink)))); ++ custom_fnff ++ = build_function_type (float_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ endlink)))); ++ custom_fnfp ++ = build_function_type (float_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ endlink)))); ++ custom_fnpi ++ = build_function_type (float_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ endlink)))); ++ custom_fnpf ++ = build_function_type (float_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ endlink)))); ++ custom_fnpp ++ = build_function_type (float_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ endlink)))); ++ ++ ++ custom_pn ++ = build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ endlink)); ++ custom_pni ++ = build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ endlink))); ++ custom_pnf ++ = build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ endlink))); ++ custom_pnp ++ = build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ endlink))); ++ custom_pnii ++ = build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ endlink)))); ++ custom_pnif ++ = build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ endlink)))); ++ custom_pnip ++ = build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ endlink)))); ++ custom_pnfi ++ = build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ endlink)))); ++ custom_pnff ++ = build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ endlink)))); ++ custom_pnfp ++ = build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ endlink)))); ++ custom_pnpi ++ = build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ endlink)))); ++ custom_pnpf ++ = build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ endlink)))); ++ custom_pnpp ++ = build_function_type (ptr_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ tree_cons (NULL_TREE, ptr_type_node, ++ endlink)))); ++ ++ custom_zdz ++ = build_function_type (void_type_node, ++ tree_cons (NULL_TREE, double_type_node, ++ endlink)); ++ ++ custom_zsz ++ = build_function_type (void_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ endlink)); ++ ++ custom_szz ++ = build_function_type (float_type_node, ++ tree_cons (NULL_TREE, void_type_node, ++ endlink)); ++ ++ custom_sss ++ = build_function_type (float_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ endlink))); ++ ++ custom_ssz ++ = build_function_type (float_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ endlink)); ++ ++ custom_iss ++ = build_function_type (integer_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ endlink))); ++ ++ custom_ddd ++ = build_function_type (double_type_node, ++ tree_cons (NULL_TREE, double_type_node, ++ tree_cons (NULL_TREE, double_type_node, ++ endlink))); ++ ++ custom_ddz ++ = build_function_type (double_type_node, ++ tree_cons (NULL_TREE, double_type_node, ++ endlink)); ++ ++ custom_idd ++ = build_function_type (integer_type_node, ++ tree_cons (NULL_TREE, double_type_node, ++ tree_cons (NULL_TREE, double_type_node, ++ endlink))); ++ ++ custom_siz ++ = build_function_type (float_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ endlink)); ++ ++ custom_suz ++ = build_function_type (float_type_node, ++ tree_cons (NULL_TREE, unsigned_type_node, ++ endlink)); ++ ++ custom_diz ++ = build_function_type (double_type_node, ++ tree_cons (NULL_TREE, integer_type_node, ++ endlink)); ++ ++ custom_duz ++ = build_function_type (double_type_node, ++ tree_cons (NULL_TREE, unsigned_type_node, ++ endlink)); ++ ++ custom_isz ++ = build_function_type (integer_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ endlink)); ++ ++ custom_usz ++ = build_function_type (unsigned_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ endlink)); ++ ++ custom_idz ++ = build_function_type (integer_type_node, ++ tree_cons (NULL_TREE, double_type_node, ++ endlink)); ++ ++ custom_udz ++ = build_function_type (unsigned_type_node, ++ tree_cons (NULL_TREE, double_type_node, ++ endlink)); ++ ++ custom_dsz ++ = build_function_type (double_type_node, ++ tree_cons (NULL_TREE, float_type_node, ++ endlink)); ++ ++ custom_sdz ++ = build_function_type (float_type_node, ++ tree_cons (NULL_TREE, double_type_node, ++ endlink)); ++ ++ ++ for (d = bdesc; d->name; d++) ++ builtin_function (d->name, *d->type, d->code, ++ BUILT_IN_MD, NULL, NULL); ++} ++/* Expand an expression EXP that calls a built-in function, ++ with result going to TARGET if that's convenient ++ (and in mode MODE if that's convenient). ++ SUBTARGET may be used as the target for computing one of EXP's operands. ++ IGNORE is nonzero if the value is to be ignored. */ ++ ++static rtx ++nios2_expand_builtin (tree exp, rtx target, rtx subtarget, ++ enum machine_mode mode, int ignore) ++{ ++ const struct builtin_description *d; ++ tree fndecl = TREE_OPERAND (TREE_OPERAND (exp, 0), 0); ++ unsigned int fcode = DECL_FUNCTION_CODE (fndecl); ++ ++ for (d = bdesc; d->name; d++) ++ if (d->code == fcode) ++ { ++ if (d->code > NIOS2_FIRST_FPU_INSN && d->code < NIOS2_LAST_FPU_INSN) ++ { ++ nios2_fpu_info *inf = &nios2_fpu_insns[d->code - ++ (NIOS2_FIRST_FPU_INSN + 1)]; ++ const struct insn_data *idata = &insn_data[d->icode]; ++ if (inf->N < 0) ++ fatal_error ("Cannot call `%s' without specifying switch" ++ " `-mcustom-%s'", ++ d->name, ++ inf->option); ++ if (inf->args[0] != 'z' ++ && (!target ++ || !(idata->operand[0].predicate) (target, ++ idata->operand[0].mode))) ++ target = gen_reg_rtx (idata->operand[0].mode); ++ } ++ return (d->expander) (d, exp, target, subtarget, mode, ignore); ++ } ++ ++ /* We should have seen one of the functins we registered. */ ++ gcc_unreachable (); ++} ++ ++static rtx nios2_create_target (const struct builtin_description *, rtx); ++ ++ ++static rtx ++nios2_create_target (const struct builtin_description *d, rtx target) ++{ ++ if (!target ++ || !(*insn_data[d->icode].operand[0].predicate) ( ++ target, insn_data[d->icode].operand[0].mode)) ++ { ++ target = gen_reg_rtx (insn_data[d->icode].operand[0].mode); ++ } ++ ++ return target; ++} ++ ++ ++static rtx nios2_extract_opcode (const struct builtin_description *, int, tree); ++static rtx nios2_extract_operand (const struct builtin_description *, int, int, ++ tree); ++ ++static rtx ++nios2_extract_opcode (const struct builtin_description *d, int op, tree arglist) ++{ ++ enum machine_mode mode = insn_data[d->icode].operand[op].mode; ++ tree arg = TREE_VALUE (arglist); ++ rtx opcode = expand_expr (arg, NULL_RTX, mode, 0); ++ ++ if (!(*insn_data[d->icode].operand[op].predicate) (opcode, mode)) ++ error ("Custom instruction opcode must be compile time constant in the " ++ "range 0-255 for %s", d->name); ++ ++ builtin_custom_seen[INTVAL (opcode)] = d->name; ++ nios2_custom_check_insns (0); ++ return opcode; ++} ++ ++static rtx ++nios2_extract_operand (const struct builtin_description *d, int op, int argnum, ++ tree arglist) ++{ ++ enum machine_mode mode = insn_data[d->icode].operand[op].mode; ++ tree arg = TREE_VALUE (arglist); ++ rtx operand = expand_expr (arg, NULL_RTX, mode, 0); ++ ++ if (!(*insn_data[d->icode].operand[op].predicate) (operand, mode)) ++ operand = copy_to_mode_reg (mode, operand); ++ ++ /* ??? Better errors would be nice. */ ++ if (!(*insn_data[d->icode].operand[op].predicate) (operand, mode)) ++ error ("Invalid argument %d to %s", argnum, d->name); ++ ++ return operand; ++} ++ ++ ++static rtx ++nios2_expand_custom_n (const struct builtin_description *d, tree exp, ++ rtx target ATTRIBUTE_UNUSED, ++ rtx subtarget ATTRIBUTE_UNUSED, ++ enum machine_mode mode ATTRIBUTE_UNUSED, ++ int ignore ATTRIBUTE_UNUSED) ++{ ++ tree arglist = TREE_OPERAND (exp, 1); ++ rtx pat; ++ rtx opcode; ++ ++ /* custom_n should have exactly one operand. */ ++ gcc_assert (insn_data[d->icode].n_operands == 1); ++ ++ opcode = nios2_extract_opcode (d, 0, arglist); ++ ++ pat = GEN_FCN (d->icode) (opcode); ++ if (!pat) ++ return 0; ++ emit_insn (pat); ++ return 0; ++} ++ ++static rtx ++nios2_expand_custom_Xn (const struct builtin_description *d, tree exp, ++ rtx target, rtx subtarget ATTRIBUTE_UNUSED, ++ enum machine_mode mode ATTRIBUTE_UNUSED, ++ int ignore ATTRIBUTE_UNUSED) ++{ ++ tree arglist = TREE_OPERAND (exp, 1); ++ rtx pat; ++ rtx opcode; ++ ++ /* custom_Xn should have exactly two operands. */ ++ gcc_assert (insn_data[d->icode].n_operands == 2); ++ ++ target = nios2_create_target (d, target); ++ opcode = nios2_extract_opcode (d, 1, arglist); ++ ++ pat = GEN_FCN (d->icode) (target, opcode); ++ if (!pat) ++ return 0; ++ emit_insn (pat); ++ return target; ++} ++ ++static rtx ++nios2_expand_custom_nX (const struct builtin_description *d, tree exp, ++ rtx target ATTRIBUTE_UNUSED, ++ rtx subtarget ATTRIBUTE_UNUSED, ++ enum machine_mode mode ATTRIBUTE_UNUSED, ++ int ignore ATTRIBUTE_UNUSED) ++{ ++ tree arglist = TREE_OPERAND (exp, 1); ++ rtx pat; ++ rtx opcode; ++ rtx operands[1]; ++ int i; ++ ++ ++ /* custom_nX should have exactly two operands. */ ++ gcc_assert (insn_data[d->icode].n_operands == 2); ++ ++ opcode = nios2_extract_opcode (d, 0, arglist); ++ for (i = 0; i < 1; i++) ++ { ++ arglist = TREE_CHAIN (arglist); ++ operands[i] = nios2_extract_operand (d, i + 1, i + 1, arglist); ++ } ++ ++ pat = GEN_FCN (d->icode) (opcode, operands[0]); ++ if (!pat) ++ return 0; ++ emit_insn (pat); ++ return 0; ++} ++ ++static rtx ++nios2_expand_custom_XnX (const struct builtin_description *d, tree exp, ++ rtx target, rtx subtarget ATTRIBUTE_UNUSED, ++ enum machine_mode mode ATTRIBUTE_UNUSED, ++ int ignore ATTRIBUTE_UNUSED) ++{ ++ tree arglist = TREE_OPERAND (exp, 1); ++ rtx pat; ++ rtx opcode; ++ rtx operands[1]; ++ int i; ++ ++ /* custom_Xn should have exactly three operands. */ ++ gcc_assert (insn_data[d->icode].n_operands == 3); ++ ++ target = nios2_create_target (d, target); ++ opcode = nios2_extract_opcode (d, 1, arglist); ++ ++ for (i = 0; i < 1; i++) ++ { ++ arglist = TREE_CHAIN (arglist); ++ operands[i] = nios2_extract_operand (d, i + 2, i + 1, arglist); ++ } ++ ++ pat = GEN_FCN (d->icode) (target, opcode, operands[0]); ++ ++ if (!pat) ++ return 0; ++ emit_insn (pat); ++ return target; ++} ++ ++static rtx ++nios2_expand_custom_nXX (const struct builtin_description *d, tree exp, ++ rtx target ATTRIBUTE_UNUSED, ++ rtx subtarget ATTRIBUTE_UNUSED, ++ enum machine_mode mode ATTRIBUTE_UNUSED, ++ int ignore ATTRIBUTE_UNUSED) ++{ ++ tree arglist = TREE_OPERAND (exp, 1); ++ rtx pat; ++ rtx opcode; ++ rtx operands[2]; ++ int i; ++ ++ ++ /* custom_nX should have exactly three operands. */ ++ gcc_assert (insn_data[d->icode].n_operands == 3); ++ ++ opcode = nios2_extract_opcode (d, 0, arglist); ++ for (i = 0; i < 2; i++) ++ { ++ arglist = TREE_CHAIN (arglist); ++ operands[i] = nios2_extract_operand (d, i + 1, i + 1, arglist); ++ } ++ ++ pat = GEN_FCN (d->icode) (opcode, operands[0], operands[1]); ++ if (!pat) ++ return 0; ++ emit_insn (pat); ++ return 0; ++} ++ ++static rtx ++nios2_expand_custom_XnXX (const struct builtin_description *d, tree exp, ++ rtx target, rtx subtarget ATTRIBUTE_UNUSED, ++ enum machine_mode mode ATTRIBUTE_UNUSED, ++ int ignore ATTRIBUTE_UNUSED) ++{ ++ tree arglist = TREE_OPERAND (exp, 1); ++ rtx pat; ++ rtx opcode; ++ rtx operands[2]; ++ int i; ++ ++ ++ /* custom_XnX should have exactly four operands. */ ++ gcc_assert (insn_data[d->icode].n_operands == 4); ++ ++ target = nios2_create_target (d, target); ++ opcode = nios2_extract_opcode (d, 1, arglist); ++ for (i = 0; i < 2; i++) ++ { ++ arglist = TREE_CHAIN (arglist); ++ operands[i] = nios2_extract_operand (d, i + 2, i + 1, arglist); ++ } ++ ++ pat = GEN_FCN (d->icode) (target, opcode, operands[0], operands[1]); ++ ++ if (!pat) ++ return 0; ++ emit_insn (pat); ++ return target; ++} ++ ++ ++ ++static rtx ++nios2_expand_STXIO (const struct builtin_description *d, tree exp, ++ rtx target ATTRIBUTE_UNUSED, ++ rtx subtarget ATTRIBUTE_UNUSED, ++ enum machine_mode mode ATTRIBUTE_UNUSED, ++ int ignore ATTRIBUTE_UNUSED) ++{ ++ tree arglist = TREE_OPERAND (exp, 1); ++ rtx pat; ++ rtx store_dest, store_val; ++ enum insn_code icode = d->icode; ++ ++ /* Stores should have exactly two operands. */ ++ gcc_assert (insn_data[icode].n_operands == 2); ++ ++ /* Process the destination of the store. */ ++ { ++ enum machine_mode mode = insn_data[icode].operand[0].mode; ++ tree arg = TREE_VALUE (arglist); ++ store_dest = expand_expr (arg, NULL_RTX, VOIDmode, 0); ++ ++ store_dest = gen_rtx_MEM (mode, copy_to_mode_reg (Pmode, store_dest)); ++ ++ /* ??? Better errors would be nice. */ ++ if (!(*insn_data[icode].operand[0].predicate) (store_dest, mode)) ++ error ("Invalid argument 1 to %s", d->name); ++ } ++ ++ ++ /* Process the value to store. */ ++ { ++ enum machine_mode mode = insn_data[icode].operand[1].mode; ++ tree arg = TREE_VALUE (TREE_CHAIN (arglist)); ++ store_val = expand_expr (arg, NULL_RTX, mode, 0); ++ ++ if (!(*insn_data[icode].operand[1].predicate) (store_val, mode)) ++ store_val = copy_to_mode_reg (mode, store_val); ++ ++ /* ??? Better errors would be nice. */ ++ if (!(*insn_data[icode].operand[1].predicate) (store_val, mode)) ++ error ("Invalid argument 2 to %s", d->name); ++ } ++ ++ pat = GEN_FCN (d->icode) (store_dest, store_val); ++ if (!pat) ++ return 0; ++ emit_insn (pat); ++ return 0; ++} ++ ++ ++static rtx ++nios2_expand_LDXIO (const struct builtin_description * d, tree exp, rtx target, ++ rtx subtarget ATTRIBUTE_UNUSED, ++ enum machine_mode mode ATTRIBUTE_UNUSED, ++ int ignore ATTRIBUTE_UNUSED) ++{ ++ tree arglist = TREE_OPERAND (exp, 1); ++ rtx pat; ++ rtx ld_src; ++ enum insn_code icode = d->icode; ++ ++ /* Loads should have exactly two operands. */ ++ gcc_assert (insn_data[icode].n_operands == 2); ++ ++ target = nios2_create_target (d, target); ++ ++ { ++ enum machine_mode mode = insn_data[icode].operand[1].mode; ++ tree arg = TREE_VALUE (arglist); ++ ld_src = expand_expr (arg, NULL_RTX, VOIDmode, 0); ++ ++ ld_src = gen_rtx_MEM (mode, copy_to_mode_reg (Pmode, ld_src)); ++ ++ /* ??? Better errors would be nice. */ ++ if (!(*insn_data[icode].operand[1].predicate) (ld_src, mode)) ++ error ("Invalid argument 1 to %s", d->name); ++ } ++ ++ pat = GEN_FCN (d->icode) (target, ld_src); ++ if (!pat) ++ return 0; ++ emit_insn (pat); ++ return target; ++} ++ ++ ++static rtx ++nios2_expand_sync (const struct builtin_description * d ATTRIBUTE_UNUSED, ++ tree exp ATTRIBUTE_UNUSED, rtx target ATTRIBUTE_UNUSED, ++ rtx subtarget ATTRIBUTE_UNUSED, ++ enum machine_mode mode ATTRIBUTE_UNUSED, ++ int ignore ATTRIBUTE_UNUSED) ++{ ++ emit_insn (gen_sync ()); ++ return 0; ++} ++ ++static rtx ++nios2_expand_rdctl (const struct builtin_description * d ATTRIBUTE_UNUSED, ++ tree exp ATTRIBUTE_UNUSED, rtx target ATTRIBUTE_UNUSED, ++ rtx subtarget ATTRIBUTE_UNUSED, ++ enum machine_mode mode ATTRIBUTE_UNUSED, ++ int ignore ATTRIBUTE_UNUSED) ++{ ++ tree arglist = TREE_OPERAND (exp, 1); ++ rtx pat; ++ rtx rdctl_reg; ++ enum insn_code icode = d->icode; ++ ++ /* rdctl should have exactly two operands. */ ++ gcc_assert (insn_data[icode].n_operands == 2); ++ ++ target = nios2_create_target (d, target); ++ ++ { ++ enum machine_mode mode = insn_data[icode].operand[1].mode; ++ tree arg = TREE_VALUE (arglist); ++ rdctl_reg = expand_expr (arg, NULL_RTX, VOIDmode, 0); ++ ++ if (!(*insn_data[icode].operand[1].predicate) (rdctl_reg, mode)) ++ error ("Control register number must be in range 0-31 for %s", d->name); ++ } ++ ++ pat = GEN_FCN (d->icode) (target, rdctl_reg); ++ if (!pat) ++ return 0; ++ emit_insn (pat); ++ return target; ++} ++ ++static rtx ++nios2_expand_wrctl (const struct builtin_description * d ATTRIBUTE_UNUSED, ++ tree exp ATTRIBUTE_UNUSED, rtx target ATTRIBUTE_UNUSED, ++ rtx subtarget ATTRIBUTE_UNUSED, ++ enum machine_mode mode ATTRIBUTE_UNUSED, ++ int ignore ATTRIBUTE_UNUSED) ++{ ++ tree arglist = TREE_OPERAND (exp, 1); ++ rtx pat; ++ rtx wrctl_reg, store_val; ++ enum insn_code icode = d->icode; ++ ++ /* Stores should have exactly two operands. */ ++ gcc_assert (insn_data[icode].n_operands == 2); ++ ++ /* Process the destination of the store. */ ++ { ++ enum machine_mode mode = insn_data[icode].operand[0].mode; ++ tree arg = TREE_VALUE (arglist); ++ wrctl_reg = expand_expr (arg, NULL_RTX, VOIDmode, 0); ++ ++ if (!(*insn_data[icode].operand[0].predicate) (wrctl_reg, mode)) ++ error ("Control register number must be in range 0-31 for %s", d->name); ++ } ++ ++ ++ /* Process the value to store. */ ++ { ++ enum machine_mode mode = insn_data[icode].operand[1].mode; ++ tree arg = TREE_VALUE (TREE_CHAIN (arglist)); ++ store_val = expand_expr (arg, NULL_RTX, mode, 0); ++ ++ if (!(*insn_data[icode].operand[1].predicate) (store_val, mode)) ++ store_val = copy_to_mode_reg (mode, store_val); ++ ++ /* ??? Better errors would be nice. */ ++ if (!(*insn_data[icode].operand[1].predicate) (store_val, mode)) ++ error ("Invalid argument 2 to %s", d->name); ++ } ++ ++ pat = GEN_FCN (d->icode) (wrctl_reg, store_val); ++ if (!pat) ++ return 0; ++ emit_insn (pat); ++ return 0; ++} ++ ++static rtx ++nios2_extract_double (const struct insn_data *idata, tree arglist, int index) ++{ ++ rtx arg; ++ ++ while (index--) ++ arglist = TREE_CHAIN (arglist); ++ arg = expand_expr (TREE_VALUE (arglist), NULL_RTX, DFmode, 0); ++ if (!(*(idata->operand[index+1].predicate)) (arg, DFmode)) ++ arg = copy_to_mode_reg (DFmode, arg); ++ return arg; ++} ++ ++static rtx ++nios2_extract_float (const struct insn_data *idata, tree arglist, int index) ++{ ++ rtx arg; ++ ++ while (index--) ++ arglist = TREE_CHAIN (arglist); ++ arg = expand_expr (TREE_VALUE (arglist), NULL_RTX, SFmode, 0); ++ if (!(*(idata->operand[index+1].predicate)) (arg, SFmode)) ++ arg = copy_to_mode_reg (SFmode, arg); ++ return arg; ++} ++ ++static rtx ++nios2_extract_integer (const struct insn_data *idata, tree arglist, int index) ++{ ++ rtx arg; ++ ++ while (index--) ++ arglist = TREE_CHAIN (arglist); ++ arg = expand_expr (TREE_VALUE (arglist), NULL_RTX, SImode, 0); ++ if (!(*(idata->operand[index+1].predicate)) (arg, SImode)) ++ arg = copy_to_mode_reg (SImode, arg); ++ return arg; ++} ++ ++static rtx ++nios2_expand_custom_zdz (const struct builtin_description *d, ++ tree exp, ++ rtx target ATTRIBUTE_UNUSED, ++ rtx subtarget ATTRIBUTE_UNUSED, ++ enum machine_mode mode ATTRIBUTE_UNUSED, ++ int ignore ATTRIBUTE_UNUSED) ++{ ++ tree arglist = TREE_OPERAND (exp, 1); ++ rtx pat = GEN_FCN (d->icode) (nios2_extract_double (&insn_data[d->icode], ++ arglist, 0)); ++ if (pat) ++ emit_insn (pat); ++ return 0; ++} ++ ++static rtx ++nios2_expand_custom_zsz (const struct builtin_description *d, ++ tree exp, ++ rtx target ATTRIBUTE_UNUSED, ++ rtx subtarget ATTRIBUTE_UNUSED, ++ enum machine_mode mode ATTRIBUTE_UNUSED, ++ int ignore ATTRIBUTE_UNUSED) ++{ ++ tree arglist = TREE_OPERAND (exp, 1); ++ rtx pat = GEN_FCN (d->icode) (nios2_extract_float (&insn_data[d->icode], ++ arglist, 0)); ++ if (pat) ++ emit_insn (pat); ++ return 0; ++} ++ ++static rtx ++nios2_expand_custom_szz (const struct builtin_description *d, ++ tree exp ATTRIBUTE_UNUSED, ++ rtx target, ++ rtx subtarget ATTRIBUTE_UNUSED, ++ enum machine_mode mode ATTRIBUTE_UNUSED, ++ int ignore ATTRIBUTE_UNUSED) ++{ ++ rtx pat = GEN_FCN (d->icode) (target); ++ if (pat) ++ emit_insn (pat); ++ return target; ++} ++ ++static rtx ++nios2_expand_custom_sss (const struct builtin_description *d, ++ tree exp, ++ rtx target, ++ rtx subtarget ATTRIBUTE_UNUSED, ++ enum machine_mode mode ATTRIBUTE_UNUSED, ++ int ignore ATTRIBUTE_UNUSED) ++{ ++ tree arglist = TREE_OPERAND (exp, 1); ++ rtx pat = GEN_FCN (d->icode) (target, ++ nios2_extract_float (&insn_data[d->icode], ++ arglist, 0), ++ nios2_extract_float (&insn_data[d->icode], ++ arglist, 1)); ++ if (pat) ++ emit_insn (pat); ++ return target; ++} ++ ++static rtx ++nios2_expand_custom_ssz (const struct builtin_description *d, ++ tree exp, ++ rtx target, ++ rtx subtarget ATTRIBUTE_UNUSED, ++ enum machine_mode mode ATTRIBUTE_UNUSED, ++ int ignore ATTRIBUTE_UNUSED) ++{ ++ tree arglist = TREE_OPERAND (exp, 1); ++ rtx pat = GEN_FCN (d->icode) (target, ++ nios2_extract_float (&insn_data[d->icode], ++ arglist, 0)); ++ if (pat) ++ emit_insn (pat); ++ return target; ++} ++ ++static rtx ++nios2_expand_custom_iss (const struct builtin_description *d, ++ tree exp, ++ rtx target, ++ rtx subtarget ATTRIBUTE_UNUSED, ++ enum machine_mode mode ATTRIBUTE_UNUSED, ++ int ignore ATTRIBUTE_UNUSED) ++{ ++ tree arglist = TREE_OPERAND (exp, 1); ++ rtx pat = GEN_FCN (d->icode) (target, ++ nios2_extract_float (&insn_data[d->icode], ++ arglist, 0), ++ nios2_extract_float (&insn_data[d->icode], ++ arglist, 1)); ++ if (pat) ++ emit_insn (pat); ++ return target; ++} ++ ++static rtx ++nios2_expand_custom_ddd (const struct builtin_description *d, ++ tree exp, ++ rtx target, ++ rtx subtarget ATTRIBUTE_UNUSED, ++ enum machine_mode mode ATTRIBUTE_UNUSED, ++ int ignore ATTRIBUTE_UNUSED) ++{ ++ tree arglist = TREE_OPERAND (exp, 1); ++ rtx pat = GEN_FCN (d->icode) (target, ++ nios2_extract_double (&insn_data[d->icode], ++ arglist, 0), ++ nios2_extract_double (&insn_data[d->icode], ++ arglist, 1)); ++ if (pat) ++ emit_insn (pat); ++ return target; ++} ++ ++static rtx ++nios2_expand_custom_ddz (const struct builtin_description *d, ++ tree exp, ++ rtx target, ++ rtx subtarget ATTRIBUTE_UNUSED, ++ enum machine_mode mode ATTRIBUTE_UNUSED, ++ int ignore ATTRIBUTE_UNUSED) ++{ ++ tree arglist = TREE_OPERAND (exp, 1); ++ rtx pat = GEN_FCN (d->icode) (target, ++ nios2_extract_double (&insn_data[d->icode], ++ arglist, 0)); ++ if (pat) ++ emit_insn (pat); ++ return target; ++} ++ ++static rtx ++nios2_expand_custom_idd (const struct builtin_description *d, ++ tree exp, ++ rtx target, ++ rtx subtarget ATTRIBUTE_UNUSED, ++ enum machine_mode mode ATTRIBUTE_UNUSED, ++ int ignore ATTRIBUTE_UNUSED) ++{ ++ tree arglist = TREE_OPERAND (exp, 1); ++ rtx pat = GEN_FCN (d->icode) (target, ++ nios2_extract_double (&insn_data[d->icode], ++ arglist, 0), ++ nios2_extract_double (&insn_data[d->icode], ++ arglist, 1)); ++ if (pat) ++ emit_insn (pat); ++ return target; ++} ++ ++static rtx ++nios2_expand_custom_siz (const struct builtin_description *d, ++ tree exp, ++ rtx target, ++ rtx subtarget ATTRIBUTE_UNUSED, ++ enum machine_mode mode ATTRIBUTE_UNUSED, ++ int ignore ATTRIBUTE_UNUSED) ++{ ++ tree arglist = TREE_OPERAND (exp, 1); ++ rtx pat = GEN_FCN (d->icode) (target, ++ nios2_extract_integer (&insn_data[d->icode], ++ arglist, 0)); ++ if (pat) ++ emit_insn (pat); ++ return target; ++} ++ ++static rtx ++nios2_expand_custom_suz (const struct builtin_description *d, ++ tree exp, ++ rtx target, ++ rtx subtarget ATTRIBUTE_UNUSED, ++ enum machine_mode mode ATTRIBUTE_UNUSED, ++ int ignore ATTRIBUTE_UNUSED) ++{ ++ tree arglist = TREE_OPERAND (exp, 1); ++ rtx pat = GEN_FCN (d->icode) (target, ++ nios2_extract_integer (&insn_data[d->icode], ++ arglist, 0)); ++ if (pat) ++ emit_insn (pat); ++ return target; ++} ++ ++static rtx ++nios2_expand_custom_diz (const struct builtin_description *d, ++ tree exp, ++ rtx target, ++ rtx subtarget ATTRIBUTE_UNUSED, ++ enum machine_mode mode ATTRIBUTE_UNUSED, ++ int ignore ATTRIBUTE_UNUSED) ++{ ++ tree arglist = TREE_OPERAND (exp, 1); ++ rtx pat = GEN_FCN (d->icode) (target, ++ nios2_extract_integer (&insn_data[d->icode], ++ arglist, 0)); ++ if (pat) ++ emit_insn (pat); ++ return target; ++} ++ ++static rtx ++nios2_expand_custom_duz (const struct builtin_description *d, ++ tree exp, ++ rtx target, ++ rtx subtarget ATTRIBUTE_UNUSED, ++ enum machine_mode mode ATTRIBUTE_UNUSED, ++ int ignore ATTRIBUTE_UNUSED) ++{ ++ tree arglist = TREE_OPERAND (exp, 1); ++ rtx pat = GEN_FCN (d->icode) (target, ++ nios2_extract_integer (&insn_data[d->icode], ++ arglist, 0)); ++ if (pat) ++ emit_insn (pat); ++ return target; ++} ++ ++static rtx ++nios2_expand_custom_isz (const struct builtin_description *d, ++ tree exp, ++ rtx target, ++ rtx subtarget ATTRIBUTE_UNUSED, ++ enum machine_mode mode ATTRIBUTE_UNUSED, ++ int ignore ATTRIBUTE_UNUSED) ++{ ++ tree arglist = TREE_OPERAND (exp, 1); ++ rtx pat = GEN_FCN (d->icode) (target, ++ nios2_extract_float (&insn_data[d->icode], ++ arglist, 0)); ++ if (pat) ++ emit_insn (pat); ++ return target; ++} ++ ++static rtx ++nios2_expand_custom_usz (const struct builtin_description *d, ++ tree exp, ++ rtx target, ++ rtx subtarget ATTRIBUTE_UNUSED, ++ enum machine_mode mode ATTRIBUTE_UNUSED, ++ int ignore ATTRIBUTE_UNUSED) ++{ ++ tree arglist = TREE_OPERAND (exp, 1); ++ rtx pat = GEN_FCN (d->icode) (target, ++ nios2_extract_float (&insn_data[d->icode], ++ arglist, 0)); ++ if (pat) ++ emit_insn (pat); ++ return target; ++} ++ ++static rtx ++nios2_expand_custom_idz (const struct builtin_description *d, ++ tree exp, ++ rtx target, ++ rtx subtarget ATTRIBUTE_UNUSED, ++ enum machine_mode mode ATTRIBUTE_UNUSED, ++ int ignore ATTRIBUTE_UNUSED) ++{ ++ tree arglist = TREE_OPERAND (exp, 1); ++ rtx pat = GEN_FCN (d->icode) (target, ++ nios2_extract_double (&insn_data[d->icode], ++ arglist, 0)); ++ if (pat) ++ emit_insn (pat); ++ return target; ++} ++ ++static rtx ++nios2_expand_custom_udz (const struct builtin_description *d, ++ tree exp, ++ rtx target, ++ rtx subtarget ATTRIBUTE_UNUSED, ++ enum machine_mode mode ATTRIBUTE_UNUSED, ++ int ignore ATTRIBUTE_UNUSED) ++{ ++ tree arglist = TREE_OPERAND (exp, 1); ++ rtx pat = GEN_FCN (d->icode) (target, ++ nios2_extract_double (&insn_data[d->icode], ++ arglist, 0)); ++ if (pat) ++ emit_insn (pat); ++ return target; ++} ++ ++static rtx ++nios2_expand_custom_dsz (const struct builtin_description *d, ++ tree exp, ++ rtx target, ++ rtx subtarget ATTRIBUTE_UNUSED, ++ enum machine_mode mode ATTRIBUTE_UNUSED, ++ int ignore ATTRIBUTE_UNUSED) ++{ ++ tree arglist = TREE_OPERAND (exp, 1); ++ rtx pat = GEN_FCN (d->icode) (target, ++ nios2_extract_float (&insn_data[d->icode], ++ arglist, 0)); ++ if (pat) ++ emit_insn (pat); ++ return target; ++} ++ ++static rtx ++nios2_expand_custom_sdz (const struct builtin_description *d, ++ tree exp, ++ rtx target, ++ rtx subtarget ATTRIBUTE_UNUSED, ++ enum machine_mode mode ATTRIBUTE_UNUSED, ++ int ignore ATTRIBUTE_UNUSED) ++{ ++ tree arglist = TREE_OPERAND (exp, 1); ++ rtx pat = GEN_FCN (d->icode) (target, ++ nios2_extract_double (&insn_data[d->icode], ++ arglist, 0)); ++ if (pat) ++ emit_insn (pat); ++ return target; ++} ++ ++#include "gt-nios2.h" ++ +Index: gcc-4.1.2/gcc/config/nios2/nios2.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gcc-4.1.2/gcc/config/nios2/nios2.h 2010-06-30 08:50:26.000000000 +0200 +@@ -0,0 +1,1064 @@ ++/* NOT ASSIGNED TO FSF. COPYRIGHT ALTERA. */ ++/* Definitions of target machine for Altera NIOS 2G NIOS2 version. ++ Copyright (C) 2007 Altera ++ Contributed by Jonah Graham (jgraham@altera.com), ++ Will Reece (wreece@altera.com), and Jeff DaSilva (jdasilva@altera.com). ++ ++This file is part of GNU CC. ++ ++GNU CC is free software; you can 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. ++ ++GNU CC is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++GNU General Public License for more details. ++ ++You should have received a copy of the GNU General Public License ++along with GNU CC; see the file COPYING. If not, write to ++the Free Software Foundation, 59 Temple Place - Suite 330, ++Boston, MA 02111-1307, USA. */ ++ ++ ++ ++#define TARGET_CPU_CPP_BUILTINS() \ ++ do \ ++ { \ ++ builtin_define_std ("NIOS2"); \ ++ builtin_define_std ("nios2"); \ ++ if (TARGET_BIG_ENDIAN) \ ++ builtin_define_std ("nios2_big_endian"); \ ++ else \ ++ builtin_define_std ("nios2_little_endian"); \ ++ } \ ++ while (0) ++#define TARGET_VERSION fprintf (stderr, " (Altera Nios II)") ++ ++ ++ ++ ++ ++/********************************* ++ * Run-time Target Specification ++ *********************************/ ++ ++extern int target_flags; ++ ++/* ++ * There's a lot of error-prone tedium with all the different ++ * custom floating point instructions. Try to automate it a bit ++ * to make it easier to deal with. ++ */ ++#define NIOS2_STRINGIFY_INNER(x) #x ++#define NIOS2_STRINGIFY(x) NIOS2_STRINGIFY_INNER(x) ++#define NIOS2_CONCAT_INNER(x, y) x ## y ++#define NIOS2_CONCAT(x, y) NIOS2_CONCAT_INNER (x, y) ++ ++#define NIOS2_FOR_ALL_FPU_INSNS \ ++ NIOS2_FPU_INSN (fwrx, nios2_fwrx, zdz) \ ++ NIOS2_FPU_INSN (fwry, nios2_fwry, zsz) \ ++ NIOS2_FPU_INSN (frdxlo, nios2_frdxlo, szz) \ ++ NIOS2_FPU_INSN (frdxhi, nios2_frdxhi, szz) \ ++ NIOS2_FPU_INSN (frdy, nios2_frdy, szz) \ ++\ ++ NIOS2_FPU_INSN (fadds, addsf3, sss) \ ++ NIOS2_FPU_INSN (fsubs, subsf3, sss) \ ++ NIOS2_FPU_INSN (fmuls, mulsf3, sss) \ ++ NIOS2_FPU_INSN (fdivs, divsf3, sss) \ ++ NIOS2_FPU_INSN (fmins, minsf3, sss) \ ++ NIOS2_FPU_INSN (fmaxs, maxsf3, sss) \ ++ NIOS2_FPU_INSN (fnegs, negsf2, ssz) \ ++ NIOS2_FPU_INSN (fabss, abssf2, ssz) \ ++ NIOS2_FPU_INSN (fsqrts, sqrtsf2, ssz) \ ++ NIOS2_FPU_INSN (fcoss, cossf2, ssz) \ ++ NIOS2_FPU_INSN (fsins, sinsf2, ssz) \ ++ NIOS2_FPU_INSN (ftans, tansf2, ssz) \ ++ NIOS2_FPU_INSN (fatans, atansf2, ssz) \ ++ NIOS2_FPU_INSN (fexps, expsf2, ssz) \ ++ NIOS2_FPU_INSN (flogs, logsf2, ssz) \ ++ NIOS2_FPU_INSN (fcmplts, nios2_sltsf, iss) \ ++ NIOS2_FPU_INSN (fcmples, nios2_slesf, iss) \ ++ NIOS2_FPU_INSN (fcmpgts, nios2_sgtsf, iss) \ ++ NIOS2_FPU_INSN (fcmpges, nios2_sgesf, iss) \ ++ NIOS2_FPU_INSN (fcmpeqs, nios2_seqsf, iss) \ ++ NIOS2_FPU_INSN (fcmpnes, nios2_snesf, iss) \ ++\ ++ NIOS2_FPU_INSN (faddd, adddf3, ddd) \ ++ NIOS2_FPU_INSN (fsubd, subdf3, ddd) \ ++ NIOS2_FPU_INSN (fmuld, muldf3, ddd) \ ++ NIOS2_FPU_INSN (fdivd, divdf3, ddd) \ ++ NIOS2_FPU_INSN (fmind, mindf3, ddd) \ ++ NIOS2_FPU_INSN (fmaxd, maxdf3, ddd) \ ++ NIOS2_FPU_INSN (fnegd, negdf2, ddz) \ ++ NIOS2_FPU_INSN (fabsd, absdf2, ddz) \ ++ NIOS2_FPU_INSN (fsqrtd, sqrtdf2, ddz) \ ++ NIOS2_FPU_INSN (fcosd, cosdf2, ddz) \ ++ NIOS2_FPU_INSN (fsind, sindf2, ddz) \ ++ NIOS2_FPU_INSN (ftand, tandf2, ddz) \ ++ NIOS2_FPU_INSN (fatand, atandf2, ddz) \ ++ NIOS2_FPU_INSN (fexpd, expdf2, ddz) \ ++ NIOS2_FPU_INSN (flogd, logdf2, ddz) \ ++ NIOS2_FPU_INSN (fcmpltd, nios2_sltdf, idd) \ ++ NIOS2_FPU_INSN (fcmpled, nios2_sledf, idd) \ ++ NIOS2_FPU_INSN (fcmpgtd, nios2_sgtdf, idd) \ ++ NIOS2_FPU_INSN (fcmpged, nios2_sgedf, idd) \ ++ NIOS2_FPU_INSN (fcmpeqd, nios2_seqdf, idd) \ ++ NIOS2_FPU_INSN (fcmpned, nios2_snedf, idd) \ ++\ ++ NIOS2_FPU_INSN (floatis, floatsisf2, siz) \ ++ NIOS2_FPU_INSN (floatus, floatunssisf2, suz) \ ++ NIOS2_FPU_INSN (floatid, floatsidf2, diz) \ ++ NIOS2_FPU_INSN (floatud, floatunssidf2, duz) \ ++ NIOS2_FPU_INSN (fixsi, fixsfsi2, isz) \ ++ NIOS2_FPU_INSN (fixsu, fixunssfsi2, usz) \ ++ NIOS2_FPU_INSN (fixdi, fixdfsi2, idz) \ ++ NIOS2_FPU_INSN (fixdu, fixunsdfsi2, udz) \ ++ NIOS2_FPU_INSN (fextsd, extendsfdf2, dsz) \ ++ NIOS2_FPU_INSN (ftruncds, truncdfsf2, sdz) ++ ++enum ++{ ++#define NIOS2_FPU_INSN(opt, insn, args) \ ++ NIOS2_CONCAT (nios2_fpu_, insn), ++NIOS2_FOR_ALL_FPU_INSNS ++ nios2_fpu_max_insn ++}; ++ ++struct cpp_reader; ++typedef const char * (*nios2_outputfn) (rtx); ++typedef void (*nios2_pragmafn) (struct cpp_reader *); ++ ++typedef struct ++{ ++ const char *option; /* name of switch, e.g. fadds */ ++ const char *insnnm; /* name of gcc insn, e.g. addsf3 */ ++ const char *args; /* args to gcc insn, e.g. sss */ ++ int N; /* value of switch as an integer, -1 = not used */ ++ nios2_outputfn output; /* output function for use in .md file */ ++ const char *pname; /* name of corresponding #pragma custom- */ ++ nios2_pragmafn pragma; /* pragma function for register_target_pragmas */ ++ const char *nopname; /* name of corresponding #pragma no-custom- */ ++ nios2_pragmafn nopragma; /* pragma function for register_target_pragmas */ ++ int is_double; /* does this insn have any double operands */ ++ int needed_by_double; /* is this insn needed if doubles are used? */ ++ int needs_unsafe; /* does this insn require ++ -funsafe-math-optimizations to work? */ ++ int needs_finite; /* does this insn require ++ -ffinite-math-only to work? */ ++ int pragma_seen; /* have we seen the corresponding #pragma? */ ++ int* pN; /* pointer to the value as set by the option ++ parser. */ ++} nios2_fpu_info; ++ ++extern nios2_fpu_info nios2_fpu_insns[nios2_fpu_max_insn]; ++extern const char *nios2_custom_fpu_cfg_string; ++ ++#undef NIOS2_FPU_INSN ++#define NIOS2_FPU_INSN(opt, insn, args) \ ++ extern int NIOS2_CONCAT (nios2_custom_, opt); ++NIOS2_FOR_ALL_FPU_INSNS ++ ++/* We're little endian, unless otherwise specified by defining BIG_ENDIAN_FLAG ++*/ ++#ifndef TARGET_ENDIAN_DEFAULT ++# define TARGET_ENDIAN_DEFAULT 0 ++#endif ++ ++/* Default target_flags if no switches specified. */ ++#ifndef TARGET_DEFAULT ++# define TARGET_DEFAULT (MASK_HAS_MUL | \ ++ TARGET_ENDIAN_DEFAULT) ++#endif ++ ++/* Switch Recognition by gcc.c. Add -G xx support */ ++#undef SWITCH_TAKES_ARG ++#define SWITCH_TAKES_ARG(CHAR) \ ++ (DEFAULT_SWITCH_TAKES_ARG (CHAR) || (CHAR) == 'G') ++ ++#define OVERRIDE_OPTIONS override_options () ++#define OPTIMIZATION_OPTIONS(LEVEL, SIZE) optimization_options (LEVEL, SIZE) ++#define CAN_DEBUG_WITHOUT_FP ++ ++#define CC1_SPEC "\ ++%{G*} %{EB:-meb} %{EL:-mel} %{EB:%{EL:%emay not use both -EB and -EL}}" ++ ++#if TARGET_ENDIAN_DEFAULT == 0 ++# define ASM_SPEC "\ ++%{!EB:%{!meb:-EL}} %{EB|meb:-EB}" ++# define LINK_SPEC_ENDIAN "\ ++%{!EB:%{!meb:-EL}} %{EB|meb:-EB}" ++# define MULTILIB_DEFAULTS { "EL" } ++#else ++# define ASM_SPEC "\ ++%{!EL:%{!mel:-EB}} %{EL|mel:-EL}" ++# define LINK_SPEC_ENDIAN "\ ++%{!EL:%{!mel:-EB}} %{EL|mel:-EL}" ++# define MULTILIB_DEFAULTS { "EB" } ++#endif ++ ++#define LINK_SPEC LINK_SPEC_ENDIAN \ ++ " %{shared:-shared} \ ++ %{static:-Bstatic}" ++ ++#undef LIB_SPEC ++#define LIB_SPEC \ ++"--start-group -lc -lgcc \ ++ -lnosys -lstack \ ++ --end-group \ ++" ++ ++ ++#undef STARTFILE_SPEC ++#define STARTFILE_SPEC \ ++"crt0%O%s" ++ ++#undef ENDFILE_SPEC ++#define ENDFILE_SPEC \ ++ "" ++ ++ ++/*********************** ++ * Storage Layout ++ ***********************/ ++ ++#define DEFAULT_SIGNED_CHAR 1 ++#define BITS_BIG_ENDIAN 0 ++#define BYTES_BIG_ENDIAN (TARGET_BIG_ENDIAN != 0) ++#define WORDS_BIG_ENDIAN (TARGET_BIG_ENDIAN != 0) ++#if defined(__nios2_big_endian__) ++#define LIBGCC2_WORDS_BIG_ENDIAN 1 ++#else ++#define LIBGCC2_WORDS_BIG_ENDIAN 0 ++#endif ++#define BITS_PER_UNIT 8 ++#define BITS_PER_WORD 32 ++#define UNITS_PER_WORD 4 ++#define POINTER_SIZE 32 ++#define BIGGEST_ALIGNMENT 32 ++#define STRICT_ALIGNMENT 1 ++#define FUNCTION_BOUNDARY 32 ++#define PARM_BOUNDARY 32 ++#define STACK_BOUNDARY 32 ++#define PREFERRED_STACK_BOUNDARY 32 ++#define MAX_FIXED_MODE_SIZE 64 ++ ++#define CONSTANT_ALIGNMENT(EXP, ALIGN) \ ++ ((TREE_CODE (EXP) == STRING_CST) \ ++ && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN)) ++ ++ ++/********************** ++ * Layout of Source Language Data Types ++ **********************/ ++ ++#define INT_TYPE_SIZE 32 ++#define SHORT_TYPE_SIZE 16 ++#define LONG_TYPE_SIZE 32 ++#define LONG_LONG_TYPE_SIZE 64 ++#define FLOAT_TYPE_SIZE 32 ++#define DOUBLE_TYPE_SIZE 64 ++#define LONG_DOUBLE_TYPE_SIZE DOUBLE_TYPE_SIZE ++ ++ ++/************************* ++ * Condition Code Status ++ ************************/ ++ ++/* comparison type */ ++/* ??? Currently CMP_DI is unused. CMP_SF and CMP_DF are only used if ++ the corresponding -mcustom-<opcode> switches are present. */ ++enum cmp_type { ++ CMP_SI, /* compare four byte integers */ ++ CMP_DI, /* compare eight byte integers */ ++ CMP_SF, /* compare single precision floats */ ++ CMP_DF, /* compare double precision floats */ ++ CMP_MAX /* max comparison type */ ++}; ++ ++extern GTY(()) rtx branch_cmp[2]; /* operands for compare */ ++extern enum cmp_type branch_type; /* what type of branch to use */ ++ ++/********************** ++ * Register Usage ++ **********************/ ++ ++/* ---------------------------------- * ++ * Basic Characteristics of Registers ++ * ---------------------------------- */ ++ ++/* ++Register Number ++ Register Name ++ Alternate Name ++ Purpose ++0 r0 zero always zero ++1 r1 at Assembler Temporary ++2-3 r2-r3 Return Location ++4-7 r4-r7 Register Arguments ++8-15 r8-r15 Caller Saved Registers ++16-22 r16-r22 Callee Saved Registers ++21 r21 sc Static Chain (Callee Saved) ++ ??? Does $sc want to be caller or callee ++ saved. If caller, 15, else 21. ++22 r22 Global Offset Table pointer ++23 r23 Thread pointer ++24 r24 et Exception Temporary ++25 r25 bt Breakpoint Temporary ++26 r26 gp Global Pointer ++27 r27 sp Stack Pointer ++28 r28 fp Frame Pointer ++29 r29 ea Exception Return Address ++30 r30 ba Breakpoint Return Address ++31 r31 ra Return Address ++ ++32 ctl0 status ++33 ctl1 estatus STATUS saved by exception ? ++34 ctl2 bstatus STATUS saved by break ? ++35 ctl3 ipri Interrupt Priority Mask ? ++36 ctl4 ecause Exception Cause ? ++ ++37 pc Not an actual register ++ ++38 fake_fp Fake Frame Pointer which will always be eliminated. ++39 fake_ap Fake Argument Pointer which will always be eliminated. ++ ++40 First Pseudo Register ++ ++ ++The definitions for all the hard register numbers ++are located in nios2.md. ++*/ ++ ++#define ET_REGNO (24) ++#define GP_REGNO (26) ++#define SP_REGNO (27) ++#define FP_REGNO (28) ++#define EA_REGNO (29) ++#define RA_REGNO (31) ++#define FIRST_RETVAL_REGNO (2) ++#define LAST_RETVAL_REGNO (3) ++#define FIRST_ARG_REGNO (4) ++#define LAST_ARG_REGNO (7) ++#define SC_REGNO (21) ++#define PC_REGNO (37) ++#define FAKE_FP_REGNO (38) ++#define FAKE_AP_REGNO (39) ++ ++#define FIRST_PSEUDO_REGISTER 40 ++#define NUM_ARG_REGS (LAST_ARG_REGNO - FIRST_ARG_REGNO + 1) ++ ++ ++ ++#define FIXED_REGISTERS \ ++ { \ ++/* +0 1 2 3 4 5 6 7 8 9 */ \ ++/* 0 */ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, \ ++/* 10 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ ++/* 20 */ 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, \ ++/* 30 */ 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, \ ++ } ++ ++/* call used is the same as caller saved ++ + fixed regs + args + ret vals */ ++#define CALL_USED_REGISTERS \ ++ { \ ++/* +0 1 2 3 4 5 6 7 8 9 */ \ ++/* 0 */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ ++/* 10 */ 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, \ ++/* 20 */ 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, \ ++/* 30 */ 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, \ ++ } ++ ++#define THREAD_POINTER_REGNUM 23 ++ ++#define HARD_REGNO_NREGS(REGNO, MODE) \ ++ ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) \ ++ / UNITS_PER_WORD) ++ ++/* --------------------------- * ++ * How Values Fit in Registers ++ * --------------------------- */ ++ ++#define HARD_REGNO_MODE_OK(REGNO, MODE) 1 ++ ++#define MODES_TIEABLE_P(MODE1, MODE2) 1 ++ ++ ++/************************* ++ * Register Classes ++ *************************/ ++ ++enum reg_class ++{ ++ NO_REGS, ++ D00_REG, ++ D01_REG, ++ D02_REG, ++ D03_REG, ++ D04_REG, ++ D05_REG, ++ D06_REG, ++ D07_REG, ++ D08_REG, ++ D09_REG, ++ D10_REG, ++ D11_REG, ++ D12_REG, ++ D13_REG, ++ D14_REG, ++ D15_REG, ++ D16_REG, ++ D17_REG, ++ D18_REG, ++ D19_REG, ++ D20_REG, ++ D21_REG, ++ D22_REG, ++ D23_REG, ++ D24_REG, ++ D25_REG, ++ D26_REG, ++ D27_REG, ++ D28_REG, ++ D29_REG, ++ D30_REG, ++ D31_REG, ++ SIB_REGS, ++ GP_REGS, ++ ALL_REGS, ++ LIM_REG_CLASSES ++}; ++ ++#define N_REG_CLASSES (int) LIM_REG_CLASSES ++ ++#define REG_CLASS_NAMES \ ++ {"NO_REGS", \ ++ "D00_REG", \ ++ "D01_REG", \ ++ "D02_REG", \ ++ "D03_REG", \ ++ "D04_REG", \ ++ "D05_REG", \ ++ "D06_REG", \ ++ "D07_REG", \ ++ "D08_REG", \ ++ "D09_REG", \ ++ "D10_REG", \ ++ "D11_REG", \ ++ "D12_REG", \ ++ "D13_REG", \ ++ "D14_REG", \ ++ "D15_REG", \ ++ "D16_REG", \ ++ "D17_REG", \ ++ "D18_REG", \ ++ "D19_REG", \ ++ "D20_REG", \ ++ "D21_REG", \ ++ "D22_REG", \ ++ "D23_REG", \ ++ "D24_REG", \ ++ "D25_REG", \ ++ "D26_REG", \ ++ "D27_REG", \ ++ "D28_REG", \ ++ "D29_REG", \ ++ "D30_REG", \ ++ "D31_REG", \ ++ "SIB_REGS", \ ++ "GP_REGS", \ ++ "ALL_REGS"} ++ ++#define GENERAL_REGS ALL_REGS ++ ++#define REG_CLASS_CONTENTS \ ++/* NO_REGS */ {{ 0, 0}, \ ++/* D00_REG */ { 1 << 0, 0}, \ ++/* D01_REG */ { 1 << 1, 0}, \ ++/* D02_REG */ { 1 << 2, 0}, \ ++/* D03_REG */ { 1 << 3, 0}, \ ++/* D04_REG */ { 1 << 4, 0}, \ ++/* D05_REG */ { 1 << 5, 0}, \ ++/* D06_REG */ { 1 << 6, 0}, \ ++/* D07_REG */ { 1 << 7, 0}, \ ++/* D08_REG */ { 1 << 8, 0}, \ ++/* D09_REG */ { 1 << 9, 0}, \ ++/* D10_REG */ { 1 << 10, 0}, \ ++/* D11_REG */ { 1 << 11, 0}, \ ++/* D12_REG */ { 1 << 12, 0}, \ ++/* D13_REG */ { 1 << 13, 0}, \ ++/* D14_REG */ { 1 << 14, 0}, \ ++/* D15_REG */ { 1 << 15, 0}, \ ++/* D16_REG */ { 1 << 16, 0}, \ ++/* D17_REG */ { 1 << 17, 0}, \ ++/* D18_REG */ { 1 << 18, 0}, \ ++/* D19_REG */ { 1 << 19, 0}, \ ++/* D20_REG */ { 1 << 20, 0}, \ ++/* D21_REG */ { 1 << 21, 0}, \ ++/* D22_REG */ { 1 << 22, 0}, \ ++/* D23_REG */ { 1 << 23, 0}, \ ++/* D24_REG */ { 1 << 24, 0}, \ ++/* D25_REG */ { 1 << 25, 0}, \ ++/* D26_REG */ { 1 << 26, 0}, \ ++/* D27_REG */ { 1 << 27, 0}, \ ++/* D28_REG */ { 1 << 28, 0}, \ ++/* D29_REG */ { 1 << 29, 0}, \ ++/* D30_REG */ { 1 << 30, 0}, \ ++/* D31_REG */ { 1 << 31, 0}, \ ++/* SIB_REGS */ { 0xfe0c, 0}, \ ++/* GP_REGS */ {~0, 0}, \ ++/* ALL_REGS */ {~0,~0}} \ ++ ++#define GP_REGNO_P(REGNO) ((REGNO) < 32) ++#define REGNO_REG_CLASS(REGNO) (GP_REGNO_P (REGNO) ? GP_REGS : ALL_REGS) ++ ++#define BASE_REG_CLASS ALL_REGS ++#define INDEX_REG_CLASS ALL_REGS ++ ++/* 'r', is handled automatically */ ++#define REG_CLASS_FROM_LETTER(C) ((C) == 'j' ? SIB_REGS : NO_REGS) ++ ++#define REG_CLASS_FROM_CONSTRAINT(CHAR, STR) \ ++ ((CHAR) == 'j' ? SIB_REGS : \ ++ reg_class_from_constraint ((CHAR), (STR))) ++ ++ ++#define REGNO_OK_FOR_BASE_P2(REGNO, STRICT) \ ++ ((STRICT) \ ++ ? (REGNO) < FIRST_PSEUDO_REGISTER \ ++ : (REGNO) < FIRST_PSEUDO_REGISTER || \ ++ (reg_renumber && reg_renumber[REGNO] < FIRST_PSEUDO_REGISTER)) ++ ++#define REGNO_OK_FOR_INDEX_P2(REGNO, STRICT) \ ++ (REGNO_OK_FOR_BASE_P2 (REGNO, STRICT)) ++ ++#define REGNO_OK_FOR_BASE_P(REGNO) \ ++ (REGNO_OK_FOR_BASE_P2 (REGNO, 1)) ++ ++#define REGNO_OK_FOR_INDEX_P(REGNO) \ ++ (REGNO_OK_FOR_INDEX_P2 (REGNO, 1)) ++ ++#define REG_OK_FOR_BASE_P2(X, STRICT) \ ++ (STRICT \ ++ ? REGNO_OK_FOR_BASE_P2 (REGNO (X), 1) \ ++ : REGNO_OK_FOR_BASE_P2 (REGNO (X), 1) || \ ++ REGNO(X) >= FIRST_PSEUDO_REGISTER) ++ ++#define REG_OK_FOR_INDEX_P2(X, STRICT) \ ++ (STRICT \ ++ ? REGNO_OK_FOR_INDEX_P2 (REGNO (X), 1) \ ++ : REGNO_OK_FOR_INDEX_P2 (REGNO (X), 1) || \ ++ REGNO(X) >= FIRST_PSEUDO_REGISTER) ++ ++#define CLASS_MAX_NREGS(CLASS, MODE) \ ++ ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) \ ++ / UNITS_PER_WORD) ++ ++ ++#define SMALL_INT(X) ((unsigned HOST_WIDE_INT) ((X) + 0x8000) < 0x10000) ++#define SMALL_INT_UNSIGNED(X) ((unsigned HOST_WIDE_INT) (X) < 0x10000) ++#define UPPER16_INT(X) (((X) & 0xffff) == 0) ++#define SHIFT_INT(X) ((X) >= 0 && (X) <= 31) ++#define RDWRCTL_INT(X) ((X) >= 0 && (X) <= 31) ++#define CUSTOM_INSN_OPCODE(X) ((X) >= 0 && (X) <= 255) ++ ++#define CONST_OK_FOR_LETTER_P(VALUE, C) \ ++ ( \ ++ (C) == 'I' ? SMALL_INT (VALUE) : \ ++ (C) == 'J' ? SMALL_INT_UNSIGNED (VALUE) : \ ++ (C) == 'K' ? UPPER16_INT (VALUE) : \ ++ (C) == 'L' ? SHIFT_INT (VALUE) : \ ++ (C) == 'M' ? (VALUE) == 0 : \ ++ (C) == 'N' ? CUSTOM_INSN_OPCODE (VALUE) : \ ++ (C) == 'O' ? RDWRCTL_INT (VALUE) : \ ++ 0) ++ ++#define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) 0 ++ ++#define PREFERRED_RELOAD_CLASS(X, CLASS) \ ++ ((CLASS) == NO_REGS ? GENERAL_REGS : (CLASS)) ++ ++#define CONSTRAINT_LEN(C, STR) \ ++ ((C) == 'D' ? 3 : DEFAULT_CONSTRAINT_LEN ((C), (STR))) ++ ++/* 'S' matches immediates which are in small data ++ and therefore can be added to gp to create a ++ 32-bit value. */ ++#define EXTRA_CONSTRAINT(VALUE, C) \ ++ ((C) == 'S' \ ++ && (GET_CODE (VALUE) == SYMBOL_REF) \ ++ && SYMBOL_REF_IN_NIOS2_SMALL_DATA_P (VALUE)) ++ ++ ++ ++ ++/* Say that the epilogue uses the return address register. Note that ++ in the case of sibcalls, the values "used by the epilogue" are ++ considered live at the start of the called function. */ ++#define EPILOGUE_USES(REGNO) ((REGNO) == RA_REGNO) ++ ++ ++/********************************** ++ * Trampolines for Nested Functions ++ ***********************************/ ++ ++#define TRAMPOLINE_TEMPLATE(FILE) \ ++ error ("trampolines not yet implemented") ++#define TRAMPOLINE_SIZE 20 ++#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \ ++ error ("trampolines not yet implemented") ++ ++/*************************** ++ * Stack Layout and Calling Conventions ++ ***************************/ ++ ++/* ------------------ * ++ * Basic Stack Layout ++ * ------------------ */ ++ ++/* The downward variants are used by the compiler, ++ the upward ones serve as documentation */ ++#define STACK_GROWS_DOWNWARD ++#define FRAME_GROWS_UPWARD ++#define ARGS_GROW_UPWARD ++ ++#define STARTING_FRAME_OFFSET 0 ++#define FIRST_PARM_OFFSET(FUNDECL) 0 ++ ++/* Before the prologue, RA lives in r31. */ ++#define INCOMING_RETURN_ADDR_RTX gen_rtx_REG (VOIDmode, RA_REGNO) ++#define RETURN_ADDR_RTX(C,F) nios2_get_return_address (C) ++ ++/* -------------------------------------- * ++ * Registers That Address the Stack Frame ++ * -------------------------------------- */ ++ ++#define STACK_POINTER_REGNUM SP_REGNO ++#define STATIC_CHAIN_REGNUM SC_REGNO ++#define PC_REGNUM PC_REGNO ++#define DWARF_FRAME_RETURN_COLUMN RA_REGNO ++ ++/* The DWARF 2 CFA column which tracks the return address from a ++ signal handler context. */ ++#define SIGNAL_UNWIND_RETURN_COLUMN EA_REGNO ++ ++/* Base register for access to local variables of the function. We ++ pretend that the frame pointer is a non-existent hard register, and ++ then eliminate it to HARD_FRAME_POINTER_REGNUM. */ ++#define FRAME_POINTER_REGNUM FAKE_FP_REGNO ++ ++#define HARD_FRAME_POINTER_REGNUM FP_REGNO ++/* the argumnet pointer needs to always be eliminated ++ so it is set to a fake hard register. */ ++#define ARG_POINTER_REGNUM FAKE_AP_REGNO ++ ++/* The CFA includes the pretend args */ ++#define ARG_POINTER_CFA_OFFSET(FNDECL) \ ++ (gcc_assert ((FNDECL) == current_function_decl), \ ++ FIRST_PARM_OFFSET (FNDECL) + current_function_pretend_args_size) ++ ++/* ----------------------------------------- * ++ * Eliminating Frame Pointer and Arg Pointer ++ * ----------------------------------------- */ ++ ++#define FRAME_POINTER_REQUIRED 0 ++ ++#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 CAN_ELIMINATE(FROM, TO) \ ++ ((TO) == STACK_POINTER_REGNUM ? ! frame_pointer_needed : 1) ++ ++#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \ ++ (OFFSET) = nios2_initial_elimination_offset ((FROM), (TO)) ++ ++/* Treat LOC as a byte offset from the stack pointer and round it up ++ to the next fully-aligned offset. */ ++#define STACK_ALIGN(LOC) \ ++ (((LOC) + ((PREFERRED_STACK_BOUNDARY / 8) - 1)) & \ ++ ~((PREFERRED_STACK_BOUNDARY / 8) - 1)) ++ ++ ++/* ------------------------------ * ++ * Passing Arguments in Registers ++ * ------------------------------ */ ++ ++/* see nios2.c */ ++#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \ ++ (function_arg (&CUM, MODE, TYPE, NAMED)) ++ ++#define FUNCTION_ARG_CALLEE_COPIES(CUM, MODE, TYPE, NAMED) 0 ++ ++typedef struct nios2_args ++{ ++ int regs_used; ++} CUMULATIVE_ARGS; ++ ++/* This is to initialize the above unused CUM data type */ ++#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL, N_NAMED_ARGS) \ ++ (init_cumulative_args (&CUM, FNTYPE, LIBNAME, FNDECL, N_NAMED_ARGS)) ++ ++#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \ ++ (function_arg_advance (&CUM, MODE, TYPE, NAMED)) ++ ++#define FUNCTION_ARG_PADDING(MODE, TYPE) \ ++ (nios2_function_arg_padding_upward ((MODE), (TYPE)) ? upward : downward) ++ ++#define PAD_VARARGS_DOWN \ ++ (FUNCTION_ARG_PADDING (TYPE_MODE (type), type) == downward) ++ ++#define BLOCK_REG_PADDING(MODE, TYPE, FIRST) \ ++ (nios2_block_reg_padding_upward ((MODE), (TYPE), (FIRST)) ? upward : \ ++ downward) ++ ++#define FUNCTION_ARG_REGNO_P(REGNO) \ ++ ((REGNO) >= FIRST_ARG_REGNO && (REGNO) <= LAST_ARG_REGNO) ++ ++/* ----------------------------- * ++ * Generating Code for Profiling ++ * ----------------------------- */ ++ ++ ++#define PROFILE_BEFORE_PROLOGUE ++#define NO_PROFILE_COUNTERS 1 ++#define FUNCTION_PROFILER(FILE, LABELNO) \ ++ function_profiler ((FILE), (LABELNO)) ++ ++/* --------------------------------------- * ++ * Passing Function Arguments on the Stack ++ * --------------------------------------- */ ++ ++#define PUSH_ARGS 0 ++#define ACCUMULATE_OUTGOING_ARGS 1 ++ ++#define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, STACKSIZE) 0 ++ ++/* --------------------------------------- * ++ * How Scalar Function Values Are Returned ++ * --------------------------------------- */ ++ ++#define FUNCTION_VALUE(VALTYPE, FUNC) \ ++ gen_rtx_REG(TYPE_MODE(VALTYPE), FIRST_RETVAL_REGNO) ++ ++#define LIBCALL_VALUE(MODE) \ ++ gen_rtx_REG(MODE, FIRST_RETVAL_REGNO) ++ ++#define FUNCTION_VALUE_REGNO_P(REGNO) ((REGNO) == FIRST_RETVAL_REGNO) ++ ++/* ----------------------------- * ++ * How Large Values Are Returned ++ * ----------------------------- */ ++ ++ ++#define RETURN_IN_MEMORY(TYPE) \ ++ nios2_return_in_memory (TYPE) ++ ++ ++#define STRUCT_VALUE 0 ++ ++#define DEFAULT_PCC_STRUCT_RETURN 0 ++ ++/******************* ++ * Addressing Modes ++ *******************/ ++ ++ ++#define LEGITIMIZE_ADDRESS(X, OLDX, MODE, WIN) \ ++ do \ ++ { \ ++ X = nios2_legitimize_address (X, OLDX, MODE); \ ++ if (memory_address_p (MODE, X)) \ ++ goto WIN; \ ++ } \ ++ while (0) ++ ++#define CONSTANT_ADDRESS_P(X) \ ++ (CONSTANT_P (X) && nios2_legitimate_address (X, Pmode, 0)) ++ ++#define MAX_REGS_PER_ADDRESS 1 ++ ++/* Go to ADDR if X is a valid address. */ ++#ifndef REG_OK_STRICT ++#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \ ++ { \ ++ if (nios2_legitimate_address ((X), (MODE), 0)) \ ++ goto ADDR; \ ++ } ++#else ++#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \ ++ { \ ++ if (nios2_legitimate_address ((X), (MODE), 1)) \ ++ goto ADDR; \ ++ } ++#endif ++ ++#ifndef REG_OK_STRICT ++#define REG_OK_FOR_BASE_P(X) REGNO_OK_FOR_BASE_P2 (REGNO (X), 0) ++#define REG_OK_FOR_INDEX_P(X) REGNO_OK_FOR_INDEX_P2 (REGNO (X), 0) ++#else ++#define REG_OK_FOR_BASE_P(X) REGNO_OK_FOR_BASE_P2 (REGNO (X), 1) ++#define REG_OK_FOR_INDEX_P(X) REGNO_OK_FOR_INDEX_P2 (REGNO (X), 1) ++#endif ++ ++#define LEGITIMATE_CONSTANT_P(X) nios2_legitimate_constant (X) ++ ++/* Nios II has no mode dependent addresses. */ ++#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL) ++ ++/* Set if this has a weak declaration */ ++#define SYMBOL_FLAG_WEAK_DECL (1 << SYMBOL_FLAG_MACH_DEP_SHIFT) ++#define SYMBOL_REF_WEAK_DECL_P(RTX) \ ++ ((SYMBOL_REF_FLAGS (RTX) & SYMBOL_FLAG_WEAK_DECL) != 0) ++ ++ ++/* true if a symbol is both small and not weak. In this case, gp ++ relative access can be used. gp relative access cannot be used in ++ position independent code. gp relative access cannot be used for externally ++ defined symbols, because the compilation unit which defines the symbol may ++ place it in a section that cannot be reached from gp. */ ++#define SYMBOL_REF_IN_NIOS2_SMALL_DATA_P(RTX) \ ++ (!flag_pic && SYMBOL_REF_SMALL_P(RTX) && !SYMBOL_REF_WEAK_DECL_P(RTX) && \ ++ !SYMBOL_REF_EXTERNAL_P(RTX) && SYMBOL_REF_TLS_MODEL(RTX)==0) ++ ++/***************** ++ * Describing Relative Costs of Operations ++ *****************/ ++ ++#define SLOW_BYTE_ACCESS 1 ++ ++/* It is as good to call a constant function address as to call an address ++ kept in a register. ++ ??? Not true anymore really. Now that call cannot address full range ++ of memory callr may need to be used */ ++ ++#define NO_FUNCTION_CSE ++ ++/*************************** ++ * Position Independent Code ++ ***************************/ ++ ++#define PIC_OFFSET_TABLE_REGNUM 22 ++ ++#define LEGITIMATE_PIC_OPERAND_P(X) nios2_legitimate_pic_operand_p (X) ++ ++/***************************************** ++ * Defining the Output Assembler Language ++ *****************************************/ ++ ++/* ------------------------------------------ * ++ * The Overall Framework of an Assembler File ++ * ------------------------------------------ */ ++ ++#define ASM_APP_ON "#APP\n" ++#define ASM_APP_OFF "#NO_APP\n" ++ ++#define ASM_COMMENT_START "# " ++ ++/* ------------------------------- * ++ * Output and Generation of Labels ++ * ------------------------------- */ ++ ++#define GLOBAL_ASM_OP "\t.global\t" ++ ++ ++/* -------------- * ++ * Output of Data ++ * -------------- */ ++ ++/* -------------------------------- * ++ * Assembler Commands for Alignment ++ * -------------------------------- */ ++ ++#define ASM_OUTPUT_ALIGN(FILE, LOG) \ ++ do { \ ++ fprintf ((FILE), "%s%d\n", ALIGN_ASM_OP, (LOG)); \ ++ } while (0) ++ ++ ++/* -------------------------------- * ++ * Output of Assembler Instructions ++ * -------------------------------- */ ++ ++#define REGISTER_NAMES \ ++{ \ ++ "zero", \ ++ "at", \ ++ "r2", \ ++ "r3", \ ++ "r4", \ ++ "r5", \ ++ "r6", \ ++ "r7", \ ++ "r8", \ ++ "r9", \ ++ "r10", \ ++ "r11", \ ++ "r12", \ ++ "r13", \ ++ "r14", \ ++ "r15", \ ++ "r16", \ ++ "r17", \ ++ "r18", \ ++ "r19", \ ++ "r20", \ ++ "r21", \ ++ "r22", \ ++ "r23", \ ++ "et", \ ++ "bt", \ ++ "gp", \ ++ "sp", \ ++ "fp", \ ++ "ta", \ ++ "ba", \ ++ "ra", \ ++ "status", \ ++ "estatus", \ ++ "bstatus", \ ++ "ipri", \ ++ "ecause", \ ++ "pc", \ ++ "fake_fp", \ ++ "fake_ap", \ ++} ++ ++#define ADDITIONAL_REGISTER_NAMES \ ++{ \ ++ {"r0", 0}, \ ++ {"r1", 1}, \ ++ {"r24", 24}, \ ++ {"r25", 25}, \ ++ {"r26", 26}, \ ++ {"r27", 27}, \ ++ {"r28", 28}, \ ++ {"r29", 29}, \ ++ {"r30", 30}, \ ++ {"r31", 31} \ ++} ++ ++ ++#define ASM_OUTPUT_OPCODE(STREAM, PTR)\ ++ (PTR) = asm_output_opcode (STREAM, PTR) ++ ++#define PRINT_OPERAND(STREAM, X, CODE) \ ++ nios2_print_operand (STREAM, X, CODE) ++ ++#define PRINT_OPERAND_ADDRESS(STREAM, X) \ ++ nios2_print_operand_address (STREAM, X) ++ ++#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \ ++do { fputs (integer_asm_op (POINTER_SIZE / BITS_PER_UNIT, TRUE), FILE); \ ++ fprintf (FILE, ".L%u\n", (unsigned) (VALUE)); \ ++ } while (0) ++ ++#define ASM_OUTPUT_ADDR_DIFF_ELT(STREAM, BODY, VALUE, REL)\ ++do { fputs (integer_asm_op (POINTER_SIZE / BITS_PER_UNIT, TRUE), STREAM); \ ++ fprintf (STREAM, ".L%u-.L%u\n", (unsigned) (VALUE), (unsigned) (REL)); \ ++ } while (0) ++ ++ ++/* ------------ * ++ * Label Output ++ * ------------ */ ++ ++ ++/* ---------------------------------------------------- * ++ * Dividing the Output into Sections (Texts, Data, ...) ++ * ---------------------------------------------------- */ ++ ++/* Output before read-only data. */ ++#define TEXT_SECTION_ASM_OP "\t.section\t.text" ++ ++/* Output before writable data. */ ++#define DATA_SECTION_ASM_OP "\t.section\t.data" ++ ++ ++/* Default the definition of "small data" to 8 bytes. */ ++/* ??? How come I can't use HOST_WIDE_INT here? */ ++extern unsigned long nios2_section_threshold; ++#define NIOS2_DEFAULT_GVALUE 8 ++ ++ ++ ++/* 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. */ ++ ++#undef COMMON_ASM_OP ++#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. */ ++ ++#undef ASM_OUTPUT_ALIGNED_LOCAL ++#define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN) \ ++do { \ ++ if ((SIZE) <= nios2_section_threshold) \ ++ named_section (0, ".sbss", 0); \ ++ else \ ++ named_section (0, ".bss", 0); \ ++ ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "object"); \ ++ if (!flag_inhibit_size_directive) \ ++ ASM_OUTPUT_SIZE_DIRECTIVE (FILE, NAME, SIZE); \ ++ ASM_OUTPUT_ALIGN ((FILE), exact_log2((ALIGN) / BITS_PER_UNIT)); \ ++ ASM_OUTPUT_LABEL(FILE, NAME); \ ++ ASM_OUTPUT_SKIP((FILE), (SIZE) ? (SIZE) : 1); \ ++} while (0) ++ ++/* Put the jump tables in .text because when using position independent code, ++ Nios II elf has no relocation that can represent arbitrary differences ++ between symbols in different sections. */ ++#define JUMP_TABLES_IN_TEXT_SECTION 1 ++ ++/* Exception Handling */ ++ ++/* Describe __builtin_eh_return */ ++#define EH_RETURN_STACKADJ_RTX gen_rtx_REG (Pmode, LAST_RETVAL_REGNO) ++#define EH_RETURN_DATA_REGNO(N) ((N) <= (LAST_ARG_REGNO - FIRST_ARG_REGNO) \ ++ ? (N) + FIRST_ARG_REGNO : INVALID_REGNUM) ++#define ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL) \ ++ (!flag_pic ? DW_EH_PE_sdata4 \ ++ /* FIXME: These get expanded to dynamic relocs, which is wrong */ \ ++ /* : !(GLOBAL) ? DW_EH_PE_pcrel | DW_EH_PE_sdata4 */ \ ++ : DW_EH_PE_aligned) ++ ++/*************************** ++ * Miscellaneous Parameters ++ ***************************/ ++ ++#define MOVE_MAX 4 ++ ++#define STORE_FLAG_VALUE 1 ++#define Pmode SImode ++#define FUNCTION_MODE QImode ++ ++#define REGISTER_TARGET_PRAGMAS() nios2_register_target_pragmas () ++ ++#define CASE_VECTOR_MODE Pmode ++ ++#define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1 ++ ++#define LOAD_EXTEND_OP(MODE) (ZERO_EXTEND) ++ ++#define WORD_REGISTER_OPERATIONS +Index: gcc-4.1.2/gcc/config/nios2/nios2.md +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gcc-4.1.2/gcc/config/nios2/nios2.md 2010-06-30 08:50:26.000000000 +0200 +@@ -0,0 +1,3012 @@ ++;; NOT ASSIGNED TO FSF. COPYRIGHT ALTERA. ++;; ++;; Machine Description for Altera NIOS 2G NIOS2 version. ++;; Copyright (C) 2005 Altera ++;; Contributed by Jonah Graham (jgraham@altera.com) and ++;; Will Reece (wreece@altera.com). ++;; ++;; This file is part of GNU CC. ++;; ++;; GNU CC is free software; you can 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. ++;; ++;; GNU CC is distributed in the hope that it will be useful, ++;; but WITHOUT ANY WARRANTY; without even the implied warranty of ++;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++;; GNU General Public License for more details. ++;; ++;; You should have received a copy of the GNU General Public License ++;; along with GNU CC; see the file COPYING. If not, write to ++;; the Free Software Foundation, 59 Temple Place - Suite 330, ++;; Boston, MA 02111-1307, USA. */ ++ ++ ++ ++ ++;***************************************************************************** ++;* ++;* constraint strings ++;* ++;***************************************************************************** ++; ++; We use the following constraint letters for constants ++; ++; I: -32768 to -32767 ++; J: 0 to 65535 ++; K: $nnnn0000 for some nnnn ++; L: 0 to 31 (for shift counts) ++; M: 0 ++; N: 0 to 255 (for custom instruction numbers) ++; O: 0 to 31 (for control register numbers) ++; ++; We use the following built-in register classes: ++; ++; r: general purpose register (r0..r31) ++; m: memory operand ++; ++; Plus, we define the following constraint strings: ++; ++; S: symbol that is in the "small data" area ++; Dnn: Dnn_REG (just rnn) ++; ++ ++ ++ ++;***************************************************************************** ++;* ++;* constants ++;* ++;***************************************************************************** ++(define_constants [ ++ (UNSPEC_BLOCKAGE 0) ++ (UNSPEC_LDBIO 1) ++ (UNSPEC_LDBUIO 2) ++ (UNSPEC_LDHIO 3) ++ (UNSPEC_LDHUIO 4) ++ (UNSPEC_LDWIO 5) ++ (UNSPEC_STBIO 6) ++ (UNSPEC_STHIO 7) ++ (UNSPEC_STWIO 8) ++ (UNSPEC_SYNC 9) ++ (UNSPEC_WRCTL 10) ++ (UNSPEC_RDCTL 11) ++ (UNSPEC_TRAP 12) ++ (UNSPEC_STACK_OVERFLOW_DETECT_AND_TRAP 13) ++ (UNSPEC_FCOSS 14) ++ (UNSPEC_FCOSD 15) ++ (UNSPEC_FSINS 16) ++ (UNSPEC_FSIND 17) ++ (UNSPEC_FTANS 18) ++ (UNSPEC_FTAND 19) ++ (UNSPEC_FATANS 20) ++ (UNSPEC_FATAND 21) ++ (UNSPEC_FEXPS 22) ++ (UNSPEC_FEXPD 23) ++ (UNSPEC_FLOGS 24) ++ (UNSPEC_FLOGD 25) ++ (UNSPEC_FWRX 26) ++ (UNSPEC_FWRY 27) ++ (UNSPEC_FRDXLO 28) ++ (UNSPEC_FRDXHI 29) ++ (UNSPEC_FRDY 30) ++ (UNSPEC_LOAD_GOT_REGISTER 31) ++ (UNSPEC_PIC_SYM 32) ++ (UNSPEC_PIC_CALL_SYM 33) ++ (UNSPEC_TLS 34) ++ (UNSPEC_TLS_LDM 35) ++ (UNSPEC_LOAD_TLS_IE 36) ++ (UNSPEC_ADD_TLS_LE 37) ++ (UNSPEC_ADD_TLS_GD 38) ++ (UNSPEC_ADD_TLS_LDM 39) ++ (UNSPEC_ADD_TLS_LDO 40) ++ ++ (UNSPEC_EH_RETURN 41) ++ ++ ;; Note that values 100..151 are used by custom instructions, see below. ++]) ++ ++ ++ ++;***************************************************************************** ++;* ++;* instruction scheduler ++;* ++;***************************************************************************** ++ ++; No schedule info is currently available, using an assumption that no ++; instruction can use the results of the previous instruction without ++; incuring a stall. ++ ++; length of an instruction (in bytes) ++(define_attr "length" "" (const_int 4)) ++(define_attr "type" ++ "unknown,complex,control,alu,cond_alu,st,ld,shift,mul,div,custom" ++ (const_string "complex")) ++ ++(define_asm_attributes ++ [(set_attr "length" "4") ++ (set_attr "type" "complex")]) ++ ++(define_automaton "nios2") ++(automata_option "v") ++;(automata_option "no-minimization") ++(automata_option "ndfa") ++ ++; The nios2 pipeline is fairly straightforward for the fast model. ++; Every alu operation is pipelined so that an instruction can ++; be issued every cycle. However, there are still potential ++; stalls which this description tries to deal with. ++ ++(define_cpu_unit "cpu" "nios2") ++ ++(define_insn_reservation "complex" 1 ++ (eq_attr "type" "complex") ++ "cpu") ++ ++(define_insn_reservation "control" 1 ++ (eq_attr "type" "control") ++ "cpu") ++ ++(define_insn_reservation "alu" 1 ++ (eq_attr "type" "alu") ++ "cpu") ++ ++(define_insn_reservation "cond_alu" 1 ++ (eq_attr "type" "cond_alu") ++ "cpu") ++ ++(define_insn_reservation "st" 1 ++ (eq_attr "type" "st") ++ "cpu") ++ ++(define_insn_reservation "custom" 1 ++ (eq_attr "type" "custom") ++ "cpu") ++ ++; shifts, muls and lds have three cycle latency ++(define_insn_reservation "ld" 3 ++ (eq_attr "type" "ld") ++ "cpu") ++ ++(define_insn_reservation "shift" 3 ++ (eq_attr "type" "shift") ++ "cpu") ++ ++(define_insn_reservation "mul" 3 ++ (eq_attr "type" "mul") ++ "cpu") ++ ++(define_insn_reservation "div" 1 ++ (eq_attr "type" "div") ++ "cpu") ++ ++ ++;***************************************************************************** ++;* ++;* MOV Instructions ++;* ++;***************************************************************************** ++ ++(define_expand "movqi" ++ [(set (match_operand:QI 0 "nonimmediate_operand" "") ++ (match_operand:QI 1 "general_operand" ""))] ++ "" ++{ ++ if (nios2_emit_move_sequence (operands, QImode)) ++ DONE; ++}) ++ ++(define_insn "movqi_internal" ++ [(set (match_operand:QI 0 "nonimmediate_operand" "=m, r,r, r") ++ (match_operand:QI 1 "general_operand" "rM,m,rM,I"))] ++ "(register_operand (operands[0], QImode) ++ || reg_or_0_operand (operands[1], QImode))" ++ "@ ++ stb%o0\\t%z1, %0 ++ ldbu%o1\\t%0, %1 ++ mov\\t%0, %z1 ++ movi\\t%0, %1" ++ [(set_attr "type" "st,ld,alu,alu")]) ++ ++(define_insn "ldbio" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec_volatile:SI [(const_int 0)] UNSPEC_LDBIO)) ++ (use (match_operand:SI 1 "memory_operand" "m"))] ++ "" ++ "ldbio\\t%0, %1" ++ [(set_attr "type" "ld")]) ++ ++(define_insn "ldbuio" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec_volatile:SI [(const_int 0)] UNSPEC_LDBUIO)) ++ (use (match_operand:SI 1 "memory_operand" "m"))] ++ "" ++ "ldbuio\\t%0, %1" ++ [(set_attr "type" "ld")]) ++ ++(define_insn "stbio" ++ [(set (match_operand:SI 0 "memory_operand" "=m") ++ (match_operand:SI 1 "reg_or_0_operand" "rM")) ++ (unspec_volatile:SI [(const_int 0)] UNSPEC_STBIO)] ++ "" ++ "stbio\\t%z1, %0" ++ [(set_attr "type" "st")]) ++ ++ ++(define_expand "movhi" ++ [(set (match_operand:HI 0 "nonimmediate_operand" "") ++ (match_operand:HI 1 "general_operand" ""))] ++ "" ++{ ++ if (nios2_emit_move_sequence (operands, HImode)) ++ DONE; ++}) ++ ++(define_insn "movhi_internal" ++ [(set (match_operand:HI 0 "nonimmediate_operand" "=m, r,r, r,r") ++ (match_operand:HI 1 "general_operand" "rM,m,rM,I,J"))] ++ "(register_operand (operands[0], HImode) ++ || reg_or_0_operand (operands[1], HImode))" ++ "@ ++ sth%o0\\t%z1, %0 ++ ldhu%o1\\t%0, %1 ++ mov\\t%0, %z1 ++ movi\\t%0, %1 ++ movui\\t%0, %1" ++ [(set_attr "type" "st,ld,alu,alu,alu")]) ++ ++(define_insn "ldhio" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec_volatile:SI [(const_int 0)] UNSPEC_LDHIO)) ++ (use (match_operand:SI 1 "memory_operand" "m"))] ++ "" ++ "ldhio\\t%0, %1" ++ [(set_attr "type" "ld")]) ++ ++(define_insn "ldhuio" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec_volatile:SI [(const_int 0)] UNSPEC_LDHUIO)) ++ (use (match_operand:SI 1 "memory_operand" "m"))] ++ "" ++ "ldhuio\\t%0, %1" ++ [(set_attr "type" "ld")]) ++ ++(define_insn "sthio" ++ [(set (match_operand:SI 0 "memory_operand" "=m") ++ (match_operand:SI 1 "reg_or_0_operand" "rM")) ++ (unspec_volatile:SI [(const_int 0)] UNSPEC_STHIO)] ++ "" ++ "sthio\\t%z1, %0" ++ [(set_attr "type" "st")]) ++ ++(define_expand "movsi" ++ [(set (match_operand:SI 0 "nonimmediate_operand" "") ++ (match_operand:SI 1 "general_operand" ""))] ++ "" ++{ ++ if (nios2_emit_move_sequence (operands, SImode)) ++ DONE; ++}) ++ ++(define_insn "movsi_internal" ++ [(set (match_operand:SI 0 "nonimmediate_operand" "=m, r,r, r,r,r,r") ++ (match_operand:SI 1 "general_operand" "rM,m,rM,I,J,S,i"))] ++ "(register_operand (operands[0], SImode) ++ || reg_or_0_operand (operands[1], SImode))" ++ "@ ++ stw%o0\\t%z1, %0 ++ ldw%o1\\t%0, %1 ++ mov\\t%0, %z1 ++ movi\\t%0, %1 ++ movui\\t%0, %1 ++ addi\\t%0, gp, %%gprel(%1) ++ movhi\\t%0, %H1\;addi\\t%0, %0, %L1" ++ [(set_attr "type" "st,ld,alu,alu,alu,alu,alu")]) ++ ++(define_insn "ldwio" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec_volatile:SI [(const_int 0)] UNSPEC_LDWIO)) ++ (use (match_operand:SI 1 "memory_operand" "m"))] ++ "" ++ "ldwio\\t%0, %1" ++ [(set_attr "type" "ld")]) ++ ++(define_insn "stwio" ++ [(set (match_operand:SI 0 "memory_operand" "=m") ++ (match_operand:SI 1 "reg_or_0_operand" "rM")) ++ (unspec_volatile:SI [(const_int 0)] UNSPEC_STWIO)] ++ "" ++ "stwio\\t%z1, %0" ++ [(set_attr "type" "st")]) ++ ++ ++ ++;***************************************************************************** ++;* ++;* zero extension ++;* ++;***************************************************************************** ++ ++ ++(define_insn "zero_extendhisi2" ++ [(set (match_operand:SI 0 "register_operand" "=r,r") ++ (zero_extend:SI (match_operand:HI 1 "nonimmediate_operand" "r,m")))] ++ "" ++ "@ ++ andi\\t%0, %1, 0xffff ++ ldhu%o1\\t%0, %1" ++ [(set_attr "type" "alu,ld")]) ++ ++(define_insn "zero_extendqihi2" ++ [(set (match_operand:HI 0 "register_operand" "=r,r") ++ (zero_extend:HI (match_operand:QI 1 "nonimmediate_operand" "r,m")))] ++ "" ++ "@ ++ andi\\t%0, %1, 0xff ++ ldbu%o1\\t%0, %1" ++ [(set_attr "type" "alu,ld")]) ++ ++(define_insn "zero_extendqisi2" ++ [(set (match_operand:SI 0 "register_operand" "=r,r") ++ (zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "r,m")))] ++ "" ++ "@ ++ andi\\t%0, %1, 0xff ++ ldbu%o1\\t%0, %1" ++ [(set_attr "type" "alu,ld")]) ++ ++ ++ ++;***************************************************************************** ++;* ++;* sign extension ++;* ++;***************************************************************************** ++(define_expand "extendhisi2" ++ [(set (match_operand:SI 0 "register_operand" "") ++ (sign_extend:SI (match_operand:HI 1 "nonimmediate_operand" "")))] ++ "" ++{ ++}) ++ ++(define_insn "*extendhisi2" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (sign_extend:SI (match_operand:HI 1 "register_operand" "r")))] ++ "" ++ "#") ++ ++(define_split ++ [(set (match_operand:SI 0 "register_operand" "") ++ (sign_extend:SI (match_operand:HI 1 "register_operand" "")))] ++ "reload_completed" ++ [(set (match_dup 0) ++ (and:SI (match_dup 1) (const_int 65535))) ++ (set (match_dup 0) ++ (xor:SI (match_dup 0) (const_int 32768))) ++ (set (match_dup 0) ++ (plus:SI (match_dup 0) (const_int -32768)))] ++ "operands[1] = gen_lowpart (SImode, operands[1]);") ++ ++(define_insn "extendhisi2_internal" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (sign_extend:SI (match_operand:HI 1 "memory_operand" "m")))] ++ "" ++ "ldh%o1\\t%0, %1" ++ [(set_attr "type" "ld")]) ++ ++ ++(define_expand "extendqihi2" ++ [(set (match_operand:HI 0 "register_operand" "") ++ (sign_extend:HI (match_operand:QI 1 "nonimmediate_operand" "")))] ++ "" ++{ ++}) ++ ++(define_insn "*extendqihi2" ++ [(set (match_operand:HI 0 "register_operand" "=r") ++ (sign_extend:HI (match_operand:QI 1 "register_operand" "r")))] ++ "" ++ "#") ++ ++(define_split ++ [(set (match_operand:HI 0 "register_operand" "") ++ (sign_extend:HI (match_operand:QI 1 "register_operand" "")))] ++ "reload_completed" ++ [(set (match_dup 0) ++ (and:SI (match_dup 1) (const_int 255))) ++ (set (match_dup 0) ++ (xor:SI (match_dup 0) (const_int 128))) ++ (set (match_dup 0) ++ (plus:SI (match_dup 0) (const_int -128)))] ++ "operands[0] = gen_lowpart (SImode, operands[0]); ++ operands[1] = gen_lowpart (SImode, operands[1]);") ++ ++ ++ ++(define_insn "extendqihi2_internal" ++ [(set (match_operand:HI 0 "register_operand" "=r") ++ (sign_extend:HI (match_operand:QI 1 "memory_operand" "m")))] ++ "" ++ "ldb%o1\\t%0, %1" ++ [(set_attr "type" "ld")]) ++ ++ ++(define_expand "extendqisi2" ++ [(set (match_operand:SI 0 "register_operand" "") ++ (sign_extend:SI (match_operand:QI 1 "nonimmediate_operand" "")))] ++ "" ++{ ++}) ++ ++(define_insn "*extendqisi2" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (sign_extend:SI (match_operand:QI 1 "register_operand" "r")))] ++ "" ++ "#") ++ ++(define_split ++ [(set (match_operand:SI 0 "register_operand" "") ++ (sign_extend:SI (match_operand:QI 1 "register_operand" "")))] ++ "reload_completed" ++ [(set (match_dup 0) ++ (and:SI (match_dup 1) (const_int 255))) ++ (set (match_dup 0) ++ (xor:SI (match_dup 0) (const_int 128))) ++ (set (match_dup 0) ++ (plus:SI (match_dup 0) (const_int -128)))] ++ "operands[1] = gen_lowpart (SImode, operands[1]);") ++ ++(define_insn "extendqisi2_insn" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (sign_extend:SI (match_operand:QI 1 "memory_operand" "m")))] ++ "" ++ "ldb%o1\\t%0, %1" ++ [(set_attr "type" "ld")]) ++ ++ ++ ++ ++;***************************************************************************** ++;* ++;* Arithmetic Operations ++;* ++;***************************************************************************** ++ ++(define_insn "addsi3" ++ [(set (match_operand:SI 0 "register_operand" "=r,r") ++ (plus:SI (match_operand:SI 1 "register_operand" "%r,r") ++ (match_operand:SI 2 "arith_operand" "r,I")))] ++ "" ++ "add%i2\\t%0, %1, %z2" ++ [(set_attr "type" "alu")]) ++ ++(define_insn "addsf3" ++ [(set (match_operand:SF 0 "register_operand" "=r") ++ (plus:SF (match_operand:SF 1 "register_operand" "%r") ++ (match_operand:SF 2 "register_operand" "r")))] ++ "nios2_fpu_insns[nios2_fpu_addsf3].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_addsf3].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "adddf3" ++ [(set (match_operand:DF 0 "register_operand" "=r") ++ (plus:DF (match_operand:DF 1 "register_operand" "%r") ++ (match_operand:DF 2 "register_operand" "r")))] ++ "nios2_fpu_insns[nios2_fpu_adddf3].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_adddf3].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "subsi3" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (minus:SI (match_operand:SI 1 "reg_or_0_operand" "rM") ++ (match_operand:SI 2 "register_operand" "r")))] ++ "" ++ "sub\\t%0, %z1, %2" ++ [(set_attr "type" "alu")]) ++ ++(define_insn "subsf3" ++ [(set (match_operand:SF 0 "register_operand" "=r") ++ (minus:SF (match_operand:SF 1 "register_operand" "r") ++ (match_operand:SF 2 "register_operand" "r")))] ++ "nios2_fpu_insns[nios2_fpu_subsf3].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_subsf3].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "subdf3" ++ [(set (match_operand:DF 0 "register_operand" "=r") ++ (minus:DF (match_operand:DF 1 "register_operand" "r") ++ (match_operand:DF 2 "register_operand" "r")))] ++ "nios2_fpu_insns[nios2_fpu_subdf3].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_subdf3].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "mulsi3" ++ [(set (match_operand:SI 0 "register_operand" "=r,r") ++ (mult:SI (match_operand:SI 1 "register_operand" "r,r") ++ (match_operand:SI 2 "arith_operand" "r,I")))] ++ "TARGET_HAS_MUL" ++ "mul%i2\\t%0, %1, %z2" ++ [(set_attr "type" "mul")]) ++ ++(define_insn "mulsf3" ++ [(set (match_operand:SF 0 "register_operand" "=r") ++ (mult:SF (match_operand:SF 1 "register_operand" "%r") ++ (match_operand:SF 2 "register_operand" "r")))] ++ "nios2_fpu_insns[nios2_fpu_mulsf3].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_mulsf3].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "muldf3" ++ [(set (match_operand:DF 0 "register_operand" "=r") ++ (mult:DF (match_operand:DF 1 "register_operand" "%r") ++ (match_operand:DF 2 "register_operand" "r")))] ++ "nios2_fpu_insns[nios2_fpu_muldf3].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_muldf3].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_expand "divsi3" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (div:SI (match_operand:SI 1 "register_operand" "r") ++ (match_operand:SI 2 "register_operand" "r")))] ++ "" ++{ ++ if (!TARGET_HAS_DIV) ++ { ++ if (!TARGET_FAST_SW_DIV) ++ FAIL; ++ else ++ { ++ if (nios2_emit_expensive_div (operands, SImode)) ++ DONE; ++ } ++ } ++}) ++ ++(define_insn "divsi3_insn" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (div:SI (match_operand:SI 1 "register_operand" "r") ++ (match_operand:SI 2 "register_operand" "r")))] ++ "TARGET_HAS_DIV" ++ "div\\t%0, %1, %2" ++ [(set_attr "type" "div")]) ++ ++(define_insn "divsf3" ++ [(set (match_operand:SF 0 "register_operand" "=r") ++ (div:SF (match_operand:SF 1 "register_operand" "r") ++ (match_operand:SF 2 "register_operand" "r")))] ++ "nios2_fpu_insns[nios2_fpu_divsf3].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_divsf3].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "divdf3" ++ [(set (match_operand:DF 0 "register_operand" "=r") ++ (div:DF (match_operand:DF 1 "register_operand" "r") ++ (match_operand:DF 2 "register_operand" "r")))] ++ "nios2_fpu_insns[nios2_fpu_divdf3].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_divdf3].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "udivsi3" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (udiv:SI (match_operand:SI 1 "register_operand" "r") ++ (match_operand:SI 2 "register_operand" "r")))] ++ "TARGET_HAS_DIV" ++ "divu\\t%0, %1, %2" ++ [(set_attr "type" "div")]) ++ ++(define_insn "smulsi3_highpart" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (truncate:SI ++ (lshiftrt:DI ++ (mult:DI (sign_extend:DI (match_operand:SI 1 "register_operand" "r")) ++ (sign_extend:DI (match_operand:SI 2 "register_operand" "r"))) ++ (const_int 32))))] ++ "TARGET_HAS_MULX" ++ "mulxss\\t%0, %1, %2" ++ [(set_attr "type" "mul")]) ++ ++(define_insn "umulsi3_highpart" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (truncate:SI ++ (lshiftrt:DI ++ (mult:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "r")) ++ (zero_extend:DI (match_operand:SI 2 "register_operand" "r"))) ++ (const_int 32))))] ++ "TARGET_HAS_MULX" ++ "mulxuu\\t%0, %1, %2" ++ [(set_attr "type" "mul")]) ++ ++ ++(define_expand "mulsidi3_little_endian" ++ [(set (subreg:SI (match_operand:DI 0 "register_operand" "") 0) ++ (mult:SI (match_operand:SI 1 "register_operand" "") ++ (match_operand:SI 2 "register_operand" ""))) ++ (set (subreg:SI (match_dup 0) 4) ++ (truncate:SI (lshiftrt:DI (mult:DI (sign_extend:DI (match_dup 1)) ++ (sign_extend:DI (match_dup 2))) ++ (const_int 32))))] ++ "TARGET_HAS_MULX && !WORDS_BIG_ENDIAN" ++ "") ++ ++(define_expand "mulsidi3_big_endian" ++ [(set (subreg:SI (match_operand:DI 0 "register_operand" "") 4) ++ (mult:SI (match_operand:SI 1 "register_operand" "") ++ (match_operand:SI 2 "register_operand" ""))) ++ (set (subreg:SI (match_dup 0) 0) ++ (truncate:SI (lshiftrt:DI (mult:DI (sign_extend:DI (match_dup 1)) ++ (sign_extend:DI (match_dup 2))) ++ (const_int 32))))] ++ "TARGET_HAS_MULX && WORDS_BIG_ENDIAN" ++ "") ++ ++(define_expand "mulsidi3" ++ [(match_operand:DI 0 "register_operand" "") ++ (match_operand:SI 1 "register_operand" "") ++ (match_operand:SI 2 "register_operand" "")] ++ "TARGET_HAS_MULX" ++ { ++ if (WORDS_BIG_ENDIAN) ++ { ++ emit_insn (gen_mulsidi3_big_endian (operands[0], ++ operands[1], ++ operands[2])); ++ } ++ else ++ { ++ emit_insn (gen_mulsidi3_little_endian (operands[0], ++ operands[1], ++ operands[2])); ++ } ++ DONE; ++ }) ++ ++(define_expand "umulsidi3_little_endian" ++ [(set (subreg:SI (match_operand:DI 0 "register_operand" "") 0) ++ (mult:SI (match_operand:SI 1 "register_operand" "") ++ (match_operand:SI 2 "register_operand" ""))) ++ (set (subreg:SI (match_dup 0) 4) ++ (truncate:SI (lshiftrt:DI (mult:DI (zero_extend:DI (match_dup 1)) ++ (zero_extend:DI (match_dup 2))) ++ (const_int 32))))] ++ "TARGET_HAS_MULX && !WORDS_BIG_ENDIAN" ++ "") ++ ++(define_expand "umulsidi3_big_endian" ++ [(set (subreg:SI (match_operand:DI 0 "register_operand" "") 4) ++ (mult:SI (match_operand:SI 1 "register_operand" "") ++ (match_operand:SI 2 "register_operand" ""))) ++ (set (subreg:SI (match_dup 0) 0) ++ (truncate:SI (lshiftrt:DI (mult:DI (zero_extend:DI (match_dup 1)) ++ (zero_extend:DI (match_dup 2))) ++ (const_int 32))))] ++ "TARGET_HAS_MULX && WORDS_BIG_ENDIAN" ++ "") ++ ++(define_expand "umulsidi3" ++ [(match_operand:DI 0 "register_operand" "") ++ (match_operand:SI 1 "register_operand" "") ++ (match_operand:SI 2 "register_operand" "")] ++ "TARGET_HAS_MULX" ++ { ++ if (WORDS_BIG_ENDIAN) ++ { ++ emit_insn (gen_umulsidi3_big_endian (operands[0], ++ operands[1], ++ operands[2])); ++ } ++ else ++ { ++ emit_insn (gen_umulsidi3_little_endian (operands[0], ++ operands[1], ++ operands[2])); ++ } ++ DONE; ++ }) ++ ++ ++;***************************************************************************** ++;* ++;* Negate and ones complement ++;* ++;***************************************************************************** ++ ++(define_insn "negsi2" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (neg:SI (match_operand:SI 1 "register_operand" "r")))] ++ "" ++{ ++ operands[2] = const0_rtx; ++ return "sub\\t%0, %z2, %1"; ++} ++ [(set_attr "type" "alu")]) ++ ++(define_insn "negsf2" ++ [(set (match_operand:SF 0 "register_operand" "=r") ++ (neg:SF (match_operand:SF 1 "register_operand" "r")))] ++ "nios2_fpu_insns[nios2_fpu_negsf2].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_negsf2].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "negdf2" ++ [(set (match_operand:DF 0 "register_operand" "=r") ++ (neg:DF (match_operand:DF 1 "register_operand" "r")))] ++ "nios2_fpu_insns[nios2_fpu_negdf2].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_negdf2].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "one_cmplsi2" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (not:SI (match_operand:SI 1 "register_operand" "r")))] ++ "" ++{ ++ operands[2] = const0_rtx; ++ return "nor\\t%0, %z2, %1"; ++} ++ [(set_attr "type" "alu")]) ++ ++ ++;***************************************************************************** ++;* ++;* Miscellaneous floating point ++;* ++;***************************************************************************** ++(define_insn "nios2_fwrx" ++ [(unspec_volatile [(match_operand:DF 0 "register_operand" "r")] UNSPEC_FWRX)] ++ "nios2_fpu_insns[nios2_fpu_nios2_fwrx].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_nios2_fwrx].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "nios2_fwry" ++ [(unspec_volatile [(match_operand:SF 0 "register_operand" "r")] UNSPEC_FWRY)] ++ "nios2_fpu_insns[nios2_fpu_nios2_fwry].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_nios2_fwry].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "nios2_frdxlo" ++ [(set (match_operand:SF 0 "register_operand" "=r") ++ (unspec_volatile:SF [(const_int 0)] UNSPEC_FRDXLO))] ++ "nios2_fpu_insns[nios2_fpu_nios2_frdxlo].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_nios2_frdxlo].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "nios2_frdxhi" ++ [(set (match_operand:SF 0 "register_operand" "=r") ++ (unspec_volatile:SF [(const_int 0)] UNSPEC_FRDXHI))] ++ "nios2_fpu_insns[nios2_fpu_nios2_frdxhi].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_nios2_frdxhi].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "nios2_frdy" ++ [(set (match_operand:SF 0 "register_operand" "=r") ++ (unspec_volatile:SF [(const_int 0)] UNSPEC_FRDY))] ++ "nios2_fpu_insns[nios2_fpu_nios2_frdy].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_nios2_frdy].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "minsf3" ++ [(set (match_operand:SF 0 "register_operand" "=r") ++ (if_then_else:SF (lt:SF (match_operand:SF 1 "register_operand" "%r") ++ (match_operand:SF 2 "register_operand" "r")) ++ (match_dup 1) ++ (match_dup 2)))] ++ "nios2_fpu_insns[nios2_fpu_minsf3].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_minsf3].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "mindf3" ++ [(set (match_operand:DF 0 "register_operand" "=r") ++ (if_then_else:DF (lt:DF (match_operand:DF 1 "register_operand" "%r") ++ (match_operand:DF 2 "register_operand" "r")) ++ (match_dup 1) ++ (match_dup 2)))] ++ "nios2_fpu_insns[nios2_fpu_mindf3].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_mindf3].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "maxsf3" ++ [(set (match_operand:SF 0 "register_operand" "=r") ++ (if_then_else:SF (lt:SF (match_operand:SF 1 "register_operand" "%r") ++ (match_operand:SF 2 "register_operand" "r")) ++ (match_dup 2) ++ (match_dup 1)))] ++ "nios2_fpu_insns[nios2_fpu_maxsf3].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_maxsf3].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "maxdf3" ++ [(set (match_operand:DF 0 "register_operand" "=r") ++ (if_then_else:DF (lt:DF (match_operand:DF 1 "register_operand" "%r") ++ (match_operand:DF 2 "register_operand" "r")) ++ (match_dup 2) ++ (match_dup 1)))] ++ "nios2_fpu_insns[nios2_fpu_maxdf3].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_maxdf3].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "abssf2" ++ [(set (match_operand:SF 0 "register_operand" "=r") ++ (abs:SF (match_operand:SF 1 "register_operand" "r")))] ++ "nios2_fpu_insns[nios2_fpu_abssf2].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_abssf2].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "absdf2" ++ [(set (match_operand:DF 0 "register_operand" "=r") ++ (abs:DF (match_operand:DF 1 "register_operand" "r")))] ++ "nios2_fpu_insns[nios2_fpu_absdf2].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_absdf2].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "sqrtsf2" ++ [(set (match_operand:SF 0 "register_operand" "=r") ++ (sqrt:SF (match_operand:SF 1 "register_operand" "r")))] ++ "nios2_fpu_insns[nios2_fpu_sqrtsf2].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_sqrtsf2].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "sqrtdf2" ++ [(set (match_operand:DF 0 "register_operand" "=r") ++ (sqrt:DF (match_operand:DF 1 "register_operand" "r")))] ++ "nios2_fpu_insns[nios2_fpu_sqrtdf2].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_sqrtdf2].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "cossf2" ++ [(set (match_operand:SF 0 "register_operand" "=r") ++ (unspec:SF [(match_operand:SF 1 "register_operand" "r")] UNSPEC_FCOSS))] ++ "nios2_fpu_insns[nios2_fpu_cossf2].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_cossf2].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "cosdf2" ++ [(set (match_operand:DF 0 "register_operand" "=r") ++ (unspec:DF [(match_operand:DF 1 "register_operand" "r")] UNSPEC_FCOSD))] ++ "nios2_fpu_insns[nios2_fpu_cosdf2].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_cosdf2].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "sinsf2" ++ [(set (match_operand:SF 0 "register_operand" "=r") ++ (unspec:SF [(match_operand:SF 1 "register_operand" "r")] UNSPEC_FSINS))] ++ "nios2_fpu_insns[nios2_fpu_sinsf2].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_sinsf2].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "sindf2" ++ [(set (match_operand:DF 0 "register_operand" "=r") ++ (unspec:DF [(match_operand:DF 1 "register_operand" "r")] UNSPEC_FSIND))] ++ "nios2_fpu_insns[nios2_fpu_sindf2].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_sindf2].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "tansf2" ++ [(set (match_operand:SF 0 "register_operand" "=r") ++ (unspec:SF [(match_operand:SF 1 "register_operand" "r")] UNSPEC_FTANS))] ++ "nios2_fpu_insns[nios2_fpu_tansf2].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_tansf2].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "tandf2" ++ [(set (match_operand:DF 0 "register_operand" "=r") ++ (unspec:DF [(match_operand:DF 1 "register_operand" "r")] UNSPEC_FTAND))] ++ "nios2_fpu_insns[nios2_fpu_tandf2].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_tandf2].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "atansf2" ++ [(set (match_operand:SF 0 "register_operand" "=r") ++ (unspec:SF [(match_operand:SF 1 "register_operand" "r")] UNSPEC_FATANS))] ++ "nios2_fpu_insns[nios2_fpu_atansf2].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_atansf2].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "atandf2" ++ [(set (match_operand:DF 0 "register_operand" "=r") ++ (unspec:DF [(match_operand:DF 1 "register_operand" "r")] UNSPEC_FATAND))] ++ "nios2_fpu_insns[nios2_fpu_atandf2].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_atandf2].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "expsf2" ++ [(set (match_operand:SF 0 "register_operand" "=r") ++ (unspec:SF [(match_operand:SF 1 "register_operand" "r")] UNSPEC_FEXPS))] ++ "nios2_fpu_insns[nios2_fpu_expsf2].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_expsf2].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "expdf2" ++ [(set (match_operand:DF 0 "register_operand" "=r") ++ (unspec:DF [(match_operand:DF 1 "register_operand" "r")] UNSPEC_FEXPD))] ++ "nios2_fpu_insns[nios2_fpu_expdf2].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_expdf2].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "logsf2" ++ [(set (match_operand:SF 0 "register_operand" "=r") ++ (unspec:SF [(match_operand:SF 1 "register_operand" "r")] UNSPEC_FLOGS))] ++ "nios2_fpu_insns[nios2_fpu_logsf2].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_logsf2].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "logdf2" ++ [(set (match_operand:DF 0 "register_operand" "=r") ++ (unspec:DF [(match_operand:DF 1 "register_operand" "r")] UNSPEC_FLOGD))] ++ "nios2_fpu_insns[nios2_fpu_logdf2].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_logdf2].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++ ++;***************************************************************************** ++;* ++;* Logical Operantions ++;* ++;***************************************************************************** ++ ++(define_insn "andsi3" ++ [(set (match_operand:SI 0 "register_operand" "=r, r,r") ++ (and:SI (match_operand:SI 1 "register_operand" "%r, r,r") ++ (match_operand:SI 2 "logical_operand" "rM,J,K")))] ++ "" ++ "@ ++ and\\t%0, %1, %z2 ++ and%i2\\t%0, %1, %2 ++ andh%i2\\t%0, %1, %U2" ++ [(set_attr "type" "alu")]) ++ ++(define_insn "iorsi3" ++ [(set (match_operand:SI 0 "register_operand" "=r, r,r") ++ (ior:SI (match_operand:SI 1 "register_operand" "%r, r,r") ++ (match_operand:SI 2 "logical_operand" "rM,J,K")))] ++ "" ++ "@ ++ or\\t%0, %1, %z2 ++ or%i2\\t%0, %1, %2 ++ orh%i2\\t%0, %1, %U2" ++ [(set_attr "type" "alu")]) ++ ++(define_insn "*norsi3" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (and:SI (not:SI (match_operand:SI 1 "register_operand" "%r")) ++ (not:SI (match_operand:SI 2 "reg_or_0_operand" "rM"))))] ++ "" ++ "nor\\t%0, %1, %z2" ++ [(set_attr "type" "alu")]) ++ ++(define_insn "xorsi3" ++ [(set (match_operand:SI 0 "register_operand" "=r, r,r") ++ (xor:SI (match_operand:SI 1 "register_operand" "%r, r,r") ++ (match_operand:SI 2 "logical_operand" "rM,J,K")))] ++ "" ++ "@ ++ xor\\t%0, %1, %z2 ++ xor%i2\\t%0, %1, %2 ++ xorh%i2\\t%0, %1, %U2" ++ [(set_attr "type" "alu")]) ++ ++ ++ ++;***************************************************************************** ++;* ++;* Shifts ++;* ++;***************************************************************************** ++ ++(define_insn "ashlsi3" ++ [(set (match_operand:SI 0 "register_operand" "=r,r") ++ (ashift:SI (match_operand:SI 1 "register_operand" "r,r") ++ (match_operand:SI 2 "shift_operand" "r,L")))] ++ "" ++ ++{ ++ if( GET_CODE ( operands[2] ) == CONST_INT && INTVAL( operands[2] ) == 1 ) ++ return "add\t%0,%1,%1"; ++ return "sll%i2\t%0,%1,%z2"; ++} ++ [(set_attr "type" "shift")]) ++ ++(define_insn "ashrsi3" ++ [(set (match_operand:SI 0 "register_operand" "=r,r") ++ (ashiftrt:SI (match_operand:SI 1 "register_operand" "r,r") ++ (match_operand:SI 2 "shift_operand" "r,L")))] ++ "" ++ "sra%i2\\t%0, %1, %z2" ++ [(set_attr "type" "shift")]) ++ ++(define_insn "lshrsi3" ++ [(set (match_operand:SI 0 "register_operand" "=r,r") ++ (lshiftrt:SI (match_operand:SI 1 "register_operand" "r,r") ++ (match_operand:SI 2 "shift_operand" "r,L")))] ++ "" ++ "srl%i2\\t%0, %1, %z2" ++ [(set_attr "type" "shift")]) ++ ++(define_insn "rotlsi3" ++ [(set (match_operand:SI 0 "register_operand" "=r,r") ++ (rotate:SI (match_operand:SI 1 "register_operand" "r,r") ++ (match_operand:SI 2 "shift_operand" "r,L")))] ++ "" ++ "rol%i2\\t%0, %1, %z2" ++ [(set_attr "type" "shift")]) ++ ++(define_insn "rotrsi3" ++ [(set (match_operand:SI 0 "register_operand" "=r,r") ++ (rotatert:SI (match_operand:SI 1 "register_operand" "r,r") ++ (match_operand:SI 2 "register_operand" "r,r")))] ++ "" ++ "ror\\t%0, %1, %2" ++ [(set_attr "type" "shift")]) ++ ++(define_insn "*shift_mul_constants" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (ashift:SI (mult:SI (match_operand:SI 1 "register_operand" "r") ++ (match_operand:SI 2 "const_int_operand" "I")) ++ (match_operand:SI 3 "const_int_operand" "I")))] ++ "TARGET_HAS_MUL && SMALL_INT (INTVAL (operands[2]) << INTVAL (operands[3]))" ++{ ++ HOST_WIDE_INT mul = INTVAL (operands[2]) << INTVAL (operands[3]); ++ rtx ops[3]; ++ ++ ops[0] = operands[0]; ++ ops[1] = operands[1]; ++ ops[2] = GEN_INT (mul); ++ ++ output_asm_insn ("muli\t%0, %1, %2", ops); ++ return ""; ++} ++ [(set_attr "type" "mul")]) ++ ++ ++ ++ ++;***************************************************************************** ++;* ++;* Converting between floating point and fixed point ++;* ++;***************************************************************************** ++(define_insn "floatsisf2" ++ [(set (match_operand:SF 0 "register_operand" "=r") ++ (float:SF (match_operand:SI 1 "register_operand" "r")))] ++ "nios2_fpu_insns[nios2_fpu_floatsisf2].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_floatsisf2].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "floatsidf2" ++ [(set (match_operand:DF 0 "register_operand" "=r") ++ (float:DF (match_operand:SI 1 "register_operand" "r")))] ++ "nios2_fpu_insns[nios2_fpu_floatsidf2].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_floatsidf2].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "floatunssisf2" ++ [(set (match_operand:SF 0 "register_operand" "=r") ++ (unsigned_float:SF (match_operand:SI 1 "register_operand" "r")))] ++ "nios2_fpu_insns[nios2_fpu_floatunssisf2].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_floatunssisf2].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "floatunssidf2" ++ [(set (match_operand:DF 0 "register_operand" "=r") ++ (unsigned_float:DF (match_operand:SI 1 "register_operand" "r")))] ++ "nios2_fpu_insns[nios2_fpu_floatunssidf2].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_floatunssidf2].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "fixsfsi2" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (fix:SI (match_operand:SF 1 "general_operand" "r")))] ++ "nios2_fpu_insns[nios2_fpu_fixsfsi2].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_fixsfsi2].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "fixdfsi2" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (fix:SI (match_operand:DF 1 "general_operand" "r")))] ++ "nios2_fpu_insns[nios2_fpu_fixdfsi2].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_fixdfsi2].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "fixunssfsi2" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unsigned_fix:SI (match_operand:SF 1 "general_operand" "r")))] ++ "nios2_fpu_insns[nios2_fpu_fixunssfsi2].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_fixunssfsi2].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "fixunsdfsi2" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unsigned_fix:SI (match_operand:DF 1 "general_operand" "r")))] ++ "nios2_fpu_insns[nios2_fpu_fixunsdfsi2].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_fixunsdfsi2].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "extendsfdf2" ++ [(set (match_operand:DF 0 "register_operand" "=r") ++ (float_extend:DF (match_operand:SF 1 "general_operand" "r")))] ++ "nios2_fpu_insns[nios2_fpu_extendsfdf2].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_extendsfdf2].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++(define_insn "truncdfsf2" ++ [(set (match_operand:SF 0 "register_operand" "=r") ++ (float_truncate:SF (match_operand:DF 1 "general_operand" "r")))] ++ "nios2_fpu_insns[nios2_fpu_truncdfsf2].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_truncdfsf2].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++ ++ ++ ++ ++ ++ ++ ++;***************************************************************************** ++;* ++;* Prologue, Epilogue and Return ++;* ++;***************************************************************************** ++ ++(define_expand "prologue" ++ [(const_int 1)] ++ "" ++{ ++ expand_prologue (); ++ DONE; ++}) ++ ++(define_expand "epilogue" ++ [(return)] ++ "" ++{ ++ expand_epilogue (false); ++ DONE; ++}) ++ ++(define_expand "sibcall_epilogue" ++ [(return)] ++ "" ++{ ++ expand_epilogue (true); ++ DONE; ++}) ++ ++(define_insn "return" ++ [(return)] ++ "reload_completed && nios2_can_use_return_insn ()" ++ "ret\\t" ++) ++ ++(define_insn "return_from_epilogue" ++ [(use (match_operand 0 "pmode_register_operand" "")) ++ (return)] ++ "reload_completed" ++ "ret\\t" ++) ++ ++;; Block any insns from being moved before this point, since the ++;; profiling call to mcount can use various registers that aren't ++;; saved or used to pass arguments. ++ ++(define_insn "blockage" ++ [(unspec_volatile [(const_int 0)] UNSPEC_BLOCKAGE)] ++ "" ++ "" ++ [(set_attr "type" "unknown") ++ (set_attr "length" "0")]) ++ ++;; This is used in compiling the unwind routines. ++(define_expand "eh_return" ++ [(use (match_operand 0 "general_operand"))] ++ "" ++{ ++ if (GET_MODE (operands[0]) != Pmode) ++ operands[0] = convert_to_mode (Pmode, operands[0], 0); ++ emit_insn (gen_eh_set_ra (operands[0])); ++ ++ DONE; ++}) ++ ++;; Clobber the return address on the stack. We can't expand this ++;; until we know where it will be put in the stack frame. ++ ++(define_insn "eh_set_ra" ++ [(unspec [(match_operand:SI 0 "register_operand" "r")] UNSPEC_EH_RETURN) ++ (clobber (match_scratch:SI 1 "=&r"))] ++ "" ++ "#") ++ ++(define_split ++ [(unspec [(match_operand 0 "register_operand")] UNSPEC_EH_RETURN) ++ (clobber (match_scratch 1))] ++ "reload_completed" ++ [(const_int 0)] ++{ ++ nios2_set_return_address (operands[0], operands[1]); ++ DONE; ++}) ++ ++ ++;***************************************************************************** ++;* ++;* Jumps and Calls ++;* ++;***************************************************************************** ++ ++(define_insn "indirect_jump" ++ [(set (pc) (match_operand:SI 0 "register_operand" "r"))] ++ "" ++ "jmp\\t%0" ++ [(set_attr "type" "control")]) ++ ++(define_insn "jump" ++ [(set (pc) ++ (label_ref (match_operand 0 "" "")))] ++ "" ++ "br\\t%0" ++ [(set_attr "type" "control")]) ++ ++ ++(define_expand "call" ++ [(parallel [(call (match_operand 0 "" "") ++ (match_operand 1 "" "")) ++ (clobber (reg:SI 31))])] ++ "" ++ { ++ nios2_adjust_call_address (&XEXP (operands[0], 0)); ++ } ++) ++ ++(define_expand "call_value" ++ [(parallel [(set (match_operand 0 "" "") ++ (call (match_operand 1 "" "") ++ (match_operand 2 "" ""))) ++ (clobber (reg:SI 31))])] ++ "" ++ { ++ nios2_adjust_call_address (&XEXP (operands[1], 0)); ++ } ++) ++ ++(define_insn "*call" ++ [(call (mem:QI (match_operand:SI 0 "call_operand" "i,r")) ++ (match_operand 1 "" "")) ++ (clobber (reg:SI 31))] ++ "" ++ "@ ++ call\\t%0 ++ callr\\t%0" ++ [(set_attr "type" "control,control")]) ++ ++(define_insn "*call_value" ++ [(set (match_operand 0 "" "") ++ (call (mem:QI (match_operand:SI 1 "call_operand" "i,r")) ++ (match_operand 2 "" ""))) ++ (clobber (reg:SI 31))] ++ "" ++ "@ ++ call\\t%1 ++ callr\\t%1" ++ [(set_attr "type" "control,control")]) ++ ++(define_expand "sibcall" ++ [(parallel [(call (match_operand 0 "" "") ++ (match_operand 1 "" "")) ++ (return)])] ++ "" ++ { ++ nios2_adjust_call_address (&XEXP (operands[0], 0)); ++ } ++) ++ ++(define_expand "sibcall_value" ++ [(parallel [(set (match_operand 0 "" "") ++ (call (match_operand 1 "" "") ++ (match_operand 2 "" ""))) ++ (return)])] ++ "" ++ { ++ nios2_adjust_call_address (&XEXP (operands[1], 0)); ++ } ++) ++ ++(define_insn "*sibcall" ++ [(call (mem:QI (match_operand:SI 0 "call_operand" "i,j")) ++ (match_operand 1 "" "")) ++ (return)] ++ "" ++ "@ ++ jmpi\\t%0 ++ jmp\\t%0" ++) ++ ++(define_insn "*sibcall_value" ++ [(set (match_operand 0 "register_operand" "") ++ (call (mem:QI (match_operand:SI 1 "call_operand" "i,j")) ++ (match_operand 2 "" ""))) ++ (return)] ++ "" ++ "@ ++ jmpi\\t%1 ++ jmp\\t%1" ++) ++ ++ ++ ++ ++(define_expand "tablejump" ++ [(parallel [(set (pc) (match_operand 0 "register_operand" "r")) ++ (use (label_ref (match_operand 1 "" "")))])] ++ "" ++ { ++ if (flag_pic) ++ { ++ /* Hopefully, CSE will eliminate this copy. */ ++ rtx reg1 = copy_addr_to_reg (gen_rtx_LABEL_REF (Pmode, operands[1])); ++ rtx reg2 = gen_reg_rtx (SImode); ++ ++ emit_insn (gen_addsi3 (reg2, operands[0], reg1)); ++ operands[0] = reg2; ++ } ++ } ++) ++ ++(define_insn "*tablejump" ++ [(set (pc) ++ (match_operand:SI 0 "register_operand" "r")) ++ (use (label_ref (match_operand 1 "" "")))] ++ "" ++ "jmp\\t%0" ++ [(set_attr "type" "control")]) ++ ++ ++ ++;***************************************************************************** ++;* ++;* Comparisons ++;* ++;***************************************************************************** ++;; Flow here is rather complex (based on MIPS): ++;; ++;; 1) The cmp{si,di,sf,df} routine is called. It deposits the ++;; arguments into the branch_cmp array, and the type into ++;; branch_type. No RTL is generated. ++;; ++;; 2) The appropriate branch define_expand is called, which then ++;; creates the appropriate RTL for the comparison and branch. ++;; Different CC modes are used, based on what type of branch is ++;; done, so that we can constrain things appropriately. There ++;; are assumptions in the rest of GCC that break if we fold the ++;; operands into the branchs for integer operations, and use cc0 ++;; for floating point, so we use the fp status register instead. ++;; If needed, an appropriate temporary is created to hold the ++;; of the integer compare. ++ ++(define_expand "cmpsi" ++ [(set (cc0) ++ (compare:CC (match_operand:SI 0 "register_operand" "") ++ (match_operand:SI 1 "arith_operand" "")))] ++ "" ++{ ++ branch_cmp[0] = operands[0]; ++ branch_cmp[1] = operands[1]; ++ branch_type = CMP_SI; ++ DONE; ++}) ++ ++(define_expand "tstsi" ++ [(set (cc0) ++ (match_operand:SI 0 "register_operand" ""))] ++ "" ++{ ++ branch_cmp[0] = operands[0]; ++ branch_cmp[1] = const0_rtx; ++ branch_type = CMP_SI; ++ DONE; ++}) ++ ++(define_expand "cmpsf" ++ [(set (cc0) ++ (compare:CC (match_operand:SF 0 "register_operand" "") ++ (match_operand:SF 1 "register_operand" "")))] ++ "(nios2_fpu_insns[nios2_fpu_nios2_sltsf].N >= 0 ++ || nios2_fpu_insns[nios2_fpu_nios2_sgtsf].N >= 0) ++ && (nios2_fpu_insns[nios2_fpu_nios2_sgesf].N >= 0 ++ || nios2_fpu_insns[nios2_fpu_nios2_slesf].N >= 0) ++ && nios2_fpu_insns[nios2_fpu_nios2_seqsf].N >= 0 ++ && nios2_fpu_insns[nios2_fpu_nios2_snesf].N >= 0" ++{ ++ branch_cmp[0] = operands[0]; ++ branch_cmp[1] = operands[1]; ++ branch_type = CMP_SF; ++ DONE; ++}) ++ ++(define_expand "cmpdf" ++ [(set (cc0) ++ (compare:CC (match_operand:DF 0 "register_operand" "") ++ (match_operand:DF 1 "register_operand" "")))] ++ "(nios2_fpu_insns[nios2_fpu_nios2_sltdf].N >= 0 ++ || nios2_fpu_insns[nios2_fpu_nios2_sgtdf].N >= 0) ++ && (nios2_fpu_insns[nios2_fpu_nios2_sgedf].N >= 0 ++ || nios2_fpu_insns[nios2_fpu_nios2_sledf].N >= 0) ++ && nios2_fpu_insns[nios2_fpu_nios2_seqdf].N >= 0 ++ && nios2_fpu_insns[nios2_fpu_nios2_snedf].N >= 0" ++{ ++ branch_cmp[0] = operands[0]; ++ branch_cmp[1] = operands[1]; ++ branch_type = CMP_DF; ++ DONE; ++}) ++ ++ ++;***************************************************************************** ++;* ++;* setting a register from a comparison ++;* ++;***************************************************************************** ++ ++(define_expand "seq" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (eq:SI (match_dup 1) ++ (match_dup 2)))] ++ "" ++{ ++ if (branch_type != CMP_SI && branch_type != CMP_SF && branch_type != CMP_DF) ++ FAIL; ++ ++ /* set up operands from compare. */ ++ operands[1] = branch_cmp[0]; ++ operands[2] = branch_cmp[1]; ++ ++ gen_int_relational (EQ, operands[0], operands[1], operands[2], NULL_RTX); ++ DONE; ++}) ++ ++ ++(define_insn "*seq" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (eq:SI (match_operand:SI 1 "reg_or_0_operand" "%rM") ++ (match_operand:SI 2 "arith_operand" "rI")))] ++ "" ++ "cmpeq%i2\\t%0, %z1, %z2" ++ [(set_attr "type" "alu")]) ++ ++ ++(define_insn "nios2_seqsf" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (eq:SI (match_operand:SF 1 "register_operand" "%r") ++ (match_operand:SF 2 "register_operand" "r")))] ++ "nios2_fpu_insns[nios2_fpu_nios2_seqsf].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_nios2_seqsf].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++ ++(define_insn "nios2_seqdf" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (eq:SI (match_operand:DF 1 "register_operand" "%r") ++ (match_operand:DF 2 "register_operand" "r")))] ++ "nios2_fpu_insns[nios2_fpu_nios2_seqdf].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_nios2_seqdf].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++ ++(define_expand "sne" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (ne:SI (match_dup 1) ++ (match_dup 2)))] ++ "" ++{ ++ if (branch_type != CMP_SI && branch_type != CMP_SF && branch_type != CMP_DF) ++ FAIL; ++ ++ /* set up operands from compare. */ ++ operands[1] = branch_cmp[0]; ++ operands[2] = branch_cmp[1]; ++ ++ gen_int_relational (NE, operands[0], operands[1], operands[2], NULL_RTX); ++ DONE; ++}) ++ ++ ++(define_insn "*sne" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (ne:SI (match_operand:SI 1 "reg_or_0_operand" "%rM") ++ (match_operand:SI 2 "arith_operand" "rI")))] ++ "" ++ "cmpne%i2\\t%0, %z1, %z2" ++ [(set_attr "type" "alu")]) ++ ++ ++(define_insn "nios2_snesf" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (ne:SI (match_operand:SF 1 "register_operand" "%r") ++ (match_operand:SF 2 "register_operand" "r")))] ++ "nios2_fpu_insns[nios2_fpu_nios2_snesf].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_nios2_snesf].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++ ++(define_insn "nios2_snedf" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (ne:SI (match_operand:DF 1 "register_operand" "%r") ++ (match_operand:DF 2 "register_operand" "r")))] ++ "nios2_fpu_insns[nios2_fpu_nios2_snedf].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_nios2_snedf].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++ ++(define_expand "sgt" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (gt:SI (match_dup 1) ++ (match_dup 2)))] ++ "" ++{ ++ if (branch_type != CMP_SI && branch_type != CMP_SF && branch_type != CMP_DF) ++ FAIL; ++ ++ /* set up operands from compare. */ ++ operands[1] = branch_cmp[0]; ++ operands[2] = branch_cmp[1]; ++ ++ gen_int_relational (GT, operands[0], operands[1], operands[2], NULL_RTX); ++ DONE; ++}) ++ ++ ++(define_insn "*sgt" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (gt:SI (match_operand:SI 1 "reg_or_0_operand" "rM") ++ (match_operand:SI 2 "reg_or_0_operand" "rM")))] ++ "" ++ "cmplt\\t%0, %z2, %z1" ++ [(set_attr "type" "alu")]) ++ ++ ++(define_insn "nios2_sgtsf" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (gt:SI (match_operand:SF 1 "register_operand" "r") ++ (match_operand:SF 2 "register_operand" "r")))] ++ "nios2_fpu_insns[nios2_fpu_nios2_sgtsf].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_nios2_sgtsf].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++ ++(define_insn "nios2_sgtdf" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (gt:SI (match_operand:DF 1 "register_operand" "r") ++ (match_operand:DF 2 "register_operand" "r")))] ++ "nios2_fpu_insns[nios2_fpu_nios2_sgtdf].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_nios2_sgtdf].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++ ++(define_expand "sge" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (ge:SI (match_dup 1) ++ (match_dup 2)))] ++ "" ++{ ++ if (branch_type != CMP_SI && branch_type != CMP_SF && branch_type != CMP_DF) ++ FAIL; ++ ++ /* set up operands from compare. */ ++ operands[1] = branch_cmp[0]; ++ operands[2] = branch_cmp[1]; ++ ++ gen_int_relational (GE, operands[0], operands[1], operands[2], NULL_RTX); ++ DONE; ++}) ++ ++ ++(define_insn "*sge" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (ge:SI (match_operand:SI 1 "reg_or_0_operand" "rM") ++ (match_operand:SI 2 "arith_operand" "rI")))] ++ "" ++ "cmpge%i2\\t%0, %z1, %z2" ++ [(set_attr "type" "alu")]) ++ ++ ++(define_insn "nios2_sgesf" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (ge:SI (match_operand:SF 1 "register_operand" "r") ++ (match_operand:SF 2 "register_operand" "r")))] ++ "nios2_fpu_insns[nios2_fpu_nios2_sgesf].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_nios2_sgesf].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++ ++(define_insn "nios2_sgedf" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (ge:SI (match_operand:DF 1 "register_operand" "r") ++ (match_operand:DF 2 "register_operand" "r")))] ++ "nios2_fpu_insns[nios2_fpu_nios2_sgedf].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_nios2_sgedf].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++ ++(define_expand "sle" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (le:SI (match_dup 1) ++ (match_dup 2)))] ++ "" ++{ ++ if (branch_type != CMP_SI && branch_type != CMP_SF && branch_type != CMP_DF) ++ FAIL; ++ ++ /* set up operands from compare. */ ++ operands[1] = branch_cmp[0]; ++ operands[2] = branch_cmp[1]; ++ ++ gen_int_relational (LE, operands[0], operands[1], operands[2], NULL_RTX); ++ DONE; ++}) ++ ++ ++(define_insn "*sle" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (le:SI (match_operand:SI 1 "reg_or_0_operand" "rM") ++ (match_operand:SI 2 "reg_or_0_operand" "rM")))] ++ "" ++ "cmpge\\t%0, %z2, %z1" ++ [(set_attr "type" "alu")]) ++ ++ ++(define_insn "nios2_slesf" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (le:SI (match_operand:SF 1 "register_operand" "r") ++ (match_operand:SF 2 "register_operand" "r")))] ++ "nios2_fpu_insns[nios2_fpu_nios2_slesf].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_nios2_slesf].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++ ++(define_insn "nios2_sledf" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (le:SI (match_operand:DF 1 "register_operand" "r") ++ (match_operand:DF 2 "register_operand" "r")))] ++ "nios2_fpu_insns[nios2_fpu_nios2_sledf].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_nios2_sledf].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++ ++(define_expand "slt" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (lt:SI (match_dup 1) ++ (match_dup 2)))] ++ "" ++{ ++ if (branch_type != CMP_SI && branch_type != CMP_SF && branch_type != CMP_DF) ++ FAIL; ++ ++ /* set up operands from compare. */ ++ operands[1] = branch_cmp[0]; ++ operands[2] = branch_cmp[1]; ++ ++ gen_int_relational (LT, operands[0], operands[1], operands[2], NULL_RTX); ++ DONE; ++}) ++ ++ ++(define_insn "*slt" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (lt:SI (match_operand:SI 1 "reg_or_0_operand" "rM") ++ (match_operand:SI 2 "arith_operand" "rI")))] ++ "" ++ "cmplt%i2\\t%0, %z1, %z2" ++ [(set_attr "type" "alu")]) ++ ++ ++(define_insn "nios2_sltsf" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (lt:SI (match_operand:SF 1 "register_operand" "r") ++ (match_operand:SF 2 "register_operand" "r")))] ++ "nios2_fpu_insns[nios2_fpu_nios2_sltsf].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_nios2_sltsf].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++ ++(define_insn "nios2_sltdf" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (lt:SI (match_operand:DF 1 "register_operand" "r") ++ (match_operand:DF 2 "register_operand" "r")))] ++ "nios2_fpu_insns[nios2_fpu_nios2_sltdf].N >= 0" ++ { ++ return (*nios2_fpu_insns[nios2_fpu_nios2_sltdf].output) (insn); ++ } ++ [(set_attr "type" "custom")]) ++ ++ ++(define_expand "sgtu" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (gtu:SI (match_dup 1) ++ (match_dup 2)))] ++ "" ++{ ++ if (branch_type != CMP_SI) ++ FAIL; ++ ++ /* set up operands from compare. */ ++ operands[1] = branch_cmp[0]; ++ operands[2] = branch_cmp[1]; ++ ++ gen_int_relational (GTU, operands[0], operands[1], operands[2], NULL_RTX); ++ DONE; ++}) ++ ++ ++(define_insn "*sgtu" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (gtu:SI (match_operand:SI 1 "reg_or_0_operand" "rM") ++ (match_operand:SI 2 "reg_or_0_operand" "rM")))] ++ "" ++ "cmpltu\\t%0, %z2, %z1" ++ [(set_attr "type" "alu")]) ++ ++ ++(define_expand "sgeu" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (geu:SI (match_dup 1) ++ (match_dup 2)))] ++ "" ++{ ++ if (branch_type != CMP_SI) ++ FAIL; ++ ++ /* set up operands from compare. */ ++ operands[1] = branch_cmp[0]; ++ operands[2] = branch_cmp[1]; ++ ++ gen_int_relational (GEU, operands[0], operands[1], operands[2], NULL_RTX); ++ DONE; ++}) ++ ++ ++(define_insn "*sgeu" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (geu:SI (match_operand:SI 1 "reg_or_0_operand" "rM") ++ (match_operand:SI 2 "uns_arith_operand" "rJ")))] ++ "" ++ "cmpgeu%i2\\t%0, %z1, %z2" ++ [(set_attr "type" "alu")]) ++ ++(define_expand "sleu" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (leu:SI (match_dup 1) ++ (match_dup 2)))] ++ "" ++{ ++ if (branch_type != CMP_SI) ++ FAIL; ++ ++ /* set up operands from compare. */ ++ operands[1] = branch_cmp[0]; ++ operands[2] = branch_cmp[1]; ++ ++ gen_int_relational (LEU, operands[0], operands[1], operands[2], NULL_RTX); ++ DONE; ++}) ++ ++ ++(define_insn "*sleu" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (leu:SI (match_operand:SI 1 "reg_or_0_operand" "rM") ++ (match_operand:SI 2 "reg_or_0_operand" "rM")))] ++ "" ++ "cmpgeu\\t%0, %z2, %z1" ++ [(set_attr "type" "alu")]) ++ ++ ++(define_expand "sltu" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (ltu:SI (match_dup 1) ++ (match_dup 2)))] ++ "" ++{ ++ if (branch_type != CMP_SI) ++ FAIL; ++ ++ /* set up operands from compare. */ ++ operands[1] = branch_cmp[0]; ++ operands[2] = branch_cmp[1]; ++ ++ gen_int_relational (LTU, operands[0], operands[1], operands[2], NULL_RTX); ++ DONE; ++}) ++ ++ ++(define_insn "*sltu" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (ltu:SI (match_operand:SI 1 "reg_or_0_operand" "rM") ++ (match_operand:SI 2 "uns_arith_operand" "rJ")))] ++ "" ++ "cmpltu%i2\\t%0, %z1, %z2" ++ [(set_attr "type" "alu")]) ++ ++ ++ ++ ++;***************************************************************************** ++;* ++;* branches ++;* ++;***************************************************************************** ++ ++(define_insn "*cbranch" ++ [(set (pc) ++ (if_then_else ++ (match_operator:SI 0 "comparison_operator" ++ [(match_operand:SI 2 "reg_or_0_operand" "rM") ++ (match_operand:SI 3 "reg_or_0_operand" "rM")]) ++ (label_ref (match_operand 1 "" "")) ++ (pc)))] ++ "" ++ "b%0\\t%z2, %z3, %l1" ++ [(set_attr "type" "control")]) ++ ++ ++(define_insn "nios2_cbranch_sf" ++ [(set (pc) ++ (if_then_else ++ (match_operator:SI 0 "comparison_operator" ++ [(match_operand:SF 2 "register_operand" "r") ++ (match_operand:SF 3 "register_operand" "r")]) ++ (label_ref (match_operand 1 "" "")) ++ (pc)))] ++ "" ++ { ++ return nios2_output_fpu_insn_cmps (insn, GET_CODE (operands[0])); ++ } ++ [(set_attr "type" "custom")]) ++ ++ ++(define_insn "nios2_cbranch_df" ++ [(set (pc) ++ (if_then_else ++ (match_operator:SI 0 "comparison_operator" ++ [(match_operand:DF 2 "register_operand" "r") ++ (match_operand:DF 3 "register_operand" "r")]) ++ (label_ref (match_operand 1 "" "")) ++ (pc)))] ++ "" ++ { ++ return nios2_output_fpu_insn_cmpd (insn, GET_CODE (operands[0])); ++ } ++ [(set_attr "type" "custom")]) ++ ++ ++(define_expand "beq" ++ [(set (pc) ++ (if_then_else (eq:CC (cc0) ++ (const_int 0)) ++ (label_ref (match_operand 0 "" "")) ++ (pc)))] ++ "" ++{ ++ gen_int_relational (EQ, NULL_RTX, branch_cmp[0], branch_cmp[1], operands[0]); ++ DONE; ++}) ++ ++ ++(define_expand "bne" ++ [(set (pc) ++ (if_then_else (ne:CC (cc0) ++ (const_int 0)) ++ (label_ref (match_operand 0 "" "")) ++ (pc)))] ++ "" ++{ ++ gen_int_relational (NE, NULL_RTX, branch_cmp[0], branch_cmp[1], operands[0]); ++ DONE; ++}) ++ ++ ++(define_expand "bgt" ++ [(set (pc) ++ (if_then_else (gt:CC (cc0) ++ (const_int 0)) ++ (label_ref (match_operand 0 "" "")) ++ (pc)))] ++ "" ++{ ++ gen_int_relational (GT, NULL_RTX, branch_cmp[0], branch_cmp[1], operands[0]); ++ DONE; ++}) ++ ++(define_expand "bge" ++ [(set (pc) ++ (if_then_else (ge:CC (cc0) ++ (const_int 0)) ++ (label_ref (match_operand 0 "" "")) ++ (pc)))] ++ "" ++{ ++ gen_int_relational (GE, NULL_RTX, branch_cmp[0], branch_cmp[1], operands[0]); ++ DONE; ++}) ++ ++(define_expand "ble" ++ [(set (pc) ++ (if_then_else (le:CC (cc0) ++ (const_int 0)) ++ (label_ref (match_operand 0 "" "")) ++ (pc)))] ++ "" ++{ ++ gen_int_relational (LE, NULL_RTX, branch_cmp[0], branch_cmp[1], operands[0]); ++ DONE; ++}) ++ ++(define_expand "blt" ++ [(set (pc) ++ (if_then_else (lt:CC (cc0) ++ (const_int 0)) ++ (label_ref (match_operand 0 "" "")) ++ (pc)))] ++ "" ++{ ++ gen_int_relational (LT, NULL_RTX, branch_cmp[0], branch_cmp[1], operands[0]); ++ DONE; ++}) ++ ++ ++(define_expand "bgtu" ++ [(set (pc) ++ (if_then_else (gtu:CC (cc0) ++ (const_int 0)) ++ (label_ref (match_operand 0 "" "")) ++ (pc)))] ++ "" ++{ ++ gen_int_relational (GTU, NULL_RTX, branch_cmp[0], branch_cmp[1], operands[0]); ++ DONE; ++}) ++ ++(define_expand "bgeu" ++ [(set (pc) ++ (if_then_else (geu:CC (cc0) ++ (const_int 0)) ++ (label_ref (match_operand 0 "" "")) ++ (pc)))] ++ "" ++{ ++ gen_int_relational (GEU, NULL_RTX, branch_cmp[0], branch_cmp[1], operands[0]); ++ DONE; ++}) ++ ++(define_expand "bleu" ++ [(set (pc) ++ (if_then_else (leu:CC (cc0) ++ (const_int 0)) ++ (label_ref (match_operand 0 "" "")) ++ (pc)))] ++ "" ++{ ++ gen_int_relational (LEU, NULL_RTX, branch_cmp[0], branch_cmp[1], operands[0]); ++ DONE; ++}) ++ ++(define_expand "bltu" ++ [(set (pc) ++ (if_then_else (ltu:CC (cc0) ++ (const_int 0)) ++ (label_ref (match_operand 0 "" "")) ++ (pc)))] ++ "" ++{ ++ gen_int_relational (LTU, NULL_RTX, branch_cmp[0], branch_cmp[1], operands[0]); ++ DONE; ++}) ++ ++ ++;***************************************************************************** ++;* ++;* String and Block Operations ++;* ++;***************************************************************************** ++ ++; ??? This is all really a hack to get Dhrystone to work as fast as possible ++; things to be fixed: ++; * let the compiler core handle all of this, for that to work the extra ++; aliasing needs to be addressed. ++; * we use three temporary registers for loading and storing to ensure no ++; ld use stalls, this is excessive, because after the first ld/st only ++; two are needed. Only two would be needed all the way through if ++; we could schedule with other code. Consider: ++; 1 ld $1, 0($src) ++; 2 ld $2, 4($src) ++; 3 ld $3, 8($src) ++; 4 st $1, 0($dest) ++; 5 ld $1, 12($src) ++; 6 st $2, 4($src) ++; 7 etc. ++; The first store has to wait until 4. If it does not there will be one ++; cycle of stalling. However, if any other instruction could be placed ++; between 1 and 4, $3 would not be needed. ++; * In small we probably don't want to ever do this ourself because there ++; is no ld use stall. ++ ++(define_expand "movstrsi" ++ [(parallel [(set (match_operand:BLK 0 "general_operand" "") ++ (match_operand:BLK 1 "general_operand" "")) ++ (use (match_operand:SI 2 "const_int_operand" "")) ++ (use (match_operand:SI 3 "const_int_operand" "")) ++ (clobber (match_scratch:SI 4 "=&r")) ++ (clobber (match_scratch:SI 5 "=&r")) ++ (clobber (match_scratch:SI 6 "=&r"))])] ++ "TARGET_INLINE_MEMCPY" ++{ ++ rtx ld_addr_reg, st_addr_reg; ++ ++ /* If the predicate for op2 fails in expr.c:emit_block_move_via_movstr ++ it trys to copy to a register, but does not re-try the predicate. ++ ??? Intead of fixing expr.c, I fix it here. */ ++ if (!const_int_operand (operands[2], SImode)) ++ FAIL; ++ ++ /* ??? there are some magic numbers which need to be sorted out here. ++ the basis for them is not increasing code size hugely or going ++ out of range of offset addressing */ ++ if (INTVAL (operands[3]) < 4) ++ FAIL; ++ if (!optimize ++ || (optimize_size && INTVAL (operands[2]) > 12) ++ || (optimize < 3 && INTVAL (operands[2]) > 100) ++ || INTVAL (operands[2]) > 200) ++ FAIL; ++ ++ st_addr_reg ++ = replace_equiv_address (operands[0], ++ copy_to_mode_reg (Pmode, XEXP (operands[0], 0))); ++ ld_addr_reg ++ = replace_equiv_address (operands[1], ++ copy_to_mode_reg (Pmode, XEXP (operands[1], 0))); ++ emit_insn (gen_movstrsi_internal (st_addr_reg, ld_addr_reg, ++ operands[2], operands[3])); ++ ++ DONE; ++}) ++ ++ ++(define_insn "movstrsi_internal" ++ [(set (match_operand:BLK 0 "memory_operand" "=o") ++ (match_operand:BLK 1 "memory_operand" "o")) ++ (use (match_operand:SI 2 "const_int_operand" "i")) ++ (use (match_operand:SI 3 "const_int_operand" "i")) ++ (clobber (match_scratch:SI 4 "=&r")) ++ (clobber (match_scratch:SI 5 "=&r")) ++ (clobber (match_scratch:SI 6 "=&r"))] ++ "TARGET_INLINE_MEMCPY" ++{ ++ int ld_offset = INTVAL (operands[2]); ++ int ld_len = INTVAL (operands[2]); ++ int ld_reg = 0; ++ rtx ld_addr_reg = XEXP (operands[1], 0); ++ int st_offset = INTVAL (operands[2]); ++ int st_len = INTVAL (operands[2]); ++ int st_reg = 0; ++ rtx st_addr_reg = XEXP (operands[0], 0); ++ int delay_count = 0; ++ ++ /* ops[0] is the address used by the insn ++ ops[1] is the register being loaded or stored */ ++ rtx ops[2]; ++ ++ gcc_assert (INTVAL (operands[3]) >= 4); ++ ++ while (ld_offset >= 4) ++ { ++ /* if the load use delay has been met, I can start ++ storing */ ++ if (delay_count >= 3) ++ { ++ ops[0] = gen_rtx_MEM (SImode, ++ plus_constant (st_addr_reg, st_len - st_offset)); ++ ops[1] = operands[st_reg + 4]; ++ output_asm_insn ("stw\t%1, %0", ops); ++ ++ st_reg = (st_reg + 1) % 3; ++ st_offset -= 4; ++ } ++ ++ ops[0] = gen_rtx_MEM (SImode, ++ plus_constant (ld_addr_reg, ld_len - ld_offset)); ++ ops[1] = operands[ld_reg + 4]; ++ output_asm_insn ("ldw\t%1, %0", ops); ++ ++ ld_reg = (ld_reg + 1) % 3; ++ ld_offset -= 4; ++ delay_count++; ++ } ++ ++ if (ld_offset >= 2) ++ { ++ /* if the load use delay has been met, I can start ++ storing */ ++ if (delay_count >= 3) ++ { ++ ops[0] = gen_rtx_MEM (SImode, ++ plus_constant (st_addr_reg, st_len - st_offset)); ++ ops[1] = operands[st_reg + 4]; ++ output_asm_insn ("stw\t%1, %0", ops); ++ ++ st_reg = (st_reg + 1) % 3; ++ st_offset -= 4; ++ } ++ ++ ops[0] = gen_rtx_MEM (HImode, ++ plus_constant (ld_addr_reg, ld_len - ld_offset)); ++ ops[1] = operands[ld_reg + 4]; ++ output_asm_insn ("ldh\t%1, %0", ops); ++ ++ ld_reg = (ld_reg + 1) % 3; ++ ld_offset -= 2; ++ delay_count++; ++ } ++ ++ if (ld_offset >= 1) ++ { ++ /* if the load use delay has been met, I can start ++ storing */ ++ if (delay_count >= 3) ++ { ++ ops[0] = gen_rtx_MEM (SImode, ++ plus_constant (st_addr_reg, st_len - st_offset)); ++ ops[1] = operands[st_reg + 4]; ++ output_asm_insn ("stw\t%1, %0", ops); ++ ++ st_reg = (st_reg + 1) % 3; ++ st_offset -= 4; ++ } ++ ++ ops[0] = gen_rtx_MEM (QImode, ++ plus_constant (ld_addr_reg, ld_len - ld_offset)); ++ ops[1] = operands[ld_reg + 4]; ++ output_asm_insn ("ldb\t%1, %0", ops); ++ ++ ld_reg = (ld_reg + 1) % 3; ++ ld_offset -= 1; ++ delay_count++; ++ } ++ ++ while (st_offset >= 4) ++ { ++ ops[0] = gen_rtx_MEM (SImode, ++ plus_constant (st_addr_reg, st_len - st_offset)); ++ ops[1] = operands[st_reg + 4]; ++ output_asm_insn ("stw\t%1, %0", ops); ++ ++ st_reg = (st_reg + 1) % 3; ++ st_offset -= 4; ++ } ++ ++ while (st_offset >= 2) ++ { ++ ops[0] = gen_rtx_MEM (HImode, ++ plus_constant (st_addr_reg, st_len - st_offset)); ++ ops[1] = operands[st_reg + 4]; ++ output_asm_insn ("sth\t%1, %0", ops); ++ ++ st_reg = (st_reg + 1) % 3; ++ st_offset -= 2; ++ } ++ ++ while (st_offset >= 1) ++ { ++ ops[0] = gen_rtx_MEM (QImode, ++ plus_constant (st_addr_reg, st_len - st_offset)); ++ ops[1] = operands[st_reg + 4]; ++ output_asm_insn ("stb\t%1, %0", ops); ++ ++ st_reg = (st_reg + 1) % 3; ++ st_offset -= 1; ++ } ++ ++ return ""; ++} ++; ??? lengths are not being used yet, but I will probably forget ++; to update this once I am using lengths, so set it to something ++; definetely big enough to cover it. 400 allows for 200 bytes ++; of motion. ++ [(set_attr "length" "400")]) ++ ++ ++ ++;***************************************************************************** ++;* ++;* Custom instructions ++;* ++;***************************************************************************** ++ ++(define_constants [ ++ (CUSTOM_N 100) ++ (CUSTOM_NI 101) ++ (CUSTOM_NF 102) ++ (CUSTOM_NP 103) ++ (CUSTOM_NII 104) ++ (CUSTOM_NIF 105) ++ (CUSTOM_NIP 106) ++ (CUSTOM_NFI 107) ++ (CUSTOM_NFF 108) ++ (CUSTOM_NFP 109) ++ (CUSTOM_NPI 110) ++ (CUSTOM_NPF 111) ++ (CUSTOM_NPP 112) ++ (CUSTOM_IN 113) ++ (CUSTOM_INI 114) ++ (CUSTOM_INF 115) ++ (CUSTOM_INP 116) ++ (CUSTOM_INII 117) ++ (CUSTOM_INIF 118) ++ (CUSTOM_INIP 119) ++ (CUSTOM_INFI 120) ++ (CUSTOM_INFF 121) ++ (CUSTOM_INFP 122) ++ (CUSTOM_INPI 123) ++ (CUSTOM_INPF 124) ++ (CUSTOM_INPP 125) ++ (CUSTOM_FN 126) ++ (CUSTOM_FNI 127) ++ (CUSTOM_FNF 128) ++ (CUSTOM_FNP 129) ++ (CUSTOM_FNII 130) ++ (CUSTOM_FNIF 131) ++ (CUSTOM_FNIP 132) ++ (CUSTOM_FNFI 133) ++ (CUSTOM_FNFF 134) ++ (CUSTOM_FNFP 135) ++ (CUSTOM_FNPI 136) ++ (CUSTOM_FNPF 137) ++ (CUSTOM_FNPP 138) ++ (CUSTOM_PN 139) ++ (CUSTOM_PNI 140) ++ (CUSTOM_PNF 141) ++ (CUSTOM_PNP 142) ++ (CUSTOM_PNII 143) ++ (CUSTOM_PNIF 144) ++ (CUSTOM_PNIP 145) ++ (CUSTOM_PNFI 146) ++ (CUSTOM_PNFF 147) ++ (CUSTOM_PNFP 148) ++ (CUSTOM_PNPI 149) ++ (CUSTOM_PNPF 150) ++ (CUSTOM_PNPP 151) ++]) ++ ++ ++(define_insn "custom_n" ++ [(unspec_volatile [(match_operand:SI 0 "custom_insn_opcode" "N")] CUSTOM_N)] ++ "" ++ "custom\\t%0, zero, zero, zero" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_ni" ++ [(unspec_volatile [(match_operand:SI 0 "custom_insn_opcode" "N") ++ (match_operand:SI 1 "register_operand" "r")] CUSTOM_NI)] ++ "" ++ "custom\\t%0, zero, %1, zero" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_nf" ++ [(unspec_volatile [(match_operand:SI 0 "custom_insn_opcode" "N") ++ (match_operand:SF 1 "register_operand" "r")] CUSTOM_NF)] ++ "" ++ "custom\\t%0, zero, %1, zero" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_np" ++ [(unspec_volatile [(match_operand:SI 0 "custom_insn_opcode" "N") ++ (match_operand:SI 1 "register_operand" "r")] CUSTOM_NP)] ++ "" ++ "custom\\t%0, zero, %1, zero" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_nii" ++ [(unspec_volatile [(match_operand:SI 0 "custom_insn_opcode" "N") ++ (match_operand:SI 1 "register_operand" "r") ++ (match_operand:SI 2 "register_operand" "r")] CUSTOM_NII)] ++ "" ++ "custom\\t%0, zero, %1, %2" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_nif" ++ [(unspec_volatile [(match_operand:SI 0 "custom_insn_opcode" "N") ++ (match_operand:SI 1 "register_operand" "r") ++ (match_operand:SF 2 "register_operand" "r")] CUSTOM_NIF)] ++ "" ++ "custom\\t%0, zero, %1, %2" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_nip" ++ [(unspec_volatile [(match_operand:SI 0 "custom_insn_opcode" "N") ++ (match_operand:SI 1 "register_operand" "r") ++ (match_operand:SI 2 "register_operand" "r")] CUSTOM_NIP)] ++ "" ++ "custom\\t%0, zero, %1, %2" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_nfi" ++ [(unspec_volatile [(match_operand:SI 0 "custom_insn_opcode" "N") ++ (match_operand:SF 1 "register_operand" "r") ++ (match_operand:SI 2 "register_operand" "r")] CUSTOM_NFI)] ++ "" ++ "custom\\t%0, zero, %1, %2" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_nff" ++ [(unspec_volatile [(match_operand:SI 0 "custom_insn_opcode" "N") ++ (match_operand:SF 1 "register_operand" "r") ++ (match_operand:SF 2 "register_operand" "r")] CUSTOM_NFF)] ++ "" ++ "custom\\t%0, zero, %1, %2" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_nfp" ++ [(unspec_volatile [(match_operand:SI 0 "custom_insn_opcode" "N") ++ (match_operand:SF 1 "register_operand" "r") ++ (match_operand:SI 2 "register_operand" "r")] CUSTOM_NFP)] ++ "" ++ "custom\\t%0, zero, %1, %2" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_npi" ++ [(unspec_volatile [(match_operand:SI 0 "custom_insn_opcode" "N") ++ (match_operand:SI 1 "register_operand" "r") ++ (match_operand:SI 2 "register_operand" "r")] CUSTOM_NPI)] ++ "" ++ "custom\\t%0, zero, %1, %2" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_npf" ++ [(unspec_volatile [(match_operand:SI 0 "custom_insn_opcode" "N") ++ (match_operand:SI 1 "register_operand" "r") ++ (match_operand:SF 2 "register_operand" "r")] CUSTOM_NPF)] ++ "" ++ "custom\\t%0, zero, %1, %2" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_npp" ++ [(unspec_volatile [(match_operand:SI 0 "custom_insn_opcode" "N") ++ (match_operand:SI 1 "register_operand" "r") ++ (match_operand:SI 2 "register_operand" "r")] CUSTOM_NPP)] ++ "" ++ "custom\\t%0, zero, %1, %2" ++ [(set_attr "type" "custom")]) ++ ++ ++ ++(define_insn "custom_in" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec_volatile:SI [(match_operand:SI 1 "custom_insn_opcode" "N")] ++ CUSTOM_IN))] ++ "" ++ "custom\\t%1, %0, zero, zero" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_ini" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec_volatile:SI [(match_operand:SI 1 "custom_insn_opcode" "N") ++ (match_operand:SI 2 "register_operand" "r")] ++ CUSTOM_INI))] ++ "" ++ "custom\\t%1, %0, %2, zero" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_inf" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec_volatile:SI [(match_operand:SI 1 "custom_insn_opcode" "N") ++ (match_operand:SF 2 "register_operand" "r")] ++ CUSTOM_INF))] ++ "" ++ "custom\\t%1, %0, %2, zero" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_inp" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec_volatile:SI [(match_operand:SI 1 "custom_insn_opcode" "N") ++ (match_operand:SI 2 "register_operand" "r")] ++ CUSTOM_INP))] ++ "" ++ "custom\\t%1, %0, %2, zero" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_inii" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec_volatile:SI [(match_operand:SI 1 "custom_insn_opcode" "N") ++ (match_operand:SI 2 "register_operand" "r") ++ (match_operand:SI 3 "register_operand" "r")] ++ CUSTOM_INII))] ++ "" ++ "custom\\t%1, %0, %2, %3" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_inif" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec_volatile:SI [(match_operand:SI 1 "custom_insn_opcode" "N") ++ (match_operand:SI 2 "register_operand" "r") ++ (match_operand:SF 3 "register_operand" "r")] ++ CUSTOM_INIF))] ++ "" ++ "custom\\t%1, %0, %2, %3" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_inip" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec_volatile:SI [(match_operand:SI 1 "custom_insn_opcode" "N") ++ (match_operand:SI 2 "register_operand" "r") ++ (match_operand:SI 3 "register_operand" "r")] ++ CUSTOM_INIP))] ++ "" ++ "custom\\t%1, %0, %2, %3" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_infi" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec_volatile:SI [(match_operand:SI 1 "custom_insn_opcode" "N") ++ (match_operand:SF 2 "register_operand" "r") ++ (match_operand:SI 3 "register_operand" "r")] ++ CUSTOM_INFI))] ++ "" ++ "custom\\t%1, %0, %2, %3" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_inff" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec_volatile:SI [(match_operand:SI 1 "custom_insn_opcode" "N") ++ (match_operand:SF 2 "register_operand" "r") ++ (match_operand:SF 3 "register_operand" "r")] ++ CUSTOM_INFF))] ++ "" ++ "custom\\t%1, %0, %2, %3" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_infp" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec_volatile:SI [(match_operand:SI 1 "custom_insn_opcode" "N") ++ (match_operand:SF 2 "register_operand" "r") ++ (match_operand:SI 3 "register_operand" "r")] ++ CUSTOM_INFP))] ++ "" ++ "custom\\t%1, %0, %2, %3" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_inpi" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec_volatile:SI [(match_operand:SI 1 "custom_insn_opcode" "N") ++ (match_operand:SI 2 "register_operand" "r") ++ (match_operand:SI 3 "register_operand" "r")] ++ CUSTOM_INPI))] ++ "" ++ "custom\\t%1, %0, %2, %3" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_inpf" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec_volatile:SI [(match_operand:SI 1 "custom_insn_opcode" "N") ++ (match_operand:SI 2 "register_operand" "r") ++ (match_operand:SF 3 "register_operand" "r")] ++ CUSTOM_INPF))] ++ "" ++ "custom\\t%1, %0, %2, %3" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_inpp" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec_volatile:SI [(match_operand:SI 1 "custom_insn_opcode" "N") ++ (match_operand:SI 2 "register_operand" "r") ++ (match_operand:SI 3 "register_operand" "r")] ++ CUSTOM_INPP))] ++ "" ++ "custom\\t%1, %0, %2, %3" ++ [(set_attr "type" "custom")]) ++ ++ ++ ++ ++ ++(define_insn "custom_fn" ++ [(set (match_operand:SF 0 "register_operand" "=r") ++ (unspec_volatile:SF [(match_operand:SI 1 "custom_insn_opcode" "N")] ++ CUSTOM_FN))] ++ "" ++ "custom\\t%1, %0, zero, zero" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_fni" ++ [(set (match_operand:SF 0 "register_operand" "=r") ++ (unspec_volatile:SF [(match_operand:SI 1 "custom_insn_opcode" "N") ++ (match_operand:SI 2 "register_operand" "r")] ++ CUSTOM_FNI))] ++ "" ++ "custom\\t%1, %0, %2, zero" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_fnf" ++ [(set (match_operand:SF 0 "register_operand" "=r") ++ (unspec_volatile:SF [(match_operand:SI 1 "custom_insn_opcode" "N") ++ (match_operand:SF 2 "register_operand" "r")] ++ CUSTOM_FNF))] ++ "" ++ "custom\\t%1, %0, %2, zero" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_fnp" ++ [(set (match_operand:SF 0 "register_operand" "=r") ++ (unspec_volatile:SF [(match_operand:SI 1 "custom_insn_opcode" "N") ++ (match_operand:SI 2 "register_operand" "r")] ++ CUSTOM_FNP))] ++ "" ++ "custom\\t%1, %0, %2, zero" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_fnii" ++ [(set (match_operand:SF 0 "register_operand" "=r") ++ (unspec_volatile:SF [(match_operand:SI 1 "custom_insn_opcode" "N") ++ (match_operand:SI 2 "register_operand" "r") ++ (match_operand:SI 3 "register_operand" "r")] ++ CUSTOM_FNII))] ++ "" ++ "custom\\t%1, %0, %2, %3" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_fnif" ++ [(set (match_operand:SF 0 "register_operand" "=r") ++ (unspec_volatile:SF [(match_operand:SI 1 "custom_insn_opcode" "N") ++ (match_operand:SI 2 "register_operand" "r") ++ (match_operand:SF 3 "register_operand" "r")] ++ CUSTOM_FNIF))] ++ "" ++ "custom\\t%1, %0, %2, %3" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_fnip" ++ [(set (match_operand:SF 0 "register_operand" "=r") ++ (unspec_volatile:SF [(match_operand:SI 1 "custom_insn_opcode" "N") ++ (match_operand:SI 2 "register_operand" "r") ++ (match_operand:SI 3 "register_operand" "r")] ++ CUSTOM_FNIP))] ++ "" ++ "custom\\t%1, %0, %2, %3" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_fnfi" ++ [(set (match_operand:SF 0 "register_operand" "=r") ++ (unspec_volatile:SF [(match_operand:SI 1 "custom_insn_opcode" "N") ++ (match_operand:SF 2 "register_operand" "r") ++ (match_operand:SI 3 "register_operand" "r")] ++ CUSTOM_FNFI))] ++ "" ++ "custom\\t%1, %0, %2, %3" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_fnff" ++ [(set (match_operand:SF 0 "register_operand" "=r") ++ (unspec_volatile:SF [(match_operand:SI 1 "custom_insn_opcode" "N") ++ (match_operand:SF 2 "register_operand" "r") ++ (match_operand:SF 3 "register_operand" "r")] ++ CUSTOM_FNFF))] ++ "" ++ "custom\\t%1, %0, %2, %3" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_fnfp" ++ [(set (match_operand:SF 0 "register_operand" "=r") ++ (unspec_volatile:SF [(match_operand:SI 1 "custom_insn_opcode" "N") ++ (match_operand:SF 2 "register_operand" "r") ++ (match_operand:SI 3 "register_operand" "r")] ++ CUSTOM_FNFP))] ++ "" ++ "custom\\t%1, %0, %2, %3" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_fnpi" ++ [(set (match_operand:SF 0 "register_operand" "=r") ++ (unspec_volatile:SF [(match_operand:SI 1 "custom_insn_opcode" "N") ++ (match_operand:SI 2 "register_operand" "r") ++ (match_operand:SI 3 "register_operand" "r")] ++ CUSTOM_FNPI))] ++ "" ++ "custom\\t%1, %0, %2, %3" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_fnpf" ++ [(set (match_operand:SF 0 "register_operand" "=r") ++ (unspec_volatile:SF [(match_operand:SI 1 "custom_insn_opcode" "N") ++ (match_operand:SI 2 "register_operand" "r") ++ (match_operand:SF 3 "register_operand" "r")] ++ CUSTOM_FNPF))] ++ "" ++ "custom\\t%1, %0, %2, %3" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_fnpp" ++ [(set (match_operand:SF 0 "register_operand" "=r") ++ (unspec_volatile:SF [(match_operand:SI 1 "custom_insn_opcode" "N") ++ (match_operand:SI 2 "register_operand" "r") ++ (match_operand:SI 3 "register_operand" "r")] ++ CUSTOM_FNPP))] ++ "" ++ "custom\\t%1, %0, %2, %3" ++ [(set_attr "type" "custom")]) ++ ++ ++ ++(define_insn "custom_pn" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec_volatile:SI [(match_operand:SI 1 "custom_insn_opcode" "N")] ++ CUSTOM_PN))] ++ "" ++ "custom\\t%1, %0, zero, zero" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_pni" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec_volatile:SI [(match_operand:SI 1 "custom_insn_opcode" "N") ++ (match_operand:SI 2 "register_operand" "r")] ++ CUSTOM_PNI))] ++ "" ++ "custom\\t%1, %0, %2, zero" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_pnf" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec_volatile:SI [(match_operand:SI 1 "custom_insn_opcode" "N") ++ (match_operand:SF 2 "register_operand" "r")] ++ CUSTOM_PNF))] ++ "" ++ "custom\\t%1, %0, %2, zero" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_pnp" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec_volatile:SI [(match_operand:SI 1 "custom_insn_opcode" "N") ++ (match_operand:SI 2 "register_operand" "r")] ++ CUSTOM_PNP))] ++ "" ++ "custom\\t%1, %0, %2, zero" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_pnii" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec_volatile:SI [(match_operand:SI 1 "custom_insn_opcode" "N") ++ (match_operand:SI 2 "register_operand" "r") ++ (match_operand:SI 3 "register_operand" "r")] ++ CUSTOM_PNII))] ++ "" ++ "custom\\t%1, %0, %2, %3" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_pnif" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec_volatile:SI [(match_operand:SI 1 "custom_insn_opcode" "N") ++ (match_operand:SI 2 "register_operand" "r") ++ (match_operand:SF 3 "register_operand" "r")] ++ CUSTOM_PNIF))] ++ "" ++ "custom\\t%1, %0, %2, %3" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_pnip" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec_volatile:SI [(match_operand:SI 1 "custom_insn_opcode" "N") ++ (match_operand:SI 2 "register_operand" "r") ++ (match_operand:SI 3 "register_operand" "r")] ++ CUSTOM_PNIP))] ++ "" ++ "custom\\t%1, %0, %2, %3" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_pnfi" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec_volatile:SI [(match_operand:SI 1 "custom_insn_opcode" "N") ++ (match_operand:SF 2 "register_operand" "r") ++ (match_operand:SI 3 "register_operand" "r")] ++ CUSTOM_PNFI))] ++ "" ++ "custom\\t%1, %0, %2, %3" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_pnff" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec_volatile:SI [(match_operand:SI 1 "custom_insn_opcode" "N") ++ (match_operand:SF 2 "register_operand" "r") ++ (match_operand:SF 3 "register_operand" "r")] ++ CUSTOM_PNFF))] ++ "" ++ "custom\\t%1, %0, %2, %3" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_pnfp" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec_volatile:SI [(match_operand:SI 1 "custom_insn_opcode" "N") ++ (match_operand:SF 2 "register_operand" "r") ++ (match_operand:SI 3 "register_operand" "r")] ++ CUSTOM_PNFP))] ++ "" ++ "custom\\t%1, %0, %2, %3" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_pnpi" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec_volatile:SI [(match_operand:SI 1 "custom_insn_opcode" "N") ++ (match_operand:SI 2 "register_operand" "r") ++ (match_operand:SI 3 "register_operand" "r")] ++ CUSTOM_PNPI))] ++ "" ++ "custom\\t%1, %0, %2, %3" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_pnpf" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec_volatile:SI [(match_operand:SI 1 "custom_insn_opcode" "N") ++ (match_operand:SI 2 "register_operand" "r") ++ (match_operand:SF 3 "register_operand" "r")] ++ CUSTOM_PNPF))] ++ "" ++ "custom\\t%1, %0, %2, %3" ++ [(set_attr "type" "custom")]) ++ ++(define_insn "custom_pnpp" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec_volatile:SI [(match_operand:SI 1 "custom_insn_opcode" "N") ++ (match_operand:SI 2 "register_operand" "r") ++ (match_operand:SI 3 "register_operand" "r")] ++ CUSTOM_PNPP))] ++ "" ++ "custom\\t%1, %0, %2, %3" ++ [(set_attr "type" "custom")]) ++ ++ ++ ++ ++ ++ ++;***************************************************************************** ++;* ++;* Misc ++;* ++;***************************************************************************** ++ ++(define_insn "nop" ++ [(const_int 0)] ++ "" ++ "nop\\t" ++ [(set_attr "type" "alu")]) ++ ++(define_insn "sync" ++ [(unspec_volatile [(const_int 0)] UNSPEC_SYNC)] ++ "" ++ "sync\\t" ++ [(set_attr "type" "control")]) ++ ++ ++(define_insn "rdctl" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec_volatile:SI [(match_operand:SI 1 "rdwrctl_operand" "O")] ++ UNSPEC_RDCTL))] ++ "" ++ "rdctl\\t%0, ctl%1" ++ [(set_attr "type" "control")]) ++ ++(define_insn "wrctl" ++ [(unspec_volatile:SI [(match_operand:SI 0 "rdwrctl_operand" "O") ++ (match_operand:SI 1 "reg_or_0_operand" "rM")] ++ UNSPEC_WRCTL)] ++ "" ++ "wrctl\\tctl%0, %z1" ++ [(set_attr "type" "control")]) ++ ++;Used to signal a stack overflow ++(define_insn "trap" ++ [(unspec_volatile [(const_int 0)] UNSPEC_TRAP)] ++ "" ++ "break\\t3" ++ [(set_attr "type" "control")]) ++ ++(define_insn "stack_overflow_detect_and_trap" ++ [(unspec_volatile [(const_int 0)] UNSPEC_STACK_OVERFLOW_DETECT_AND_TRAP)] ++ "" ++ "bgeu\\tsp, et, 1f\;break\\t3\;1:" ++ [(set_attr "type" "control")]) ++ ++;Load the GOT register. ++(define_insn "load_got_register" ++ [(set (match_operand:SI 0 "register_operand" "=&r") ++ (unspec:SI [(const_int 0)] UNSPEC_LOAD_GOT_REGISTER)) ++ (set (match_operand:SI 1 "register_operand" "=r") ++ (unspec:SI [(const_int 0)] UNSPEC_LOAD_GOT_REGISTER))] ++ "" ++ "nextpc\\t%0 ++\\t1: ++\\tmovhi\\t%1, %%hiadj(_GLOBAL_OFFSET_TABLE_ - 1b) ++\\taddi\\t%1, %1, %%lo(_GLOBAL_OFFSET_TABLE_ - 1b)" ++ [(set_attr "length" "12")]) ++ ++;; When generating pic, we need to load the symbol offset into a register. ++;; So that the optimizer does not confuse this with a normal symbol load ++;; we use an unspec. The offset will be loaded from a constant pool entry, ++;; since that is the only type of relocation we can use. ++ ++;; The rather odd constraints on the following are to force reload to leave ++;; the insn alone, and to force the minipool generation pass to then move ++;; the GOT symbol to memory. ++ ++;; FIXME:these uses look unnecessary. ++(define_insn "pic_load_addr" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec:SI [(match_operand:SI 1 "register_operand" "r") ++ (match_operand:SI 2 "" "mX")] UNSPEC_PIC_SYM)) ++ (use (match_dup 1))] ++ "flag_pic" ++ "ldw\\t%0, %%got(%2)(%1)") ++ ++(define_insn "pic_load_call_addr" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec:SI [(match_operand:SI 1 "register_operand" "r") ++ (match_operand:SI 2 "" "mX")] UNSPEC_PIC_CALL_SYM)) ++ (use (match_dup 1))] ++ "flag_pic" ++ "ldw\\t%0, %%call(%2)(%1)") ++ ++;; TLS support ++ ++(define_insn "add_tls_gd" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec:SI [(match_operand:SI 1 "register_operand" "r") ++ (match_operand:SI 2 "" "mX")] UNSPEC_ADD_TLS_GD))] ++ "" ++ "addi\t%0, %1, %%tls_gd(%2)") ++ ++(define_insn "load_tls_ie" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec:SI [(match_operand:SI 1 "register_operand" "r") ++ (match_operand:SI 2 "" "mX")] UNSPEC_LOAD_TLS_IE))] ++ "" ++ "ldw\t%0, %%tls_ie(%2)(%1)") ++ ++(define_insn "add_tls_ldm" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec:SI [(match_operand:SI 1 "register_operand" "r") ++ (match_operand:SI 2 "" "mX")] UNSPEC_ADD_TLS_LDM))] ++ "" ++ "addi\t%0, %1, %%tls_ldm(%2)") ++ ++(define_insn "add_tls_ldo" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec:SI [(match_operand:SI 1 "register_operand" "r") ++ (match_operand:SI 2 "" "mX")] UNSPEC_ADD_TLS_LDO))] ++ "" ++ "addi\t%0, %1, %%tls_ldo(%2)") ++ ++(define_insn "add_tls_le" ++ [(set (match_operand:SI 0 "register_operand" "=r") ++ (unspec:SI [(match_operand:SI 1 "register_operand" "r") ++ (match_operand:SI 2 "" "mX")] UNSPEC_ADD_TLS_LE))] ++ "" ++ "addi\t%0, %1, %%tls_le(%2)") ++ ++ ++;***************************************************************************** ++;* ++;* Peepholes ++;* ++;***************************************************************************** ++ ++ ++;; Local Variables: ++;; mode: lisp ++;; End: +Index: gcc-4.1.2/gcc/config/nios2/nios2.opt +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gcc-4.1.2/gcc/config/nios2/nios2.opt 2010-06-30 08:50:26.000000000 +0200 +@@ -0,0 +1,519 @@ ++; NOT ASSIGNED TO FSF. COPYRIGHT ALTERA. ++; Options for the Nios II port of the compiler. ++ ++; This file is part of GCC. ++; ++; GCC is free software; you can 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. ++ ++mhw-div ++Target Report Mask(HAS_DIV) ++Enable DIV, DIVU ++ ++mhw-mul ++Target Report Mask(HAS_MUL) ++Enable MUL instructions ++ ++mhw-mulx ++Target Report Mask(HAS_MULX) ++Enable MULX instructions, assume fast shifter ++ ++mfast-sw-div ++Target Report Mask(FAST_SW_DIV) ++Use table based fast divide (default at -O3) ++ ++minline-memory ++Target Report Mask(INLINE_MEMCPY) ++Inline small memcpy (default when optimizing) ++ ++mbypass-cache ++Target Report Mask(BYPASS_CACHE) ++All ld/st instructions use io variants ++ ++mstack-check ++Target Report Mask(STACK_CHECK) ++Enable stack limit checking ++ ++mreverse-bitfields ++Target Report Mask(REVERSE_BITFIELDS) ++Reverse the order of bitfields in a struct ++ ++meb ++Target Report RejectNegative Mask(BIG_ENDIAN) ++Use big-endian byte order ++ ++mel ++Target Report RejectNegative InverseMask(BIG_ENDIAN) ++Use little-endian byte order ++ ++mcustom-fpu-cfg= ++Target RejectNegative Joined Var(nios2_custom_fpu_cfg_string) VarExists ++Floating point custom instruction configuration name ++ ++mno-custom-ftruncds ++Target Report RejectNegative Var(nios2_custom_ftruncds, -1) VarExists ++Do not use the ftruncds custom instruction ++ ++mcustom-ftruncds= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_ftruncds) VarExists ++Integer id (N) of ftruncds custom instruction ++ ++mno-custom-fextsd ++Target Report RejectNegative Var(nios2_custom_fextsd, -1) VarExists ++Do not use the fextsd custom instruction ++ ++mcustom-fextsd= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fextsd) VarExists ++Integer id (N) of fextsd custom instruction ++ ++mno-custom-fixdu ++Target Report RejectNegative Var(nios2_custom_fixdu, -1) VarExists ++Do not use the fixdu custom instruction ++ ++mcustom-fixdu= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fixdu) VarExists ++Integer id (N) of fixdu custom instruction ++ ++mno-custom-fixdi ++Target Report RejectNegative Var(nios2_custom_fixdi, -1) VarExists ++Do not use the fixdi custom instruction ++ ++mcustom-fixdi= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fixdi) VarExists ++Integer id (N) of fixdi custom instruction ++ ++mno-custom-fixsu ++Target Report RejectNegative Var(nios2_custom_fixsu, -1) VarExists ++Do not use the fixsu custom instruction ++ ++mcustom-fixsu= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fixsu) VarExists ++Integer id (N) of fixsu custom instruction ++ ++mno-custom-fixsi ++Target Report RejectNegative Var(nios2_custom_fixsi, -1) VarExists ++Do not use the fixsi custom instruction ++ ++mcustom-fixsi= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fixsi) VarExists ++Integer id (N) of fixsi custom instruction ++ ++mno-custom-floatud ++Target Report RejectNegative Var(nios2_custom_floatud, -1) VarExists ++Do not use the floatud custom instruction ++ ++mcustom-floatud= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_floatud) VarExists ++Integer id (N) of floatud custom instruction ++ ++mno-custom-floatid ++Target Report RejectNegative Var(nios2_custom_floatid, -1) VarExists ++Do not use the floatid custom instruction ++ ++mcustom-floatid= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_floatid) VarExists ++Integer id (N) of floatid custom instruction ++ ++mno-custom-floatus ++Target Report RejectNegative Var(nios2_custom_floatus, -1) VarExists ++Do not use the floatus custom instruction ++ ++mcustom-floatus= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_floatus) VarExists ++Integer id (N) of floatus custom instruction ++ ++mno-custom-floatis ++Target Report RejectNegative Var(nios2_custom_floatis, -1) VarExists ++Do not use the floatis custom instruction ++ ++mcustom-floatis= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_floatis) VarExists ++Integer id (N) of floatis custom instruction ++ ++mno-custom-fcmpned ++Target Report RejectNegative Var(nios2_custom_fcmpned, -1) VarExists ++Do not use the fcmpned custom instruction ++ ++mcustom-fcmpned= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fcmpned) VarExists ++Integer id (N) of fcmpned custom instruction ++ ++mno-custom-fcmpeqd ++Target Report RejectNegative Var(nios2_custom_fcmpeqd, -1) VarExists ++Do not use the fcmpeqd custom instruction ++ ++mcustom-fcmpeqd= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fcmpeqd) VarExists ++Integer id (N) of fcmpeqd custom instruction ++ ++mno-custom-fcmpged ++Target Report RejectNegative Var(nios2_custom_fcmpged, -1) VarExists ++Do not use the fcmpged custom instruction ++ ++mcustom-fcmpged= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fcmpged) VarExists ++Integer id (N) of fcmpged custom instruction ++ ++mno-custom-fcmpgtd ++Target Report RejectNegative Var(nios2_custom_fcmpgtd, -1) VarExists ++Do not use the fcmpgtd custom instruction ++ ++mcustom-fcmpgtd= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fcmpgtd) VarExists ++Integer id (N) of fcmpgtd custom instruction ++ ++mno-custom-fcmpled ++Target Report RejectNegative Var(nios2_custom_fcmpled, -1) VarExists ++Do not use the fcmpled custom instruction ++ ++mcustom-fcmpled= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fcmpled) VarExists ++Integer id (N) of fcmpled custom instruction ++ ++mno-custom-fcmpltd ++Target Report RejectNegative Var(nios2_custom_fcmpltd, -1) VarExists ++Do not use the fcmpltd custom instruction ++ ++mcustom-fcmpltd= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fcmpltd) VarExists ++Integer id (N) of fcmpltd custom instruction ++ ++mno-custom-flogd ++Target Report RejectNegative Var(nios2_custom_flogd, -1) VarExists ++Do not use the flogd custom instruction ++ ++mcustom-flogd= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_flogd) VarExists ++Integer id (N) of flogd custom instruction ++ ++mno-custom-fexpd ++Target Report RejectNegative Var(nios2_custom_fexpd, -1) VarExists ++Do not use the fexpd custom instruction ++ ++mcustom-fexpd= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fexpd) VarExists ++Integer id (N) of fexpd custom instruction ++ ++mno-custom-fatand ++Target Report RejectNegative Var(nios2_custom_fatand, -1) VarExists ++Do not use the fatand custom instruction ++ ++mcustom-fatand= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fatand) VarExists ++Integer id (N) of fatand custom instruction ++ ++mno-custom-ftand ++Target Report RejectNegative Var(nios2_custom_ftand, -1) VarExists ++Do not use the ftand custom instruction ++ ++mcustom-ftand= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_ftand) VarExists ++Integer id (N) of ftand custom instruction ++ ++mno-custom-fsind ++Target Report RejectNegative Var(nios2_custom_fsind, -1) VarExists ++Do not use the fsind custom instruction ++ ++mcustom-fsind= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fsind) VarExists ++Integer id (N) of fsind custom instruction ++ ++mno-custom-fcosd ++Target Report RejectNegative Var(nios2_custom_fcosd, -1) VarExists ++Do not use the fcosd custom instruction ++ ++mcustom-fcosd= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fcosd) VarExists ++Integer id (N) of fcosd custom instruction ++ ++mno-custom-fsqrtd ++Target Report RejectNegative Var(nios2_custom_fsqrtd, -1) VarExists ++Do not use the fsqrtd custom instruction ++ ++mcustom-fsqrtd= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fsqrtd) VarExists ++Integer id (N) of fsqrtd custom instruction ++ ++mno-custom-fabsd ++Target Report RejectNegative Var(nios2_custom_fabsd, -1) VarExists ++Do not use the fabsd custom instruction ++ ++mcustom-fabsd= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fabsd) VarExists ++Integer id (N) of fabsd custom instruction ++ ++mno-custom-fnegd ++Target Report RejectNegative Var(nios2_custom_fnegd, -1) VarExists ++Do not use the fnegd custom instruction ++ ++mcustom-fnegd= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fnegd) VarExists ++Integer id (N) of fnegd custom instruction ++ ++mno-custom-fmaxd ++Target Report RejectNegative Var(nios2_custom_fmaxd, -1) VarExists ++Do not use the fmaxd custom instruction ++ ++mcustom-fmaxd= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fmaxd) VarExists ++Integer id (N) of fmaxd custom instruction ++ ++mno-custom-fmind ++Target Report RejectNegative Var(nios2_custom_fmind, -1) VarExists ++Do not use the fmind custom instruction ++ ++mcustom-fmind= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fmind) VarExists ++Integer id (N) of fmind custom instruction ++ ++mno-custom-fdivd ++Target Report RejectNegative Var(nios2_custom_fdivd, -1) VarExists ++Do not use the fdivd custom instruction ++ ++mcustom-fdivd= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fdivd) VarExists ++Integer id (N) of fdivd custom instruction ++ ++mno-custom-fmuld ++Target Report RejectNegative Var(nios2_custom_fmuld, -1) VarExists ++Do not use the fmuld custom instruction ++ ++mcustom-fmuld= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fmuld) VarExists ++Integer id (N) of fmuld custom instruction ++ ++mno-custom-fsubd ++Target Report RejectNegative Var(nios2_custom_fsubd, -1) VarExists ++Do not use the fsubd custom instruction ++ ++mcustom-fsubd= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fsubd) VarExists ++Integer id (N) of fsubd custom instruction ++ ++mno-custom-faddd ++Target Report RejectNegative Var(nios2_custom_faddd, -1) VarExists ++Do not use the faddd custom instruction ++ ++mcustom-faddd= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_faddd) VarExists ++Integer id (N) of faddd custom instruction ++ ++mno-custom-fcmpnes ++Target Report RejectNegative Var(nios2_custom_fcmpnes, -1) VarExists ++Do not use the fcmpnes custom instruction ++ ++mcustom-fcmpnes= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fcmpnes) VarExists ++Integer id (N) of fcmpnes custom instruction ++ ++mno-custom-fcmpeqs ++Target Report RejectNegative Var(nios2_custom_fcmpeqs, -1) VarExists ++Do not use the fcmpeqs custom instruction ++ ++mcustom-fcmpeqs= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fcmpeqs) VarExists ++Integer id (N) of fcmpeqs custom instruction ++ ++mno-custom-fcmpges ++Target Report RejectNegative Var(nios2_custom_fcmpges, -1) VarExists ++Do not use the fcmpges custom instruction ++ ++mcustom-fcmpges= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fcmpges) VarExists ++Integer id (N) of fcmpges custom instruction ++ ++mno-custom-fcmpgts ++Target Report RejectNegative Var(nios2_custom_fcmpgts, -1) VarExists ++Do not use the fcmpgts custom instruction ++ ++mcustom-fcmpgts= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fcmpgts) VarExists ++Integer id (N) of fcmpgts custom instruction ++ ++mno-custom-fcmples ++Target Report RejectNegative Var(nios2_custom_fcmples, -1) VarExists ++Do not use the fcmples custom instruction ++ ++mcustom-fcmples= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fcmples) VarExists ++Integer id (N) of fcmples custom instruction ++ ++mno-custom-fcmplts ++Target Report RejectNegative Var(nios2_custom_fcmplts, -1) VarExists ++Do not use the fcmplts custom instruction ++ ++mcustom-fcmplts= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fcmplts) VarExists ++Integer id (N) of fcmplts custom instruction ++ ++mno-custom-flogs ++Target Report RejectNegative Var(nios2_custom_flogs, -1) VarExists ++Do not use the flogs custom instruction ++ ++mcustom-flogs= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_flogs) VarExists ++Integer id (N) of flogs custom instruction ++ ++mno-custom-fexps ++Target Report RejectNegative Var(nios2_custom_fexps, -1) VarExists ++Do not use the fexps custom instruction ++ ++mcustom-fexps= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fexps) VarExists ++Integer id (N) of fexps custom instruction ++ ++mno-custom-fatans ++Target Report RejectNegative Var(nios2_custom_fatans, -1) VarExists ++Do not use the fatans custom instruction ++ ++mcustom-fatans= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fatans) VarExists ++Integer id (N) of fatans custom instruction ++ ++mno-custom-ftans ++Target Report RejectNegative Var(nios2_custom_ftans, -1) VarExists ++Do not use the ftans custom instruction ++ ++mcustom-ftans= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_ftans) VarExists ++Integer id (N) of ftans custom instruction ++ ++mno-custom-fsins ++Target Report RejectNegative Var(nios2_custom_fsins, -1) VarExists ++Do not use the fsins custom instruction ++ ++mcustom-fsins= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fsins) VarExists ++Integer id (N) of fsins custom instruction ++ ++mno-custom-fcoss ++Target Report RejectNegative Var(nios2_custom_fcoss, -1) VarExists ++Do not use the fcoss custom instruction ++ ++mcustom-fcoss= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fcoss) VarExists ++Integer id (N) of fcoss custom instruction ++ ++mno-custom-fsqrts ++Target Report RejectNegative Var(nios2_custom_fsqrts, -1) VarExists ++Do not use the fsqrts custom instruction ++ ++mcustom-fsqrts= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fsqrts) VarExists ++Integer id (N) of fsqrts custom instruction ++ ++mno-custom-fabss ++Target Report RejectNegative Var(nios2_custom_fabss, -1) VarExists ++Do not use the fabss custom instr ++ ++mcustom-fabss= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fabss) VarExists ++Integer id (N) of fabss custom instruction ++ ++mno-custom-fnegs ++Target Report RejectNegative Var(nios2_custom_fnegs, -1) VarExists ++Do not use the fnegs custom instruction ++ ++mcustom-fnegs= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fnegs) VarExists ++Integer id (N) of fnegs custom instruction ++ ++mno-custom-fmaxs ++Target Report RejectNegative Var(nios2_custom_fmaxs, -1) VarExists ++Do not use the fmaxs custom instruction ++ ++mcustom-fmaxs= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fmaxs) VarExists ++Integer id (N) of fmaxs custom instruction ++ ++mno-custom-fmins ++Target Report RejectNegative Var(nios2_custom_fmins, -1) VarExists ++Do not use the fmins custom instruction ++ ++mcustom-fmins= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fmins) VarExists ++Integer id (N) of fmins custom instruction ++ ++mno-custom-fdivs ++Target Report RejectNegative Var(nios2_custom_fdivs, -1) VarExists ++Do not use the fdivs custom instruction ++ ++mcustom-fdivs= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fdivs) VarExists ++Integer id (N) of fdivs custom instruction ++ ++mno-custom-fmuls ++Target Report RejectNegative Var(nios2_custom_fmuls, -1) VarExists ++Do not use the fmuls custom instruction ++ ++mcustom-fmuls= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fmuls) VarExists ++Integer id (N) of fmuls custom instruction ++ ++mno-custom-fsubs ++Target Report RejectNegative Var(nios2_custom_fsubs, -1) VarExists ++Do not use the fsubs custom instruction ++ ++mcustom-fsubs= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fsubs) VarExists ++Integer id (N) of fsubs custom instruction ++ ++mno-custom-fadds ++Target Report RejectNegative Var(nios2_custom_fadds, -1) VarExists ++Do not use the fadds custom instruction ++ ++mcustom-fadds= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fadds) VarExists ++Integer id (N) of fadds custom instruction ++ ++mno-custom-frdy ++Target Report RejectNegative Var(nios2_custom_frdy, -1) VarExists ++Do not use the frdy custom instruction ++ ++mcustom-frdy= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_frdy) VarExists ++Integer id (N) of frdy custom instruction ++ ++mno-custom-frdxhi ++Target Report RejectNegative Var(nios2_custom_frdxhi, -1) VarExists ++Do not use the frdxhi custom instruction ++ ++mcustom-frdxhi= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_frdxhi) VarExists ++Integer id (N) of frdxhi custom instruction ++ ++mno-custom-frdxlo ++Target Report RejectNegative Var(nios2_custom_frdxlo, -1) VarExists ++Do not use the frdxlo custom instruction ++ ++mcustom-frdxlo= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_frdxlo) VarExists ++Integer id (N) of frdxlo custom instruction ++ ++mno-custom-fwry ++Target Report RejectNegative Var(nios2_custom_fwry, -1) VarExists ++Do not use the fwry custom instruction ++ ++mcustom-fwry= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fwry) VarExists ++Integer id (N) of fwry custom instruction ++ ++mno-custom-fwrx ++Target Report RejectNegative Var(nios2_custom_fwrx, -1) VarExists ++Do not use the fwrx custom instruction ++ ++mcustom-fwrx= ++Target Report RejectNegative Joined UInteger Var(nios2_custom_fwrx) VarExists ++Integer id (N) of fwrx custom instruction +Index: gcc-4.1.2/gcc/config/nios2/t-linux +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gcc-4.1.2/gcc/config/nios2/t-linux 2010-06-30 08:50:26.000000000 +0200 +@@ -0,0 +1,9 @@ ++# Soft-float functions go in glibc only, to facilitate the possible ++# future addition of exception and rounding mode support integrated ++# with <fenv.h>. ++ ++FPBIT= ++DPBIT= ++LIB2FUNCS_EXCLUDE = _floatdidf _floatdisf _fixunsdfsi _fixunssfsi \ ++ _fixunsdfdi _fixdfdi _fixunssfdi _fixsfdi _floatundidf _floatundisf ++LIB2FUNCS_EXTRA += $(srcdir)/config/nios2/linux-atomic.c +Index: gcc-4.1.2/gcc/config/nios2/t-nios2 +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gcc-4.1.2/gcc/config/nios2/t-nios2 2010-06-30 08:50:26.000000000 +0200 +@@ -0,0 +1,176 @@ ++## ++## Compiler flags to use when compiling libgcc2.c. ++## ++## LIB2FUNCS_EXTRA ++## A list of source file names to be compiled or assembled and inserted into ++## libgcc.a. ++ ++LIB2FUNCS_EXTRA=$(srcdir)/config/nios2/lib2-divmod.c \ ++ $(srcdir)/config/nios2/lib2-divmod-hi.c \ ++ $(srcdir)/config/nios2/lib2-divtable.c \ ++ $(srcdir)/config/nios2/lib2-mul.c ++ ++## ++## Floating Point Emulation ++## To have GCC include software floating point libraries in libgcc.a define FPBIT ++## and DPBIT along with a few rules as follows: ++## ++## # We want fine grained libraries, so use the new code ++## # to build the floating point emulation libraries. ++FPBIT=fp-bit.c ++DPBIT=dp-bit.c ++ ++TARGET_LIBGCC2_CFLAGS = -O2 -fpic ++ ++# FLOAT_ONLY - no doubles ++# SMALL_MACHINE - QI/HI is faster than SI ++# Actually SMALL_MACHINE uses chars and shorts instead of ints ++# since ints (16-bit ones as they are today) are at least as fast ++# as chars and shorts, don't define SMALL_MACHINE ++# CMPtype - type returned by FP compare, i.e. INT (hard coded in fp-bit - see code ) ++ ++$(FPBIT): $(srcdir)/config/fp-bit.c Makefile ++ echo '#define FLOAT' > ${FPBIT} ++ echo '#ifndef __nios2_big_endian__' >> ${FPBIT} ++ echo '#define FLOAT_BIT_ORDER_MISMATCH' >> ${FPBIT} ++ echo '#endif' >> ${FPBIT} ++ cat $(srcdir)/config/fp-bit.c >> ${FPBIT} ++ ++$(DPBIT): $(srcdir)/config/fp-bit.c Makefile ++ echo '' > ${DPBIT} ++ echo '#ifndef __nios2_big_endian__' >> ${DPBIT} ++ echo '#define FLOAT_BIT_ORDER_MISMATCH' >> ${DPBIT} ++ echo '#endif' >> ${DPBIT} ++ cat $(srcdir)/config/fp-bit.c >> ${DPBIT} ++ ++EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o crti.o crtn.o crtbeginS.o \ ++ crtbeginT.o crtendS.o ++ ++# Assemble startup files. ++$(T)crti.o: $(srcdir)/config/nios2/crti.asm $(GCC_PASSES) ++ $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \ ++ -c -o $(T)crti.o -x assembler-with-cpp $(srcdir)/config/nios2/crti.asm ++ ++$(T)crtn.o: $(srcdir)/config/nios2/crtn.asm $(GCC_PASSES) ++ $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \ ++ -c -o $(T)crtn.o -x assembler-with-cpp $(srcdir)/config/nios2/crtn.asm ++ ++ ++## You may need to provide additional #defines at the beginning of ++## fp-bit.c and dp-bit.c to control target endianness and other options ++## ++## CRTSTUFF_T_CFLAGS ++## Special flags used when compiling crtstuff.c. See Initialization. ++## ++## CRTSTUFF_T_CFLAGS_S ++## Special flags used when compiling crtstuff.c for shared linking. Used ++## if you use crtbeginS.o and crtendS.o in EXTRA-PARTS. See Initialization. ++## ++## MULTILIB_OPTIONS ++## For some targets, invoking GCC in different ways produces objects that ++## can not be linked together. For example, for some targets GCC produces ++## both big and little endian code. For these targets, you must arrange ++## for multiple versions of libgcc.a to be compiled, one for each set of ++## incompatible options. When GCC invokes the linker, it arranges to link ++## in the right version of libgcc.a, based on the command line options ++## used. ++## The MULTILIB_OPTIONS macro lists the set of options for which special ++## versions of libgcc.a must be built. Write options that are mutually ++## incompatible side by side, separated by a slash. Write options that may ++## be used together separated by a space. The build procedure will build ++## all combinations of compatible options. ++## ++## For example, if you set MULTILIB_OPTIONS to m68000/m68020 msoft-float, ++## Makefile will build special versions of libgcc.a using the following ++## sets of options: -m68000, -m68020, -msoft-float, -m68000 -msoft-float, ++## and -m68020 -msoft-float. ++ ++ ++## The BUILD_BE_MULTILIB and BUILD_PG_MULTILIB variables allow the ++## makefile user to enable/disable the generation of the precompiled ++## big endian and profiling libraries. By default, the big endian ++## libraries are not created on a windows build and the profiling ++## libraries are not created on a Solaris build. All other library ++## combinations are created by default. ++ ++# Uncomment to temporarily avoid building big endian and profiling libraries during a Windows build. ++#ifeq ($(DEV_HOST_OS), win32) ++#BUILD_BE_MULTILIB ?= 0 ++#BUILD_PG_MULTILIB ?= 0 ++#endif ++ ++#By default, avoid building the profiling libraries during a Solaris build. ++ifeq ($(DEV_HOST_OS), solaris) ++BUILD_PG_MULTILIB ?= 0 ++endif ++ ++BUILD_BE_MULTILIB ?= 0 ++BUILD_PG_MULTILIB ?= 1 ++BUILD_MULTILIB ?= 0 ++ ++ifeq ($(BUILD_MULTILIB), 1) ++ ++MULTILIB_OPTIONS = mno-hw-mul mhw-mulx mstack-check mcustom-fpu-cfg=60-1 mcustom-fpu-cfg=60-2 ++ ++#Add the profiling flag to the multilib variable if required ++ifeq ($(BUILD_PG_MULTILIB), 1) ++MULTILIB_OPTIONS += pg ++endif ++ ++#Add the big endian flag to the multilib variable if required ++ifeq ($(BUILD_BE_MULTILIB), 1) ++MULTILIB_OPTIONS += EB/EL ++endif ++ ++endif ++ ++## MULTILIB_DIRNAMES ++## If MULTILIB_OPTIONS is used, this variable specifies the directory names ++## that should be used to hold the various libraries. Write one element in ++## MULTILIB_DIRNAMES for each element in MULTILIB_OPTIONS. If ++## MULTILIB_DIRNAMES is not used, the default value will be ++## MULTILIB_OPTIONS, with all slashes treated as spaces. ++## For example, if MULTILIB_OPTIONS is set to m68000/m68020 msoft-float, ++## then the default value of MULTILIB_DIRNAMES is m68000 m68020 ++## msoft-float. You may specify a different value if you desire a ++## different set of directory names. ++ ++# MULTILIB_DIRNAMES = ++ ++## MULTILIB_MATCHES ++## Sometimes the same option may be written in two different ways. If an ++## option is listed in MULTILIB_OPTIONS, GCC needs to know about any ++## synonyms. In that case, set MULTILIB_MATCHES to a list of items of the ++## form option=option to describe all relevant synonyms. For example, ++## m68000=mc68000 m68020=mc68020. ++ ++ifeq ($(BUILD_MULTILIB), 1) ++ifeq ($(BUILD_BE_MULTILIB), 1) ++MULTILIB_MATCHES = EL=mel EB=meb ++endif ++endif ++ ++## ++## MULTILIB_EXCEPTIONS ++## Sometimes when there are multiple sets of MULTILIB_OPTIONS being ++## specified, there are combinations that should not be built. In that ++## case, set MULTILIB_EXCEPTIONS to be all of the switch exceptions in ++## shell case syntax that should not be built. ++## For example, in the PowerPC embedded ABI support, it is not desirable to ++## build libraries compiled with the -mcall-aix option and either of the ++## -fleading-underscore or -mlittle options at the same time. Therefore ++## MULTILIB_EXCEPTIONS is set to ++## ++## *mcall-aix/*fleading-underscore* *mlittle/*mcall-aix* ++## ++ ++ifeq ($(BUILD_MULTILIB), 1) ++MULTILIB_EXCEPTIONS = *mno-hw-mul/*mhw-mulx* *mcustom-fpu-cfg=60-1/*mcustom-fpu-cfg=60-2* ++endif ++ ++## ++## MULTILIB_EXTRA_OPTS Sometimes it is desirable that when building ++## multiple versions of libgcc.a certain options should always be passed on ++## to the compiler. In that case, set MULTILIB_EXTRA_OPTS to be the list ++## of options to be used for all builds. ++## diff --git a/recipes/gcc/gcc-4.1.2/nios2-lib-flags.patch b/recipes/gcc/gcc-4.1.2/nios2-lib-flags.patch new file mode 100644 index 0000000000..e125ba0f6c --- /dev/null +++ b/recipes/gcc/gcc-4.1.2/nios2-lib-flags.patch @@ -0,0 +1,10 @@ +Index: gcc-4.1.2/config/mt-ospace +=================================================================== +--- gcc-4.1.2.orig/config/mt-ospace 2010-06-02 10:23:01.000000000 +0200 ++++ gcc-4.1.2/config/mt-ospace 2010-06-02 10:23:28.000000000 +0200 +@@ -1,3 +1,2 @@ +-# Build libraries optimizing for space, not speed. +- CFLAGS_FOR_TARGET = -g -Os +- CXXFLAGS_FOR_TARGET = -g -Os ++ CFLAGS_FOR_TARGET = -g -O2 ++ CXXFLAGS_FOR_TARGET = -g -O2 diff --git a/recipes/glibc/glibc-2.5/nios2-elf.patch b/recipes/glibc/glibc-2.5/nios2-elf.patch new file mode 100644 index 0000000000..240bbeca8a --- /dev/null +++ b/recipes/glibc/glibc-2.5/nios2-elf.patch @@ -0,0 +1,87 @@ +*** glibc-2.5/elf/elf.h 2010-05-31 16:05:58.000000000 +0200 +--- glibc-2.5-/elf/elf.h 2008-12-19 00:35:12.000000000 +0100 +*************** +*** 250,255 **** +--- 250,257 ---- + #define EM_XTENSA 94 /* Tensilica Xtensa Architecture */ + #define EM_NUM 95 + ++ #define EM_ALTERA_NIOS2 113 /* Altera Nios II */ ++ + /* If it is necessary to assign new unofficial EM_* values, please + pick large random numbers (0x8523, 0xa7f2, etc.) to minimize the + chances of collision with official or non-GNU unofficial values. */ +*************** +*** 1511,1518 **** + #define R_MIPS_TLS_TPREL64 48 /* TP-relative offset, 64 bit */ + #define R_MIPS_TLS_TPREL_HI16 49 /* TP-relative offset, high 16 bits */ + #define R_MIPS_TLS_TPREL_LO16 50 /* TP-relative offset, low 16 bits */ + /* Keep this the last entry. */ +! #define R_MIPS_NUM 51 + + /* Legal values for p_type field of Elf32_Phdr. */ + +--- 1513,1521 ---- + #define R_MIPS_TLS_TPREL64 48 /* TP-relative offset, 64 bit */ + #define R_MIPS_TLS_TPREL_HI16 49 /* TP-relative offset, high 16 bits */ + #define R_MIPS_TLS_TPREL_LO16 50 /* TP-relative offset, low 16 bits */ ++ #define R_MIPS_GLOB_DAT 51 + /* Keep this the last entry. */ +! #define R_MIPS_NUM 52 + + /* Legal values for p_type field of Elf32_Phdr. */ + +*************** +*** 2602,2607 **** +--- 2605,2655 ---- + #define R_M32R_GOTOFF_LO 64 /* Low 16 bit offset to GOT */ + #define R_M32R_NUM 256 /* Keep this the last entry. */ + ++ /* Legal values for d_tag (dynamic entry type). */ ++ #define DT_NIOS2_GP 0x70000002 /* Address of _gp. */ ++ ++ /* Nios II relocs. */ ++ #define R_NIOS2_NONE 0 /* No reloc. */ ++ #define R_NIOS2_S16 1 /* Direct signed 16 bit. */ ++ #define R_NIOS2_U16 2 /* Direct unsigned 16 bit. */ ++ #define R_NIOS2_PCREL16 3 /* PC relative 16 bit. */ ++ #define R_NIOS2_CALL26 4 ++ #define R_NIOS2_IMM5 5 ++ #define R_NIOS2_CACHE_OPX 6 ++ #define R_NIOS2_IMM6 7 ++ #define R_NIOS2_IMM8 8 ++ #define R_NIOS2_HI16 9 ++ #define R_NIOS2_LO16 10 ++ #define R_NIOS2_HIADJ16 11 ++ #define R_NIOS2_BFD_RELOC_32 12 ++ #define R_NIOS2_BFD_RELOC_16 13 ++ #define R_NIOS2_BFD_RELOC_8 14 ++ #define R_NIOS2_GPREL 15 ++ #define R_NIOS2_GNU_VTINHERIT 16 ++ #define R_NIOS2_GNU_VTENTRY 17 ++ #define R_NIOS2_UJMP 18 ++ #define R_NIOS2_CJMP 19 ++ #define R_NIOS2_CALLR 20 ++ #define R_NIOS2_ALIGN 21 ++ #define R_NIOS2_GOT16 22 ++ #define R_NIOS2_CALL16 23 ++ #define R_NIOS2_GOTOFF_LO 24 ++ #define R_NIOS2_GOTOFF_HA 25 ++ #define R_NIOS2_PCREL_LO 26 ++ #define R_NIOS2_PCREL_HA 27 ++ #define R_NIOS2_TLS_GD16 28 ++ #define R_NIOS2_TLS_LDM16 29 ++ #define R_NIOS2_TLS_LDO16 30 ++ #define R_NIOS2_TLS_IE16 31 ++ #define R_NIOS2_TLS_LE16 32 ++ #define R_NIOS2_TLS_DTPMOD 33 ++ #define R_NIOS2_TLS_DTPREL 34 ++ #define R_NIOS2_TLS_TPREL 35 ++ #define R_NIOS2_COPY 36 ++ #define R_NIOS2_GLOB_DAT 37 ++ #define R_NIOS2_JUMP_SLOT 38 ++ #define R_NIOS2_RELATIVE 39 ++ #define R_NIOS2_GOTOFF 40 + + __END_DECLS + diff --git a/recipes/glibc/glibc-2.5/nios2-iconv.patch b/recipes/glibc/glibc-2.5/nios2-iconv.patch new file mode 100644 index 0000000000..7aa574816f --- /dev/null +++ b/recipes/glibc/glibc-2.5/nios2-iconv.patch @@ -0,0 +1,85 @@ +*** glibc-2.5/iconv/iconvconfig.c 2006-09-21 05:57:30.000000000 +0200 +--- /home/frans/workspace/nios2/wrs-linux-4.1-176-nios2-wrs-linux-gnu/glibc-2.5/iconv/iconvconfig.c 2008-11-18 18:43:02.000000000 +0100 +*************** +*** 1011,1016 **** +--- 1011,1045 ---- + module name offset + (following last entry with step count 0) + */ ++ ++ struct hash_entry *hash_table; ++ size_t hash_size; ++ ++ /* Function to insert the names. */ ++ static void ++ name_insert (const void *nodep, VISIT value, int level) ++ { ++ struct name *name; ++ unsigned int idx; ++ unsigned int hval2; ++ ++ if (value != leaf && value != postorder) ++ return; ++ ++ name = *(struct name **) nodep; ++ idx = name->hashval % hash_size; ++ hval2 = 1 + name->hashval % (hash_size - 2); ++ ++ while (hash_table[idx].string_offset != 0) ++ if ((idx += hval2) >= hash_size) ++ idx -= hash_size; ++ ++ hash_table[idx].string_offset = strtaboffset (name->strent); ++ ++ assert (name->module_idx != -1); ++ hash_table[idx].module_idx = name->module_idx; ++ } ++ + static int + write_output (void) + { +*************** +*** 1018,1025 **** + char *string_table; + size_t string_table_size; + struct gconvcache_header header; +- struct hash_entry *hash_table; +- size_t hash_size; + struct module_entry *module_table; + char *extra_table; + char *cur_extra_table; +--- 1047,1052 ---- +*************** +*** 1032,1062 **** + char tmpfname[(output_file == NULL ? sizeof finalname : output_file_len + 1) + + strlen (".XXXXXX")]; + +- /* Function to insert the names. */ +- auto void +- name_insert (const void *nodep, VISIT value, int level) +- { +- struct name *name; +- unsigned int idx; +- unsigned int hval2; +- +- if (value != leaf && value != postorder) +- return; +- +- name = *(struct name **) nodep; +- idx = name->hashval % hash_size; +- hval2 = 1 + name->hashval % (hash_size - 2); +- +- while (hash_table[idx].string_offset != 0) +- if ((idx += hval2) >= hash_size) +- idx -= hash_size; +- +- hash_table[idx].string_offset = strtaboffset (name->strent); +- +- assert (name->module_idx != -1); +- hash_table[idx].module_idx = name->module_idx; +- } +- + /* Open the output file. */ + if (output_file == NULL) + { +--- 1059,1064 ---- diff --git a/recipes/glibc/glibc-2.5/nios2-ld-collate.patch b/recipes/glibc/glibc-2.5/nios2-ld-collate.patch new file mode 100644 index 0000000000..abdc7d9667 --- /dev/null +++ b/recipes/glibc/glibc-2.5/nios2-ld-collate.patch @@ -0,0 +1,308 @@ +*** glibc-2.5/./locale/programs/ld-collate.c- 2006-09-21 05:57:30.000000000 +0200 +--- glibc-2.5/./locale/programs/ld-collate.c 2010-06-01 10:00:50.000000000 +0200 +*************** +*** 1934,1945 **** + return retval | ((elem->section->ruleidx & 0x7f) << 24); + } + + + void + collate_output (struct localedef_t *locale, const struct charmap_t *charmap, + const char *output_path) + { +- struct locale_collate_t *collate = locale->categories[LC_COLLATE].collate; + const size_t nelems = _NL_ITEM_INDEX (_NL_NUM_LC_COLLATE); + struct iovec iov[2 + nelems]; + struct locale_file data; +--- 1934,2066 ---- + return retval | ((elem->section->ruleidx & 0x7f) << 24); + } + ++ /* If localedef is every threaded, these would need to be __thread var. */ ++ struct obstack weightpool; ++ struct obstack extrapool; ++ struct obstack indirectpool; ++ struct collidx_table tablewc; ++ struct locale_collate_t *collate; ++ ++ static void ++ add_to_tablewc (uint32_t ch, struct element_t *runp) ++ { ++ if (runp->wcnext == NULL && runp->nwcs == 1) ++ { ++ int32_t weigthidx = output_weightwc (&weightpool, collate, runp); ++ collidx_table_add (&tablewc, ch, weigthidx); ++ } ++ else ++ { ++ /* As for the singlebyte table, we recognize sequences and ++ compress them. */ ++ struct element_t *lastp; ++ ++ collidx_table_add (&tablewc, ch, ++ -(obstack_object_size (&extrapool) / sizeof (uint32_t))); ++ ++ do ++ { ++ /* Store the current index in the weight table. We know that ++ the current position in the `extrapool' is aligned on a ++ 32-bit address. */ ++ int32_t weightidx; ++ int added; ++ ++ /* Find out wether this is a single entry or we have more than ++ one consecutive entry. */ ++ if (runp->wcnext != NULL ++ && runp->nwcs == runp->wcnext->nwcs ++ && wmemcmp ((wchar_t *) runp->wcs, ++ (wchar_t *)runp->wcnext->wcs, ++ runp->nwcs - 1) == 0 ++ && (runp->wcs[runp->nwcs - 1] ++ == runp->wcnext->wcs[runp->nwcs - 1] + 1)) ++ { ++ int i; ++ struct element_t *series_startp = runp; ++ struct element_t *curp; ++ ++ /* Now add first the initial byte sequence. */ ++ added = (1 + 1 + 2 * (runp->nwcs - 1)) * sizeof (int32_t); ++ if (sizeof (int32_t) == sizeof (int)) ++ obstack_make_room (&extrapool, added); ++ ++ /* More than one consecutive entry. We mark this by having ++ a negative index into the indirect table. */ ++ obstack_int32_grow_fast (&extrapool, ++ -(obstack_object_size (&indirectpool) ++ / sizeof (int32_t))); ++ obstack_int32_grow_fast (&extrapool, runp->nwcs - 1); ++ ++ do ++ runp = runp->wcnext; ++ while (runp->wcnext != NULL ++ && runp->nwcs == runp->wcnext->nwcs ++ && wmemcmp ((wchar_t *) runp->wcs, ++ (wchar_t *)runp->wcnext->wcs, ++ runp->nwcs - 1) == 0 ++ && (runp->wcs[runp->nwcs - 1] ++ == runp->wcnext->wcs[runp->nwcs - 1] + 1)); ++ ++ /* Now walk backward from here to the beginning. */ ++ curp = runp; ++ ++ for (i = 1; i < runp->nwcs; ++i) ++ obstack_int32_grow_fast (&extrapool, curp->wcs[i]); ++ ++ /* Now find the end of the consecutive sequence and ++ add all the indeces in the indirect pool. */ ++ do ++ { ++ weightidx = output_weightwc (&weightpool, collate, ++ curp); ++ obstack_int32_grow (&indirectpool, weightidx); ++ ++ curp = curp->wclast; ++ } ++ while (curp != series_startp); ++ ++ /* Add the final weight. */ ++ weightidx = output_weightwc (&weightpool, collate, curp); ++ obstack_int32_grow (&indirectpool, weightidx); ++ ++ /* And add the end byte sequence. Without length this ++ time. */ ++ for (i = 1; i < curp->nwcs; ++i) ++ obstack_int32_grow (&extrapool, curp->wcs[i]); ++ } ++ else ++ { ++ /* A single entry. Simply add the index and the length and ++ string (except for the first character which is already ++ tested for). */ ++ int i; ++ ++ /* Output the weight info. */ ++ weightidx = output_weightwc (&weightpool, collate, runp); ++ ++ added = (1 + 1 + runp->nwcs - 1) * sizeof (int32_t); ++ if (sizeof (int) == sizeof (int32_t)) ++ obstack_make_room (&extrapool, added); ++ ++ obstack_int32_grow_fast (&extrapool, weightidx); ++ obstack_int32_grow_fast (&extrapool, runp->nwcs - 1); ++ for (i = 1; i < runp->nwcs; ++i) ++ obstack_int32_grow_fast (&extrapool, runp->wcs[i]); ++ } ++ ++ /* Next entry. */ ++ lastp = runp; ++ runp = runp->wcnext; ++ } ++ while (runp != NULL); ++ } ++ } + + void + collate_output (struct localedef_t *locale, const struct charmap_t *charmap, + const char *output_path) + { + const size_t nelems = _NL_ITEM_INDEX (_NL_NUM_LC_COLLATE); + struct iovec iov[2 + nelems]; + struct locale_file data; +*************** +*** 1947,1962 **** + size_t cnt; + size_t ch; + int32_t tablemb[256]; +- struct obstack weightpool; +- struct obstack extrapool; +- struct obstack indirectpool; + struct section_list *sect; +- struct collidx_table tablewc; + uint32_t elem_size; + uint32_t *elem_table; + int i; + struct element_t *runp; + + data.magic = LIMAGIC (LC_COLLATE); + data.n = nelems; + iov[0].iov_base = (void *) &data; +--- 2068,2080 ---- + size_t cnt; + size_t ch; + int32_t tablemb[256]; + struct section_list *sect; + uint32_t elem_size; + uint32_t *elem_table; + int i; + struct element_t *runp; + ++ collate = locale->categories[LC_COLLATE].collate; + data.magic = LIMAGIC (LC_COLLATE); + data.n = nelems; + iov[0].iov_base = (void *) &data; +*************** +*** 2292,2414 **** + the table. In case we have more than one sequence starting with + the same byte we have to use extra indirection. */ + { +- auto void add_to_tablewc (uint32_t ch, struct element_t *runp); +- +- void add_to_tablewc (uint32_t ch, struct element_t *runp) +- { +- if (runp->wcnext == NULL && runp->nwcs == 1) +- { +- int32_t weigthidx = output_weightwc (&weightpool, collate, runp); +- collidx_table_add (&tablewc, ch, weigthidx); +- } +- else +- { +- /* As for the singlebyte table, we recognize sequences and +- compress them. */ +- struct element_t *lastp; +- +- collidx_table_add (&tablewc, ch, +- -(obstack_object_size (&extrapool) / sizeof (uint32_t))); +- +- do +- { +- /* Store the current index in the weight table. We know that +- the current position in the `extrapool' is aligned on a +- 32-bit address. */ +- int32_t weightidx; +- int added; +- +- /* Find out wether this is a single entry or we have more than +- one consecutive entry. */ +- if (runp->wcnext != NULL +- && runp->nwcs == runp->wcnext->nwcs +- && wmemcmp ((wchar_t *) runp->wcs, +- (wchar_t *)runp->wcnext->wcs, +- runp->nwcs - 1) == 0 +- && (runp->wcs[runp->nwcs - 1] +- == runp->wcnext->wcs[runp->nwcs - 1] + 1)) +- { +- int i; +- struct element_t *series_startp = runp; +- struct element_t *curp; +- +- /* Now add first the initial byte sequence. */ +- added = (1 + 1 + 2 * (runp->nwcs - 1)) * sizeof (int32_t); +- if (sizeof (int32_t) == sizeof (int)) +- obstack_make_room (&extrapool, added); +- +- /* More than one consecutive entry. We mark this by having +- a negative index into the indirect table. */ +- obstack_int32_grow_fast (&extrapool, +- -(obstack_object_size (&indirectpool) +- / sizeof (int32_t))); +- obstack_int32_grow_fast (&extrapool, runp->nwcs - 1); +- +- do +- runp = runp->wcnext; +- while (runp->wcnext != NULL +- && runp->nwcs == runp->wcnext->nwcs +- && wmemcmp ((wchar_t *) runp->wcs, +- (wchar_t *)runp->wcnext->wcs, +- runp->nwcs - 1) == 0 +- && (runp->wcs[runp->nwcs - 1] +- == runp->wcnext->wcs[runp->nwcs - 1] + 1)); +- +- /* Now walk backward from here to the beginning. */ +- curp = runp; +- +- for (i = 1; i < runp->nwcs; ++i) +- obstack_int32_grow_fast (&extrapool, curp->wcs[i]); +- +- /* Now find the end of the consecutive sequence and +- add all the indeces in the indirect pool. */ +- do +- { +- weightidx = output_weightwc (&weightpool, collate, +- curp); +- obstack_int32_grow (&indirectpool, weightidx); +- +- curp = curp->wclast; +- } +- while (curp != series_startp); +- +- /* Add the final weight. */ +- weightidx = output_weightwc (&weightpool, collate, curp); +- obstack_int32_grow (&indirectpool, weightidx); +- +- /* And add the end byte sequence. Without length this +- time. */ +- for (i = 1; i < curp->nwcs; ++i) +- obstack_int32_grow (&extrapool, curp->wcs[i]); +- } +- else +- { +- /* A single entry. Simply add the index and the length and +- string (except for the first character which is already +- tested for). */ +- int i; +- +- /* Output the weight info. */ +- weightidx = output_weightwc (&weightpool, collate, runp); +- +- added = (1 + 1 + runp->nwcs - 1) * sizeof (int32_t); +- if (sizeof (int) == sizeof (int32_t)) +- obstack_make_room (&extrapool, added); +- +- obstack_int32_grow_fast (&extrapool, weightidx); +- obstack_int32_grow_fast (&extrapool, runp->nwcs - 1); +- for (i = 1; i < runp->nwcs; ++i) +- obstack_int32_grow_fast (&extrapool, runp->wcs[i]); +- } +- +- /* Next entry. */ +- lastp = runp; +- runp = runp->wcnext; +- } +- while (runp != NULL); +- } +- } +- + tablewc.p = 6; + tablewc.q = 10; + collidx_table_init (&tablewc); +--- 2410,2415 ---- diff --git a/recipes/glibc/glibc-2.5/sysdeps-nios2.patch b/recipes/glibc/glibc-2.5/sysdeps-nios2.patch new file mode 100644 index 0000000000..9d54a806e1 --- /dev/null +++ b/recipes/glibc/glibc-2.5/sysdeps-nios2.patch @@ -0,0 +1,4028 @@ +Index: glibc-2.5/sysdeps/nios2/Implies +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/nios2/Implies 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,4 @@ ++wordsize-32 ++ieee754/dbl-64 ++ieee754/flt-32 ++nios2/soft-fp +Index: glibc-2.5/sysdeps/nios2/Makefile +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/nios2/Makefile 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,33 @@ ++# Copyright (C) 1993, 1994, 1996, 1997, 2003, 2008 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, write to the Free ++# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++# 02111-1307 USA. ++ ++pic-ccflag = -fpic ++ ++ifeq ($(subdir),elf) ++CFLAGS-rtld.c += -mhw-div ++endif ++ ++ifeq ($(subdir),soft-fp) ++sysdep_routines += $(filter-out sqrtsf2,$(gcc-single-routines)) \ ++ $(filter-out sqrtdf2,$(gcc-double-routines)) ++endif ++ ++ifeq ($(subdir),csu) ++gen-as-const-headers += tcb-offsets.sym ++endif +Index: glibc-2.5/sysdeps/nios2/Subdirs +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/nios2/Subdirs 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1 @@ ++soft-fp +Index: glibc-2.5/sysdeps/nios2/Versions +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/nios2/Versions 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,12 @@ ++libc { ++ GLIBC_2.10 { ++ __adddf3; __addsf3; __divdf3; __divsf3; __eqdf2; __eqsf2; __extendsfdf2; ++ __fixdfdi; __fixdfsi; __fixsfdi; __fixsfsi; ++ __fixunsdfdi; __fixunsdfsi; __fixunssfdi; __fixunssfsi; ++ __floatdidf; __floatdisf; __floatsidf; __floatsisf; ++ __floatundidf; __floatundisf; __floatunsidf; __floatunsisf; ++ __gedf2; __gesf2; __gtdf2; __gtsf2; __ledf2; __lesf2; __ltdf2; __ltsf2; ++ __muldf3; __mulsf3; __nedf2; __nesf2; __negdf2; __negsf2; ++ __subdf3; __subsf3; __truncdfsf2; __unorddf2; __unordsf2; ++ } ++} +Index: glibc-2.5/sysdeps/nios2/__longjmp.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/nios2/__longjmp.c 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,41 @@ ++/* Copyright (C) 1991, 92, 93, 94, 95, 97, 2008 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#include <setjmp.h> ++#include <stdlib.h> ++ ++/* Jump to the position specified by ENV, causing the ++ setjmp call there to return VAL, or 1 if VAL is 0. */ ++void ++__longjmp (__jmp_buf env, int val) ++{ ++ if (val == 0) ++ val = 1; ++ __asm__ volatile ("mov r2, %0" : : "r" (val)); ++ __asm__ volatile ("ldw r16, %0" : : "m" (env[0].__regs[0])); ++ __asm__ volatile ("ldw r17, %0" : : "m" (env[0].__regs[1])); ++ __asm__ volatile ("ldw r18, %0" : : "m" (env[0].__regs[2])); ++ __asm__ volatile ("ldw r19, %0" : : "m" (env[0].__regs[3])); ++ __asm__ volatile ("ldw r20, %0" : : "m" (env[0].__regs[4])); ++ __asm__ volatile ("ldw r21, %0" : : "m" (env[0].__regs[5])); ++ __asm__ volatile ("ldw r22, %0" : : "m" (env[0].__regs[6])); ++ __asm__ volatile ("ldw r23, %0" : : "m" (env[0].__regs[7])); ++ __asm__ volatile ("ldw sp, %0" : : "m" (env[0].__regs[8])); ++ __asm__ volatile ("ldw fp, %0" : : "m" (env[0].__regs[9])); ++ __asm__ volatile ("ldw ra, %0" : : "m" (env[0].__regs[10])); ++} +Index: glibc-2.5/sysdeps/nios2/bits/endian.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/nios2/bits/endian.h 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,12 @@ ++/* The Nios II architecture has selectable endianness. */ ++ ++#ifndef _ENDIAN_H ++# error "Never use <bits/endian.h> directly; include <endian.h> instead." ++#endif ++ ++#ifdef __nios2_big_endian__ ++# define __BYTE_ORDER __BIG_ENDIAN ++#endif ++#ifdef __nios2_little_endian__ ++# define __BYTE_ORDER __LITTLE_ENDIAN ++#endif +Index: glibc-2.5/sysdeps/nios2/bits/link.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/nios2/bits/link.h 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,54 @@ ++/* Copyright (C) 2009 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _LINK_H ++# error "Never include <bits/link.h> directly; use <link.h> instead." ++#endif ++ ++/* Registers for entry into PLT on Nios II. */ ++typedef struct La_nios2_regs ++{ ++ uint32_t lr_reg[4]; /* r4 through r7 */ ++ uint32_t lr_ra; ++ uint32_t lr_sp; ++} La_nios2_regs; ++ ++/* Return values for calls from PLT on Nios II. */ ++typedef struct La_nios2_retval ++{ ++ uint32_t lrv_r2; ++ uint32_t lrv_r3; ++} La_nios2_retval; ++ ++__BEGIN_DECLS ++ ++extern Elf32_Addr la_nios2_gnu_pltenter (Elf32_Sym *__sym, unsigned int __ndx, ++ uintptr_t *__refcook, ++ uintptr_t *__defcook, ++ La_nios2_regs *__regs, ++ unsigned int *__flags, ++ const char *__symname, ++ long int *__framesizep); ++extern unsigned int la_nios2_gnu_pltexit (Elf32_Sym *__sym, unsigned int __ndx, ++ uintptr_t *__refcook, ++ uintptr_t *__defcook, ++ const La_nios2_regs *__inregs, ++ La_nios2_retval *__outregs, ++ const char *symname); ++ ++__END_DECLS +Index: glibc-2.5/sysdeps/nios2/bits/setjmp.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/nios2/bits/setjmp.h 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,35 @@ ++/* Define the machine-dependent type `jmp_buf'. Nios II version. ++ Copyright (C) 1992,1993,1995,1997,2000,2002,2003,2004,2005,2006,2008 ++ 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _NIOS2_BITS_SETJMP_H ++#define _NIOS2_BITS_SETJMP_H 1 ++ ++#if !defined(_SETJMP_H) && !defined(_PTHREAD_H) ++# error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead." ++#endif ++ ++typedef struct ++ { ++ /* r16,r17,r18,r19,r20,r21,r22,r23,sp,fp,ra */ ++ int __regs[11]; ++ ++ } __jmp_buf[1]; ++ ++#endif /* _NIOS2_BITS_SETJMP_H */ +Index: glibc-2.5/sysdeps/nios2/bsd-_setjmp.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/nios2/bsd-_setjmp.S 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,40 @@ ++/* BSD `_setjmp' entry point to `sigsetjmp (..., 1)'. NIOS2 version. ++ Copyright (C) 1996, 1997, 2000, 2008 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++/* This just does a tail-call to `__sigsetjmp (ARG, 1)'. ++ We cannot do it in C because it must be a tail-call, so frame-unwinding ++ in setjmp doesn't clobber the state restored by longjmp. */ ++ ++#include <sysdep.h> ++ ++ENTRY (_setjmp) ++ movi r5, 0 /* Pass a second argument of zero. */ ++#if defined (__PIC__) || defined (PIC) ++ nextpc r2 ++1: movhi r3, %hiadj(_GLOBAL_OFFSET_TABLE_ - 1b) ++ addi r3, r3, %lo(_GLOBAL_OFFSET_TABLE_ - 1b) ++ add r2, r2, r3 ++ ldw r2, %call(C_SYMBOL_NAME(__sigsetjmp))(r2) ++ jmp r2 ++#else ++ jmpi C_SYMBOL_NAME (__sigsetjmp) ++#endif ++ .size setjmp, . - setjmp ++ ++libc_hidden_def (_setjmp) +Index: glibc-2.5/sysdeps/nios2/bsd-setjmp.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/nios2/bsd-setjmp.S 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,38 @@ ++/* BSD `setjmp' entry point to `sigsetjmp (..., 1)'. NIOS2 version. ++ Copyright (C) 1996, 1997, 2000, 2008 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++/* This just does a tail-call to `__sigsetjmp (ARG, 1)'. ++ We cannot do it in C because it must be a tail-call, so frame-unwinding ++ in setjmp doesn't clobber the state restored by longjmp. */ ++ ++#include <sysdep.h> ++ ++ENTRY (setjmp) ++ movi r5, 1 /* Pass a second argument of one. */ ++#if defined (__PIC__) || defined (PIC) ++ nextpc r2 ++1: movhi r3, %hiadj(_GLOBAL_OFFSET_TABLE_ - 1b) ++ addi r3, r3, %lo(_GLOBAL_OFFSET_TABLE_ - 1b) ++ add r2, r2, r3 ++ ldw r2, %call(C_SYMBOL_NAME(__sigsetjmp))(r2) ++ jmp r2 ++#else ++ jmpi C_SYMBOL_NAME (__sigsetjmp) ++#endif ++ .size setjmp, . - setjmp +Index: glibc-2.5/sysdeps/nios2/dl-init.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/nios2/dl-init.c 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,30 @@ ++/* Copyright (C) 2008 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#include <elf/dl-init.c> ++ ++unsigned int ++internal_function ++_dl_nios2_get_gp_value (struct link_map *main_map) ++{ ++ ElfW(Dyn)* dyn = main_map->l_ld; ++ for (dyn = main_map->l_ld; dyn->d_tag != DT_NULL; ++dyn) ++ if (dyn->d_tag == DT_NIOS2_GP) ++ return (unsigned int)(dyn->d_un.d_ptr); ++ return 0; ++} +Index: glibc-2.5/sysdeps/nios2/dl-machine.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/nios2/dl-machine.h 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,332 @@ ++/* Machine-dependent ELF dynamic relocation inline functions. Nios II version. ++ Copyright (C) 1995, 1996, 1997, 1999, 2000, 2001, 2005 ++ 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef dl_machine_h ++#define dl_machine_h ++ ++#define ELF_MACHINE_NAME "nios2" ++ ++#include <string.h> ++#include <link.h> ++#include <dl-tls.h> ++ ++/* Return nonzero iff ELF header is compatible with the running host. */ ++static inline int ++elf_machine_matches_host (const Elf32_Ehdr *ehdr) ++{ ++ return ehdr->e_machine == EM_ALTERA_NIOS2; ++} ++ ++ ++/* Return the link-time address of _DYNAMIC. Conveniently, this is the ++ first element of the GOT. */ ++static inline Elf32_Addr ++elf_machine_dynamic (void) ++{ ++ Elf32_Addr *dynamic; ++ int tmp; ++ asm("nextpc\t%0\n\t" ++ "1: movhi\t%1, %%hiadj(_GLOBAL_OFFSET_TABLE_ - 1b)\n\t" ++ "addi\t%1, %1, %%lo( _GLOBAL_OFFSET_TABLE_ - 1b)\n\t" ++ "add\t%0, %0, %1\n" ++ : "=r" (dynamic), "=r" (tmp)); ++ return *dynamic; ++} ++ ++ ++/* Return the run-time load address of the shared object. */ ++static inline Elf32_Addr ++elf_machine_load_address (void) ++{ ++ Elf32_Addr result; ++ int tmp; ++ asm("nextpc\t%0\n\t" ++ "1: movhi\t%1, %%hiadj(1b)\n\t" ++ "addi\t%1, %1, %%lo(1b)\n\t" ++ "sub\t%0, %0, %1\n" ++ : "=r" (result), "=r" (tmp)); ++ return result; ++} ++ ++/* Set up the loaded object described by L so its unrelocated PLT ++ entries will jump to the on-demand fixup code in dl-runtime.c. */ ++ ++static inline int ++elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) ++{ ++ extern void _dl_runtime_resolve (Elf32_Word); ++ ++ if (lazy) ++ { ++ /* The GOT entries for functions in the PLT have not yet been filled ++ in. Their initial contents will arrange when called to load r15 with ++ an offset into the .got section, load r14 with ++ _GLOBAL_OFFSET_TABLE_[1], and then jump to _GLOBAL_OFFSET_TABLE[2]. ++ */ ++ Elf32_Addr *got = (Elf32_Addr *) D_PTR (l, l_info[DT_PLTGOT]); ++ got[1] = (Elf32_Addr) l; /* Identify this shared object. */ ++ ++ /* This function will get called to fix up the GOT entry indicated by ++ the offset on the stack, and then jump to the resolved address. */ ++ got[2] = (Elf32_Addr) &_dl_runtime_resolve; ++ } ++ ++ return lazy; ++} ++ ++/* Initial entry point code for the dynamic linker. ++ The C function `_dl_start' is the real entry point; ++ its return value is the user program's entry point. */ ++ ++#define RTLD_START asm("\ ++.text\n\ ++.globl _start\n\ ++.type _start, %function\n\ ++_start:\n\ ++ /* At start time, all the args are on the stack. */\n\ ++ mov r4, sp\n\ ++\n\ ++ /* Start the calculation of the GOT pointer. */\n\ ++ nextpc r22\n\ ++1: movhi r8, %hiadj(_GLOBAL_OFFSET_TABLE_ - 1b)\n\ ++ addi r8, r8, %lo(_GLOBAL_OFFSET_TABLE_ - 1b)\n\ ++\n\ ++ /* Figure out where _dl_start will need to return to. */\n\ ++ movhi ra, %hiadj(2f - 1b)\n\ ++ addi ra, ra, %lo(2f - 1b)\n\ ++ add ra, ra, r22\n\ ++\n\ ++ /* Finish the calculation of the GOT pointer. */\n\ ++ add r22, r22, r8\n\ ++\n\ ++ br _dl_start\n\ ++\n\ ++ /* Save the returned user entry point. */\n\ ++2: mov r16, r2\n\ ++\n\ ++ /* Initialize gp. */\n\ ++ ldw r4, %got(_rtld_local)(r22)\n\ ++ ldw r4, 0(r4)\n\ ++ ldw r8, %call(_dl_nios2_get_gp_value)(r22)\n\ ++ callr r8\n\ ++ mov gp, r2\n\ ++\n\ ++ /* Find the number of arguments to skip. */\n\ ++ ldw r8, %got(_dl_skip_args)(r22)\n\ ++ ldw r8, 0(r8)\n\ ++\n\ ++ /* Find the main_map from the GOT. */\n\ ++ ldw r4, %got(_rtld_local)(r22)\n\ ++ ldw r4, 0(r4)\n\ ++\n\ ++ /* Find argc. */\n\ ++ ldw r5, 0(sp)\n\ ++ sub r5, r5, r8\n\ ++ stw r5, 0(sp)\n\ ++\n\ ++ /* Find the first unskipped argument. */\n\ ++ slli r8, r8, 2\n\ ++ addi r6, sp, 4\n\ ++ add r9, r6, r8\n\ ++ mov r10, r6\n\ ++\n\ ++ /* Shuffle argv down. */\n\ ++3: ldw r11, 0(r9)\n\ ++ stw r11, 0(r10)\n\ ++ addi r9, r9, 4\n\ ++ addi r10, r10, 4\n\ ++ bne r11, zero, 3b\n\ ++\n\ ++ /* Shuffle envp down. */\n\ ++ mov r7, r10\n\ ++4: ldw r11, 0(r9)\n\ ++ stw r11, 0(r10)\n\ ++ addi r9, r9, 4\n\ ++ addi r10, r10, 4\n\ ++ bne r11, zero, 4b\n\ ++\n\ ++ /* Shuffle auxv down. */\n\ ++5: ldw r11, 4(r9)\n\ ++ stw r11, 4(r10)\n\ ++ ldw r11, 0(r9)\n\ ++ stw r11, 0(r10)\n\ ++ addi r9, r9, 8\n\ ++ addi r10, r10, 8\n\ ++ bne r11, zero, 5b\n\ ++\n\ ++ /* Update _dl_argv. */\n\ ++ ldw r2, %got(_dl_argv)(r22)\n\ ++ stw r6, 0(r2)\n\ ++\n\ ++ /* Call _dl_init through the PLT. */\n\ ++ ldw r8, %call(_dl_init)(r22)\n\ ++ callr r8\n\ ++\n\ ++ /* Find the finalization function. */\n\ ++ ldw r4, %got(_dl_fini)(r22)\n\ ++\n\ ++ /* Jump to the user's entry point. */\n\ ++ jmp r16\n\ ++"); ++ ++/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry, so ++ PLT entries should not be allowed to define the value. ++ ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one ++ of the main executable's symbols, as for a COPY reloc. */ ++#define elf_machine_type_class(type) \ ++ ((((type) == R_NIOS2_JUMP_SLOT) * ELF_RTYPE_CLASS_PLT) \ ++ | (((type) == R_NIOS2_COPY) * ELF_RTYPE_CLASS_COPY)) ++ ++/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */ ++#define ELF_MACHINE_JMP_SLOT R_NIOS2_JUMP_SLOT ++ ++/* The Nios II never uses Elf32_Rel relocations. */ ++#define ELF_MACHINE_NO_REL 1 ++ ++/* Fixup a PLT entry to bounce directly to the function at VALUE. */ ++ ++static inline Elf32_Addr ++elf_machine_fixup_plt (struct link_map *map, lookup_t t, ++ const Elf32_Rel *reloc, ++ Elf32_Addr *reloc_addr, Elf32_Addr value) ++{ ++ return *reloc_addr = value; ++} ++ ++/* Return the final value of a plt relocation. */ ++static inline Elf32_Addr ++elf_machine_plt_value (struct link_map *map, const Elf32_Rela *reloc, ++ Elf32_Addr value) ++{ ++ return value; ++} ++ ++/* Names of the architecture-specific auditing callback functions. */ ++#define ARCH_LA_PLTENTER nios2_gnu_pltenter ++#define ARCH_LA_PLTEXIT nios2_gnu_pltexit ++ ++#endif /* dl_machine_h */ ++ ++#ifdef RESOLVE_MAP ++ ++/* Perform the relocation specified by RELOC and SYM (which is fully resolved). ++ LOADADDR is the load address of the object; INFO is an array indexed ++ by DT_* of the .dynamic section info. */ ++ ++auto inline void __attribute__ ((always_inline)) ++elf_machine_rela (struct link_map *map, const ElfW(Rela) *reloc, ++ const ElfW(Sym) *sym, const struct r_found_version *version, ++ void *const reloc_addr_arg) ++{ ++ Elf32_Addr *const reloc_addr = reloc_addr_arg; ++ const unsigned int r_type = ELF32_R_TYPE (reloc->r_info); ++ ++ if (__builtin_expect (r_type == R_NIOS2_RELATIVE, 0)) ++ *reloc_addr = map->l_addr + reloc->r_addend; ++ else if (__builtin_expect (r_type == R_NIOS2_NONE, 0)) ++ return; ++ else ++ { ++ const Elf32_Sym *const refsym = sym; ++ struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type); ++ Elf32_Addr value = sym == NULL ? 0 : sym_map->l_addr + sym->st_value; ++ ++ switch (r_type) ++ { ++ case R_NIOS2_COPY: ++ if (sym == NULL) ++ /* This can happen in trace mode if an object could not be ++ found. */ ++ break; ++ if (sym->st_size > refsym->st_size ++ || (sym->st_size < refsym->st_size && GLRO(dl_verbose))) ++ { ++ const char *strtab; ++ ++ strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); ++ _dl_error_printf ("\ ++%s: Symbol `%s' has different size in shared object, consider re-linking\n", ++ rtld_progname ?: "<program name unknown>", ++ strtab + refsym->st_name); ++ } ++ memcpy (reloc_addr_arg, (void *) value, ++ MIN (sym->st_size, refsym->st_size)); ++ break; ++ case R_NIOS2_GLOB_DAT: ++ case R_NIOS2_JUMP_SLOT: ++# ifdef RTLD_BOOTSTRAP ++ /* Fix weak undefined references. */ ++ if (sym != NULL && sym->st_value == 0) ++ *reloc_addr = 0; ++ else ++# endif ++ *reloc_addr = value; ++ break; ++#if defined USE_TLS && !defined RTLD_BOOTSTRAP ++ case R_NIOS2_TLS_DTPMOD: ++ /* Get the information from the link map returned by the ++ resolv function. */ ++ if (sym_map != NULL) ++ *reloc_addr = sym_map->l_tls_modid; ++ break; ++ ++ case R_NIOS2_TLS_DTPREL: ++ *reloc_addr = reloc->r_addend + TLS_DTPREL_VALUE(sym); ++ break; ++ ++ case R_NIOS2_TLS_TPREL: ++ if (sym != NULL) ++ { ++ CHECK_STATIC_TLS (map, sym_map); ++ *reloc_addr = reloc->r_addend + TLS_TPREL_VALUE(sym_map, sym); ++ } ++ break; ++#endif ++ case R_NIOS2_BFD_RELOC_32: ++ *reloc_addr = value + reloc->r_addend; ++ break; ++ ++ default: ++ _dl_reloc_bad_type (map, r_type, 0); ++ break; ++ } ++ } ++} ++ ++auto inline void __attribute__((always_inline)) ++ elf_machine_rela_relative (ElfW(Addr) l_addr, const ElfW(Rela) *reloc, ++ void *const reloc_addr_arg) ++{ ++ Elf32_Addr *const reloc_addr = reloc_addr_arg; ++ *reloc_addr = l_addr + reloc->r_addend; ++} ++ ++auto inline void __attribute__((always_inline)) ++ elf_machine_lazy_rel (struct link_map *map, ++ ElfW(Addr) l_addr, const ElfW(Rela) *reloc) ++{ ++ Elf32_Addr *const reloc_addr = (void *) (l_addr + reloc->r_offset); ++ if (ELF32_R_TYPE (reloc->r_info) == R_NIOS2_JUMP_SLOT) ++ *reloc_addr += l_addr; ++ else ++ _dl_reloc_bad_type (map, ELF32_R_TYPE (reloc->r_info), 1); ++} ++ ++#endif /* RESOLVE_MAP */ +Index: glibc-2.5/sysdeps/nios2/dl-sysdep.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/nios2/dl-sysdep.h 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,24 @@ ++/* System-specific settings for dynamic linker code. Nios II version. ++ Copyright (C) 2009 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#include_next <dl-sysdep.h> ++ ++/* _dl_argv cannot be attribute_relro, because _dl_start_user ++ might write into it after _dl_start returns. */ ++#define DL_ARGV_NOT_RELRO 1 +Index: glibc-2.5/sysdeps/nios2/dl-tls.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/nios2/dl-tls.h 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,46 @@ ++/* Thread-local storage handling in the ELF dynamic linker. Nios II version. ++ Copyright (C) 2005 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++ ++/* Type used for the representation of TLS information in the GOT. */ ++typedef struct ++{ ++ unsigned long int ti_module; ++ unsigned long int ti_offset; ++} tls_index; ++ ++/* The thread pointer points 0x7000 past the first static TLS block. */ ++#define TLS_TP_OFFSET 0x7000 ++ ++/* Dynamic thread vector pointers point 0x8000 past the start of each ++ TLS block. */ ++#define TLS_DTV_OFFSET 0x8000 ++ ++/* Compute the value for a GOTTPREL reloc. */ ++#define TLS_TPREL_VALUE(sym_map, sym) \ ++ ((sym_map)->l_tls_offset + (sym)->st_value - TLS_TP_OFFSET) ++ ++/* Compute the value for a DTPREL reloc. */ ++#define TLS_DTPREL_VALUE(sym) \ ++ ((sym)->st_value - TLS_DTV_OFFSET) ++ ++extern void *__tls_get_addr (tls_index *ti); ++ ++# define GET_ADDR_OFFSET (ti->ti_offset + TLS_DTV_OFFSET) ++# define __TLS_GET_ADDR(__ti) (__tls_get_addr (__ti) - TLS_DTV_OFFSET) +Index: glibc-2.5/sysdeps/nios2/dl-trampoline.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/nios2/dl-trampoline.S 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,80 @@ ++/* PLT trampolines. Nios II version. ++ Copyright (C) 2005 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#include <sysdep.h> ++#include <libc-symbols.h> ++ ++ .text ++ .globl _dl_runtime_resolve ++ cfi_startproc ++_dl_runtime_resolve: ++/* The runtime resolver receives the original function arguments in r4 ++ through r7, the shared library identifier from GOT[1]? in r14, and the ++ relocation index times four in r15. It updates the corresponding PLT GOT ++ entry so that the PLT entry will transfer control directly to the target ++ in the future, and then transfers control to the target. */ ++ /* Save arguments and return address. */ ++ subi sp, sp, 28 ++ cfi_adjust_cfa_offset (28) ++ stw r22, 24(sp) ++ cfi_rel_offset (r22, 24) ++ stw r8, 20(sp) /* save r8, because this might be a call to mcount */ ++ cfi_rel_offset (r8, 20) ++ stw r7, 16(sp) ++ cfi_rel_offset (r7, 16) ++ stw r6, 12(sp) ++ cfi_rel_offset (r6, 12) ++ stw r5, 8(sp) ++ cfi_rel_offset (r5, 8) ++ stw r4, 4(sp) ++ cfi_rel_offset (r4, 4) ++ stw ra, 0(sp) ++ cfi_rel_offset (ra, 0) ++ ++ /* Get pointer to linker struct. */ ++ mov r4, r14 ++ ++ /* Get the relocation offset. We're given a multiple of 4 and ++ need a multiple of 12, so multiply by 3. */ ++ slli r5, r15, 1 ++ add r5, r5, r15 ++ ++ /* Call the fixup routine. */ ++ nextpc r22 ++1: movhi r2, %hiadj(_GLOBAL_OFFSET_TABLE_ - 1b) ++ addi r2, r2, %lo(_GLOBAL_OFFSET_TABLE_ - 1b) ++ add r22, r22, r2 ++ ldw r2, %call(_dl_fixup)(r22) ++ callr r2 ++ ++ /* Restore the arguments and return address. */ ++ ldw ra, 0(sp) ++ ldw r4, 4(sp) ++ ldw r5, 8(sp) ++ ldw r6, 12(sp) ++ ldw r7, 16(sp) ++ ldw r8, 20(sp) ++ ldw r22, 24(sp) ++ addi sp, sp, 28 ++ cfi_adjust_cfa_offset (-28) ++ ++ /* Jump to the newly found address. */ ++ jmp r2 ++ ++ cfi_endproc +Index: glibc-2.5/sysdeps/nios2/elf/start.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/nios2/elf/start.S 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,132 @@ ++/* Startup code for Nios II ++ Copyright (C) 1995, 1996, 1997, 1998, 2001, 2002, 2005 ++ 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. ++ ++ In addition to the permissions in the GNU Lesser General Public ++ License, the Free Software Foundation gives you unlimited ++ permission to link the compiled version of this file with other ++ programs, and to distribute those programs without any restriction ++ coming from the use of this file. (The GNU Lesser General Public ++ License restrictions do apply in other respects; for example, they ++ cover modification of the file, and distribution when not linked ++ into another program.) ++ ++ Note that people who make modified versions of this file are not ++ obligated to grant this special exception for their modified ++ versions; it is their choice whether to do so. The GNU Lesser ++ General Public License gives permission to release a modified ++ version without this exception; this exception also makes it ++ possible to release a modified version which carries forward this ++ exception. ++ ++ 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++/* This is the canonical entry point, usually the first thing in the text ++ segment. ++ ++ Note that the code in the .init section has already been run. ++ This includes _init and _libc_init ++ ++ The stack pointer, sp, will point to the argument count on the stack. ++ The initial state of the stack when a userspace process is started is: ++ ++ Purpose Start Address Length ++ Unspecified High Addresses ++ Referenced strings, etc. Varies ++ Unspecified ++ Null auxilliary vector entry 4bytes ++ Auxilliary vector entries 8bytes each ++ NULL terminator for envp 4bytes ++ Environment pointers sp+8+4*argc 4bytes each ++ NULL terminator for argv sp+4+4*argc 4bytes ++ Argument pointers sp+4 4bytes each ++ Argument count sp 4bytes ++ Unspecified Low Addresses ++ ++ If the application should register a destructor function with atexit, ++ the pointer will be placed in r4. Otherwise r4 will be zero. ++ ++ The contents of all other registers are unspecified. User code should ++ set fp to zero to mark the end of the frame chain. ++ ++ The auxilliary vector is a series of pairs of 32-bit tag and 32-bit ++ value, terminated by an AT_NULL tag. ++*/ ++ ++ .text ++ .globl _start ++_start: ++ /* Set up the global pointer. */ ++ movhi gp, %hiadj(_gp) ++ addi gp, gp, %lo(_gp) ++ ++ /* Save the stack pointer. */ ++ mov r2, sp ++ ++ /* Create room on the stack for the fini, rtld_fini and stack_end args ++ to __libc_start_main. */ ++ subi sp, sp, 12 ++ ++ /* Push stack_end */ ++ stw r2, 8(sp) ++ ++ /* Push rtld_fini */ ++ stw r4, 4(sp) ++ ++ /* Set up the GOT pointer. */ ++ nextpc r22 ++1: movhi r2, %hiadj(_GLOBAL_OFFSET_TABLE_ - 1b) ++ addi r2, r2, %lo(_GLOBAL_OFFSET_TABLE_ - 1b) ++ add r22, r22, r2 ++ ++ /* Push fini */ ++ ldw r8, %call(__libc_csu_fini)(r22) ++ stw r8, 0(sp) ++ ++ /* r7 == init */ ++ ldw r7, %call(__libc_csu_init)(r22) ++ ++ /* r6 == argv */ ++ addi r6, sp, 16 ++ ++ /* r5 == argc */ ++ ldw r5, 12(sp) ++ ++ /* r4 == main */ ++ ldw r4, %call(main)(r22) ++ ++ /* fp == 0 */ ++ mov fp, zero ++ ++ /* __libc_start_main (main, argc, argv, init, fini, rtld_fini, ++ stack_end) */ ++ ++ /* Let the libc call main and exit with its return code. */ ++ ldw r2, %call(__libc_start_main)(r22) ++ callr r2 ++ ++ /* should never get here....*/ ++ ldw r2, %call(abort)(r22) ++ callr r2 ++ ++/* Define a symbol for the first piece of initialized data. */ ++ .data ++ .globl __data_start ++__data_start: ++ .long 0 ++ .weak data_start ++ data_start = __data_start +Index: glibc-2.5/sysdeps/nios2/jmpbuf-offsets.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/nios2/jmpbuf-offsets.h 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,20 @@ ++/* Private macros for accessing __jmp_buf contents. Nios II version. ++ Copyright (C) 2006, 2008 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#define __JMP_BUF_SP 8 +Index: glibc-2.5/sysdeps/nios2/jmpbuf-unwind.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/nios2/jmpbuf-unwind.h 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,36 @@ ++/* Copyright (C) 2005,2006 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#include <setjmp.h> ++#include <jmpbuf-offsets.h> ++#include <stdint.h> ++#include <unwind.h> ++ ++/* Test if longjmp to JMPBUF would unwind the frame ++ containing a local variable at ADDRESS. */ ++#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \ ++ ((void *) (address) < (void *) demangle ((jmpbuf)->__regs[__JMP_BUF_SP])) ++ ++#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \ ++ _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj) ++ ++#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ ++ ((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf)->__regs[__JMP_BUF_SP] - (_adj)) ++ ++/* We use the normal longjmp for unwinding. */ ++#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val) +Index: glibc-2.5/sysdeps/nios2/ldsodefs.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/nios2/ldsodefs.h 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,42 @@ ++/* Run-time dynamic linker data structures for loaded ELF shared objects. ++ Copyright (C) 2000, 2002, 2003, 2006, 2007 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _NIOS2_LDSODEFS_H ++#define _NIOS2_LDSODEFS_H 1 ++ ++struct La_nios2_regs; ++struct La_nios2_retval; ++ ++#define ARCH_PLTENTER_MEMBERS \ ++ Elf32_Addr (*nios2_gnu_pltenter) (Elf32_Sym *, unsigned int, \ ++ uintptr_t *, uintptr_t *, \ ++ const struct La_nios2_regs *, \ ++ unsigned int *, const char *name, \ ++ long int *framesizep); ++ ++#define ARCH_PLTEXIT_MEMBERS \ ++ unsigned int (*nios2_gnu_pltexit) (Elf64_Sym *, unsigned int, \ ++ uintptr_t *, uintptr_t *, \ ++ const struct La_nios2_regs *, \ ++ struct La_nios2_retval *, \ ++ const char *); ++ ++#include_next <ldsodefs.h> ++ ++#endif +Index: glibc-2.5/sysdeps/nios2/libc-tls.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/nios2/libc-tls.c 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,37 @@ ++/* Thread-local storage handling in the ELF dynamic linker. Nios II version. ++ Copyright (C) 2005, 2008 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#include <csu/libc-tls.c> ++#include <dl-tls.h> ++ ++#if USE_TLS ++ ++/* On Nios II, linker optimizations are not required, so __tls_get_addr ++ can be called even in statically linked binaries. In this case module ++ must be always 1 and PT_TLS segment exist in the binary, otherwise it ++ would not link. */ ++ ++void * ++__tls_get_addr (tls_index *ti) ++{ ++ dtv_t *dtv = THREAD_DTV (); ++ return (char *) dtv[1].pointer.val + GET_ADDR_OFFSET; ++} ++ ++#endif +Index: glibc-2.5/sysdeps/nios2/machine-gmon.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/nios2/machine-gmon.h 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,67 @@ ++/* Machine-dependent definitions for profiling support. Nios II version. ++ Copyright (C) 1996, 1997, 1998, 2008 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#include <sysdep.h> ++ ++#define _MCOUNT_DECL(frompc, selfpc) \ ++static void __attribute_used__ mcount_internal (u_long frompc, u_long selfpc) ++ ++/* This macro/func MUST save r4, r5, r6, r7 and r8 because the compiler inserts ++ blind calls to mcount(), ignoring the fact that mcount may clobber ++ registers; therefore, mcount may NOT clobber registers. */ ++ ++#if defined(__PIC__) || defined(PIC) ++#define NIOS2_MCOUNT_CALL \ ++ "nextpc r3\n\t" \ ++ "1: movhi r2, %hiadj(_GLOBAL_OFFSET_TABLE_ - 1b)\n\t" \ ++ "addi r2, r2, %lo(_GLOBAL_OFFSET_TABLE_ - 1b)\n\t" \ ++ "add r2, r2, r3\n\t" \ ++ "ldw r2, %call(mcount_internal)(r2)\n\t" \ ++ "callr r2\n\t" ++#else ++#define NIOS2_MCOUNT_CALL \ ++ "call\tmcount_internal\n\t" ++#endif ++ ++#define MCOUNT \ ++asm( \ ++ ".globl _mcount\n\t" \ ++ ".type _mcount,@function\n\t" \ ++ "_mcount:\n\t" \ ++ "subi sp, sp, 24\n\t" \ ++ "stw ra, 20(sp)\n\t" \ ++ "stw r8, 16(sp)\n\t" \ ++ "stw r7, 12(sp)\n\t" \ ++ "stw r6, 8(sp)\n\t" \ ++ "stw r5, 4(sp)\n\t" \ ++ "stw r4, 0(sp)\n\t" \ ++ "mov r4, r8\n\t" \ ++ "mov r5, ra\n\t" \ ++ NIOS2_MCOUNT_CALL \ ++ "ldw ra, 20(sp)\n\t" \ ++ "ldw r8, 16(sp)\n\t" \ ++ "ldw r7, 12(sp)\n\t" \ ++ "ldw r6, 8(sp)\n\t" \ ++ "ldw r5, 4(sp)\n\t" \ ++ "ldw r4, 0(sp)\n\t" \ ++ "addi sp, sp, 24\n\t" \ ++ "ret\n\t" \ ++ ".size _mcount, . - _mcount\n\t" \ ++); ++ +Index: glibc-2.5/sysdeps/nios2/memusage.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/nios2/memusage.h 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,24 @@ ++/* Copyright (C) 2000 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++ ++#define GETSP() ({ register uintptr_t stack_ptr asm ("%sp"); stack_ptr; }) ++ ++#define uatomic32_t unsigned int ++ ++#include <sysdeps/generic/memusage.h> +Index: glibc-2.5/sysdeps/nios2/nptl/pthread_spin_lock.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/nios2/nptl/pthread_spin_lock.c 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,30 @@ ++/* Copyright (C) 2005, 2007 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#include <atomic.h> ++#include "pthreadP.h" ++ ++int ++pthread_spin_lock (pthread_spinlock_t *lock) ++{ ++ while (atomic_compare_and_exchange_val_acq(lock, 1, 0) != 0) ++ while (*lock != 0) ++ ; ++ ++ return 0; ++} +Index: glibc-2.5/sysdeps/nios2/nptl/pthread_spin_trylock.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/nios2/nptl/pthread_spin_trylock.c 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,27 @@ ++/* Copyright (C) 2005, 2007 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#include <errno.h> ++#include <atomic.h> ++#include "pthreadP.h" ++ ++int ++pthread_spin_trylock (pthread_spinlock_t *lock) ++{ ++ return atomic_compare_and_exchange_val_acq(lock, 1, 0) ? EBUSY : 0; ++} +Index: glibc-2.5/sysdeps/nios2/nptl/pthreaddef.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/nios2/nptl/pthreaddef.h 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,46 @@ ++/* Copyright (C) 2002, 2003, 2005 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++/* Default stack size. */ ++#define ARCH_STACK_DEFAULT_SIZE (2 * 1024 * 1024) ++ ++/* Required stack pointer alignment at beginning. */ ++#define STACK_ALIGN 4 ++ ++/* Minimal stack size after allocating thread descriptor and guard size. */ ++#define MINIMAL_REST_STACK 2048 ++ ++/* Alignment requirement for TCB. */ ++#define TCB_ALIGNMENT 4 ++ ++ ++/* Location of current stack frame. ++ ++ __builtin_frame_address (0) returns the value of the hard frame ++ pointer, which will point at the location of the saved PC on the ++ stack. Below this in memory is the remainder of the linkage info, ++ occupying 12 bytes. Therefore in order to address from ++ CURRENT_STACK_FRAME using "struct layout", we need to have the macro ++ return the hard FP minus 12. Of course, this makes no sense ++ without the obsolete APCS stack layout... */ ++#define CURRENT_STACK_FRAME (__builtin_frame_address (0) - 12) ++ ++ ++/* XXX Until we have a better place keep the definitions here. */ ++#define __exit_thread_inline(val) \ ++ INLINE_SYSCALL (exit, 1, (val)) +Index: glibc-2.5/sysdeps/nios2/nptl/tcb-offsets.sym +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/nios2/nptl/tcb-offsets.sym 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,13 @@ ++#include <sysdep.h> ++#include <tls.h> ++ ++-- ++ ++-- Abuse tls.h macros to derive offsets relative to the thread register. ++# undef __thread_self ++# define __thread_self ((void *) 0) ++# define thread_offsetof(mem) ((ptrdiff_t) THREAD_SELF + offsetof (struct pthread, mem)) ++ ++MULTIPLE_THREADS_OFFSET thread_offsetof (header.multiple_threads) ++PID_OFFSET thread_offsetof (pid) ++TID_OFFSET thread_offsetof (tid) +Index: glibc-2.5/sysdeps/nios2/nptl/tls.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/nios2/nptl/tls.h 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,138 @@ ++/* Definition for thread-local data handling. NPTL/Nios II version. ++ Copyright (C) 2005 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _TLS_H ++#define _TLS_H 1 ++ ++#include <dl-sysdep.h> ++ ++#ifndef __ASSEMBLER__ ++# include <stdbool.h> ++# include <stddef.h> ++# include <stdint.h> ++ ++/* Type for the dtv. */ ++typedef union dtv ++{ ++ size_t counter; ++ struct ++ { ++ void *val; ++ bool is_static; ++ } pointer; ++} dtv_t; ++ ++#else /* __ASSEMBLER__ */ ++# include <tcb-offsets.h> ++#endif /* __ASSEMBLER__ */ ++ ++ ++/* Signal that TLS support is available. */ ++# define USE_TLS 1 ++ ++#ifndef __ASSEMBLER__ ++ ++/* Get system call information. */ ++# include <sysdep.h> ++ ++/* The TP points to the start of the thread blocks. */ ++# define TLS_DTV_AT_TP 1 ++ ++/* Get the thread descriptor definition. */ ++# include <nptl/descr.h> ++ ++typedef struct ++{ ++ dtv_t *dtv; ++ void *private; ++} tcbhead_t; ++ ++register struct pthread *__thread_self __asm__("r23"); ++ ++/* This is the size of the initial TCB. Because our TCB is before the thread ++ pointer, we don't need this. */ ++# define TLS_INIT_TCB_SIZE 0 ++ ++/* Alignment requirements for the initial TCB. */ ++# define TLS_INIT_TCB_ALIGN __alignof__ (struct pthread) ++ ++/* This is the size of the TCB. Because our TCB is before the thread ++ pointer, we don't need this. */ ++# define TLS_TCB_SIZE 0 ++ ++/* This is the size we need before TCB - actually, it includes the TCB. */ ++# define TLS_PRE_TCB_SIZE \ ++ (sizeof (struct pthread) \ ++ + ((sizeof (tcbhead_t) + TLS_TCB_ALIGN - 1) & ~(TLS_TCB_ALIGN - 1))) ++ ++/* The thread pointer (in hardware register r23) points to the end of ++ the TCB + 0x7000, as for PowerPC and MIPS. */ ++# define TLS_TCB_OFFSET 0x7000 ++ ++/* Alignment requirements for the TCB. */ ++# define TLS_TCB_ALIGN __alignof__ (struct pthread) ++ ++/* Install the dtv pointer. The pointer passed is to the element with ++ index -1 which contain the length. */ ++# define INSTALL_DTV(tcbp, dtvp) \ ++ (((tcbhead_t *) (tcbp))[-1].dtv = (dtvp) + 1) ++ ++/* Install new dtv for current thread. */ ++# define INSTALL_NEW_DTV(dtv) \ ++ (THREAD_DTV() = (dtv)) ++ ++/* Return dtv of given thread descriptor. */ ++# define GET_DTV(tcbp) \ ++ (((tcbhead_t *) (tcbp))[-1].dtv) ++ ++/* Code to initially initialize the thread pointer. */ ++# define TLS_INIT_TP(tcbp, secondcall) \ ++ (__thread_self = (struct pthread *) ((char *) tcbp + TLS_TCB_OFFSET), NULL) ++ ++/* Return the address of the dtv for the current thread. */ ++# define THREAD_DTV() \ ++ (((tcbhead_t *) ((struct pthread *) ((char *) __thread_self \ ++ - TLS_TCB_OFFSET)))[-1].dtv) ++ ++/* Return the thread descriptor for the current thread. */ ++# define THREAD_SELF \ ++ ((struct pthread *) ((char *) __thread_self - TLS_TCB_OFFSET - \ ++ TLS_PRE_TCB_SIZE)) ++ ++/* Magic for libthread_db to know how to do THREAD_SELF. */ ++# define DB_THREAD_SELF \ ++ REGISTER (32, 32, 23 * 4, -TLS_PRE_TCB_SIZE - TLS_TCB_OFFSET) ++ ++/* Access to data in the thread descriptor is easy. */ ++#define THREAD_GETMEM(descr, member) \ ++ descr->member ++#define THREAD_GETMEM_NC(descr, member, idx) \ ++ descr->member[idx] ++#define THREAD_SETMEM(descr, member, value) \ ++ descr->member = (value) ++#define THREAD_SETMEM_NC(descr, member, idx, value) \ ++ descr->member[idx] = (value) ++ ++/* l_tls_offset == 0 is perfectly valid on Nios II, so we have to use some ++ different value to mean unset l_tls_offset. */ ++# define NO_TLS_OFFSET -1 ++ ++#endif /* __ASSEMBLER__ */ ++ ++#endif /* tls.h */ +Index: glibc-2.5/sysdeps/nios2/setjmp.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/nios2/setjmp.S 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,53 @@ ++/* Copyright (C) 1991, 1992, 1994, 1997, 2008 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. ++*/ ++ ++/* Save the current program position in ENV and return 0. */ ++ .text ++ .globl __sigsetjmp ++__sigsetjmp: ++ stw r16, 0(r4) ++ stw r17, 4(r4) ++ stw r18, 8(r4) ++ stw r19, 12(r4) ++ stw r20, 16(r4) ++ stw r21, 20(r4) ++ stw r22, 24(r4) ++ stw r23, 28(r4) ++ stw sp, 32(r4) ++ stw fp, 36(r4) ++ stw ra, 40(r4) ++#if defined NOT_IN_libc && defined IS_IN_rtld ++ /* In ld.so we never save the signal mask. */ ++ mov r2, zero ++ ret ++#else ++ /* Save the signal mask if requested. */ ++#if defined(__PIC__) || defined(PIC) ++ nextpc r2 ++1: movhi r3, %hiadj(_GLOBAL_OFFSET_TABLE_ - 1b) ++ addi r3, r3, %lo(_GLOBAL_OFFSET_TABLE_ - 1b) ++ add r2, r2, r3 ++ ldw r2, %call(__sigjmp_save)(r2) ++ jmp r2 ++#else ++ jmpi __sigjmp_save ++#endif ++#endif ++ ++libc_hidden_def (__sigsetjmp) +Index: glibc-2.5/sysdeps/nios2/shlib-versions +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/nios2/shlib-versions 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1 @@ ++nios2-.*-linux.* DEFAULT GLIBC_2.10 +Index: glibc-2.5/sysdeps/nios2/soft-fp/sfp-machine.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/nios2/soft-fp/sfp-machine.h 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,41 @@ ++#define _FP_W_TYPE_SIZE 32 ++#define _FP_W_TYPE unsigned long ++#define _FP_WS_TYPE signed long ++#define _FP_I_TYPE long ++ ++#define _FP_MUL_MEAT_S(R,X,Y) \ ++ _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm) ++#define _FP_MUL_MEAT_D(R,X,Y) \ ++ _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm) ++#define _FP_MUL_MEAT_Q(R,X,Y) \ ++ _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm) ++ ++#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_loop(S,R,X,Y) ++#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y) ++#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y) ++ ++#define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1) ++#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1), -1 ++#define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1, -1, -1 ++#define _FP_NANSIGN_S 0 ++#define _FP_NANSIGN_D 0 ++#define _FP_NANSIGN_Q 0 ++ ++#define _FP_KEEPNANFRACP 1 ++ ++/* This is arbitrarily taken from the PowerPC version. */ ++#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \ ++ do { \ ++ if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs) \ ++ && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs)) \ ++ { \ ++ R##_s = Y##_s; \ ++ _FP_FRAC_COPY_##wc(R,Y); \ ++ } \ ++ else \ ++ { \ ++ R##_s = X##_s; \ ++ _FP_FRAC_COPY_##wc(R,X); \ ++ } \ ++ R##_c = FP_CLS_NAN; \ ++ } while (0) +Index: glibc-2.5/sysdeps/nios2/stackinfo.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/nios2/stackinfo.h 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,28 @@ ++/* Copyright (C) 2001, 2008 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++/* This file contains a bit of information about the stack allocation ++ of the processor. */ ++ ++#ifndef _STACKINFO_H ++#define _STACKINFO_H 1 ++ ++/* On Nios II the stack grows down. */ ++#define _STACK_GROWS_DOWN 1 ++ ++#endif /* stackinfo.h */ +Index: glibc-2.5/sysdeps/nios2/tls-macros.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/nios2/tls-macros.h 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,46 @@ ++#define TLS_LE(x) \ ++ ({ int *__result; \ ++ asm ("addi %0, r23, %%tls_le(" #x ")" \ ++ : "=r" (__result)); \ ++ __result; }) ++ ++#define TLS_IE(x) \ ++ ({ int *__result; \ ++ int __tmp; \ ++ asm ("nextpc %0 ; " \ ++ "1: movhi %1, %%hiadj(_GLOBAL_OFFSET_TABLE_ - 1b) ; " \ ++ "addi %1, %1, %%lo(_GLOBAL_OFFSET_TABLE_ - 1b) ; " \ ++ "add %0, %0, %1 ; " \ ++ "ldw %1, %%tls_ie(" #x ")(%0) ; " \ ++ "add %1, r23, %1" \ ++ : "=&r" (__tmp), "=&r" (__result)); \ ++ __result; }) ++ ++#define TLS_LD(x) \ ++ ({ char *__result; \ ++ char *__result2; \ ++ int *__result3; \ ++ int __tmp; \ ++ extern void *__tls_get_addr (void *); \ ++ asm ("nextpc %0 ; " \ ++ "1: movhi %1, %%hiadj(_GLOBAL_OFFSET_TABLE_ - 1b) ; " \ ++ "addi %1, %1, %%lo(_GLOBAL_OFFSET_TABLE_ - 1b) ; " \ ++ "add %0, %0, %1 ; " \ ++ "addi %0, %0, %%tls_ldm(" #x ")" \ ++ : "=r" (__result), "=r" (__tmp)); \ ++ __result2 = (char *)__tls_get_addr (__result); \ ++ asm ("addi %0, %1, %%tls_ldo(" #x ")" \ ++ : "=r" (__result3) : "r" (__result2)); \ ++ __result3; }) ++ ++#define TLS_GD(x) \ ++ ({ int *__result; \ ++ int __tmp; \ ++ extern void *__tls_get_addr (void *); \ ++ asm ("nextpc %0 ; " \ ++ "1: movhi %1, %%hiadj(_GLOBAL_OFFSET_TABLE_ - 1b) ; " \ ++ "addi %1, %1, %%lo(_GLOBAL_OFFSET_TABLE_ - 1b) ; " \ ++ "add %0, %0, %1 ; " \ ++ "addi %0, %0, %%tls_gd(" #x ")" \ ++ : "=r" (__result), "=r" (__tmp)); \ ++ (int *)__tls_get_addr (__result); }) +Index: glibc-2.5/sysdeps/nios2/tst-audit.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/nios2/tst-audit.h 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,26 @@ ++/* Definitions for testing PLT entry/exit auditing. Nios II version. ++ ++ Copyright (C) 2009 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#define pltenter la_nios2_gnu_pltenter ++#define pltexit la_nios2_gnu_pltexit ++#define La_regs La_nios2_regs ++#define La_retval La_nios2_retval ++#define int_retval lrv_r2 +Index: glibc-2.5/sysdeps/unix/sysv/linux/nios2/bits/atomic.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/unix/sysv/linux/nios2/bits/atomic.h 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,113 @@ ++/* Copyright (C) 2003, 2008 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#include <stdint.h> ++ ++typedef int8_t atomic8_t; ++typedef uint8_t uatomic8_t; ++typedef int_fast8_t atomic_fast8_t; ++typedef uint_fast8_t uatomic_fast8_t; ++ ++typedef int16_t atomic16_t; ++typedef uint16_t uatomic16_t; ++typedef int_fast16_t atomic_fast16_t; ++typedef uint_fast16_t uatomic_fast16_t; ++ ++typedef int32_t atomic32_t; ++typedef uint32_t uatomic32_t; ++typedef int_fast32_t atomic_fast32_t; ++typedef uint_fast32_t uatomic_fast32_t; ++ ++typedef intptr_t atomicptr_t; ++typedef uintptr_t uatomicptr_t; ++typedef intmax_t atomic_max_t; ++typedef uintmax_t uatomic_max_t; ++ ++void __nios2_link_error (void); ++ ++#define __arch_compare_and_exchange_bool_8_acq(mem, newval, oldval) \ ++ (abort (), 0) ++ ++#define __arch_compare_and_exchange_bool_16_acq(mem, newval, oldval) \ ++ (abort (), 0) ++ ++#define __arch_compare_and_exchange_bool_32_acq(mem, newval, oldval) \ ++ (!__sync_bool_compare_and_swap ((mem), (int) (long) (oldval), \ ++ (int) (long) (newval))) ++ ++#define __arch_compare_and_exchange_bool_64_acq(mem, newval, oldval) \ ++ ({ __nios2_link_error (); oldval; }) ++ ++#define __arch_compare_and_exchange_val_8_acq(mem, newval, oldval) \ ++ (abort (), (__typeof (*mem)) 0) ++ ++#define __arch_compare_and_exchange_val_16_acq(mem, newval, oldval) \ ++ (abort (), (__typeof (*mem)) 0) ++ ++#define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval) \ ++ __sync_val_compare_and_swap ((mem), (int) (long) (oldval), \ ++ (int) (long) (newval)) ++ ++#define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \ ++ ({ __nios2_link_error (); oldval; }) ++ ++/* Atomically store newval and return the old value. */ ++#define atomic_exchange_acq(mem, value) \ ++ __sync_lock_test_and_set (mem, value) ++ ++#define atomic_exchange_rel(mem, value) \ ++ (__sync_synchronize (), __sync_lock_test_and_set (mem, value)) ++ ++#define atomic_exchange_and_add(mem, value) \ ++ ({ __typeof (*mem) __result; \ ++ __result = __sync_fetch_and_add ((mem), (int) (value)); \ ++ __result; }) ++ ++#define atomic_decrement_if_positive(mem) \ ++ ({ __typeof (*mem) __oldval, __val; \ ++ __typeof (mem) __memp = (mem); \ ++ \ ++ __val = (*__memp); \ ++ do \ ++ { \ ++ __oldval = __val; \ ++ if (__builtin_expect (__val <= 0, 0)) \ ++ break; \ ++ __val = atomic_compare_and_exchange_val_acq (__memp, __oldval - 1, \ ++ __oldval); \ ++ } \ ++ while (__builtin_expect (__val != __oldval, 0)); \ ++ __oldval; }) ++ ++#define atomic_bit_test_set(mem, bit) \ ++ ({ __typeof (*mem) __oldval, __val; \ ++ __typeof (mem) __memp = (mem); \ ++ __typeof (*mem) __mask = ((__typeof (*mem)) 1 << (bit)); \ ++ \ ++ __val = (*__memp); \ ++ do \ ++ { \ ++ __oldval = __val; \ ++ __val = atomic_compare_and_exchange_val_acq (__memp, \ ++ __oldval | __mask, \ ++ __oldval); \ ++ } \ ++ while (__builtin_expect (__val != __oldval, 0)); \ ++ __oldval & __mask; }) ++ ++#define atomic_full_barrier() __sync_synchronize () +Index: glibc-2.5/sysdeps/unix/sysv/linux/nios2/bits/fcntl.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/unix/sysv/linux/nios2/bits/fcntl.h 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,237 @@ ++/* O_*, F_*, FD_* bit values for Linux. ++ Copyright (C) 1995-1998, 2000, 2004, 2006, 2008 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _FCNTL_H ++# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead." ++#endif ++ ++#include <sys/types.h> ++#ifdef __USE_GNU ++# include <bits/uio.h> ++#endif ++ ++ ++/* open/fcntl - O_SYNC is only implemented on blocks devices and on files ++ located on an ext2 file system */ ++#define O_ACCMODE 0003 ++#define O_RDONLY 00 ++#define O_WRONLY 01 ++#define O_RDWR 02 ++#define O_CREAT 0100 /* not fcntl */ ++#define O_EXCL 0200 /* not fcntl */ ++#define O_NOCTTY 0400 /* not fcntl */ ++#define O_TRUNC 01000 /* not fcntl */ ++#define O_APPEND 02000 ++#define O_NONBLOCK 04000 ++#define O_NDELAY O_NONBLOCK ++#define O_SYNC 010000 ++#define O_FSYNC O_SYNC ++#define O_ASYNC 020000 ++ ++#ifdef __USE_GNU ++# define O_DIRECTORY 040000 /* Must be a directory. */ ++# define O_NOFOLLOW 0100000 /* Do not follow links. */ ++# define O_DIRECT 0200000 /* Direct disk access. */ ++# define O_NOATIME 01000000 /* Do not set atime. */ ++#endif ++ ++/* For now Linux has synchronisity options for data and read operations. ++ We define the symbols here but let them do the same as O_SYNC since ++ this is a superset. */ ++#if defined __USE_POSIX199309 || defined __USE_UNIX98 ++# define O_DSYNC O_SYNC /* Synchronize data. */ ++# define O_RSYNC O_SYNC /* Synchronize read operations. */ ++#endif ++ ++#ifdef __USE_LARGEFILE64 ++# define O_LARGEFILE 0400000 ++#endif ++ ++/* Values for the second argument to `fcntl'. */ ++#define F_DUPFD 0 /* Duplicate file descriptor. */ ++#define F_GETFD 1 /* Get file descriptor flags. */ ++#define F_SETFD 2 /* Set file descriptor flags. */ ++#define F_GETFL 3 /* Get file status flags. */ ++#define F_SETFL 4 /* Set file status flags. */ ++#ifndef __USE_FILE_OFFSET64 ++# define F_GETLK 5 /* Get record locking info. */ ++# define F_SETLK 6 /* Set record locking info (non-blocking). */ ++# define F_SETLKW 7 /* Set record locking info (blocking). */ ++#else ++# define F_GETLK F_GETLK64 /* Get record locking info. */ ++# define F_SETLK F_SETLK64 /* Set record locking info (non-blocking).*/ ++# define F_SETLKW F_SETLKW64 /* Set record locking info (blocking). */ ++#endif ++#define F_GETLK64 12 /* Get record locking info. */ ++#define F_SETLK64 13 /* Set record locking info (non-blocking). */ ++#define F_SETLKW64 14 /* Set record locking info (blocking). */ ++ ++#if defined __USE_BSD || defined __USE_UNIX98 ++# define F_SETOWN 8 /* Get owner of socket (receiver of SIGIO). */ ++# define F_GETOWN 9 /* Set owner of socket (receiver of SIGIO). */ ++#endif ++ ++#ifdef __USE_GNU ++# define F_SETSIG 10 /* Set number of signal to be sent. */ ++# define F_GETSIG 11 /* Get number of signal to be sent. */ ++#endif ++ ++#ifdef __USE_GNU ++# define F_SETLEASE 1024 /* Set a lease. */ ++# define F_GETLEASE 1025 /* Enquire what lease is active. */ ++# define F_NOTIFY 1026 /* Request notfications on a directory. */ ++#endif ++ ++/* For F_[GET|SET]FL. */ ++#define FD_CLOEXEC 1 /* actually anything with low bit set goes */ ++ ++/* For posix fcntl() and `l_type' field of a `struct flock' for lockf(). */ ++#define F_RDLCK 0 /* Read lock. */ ++#define F_WRLCK 1 /* Write lock. */ ++#define F_UNLCK 2 /* Remove lock. */ ++ ++/* For old implementation of bsd flock(). */ ++#define F_EXLCK 4 /* or 3 */ ++#define F_SHLCK 8 /* or 4 */ ++ ++#ifdef __USE_BSD ++/* Operations for bsd flock(), also used by the kernel implementation. */ ++# define LOCK_SH 1 /* shared lock */ ++# define LOCK_EX 2 /* exclusive lock */ ++# define LOCK_NB 4 /* or'd with one of the above to prevent ++ blocking */ ++# define LOCK_UN 8 /* remove lock */ ++#endif ++ ++#ifdef __USE_GNU ++# define LOCK_MAND 32 /* This is a mandatory flock: */ ++# define LOCK_READ 64 /* ... which allows concurrent read operations. */ ++# define LOCK_WRITE 128 /* ... which allows concurrent write operations. */ ++# define LOCK_RW 192 /* ... Which allows concurrent read & write operations. */ ++#endif ++ ++#ifdef __USE_GNU ++/* Types of directory notifications that may be requested with F_NOTIFY. */ ++# define DN_ACCESS 0x00000001 /* File accessed. */ ++# define DN_MODIFY 0x00000002 /* File modified. */ ++# define DN_CREATE 0x00000004 /* File created. */ ++# define DN_DELETE 0x00000008 /* File removed. */ ++# define DN_RENAME 0x00000010 /* File renamed. */ ++# define DN_ATTRIB 0x00000020 /* File changed attibutes. */ ++# define DN_MULTISHOT 0x80000000 /* Don't remove notifier. */ ++#endif ++ ++struct flock ++ { ++ short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ ++ short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ ++#ifndef __USE_FILE_OFFSET64 ++ __off_t l_start; /* Offset where the lock begins. */ ++ __off_t l_len; /* Size of the locked area; zero means until EOF. */ ++#else ++ __off64_t l_start; /* Offset where the lock begins. */ ++ __off64_t l_len; /* Size of the locked area; zero means until EOF. */ ++#endif ++ __pid_t l_pid; /* Process holding the lock. */ ++ }; ++ ++#ifdef __USE_LARGEFILE64 ++struct flock64 ++ { ++ short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ ++ short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ ++ __off64_t l_start; /* Offset where the lock begins. */ ++ __off64_t l_len; /* Size of the locked area; zero means until EOF. */ ++ __pid_t l_pid; /* Process holding the lock. */ ++ }; ++#endif ++ ++/* Define some more compatibility macros to be backward compatible with ++ BSD systems which did not managed to hide these kernel macros. */ ++#ifdef __USE_BSD ++# define FAPPEND O_APPEND ++# define FFSYNC O_FSYNC ++# define FASYNC O_ASYNC ++# define FNONBLOCK O_NONBLOCK ++# define FNDELAY O_NDELAY ++#endif /* Use BSD. */ ++ ++/* Advise to `posix_fadvise'. */ ++#ifdef __USE_XOPEN2K ++# define POSIX_FADV_NORMAL 0 /* No further special treatment. */ ++# define POSIX_FADV_RANDOM 1 /* Expect random page references. */ ++# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */ ++# define POSIX_FADV_WILLNEED 3 /* Will need these pages. */ ++# define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */ ++# define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */ ++#endif ++ ++ ++#ifdef __USE_GNU ++/* Flags for SYNC_FILE_RANGE. */ ++# define SYNC_FILE_RANGE_WAIT_BEFORE 1 /* Wait upon writeout of all pages ++ in the range before performing the ++ write. */ ++# define SYNC_FILE_RANGE_WRITE 2 /* Initiate writeout of all those ++ dirty pages in the range which are ++ not presently under writeback. */ ++# define SYNC_FILE_RANGE_WAIT_AFTER 4 /* Wait upon writeout of all pages in ++ the range after performing the ++ write. */ ++ ++/* Flags for SPLICE and VMSPLICE. */ ++# define SPLICE_F_MOVE 1 /* Move pages instead of copying. */ ++# define SPLICE_F_NONBLOCK 2 /* Don't block on the pipe splicing ++ (but we may still block on the fd ++ we splice from/to). */ ++# define SPLICE_F_MORE 4 /* Expect more data. */ ++# define SPLICE_F_GIFT 8 /* Pages passed in are a gift. */ ++#endif ++ ++__BEGIN_DECLS ++ ++#ifdef __USE_GNU ++ ++/* Provide kernel hint to read ahead. */ ++extern ssize_t readahead (int __fd, __off64_t __offset, size_t __count) ++ __THROW; ++ ++ ++/* Selective file content synch'ing. */ ++extern int sync_file_range (int __fd, __off64_t __from, __off64_t __to, ++ unsigned int __flags); ++ ++ ++/* Splice address range into a pipe. */ ++extern int vmsplice (int __fdout, const struct iovec *__iov, size_t __count, ++ unsigned int __flags); ++ ++/* Splice two files together. */ ++extern int splice (int __fdin, __off64_t *__offin, int __fdout, ++ __off64_t *__offout, size_t __len, unsigned int __flags) ++ __THROW; ++ ++/* In-kernel implementation of tee for pipe buffers. */ ++extern int tee (int __fdin, int __fdout, size_t __len, unsigned int __flags) ++ __THROW; ++ ++#endif ++ ++__END_DECLS +Index: glibc-2.5/sysdeps/unix/sysv/linux/nios2/bits/mman.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/unix/sysv/linux/nios2/bits/mman.h 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,106 @@ ++/* Definitions for POSIX memory map interface. Linux/Nios II version. ++ Copyright (C) 1997, 2000, 2003, 2004, 2005, 2006, 2008 ++ 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _SYS_MMAN_H ++# error "Never use <bits/mman.h> directly; include <sys/mman.h> instead." ++#endif ++ ++/* The following definitions basically come from the kernel headers. ++ But the kernel header is not namespace clean. */ ++ ++ ++/* Protections are chosen from these bits, OR'd together. The ++ implementation does not necessarily support PROT_EXEC or PROT_WRITE ++ without PROT_READ. The only guarantees are that no writing will be ++ allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */ ++ ++#define PROT_READ 0x1 /* Page can be read. */ ++#define PROT_WRITE 0x2 /* Page can be written. */ ++#define PROT_EXEC 0x4 /* Page can be executed. */ ++#define PROT_NONE 0x0 /* Page can not be accessed. */ ++#define PROT_GROWSDOWN 0x01000000 /* Extend change to start of ++ growsdown vma (mprotect only). */ ++#define PROT_GROWSUP 0x02000000 /* Extend change to start of ++ growsup vma (mprotect only). */ ++ ++/* Sharing types (must choose one and only one of these). */ ++#define MAP_SHARED 0x01 /* Share changes. */ ++#define MAP_PRIVATE 0x02 /* Changes are private. */ ++#ifdef __USE_MISC ++# define MAP_TYPE 0x0f /* Mask for type of mapping. */ ++#endif ++ ++/* Other flags. */ ++#define MAP_FIXED 0x10 /* Interpret addr exactly. */ ++#ifdef __USE_MISC ++# define MAP_FILE 0 ++# define MAP_ANONYMOUS 0x0020 /* Don't use a file. */ ++# define MAP_ANON MAP_ANONYMOUS ++# define MAP_RENAME MAP_ANONYMOUS ++#endif ++ ++/* These are Linux-specific. */ ++#ifdef __USE_MISC ++# define MAP_NORESERVE 0x4000 /* don't check for reservations */ ++# define MAP_ANONYMOUS 0x0020 /* don't use a file */ ++# define MAP_GROWSDOWN 0x0100 /* stack-like segment */ ++# define MAP_DENYWRITE 0x0800 /* ETXTBSY */ ++# define MAP_EXECUTABLE 0x1000 /* mark it as an executable */ ++# define MAP_LOCKED 0x2000 /* pages are locked */ ++# define MAP_POPULATE 0x8000 /* populate (prefault) pagetables */ ++# define MAP_NONBLOCK 0x10000 /* do not block on IO */ ++#endif ++ ++/* Flags to `msync'. */ ++#define MS_ASYNC 1 /* Sync memory asynchronously. */ ++#define MS_SYNC 4 /* Synchronous memory sync. */ ++#define MS_INVALIDATE 2 /* Invalidate the caches. */ ++ ++/* Flags for `mlockall'. */ ++#define MCL_CURRENT 1 /* Lock all currently mapped pages. */ ++#define MCL_FUTURE 2 /* Lock all additions to address ++ space. */ ++ ++/* Flags for `mremap'. */ ++#ifdef __USE_GNU ++# define MREMAP_MAYMOVE 1 ++# define MREMAP_FIXED 2 ++#endif ++ ++/* Advice to `madvise'. */ ++#ifdef __USE_BSD ++# define MADV_NORMAL 0 /* No further special treatment. */ ++# define MADV_RANDOM 1 /* Expect random page references. */ ++# define MADV_SEQUENTIAL 2 /* Expect sequential page references. */ ++# define MADV_WILLNEED 3 /* Will need these pages. */ ++# define MADV_DONTNEED 4 /* Don't need these pages. */ ++# define MADV_REMOVE 9 /* Remove these pages and resources. */ ++# define MADV_DONTFORK 10 /* Do not inherit across fork. */ ++# define MADV_DOFORK 11 /* Do inherit across fork. */ ++#endif ++ ++/* The POSIX people had to invent similar names for the same things. */ ++#ifdef __USE_XOPEN2K ++# define POSIX_MADV_NORMAL 0 /* No further special treatment. */ ++# define POSIX_MADV_RANDOM 1 /* Expect random page references. */ ++# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references. */ ++# define POSIX_MADV_WILLNEED 3 /* Will need these pages. */ ++# define POSIX_MADV_DONTNEED 4 /* Don't need these pages. */ ++#endif +Index: glibc-2.5/sysdeps/unix/sysv/linux/nios2/bits/poll.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/unix/sysv/linux/nios2/bits/poll.h 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,50 @@ ++/* Copyright (C) 1997, 2001, 2006 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _SYS_POLL_H ++# error "Never use <bits/poll.h> directly; include <sys/poll.h> instead." ++#endif ++ ++/* Event types that can be polled for. These bits may be set in `events' ++ to indicate the interesting event types; they will appear in `revents' ++ to indicate the status of the file descriptor. */ ++#define POLLIN 0x001 /* There is data to read. */ ++#define POLLPRI 0x002 /* There is urgent data to read. */ ++#define POLLOUT 0x004 /* Writing now will not block. */ ++ ++#ifdef __USE_XOPEN ++/* These values are defined in XPG4.2. */ ++# define POLLRDNORM 0x040 /* Normal data may be read. */ ++# define POLLRDBAND 0x080 /* Priority data may be read. */ ++# define POLLWRNORM POLLOUT /* Writing now will not block. */ ++# define POLLWRBAND 0x100 /* Priority data may be written. */ ++#endif ++ ++#ifdef __USE_GNU ++/* These are extensions for Linux. */ ++# define POLLMSG 0x400 ++# define POLLREMOVE 0x1000 ++# define POLLRDHUP 0x2000 ++#endif ++ ++/* Event types always implicitly polled for. These bits need not be set in ++ `events', but they will appear in `revents' to indicate the status of ++ the file descriptor. */ ++#define POLLERR 0x008 /* Error condition. */ ++#define POLLHUP 0x010 /* Hung up. */ ++#define POLLNVAL 0x020 /* Invalid polling request. */ +Index: glibc-2.5/sysdeps/unix/sysv/linux/nios2/brk.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/unix/sysv/linux/nios2/brk.c 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,58 @@ ++/* brk system call for Linux/Nios II. ++ Copyright (C) 1995, 1996, 2005 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#include <errno.h> ++#include <unistd.h> ++#include <sysdep.h> ++ ++/* This must be initialized data because commons can't have aliases. */ ++void *__curbrk = 0; ++ ++int ++__brk (void *addr) ++{ ++ void *newbrk; ++ ++ /* We can't use the INLINE_SYSCALL macro here because on non-optimized ++ builds it loads the address of errno even if no error occurred. __brk ++ is called during process initialization, before errno is set up. */ ++ { ++ register int _r2 asm ("r2") = (int)(SYS_ify (brk)); ++ register int _err asm ("r7"); ++ register int _r4 asm ("r4") = (int)(addr); ++ asm volatile ("trap" ++ : "=r" (_r2), "=r" (_err) ++ : "r" (_r2), "r" (_r4) ++ : __SYSCALL_CLOBBERS); ++ newbrk = (void *) _r2; ++ if (_err) ++ newbrk = 0; ++ } ++ ++ __curbrk = newbrk; ++ ++ if (newbrk < addr) ++ { ++ __set_errno (ENOMEM); ++ return -1; ++ } ++ ++ return 0; ++} ++weak_alias (__brk, brk) +Index: glibc-2.5/sysdeps/unix/sysv/linux/nios2/clone.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/unix/sysv/linux/nios2/clone.S 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,102 @@ ++/* Copyright (C) 2008 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by Andrew Jenner <andrew@codesourcery.com>, 2008. ++ ++ 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++/* clone() is even more special than fork() as it mucks with stacks ++ and invokes a function in the right context after its all over. */ ++ ++#include <sysdep.h> ++#define _ERRNO_H 1 ++#include <bits/errno.h> ++#include <tcb-offsets.h> ++ ++#define CLONE_VM 0x00000100 ++#define CLONE_THREAD 0x00010000 ++ ++/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg, ++ void *parent_tidptr, void *tls, void *child_tidptr) */ ++ ++ .text ++ENTRY(__clone) ++ /* Sanity check arguments. */ ++ movi r2,EINVAL ++ /* No NULL function pointers. */ ++ beq r4,zero,SYSCALL_ERROR_LABEL ++ /* No NULL stack pointers. */ ++ beq r5,zero,SYSCALL_ERROR_LABEL ++ ++ subi r5,r5,12 /* Reserve argument save space. */ ++ stw r6,8(r5) /* Save flags. */ ++ stw r4,4(r5) /* Save function pointer. */ ++ stw r7,0(r5) /* Save argument pointer. */ ++ ++ /* Load arguments. */ ++ mov r4,r6 ++ ldw r6,0(sp) ++ ldw r7,4(sp) ++ ldw r8,8(sp) ++ ++ /* Do the system call. */ ++ movi r2,__NR_clone ++ trap ++ ++ /* Check for errors. */ ++ bne r7,zero,SYSCALL_ERROR_LABEL ++ ++ /* See if we're on the newly created thread. */ ++ beq r2,zero,thread_start ++ ++ /* Successful return from the parent */ ++ ret ++ ++thread_start: ++ ldw r4,8(sp) ++ ++ andi r2,r4,CLONE_THREAD ++ bne r2,zero,2f ++ andi r3,r4,CLONE_VM ++ movi r2,-1 ++ bne r3,zero,3f ++ DO_CALL (getpid, 0) ++3: ++ stw r2,PID_OFFSET(r23) ++ stw r2,TID_OFFSET(r23) ++2: ++ ldw r5,4(sp) /* Function pointer. */ ++ ldw r4,0(sp) /* Argument pointer. */ ++ addi sp,sp,12 ++ ++ /* Call the user's function. */ ++ callr r5 ++ ++ /* _exit with the result. */ ++ mov r4,r2 ++ ++#ifdef PIC ++ nextpc r22 ++1: movhi r8, %hiadj(_GLOBAL_OFFSET_TABLE_ - 1b) ++ addi r8, r8, %lo(_GLOBAL_OFFSET_TABLE_ - 1b) ++ add r22, r22, r8 ++ ldw r8, %call(_exit)(r22) ++ jmp r8 ++#else ++ jmpi _exit ++#endif ++PSEUDO_END (__clone) ++ ++weak_alias (__clone, clone) +Index: glibc-2.5/sysdeps/unix/sysv/linux/nios2/configure +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/unix/sysv/linux/nios2/configure 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,4 @@ ++# This file is generated from configure.in by Autoconf. DO NOT EDIT! ++ # Local configure fragment for sysdeps/unix/sysv/linux/nios2. ++ ++arch_minimum_kernel=2.6.21 +Index: glibc-2.5/sysdeps/unix/sysv/linux/nios2/configure.in +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/unix/sysv/linux/nios2/configure.in 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,4 @@ ++GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. ++# Local configure fragment for sysdeps/unix/sysv/linux/nios2. ++ ++arch_minimum_kernel=2.6.21 +Index: glibc-2.5/sysdeps/unix/sysv/linux/nios2/fxstatat.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/unix/sysv/linux/nios2/fxstatat.c 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1 @@ ++#include <sysdeps/unix/sysv/linux/i386/fxstatat.c> +Index: glibc-2.5/sysdeps/unix/sysv/linux/nios2/getrlimit.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/unix/sysv/linux/nios2/getrlimit.c 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1 @@ ++#include <sysdeps/unix/sysv/linux/i386/getrlimit.c> +Index: glibc-2.5/sysdeps/unix/sysv/linux/nios2/kernel-features.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/unix/sysv/linux/nios2/kernel-features.h 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,26 @@ ++/* Set flags signalling availability of kernel features based on given ++ kernel version number. ++ Copyright (C) 2006, 2008 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#define __ASSUME_NEW_GETRLIMIT_SYSCALL 1 ++ ++#include_next <kernel-features.h> ++ ++#undef __ASSUME_PSELECT ++#undef __ASSUME_PPOLL +Index: glibc-2.5/sysdeps/unix/sysv/linux/nios2/nptl/bits/pthreadtypes.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/unix/sysv/linux/nios2/nptl/bits/pthreadtypes.h 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,167 @@ ++/* Copyright (C) 2002, 2003, 2004, 2005, 2006 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _BITS_PTHREADTYPES_H ++#define _BITS_PTHREADTYPES_H 1 ++ ++#define __SIZEOF_PTHREAD_ATTR_T 36 ++#define __SIZEOF_PTHREAD_MUTEX_T 24 ++#define __SIZEOF_PTHREAD_MUTEXATTR_T 4 ++#define __SIZEOF_PTHREAD_COND_T 48 ++#define __SIZEOF_PTHREAD_COND_COMPAT_T 12 ++#define __SIZEOF_PTHREAD_CONDATTR_T 4 ++#define __SIZEOF_PTHREAD_RWLOCK_T 32 ++#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8 ++#define __SIZEOF_PTHREAD_BARRIER_T 20 ++#define __SIZEOF_PTHREAD_BARRIERATTR_T 4 ++ ++ ++/* Thread identifiers. The structure of the attribute type is not ++ exposed on purpose. */ ++typedef unsigned long int pthread_t; ++ ++ ++typedef union ++{ ++ char __size[__SIZEOF_PTHREAD_ATTR_T]; ++ long int __align; ++} pthread_attr_t; ++ ++ ++typedef struct __pthread_internal_slist ++{ ++ struct __pthread_internal_slist *__next; ++} __pthread_slist_t; ++ ++ ++/* Data structures for mutex handling. The structure of the attribute ++ type is not exposed on purpose. */ ++typedef union ++{ ++ struct __pthread_mutex_s ++ { ++ int __lock; ++ unsigned int __count; ++ int __owner; ++ /* KIND must stay at this position in the structure to maintain ++ binary compatibility. */ ++ int __kind; ++ unsigned int __nusers; ++ __extension__ union ++ { ++ int __spins; ++ __pthread_slist_t __list; ++ }; ++ } __data; ++ char __size[__SIZEOF_PTHREAD_MUTEX_T]; ++ long int __align; ++} pthread_mutex_t; ++ ++typedef union ++{ ++ char __size[__SIZEOF_PTHREAD_MUTEXATTR_T]; ++ long int __align; ++} pthread_mutexattr_t; ++ ++ ++/* Data structure for conditional variable handling. The structure of ++ the attribute type is not exposed on purpose. */ ++typedef union ++{ ++ struct ++ { ++ int __lock; ++ unsigned int __futex; ++ __extension__ unsigned long long int __total_seq; ++ __extension__ unsigned long long int __wakeup_seq; ++ __extension__ unsigned long long int __woken_seq; ++ void *__mutex; ++ unsigned int __nwaiters; ++ unsigned int __broadcast_seq; ++ } __data; ++ char __size[__SIZEOF_PTHREAD_COND_T]; ++ __extension__ long long int __align; ++} pthread_cond_t; ++ ++typedef union ++{ ++ char __size[__SIZEOF_PTHREAD_CONDATTR_T]; ++ long int __align; ++} pthread_condattr_t; ++ ++ ++/* Keys for thread-specific data */ ++typedef unsigned int pthread_key_t; ++ ++ ++/* Once-only execution */ ++typedef int pthread_once_t; ++ ++ ++#if defined __USE_UNIX98 || defined __USE_XOPEN2K ++/* Data structure for read-write lock variable handling. The ++ structure of the attribute type is not exposed on purpose. */ ++typedef union ++{ ++ struct ++ { ++ int __lock; ++ unsigned int __nr_readers; ++ unsigned int __readers_wakeup; ++ unsigned int __writer_wakeup; ++ unsigned int __nr_readers_queued; ++ unsigned int __nr_writers_queued; ++ /* FLAGS must stay at this position in the structure to maintain ++ binary compatibility. */ ++ unsigned int __flags; ++ int __writer; ++ } __data; ++ char __size[__SIZEOF_PTHREAD_RWLOCK_T]; ++ long int __align; ++} pthread_rwlock_t; ++ ++typedef union ++{ ++ char __size[__SIZEOF_PTHREAD_RWLOCKATTR_T]; ++ long int __align; ++} pthread_rwlockattr_t; ++#endif ++ ++ ++#ifdef __USE_XOPEN2K ++/* POSIX spinlock data type. */ ++typedef volatile int pthread_spinlock_t; ++ ++ ++/* POSIX barriers data type. The structure of the type is ++ deliberately not exposed. */ ++typedef union ++{ ++ char __size[__SIZEOF_PTHREAD_BARRIER_T]; ++ long int __align; ++} pthread_barrier_t; ++ ++typedef union ++{ ++ char __size[__SIZEOF_PTHREAD_BARRIERATTR_T]; ++ int __align; ++} pthread_barrierattr_t; ++#endif ++ ++ ++#endif /* bits/pthreadtypes.h */ +Index: glibc-2.5/sysdeps/unix/sysv/linux/nios2/nptl/bits/semaphore.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/unix/sysv/linux/nios2/nptl/bits/semaphore.h 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,38 @@ ++/* Copyright (C) 2002, 2005 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _SEMAPHORE_H ++# error "Never use <bits/semaphore.h> directly; include <semaphore.h> instead." ++#endif ++ ++ ++#define __SIZEOF_SEM_T 16 ++ ++ ++/* Value returned if `sem_open' failed. */ ++#define SEM_FAILED ((sem_t *) 0) ++ ++/* Maximum value the semaphore can have. */ ++#define SEM_VALUE_MAX ((int) ((~0u) >> 1)) ++ ++ ++typedef union ++{ ++ char __size[__SIZEOF_SEM_T]; ++ long int __align; ++} sem_t; +Index: glibc-2.5/sysdeps/unix/sysv/linux/nios2/nptl/createthread.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/unix/sysv/linux/nios2/nptl/createthread.c 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,24 @@ ++/* Copyright (C) 2005 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++/* Value passed to 'clone' for initialization of the thread register. */ ++#define TLS_VALUE ((void *) (pd) \ ++ + TLS_TCB_OFFSET + TLS_PRE_TCB_SIZE) ++ ++/* Get the real implementation. */ ++#include <nptl/sysdeps/pthread/createthread.c> +Index: glibc-2.5/sysdeps/unix/sysv/linux/nios2/nptl/fork.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/unix/sysv/linux/nios2/nptl/fork.c 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,34 @@ ++/* Copyright (C) 2005 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#include <sched.h> ++#include <signal.h> ++#include <sysdep.h> ++#include <tls.h> ++ ++/* Argument 1 - Clone flags. ++ 2 - Child stack pointer. ++ 3 - Parent tid pointer. ++ 4 - New TLS area pointer. ++ 5 - Child tid pointer. */ ++#define ARCH_FORK() \ ++ INLINE_SYSCALL (clone, 5, \ ++ CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD, \ ++ NULL, NULL, NULL, &THREAD_SELF->tid) ++ ++#include <nptl/sysdeps/unix/sysv/linux/fork.c> +Index: glibc-2.5/sysdeps/unix/sysv/linux/nios2/nptl/lowlevellock.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/unix/sysv/linux/nios2/nptl/lowlevellock.h 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,294 @@ ++/* Copyright (C) 2005, 2006 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _LOWLEVELLOCK_H ++#define _LOWLEVELLOCK_H 1 ++ ++#include <time.h> ++#include <sys/param.h> ++#include <bits/pthreadtypes.h> ++#include <atomic.h> ++#include <sysdep.h> ++ ++#define FUTEX_WAIT 0 ++#define FUTEX_WAKE 1 ++#define FUTEX_REQUEUE 3 ++#define FUTEX_CMP_REQUEUE 4 ++#define FUTEX_WAKE_OP 5 ++#define FUTEX_OP_CLEAR_WAKE_IF_GT_ONE ((4 << 24) | 1) ++#define FUTEX_LOCK_PI 6 ++#define FUTEX_UNLOCK_PI 7 ++#define FUTEX_TRYLOCK_PI 8 ++ ++/* Initializer for compatibility lock. */ ++#define LLL_MUTEX_LOCK_INITIALIZER (0) ++ ++#define lll_futex_wait(futexp, val) \ ++ ({ \ ++ INTERNAL_SYSCALL_DECL (__err); \ ++ long int __ret; \ ++ __ret = INTERNAL_SYSCALL (futex, __err, 4, \ ++ (futexp), FUTEX_WAIT, (val), 0); \ ++ INTERNAL_SYSCALL_ERROR_P (__ret, __err) ? -__ret : __ret; \ ++ }) ++ ++#define lll_futex_timed_wait(futexp, val, timespec) \ ++ ({ \ ++ INTERNAL_SYSCALL_DECL (__err); \ ++ long int __ret; \ ++ __ret = INTERNAL_SYSCALL (futex, __err, 4, \ ++ (futexp), FUTEX_WAIT, (val), (timespec)); \ ++ INTERNAL_SYSCALL_ERROR_P (__ret, __err) ? -__ret : __ret; \ ++ }) ++ ++#define lll_futex_wake(futexp, nr) \ ++ ({ \ ++ INTERNAL_SYSCALL_DECL (__err); \ ++ long int __ret; \ ++ __ret = INTERNAL_SYSCALL (futex, __err, 4, \ ++ (futexp), FUTEX_WAKE, (nr), 0); \ ++ INTERNAL_SYSCALL_ERROR_P (__ret, __err) ? -__ret : __ret; \ ++ }) ++ ++#define lll_robust_mutex_dead(futexv) \ ++ do \ ++ { \ ++ int *__futexp = &(futexv); \ ++ atomic_or (__futexp, FUTEX_OWNER_DIED); \ ++ lll_futex_wake (__futexp, 1); \ ++ } \ ++ while (0) ++ ++/* Returns non-zero if error happened, zero if success. */ ++#define lll_futex_requeue(futexp, nr_wake, nr_move, mutex, val) \ ++ ({ \ ++ INTERNAL_SYSCALL_DECL (__err); \ ++ long int __ret; \ ++ __ret = INTERNAL_SYSCALL (futex, __err, 6, \ ++ (futexp), FUTEX_CMP_REQUEUE, (nr_wake), \ ++ (nr_move), (mutex), (val)); \ ++ INTERNAL_SYSCALL_ERROR_P (__ret, __err) ? -__ret : __ret; \ ++ }) ++ ++ ++/* Returns non-zero if error happened, zero if success. */ ++#define lll_futex_wake_unlock(futexp, nr_wake, nr_wake2, futexp2) \ ++ ({ \ ++ INTERNAL_SYSCALL_DECL (__err); \ ++ long int __ret; \ ++ __ret = INTERNAL_SYSCALL (futex, __err, 6, \ ++ (futexp), FUTEX_WAKE_OP, (nr_wake), \ ++ (nr_wake2), (futexp2), \ ++ FUTEX_OP_CLEAR_WAKE_IF_GT_ONE); \ ++ INTERNAL_SYSCALL_ERROR_P (__ret, __err) ? -__ret : __ret; \ ++ }) ++ ++ ++#define lll_mutex_trylock(lock) \ ++ atomic_compare_and_exchange_val_acq(&(lock), 1, 0) ++ ++#define lll_mutex_cond_trylock(lock) \ ++ atomic_compare_and_exchange_val_acq(&(lock), 2, 0) ++ ++static inline int __attribute__((always_inline)) ++__lll_robust_mutex_trylock(int *futex, int id) ++{ ++ return atomic_compare_and_exchange_val_acq (futex, id, 0) != 0; ++} ++#define lll_robust_mutex_trylock(lock, id) \ ++ __lll_robust_mutex_trylock (&(lock), id) ++ ++extern int __lll_robust_lock_wait (int *futex) attribute_hidden; ++ ++static inline void __attribute__((always_inline)) ++__lll_mutex_lock (int *futex) ++{ ++ int val = atomic_exchange_acq (futex, 1); ++ ++ if (__builtin_expect (val != 0, 0)) ++ { ++ while (atomic_exchange_acq (futex, 2) != 0) ++ lll_futex_wait (futex, 2); ++ } ++} ++#define lll_mutex_lock(futex) __lll_mutex_lock (&(futex)) ++ ++ ++static inline int __attribute__ ((always_inline)) ++__lll_robust_mutex_lock (int *futex, int id) ++{ ++ int result = 0; ++ if (atomic_compare_and_exchange_bool_acq (futex, id, 0) != 0) ++ result = __lll_robust_lock_wait (futex); ++ return result; ++} ++#define lll_robust_mutex_lock(futex, id) \ ++ __lll_robust_mutex_lock (&(futex), id) ++ ++ ++static inline void __attribute__ ((always_inline)) ++__lll_mutex_cond_lock (int *futex) ++{ ++ int val = atomic_exchange_acq (futex, 2); ++ ++ if (__builtin_expect (val != 0, 0)) ++ { ++ while (atomic_exchange_acq (futex, 2) != 0) ++ lll_futex_wait (futex, 2); ++ } ++} ++#define lll_mutex_cond_lock(futex) __lll_mutex_cond_lock (&(futex)) ++ ++ ++#define lll_robust_mutex_cond_lock(futex, id) \ ++ __lll_robust_mutex_lock (&(futex), (id) | FUTEX_WAITERS) ++ ++ ++extern int __lll_timedlock_wait (int *futex, const struct timespec *) ++ attribute_hidden; ++extern int __lll_robust_timedlock_wait (int *futex, const struct timespec *) ++ attribute_hidden; ++ ++static inline int __attribute__ ((always_inline)) ++__lll_mutex_timedlock (int *futex, const struct timespec *abstime) ++{ ++ int result = 0; ++ int val = atomic_exchange_acq (futex, 1); ++ ++ if (__builtin_expect (val != 0, 0)) ++ result = __lll_timedlock_wait (futex, abstime); ++ return result; ++} ++#define lll_mutex_timedlock(futex, abstime) \ ++ __lll_mutex_timedlock (&(futex), abstime) ++ ++ ++static inline int __attribute__ ((always_inline)) ++__lll_robust_mutex_timedlock (int *futex, const struct timespec *abstime, ++ int id) ++{ ++ int result = 0; ++ if (atomic_compare_and_exchange_bool_acq (futex, id, 0) != 0) ++ result = __lll_robust_timedlock_wait (futex, abstime); ++ return result; ++} ++#define lll_robust_mutex_timedlock(futex, abstime, id) \ ++ __lll_robust_mutex_timedlock (&(futex), abstime, id) ++ ++ ++static inline void __attribute__ ((always_inline)) ++__lll_mutex_unlock (int *futex) ++{ ++ int val = atomic_exchange_rel (futex, 0); ++ if (__builtin_expect (val > 1, 0)) ++ lll_futex_wake (futex, 1); ++} ++#define lll_mutex_unlock(futex) __lll_mutex_unlock(&(futex)) ++ ++ ++static inline void __attribute__ ((always_inline)) ++__lll_robust_mutex_unlock (int *futex, int mask) ++{ ++ int val = atomic_exchange_rel (futex, 0); ++ if (__builtin_expect (val & mask, 0)) ++ lll_futex_wake (futex, 1); ++} ++#define lll_robust_mutex_unlock(futex) \ ++ __lll_robust_mutex_unlock(&(futex), FUTEX_WAITERS) ++ ++ ++static inline void __attribute__ ((always_inline)) ++__lll_mutex_unlock_force (int *futex) ++{ ++ (void) atomic_exchange_rel (futex, 0); ++ lll_futex_wake (futex, 1); ++} ++#define lll_mutex_unlock_force(futex) __lll_mutex_unlock_force(&(futex)) ++ ++ ++#define lll_mutex_islocked(futex) \ ++ (futex != 0) ++ ++ ++/* Our internal lock implementation is identical to the binary-compatible ++ mutex implementation. */ ++ ++/* Type for lock object. */ ++typedef int lll_lock_t; ++ ++/* Initializers for lock. */ ++#define LLL_LOCK_INITIALIZER (0) ++#define LLL_LOCK_INITIALIZER_LOCKED (1) ++ ++extern int lll_unlock_wake_cb (int *__futex) attribute_hidden; ++ ++/* The states of a lock are: ++ 0 - untaken ++ 1 - taken by one user ++ >1 - taken by more users */ ++ ++#define lll_trylock(lock) lll_mutex_trylock (lock) ++#define lll_lock(lock) lll_mutex_lock (lock) ++#define lll_unlock(lock) lll_mutex_unlock (lock) ++#define lll_islocked(lock) lll_mutex_islocked (lock) ++ ++/* The kernel notifies a process which uses CLONE_CLEARTID via futex ++ wakeup when the clone terminates. The memory location contains the ++ thread ID while the clone is running and is reset to zero ++ afterwards. */ ++#define lll_wait_tid(tid) \ ++ do { \ ++ __typeof (tid) __tid; \ ++ while ((__tid = (tid)) != 0) \ ++ lll_futex_wait (&(tid), __tid); \ ++ } while (0) ++ ++extern int __lll_timedwait_tid (int *, const struct timespec *) ++ attribute_hidden; ++ ++#define lll_timedwait_tid(tid, abstime) \ ++ ({ \ ++ int __res = 0; \ ++ if ((tid) != 0) \ ++ __res = __lll_timedwait_tid (&(tid), (abstime)); \ ++ __res; \ ++ }) ++ ++ ++/* Conditional variable handling. */ ++ ++extern void __lll_cond_wait (pthread_cond_t *cond) ++ attribute_hidden; ++extern int __lll_cond_timedwait (pthread_cond_t *cond, ++ const struct timespec *abstime) ++ attribute_hidden; ++extern void __lll_cond_wake (pthread_cond_t *cond) ++ attribute_hidden; ++extern void __lll_cond_broadcast (pthread_cond_t *cond) ++ attribute_hidden; ++ ++#define lll_cond_wait(cond) \ ++ __lll_cond_wait (cond) ++#define lll_cond_timedwait(cond, abstime) \ ++ __lll_cond_timedwait (cond, abstime) ++#define lll_cond_wake(cond) \ ++ __lll_cond_wake (cond) ++#define lll_cond_broadcast(cond) \ ++ __lll_cond_broadcast (cond) ++ ++#endif /* lowlevellock.h */ +Index: glibc-2.5/sysdeps/unix/sysv/linux/nios2/nptl/pt-vfork.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/unix/sysv/linux/nios2/nptl/pt-vfork.S 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,42 @@ ++/* Copyright (C) 2005, 2008 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#include <sysdep.h> ++#include <tcb-offsets.h> ++ ++ENTRY (__vfork) ++ ++ ldw r4, PID_OFFSET(r23) ++ sub r4, zero, r4 ++ stw r4, PID_OFFSET(r23) ++ ++ DO_CALL (vfork, 0) ++ ++ beq r2, zero, 1f ++ ldw r4, PID_OFFSET(r23) ++ sub r4, zero, r4 ++ stw r4, PID_OFFSET(r23) ++1: ++ ++ bne r7, zero, SYSCALL_ERROR_LABEL ++ ret ++ ++PSEUDO_END (__vfork) ++libc_hidden_def (__vfork) ++ ++weak_alias (__vfork, vfork) +Index: glibc-2.5/sysdeps/unix/sysv/linux/nios2/nptl/pthread_once.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/unix/sysv/linux/nios2/nptl/pthread_once.c 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,94 @@ ++/* Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by Jakub Jelinek <jakub@redhat.com>, 2003. ++ ++ 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#include "pthreadP.h" ++#include <lowlevellock.h> ++ ++ ++unsigned long int __fork_generation attribute_hidden; ++ ++ ++static void ++clear_once_control (void *arg) ++{ ++ pthread_once_t *once_control = (pthread_once_t *) arg; ++ ++ *once_control = 0; ++ lll_futex_wake (once_control, INT_MAX); ++} ++ ++ ++int ++__pthread_once (once_control, init_routine) ++ pthread_once_t *once_control; ++ void (*init_routine) (void); ++{ ++ while (1) ++ { ++ int oldval, val, newval; ++ ++ val = *once_control; ++ do ++ { ++ /* Check if the initialized has already been done. */ ++ if ((val & 2) != 0) ++ return 0; ++ ++ oldval = val; ++ newval = (oldval & 3) | __fork_generation | 1; ++ val = atomic_compare_and_exchange_val_acq (once_control, newval, ++ oldval); ++ } ++ while (__builtin_expect (val != oldval, 0)); ++ ++ /* Check if another thread already runs the initializer. */ ++ if ((oldval & 1) != 0) ++ { ++ /* Check whether the initializer execution was interrupted ++ by a fork. */ ++ if (((oldval ^ newval) & -4) == 0) ++ { ++ /* Same generation, some other thread was faster. Wait. */ ++ lll_futex_wait (once_control, newval); ++ continue; ++ } ++ } ++ ++ /* This thread is the first here. Do the initialization. ++ Register a cleanup handler so that in case the thread gets ++ interrupted the initialization can be restarted. */ ++ pthread_cleanup_push (clear_once_control, once_control); ++ ++ init_routine (); ++ ++ pthread_cleanup_pop (0); ++ ++ ++ /* Add one to *once_control. */ ++ atomic_increment (once_control); ++ ++ /* Wake up all other threads. */ ++ lll_futex_wake (once_control, INT_MAX); ++ break; ++ } ++ ++ return 0; ++} ++weak_alias (__pthread_once, pthread_once) ++strong_alias (__pthread_once, __pthread_once_internal) +Index: glibc-2.5/sysdeps/unix/sysv/linux/nios2/nptl/sysdep-cancel.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/unix/sysv/linux/nios2/nptl/sysdep-cancel.h 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,133 @@ ++/* Copyright (C) 2003, 2004, 2005, 2008 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#include <sysdep.h> ++#include <sysdeps/generic/sysdep.h> ++#include <tls.h> ++#ifndef __ASSEMBLER__ ++# include <nptl/pthreadP.h> ++#endif ++ ++#if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt ++ ++# undef PSEUDO ++# define PSEUDO(name, syscall_name, args) \ ++ .type __##syscall_name##_nocancel, @function; \ ++ .globl __##syscall_name##_nocancel; \ ++ __##syscall_name##_nocancel: \ ++ DO_CALL (syscall_name, args); \ ++ bne r7, zero, SYSCALL_ERROR_LABEL; \ ++ ret; \ ++ .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \ ++ ENTRY (name) \ ++ cfi_startproc; \ ++ SINGLE_THREAD_P(r2); \ ++ bne r2, zero, pseudo_cancel; \ ++ DO_CALL (syscall_name, args); \ ++ bne r7, zero, SYSCALL_ERROR_LABEL; \ ++ ret; \ ++ pseudo_cancel: \ ++ SAVESTK_##args; /* save syscall args and adjust stack */ \ ++ SAVEREG(ra, 0); /* save return address */ \ ++ SAVEREG(r22, 4); /* save GOT pointer */ \ ++ nextpc r22; \ ++1: movhi r2, %hiadj(_GLOBAL_OFFSET_TABLE_ - 1b); \ ++ addi r2, r2, %lo(_GLOBAL_OFFSET_TABLE_ - 1b); \ ++ add r22, r22, r2; \ ++ CENABLE; \ ++ callr r3; \ ++ stw r2, 8(sp); /* save mask */ \ ++ LOADARGS_##args; \ ++ movi r2, SYS_ify(syscall_name); \ ++ trap; \ ++ stw r2, 12(sp); /* save syscall result */ \ ++ stw r7, 16(sp); /* save syscall error flag */ \ ++ ldw r4, 8(sp); /* pass mask as argument 1 */ \ ++ CDISABLE; \ ++ callr r3; \ ++ ldw r7, 16(sp); /* restore syscall error flag */ \ ++ ldw r2, 12(sp); /* restore syscall result */ \ ++ ldw ra, 0(sp); /* restore return address */ \ ++ ldw r22, 4(sp); /* restore GOT pointer */ \ ++ RESTORESTK_##args; \ ++ bne r7, zero, SYSCALL_ERROR_LABEL; \ ++ cfi_endproc; ++ ++# undef PSEUDO_END ++# define PSEUDO_END(sym) \ ++ SYSCALL_ERROR_HANDLER \ ++ END (sym) ++ ++#define SAVEREG(REG, LOC) stw REG, LOC(sp); cfi_rel_offset (REG, LOC) ++#define SAVESTK(X) subi sp, sp, X; cfi_adjust_cfa_offset(X) ++#define SAVESTK_0 SAVESTK(20) ++#define SAVEARG_1 SAVEREG(r4, 20) ++#define SAVESTK_1 SAVESTK(24); SAVEARG_1 ++#define SAVEARG_2 SAVEREG(r5, 24); SAVEARG_1 ++#define SAVESTK_2 SAVESTK(28); SAVEARG_2 ++#define SAVEARG_3 SAVEREG(r6, 28); SAVEARG_2 ++#define SAVESTK_3 SAVESTK(32); SAVEARG_3 ++#define SAVEARG_4 SAVEREG(r7, 32); SAVEARG_3 ++#define SAVESTK_4 SAVESTK(36); SAVEARG_4 ++#define SAVESTK_5 SAVESTK_4 ++#define SAVESTK_6 SAVESTK_5 ++ ++#define LOADARGS_0 ++#define LOADARGS_1 ldw r4, 20(sp) ++#define LOADARGS_2 LOADARGS_1; ldw r5, 24(sp) ++#define LOADARGS_3 LOADARGS_2; ldw r6, 28(sp) ++#define LOADARGS_4 LOADARGS_3; ldw r7, 32(sp) ++#define LOADARGS_5 LOADARGS_4; ldw r8, 36(sp) ++#define LOADARGS_6 LOADARGS_5; ldw r9, 40(sp) ++ ++#define RESTORESTK(X) addi sp, sp, X; cfi_adjust_cfa_offset(-X) ++#define RESTORESTK_0 RESTORESTK(20) ++#define RESTORESTK_1 RESTORESTK(24) ++#define RESTORESTK_2 RESTORESTK(28) ++#define RESTORESTK_3 RESTORESTK(32) ++#define RESTORESTK_4 RESTORESTK(36) ++#define RESTORESTK_5 RESTORESTK(36) ++#define RESTORESTK_6 RESTORESTK(36) ++ ++# ifdef IS_IN_libpthread ++# define CENABLE ldw r3, %call(__pthread_enable_asynccancel)(r22) ++# define CDISABLE ldw r3, %call(__pthread_disable_asynccancel)(r22) ++# elif defined IS_IN_librt ++# define CENABLE ldw r3, %call(__librt_enable_asynccancel)(r22) ++# define CDISABLE ldw r3, %call(__librt_disable_asynccancel)(r22) ++# else ++# define CENABLE ldw r3, %call(__libc_enable_asynccancel)(r22) ++# define CDISABLE ldw r3, %call(__libc_disable_asynccancel)(r22) ++# endif ++ ++# ifndef __ASSEMBLER__ ++# define SINGLE_THREAD_P \ ++ __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ ++ header.multiple_threads) \ ++ == 0, 1) ++# else ++# define SINGLE_THREAD_P(reg) \ ++ ldw reg, MULTIPLE_THREADS_OFFSET(r23) ++#endif ++ ++#elif !defined __ASSEMBLER__ ++ ++# define SINGLE_THREAD_P 1 ++# define NO_CANCELLATION 1 ++ ++#endif +Index: glibc-2.5/sysdeps/unix/sysv/linux/nios2/nptl/vfork.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/unix/sysv/linux/nios2/nptl/vfork.S 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,42 @@ ++/* Copyright (C) 2005, 2008 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#include <sysdep.h> ++#include <tcb-offsets.h> ++ ++ENTRY (__vfork) ++ ++ ldw r4, PID_OFFSET(r23) ++ sub r4, zero, r4 ++ stw r4, PID_OFFSET(r23) ++ ++ DO_CALL (vfork, 0) ++ ++ beq r2, zero, 1f ++ ldw r4, PID_OFFSET(r23) ++ sub r4, zero, r4 ++ stw r4, PID_OFFSET(r23) ++1: ++ ++ bne r7, zero, SYSCALL_ERROR_LABEL ++ ret ++ ++PSEUDO_END (__vfork) ++libc_hidden_def (__vfork) ++ ++weak_alias (__vfork, vfork) +Index: glibc-2.5/sysdeps/unix/sysv/linux/nios2/profil-counter.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/unix/sysv/linux/nios2/profil-counter.h 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,2 @@ ++/* We can use the ix86 version. */ ++#include <sysdeps/unix/sysv/linux/i386/profil-counter.h> +Index: glibc-2.5/sysdeps/unix/sysv/linux/nios2/socket.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/unix/sysv/linux/nios2/socket.S 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,136 @@ ++/* Copyright (C) 1995, 1996, 1997, 1998, 2003, 2004, 2005 ++ 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#include <sysdep-cancel.h> ++#include <socketcall.h> ++ ++#define P(a, b) P2(a, b) ++#define P2(a, b) a##b ++ ++ .text ++/* The socket-oriented system calls are handled unusally in Linux. ++ They are all gated through the single `socketcall' system call number. ++ `socketcall' takes two arguments: the first is the subcode, specifying ++ which socket function is being called; and the second is a pointer to ++ the arguments to the specific function. ++ ++ The .S files for the other calls just #define socket and #include this. */ ++ ++#ifndef __socket ++# ifndef NO_WEAK_ALIAS ++# define __socket P(__,socket) ++# else ++# define __socket socket ++# endif ++#endif ++ ++#define PUSHARGS_1 subi sp, sp, 4 ; \ ++ stw r4, 0(sp) ++#define PUSHARGS_2 subi sp, sp, 8 ; \ ++ stw r5, 4(sp) ; \ ++ stw r4, 0(sp) ++#define PUSHARGS_3 subi sp, sp, 12 ; \ ++ stw r6, 8(sp) ; \ ++ stw r5, 4(sp) ; \ ++ stw r4, 0(sp) ++#define PUSHARGS_4 subi sp, sp, 16 ; \ ++ stw r7, 12(sp) ; \ ++ stw r6, 8(sp) ; \ ++ stw r5, 4(sp) ; \ ++ stw r4, 0(sp) ++#define PUSHARGS_5 PUSHARGS_4 /* Caller has already pushed arg 5 */ ++#define PUSHARGS_6 PUSHARGS_4 ++ ++#define POPARGS_1 addi sp, sp, 4 ++#define POPARGS_2 addi sp, sp, 8 ++#define POPARGS_3 addi sp, sp, 12 ++#define POPARGS_4 addi sp, sp, 16 ++#define POPARGS_5 addi sp, sp, 16 ++#define POPARGS_6 addi sp, sp, 16 ++ ++#ifndef NARGS ++#define NARGS 3 /* If we were called with no wrapper, this is really socket() */ ++#endif ++ ++.globl __socket ++ENTRY (__socket) ++ /* Push args onto the stack. */ ++ P(PUSHARGS_,NARGS) ++ ++#if defined NEED_CANCELLATION && defined CENABLE ++ SINGLE_THREAD_P(r2) ++ bne r2,zero,2f ++#endif ++ ++ /* Do the system call trap. */ ++ movi r4, P(SOCKOP_,socket) ++ mov r5, sp ++ movi r2, SYS_ify(socketcall) ++ trap ++ ++ /* Pop args off the stack. */ ++ P(POPARGS_,NARGS) ++ ++ /* Check for errors. */ ++ bne r7,zero,SYSCALL_ERROR_LABEL ++ ++ ret ++#if defined NEED_CANCELLATION && defined CENABLE ++ ++2: subi sp, sp, 20 ++ stw ra, 0(sp) ++ stw r22, 4(sp) ++ ++ nextpc r22 ++1: movhi r2, %hiadj(_GLOBAL_OFFSET_TABLE_ - 1b) ++ addi r2, r2, %lo(_GLOBAL_OFFSET_TABLE_ - 1b) ++ add r22, r22, r2 ++ ++ CENABLE ++ callr r3 ++ stw r16, 8(sp) ++ ++ movi r4, P(SOCKOP_,socket) ++ addi r5, sp, 20 ++ movi r2, SYS_ify(socketcall) ++ trap ++ ++ stw r2, 12(sp) ++ stw r7, 16(sp) ++ ldw r4, 8(sp) ++ CDISABLE ++ callr r3 ++ ldw r7, 16(sp) ++ ldw r2, 12(sp) ++ ldw r22, 4(sp) ++ ldw ra, 0(sp) ++ addi sp, sp, 20 ++ ++ P(POPARGS_,NARGS) ++ ++ bne r7, zero, SYSCALL_ERROR_LABEL ++ ret ++#endif ++ ++PSEUDO_END (__socket) ++ ++#ifndef NO_WEAK_ALIAS ++weak_alias (__socket, socket) ++#endif +Index: glibc-2.5/sysdeps/unix/sysv/linux/nios2/sys/procfs.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/unix/sysv/linux/nios2/sys/procfs.h 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,123 @@ ++/* Copyright (C) 1996, 1997, 1999, 2001 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _SYS_PROCFS_H ++#define _SYS_PROCFS_H 1 ++ ++/* This is somewhat modelled after the file of the same name on SVR4 ++ systems. It provides a definition of the core file format for ELF ++ used on Linux. It doesn't have anything to do with the /proc file ++ system, even though Linux has one. ++ ++ Anyway, the whole purpose of this file is for GDB and GDB only. ++ Don't read too much into it. Don't use it for anything other than ++ GDB unless you know what you are doing. */ ++ ++#include <features.h> ++#include <sys/time.h> ++#include <sys/types.h> ++#include <sys/user.h> ++ ++__BEGIN_DECLS ++ ++/* Type for a general-purpose register. */ ++typedef unsigned long elf_greg_t; ++ ++/* And the whole bunch of them. We could have used `struct ++ user_regs' directly in the typedef, but tradition says that ++ the register set is an array, which does have some peculiar ++ semantics, so leave it that way. */ ++#define ELF_NGREG (sizeof (struct user_regs) / sizeof(elf_greg_t)) ++typedef elf_greg_t elf_gregset_t[ELF_NGREG]; ++ ++/* Register set for the floating-point registers. */ ++typedef struct user_fpregs elf_fpregset_t; ++ ++/* Signal info. */ ++struct elf_siginfo ++ { ++ int si_signo; /* Signal number. */ ++ int si_code; /* Extra code. */ ++ int si_errno; /* Errno. */ ++ }; ++ ++/* Definitions to generate Intel SVR4-like core files. These mostly ++ have the same names as the SVR4 types with "elf_" tacked on the ++ front to prevent clashes with Linux definitions, and the typedef ++ forms have been avoided. This is mostly like the SVR4 structure, ++ but more Linuxy, with things that Linux does not support and which ++ GDB doesn't really use excluded. */ ++ ++struct elf_prstatus ++ { ++ struct elf_siginfo pr_info; /* Info associated with signal. */ ++ short int pr_cursig; /* Current signal. */ ++ unsigned long int pr_sigpend; /* Set of pending signals. */ ++ unsigned long int pr_sighold; /* Set of held signals. */ ++ __pid_t pr_pid; ++ __pid_t pr_ppid; ++ __pid_t pr_pgrp; ++ __pid_t pr_sid; ++ struct timeval pr_utime; /* User time. */ ++ struct timeval pr_stime; /* System time. */ ++ struct timeval pr_cutime; /* Cumulative user time. */ ++ struct timeval pr_cstime; /* Cumulative system time. */ ++ elf_gregset_t pr_reg; /* GP registers. */ ++ int pr_fpvalid; /* True if math copro being used. */ ++ }; ++ ++ ++#define ELF_PRARGSZ (80) /* Number of chars for args. */ ++ ++struct elf_prpsinfo ++ { ++ char pr_state; /* Numeric process state. */ ++ char pr_sname; /* Char for pr_state. */ ++ char pr_zomb; /* Zombie. */ ++ char pr_nice; /* Nice val. */ ++ unsigned long int pr_flag; /* Flags. */ ++ unsigned short int pr_uid; ++ unsigned short int pr_gid; ++ int pr_pid, pr_ppid, pr_pgrp, pr_sid; ++ /* Lots missing */ ++ char pr_fname[16]; /* Filename of executable. */ ++ char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ ++ }; ++ ++/* The rest of this file provides the types for emulation of the ++ Solaris <proc_service.h> interfaces that should be implemented by ++ users of libthread_db. */ ++ ++/* Addresses. */ ++typedef void *psaddr_t; ++ ++/* Register sets. Linux has different names. */ ++typedef elf_gregset_t prgregset_t; ++typedef elf_fpregset_t prfpregset_t; ++ ++/* We don't have any differences between processes and threads, ++ therefore have only one PID type. */ ++typedef __pid_t lwpid_t; ++ ++/* Process status and info. In the end we do provide typedefs for them. */ ++typedef struct elf_prstatus prstatus_t; ++typedef struct elf_prpsinfo prpsinfo_t; ++ ++__END_DECLS ++ ++#endif /* sys/procfs.h */ +Index: glibc-2.5/sysdeps/unix/sysv/linux/nios2/sys/user.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/unix/sysv/linux/nios2/sys/user.h 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,58 @@ ++/* Copyright (C) 1998, 1999, 2000, 2001 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _SYS_USER_H ++#define _SYS_USER_H 1 ++ ++/* The whole purpose of this file is for GDB and GDB only. Don't read ++ too much into it. Don't use it for anything other than GDB unless ++ you know what you are doing. */ ++ ++struct user_fpregs ++{ ++}; ++ ++struct user_regs ++{ ++ unsigned long int uregs[32]; ++}; ++ ++struct user ++{ ++ struct user_regs regs; /* General registers */ ++ int u_fpvalid; /* True if math co-processor being used. */ ++ ++ unsigned long int u_tsize; /* Text segment size (pages). */ ++ unsigned long int u_dsize; /* Data segment size (pages). */ ++ unsigned long int u_ssize; /* Stack segment size (pages). */ ++ ++ unsigned long start_code; /* Starting virtual address of text. */ ++ unsigned long start_stack; /* Starting virtual address of stack. */ ++ ++ long int signal; /* Signal that caused the core dump. */ ++ int reserved; /* No longer used */ ++ struct user_regs *u_ar0; /* help gdb to find the general registers. */ ++ ++ unsigned long magic; /* uniquely identify a core file */ ++ char u_comm[32]; /* User command that was responsible */ ++ int u_debugreg[8]; ++ struct user_fpregs u_fp; /* Floating point registers */ ++ struct user_fpregs *u_fp0; /* help gdb to find the FP registers. */ ++}; ++ ++#endif /* sys/user.h */ +Index: glibc-2.5/sysdeps/unix/sysv/linux/nios2/syscall.S +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/unix/sysv/linux/nios2/syscall.S 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,36 @@ ++/* Copyright (C) 2005, 2008 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#include <sysdep.h> ++ ++/* We don't need a special syscall to implement syscall(). It won't work ++ reliably with 64-bit arguments (but that is true on many modern platforms). ++*/ ++ ++ENTRY (syscall) ++ mov r2, r4 ++ mov r4, r5 ++ mov r5, r6 ++ mov r6, r7 ++ ldw r7, 0(sp) ++ ldw r8, 4(sp) ++ ldw r9, 8(sp) ++ trap ++ bne r7, zero, SYSCALL_ERROR_LABEL ++ ret ++PSEUDO_END (syscall) +Index: glibc-2.5/sysdeps/unix/sysv/linux/nios2/sysdep.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ glibc-2.5/sysdeps/unix/sysv/linux/nios2/sysdep.h 2010-05-31 08:56:05.000000000 +0200 +@@ -0,0 +1,219 @@ ++/* Copyright (C) 2000, 2002, 2003, 2004, 2005, 2008 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _LINUX_NIOS2_SYSDEP_H ++#define _LINUX_NIOS2_SYSDEP_H 1 ++ ++#include <sysdeps/unix/sysdep.h> ++ ++/* For Linux we can use the system call table in the header file ++ /usr/include/asm/unistd.h ++ of the kernel. But these symbols do not follow the SYS_* syntax ++ so we have to redefine the `SYS_ify' macro here. */ ++#undef SYS_ify ++#define SYS_ify(syscall_name) __NR_##syscall_name ++ ++#ifdef __ASSEMBLER__ ++ ++#define ASM_TYPE_DIRECTIVE(name,typearg) .type name,%##typearg; ++#define ASM_SIZE_DIRECTIVE(name) .size name,.-name ++ ++#define ENTRY(name) \ ++ ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(name); \ ++ ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),function) \ ++ C_LABEL(name) ++ ++#undef END ++#define END(name) \ ++ ASM_SIZE_DIRECTIVE(name) ++ ++#define SYSCALL_ERROR_LABEL __syscall_error ++ ++#undef PSEUDO ++#define PSEUDO(name, syscall_name, args) \ ++ ENTRY (name) \ ++ DO_CALL (syscall_name, args) \ ++ bne r7, zero, SYSCALL_ERROR_LABEL; \ ++ ++#undef PSEUDO_END ++#define PSEUDO_END(name) \ ++ SYSCALL_ERROR_HANDLER \ ++ END (name) ++ ++#undef PSEUDO_NOERRNO ++#define PSEUDO_NOERRNO(name, syscall_name, args) \ ++ ENTRY (name) \ ++ DO_CALL (syscall_name, args) ++ ++#undef PSEUDO_END_NOERRNO ++#define PSEUDO_END_NOERRNO(name) \ ++ END (name) ++ ++#undef ret_NOERRNO ++#define ret_NOERRNO ret ++ ++#undef DO_CALL ++#define DO_CALL(syscall_name, args) \ ++ DOARGS_##args \ ++ movi r2, SYS_ify(syscall_name); \ ++ trap; ++ ++#if defined(__PIC__) || defined(PIC) ++ ++#define SYSCALL_ERROR_HANDLER \ ++SYSCALL_ERROR_LABEL: \ ++ subi sp, sp, 12; \ ++ stw r22, 8(sp); \ ++ stw r2, 4(sp); \ ++ stw ra, 0(sp); \ ++ nextpc r22; \ ++1: movhi r8, %hiadj(_GLOBAL_OFFSET_TABLE_ - 1b); \ ++ addi r8, r8, %lo(_GLOBAL_OFFSET_TABLE_ - 1b); \ ++ add r22, r22, r8; \ ++ ldw r3, %call(__errno_location)(r22); \ ++ callr r3; \ ++ ldw ra, 0(sp); \ ++ ldw r10, 4(sp); \ ++ ldw r22, 8(sp); \ ++ addi sp, sp, 12; \ ++ stw r10, 0(r2); \ ++ movi r2, -1; \ ++ ret; ++ ++#else ++ ++#define SYSCALL_ERROR_HANDLER \ ++SYSCALL_ERROR_LABEL: \ ++ subi sp, sp, 8; \ ++ stw r2, 4(sp); \ ++ stw ra, 0(sp); \ ++ call __errno_location; \ ++ ldw ra, 0(sp); \ ++ ldw r10, 4(sp); \ ++ addi sp, sp, 8; \ ++ stw r10, 0(r2); \ ++ movi r2, -1; \ ++ ret; ++ ++#endif ++ ++#define DOARGS_0 /* nothing */ ++#define DOARGS_1 /* nothing */ ++#define DOARGS_2 /* nothing */ ++#define DOARGS_3 /* nothing */ ++#define DOARGS_4 /* nothing */ ++#define DOARGS_5 ldw r8, 0(sp); ++#define DOARGS_6 ldw r9, 4(sp); ldw r8, 0(sp); ++ ++/* The function has to return the error code. */ ++#undef PSEUDO_ERRVAL ++#define PSEUDO_ERRVAL(name, syscall_name, args) \ ++ ENTRY (name) \ ++ DO_CALL (syscall_name, args) ++ ++#undef PSEUDO_END_ERRVAL ++#define PSEUDO_END_ERRVAL(name) \ ++ END (name) ++ ++#define ret_ERRVAL ret ++ ++#else /* __ASSEMBLER__ */ ++ ++#include <asm/unistd.h> ++ ++/* Define a macro which expands into the inline wrapper code for a system ++ call. */ ++#undef INLINE_SYSCALL ++#define INLINE_SYSCALL(name, nr, args...) \ ++ ({ INTERNAL_SYSCALL_DECL(err); \ ++ unsigned int result_var = INTERNAL_SYSCALL (name, err, nr, args); \ ++ if ( INTERNAL_SYSCALL_ERROR_P (result_var, err) ) \ ++ { \ ++ __set_errno (INTERNAL_SYSCALL_ERRNO (result_var, err)); \ ++ result_var = -1L; \ ++ } \ ++ (int) result_var; }) ++ ++#undef INTERNAL_SYSCALL_DECL ++#define INTERNAL_SYSCALL_DECL(err) unsigned int err ++ ++#undef INTERNAL_SYSCALL_ERROR_P ++#define INTERNAL_SYSCALL_ERROR_P(val, err) ((unsigned int) (err)) ++ ++#undef INTERNAL_SYSCALL_ERRNO ++#define INTERNAL_SYSCALL_ERRNO(val, err) (val) ++ ++#undef INTERNAL_SYSCALL_RAW ++#define INTERNAL_SYSCALL_RAW(name, err, nr, args...) \ ++ ({ unsigned int _sys_result; \ ++ { \ ++ register int _r2 asm ("r2") = (int)(name); \ ++ register int _err asm ("r7"); \ ++ LOAD_ARGS_##nr (args) \ ++ asm volatile ("trap" \ ++ : "=r" (_r2), "=r" (_err) \ ++ : ASM_ARGS_##nr \ ++ : __SYSCALL_CLOBBERS); \ ++ _sys_result = _r2; \ ++ err = _err; \ ++ } \ ++ (int) _sys_result; }) ++ ++#undef INTERNAL_SYSCALL ++#define INTERNAL_SYSCALL(name, err, nr, args...) \ ++ INTERNAL_SYSCALL_RAW(SYS_ify(name), err, nr, args) ++ ++#undef INTERNAL_SYSCALL_NCS ++#define INTERNAL_SYSCALL_NCS(number, err, nr, args...) \ ++ INTERNAL_SYSCALL_RAW(number, err, nr, args) ++ ++#define LOAD_ARGS_0() ++#define ASM_ARGS_0 "r" (_r2) ++#define LOAD_ARGS_1(a1) \ ++ register int _r4 asm ("r4") = (int) (a1); \ ++ LOAD_ARGS_0 () ++#define ASM_ARGS_1 ASM_ARGS_0, "r" (_r4) ++#define LOAD_ARGS_2(a1, a2) \ ++ register int _r5 asm ("r5") = (int) (a2); \ ++ LOAD_ARGS_1 (a1) ++#define ASM_ARGS_2 ASM_ARGS_1, "r" (_r5) ++#define LOAD_ARGS_3(a1, a2, a3) \ ++ register int _r6 asm ("r6") = (int) (a3); \ ++ LOAD_ARGS_2 (a1, a2) ++#define ASM_ARGS_3 ASM_ARGS_2, "r" (_r6) ++#define LOAD_ARGS_4(a1, a2, a3, a4) \ ++ register int _r7 asm ("r7") = (int) (a4); \ ++ LOAD_ARGS_3 (a1, a2, a3) ++#define ASM_ARGS_4 ASM_ARGS_3, "r" (_r7) ++#define LOAD_ARGS_5(a1, a2, a3, a4, a5) \ ++ register int _r8 asm ("r8") = (int) (a5); \ ++ LOAD_ARGS_4 (a1, a2, a3, a4) ++#define ASM_ARGS_5 ASM_ARGS_4, "r" (_r8) ++#define LOAD_ARGS_6(a1, a2, a3, a4, a5, a6) \ ++ register int _r9 asm ("r9") = (int) (a6); \ ++ LOAD_ARGS_5 (a1, a2, a3, a4, a5) ++#define ASM_ARGS_6 ASM_ARGS_5, "r" (_r9) ++ ++ ++#define __SYSCALL_CLOBBERS "r1", "r3", "r10", "r11", "r12", "r13", "r14", \ ++ "r15", "r29", "memory" ++ ++#endif /* __ASSEMBLER__ */ ++ ++#endif /* linux/nios2/sysdep.h */ diff --git a/recipes/glibc/glibc_2.5.bb b/recipes/glibc/glibc_2.5.bb index 06b813d895..94b5114060 100644 --- a/recipes/glibc/glibc_2.5.bb +++ b/recipes/glibc/glibc_2.5.bb @@ -70,6 +70,15 @@ SRC_URI_append_powerpc = " file://ppc-sfp-machine.patch \ file://powerpc-sqrt-hack.diff \ file://glibc-2.5-soft-fp-separate-strong-alias.patch" +FILESPATHPKG_nios2 = "glibc-2.5:glibc-2.4:files:" + +SRC_URI_append_nios2 = " \ + file://sysdeps-nios2.patch \ + file://nios2-elf.patch \ + file://nios2-iconv.patch \ + file://nios2-ld-collate.patch \ +" + S = "${WORKDIR}/glibc-${PV}" B = "${WORKDIR}/build-${TARGET_SYS}" diff --git a/recipes/linux-libc-headers/linux-libc-headers_2.6.34.bb b/recipes/linux-libc-headers/linux-libc-headers_2.6.34.bb new file mode 100644 index 0000000000..093a10b72f --- /dev/null +++ b/recipes/linux-libc-headers/linux-libc-headers_2.6.34.bb @@ -0,0 +1,35 @@ +require linux-libc-headers.inc + +# untested for non nios2 systems +DEFAULT_PREFERENCE = "-1" +DEFAULT_PREFERENCE_nios2 = "1" +INHIBIT_DEFAULT_DEPS = "1" +DEPENDS += "unifdef-native" +PR = "r1" + +SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \ + " + +# For nios2 the source comes from sopc.et.ntust.edu.tw, but as this one is very slow +# a tarball is placed at opensource.axon.tv +#SRC_URI_nios2 = "git://sopc.et.ntust.edu.tw/git/linux-2.6.git;branch=nios2mmu;protocol=http;tag=a32ca88c4f3f3850c5c9789db2afab2530c6856d;protocol=http \ +SRC_URI_nios2 = "ftp://opensource.axon.nl/mirror/git_sopc.et.ntust.edu.tw.linux-2.6.git_a32ca88c4f3f3850c5c9789db2afab2530c6856d.tar.gz;name=nios2tarball \ + " + +# nios2 checksums +SRC_URI[nios2tarball.md5sum] = "ad27c6ddfe5b2bb0f81968c0155d072d" +SRC_URI[nios2tarball.sha256sum] = "7c99c5ee4bf26d08fde030c605c618454984dba5ae79c298064228ab0053e60f" + +S = "${WORKDIR}/linux-2.6" + +do_configure() { + cd ${S} + oe_runmake allnoconfig ARCH=$ARCH +} + +do_compile () { +} + +do_install() { + oe_runmake headers_install INSTALL_HDR_PATH=${D}${exec_prefix} ARCH=$ARCH +} diff --git a/recipes/linux/linux-nios2-2.6.34/defconfig b/recipes/linux/linux-nios2-2.6.34/defconfig new file mode 100644 index 0000000000..3dc160e756 --- /dev/null +++ b/recipes/linux/linux-nios2-2.6.34/defconfig @@ -0,0 +1,589 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.34 +# Tue Jul 6 14:43:52 2010 +# + +# +# NiosII Configuration +# + +# +# NiosII board configuration +# +# CONFIG_3C120 is not set +CONFIG_NEEK=y +# CONFIG_NIOS2_CUSTOM_FPGA is not set +CONFIG_NIOS2_NEEK_OCM=y + +# +# NiosII specific compiler options +# +CONFIG_NIOS2_HW_MUL_SUPPORT=y +# CONFIG_NIOS2_HW_MULX_SUPPORT is not set +# CONFIG_NIOS2_HW_DIV_SUPPORT is not set +# CONFIG_OF is not set +CONFIG_NIOS2_UIMAGE_FLASHADDR=0x1C80000 +CONFIG_RAMKERNEL=y +CONFIG_CMDLINE="init=/bin/sh rootfstype=jffs2 root=/dev/mtdblock0 mtdparts=pyhsmap-flash.0:16M(root)" +# CONFIG_PASS_CMDLINE is not set +CONFIG_BOOT_LINK_OFFSET=0x00500000 +# CONFIG_AVALON_DMA is not set + +# +# Additional NiosII Device Drivers +# +# CONFIG_PCI_ALTPCI is not set +# CONFIG_ALTERA_REMOTE_UPDATE is not set +# CONFIG_PIO_DEVICES is not set +# CONFIG_NIOS2_GPIO is not set +# CONFIG_ALTERA_PIO_GPIO is not set +CONFIG_NIOS2=y +CONFIG_MMU=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +CONFIG_UID16=y +CONFIG_GENERIC_CSUM=y +CONFIG_GENERIC_FIND_NEXT_BIT=y +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_NO_IOPORT=y +CONFIG_ZONE_DMA=y +CONFIG_BINFMT_ELF=y +# CONFIG_NOT_COHERENT_CACHE is not set +CONFIG_HZ=100 +# CONFIG_TRACE_IRQFLAGS_SUPPORT is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +CONFIG_PAGEFLAGS_EXTENDED=y +CONFIG_SPLIT_PTLOCK_CPUS=4 +# CONFIG_PHYS_ADDR_T_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +# CONFIG_KSM is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 +CONFIG_PREEMPT_NONE=y +# CONFIG_PREEMPT_VOLUNTARY is not set +# CONFIG_PREEMPT is not set +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_CONSTRUCTORS=y + +# +# General setup +# +# CONFIG_EXPERIMENTAL is not set +CONFIG_BROKEN_ON_SMP=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_LOCALVERSION="" +CONFIG_LOCALVERSION_AUTO=y +# CONFIG_SWAP is not set +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +CONFIG_BSD_PROCESS_ACCT=y +# CONFIG_BSD_PROCESS_ACCT_V3 is not set + +# +# RCU Subsystem +# +CONFIG_TREE_RCU=y +# CONFIG_TREE_PREEMPT_RCU is not set +# CONFIG_TINY_RCU is not set +# CONFIG_RCU_TRACE is not set +CONFIG_RCU_FANOUT=32 +# CONFIG_RCU_FANOUT_EXACT is not set +# CONFIG_TREE_RCU_TRACE is not set +# CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_SYSFS_DEPRECATED_V2 is not set +# CONFIG_RELAY is not set +# CONFIG_NAMESPACES is not set +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="" +CONFIG_RD_GZIP=y +# CONFIG_RD_BZIP2 is not set +# CONFIG_RD_LZMA is not set +# CONFIG_RD_LZO is not set +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +CONFIG_SYSCTL=y +CONFIG_ANON_INODES=y +CONFIG_EMBEDDED=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +# CONFIG_ELF_CORE is not set +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +# CONFIG_EPOLL is not set +# CONFIG_SIGNALFD is not set +# CONFIG_TIMERFD is not set +# CONFIG_EVENTFD is not set +# CONFIG_SHMEM is not set +CONFIG_AIO=y + +# +# Kernel Performance Events And Counters +# +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_COMPAT_BRK=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +# CONFIG_PROFILING is not set + +# +# GCOV-based kernel profiling +# +# CONFIG_SLOW_WORK is not set +# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +# CONFIG_MODULE_FORCE_LOAD is not set +CONFIG_MODULE_UNLOAD=y +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_BLOCK=y +CONFIG_LBDAF=y +CONFIG_BLK_DEV_BSG=y +# CONFIG_BLK_DEV_INTEGRITY is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y +# CONFIG_DEFAULT_DEADLINE is not set +CONFIG_DEFAULT_CFQ=y +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="cfq" +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK_BH is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +# CONFIG_MUTEX_SPIN_ON_OWNER is not set +# CONFIG_FREEZER is not set +# CONFIG_NET is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +# CONFIG_FW_LOADER is not set +# CONFIG_SYS_HYPERVISOR is not set +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_TESTS is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +CONFIG_MTD_CMDLINE_PARTS=y +# CONFIG_MTD_AR7_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set +# CONFIG_MTD_OOPS is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_CFI_STAA is not set +CONFIG_MTD_CFI_UTIL=y +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +CONFIG_MTD_PHYSMAP=y +# CONFIG_MTD_PHYSMAP_COMPAT is not set +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_ONENAND is not set + +# +# LPDDR flash memory drivers +# +# CONFIG_MTD_LPDDR is not set + +# +# UBI - Unsorted block images +# +# CONFIG_MTD_UBI is not set +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_COW_COMMON is not set +# CONFIG_BLK_DEV_LOOP is not set + +# +# DRBD disabled because PROC_FS, INET or CONNECTOR not selected +# +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_MISC_DEVICES is not set + +# +# SCSI device support +# +CONFIG_SCSI_MOD=y +# CONFIG_RAID_ATTRS is not set +# CONFIG_SCSI is not set +# CONFIG_SCSI_DMA is not set +# CONFIG_SCSI_NETLINK is not set +# CONFIG_ATA is not set +# CONFIG_MD is not set +# CONFIG_PHONE is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set +# CONFIG_INPUT_SPARSEKMAP is not set + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_PSAUX=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=y +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_OPENCORES is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +# CONFIG_INPUT_MISC is not set + +# +# Hardware I/O ports +# +CONFIG_SERIO=y +# CONFIG_SERIO_I8042 is not set +# CONFIG_SERIO_SERPORT is not set +CONFIG_SERIO_LIBPS2=y +# CONFIG_SERIO_RAW is not set +# CONFIG_SERIO_ALTERA_PS2 is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +# CONFIG_VT is not set +# CONFIG_DEVKMEM is not set +# CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_NIOS_LCD_16207 is not set +# CONFIG_NIOS_BUTTON is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_TIMBERDALE is not set +CONFIG_SERIAL_ALTERA_JTAGUART=y +CONFIG_SERIAL_ALTERA_JTAGUART_CONSOLE=y +CONFIG_SERIAL_ALTERA_JTAGUART_CONSOLE_BYPASS=y +CONFIG_SERIAL_ALTERA_UART=y +CONFIG_SERIAL_ALTERA_UART_MAXPORTS=4 +CONFIG_SERIAL_ALTERA_UART_BAUDRATE=115200 +# CONFIG_SERIAL_ALTERA_UART_CONSOLE is not set +CONFIG_UNIX98_PTYS=y +# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=256 +# CONFIG_IPMI_HANDLER is not set +# CONFIG_HW_RANDOM is not set +# CONFIG_RTC is not set +# CONFIG_GEN_RTC is not set +# CONFIG_R3964 is not set + +# +# PCMCIA character devices +# +# CONFIG_RAW_DRIVER is not set +# CONFIG_I2C is not set +# CONFIG_SPI is not set + +# +# PPS support +# +# CONFIG_W1 is not set +# CONFIG_POWER_SUPPLY is not set +# CONFIG_HWMON is not set +# CONFIG_THERMAL is not set +# CONFIG_WATCHDOG is not set +CONFIG_SSB_POSSIBLE=y + +# +# Sonics Silicon Backplane +# +# CONFIG_SSB is not set + +# +# Multifunction device drivers +# +# CONFIG_MFD_CORE is not set +# CONFIG_MFD_SM501 is not set +# CONFIG_HTC_PASIC3 is not set +# CONFIG_MFD_TMIO is not set +# CONFIG_REGULATOR is not set +# CONFIG_MEDIA_SUPPORT is not set + +# +# Graphics support +# +# CONFIG_VGASTATE is not set +# CONFIG_VIDEO_OUTPUT_CONTROL is not set +# CONFIG_FB is not set +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set +# CONFIG_SOUND is not set +# CONFIG_HID_SUPPORT is not set +# CONFIG_USB_SUPPORT is not set +CONFIG_USB_ARCH_HAS_HCD=y +# CONFIG_MMC is not set +# CONFIG_MEMSTICK is not set +# CONFIG_NEW_LEDS is not set +# CONFIG_ACCESSIBILITY is not set +# CONFIG_RTC_CLASS is not set +# CONFIG_DMADEVICES is not set +# CONFIG_AUXDISPLAY is not set +# CONFIG_UIO is not set + +# +# TI VLYNQ +# +# CONFIG_STAGING is not set + +# +# File systems +# +# CONFIG_EXT2_FS is not set +# CONFIG_EXT3_FS is not set +# CONFIG_EXT4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_XFS_FS is not set +CONFIG_FILE_LOCKING=y +CONFIG_FSNOTIFY=y +CONFIG_DNOTIFY=y +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_FUSE_FS is not set + +# +# Caches +# +# CONFIG_FSCACHE is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +# CONFIG_MSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +# CONFIG_PROC_KCORE is not set +CONFIG_PROC_SYSCTL=y +CONFIG_PROC_PAGE_MONITOR=y +CONFIG_SYSFS=y +# CONFIG_HUGETLB_PAGE is not set +# CONFIG_CONFIGFS_FS is not set +CONFIG_MISC_FILESYSTEMS=y +# CONFIG_HFSPLUS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_FS_WBUF_VERIFY is not set +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set +CONFIG_JFFS2_ZLIB=y +# CONFIG_JFFS2_LZO is not set +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +# CONFIG_CRAMFS is not set +# CONFIG_SQUASHFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_OMFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_ROMFS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_NLS is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +# CONFIG_ENABLE_WARN_DEPRECATED is not set +CONFIG_ENABLE_MUST_CHECK=y +CONFIG_FRAME_WARN=1024 +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_STRIP_ASM_SYMS is not set +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +# CONFIG_DEBUG_KERNEL is not set +# CONFIG_DEBUG_MEMORY_INIT is not set +# CONFIG_RCU_CPU_STALL_DETECTOR is not set +CONFIG_SYSCTL_SYSCALL_CHECK=y +# CONFIG_SAMPLES is not set +CONFIG_EARLY_PRINTK=y + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +# CONFIG_SECURITYFS is not set +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_SMACK is not set +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY="" +# CONFIG_CRYPTO is not set +# CONFIG_BINARY_PRINTF is not set + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_GENERIC_FIND_LAST_BIT=y +# CONFIG_CRC_CCITT is not set +# CONFIG_CRC16 is not set +# CONFIG_CRC_T10DIF is not set +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +# CONFIG_LIBCRC32C is not set +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_DECOMPRESS_GZIP=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_DMA=y diff --git a/recipes/linux/linux-nios2_2.6.34.bb b/recipes/linux/linux-nios2_2.6.34.bb new file mode 100644 index 0000000000..73448c97cb --- /dev/null +++ b/recipes/linux/linux-nios2_2.6.34.bb @@ -0,0 +1,35 @@ +require linux.inc + +PR = "r0" + +S = "${WORKDIR}/linux-2.6" + +# For nios2 the source comes from sopc.et.ntust.edu.tw, but as this one is very slow +# a tarball is placed at opensource.axon.tv +#SRC_URI_nios2 = "git://sopc.et.ntust.edu.tw/git/linux-2.6.git;branch=nios2mmu;protocol=http;tag=a32ca88c4f3f3850c5c9789db2afab2530c6856d;protocol=http \ +SRC_URI_nios2 = "ftp://opensource.axon.nl/mirror/git_sopc.et.ntust.edu.tw.linux-2.6.git_a32ca88c4f3f3850c5c9789db2afab2530c6856d.tar.gz;name=nios2tarball \ + file://defconfig \ + " + +# nios2 checksums +SRC_URI[nios2tarball.md5sum] = "ad27c6ddfe5b2bb0f81968c0155d072d" +SRC_URI[nios2tarball.sha256sum] = "7c99c5ee4bf26d08fde030c605c618454984dba5ae79c298064228ab0053e60f" + +KERNEL_IMAGETYPE = "zImage" + +do_configure() { + rm -f ${S}/.config + + if [ ! -e ${WORKDIR}/defconfig ]; then + die "No default configuration for ${MACHINE} available." + fi + + cp ${WORKDIR}/defconfig ${S}/.config + +# echo "CONFIG_INITRAMFS_SOURCE=\"${DEPLOY_DIR_IMAGE}/initramfs_root.cpio\"" >> ${S}/.config +# sed -e '/CONFIG_INITRAMFS_SOURCE/d' '${WORKDIR}/defconfig' >>'${S}/.config' + + + yes '' | oe_runmake oldconfig +} + diff --git a/recipes/tgt/tgt_1.0.6.bb b/recipes/tgt/tgt_1.0.6.bb index 6b835994bd..fd231e5bed 100644 --- a/recipes/tgt/tgt_1.0.6.bb +++ b/recipes/tgt/tgt_1.0.6.bb @@ -4,10 +4,10 @@ LICENSE = "GPLv2" DEPENDS = "openssl" RDEPENDS_${PN} = "iscsi-target" -PR = "r0" +PR = "r1" SRC_URI = "http://stgt.berlios.de/releases/tgt-${PV}.tar.gz" -SRC_URI[md5sum] = "200fb1b4e8d42b072de2bac238c7d779" -SRC_URI[sha256sum] = "b8cc9fdbacdcd9717b6c4bc15f7999a5bd4a20a334a09b47a3ae5ea21383eb1a" +SRC_URI[md5sum] = "a7e40b4f6854d25e4216c6dfde441a9c" +SRC_URI[sha256sum] = "3f29e4ebdc096a601a258fc56fc15bd673c6c614fcfbe17513c0ebbe2f38b798" EXTRA_OEMAKE += "ISCSI=1" |