| 1 | --- a/bfd/archures.c |
| 2 | +++ b/bfd/archures.c |
| 3 | @@ -368,6 +368,12 @@ DESCRIPTION |
| 4 | .#define bfd_mach_avr5 5 |
| 5 | .#define bfd_mach_avr51 51 |
| 6 | .#define bfd_mach_avr6 6 |
| 7 | +. bfd_arch_avr32, {* Atmel AVR32 *} |
| 8 | +.#define bfd_mach_avr32_ap 7000 |
| 9 | +.#define bfd_mach_avr32_uc 3000 |
| 10 | +.#define bfd_mach_avr32_ucr1 3001 |
| 11 | +.#define bfd_mach_avr32_ucr2 3002 |
| 12 | +.#define bfd_mach_avr32_ucr3 3003 |
| 13 | . bfd_arch_bfin, {* ADI Blackfin *} |
| 14 | .#define bfd_mach_bfin 1 |
| 15 | . bfd_arch_cr16, {* National Semiconductor CompactRISC (ie CR16). *} |
| 16 | @@ -465,6 +471,7 @@ extern const bfd_arch_info_type bfd_alph |
| 17 | extern const bfd_arch_info_type bfd_arc_arch; |
| 18 | extern const bfd_arch_info_type bfd_arm_arch; |
| 19 | extern const bfd_arch_info_type bfd_avr_arch; |
| 20 | +extern const bfd_arch_info_type bfd_avr32_arch; |
| 21 | extern const bfd_arch_info_type bfd_bfin_arch; |
| 22 | extern const bfd_arch_info_type bfd_cr16_arch; |
| 23 | extern const bfd_arch_info_type bfd_cr16c_arch; |
| 24 | @@ -541,6 +548,7 @@ static const bfd_arch_info_type * const |
| 25 | &bfd_arc_arch, |
| 26 | &bfd_arm_arch, |
| 27 | &bfd_avr_arch, |
| 28 | + &bfd_avr32_arch, |
| 29 | &bfd_bfin_arch, |
| 30 | &bfd_cr16_arch, |
| 31 | &bfd_cr16c_arch, |
| 32 | --- a/bfd/config.bfd |
| 33 | +++ b/bfd/config.bfd |
| 34 | @@ -347,6 +347,10 @@ case "${targ}" in |
| 35 | targ_underscore=yes |
| 36 | ;; |
| 37 | |
| 38 | + avr32-*-*) |
| 39 | + targ_defvec=bfd_elf32_avr32_vec |
| 40 | + ;; |
| 41 | + |
| 42 | c30-*-*aout* | tic30-*-*aout*) |
| 43 | targ_defvec=tic30_aout_vec |
| 44 | ;; |
| 45 | --- a/bfd/configure.in |
| 46 | +++ b/bfd/configure.in |
| 47 | @@ -675,6 +675,7 @@ do |
| 48 | bfd_pei_ia64_vec) tb="$tb pei-ia64.lo pepigen.lo cofflink.lo"; target_size=64 ;; |
| 49 | bfd_elf32_am33lin_vec) tb="$tb elf32-am33lin.lo elf32.lo $elf" ;; |
| 50 | bfd_elf32_avr_vec) tb="$tb elf32-avr.lo elf32.lo $elf" ;; |
| 51 | + bfd_elf32_avr32_vec) tb="$tb elf32-avr32.lo elf32.lo $elf" ;; |
| 52 | bfd_elf32_bfin_vec) tb="$tb elf32-bfin.lo elf32.lo $elf" ;; |
| 53 | bfd_elf32_bfinfdpic_vec) tb="$tb elf32-bfin.lo elf32.lo $elf" ;; |
| 54 | bfd_elf32_big_generic_vec) tb="$tb elf32-gen.lo elf32.lo $elf" ;; |
| 55 | --- /dev/null |
| 56 | +++ b/bfd/cpu-avr32.c |
| 57 | @@ -0,0 +1,52 @@ |
| 58 | +/* BFD library support routines for AVR32. |
| 59 | + Copyright 2003,2004,2005,2006,2007,2008,2009 Atmel Corporation. |
| 60 | + |
| 61 | + Written by Haavard Skinnemoen, Atmel Norway, <hskinnemoen@atmel.com> |
| 62 | + |
| 63 | + This is part of BFD, the Binary File Descriptor library. |
| 64 | + |
| 65 | + This program is free software; you can redistribute it and/or modify |
| 66 | + it under the terms of the GNU General Public License as published by |
| 67 | + the Free Software Foundation; either version 2 of the License, or |
| 68 | + (at your option) any later version. |
| 69 | + |
| 70 | + This program is distributed in the hope that it will be useful, |
| 71 | + but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 72 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 73 | + GNU General Public License for more details. |
| 74 | + |
| 75 | + You should have received a copy of the GNU General Public License |
| 76 | + along with this program; if not, write to the Free Software |
| 77 | + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ |
| 78 | + |
| 79 | +#include "bfd.h" |
| 80 | +#include "sysdep.h" |
| 81 | +#include "libbfd.h" |
| 82 | + |
| 83 | +#define N(machine, print, default, next) \ |
| 84 | + { \ |
| 85 | + 32, /* 32 bits in a word */ \ |
| 86 | + 32, /* 32 bits in an address */ \ |
| 87 | + 8, /* 8 bits in a byte */ \ |
| 88 | + bfd_arch_avr32, /* architecture */ \ |
| 89 | + machine, /* machine */ \ |
| 90 | + "avr32", /* arch name */ \ |
| 91 | + print, /* printable name */ \ |
| 92 | + 1, /* section align power */ \ |
| 93 | + default, /* the default machine? */ \ |
| 94 | + bfd_default_compatible, \ |
| 95 | + bfd_default_scan, \ |
| 96 | + next, \ |
| 97 | + } |
| 98 | + |
| 99 | +static const bfd_arch_info_type cpu_info[] = |
| 100 | +{ |
| 101 | + N(bfd_mach_avr32_ap, "avr32:ap", FALSE, &cpu_info[1]), |
| 102 | + N(bfd_mach_avr32_uc, "avr32:uc", FALSE, &cpu_info[2]), |
| 103 | + N(bfd_mach_avr32_ucr1, "avr32:ucr1", FALSE, &cpu_info[3]), |
| 104 | + N(bfd_mach_avr32_ucr2, "avr32:ucr2", FALSE, &cpu_info[4]), |
| 105 | + N(bfd_mach_avr32_ucr3, "avr32:ucr3", FALSE, NULL), |
| 106 | +}; |
| 107 | + |
| 108 | +const bfd_arch_info_type bfd_avr32_arch = |
| 109 | + N(bfd_mach_avr32_ap, "avr32", TRUE, &cpu_info[0]); |
| 110 | --- /dev/null |
| 111 | +++ b/bfd/elf32-avr32.c |
| 112 | @@ -0,0 +1,3915 @@ |
| 113 | +/* AVR32-specific support for 32-bit ELF. |
| 114 | + Copyright 2003,2004,2005,2006,2007,2008,2009 Atmel Corporation. |
| 115 | + |
| 116 | + Written by Haavard Skinnemoen, Atmel Norway, <hskinnemoen@atmel.com> |
| 117 | + |
| 118 | + This file is part of BFD, the Binary File Descriptor library. |
| 119 | + |
| 120 | + This program is free software; you can redistribute it and/or modify |
| 121 | + it under the terms of the GNU General Public License as published by |
| 122 | + the Free Software Foundation; either version 2 of the License, or |
| 123 | + (at your option) any later version. |
| 124 | + |
| 125 | + This program is distributed in the hope that it will be useful, |
| 126 | + but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 127 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 128 | + GNU General Public License for more details. |
| 129 | + |
| 130 | + You should have received a copy of the GNU General Public License |
| 131 | + along with this program; if not, write to the Free Software |
| 132 | + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ |
| 133 | + |
| 134 | +#include "bfd.h" |
| 135 | +#include "sysdep.h" |
| 136 | +#include "bfdlink.h" |
| 137 | +#include "libbfd.h" |
| 138 | +#include "elf-bfd.h" |
| 139 | +#include "elf/avr32.h" |
| 140 | +#include "elf32-avr32.h" |
| 141 | + |
| 142 | +#define xDEBUG |
| 143 | +#define xRELAX_DEBUG |
| 144 | + |
| 145 | +#ifdef DEBUG |
| 146 | +# define pr_debug(fmt, args...) fprintf(stderr, fmt, ##args) |
| 147 | +#else |
| 148 | +# define pr_debug(fmt, args...) do { } while (0) |
| 149 | +#endif |
| 150 | + |
| 151 | +#ifdef RELAX_DEBUG |
| 152 | +# define RDBG(fmt, args...) fprintf(stderr, fmt, ##args) |
| 153 | +#else |
| 154 | +# define RDBG(fmt, args...) do { } while (0) |
| 155 | +#endif |
| 156 | + |
| 157 | +/* When things go wrong, we want it to blow up, damnit! */ |
| 158 | +#undef BFD_ASSERT |
| 159 | +#undef abort |
| 160 | +#define BFD_ASSERT(expr) \ |
| 161 | + do \ |
| 162 | + { \ |
| 163 | + if (!(expr)) \ |
| 164 | + { \ |
| 165 | + bfd_assert(__FILE__, __LINE__); \ |
| 166 | + abort(); \ |
| 167 | + } \ |
| 168 | + } \ |
| 169 | + while (0) |
| 170 | + |
| 171 | +/* The name of the dynamic interpreter. This is put in the .interp section. */ |
| 172 | +#define ELF_DYNAMIC_INTERPRETER "/lib/ld.so.1" |
| 173 | + |
| 174 | +#define AVR32_GOT_HEADER_SIZE 8 |
| 175 | +#define AVR32_FUNCTION_STUB_SIZE 8 |
| 176 | + |
| 177 | +#define ELF_R_INFO(x, y) ELF32_R_INFO(x, y) |
| 178 | +#define ELF_R_TYPE(x) ELF32_R_TYPE(x) |
| 179 | +#define ELF_R_SYM(x) ELF32_R_SYM(x) |
| 180 | + |
| 181 | +#define NOP_OPCODE 0xd703 |
| 182 | + |
| 183 | + |
| 184 | +/* Mapping between BFD relocations and ELF relocations */ |
| 185 | + |
| 186 | +static reloc_howto_type * |
| 187 | +bfd_elf32_bfd_reloc_type_lookup(bfd *abfd, bfd_reloc_code_real_type code); |
| 188 | + |
| 189 | +static reloc_howto_type * |
| 190 | +bfd_elf32_bfd_reloc_name_lookup(bfd *abfd, const char *r_name); |
| 191 | + |
| 192 | +static void |
| 193 | +avr32_info_to_howto (bfd *abfd, arelent *cache_ptr, Elf_Internal_Rela *dst); |
| 194 | + |
| 195 | +/* Generic HOWTO */ |
| 196 | +#define GENH(name, align, size, bitsize, pcrel, bitpos, complain, mask) \ |
| 197 | + HOWTO(name, align, size, bitsize, pcrel, bitpos, \ |
| 198 | + complain_overflow_##complain, bfd_elf_generic_reloc, #name, \ |
| 199 | + FALSE, 0, mask, pcrel) |
| 200 | + |
| 201 | +static reloc_howto_type elf_avr32_howto_table[] = { |
| 202 | + /* NAME ALN SZ BSZ PCREL BP COMPLAIN MASK */ |
| 203 | + GENH(R_AVR32_NONE, 0, 0, 0, FALSE, 0, dont, 0x00000000), |
| 204 | + |
| 205 | + GENH(R_AVR32_32, 0, 2, 32, FALSE, 0, dont, 0xffffffff), |
| 206 | + GENH(R_AVR32_16, 0, 1, 16, FALSE, 0, bitfield, 0x0000ffff), |
| 207 | + GENH(R_AVR32_8, 0, 0, 8, FALSE, 0, bitfield, 0x000000ff), |
| 208 | + GENH(R_AVR32_32_PCREL, 0, 2, 32, TRUE, 0, signed, 0xffffffff), |
| 209 | + GENH(R_AVR32_16_PCREL, 0, 1, 16, TRUE, 0, signed, 0x0000ffff), |
| 210 | + GENH(R_AVR32_8_PCREL, 0, 0, 8, TRUE, 0, signed, 0x000000ff), |
| 211 | + |
| 212 | + /* Difference between two symbol (sym2 - sym1). The reloc encodes |
| 213 | + the value of sym1. The field contains the difference before any |
| 214 | + relaxing is done. */ |
| 215 | + GENH(R_AVR32_DIFF32, 0, 2, 32, FALSE, 0, dont, 0xffffffff), |
| 216 | + GENH(R_AVR32_DIFF16, 0, 1, 16, FALSE, 0, signed, 0x0000ffff), |
| 217 | + GENH(R_AVR32_DIFF8, 0, 0, 8, FALSE, 0, signed, 0x000000ff), |
| 218 | + |
| 219 | + GENH(R_AVR32_GOT32, 0, 2, 32, FALSE, 0, signed, 0xffffffff), |
| 220 | + GENH(R_AVR32_GOT16, 0, 1, 16, FALSE, 0, signed, 0x0000ffff), |
| 221 | + GENH(R_AVR32_GOT8, 0, 0, 8, FALSE, 0, signed, 0x000000ff), |
| 222 | + |
| 223 | + GENH(R_AVR32_21S, 0, 2, 21, FALSE, 0, signed, 0x1e10ffff), |
| 224 | + GENH(R_AVR32_16U, 0, 2, 16, FALSE, 0, unsigned, 0x0000ffff), |
| 225 | + GENH(R_AVR32_16S, 0, 2, 16, FALSE, 0, signed, 0x0000ffff), |
| 226 | + GENH(R_AVR32_8S, 0, 1, 8, FALSE, 4, signed, 0x00000ff0), |
| 227 | + GENH(R_AVR32_8S_EXT, 0, 2, 8, FALSE, 0, signed, 0x000000ff), |
| 228 | + |
| 229 | + GENH(R_AVR32_22H_PCREL, 1, 2, 21, TRUE, 0, signed, 0x1e10ffff), |
| 230 | + GENH(R_AVR32_18W_PCREL, 2, 2, 16, TRUE, 0, signed, 0x0000ffff), |
| 231 | + GENH(R_AVR32_16B_PCREL, 0, 2, 16, TRUE, 0, signed, 0x0000ffff), |
| 232 | + GENH(R_AVR32_16N_PCREL, 0, 2, 16, TRUE, 0, signed, 0x0000ffff), |
| 233 | + GENH(R_AVR32_14UW_PCREL, 2, 2, 12, TRUE, 0, unsigned, 0x0000f0ff), |
| 234 | + GENH(R_AVR32_11H_PCREL, 1, 1, 10, TRUE, 4, signed, 0x00000ff3), |
| 235 | + GENH(R_AVR32_10UW_PCREL, 2, 2, 8, TRUE, 0, unsigned, 0x000000ff), |
| 236 | + GENH(R_AVR32_9H_PCREL, 1, 1, 8, TRUE, 4, signed, 0x00000ff0), |
| 237 | + GENH(R_AVR32_9UW_PCREL, 2, 1, 7, TRUE, 4, unsigned, 0x000007f0), |
| 238 | + |
| 239 | + GENH(R_AVR32_HI16, 16, 2, 16, FALSE, 0, dont, 0x0000ffff), |
| 240 | + GENH(R_AVR32_LO16, 0, 2, 16, FALSE, 0, dont, 0x0000ffff), |
| 241 | + |
| 242 | + GENH(R_AVR32_GOTPC, 0, 2, 32, FALSE, 0, dont, 0xffffffff), |
| 243 | + GENH(R_AVR32_GOTCALL, 2, 2, 21, FALSE, 0, signed, 0x1e10ffff), |
| 244 | + GENH(R_AVR32_LDA_GOT, 2, 2, 21, FALSE, 0, signed, 0x1e10ffff), |
| 245 | + GENH(R_AVR32_GOT21S, 0, 2, 21, FALSE, 0, signed, 0x1e10ffff), |
| 246 | + GENH(R_AVR32_GOT18SW, 2, 2, 16, FALSE, 0, signed, 0x0000ffff), |
| 247 | + GENH(R_AVR32_GOT16S, 0, 2, 16, FALSE, 0, signed, 0x0000ffff), |
| 248 | + GENH(R_AVR32_GOT7UW, 2, 1, 5, FALSE, 4, unsigned, 0x000001f0), |
| 249 | + |
| 250 | + GENH(R_AVR32_32_CPENT, 0, 2, 32, FALSE, 0, dont, 0xffffffff), |
| 251 | + GENH(R_AVR32_CPCALL, 2, 2, 16, TRUE, 0, signed, 0x0000ffff), |
| 252 | + GENH(R_AVR32_16_CP, 0, 2, 16, TRUE, 0, signed, 0x0000ffff), |
| 253 | + GENH(R_AVR32_9W_CP, 2, 1, 7, TRUE, 4, unsigned, 0x000007f0), |
| 254 | + |
| 255 | + GENH(R_AVR32_RELATIVE, 0, 2, 32, FALSE, 0, signed, 0xffffffff), |
| 256 | + GENH(R_AVR32_GLOB_DAT, 0, 2, 32, FALSE, 0, dont, 0xffffffff), |
| 257 | + GENH(R_AVR32_JMP_SLOT, 0, 2, 32, FALSE, 0, dont, 0xffffffff), |
| 258 | + |
| 259 | + GENH(R_AVR32_ALIGN, 0, 1, 0, FALSE, 0, unsigned, 0x00000000), |
| 260 | + |
| 261 | + GENH(R_AVR32_15S, 2, 2, 15, FALSE, 0, signed, 0x00007fff), |
| 262 | +}; |
| 263 | + |
| 264 | +struct elf_reloc_map |
| 265 | +{ |
| 266 | + bfd_reloc_code_real_type bfd_reloc_val; |
| 267 | + unsigned char elf_reloc_val; |
| 268 | +}; |
| 269 | + |
| 270 | +static const struct elf_reloc_map avr32_reloc_map[] = |
| 271 | +{ |
| 272 | + { BFD_RELOC_NONE, R_AVR32_NONE }, |
| 273 | + |
| 274 | + { BFD_RELOC_32, R_AVR32_32 }, |
| 275 | + { BFD_RELOC_16, R_AVR32_16 }, |
| 276 | + { BFD_RELOC_8, R_AVR32_8 }, |
| 277 | + { BFD_RELOC_32_PCREL, R_AVR32_32_PCREL }, |
| 278 | + { BFD_RELOC_16_PCREL, R_AVR32_16_PCREL }, |
| 279 | + { BFD_RELOC_8_PCREL, R_AVR32_8_PCREL }, |
| 280 | + { BFD_RELOC_AVR32_DIFF32, R_AVR32_DIFF32 }, |
| 281 | + { BFD_RELOC_AVR32_DIFF16, R_AVR32_DIFF16 }, |
| 282 | + { BFD_RELOC_AVR32_DIFF8, R_AVR32_DIFF8 }, |
| 283 | + { BFD_RELOC_AVR32_GOT32, R_AVR32_GOT32 }, |
| 284 | + { BFD_RELOC_AVR32_GOT16, R_AVR32_GOT16 }, |
| 285 | + { BFD_RELOC_AVR32_GOT8, R_AVR32_GOT8 }, |
| 286 | + |
| 287 | + { BFD_RELOC_AVR32_21S, R_AVR32_21S }, |
| 288 | + { BFD_RELOC_AVR32_16U, R_AVR32_16U }, |
| 289 | + { BFD_RELOC_AVR32_16S, R_AVR32_16S }, |
| 290 | + { BFD_RELOC_AVR32_SUB5, R_AVR32_16S }, |
| 291 | + { BFD_RELOC_AVR32_8S_EXT, R_AVR32_8S_EXT }, |
| 292 | + { BFD_RELOC_AVR32_8S, R_AVR32_8S }, |
| 293 | + |
| 294 | + { BFD_RELOC_AVR32_22H_PCREL, R_AVR32_22H_PCREL }, |
| 295 | + { BFD_RELOC_AVR32_18W_PCREL, R_AVR32_18W_PCREL }, |
| 296 | + { BFD_RELOC_AVR32_16B_PCREL, R_AVR32_16B_PCREL }, |
| 297 | + { BFD_RELOC_AVR32_16N_PCREL, R_AVR32_16N_PCREL }, |
| 298 | + { BFD_RELOC_AVR32_11H_PCREL, R_AVR32_11H_PCREL }, |
| 299 | + { BFD_RELOC_AVR32_10UW_PCREL, R_AVR32_10UW_PCREL }, |
| 300 | + { BFD_RELOC_AVR32_9H_PCREL, R_AVR32_9H_PCREL }, |
| 301 | + { BFD_RELOC_AVR32_9UW_PCREL, R_AVR32_9UW_PCREL }, |
| 302 | + |
| 303 | + { BFD_RELOC_HI16, R_AVR32_HI16 }, |
| 304 | + { BFD_RELOC_LO16, R_AVR32_LO16 }, |
| 305 | + |
| 306 | + { BFD_RELOC_AVR32_GOTPC, R_AVR32_GOTPC }, |
| 307 | + { BFD_RELOC_AVR32_GOTCALL, R_AVR32_GOTCALL }, |
| 308 | + { BFD_RELOC_AVR32_LDA_GOT, R_AVR32_LDA_GOT }, |
| 309 | + { BFD_RELOC_AVR32_GOT21S, R_AVR32_GOT21S }, |
| 310 | + { BFD_RELOC_AVR32_GOT18SW, R_AVR32_GOT18SW }, |
| 311 | + { BFD_RELOC_AVR32_GOT16S, R_AVR32_GOT16S }, |
| 312 | + /* GOT7UW should never be generated by the assembler */ |
| 313 | + |
| 314 | + { BFD_RELOC_AVR32_32_CPENT, R_AVR32_32_CPENT }, |
| 315 | + { BFD_RELOC_AVR32_CPCALL, R_AVR32_CPCALL }, |
| 316 | + { BFD_RELOC_AVR32_16_CP, R_AVR32_16_CP }, |
| 317 | + { BFD_RELOC_AVR32_9W_CP, R_AVR32_9W_CP }, |
| 318 | + |
| 319 | + { BFD_RELOC_AVR32_ALIGN, R_AVR32_ALIGN }, |
| 320 | + |
| 321 | + { BFD_RELOC_AVR32_15S, R_AVR32_15S }, |
| 322 | +}; |
| 323 | + |
| 324 | +static reloc_howto_type * |
| 325 | +bfd_elf32_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, |
| 326 | + bfd_reloc_code_real_type code) |
| 327 | +{ |
| 328 | + unsigned int i; |
| 329 | + |
| 330 | + for (i = 0; i < sizeof(avr32_reloc_map) / sizeof(struct elf_reloc_map); i++) |
| 331 | + { |
| 332 | + if (avr32_reloc_map[i].bfd_reloc_val == code) |
| 333 | + return &elf_avr32_howto_table[avr32_reloc_map[i].elf_reloc_val]; |
| 334 | + } |
| 335 | + |
| 336 | + return NULL; |
| 337 | +} |
| 338 | + |
| 339 | +static reloc_howto_type * |
| 340 | +bfd_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, |
| 341 | + const char *r_name) |
| 342 | +{ |
| 343 | + unsigned int i; |
| 344 | + |
| 345 | + for (i = 0; |
| 346 | + i < sizeof (elf_avr32_howto_table) / sizeof (elf_avr32_howto_table[0]); |
| 347 | + i++) |
| 348 | + if (elf_avr32_howto_table[i].name != NULL |
| 349 | + && strcasecmp (elf_avr32_howto_table[i].name, r_name) == 0) |
| 350 | + return &elf_avr32_howto_table[i]; |
| 351 | + |
| 352 | + return NULL; |
| 353 | +} |
| 354 | + |
| 355 | +/* Set the howto pointer for an AVR32 ELF reloc. */ |
| 356 | +static void |
| 357 | +avr32_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED, |
| 358 | + arelent *cache_ptr, |
| 359 | + Elf_Internal_Rela *dst) |
| 360 | +{ |
| 361 | + unsigned int r_type; |
| 362 | + |
| 363 | + r_type = ELF32_R_TYPE (dst->r_info); |
| 364 | + BFD_ASSERT (r_type < (unsigned int) R_AVR32_max); |
| 365 | + cache_ptr->howto = &elf_avr32_howto_table[r_type]; |
| 366 | +} |
| 367 | + |
| 368 | + |
| 369 | +/* AVR32 ELF linker hash table and associated hash entries. */ |
| 370 | + |
| 371 | +static struct bfd_hash_entry * |
| 372 | +avr32_elf_link_hash_newfunc(struct bfd_hash_entry *entry, |
| 373 | + struct bfd_hash_table *table, |
| 374 | + const char *string); |
| 375 | +static void |
| 376 | +avr32_elf_copy_indirect_symbol(struct bfd_link_info *info, |
| 377 | + struct elf_link_hash_entry *dir, |
| 378 | + struct elf_link_hash_entry *ind); |
| 379 | +static struct bfd_link_hash_table * |
| 380 | +avr32_elf_link_hash_table_create(bfd *abfd); |
| 381 | + |
| 382 | +/* |
| 383 | + Try to limit memory usage to something reasonable when sorting the |
| 384 | + GOT. If just a couple of entries end up getting more references |
| 385 | + than this, it won't affect performance at all, but if there are many |
| 386 | + of them, we could end up with the wrong symbols being assigned the |
| 387 | + first GOT entries. |
| 388 | +*/ |
| 389 | +#define MAX_NR_GOT_HOLES 2048 |
| 390 | + |
| 391 | +/* |
| 392 | + AVR32 GOT entry. We need to keep track of refcounts and offsets |
| 393 | + simultaneously, since we need the offsets during relaxation, and we |
| 394 | + also want to be able to drop GOT entries during relaxation. In |
| 395 | + addition to this, we want to keep the list of GOT entries sorted so |
| 396 | + that we can keep the most-used entries at the lowest offsets. |
| 397 | +*/ |
| 398 | +struct got_entry |
| 399 | +{ |
| 400 | + struct got_entry *next; |
| 401 | + struct got_entry **pprev; |
| 402 | + int refcount; |
| 403 | + bfd_signed_vma offset; |
| 404 | +}; |
| 405 | + |
| 406 | +struct elf_avr32_link_hash_entry |
| 407 | +{ |
| 408 | + struct elf_link_hash_entry root; |
| 409 | + |
| 410 | + /* Number of runtime relocations against this symbol. */ |
| 411 | + unsigned int possibly_dynamic_relocs; |
| 412 | + |
| 413 | + /* If there are anything but R_AVR32_GOT18 relocations against this |
| 414 | + symbol, it means that someone may be taking the address of the |
| 415 | + function, and we should therefore not create a stub. */ |
| 416 | + bfd_boolean no_fn_stub; |
| 417 | + |
| 418 | + /* If there is a R_AVR32_32 relocation in a read-only section |
| 419 | + against this symbol, we could be in trouble. If we're linking a |
| 420 | + shared library or this symbol is defined in one, it means we must |
| 421 | + emit a run-time reloc for it and that's not allowed in read-only |
| 422 | + sections. */ |
| 423 | + asection *readonly_reloc_sec; |
| 424 | + bfd_vma readonly_reloc_offset; |
| 425 | + |
| 426 | + /* Record which frag (if any) contains the symbol. This is used |
| 427 | + during relaxation in order to avoid having to update all symbols |
| 428 | + whenever we move something. For local symbols, this information |
| 429 | + is in the local_sym_frag member of struct elf_obj_tdata. */ |
| 430 | + struct fragment *sym_frag; |
| 431 | +}; |
| 432 | +#define avr32_elf_hash_entry(ent) ((struct elf_avr32_link_hash_entry *)(ent)) |
| 433 | + |
| 434 | +struct elf_avr32_link_hash_table |
| 435 | +{ |
| 436 | + struct elf_link_hash_table root; |
| 437 | + |
| 438 | + /* Shortcuts to get to dynamic linker sections. */ |
| 439 | + asection *sgot; |
| 440 | + asection *srelgot; |
| 441 | + asection *sstub; |
| 442 | + |
| 443 | + /* We use a variation of Pigeonhole Sort to sort the GOT. After the |
| 444 | + initial refcounts have been determined, we initialize |
| 445 | + nr_got_holes to the highest refcount ever seen and allocate an |
| 446 | + array of nr_got_holes entries for got_hole. Each GOT entry is |
| 447 | + then stored in this array at the index given by its refcount. |
| 448 | + |
| 449 | + When a GOT entry has its refcount decremented during relaxation, |
| 450 | + it is moved to a lower index in the got_hole array. |
| 451 | + */ |
| 452 | + struct got_entry **got_hole; |
| 453 | + int nr_got_holes; |
| 454 | + |
| 455 | + /* Dynamic relocations to local symbols. Only used when linking a |
| 456 | + shared library and -Bsymbolic is not given. */ |
| 457 | + unsigned int local_dynamic_relocs; |
| 458 | + |
| 459 | + bfd_boolean relocations_analyzed; |
| 460 | + bfd_boolean symbols_adjusted; |
| 461 | + bfd_boolean repeat_pass; |
| 462 | + bfd_boolean direct_data_refs; |
| 463 | + unsigned int relax_iteration; |
| 464 | + unsigned int relax_pass; |
| 465 | +}; |
| 466 | +#define avr32_elf_hash_table(p) \ |
| 467 | + ((struct elf_avr32_link_hash_table *)((p)->hash)) |
| 468 | + |
| 469 | +static struct bfd_hash_entry * |
| 470 | +avr32_elf_link_hash_newfunc(struct bfd_hash_entry *entry, |
| 471 | + struct bfd_hash_table *table, |
| 472 | + const char *string) |
| 473 | +{ |
| 474 | + struct elf_avr32_link_hash_entry *ret = avr32_elf_hash_entry(entry); |
| 475 | + |
| 476 | + /* Allocate the structure if it hasn't already been allocated by a |
| 477 | + subclass */ |
| 478 | + if (ret == NULL) |
| 479 | + ret = (struct elf_avr32_link_hash_entry *) |
| 480 | + bfd_hash_allocate(table, sizeof(struct elf_avr32_link_hash_entry)); |
| 481 | + |
| 482 | + if (ret == NULL) |
| 483 | + return NULL; |
| 484 | + |
| 485 | + memset(ret, 0, sizeof(struct elf_avr32_link_hash_entry)); |
| 486 | + |
| 487 | + /* Give the superclass a chance */ |
| 488 | + ret = (struct elf_avr32_link_hash_entry *) |
| 489 | + _bfd_elf_link_hash_newfunc((struct bfd_hash_entry *)ret, table, string); |
| 490 | + |
| 491 | + return (struct bfd_hash_entry *)ret; |
| 492 | +} |
| 493 | + |
| 494 | +/* Copy data from an indirect symbol to its direct symbol, hiding the |
| 495 | + old indirect symbol. Process additional relocation information. |
| 496 | + Also called for weakdefs, in which case we just let |
| 497 | + _bfd_elf_link_hash_copy_indirect copy the flags for us. */ |
| 498 | + |
| 499 | +static void |
| 500 | +avr32_elf_copy_indirect_symbol(struct bfd_link_info *info, |
| 501 | + struct elf_link_hash_entry *dir, |
| 502 | + struct elf_link_hash_entry *ind) |
| 503 | +{ |
| 504 | + struct elf_avr32_link_hash_entry *edir, *eind; |
| 505 | + |
| 506 | + _bfd_elf_link_hash_copy_indirect (info, dir, ind); |
| 507 | + |
| 508 | + if (ind->root.type != bfd_link_hash_indirect) |
| 509 | + return; |
| 510 | + |
| 511 | + edir = (struct elf_avr32_link_hash_entry *)dir; |
| 512 | + eind = (struct elf_avr32_link_hash_entry *)ind; |
| 513 | + |
| 514 | + edir->possibly_dynamic_relocs += eind->possibly_dynamic_relocs; |
| 515 | + edir->no_fn_stub = edir->no_fn_stub || eind->no_fn_stub; |
| 516 | +} |
| 517 | + |
| 518 | +static struct bfd_link_hash_table * |
| 519 | +avr32_elf_link_hash_table_create(bfd *abfd) |
| 520 | +{ |
| 521 | + struct elf_avr32_link_hash_table *ret; |
| 522 | + |
| 523 | + ret = bfd_zmalloc(sizeof(*ret)); |
| 524 | + if (ret == NULL) |
| 525 | + return NULL; |
| 526 | + |
| 527 | + if (! _bfd_elf_link_hash_table_init(&ret->root, abfd, |
| 528 | + avr32_elf_link_hash_newfunc, |
| 529 | + sizeof (struct elf_avr32_link_hash_entry))) |
| 530 | + { |
| 531 | + free(ret); |
| 532 | + return NULL; |
| 533 | + } |
| 534 | + |
| 535 | + /* Prevent the BFD core from creating bogus got_entry pointers */ |
| 536 | + ret->root.init_got_refcount.glist = NULL; |
| 537 | + ret->root.init_plt_refcount.glist = NULL; |
| 538 | + ret->root.init_got_offset.glist = NULL; |
| 539 | + ret->root.init_plt_offset.glist = NULL; |
| 540 | + |
| 541 | + return &ret->root.root; |
| 542 | +} |
| 543 | + |
| 544 | + |
| 545 | +/* Initial analysis and creation of dynamic sections and symbols */ |
| 546 | + |
| 547 | +static asection * |
| 548 | +create_dynamic_section(bfd *dynobj, const char *name, flagword flags, |
| 549 | + unsigned int align_power); |
| 550 | +static struct elf_link_hash_entry * |
| 551 | +create_dynamic_symbol(bfd *dynobj, struct bfd_link_info *info, |
| 552 | + const char *name, asection *sec, |
| 553 | + bfd_vma offset); |
| 554 | +static bfd_boolean |
| 555 | +avr32_elf_create_got_section (bfd *dynobj, struct bfd_link_info *info); |
| 556 | +static bfd_boolean |
| 557 | +avr32_elf_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info); |
| 558 | +static bfd_boolean |
| 559 | +avr32_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, |
| 560 | + const Elf_Internal_Rela *relocs); |
| 561 | +static bfd_boolean |
| 562 | +avr32_elf_adjust_dynamic_symbol(struct bfd_link_info *info, |
| 563 | + struct elf_link_hash_entry *h); |
| 564 | + |
| 565 | +static asection * |
| 566 | +create_dynamic_section(bfd *dynobj, const char *name, flagword flags, |
| 567 | + unsigned int align_power) |
| 568 | +{ |
| 569 | + asection *sec; |
| 570 | + |
| 571 | + sec = bfd_make_section(dynobj, name); |
| 572 | + if (!sec |
| 573 | + || !bfd_set_section_flags(dynobj, sec, flags) |
| 574 | + || !bfd_set_section_alignment(dynobj, sec, align_power)) |
| 575 | + return NULL; |
| 576 | + |
| 577 | + return sec; |
| 578 | +} |
| 579 | + |
| 580 | +static struct elf_link_hash_entry * |
| 581 | +create_dynamic_symbol(bfd *dynobj, struct bfd_link_info *info, |
| 582 | + const char *name, asection *sec, |
| 583 | + bfd_vma offset) |
| 584 | +{ |
| 585 | + struct bfd_link_hash_entry *bh = NULL; |
| 586 | + struct elf_link_hash_entry *h; |
| 587 | + const struct elf_backend_data *bed = get_elf_backend_data (dynobj); |
| 588 | + |
| 589 | + if (!(_bfd_generic_link_add_one_symbol |
| 590 | + (info, dynobj, name, BSF_GLOBAL, sec, offset, NULL, FALSE, |
| 591 | + bed->collect, &bh))) |
| 592 | + return NULL; |
| 593 | + |
| 594 | + h = (struct elf_link_hash_entry *)bh; |
| 595 | + h->def_regular = 1; |
| 596 | + h->type = STT_OBJECT; |
| 597 | + h->other = STV_HIDDEN; |
| 598 | + |
| 599 | + return h; |
| 600 | +} |
| 601 | + |
| 602 | +static bfd_boolean |
| 603 | +avr32_elf_create_got_section (bfd *dynobj, struct bfd_link_info *info) |
| 604 | +{ |
| 605 | + struct elf_avr32_link_hash_table *htab; |
| 606 | + flagword flags; |
| 607 | + const struct elf_backend_data *bed = get_elf_backend_data (dynobj); |
| 608 | + |
| 609 | + htab = avr32_elf_hash_table(info); |
| 610 | + flags = bed->dynamic_sec_flags; |
| 611 | + |
| 612 | + if (htab->sgot) |
| 613 | + return TRUE; |
| 614 | + |
| 615 | + htab->sgot = create_dynamic_section(dynobj, ".got", flags, 2); |
| 616 | + if (!htab->srelgot) |
| 617 | + htab->srelgot = create_dynamic_section(dynobj, ".rela.got", |
| 618 | + flags | SEC_READONLY, 2); |
| 619 | + |
| 620 | + if (!htab->sgot || !htab->srelgot) |
| 621 | + return FALSE; |
| 622 | + |
| 623 | + htab->root.hgot = create_dynamic_symbol(dynobj, info, "_GLOBAL_OFFSET_TABLE_", |
| 624 | + htab->sgot, 0); |
| 625 | + if (!htab->root.hgot) |
| 626 | + return FALSE; |
| 627 | + |
| 628 | + /* Make room for the GOT header */ |
| 629 | + htab->sgot->size += bed->got_header_size; |
| 630 | + |
| 631 | + return TRUE; |
| 632 | +} |
| 633 | + |
| 634 | +/* (1) Create all dynamic (i.e. linker generated) sections that we may |
| 635 | + need during the link */ |
| 636 | + |
| 637 | +static bfd_boolean |
| 638 | +avr32_elf_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info) |
| 639 | +{ |
| 640 | + struct elf_avr32_link_hash_table *htab; |
| 641 | + flagword flags; |
| 642 | + const struct elf_backend_data *bed = get_elf_backend_data (dynobj); |
| 643 | + |
| 644 | + pr_debug("(1) create dynamic sections\n"); |
| 645 | + |
| 646 | + htab = avr32_elf_hash_table(info); |
| 647 | + flags = bed->dynamic_sec_flags; |
| 648 | + |
| 649 | + if (!avr32_elf_create_got_section (dynobj, info)) |
| 650 | + return FALSE; |
| 651 | + |
| 652 | + if (!htab->sstub) |
| 653 | + htab->sstub = create_dynamic_section(dynobj, ".stub", |
| 654 | + flags | SEC_READONLY | SEC_CODE, 2); |
| 655 | + |
| 656 | + if (!htab->sstub) |
| 657 | + return FALSE; |
| 658 | + |
| 659 | + return TRUE; |
| 660 | +} |
| 661 | + |
| 662 | +/* (2) Go through all the relocs and count any potential GOT- or |
| 663 | + PLT-references to each symbol */ |
| 664 | + |
| 665 | +static bfd_boolean |
| 666 | +avr32_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, |
| 667 | + const Elf_Internal_Rela *relocs) |
| 668 | +{ |
| 669 | + Elf_Internal_Shdr *symtab_hdr; |
| 670 | + struct elf_avr32_link_hash_table *htab; |
| 671 | + struct elf_link_hash_entry **sym_hashes; |
| 672 | + const Elf_Internal_Rela *rel, *rel_end; |
| 673 | + struct got_entry **local_got_ents; |
| 674 | + struct got_entry *got; |
| 675 | + const struct elf_backend_data *bed = get_elf_backend_data (abfd); |
| 676 | + asection *sgot; |
| 677 | + bfd *dynobj; |
| 678 | + |
| 679 | + pr_debug("(2) check relocs for %s:<%s> (size 0x%lx)\n", |
| 680 | + abfd->filename, sec->name, sec->size); |
| 681 | + |
| 682 | + if (info->relocatable) |
| 683 | + return TRUE; |
| 684 | + |
| 685 | + dynobj = elf_hash_table(info)->dynobj; |
| 686 | + symtab_hdr = &elf_tdata(abfd)->symtab_hdr; |
| 687 | + sym_hashes = elf_sym_hashes(abfd); |
| 688 | + htab = avr32_elf_hash_table(info); |
| 689 | + local_got_ents = elf_local_got_ents(abfd); |
| 690 | + sgot = htab->sgot; |
| 691 | + |
| 692 | + rel_end = relocs + sec->reloc_count; |
| 693 | + for (rel = relocs; rel < rel_end; rel++) |
| 694 | + { |
| 695 | + unsigned long r_symndx, r_type; |
| 696 | + struct elf_avr32_link_hash_entry *h; |
| 697 | + |
| 698 | + r_symndx = ELF32_R_SYM(rel->r_info); |
| 699 | + r_type = ELF32_R_TYPE(rel->r_info); |
| 700 | + |
| 701 | + /* Local symbols use local_got_ents, while others store the same |
| 702 | + information in the hash entry */ |
| 703 | + if (r_symndx < symtab_hdr->sh_info) |
| 704 | + { |
| 705 | + pr_debug(" (2a) processing local symbol %lu\n", r_symndx); |
| 706 | + h = NULL; |
| 707 | + } |
| 708 | + else |
| 709 | + { |
| 710 | + h = (struct elf_avr32_link_hash_entry *) |
| 711 | + sym_hashes[r_symndx - symtab_hdr->sh_info]; |
| 712 | + while (h->root.type == bfd_link_hash_indirect |
| 713 | + || h->root.type == bfd_link_hash_warning) |
| 714 | + h = (struct elf_avr32_link_hash_entry *)h->root.root.u.i.link; |
| 715 | + pr_debug(" (2a) processing symbol %s\n", h->root.root.root.string); |
| 716 | + } |
| 717 | + |
| 718 | + /* Some relocs require special sections to be created. */ |
| 719 | + switch (r_type) |
| 720 | + { |
| 721 | + case R_AVR32_GOT32: |
| 722 | + case R_AVR32_GOT16: |
| 723 | + case R_AVR32_GOT8: |
| 724 | + case R_AVR32_GOT21S: |
| 725 | + case R_AVR32_GOT18SW: |
| 726 | + case R_AVR32_GOT16S: |
| 727 | + case R_AVR32_GOT7UW: |
| 728 | + case R_AVR32_LDA_GOT: |
| 729 | + case R_AVR32_GOTCALL: |
| 730 | + if (rel->r_addend) |
| 731 | + { |
| 732 | + if (info->callbacks->reloc_dangerous |
| 733 | + (info, _("Non-zero addend on GOT-relative relocation"), |
| 734 | + abfd, sec, rel->r_offset) == FALSE) |
| 735 | + return FALSE; |
| 736 | + } |
| 737 | + /* fall through */ |
| 738 | + case R_AVR32_GOTPC: |
| 739 | + if (dynobj == NULL) |
| 740 | + elf_hash_table(info)->dynobj = dynobj = abfd; |
| 741 | + if (sgot == NULL && !avr32_elf_create_got_section(dynobj, info)) |
| 742 | + return FALSE; |
| 743 | + break; |
| 744 | + case R_AVR32_32: |
| 745 | + /* We may need to create .rela.dyn later on. */ |
| 746 | + if (dynobj == NULL |
| 747 | + && (info->shared || h != NULL) |
| 748 | + && (sec->flags & SEC_ALLOC)) |
| 749 | + elf_hash_table(info)->dynobj = dynobj = abfd; |
| 750 | + break; |
| 751 | + } |
| 752 | + |
| 753 | + if (h != NULL && r_type != R_AVR32_GOT18SW) |
| 754 | + h->no_fn_stub = TRUE; |
| 755 | + |
| 756 | + switch (r_type) |
| 757 | + { |
| 758 | + case R_AVR32_GOT32: |
| 759 | + case R_AVR32_GOT16: |
| 760 | + case R_AVR32_GOT8: |
| 761 | + case R_AVR32_GOT21S: |
| 762 | + case R_AVR32_GOT18SW: |
| 763 | + case R_AVR32_GOT16S: |
| 764 | + case R_AVR32_GOT7UW: |
| 765 | + case R_AVR32_LDA_GOT: |
| 766 | + case R_AVR32_GOTCALL: |
| 767 | + if (h != NULL) |
| 768 | + { |
| 769 | + got = h->root.got.glist; |
| 770 | + if (!got) |
| 771 | + { |
| 772 | + got = bfd_zalloc(abfd, sizeof(struct got_entry)); |
| 773 | + if (!got) |
| 774 | + return FALSE; |
| 775 | + h->root.got.glist = got; |
| 776 | + } |
| 777 | + } |
| 778 | + else |
| 779 | + { |
| 780 | + if (!local_got_ents) |
| 781 | + { |
| 782 | + bfd_size_type size; |
| 783 | + bfd_size_type i; |
| 784 | + struct got_entry *tmp_entry; |
| 785 | + |
| 786 | + size = symtab_hdr->sh_info; |
| 787 | + size *= sizeof(struct got_entry *) + sizeof(struct got_entry); |
| 788 | + local_got_ents = bfd_zalloc(abfd, size); |
| 789 | + if (!local_got_ents) |
| 790 | + return FALSE; |
| 791 | + |
| 792 | + elf_local_got_ents(abfd) = local_got_ents; |
| 793 | + |
| 794 | + tmp_entry = (struct got_entry *)(local_got_ents |
| 795 | + + symtab_hdr->sh_info); |
| 796 | + for (i = 0; i < symtab_hdr->sh_info; i++) |
| 797 | + local_got_ents[i] = &tmp_entry[i]; |
| 798 | + } |
| 799 | + |
| 800 | + got = local_got_ents[r_symndx]; |
| 801 | + } |
| 802 | + |
| 803 | + got->refcount++; |
| 804 | + if (got->refcount > htab->nr_got_holes) |
| 805 | + htab->nr_got_holes = got->refcount; |
| 806 | + break; |
| 807 | + |
| 808 | + case R_AVR32_32: |
| 809 | + if ((info->shared || h != NULL) |
| 810 | + && (sec->flags & SEC_ALLOC)) |
| 811 | + { |
| 812 | + if (htab->srelgot == NULL) |
| 813 | + { |
| 814 | + htab->srelgot = create_dynamic_section(dynobj, ".rela.got", |
| 815 | + bed->dynamic_sec_flags |
| 816 | + | SEC_READONLY, 2); |
| 817 | + if (htab->srelgot == NULL) |
| 818 | + return FALSE; |
| 819 | + } |
| 820 | + |
| 821 | + if (sec->flags & SEC_READONLY |
| 822 | + && !h->readonly_reloc_sec) |
| 823 | + { |
| 824 | + h->readonly_reloc_sec = sec; |
| 825 | + h->readonly_reloc_offset = rel->r_offset; |
| 826 | + } |
| 827 | + |
| 828 | + if (h != NULL) |
| 829 | + { |
| 830 | + pr_debug("Non-GOT reference to symbol %s\n", |
| 831 | + h->root.root.root.string); |
| 832 | + h->possibly_dynamic_relocs++; |
| 833 | + } |
| 834 | + else |
| 835 | + { |
| 836 | + pr_debug("Non-GOT reference to local symbol %lu\n", |
| 837 | + r_symndx); |
| 838 | + htab->local_dynamic_relocs++; |
| 839 | + } |
| 840 | + } |
| 841 | + |
| 842 | + break; |
| 843 | + |
| 844 | + /* TODO: GNU_VTINHERIT and GNU_VTENTRY */ |
| 845 | + } |
| 846 | + } |
| 847 | + |
| 848 | + return TRUE; |
| 849 | +} |
| 850 | + |
| 851 | +/* (3) Adjust a symbol defined by a dynamic object and referenced by a |
| 852 | + regular object. The current definition is in some section of the |
| 853 | + dynamic object, but we're not including those sections. We have to |
| 854 | + change the definition to something the rest of the link can |
| 855 | + understand. */ |
| 856 | + |
| 857 | +static bfd_boolean |
| 858 | +avr32_elf_adjust_dynamic_symbol(struct bfd_link_info *info, |
| 859 | + struct elf_link_hash_entry *h) |
| 860 | +{ |
| 861 | + struct elf_avr32_link_hash_table *htab; |
| 862 | + struct elf_avr32_link_hash_entry *havr; |
| 863 | + bfd *dynobj; |
| 864 | + |
| 865 | + pr_debug("(3) adjust dynamic symbol %s\n", h->root.root.string); |
| 866 | + |
| 867 | + htab = avr32_elf_hash_table(info); |
| 868 | + havr = (struct elf_avr32_link_hash_entry *)h; |
| 869 | + dynobj = elf_hash_table(info)->dynobj; |
| 870 | + |
| 871 | + /* Make sure we know what is going on here. */ |
| 872 | + BFD_ASSERT (dynobj != NULL |
| 873 | + && (h->u.weakdef != NULL |
| 874 | + || (h->def_dynamic |
| 875 | + && h->ref_regular |
| 876 | + && !h->def_regular))); |
| 877 | + |
| 878 | + /* We don't want dynamic relocations in read-only sections. */ |
| 879 | + if (havr->readonly_reloc_sec) |
| 880 | + { |
| 881 | + if (info->callbacks->reloc_dangerous |
| 882 | + (info, _("dynamic relocation in read-only section"), |
| 883 | + havr->readonly_reloc_sec->owner, havr->readonly_reloc_sec, |
| 884 | + havr->readonly_reloc_offset) == FALSE) |
| 885 | + return FALSE; |
| 886 | + } |
| 887 | + |
| 888 | + /* If this is a function, create a stub if possible and set the |
| 889 | + symbol to the stub location. */ |
| 890 | + if (0 && !havr->no_fn_stub) |
| 891 | + { |
| 892 | + if (!h->def_regular) |
| 893 | + { |
| 894 | + asection *s = htab->sstub; |
| 895 | + |
| 896 | + BFD_ASSERT(s != NULL); |
| 897 | + |
| 898 | + h->root.u.def.section = s; |
| 899 | + h->root.u.def.value = s->size; |
| 900 | + h->plt.offset = s->size; |
| 901 | + s->size += AVR32_FUNCTION_STUB_SIZE; |
| 902 | + |
| 903 | + return TRUE; |
| 904 | + } |
| 905 | + } |
| 906 | + else if (h->type == STT_FUNC) |
| 907 | + { |
| 908 | + /* This will set the entry for this symbol in the GOT to 0, and |
| 909 | + the dynamic linker will take care of this. */ |
| 910 | + h->root.u.def.value = 0; |
| 911 | + return TRUE; |
| 912 | + } |
| 913 | + |
| 914 | + /* If this is a weak symbol, and there is a real definition, the |
| 915 | + processor independent code will have arranged for us to see the |
| 916 | + real definition first, and we can just use the same value. */ |
| 917 | + if (h->u.weakdef != NULL) |
| 918 | + { |
| 919 | + BFD_ASSERT(h->u.weakdef->root.type == bfd_link_hash_defined |
| 920 | + || h->u.weakdef->root.type == bfd_link_hash_defweak); |
| 921 | + h->root.u.def.section = h->u.weakdef->root.u.def.section; |
| 922 | + h->root.u.def.value = h->u.weakdef->root.u.def.value; |
| 923 | + return TRUE; |
| 924 | + } |
| 925 | + |
| 926 | + /* This is a reference to a symbol defined by a dynamic object which |
| 927 | + is not a function. */ |
| 928 | + |
| 929 | + return TRUE; |
| 930 | +} |
| 931 | + |
| 932 | + |
| 933 | +/* Garbage-collection of unused sections */ |
| 934 | + |
| 935 | +static asection * |
| 936 | +avr32_elf_gc_mark_hook(asection *sec, |
| 937 | + struct bfd_link_info *info ATTRIBUTE_UNUSED, |
| 938 | + Elf_Internal_Rela *rel, |
| 939 | + struct elf_link_hash_entry *h, |
| 940 | + Elf_Internal_Sym *sym) |
| 941 | +{ |
| 942 | + if (h) |
| 943 | + { |
| 944 | + switch (ELF32_R_TYPE(rel->r_info)) |
| 945 | + { |
| 946 | + /* TODO: VTINHERIT/VTENTRY */ |
| 947 | + default: |
| 948 | + switch (h->root.type) |
| 949 | + { |
| 950 | + case bfd_link_hash_defined: |
| 951 | + case bfd_link_hash_defweak: |
| 952 | + return h->root.u.def.section; |
| 953 | + |
| 954 | + case bfd_link_hash_common: |
| 955 | + return h->root.u.c.p->section; |
| 956 | + |
| 957 | + default: |
| 958 | + break; |
| 959 | + } |
| 960 | + } |
| 961 | + } |
| 962 | + else |
| 963 | + return bfd_section_from_elf_index(sec->owner, sym->st_shndx); |
| 964 | + |
| 965 | + return NULL; |
| 966 | +} |
| 967 | + |
| 968 | +/* Update the GOT entry reference counts for the section being removed. */ |
| 969 | +static bfd_boolean |
| 970 | +avr32_elf_gc_sweep_hook(bfd *abfd, |
| 971 | + struct bfd_link_info *info ATTRIBUTE_UNUSED, |
| 972 | + asection *sec, |
| 973 | + const Elf_Internal_Rela *relocs) |
| 974 | +{ |
| 975 | + Elf_Internal_Shdr *symtab_hdr; |
| 976 | + struct elf_avr32_link_hash_entry **sym_hashes; |
| 977 | + struct got_entry **local_got_ents; |
| 978 | + const Elf_Internal_Rela *rel, *relend; |
| 979 | + |
| 980 | + if (!(sec->flags & SEC_ALLOC)) |
| 981 | + return TRUE; |
| 982 | + |
| 983 | + symtab_hdr = &elf_tdata(abfd)->symtab_hdr; |
| 984 | + sym_hashes = (struct elf_avr32_link_hash_entry **)elf_sym_hashes(abfd); |
| 985 | + local_got_ents = elf_local_got_ents(abfd); |
| 986 | + |
| 987 | + relend = relocs + sec->reloc_count; |
| 988 | + for (rel = relocs; rel < relend; rel++) |
| 989 | + { |
| 990 | + unsigned long r_symndx; |
| 991 | + unsigned int r_type; |
| 992 | + struct elf_avr32_link_hash_entry *h = NULL; |
| 993 | + |
| 994 | + r_symndx = ELF32_R_SYM(rel->r_info); |
| 995 | + if (r_symndx >= symtab_hdr->sh_info) |
| 996 | + { |
| 997 | + h = sym_hashes[r_symndx - symtab_hdr->sh_info]; |
| 998 | + while (h->root.root.type == bfd_link_hash_indirect |
| 999 | + || h->root.root.type == bfd_link_hash_warning) |
| 1000 | + h = (struct elf_avr32_link_hash_entry *)h->root.root.u.i.link; |
| 1001 | + } |
| 1002 | + |
| 1003 | + r_type = ELF32_R_TYPE(rel->r_info); |
| 1004 | + |
| 1005 | + switch (r_type) |
| 1006 | + { |
| 1007 | + case R_AVR32_GOT32: |
| 1008 | + case R_AVR32_GOT16: |
| 1009 | + case R_AVR32_GOT8: |
| 1010 | + case R_AVR32_GOT21S: |
| 1011 | + case R_AVR32_GOT18SW: |
| 1012 | + case R_AVR32_GOT16S: |
| 1013 | + case R_AVR32_GOT7UW: |
| 1014 | + case R_AVR32_LDA_GOT: |
| 1015 | + case R_AVR32_GOTCALL: |
| 1016 | + if (h) |
| 1017 | + h->root.got.glist->refcount--; |
| 1018 | + else |
| 1019 | + local_got_ents[r_symndx]->refcount--; |
| 1020 | + break; |
| 1021 | + |
| 1022 | + case R_AVR32_32: |
| 1023 | + if (info->shared || h) |
| 1024 | + { |
| 1025 | + if (h) |
| 1026 | + h->possibly_dynamic_relocs--; |
| 1027 | + else |
| 1028 | + avr32_elf_hash_table(info)->local_dynamic_relocs--; |
| 1029 | + } |
| 1030 | + |
| 1031 | + default: |
| 1032 | + break; |
| 1033 | + } |
| 1034 | + } |
| 1035 | + |
| 1036 | + return TRUE; |
| 1037 | +} |
| 1038 | + |
| 1039 | +/* Sizing and refcounting of dynamic sections */ |
| 1040 | + |
| 1041 | +static void |
| 1042 | +insert_got_entry(struct elf_avr32_link_hash_table *htab, struct got_entry *got); |
| 1043 | +static void |
| 1044 | +unref_got_entry(struct elf_avr32_link_hash_table *htab, struct got_entry *got); |
| 1045 | +static void |
| 1046 | +ref_got_entry(struct elf_avr32_link_hash_table *htab, struct got_entry *got); |
| 1047 | +static bfd_boolean |
| 1048 | +assign_got_offsets(struct elf_avr32_link_hash_table *htab); |
| 1049 | +static bfd_boolean |
| 1050 | +allocate_dynrelocs(struct elf_link_hash_entry *h, void *_info); |
| 1051 | +static bfd_boolean |
| 1052 | +avr32_elf_size_dynamic_sections (bfd *output_bfd, |
| 1053 | + struct bfd_link_info *info); |
| 1054 | + |
| 1055 | +static void |
| 1056 | +insert_got_entry(struct elf_avr32_link_hash_table *htab, struct got_entry *got) |
| 1057 | +{ |
| 1058 | + /* Any entries with got_refcount > htab->nr_got_holes end up in the |
| 1059 | + * last pigeonhole without any sorting. We expect the number of such |
| 1060 | + * entries to be small, so it is very unlikely to affect |
| 1061 | + * performance. */ |
| 1062 | + int entry = got->refcount; |
| 1063 | + |
| 1064 | + if (entry > htab->nr_got_holes) |
| 1065 | + entry = htab->nr_got_holes; |
| 1066 | + |
| 1067 | + got->pprev = &htab->got_hole[entry]; |
| 1068 | + got->next = htab->got_hole[entry]; |
| 1069 | + |
| 1070 | + if (got->next) |
| 1071 | + got->next->pprev = &got->next; |
| 1072 | + |
| 1073 | + htab->got_hole[entry] = got; |
| 1074 | +} |
| 1075 | + |
| 1076 | +/* Decrement the refcount of a GOT entry and update its position in |
| 1077 | + the pigeonhole array. */ |
| 1078 | +static void |
| 1079 | +unref_got_entry(struct elf_avr32_link_hash_table *htab, struct got_entry *got) |
| 1080 | +{ |
| 1081 | + BFD_ASSERT(got->refcount > 0); |
| 1082 | + |
| 1083 | + if (got->next) |
| 1084 | + got->next->pprev = got->pprev; |
| 1085 | + |
| 1086 | + *(got->pprev) = got->next; |
| 1087 | + got->refcount--; |
| 1088 | + insert_got_entry(htab, got); |
| 1089 | +} |
| 1090 | + |
| 1091 | +static void |
| 1092 | +ref_got_entry(struct elf_avr32_link_hash_table *htab, struct got_entry *got) |
| 1093 | +{ |
| 1094 | + if (got->next) |
| 1095 | + got->next->pprev = got->pprev; |
| 1096 | + |
| 1097 | + *(got->pprev) = got->next; |
| 1098 | + got->refcount++; |
| 1099 | + insert_got_entry(htab, got); |
| 1100 | + |
| 1101 | + BFD_ASSERT(got->refcount > 0); |
| 1102 | +} |
| 1103 | + |
| 1104 | +/* Assign offsets to all GOT entries we intend to keep. The entries |
| 1105 | + that are referenced most often are placed at low offsets so that we |
| 1106 | + can use compact instructions as much as possible. |
| 1107 | + |
| 1108 | + Returns TRUE if any offsets or the total size of the GOT changed. */ |
| 1109 | + |
| 1110 | +static bfd_boolean |
| 1111 | +assign_got_offsets(struct elf_avr32_link_hash_table *htab) |
| 1112 | +{ |
| 1113 | + struct got_entry *got; |
| 1114 | + bfd_size_type got_size = 0; |
| 1115 | + bfd_boolean changed = FALSE; |
| 1116 | + bfd_signed_vma offset; |
| 1117 | + int i; |
| 1118 | + |
| 1119 | + /* The GOT header provides the address of the DYNAMIC segment, so |
| 1120 | + we need that even if the GOT is otherwise empty. */ |
| 1121 | + if (htab->root.dynamic_sections_created) |
| 1122 | + got_size = AVR32_GOT_HEADER_SIZE; |
| 1123 | + |
| 1124 | + for (i = htab->nr_got_holes; i > 0; i--) |
| 1125 | + { |
| 1126 | + got = htab->got_hole[i]; |
| 1127 | + while (got) |
| 1128 | + { |
| 1129 | + if (got->refcount > 0) |
| 1130 | + { |
| 1131 | + offset = got_size; |
| 1132 | + if (got->offset != offset) |
| 1133 | + { |
| 1134 | + RDBG("GOT offset changed: %ld -> %ld\n", |
| 1135 | + got->offset, offset); |
| 1136 | + changed = TRUE; |
| 1137 | + } |
| 1138 | + got->offset = offset; |
| 1139 | + got_size += 4; |
| 1140 | + } |
| 1141 | + got = got->next; |
| 1142 | + } |
| 1143 | + } |
| 1144 | + |
| 1145 | + if (htab->sgot->size != got_size) |
| 1146 | + { |
| 1147 | + RDBG("GOT size changed: %lu -> %lu\n", htab->sgot->size, |
| 1148 | + got_size); |
| 1149 | + changed = TRUE; |
| 1150 | + } |
| 1151 | + htab->sgot->size = got_size; |
| 1152 | + |
| 1153 | + RDBG("assign_got_offsets: total size %lu (%s)\n", |
| 1154 | + got_size, changed ? "changed" : "no change"); |
| 1155 | + |
| 1156 | + return changed; |
| 1157 | +} |
| 1158 | + |
| 1159 | +static bfd_boolean |
| 1160 | +allocate_dynrelocs(struct elf_link_hash_entry *h, void *_info) |
| 1161 | +{ |
| 1162 | + struct bfd_link_info *info = _info; |
| 1163 | + struct elf_avr32_link_hash_table *htab; |
| 1164 | + struct elf_avr32_link_hash_entry *havr; |
| 1165 | + struct got_entry *got; |
| 1166 | + |
| 1167 | + pr_debug(" (4b) allocate_dynrelocs: %s\n", h->root.root.string); |
| 1168 | + |
| 1169 | + if (h->root.type == bfd_link_hash_indirect) |
| 1170 | + return TRUE; |
| 1171 | + |
| 1172 | + if (h->root.type == bfd_link_hash_warning) |
| 1173 | + /* When warning symbols are created, they **replace** the "real" |
| 1174 | + entry in the hash table, thus we never get to see the real |
| 1175 | + symbol in a hash traversal. So look at it now. */ |
| 1176 | + h = (struct elf_link_hash_entry *) h->root.u.i.link; |
| 1177 | + |
| 1178 | + htab = avr32_elf_hash_table(info); |
| 1179 | + havr = (struct elf_avr32_link_hash_entry *)h; |
| 1180 | + |
| 1181 | + got = h->got.glist; |
| 1182 | + |
| 1183 | + /* If got is NULL, the symbol is never referenced through the GOT */ |
| 1184 | + if (got && got->refcount > 0) |
| 1185 | + { |
| 1186 | + insert_got_entry(htab, got); |
| 1187 | + |
| 1188 | + /* Shared libraries need relocs for all GOT entries unless the |
| 1189 | + symbol is forced local or -Bsymbolic is used. Others need |
| 1190 | + relocs for everything that is not guaranteed to be defined in |
| 1191 | + a regular object. */ |
| 1192 | + if ((info->shared |
| 1193 | + && !info->symbolic |
| 1194 | + && h->dynindx != -1) |
| 1195 | + || (htab->root.dynamic_sections_created |
| 1196 | + && h->def_dynamic |
| 1197 | + && !h->def_regular)) |
| 1198 | + htab->srelgot->size += sizeof(Elf32_External_Rela); |
| 1199 | + } |
| 1200 | + |
| 1201 | + if (havr->possibly_dynamic_relocs |
| 1202 | + && (info->shared |
| 1203 | + || (elf_hash_table(info)->dynamic_sections_created |
| 1204 | + && h->def_dynamic |
| 1205 | + && !h->def_regular))) |
| 1206 | + { |
| 1207 | + pr_debug("Allocating %d dynamic reloc against symbol %s...\n", |
| 1208 | + havr->possibly_dynamic_relocs, h->root.root.string); |
| 1209 | + htab->srelgot->size += (havr->possibly_dynamic_relocs |
| 1210 | + * sizeof(Elf32_External_Rela)); |
| 1211 | + } |
| 1212 | + |
| 1213 | + return TRUE; |
| 1214 | +} |
| 1215 | + |
| 1216 | +/* (4) Calculate the sizes of the linker-generated sections and |
| 1217 | + allocate memory for them. */ |
| 1218 | + |
| 1219 | +static bfd_boolean |
| 1220 | +avr32_elf_size_dynamic_sections (bfd *output_bfd, |
| 1221 | + struct bfd_link_info *info) |
| 1222 | +{ |
| 1223 | + struct elf_avr32_link_hash_table *htab; |
| 1224 | + bfd *dynobj; |
| 1225 | + asection *s; |
| 1226 | + bfd *ibfd; |
| 1227 | + bfd_boolean relocs; |
| 1228 | + |
| 1229 | + pr_debug("(4) size dynamic sections\n"); |
| 1230 | + |
| 1231 | + htab = avr32_elf_hash_table(info); |
| 1232 | + dynobj = htab->root.dynobj; |
| 1233 | + BFD_ASSERT(dynobj != NULL); |
| 1234 | + |
| 1235 | + if (htab->root.dynamic_sections_created) |
| 1236 | + { |
| 1237 | + /* Initialize the contents of the .interp section to the name of |
| 1238 | + the dynamic loader */ |
| 1239 | + if (info->executable) |
| 1240 | + { |
| 1241 | + s = bfd_get_section_by_name(dynobj, ".interp"); |
| 1242 | + BFD_ASSERT(s != NULL); |
| 1243 | + s->size = sizeof(ELF_DYNAMIC_INTERPRETER); |
| 1244 | + s->contents = (unsigned char *)ELF_DYNAMIC_INTERPRETER; |
| 1245 | + } |
| 1246 | + } |
| 1247 | + |
| 1248 | + if (htab->nr_got_holes > 0) |
| 1249 | + { |
| 1250 | + /* Allocate holes for the pigeonhole sort algorithm */ |
| 1251 | + pr_debug("Highest GOT refcount: %d\n", htab->nr_got_holes); |
| 1252 | + |
| 1253 | + /* Limit the memory usage by clipping the number of pigeonholes |
| 1254 | + * at a predefined maximum. All entries with a higher refcount |
| 1255 | + * will end up in the last pigeonhole. */ |
| 1256 | + if (htab->nr_got_holes >= MAX_NR_GOT_HOLES) |
| 1257 | + { |
| 1258 | + htab->nr_got_holes = MAX_NR_GOT_HOLES - 1; |
| 1259 | + |
| 1260 | + pr_debug("Limiting maximum number of GOT pigeonholes to %u\n", |
| 1261 | + htab->nr_got_holes); |
| 1262 | + } |
| 1263 | + htab->got_hole = bfd_zalloc(output_bfd, |
| 1264 | + sizeof(struct got_entry *) |
| 1265 | + * (htab->nr_got_holes + 1)); |
| 1266 | + if (!htab->got_hole) |
| 1267 | + return FALSE; |
| 1268 | + |
| 1269 | + /* Set up .got offsets for local syms. */ |
| 1270 | + for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next) |
| 1271 | + { |
| 1272 | + struct got_entry **local_got; |
| 1273 | + struct got_entry **end_local_got; |
| 1274 | + Elf_Internal_Shdr *symtab_hdr; |
| 1275 | + bfd_size_type locsymcount; |
| 1276 | + |
| 1277 | + pr_debug(" (4a) processing file %s...\n", ibfd->filename); |
| 1278 | + |
| 1279 | + BFD_ASSERT(bfd_get_flavour(ibfd) == bfd_target_elf_flavour); |
| 1280 | + |
| 1281 | + local_got = elf_local_got_ents(ibfd); |
| 1282 | + if (!local_got) |
| 1283 | + continue; |
| 1284 | + |
| 1285 | + symtab_hdr = &elf_tdata(ibfd)->symtab_hdr; |
| 1286 | + locsymcount = symtab_hdr->sh_info; |
| 1287 | + end_local_got = local_got + locsymcount; |
| 1288 | + |
| 1289 | + for (; local_got < end_local_got; ++local_got) |
| 1290 | + insert_got_entry(htab, *local_got); |
| 1291 | + } |
| 1292 | + } |
| 1293 | + |
| 1294 | + /* Allocate global sym .got entries and space for global sym |
| 1295 | + dynamic relocs */ |
| 1296 | + elf_link_hash_traverse(&htab->root, allocate_dynrelocs, info); |
| 1297 | + |
| 1298 | + /* Now that we have sorted the GOT entries, we are ready to |
| 1299 | + assign offsets and determine the initial size of the GOT. */ |
| 1300 | + if (htab->sgot) |
| 1301 | + assign_got_offsets(htab); |
| 1302 | + |
| 1303 | + /* Allocate space for local sym dynamic relocs */ |
| 1304 | + BFD_ASSERT(htab->local_dynamic_relocs == 0 || info->shared); |
| 1305 | + if (htab->local_dynamic_relocs) |
| 1306 | + htab->srelgot->size += (htab->local_dynamic_relocs |
| 1307 | + * sizeof(Elf32_External_Rela)); |
| 1308 | + |
| 1309 | + /* We now have determined the sizes of the various dynamic |
| 1310 | + sections. Allocate memory for them. */ |
| 1311 | + relocs = FALSE; |
| 1312 | + for (s = dynobj->sections; s; s = s->next) |
| 1313 | + { |
| 1314 | + if ((s->flags & SEC_LINKER_CREATED) == 0) |
| 1315 | + continue; |
| 1316 | + |
| 1317 | + if (s == htab->sgot |
| 1318 | + || s == htab->sstub) |
| 1319 | + { |
| 1320 | + /* Strip this section if we don't need it */ |
| 1321 | + } |
| 1322 | + else if (strncmp (bfd_get_section_name(dynobj, s), ".rela", 5) == 0) |
| 1323 | + { |
| 1324 | + if (s->size != 0) |
| 1325 | + relocs = TRUE; |
| 1326 | + |
| 1327 | + s->reloc_count = 0; |
| 1328 | + } |
| 1329 | + else |
| 1330 | + { |
| 1331 | + /* It's not one of our sections */ |
| 1332 | + continue; |
| 1333 | + } |
| 1334 | + |
| 1335 | + if (s->size == 0) |
| 1336 | + { |
| 1337 | + /* Strip unneeded sections */ |
| 1338 | + pr_debug("Stripping section %s from output...\n", s->name); |
| 1339 | + /* deleted function in 2.17 |
| 1340 | + _bfd_strip_section_from_output(info, s); |
| 1341 | + */ |
| 1342 | + continue; |
| 1343 | + } |
| 1344 | + |
| 1345 | + s->contents = bfd_zalloc(dynobj, s->size); |
| 1346 | + if (s->contents == NULL) |
| 1347 | + return FALSE; |
| 1348 | + } |
| 1349 | + |
| 1350 | + if (htab->root.dynamic_sections_created) |
| 1351 | + { |
| 1352 | + /* Add some entries to the .dynamic section. We fill in the |
| 1353 | + values later, in sh_elf_finish_dynamic_sections, but we |
| 1354 | + must add the entries now so that we get the correct size for |
| 1355 | + the .dynamic section. The DT_DEBUG entry is filled in by the |
| 1356 | + dynamic linker and used by the debugger. */ |
| 1357 | +#define add_dynamic_entry(TAG, VAL) _bfd_elf_add_dynamic_entry(info, TAG, VAL) |
| 1358 | + |
| 1359 | + if (!add_dynamic_entry(DT_PLTGOT, 0)) |
| 1360 | + return FALSE; |
| 1361 | + if (!add_dynamic_entry(DT_AVR32_GOTSZ, 0)) |
| 1362 | + return FALSE; |
| 1363 | + |
| 1364 | + if (info->executable) |
| 1365 | + { |
| 1366 | + if (!add_dynamic_entry(DT_DEBUG, 0)) |
| 1367 | + return FALSE; |
| 1368 | + } |
| 1369 | + if (relocs) |
| 1370 | + { |
| 1371 | + if (!add_dynamic_entry(DT_RELA, 0) |
| 1372 | + || !add_dynamic_entry(DT_RELASZ, 0) |
| 1373 | + || !add_dynamic_entry(DT_RELAENT, |
| 1374 | + sizeof(Elf32_External_Rela))) |
| 1375 | + return FALSE; |
| 1376 | + } |
| 1377 | + } |
| 1378 | +#undef add_dynamic_entry |
| 1379 | + |
| 1380 | + return TRUE; |
| 1381 | +} |
| 1382 | + |
| 1383 | + |
| 1384 | +/* Access to internal relocations, section contents and symbols. |
| 1385 | + (stolen from the xtensa port) */ |
| 1386 | + |
| 1387 | +static Elf_Internal_Rela * |
| 1388 | +retrieve_internal_relocs (bfd *abfd, asection *sec, bfd_boolean keep_memory); |
| 1389 | +static void |
| 1390 | +pin_internal_relocs (asection *sec, Elf_Internal_Rela *internal_relocs); |
| 1391 | +static void |
| 1392 | +release_internal_relocs (asection *sec, Elf_Internal_Rela *internal_relocs); |
| 1393 | +static bfd_byte * |
| 1394 | +retrieve_contents (bfd *abfd, asection *sec, bfd_boolean keep_memory); |
| 1395 | +/* |
| 1396 | +static void |
| 1397 | +pin_contents (asection *sec, bfd_byte *contents); |
| 1398 | +*/ |
| 1399 | +static void |
| 1400 | +release_contents (asection *sec, bfd_byte *contents); |
| 1401 | +static Elf_Internal_Sym * |
| 1402 | +retrieve_local_syms (bfd *input_bfd, bfd_boolean keep_memory); |
| 1403 | +/* |
| 1404 | +static void |
| 1405 | +pin_local_syms (bfd *input_bfd, Elf_Internal_Sym *isymbuf); |
| 1406 | +*/ |
| 1407 | +static void |
| 1408 | +release_local_syms (bfd *input_bfd, Elf_Internal_Sym *isymbuf); |
| 1409 | + |
| 1410 | +/* During relaxation, we need to modify relocations, section contents, |
| 1411 | + and symbol definitions, and we need to keep the original values from |
| 1412 | + being reloaded from the input files, i.e., we need to "pin" the |
| 1413 | + modified values in memory. We also want to continue to observe the |
| 1414 | + setting of the "keep-memory" flag. The following functions wrap the |
| 1415 | + standard BFD functions to take care of this for us. */ |
| 1416 | + |
| 1417 | +static Elf_Internal_Rela * |
| 1418 | +retrieve_internal_relocs (bfd *abfd, asection *sec, bfd_boolean keep_memory) |
| 1419 | +{ |
| 1420 | + /* _bfd_elf_link_read_relocs knows about caching, so no need for us |
| 1421 | + to be clever here. */ |
| 1422 | + return _bfd_elf_link_read_relocs(abfd, sec, NULL, NULL, keep_memory); |
| 1423 | +} |
| 1424 | + |
| 1425 | +static void |
| 1426 | +pin_internal_relocs (asection *sec, Elf_Internal_Rela *internal_relocs) |
| 1427 | +{ |
| 1428 | + elf_section_data (sec)->relocs = internal_relocs; |
| 1429 | +} |
| 1430 | + |
| 1431 | +static void |
| 1432 | +release_internal_relocs (asection *sec, Elf_Internal_Rela *internal_relocs) |
| 1433 | +{ |
| 1434 | + if (internal_relocs |
| 1435 | + && elf_section_data (sec)->relocs != internal_relocs) |
| 1436 | + free (internal_relocs); |
| 1437 | +} |
| 1438 | + |
| 1439 | +static bfd_byte * |
| 1440 | +retrieve_contents (bfd *abfd, asection *sec, bfd_boolean keep_memory) |
| 1441 | +{ |
| 1442 | + bfd_byte *contents; |
| 1443 | + bfd_size_type sec_size; |
| 1444 | + |
| 1445 | + sec_size = bfd_get_section_limit (abfd, sec); |
| 1446 | + contents = elf_section_data (sec)->this_hdr.contents; |
| 1447 | + |
| 1448 | + if (contents == NULL && sec_size != 0) |
| 1449 | + { |
| 1450 | + if (!bfd_malloc_and_get_section (abfd, sec, &contents)) |
| 1451 | + { |
| 1452 | + if (contents) |
| 1453 | + free (contents); |
| 1454 | + return NULL; |
| 1455 | + } |
| 1456 | + if (keep_memory) |
| 1457 | + elf_section_data (sec)->this_hdr.contents = contents; |
| 1458 | + } |
| 1459 | + return contents; |
| 1460 | +} |
| 1461 | + |
| 1462 | +/* |
| 1463 | +static void |
| 1464 | +pin_contents (asection *sec, bfd_byte *contents) |
| 1465 | +{ |
| 1466 | + elf_section_data (sec)->this_hdr.contents = contents; |
| 1467 | +} |
| 1468 | +*/ |
| 1469 | +static void |
| 1470 | +release_contents (asection *sec, bfd_byte *contents) |
| 1471 | +{ |
| 1472 | + if (contents && elf_section_data (sec)->this_hdr.contents != contents) |
| 1473 | + free (contents); |
| 1474 | +} |
| 1475 | + |
| 1476 | +static Elf_Internal_Sym * |
| 1477 | +retrieve_local_syms (bfd *input_bfd, bfd_boolean keep_memory) |
| 1478 | +{ |
| 1479 | + Elf_Internal_Shdr *symtab_hdr; |
| 1480 | + Elf_Internal_Sym *isymbuf; |
| 1481 | + size_t locsymcount; |
| 1482 | + |
| 1483 | + symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; |
| 1484 | + locsymcount = symtab_hdr->sh_info; |
| 1485 | + |
| 1486 | + isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents; |
| 1487 | + if (isymbuf == NULL && locsymcount != 0) |
| 1488 | + { |
| 1489 | + isymbuf = bfd_elf_get_elf_syms (input_bfd, symtab_hdr, locsymcount, 0, |
| 1490 | + NULL, NULL, NULL); |
| 1491 | + if (isymbuf && keep_memory) |
| 1492 | + symtab_hdr->contents = (unsigned char *) isymbuf; |
| 1493 | + } |
| 1494 | + |
| 1495 | + return isymbuf; |
| 1496 | +} |
| 1497 | + |
| 1498 | +/* |
| 1499 | +static void |
| 1500 | +pin_local_syms (bfd *input_bfd, Elf_Internal_Sym *isymbuf) |
| 1501 | +{ |
| 1502 | + elf_tdata (input_bfd)->symtab_hdr.contents = (unsigned char *)isymbuf; |
| 1503 | +} |
| 1504 | + |
| 1505 | +*/ |
| 1506 | +static void |
| 1507 | +release_local_syms (bfd *input_bfd, Elf_Internal_Sym *isymbuf) |
| 1508 | +{ |
| 1509 | + if (isymbuf && (elf_tdata (input_bfd)->symtab_hdr.contents |
| 1510 | + != (unsigned char *)isymbuf)) |
| 1511 | + free (isymbuf); |
| 1512 | +} |
| 1513 | + |
| 1514 | +/* Data structures used during relaxation. */ |
| 1515 | + |
| 1516 | +enum relax_state_id { |
| 1517 | + RS_ERROR = -1, |
| 1518 | + RS_NONE = 0, |
| 1519 | + RS_ALIGN, |
| 1520 | + RS_CPENT, |
| 1521 | + RS_PIC_CALL, |
| 1522 | + RS_PIC_MCALL, |
| 1523 | + RS_PIC_RCALL2, |
| 1524 | + RS_PIC_RCALL1, |
| 1525 | + RS_PIC_LDA, |
| 1526 | + RS_PIC_LDW4, |
| 1527 | + RS_PIC_LDW3, |
| 1528 | + RS_PIC_SUB5, |
| 1529 | + RS_NOPIC_MCALL, |
| 1530 | + RS_NOPIC_RCALL2, |
| 1531 | + RS_NOPIC_RCALL1, |
| 1532 | + RS_NOPIC_LDW4, |
| 1533 | + RS_NOPIC_LDDPC, |
| 1534 | + RS_NOPIC_SUB5, |
| 1535 | + RS_NOPIC_MOV2, |
| 1536 | + RS_NOPIC_MOV1, |
| 1537 | + RS_RCALL2, |
| 1538 | + RS_RCALL1, |
| 1539 | + RS_BRC2, |
| 1540 | + RS_BRC1, |
| 1541 | + RS_BRAL, |
| 1542 | + RS_RJMP, |
| 1543 | + RS_MAX, |
| 1544 | +}; |
| 1545 | + |
| 1546 | +enum reference_type { |
| 1547 | + REF_ABSOLUTE, |
| 1548 | + REF_PCREL, |
| 1549 | + REF_CPOOL, |
| 1550 | + REF_GOT, |
| 1551 | +}; |
| 1552 | + |
| 1553 | +struct relax_state |
| 1554 | +{ |
| 1555 | + const char *name; |
| 1556 | + enum relax_state_id id; |
| 1557 | + enum relax_state_id direct; |
| 1558 | + enum relax_state_id next; |
| 1559 | + enum relax_state_id prev; |
| 1560 | + |
| 1561 | + enum reference_type reftype; |
| 1562 | + |
| 1563 | + unsigned int r_type; |
| 1564 | + |
| 1565 | + bfd_vma opcode; |
| 1566 | + bfd_vma opcode_mask; |
| 1567 | + |
| 1568 | + bfd_signed_vma range_min; |
| 1569 | + bfd_signed_vma range_max; |
| 1570 | + |
| 1571 | + bfd_size_type size; |
| 1572 | +}; |
| 1573 | + |
| 1574 | +/* |
| 1575 | + * This is for relocs that |
| 1576 | + * a) has an addend or is of type R_AVR32_DIFF32, and |
| 1577 | + * b) references a different section than it's in, and |
| 1578 | + * c) references a section that is relaxable |
| 1579 | + * |
| 1580 | + * as well as relocs that references the constant pool, in which case |
| 1581 | + * the add_frag member points to the frag containing the constant pool |
| 1582 | + * entry. |
| 1583 | + * |
| 1584 | + * Such relocs must be fixed up whenever we delete any code. Sections |
| 1585 | + * that don't have any relocs with all of the above properties don't |
| 1586 | + * have any additional reloc data, but sections that do will have |
| 1587 | + * additional data for all its relocs. |
| 1588 | + */ |
| 1589 | +struct avr32_reloc_data |
| 1590 | +{ |
| 1591 | + struct fragment *add_frag; |
| 1592 | + struct fragment *sub_frag; |
| 1593 | +}; |
| 1594 | + |
| 1595 | +/* |
| 1596 | + * A 'fragment' is a relaxable entity, that is, code may be added or |
| 1597 | + * deleted at the end of a fragment. When this happens, all subsequent |
| 1598 | + * fragments in the list will have their offsets updated. |
| 1599 | + */ |
| 1600 | +struct fragment |
| 1601 | +{ |
| 1602 | + enum relax_state_id state; |
| 1603 | + enum relax_state_id initial_state; |
| 1604 | + |
| 1605 | + Elf_Internal_Rela *rela; |
| 1606 | + bfd_size_type size; |
| 1607 | + bfd_vma offset; |
| 1608 | + int size_adjust; |
| 1609 | + int offset_adjust; |
| 1610 | + bfd_boolean has_grown; |
| 1611 | + |
| 1612 | + /* Only used by constant pool entries. When this drops to zero, the |
| 1613 | + frag is discarded (i.e. size_adjust is set to -4.) */ |
| 1614 | + int refcount; |
| 1615 | +}; |
| 1616 | + |
| 1617 | +struct avr32_relax_data |
| 1618 | +{ |
| 1619 | + unsigned int frag_count; |
| 1620 | + struct fragment *frag; |
| 1621 | + struct avr32_reloc_data *reloc_data; |
| 1622 | + |
| 1623 | + /* TRUE if this section has one or more relaxable relocations */ |
| 1624 | + bfd_boolean is_relaxable; |
| 1625 | + unsigned int iteration; |
| 1626 | +}; |
| 1627 | + |
| 1628 | +struct avr32_section_data |
| 1629 | +{ |
| 1630 | + struct bfd_elf_section_data elf; |
| 1631 | + struct avr32_relax_data relax_data; |
| 1632 | +}; |
| 1633 | + |
| 1634 | +/* Relax state definitions */ |
| 1635 | + |
| 1636 | +#define PIC_MOV2_OPCODE 0xe0600000 |
| 1637 | +#define PIC_MOV2_MASK 0xe1e00000 |
| 1638 | +#define PIC_MOV2_RANGE_MIN (-1048576 * 4) |
| 1639 | +#define PIC_MOV2_RANGE_MAX (1048575 * 4) |
| 1640 | +#define PIC_MCALL_OPCODE 0xf0160000 |
| 1641 | +#define PIC_MCALL_MASK 0xffff0000 |
| 1642 | +#define PIC_MCALL_RANGE_MIN (-131072) |
| 1643 | +#define PIC_MCALL_RANGE_MAX (131068) |
| 1644 | +#define RCALL2_OPCODE 0xe0a00000 |
| 1645 | +#define RCALL2_MASK 0xe1ef0000 |
| 1646 | +#define RCALL2_RANGE_MIN (-2097152) |
| 1647 | +#define RCALL2_RANGE_MAX (2097150) |
| 1648 | +#define RCALL1_OPCODE 0xc00c0000 |
| 1649 | +#define RCALL1_MASK 0xf00c0000 |
| 1650 | +#define RCALL1_RANGE_MIN (-1024) |
| 1651 | +#define RCALL1_RANGE_MAX (1022) |
| 1652 | +#define PIC_LDW4_OPCODE 0xecf00000 |
| 1653 | +#define PIC_LDW4_MASK 0xfff00000 |
| 1654 | +#define PIC_LDW4_RANGE_MIN (-32768) |
| 1655 | +#define PIC_LDW4_RANGE_MAX (32767) |
| 1656 | +#define PIC_LDW3_OPCODE 0x6c000000 |
| 1657 | +#define PIC_LDW3_MASK 0xfe000000 |
| 1658 | +#define PIC_LDW3_RANGE_MIN (0) |
| 1659 | +#define PIC_LDW3_RANGE_MAX (124) |
| 1660 | +#define SUB5_PC_OPCODE 0xfec00000 |
| 1661 | +#define SUB5_PC_MASK 0xfff00000 |
| 1662 | +#define SUB5_PC_RANGE_MIN (-32768) |
| 1663 | +#define SUB5_PC_RANGE_MAX (32767) |
| 1664 | +#define NOPIC_MCALL_OPCODE 0xf01f0000 |
| 1665 | +#define NOPIC_MCALL_MASK 0xffff0000 |
| 1666 | +#define NOPIC_MCALL_RANGE_MIN PIC_MCALL_RANGE_MIN |
| 1667 | +#define NOPIC_MCALL_RANGE_MAX PIC_MCALL_RANGE_MAX |
| 1668 | +#define NOPIC_LDW4_OPCODE 0xfef00000 |
| 1669 | +#define NOPIC_LDW4_MASK 0xfff00000 |
| 1670 | +#define NOPIC_LDW4_RANGE_MIN PIC_LDW4_RANGE_MIN |
| 1671 | +#define NOPIC_LDW4_RANGE_MAX PIC_LDW4_RANGE_MAX |
| 1672 | +#define LDDPC_OPCODE 0x48000000 |
| 1673 | +#define LDDPC_MASK 0xf8000000 |
| 1674 | +#define LDDPC_RANGE_MIN 0 |
| 1675 | +#define LDDPC_RANGE_MAX 508 |
| 1676 | + |
| 1677 | +#define NOPIC_MOV2_OPCODE 0xe0600000 |
| 1678 | +#define NOPIC_MOV2_MASK 0xe1e00000 |
| 1679 | +#define NOPIC_MOV2_RANGE_MIN (-1048576) |
| 1680 | +#define NOPIC_MOV2_RANGE_MAX (1048575) |
| 1681 | +#define NOPIC_MOV1_OPCODE 0x30000000 |
| 1682 | +#define NOPIC_MOV1_MASK 0xf0000000 |
| 1683 | +#define NOPIC_MOV1_RANGE_MIN (-128) |
| 1684 | +#define NOPIC_MOV1_RANGE_MAX (127) |
| 1685 | + |
| 1686 | +/* Only brc2 variants with cond[3] == 0 is considered, since the |
| 1687 | + others are not relaxable. bral is a special case and is handled |
| 1688 | + separately. */ |
| 1689 | +#define BRC2_OPCODE 0xe0800000 |
| 1690 | +#define BRC2_MASK 0xe1e80000 |
| 1691 | +#define BRC2_RANGE_MIN (-2097152) |
| 1692 | +#define BRC2_RANGE_MAX (2097150) |
| 1693 | +#define BRC1_OPCODE 0xc0000000 |
| 1694 | +#define BRC1_MASK 0xf0080000 |
| 1695 | +#define BRC1_RANGE_MIN (-256) |
| 1696 | +#define BRC1_RANGE_MAX (254) |
| 1697 | +#define BRAL_OPCODE 0xe08f0000 |
| 1698 | +#define BRAL_MASK 0xe1ef0000 |
| 1699 | +#define BRAL_RANGE_MIN BRC2_RANGE_MIN |
| 1700 | +#define BRAL_RANGE_MAX BRC2_RANGE_MAX |
| 1701 | +#define RJMP_OPCODE 0xc0080000 |
| 1702 | +#define RJMP_MASK 0xf00c0000 |
| 1703 | +#define RJMP_RANGE_MIN (-1024) |
| 1704 | +#define RJMP_RANGE_MAX (1022) |
| 1705 | + |
| 1706 | +/* Define a relax state using the GOT */ |
| 1707 | +#define RG(id, dir, next, prev, r_type, opc, size) \ |
| 1708 | + { "RS_"#id, RS_##id, RS_##dir, RS_##next, RS_##prev, REF_GOT, \ |
| 1709 | + R_AVR32_##r_type, opc##_OPCODE, opc##_MASK, \ |
| 1710 | + opc##_RANGE_MIN, opc##_RANGE_MAX, size } |
| 1711 | +/* Define a relax state using the Constant Pool */ |
| 1712 | +#define RC(id, dir, next, prev, r_type, opc, size) \ |
| 1713 | + { "RS_"#id, RS_##id, RS_##dir, RS_##next, RS_##prev, REF_CPOOL, \ |
| 1714 | + R_AVR32_##r_type, opc##_OPCODE, opc##_MASK, \ |
| 1715 | + opc##_RANGE_MIN, opc##_RANGE_MAX, size } |
| 1716 | + |
| 1717 | +/* Define a relax state using pc-relative direct reference */ |
| 1718 | +#define RP(id, dir, next, prev, r_type, opc, size) \ |
| 1719 | + { "RS_"#id, RS_##id, RS_##dir, RS_##next, RS_##prev, REF_PCREL, \ |
| 1720 | + R_AVR32_##r_type, opc##_OPCODE, opc##_MASK, \ |
| 1721 | + opc##_RANGE_MIN, opc##_RANGE_MAX, size } |
| 1722 | + |
| 1723 | +/* Define a relax state using non-pc-relative direct reference */ |
| 1724 | +#define RD(id, dir, next, prev, r_type, opc, size) \ |
| 1725 | + { "RS_"#id, RS_##id, RS_##dir, RS_##next, RS_##prev, REF_ABSOLUTE, \ |
| 1726 | + R_AVR32_##r_type, opc##_OPCODE, opc##_MASK, \ |
| 1727 | + opc##_RANGE_MIN, opc##_RANGE_MAX, size } |
| 1728 | + |
| 1729 | +/* Define a relax state that will be handled specially */ |
| 1730 | +#define RS(id, r_type, size) \ |
| 1731 | + { "RS_"#id, RS_##id, RS_NONE, RS_NONE, RS_NONE, REF_ABSOLUTE, \ |
| 1732 | + R_AVR32_##r_type, 0, 0, 0, 0, size } |
| 1733 | + |
| 1734 | +const struct relax_state relax_state[RS_MAX] = { |
| 1735 | + RS(NONE, NONE, 0), |
| 1736 | + RS(ALIGN, ALIGN, 0), |
| 1737 | + RS(CPENT, 32_CPENT, 4), |
| 1738 | + |
| 1739 | + RG(PIC_CALL, PIC_RCALL1, PIC_MCALL, NONE, GOTCALL, PIC_MOV2, 10), |
| 1740 | + RG(PIC_MCALL, PIC_RCALL1, NONE, PIC_CALL, GOT18SW, PIC_MCALL, 4), |
| 1741 | + RP(PIC_RCALL2, NONE, PIC_RCALL1, PIC_MCALL, 22H_PCREL, RCALL2, 4), |
| 1742 | + RP(PIC_RCALL1, NONE, NONE, PIC_RCALL2, 11H_PCREL, RCALL1, 2), |
| 1743 | + |
| 1744 | + RG(PIC_LDA, PIC_SUB5, PIC_LDW4, NONE, LDA_GOT, PIC_MOV2, 8), |
| 1745 | + RG(PIC_LDW4, PIC_SUB5, PIC_LDW3, PIC_LDA, GOT16S, PIC_LDW4, 4), |
| 1746 | + RG(PIC_LDW3, PIC_SUB5, NONE, PIC_LDW4, GOT7UW, PIC_LDW3, 2), |
| 1747 | + RP(PIC_SUB5, NONE, NONE, PIC_LDW3, 16N_PCREL, SUB5_PC, 4), |
| 1748 | + |
| 1749 | + RC(NOPIC_MCALL, NOPIC_RCALL1, NONE, NONE, CPCALL, NOPIC_MCALL, 4), |
| 1750 | + RP(NOPIC_RCALL2, NONE, NOPIC_RCALL1, NOPIC_MCALL, 22H_PCREL, RCALL2, 4), |
| 1751 | + RP(NOPIC_RCALL1, NONE, NONE, NOPIC_RCALL2, 11H_PCREL, RCALL1, 2), |
| 1752 | + |
| 1753 | + RC(NOPIC_LDW4, NOPIC_MOV1, NOPIC_LDDPC, NONE, 16_CP, NOPIC_LDW4, 4), |
| 1754 | + RC(NOPIC_LDDPC, NOPIC_MOV1, NONE, NOPIC_LDW4, 9W_CP, LDDPC, 2), |
| 1755 | + RP(NOPIC_SUB5, NOPIC_MOV1, NONE, NOPIC_LDDPC, 16N_PCREL, SUB5_PC, 4), |
| 1756 | + RD(NOPIC_MOV2, NONE, NOPIC_MOV1, NOPIC_SUB5, 21S, NOPIC_MOV2, 4), |
| 1757 | + RD(NOPIC_MOV1, NONE, NONE, NOPIC_MOV2, 8S, NOPIC_MOV1, 2), |
| 1758 | + |
| 1759 | + RP(RCALL2, NONE, RCALL1, NONE, 22H_PCREL, RCALL2, 4), |
| 1760 | + RP(RCALL1, NONE, NONE, RCALL2, 11H_PCREL, RCALL1, 2), |
| 1761 | + RP(BRC2, NONE, BRC1, NONE, 22H_PCREL, BRC2, 4), |
| 1762 | + RP(BRC1, NONE, NONE, BRC2, 9H_PCREL, BRC1, 2), |
| 1763 | + RP(BRAL, NONE, RJMP, NONE, 22H_PCREL, BRAL, 4), |
| 1764 | + RP(RJMP, NONE, NONE, BRAL, 11H_PCREL, RJMP, 2), |
| 1765 | +}; |
| 1766 | + |
| 1767 | +static bfd_boolean |
| 1768 | +avr32_elf_new_section_hook(bfd *abfd, asection *sec) |
| 1769 | +{ |
| 1770 | + struct avr32_section_data *sdata; |
| 1771 | + |
| 1772 | + sdata = bfd_zalloc(abfd, sizeof(struct avr32_section_data)); |
| 1773 | + if (!sdata) |
| 1774 | + return FALSE; |
| 1775 | + |
| 1776 | + sec->used_by_bfd = sdata; |
| 1777 | + return _bfd_elf_new_section_hook(abfd, sec); |
| 1778 | +} |
| 1779 | + |
| 1780 | +static struct avr32_relax_data * |
| 1781 | +avr32_relax_data(asection *sec) |
| 1782 | +{ |
| 1783 | + struct avr32_section_data *sdata; |
| 1784 | + |
| 1785 | + BFD_ASSERT(sec->used_by_bfd); |
| 1786 | + |
| 1787 | + sdata = (struct avr32_section_data *)elf_section_data(sec); |
| 1788 | + return &sdata->relax_data; |
| 1789 | +} |
| 1790 | + |
| 1791 | +/* Link-time relaxation */ |
| 1792 | + |
| 1793 | +static bfd_boolean |
| 1794 | +avr32_elf_relax_section(bfd *abfd, asection *sec, |
| 1795 | + struct bfd_link_info *info, bfd_boolean *again); |
| 1796 | + |
| 1797 | +enum relax_pass_id { |
| 1798 | + RELAX_PASS_SIZE_FRAGS, |
| 1799 | + RELAX_PASS_MOVE_DATA, |
| 1800 | +}; |
| 1801 | + |
| 1802 | +/* Stolen from the xtensa port */ |
| 1803 | +static int |
| 1804 | +internal_reloc_compare (const void *ap, const void *bp) |
| 1805 | +{ |
| 1806 | + const Elf_Internal_Rela *a = (const Elf_Internal_Rela *) ap; |
| 1807 | + const Elf_Internal_Rela *b = (const Elf_Internal_Rela *) bp; |
| 1808 | + |
| 1809 | + if (a->r_offset != b->r_offset) |
| 1810 | + return (a->r_offset - b->r_offset); |
| 1811 | + |
| 1812 | + /* We don't need to sort on these criteria for correctness, |
| 1813 | + but enforcing a more strict ordering prevents unstable qsort |
| 1814 | + from behaving differently with different implementations. |
| 1815 | + Without the code below we get correct but different results |
| 1816 | + on Solaris 2.7 and 2.8. We would like to always produce the |
| 1817 | + same results no matter the host. */ |
| 1818 | + |
| 1819 | + if (a->r_info != b->r_info) |
| 1820 | + return (a->r_info - b->r_info); |
| 1821 | + |
| 1822 | + return (a->r_addend - b->r_addend); |
| 1823 | +} |
| 1824 | + |
| 1825 | +static enum relax_state_id |
| 1826 | +get_pcrel22_relax_state(bfd *abfd, asection *sec, struct bfd_link_info *info, |
| 1827 | + const Elf_Internal_Rela *rela) |
| 1828 | +{ |
| 1829 | + bfd_byte *contents; |
| 1830 | + bfd_vma insn; |
| 1831 | + enum relax_state_id rs = RS_NONE; |
| 1832 | + |
| 1833 | + contents = retrieve_contents(abfd, sec, info->keep_memory); |
| 1834 | + if (!contents) |
| 1835 | + return RS_ERROR; |
| 1836 | + |
| 1837 | + insn = bfd_get_32(abfd, contents + rela->r_offset); |
| 1838 | + if ((insn & RCALL2_MASK) == RCALL2_OPCODE) |
| 1839 | + rs = RS_RCALL2; |
| 1840 | + else if ((insn & BRAL_MASK) == BRAL_OPCODE) |
| 1841 | + /* Optimizing bral -> rjmp gets us into all kinds of |
| 1842 | + trouble with jump tables. Better not do it. */ |
| 1843 | + rs = RS_NONE; |
| 1844 | + else if ((insn & BRC2_MASK) == BRC2_OPCODE) |
| 1845 | + rs = RS_BRC2; |
| 1846 | + |
| 1847 | + release_contents(sec, contents); |
| 1848 | + |
| 1849 | + return rs; |
| 1850 | +} |
| 1851 | + |
| 1852 | +static enum relax_state_id |
| 1853 | +get_initial_relax_state(bfd *abfd, asection *sec, struct bfd_link_info *info, |
| 1854 | + const Elf_Internal_Rela *rela) |
| 1855 | +{ |
| 1856 | + switch (ELF_R_TYPE(rela->r_info)) |
| 1857 | + { |
| 1858 | + case R_AVR32_GOTCALL: |
| 1859 | + return RS_PIC_CALL; |
| 1860 | + case R_AVR32_GOT18SW: |
| 1861 | + return RS_PIC_MCALL; |
| 1862 | + case R_AVR32_LDA_GOT: |
| 1863 | + return RS_PIC_LDA; |
| 1864 | + case R_AVR32_GOT16S: |
| 1865 | + return RS_PIC_LDW4; |
| 1866 | + case R_AVR32_CPCALL: |
| 1867 | + return RS_NOPIC_MCALL; |
| 1868 | + case R_AVR32_16_CP: |
| 1869 | + return RS_NOPIC_LDW4; |
| 1870 | + case R_AVR32_9W_CP: |
| 1871 | + return RS_NOPIC_LDDPC; |
| 1872 | + case R_AVR32_ALIGN: |
| 1873 | + return RS_ALIGN; |
| 1874 | + case R_AVR32_32_CPENT: |
| 1875 | + return RS_CPENT; |
| 1876 | + case R_AVR32_22H_PCREL: |
| 1877 | + return get_pcrel22_relax_state(abfd, sec, info, rela); |
| 1878 | + case R_AVR32_9H_PCREL: |
| 1879 | + return RS_BRC1; |
| 1880 | + default: |
| 1881 | + return RS_NONE; |
| 1882 | + } |
| 1883 | +} |
| 1884 | + |
| 1885 | +static bfd_boolean |
| 1886 | +reloc_is_cpool_ref(const Elf_Internal_Rela *rela) |
| 1887 | +{ |
| 1888 | + switch (ELF_R_TYPE(rela->r_info)) |
| 1889 | + { |
| 1890 | + case R_AVR32_CPCALL: |
| 1891 | + case R_AVR32_16_CP: |
| 1892 | + case R_AVR32_9W_CP: |
| 1893 | + return TRUE; |
| 1894 | + default: |
| 1895 | + return FALSE; |
| 1896 | + } |
| 1897 | +} |
| 1898 | + |
| 1899 | +static struct fragment * |
| 1900 | +new_frag(bfd *abfd ATTRIBUTE_UNUSED, asection *sec, |
| 1901 | + struct avr32_relax_data *rd, enum relax_state_id state, |
| 1902 | + Elf_Internal_Rela *rela) |
| 1903 | +{ |
| 1904 | + struct fragment *frag; |
| 1905 | + bfd_size_type r_size; |
| 1906 | + bfd_vma r_offset; |
| 1907 | + unsigned int i = rd->frag_count; |
| 1908 | + |
| 1909 | + BFD_ASSERT(state >= RS_NONE && state < RS_MAX); |
| 1910 | + |
| 1911 | + rd->frag_count++; |
| 1912 | + frag = bfd_realloc(rd->frag, sizeof(struct fragment) * rd->frag_count); |
| 1913 | + if (!frag) |
| 1914 | + return NULL; |
| 1915 | + rd->frag = frag; |
| 1916 | + |
| 1917 | + frag += i; |
| 1918 | + memset(frag, 0, sizeof(struct fragment)); |
| 1919 | + |
| 1920 | + if (state == RS_ALIGN) |
| 1921 | + r_size = (((rela->r_offset + (1 << rela->r_addend) - 1) |
| 1922 | + & ~((1 << rela->r_addend) - 1)) - rela->r_offset); |
| 1923 | + else |
| 1924 | + r_size = relax_state[state].size; |
| 1925 | + |
| 1926 | + if (rela) |
| 1927 | + r_offset = rela->r_offset; |
| 1928 | + else |
| 1929 | + r_offset = sec->size; |
| 1930 | + |
| 1931 | + if (i == 0) |
| 1932 | + { |
| 1933 | + frag->offset = 0; |
| 1934 | + frag->size = r_offset + r_size; |
| 1935 | + } |
| 1936 | + else |
| 1937 | + { |
| 1938 | + frag->offset = rd->frag[i - 1].offset + rd->frag[i - 1].size; |
| 1939 | + frag->size = r_offset + r_size - frag->offset; |
| 1940 | + } |
| 1941 | + |
| 1942 | + if (state != RS_CPENT) |
| 1943 | + /* Make sure we don't discard this frag */ |
| 1944 | + frag->refcount = 1; |
| 1945 | + |
| 1946 | + frag->initial_state = frag->state = state; |
| 1947 | + frag->rela = rela; |
| 1948 | + |
| 1949 | + return frag; |
| 1950 | +} |
| 1951 | + |
| 1952 | +static struct fragment * |
| 1953 | +find_frag(asection *sec, bfd_vma offset) |
| 1954 | +{ |
| 1955 | + struct fragment *first, *last; |
| 1956 | + struct avr32_relax_data *rd = avr32_relax_data(sec); |
| 1957 | + |
| 1958 | + if (rd->frag_count == 0) |
| 1959 | + return NULL; |
| 1960 | + |
| 1961 | + first = &rd->frag[0]; |
| 1962 | + last = &rd->frag[rd->frag_count - 1]; |
| 1963 | + |
| 1964 | + /* This may be a reloc referencing the end of a section. The last |
| 1965 | + frag will never have a reloc associated with it, so its size will |
| 1966 | + never change, thus the offset adjustment of the last frag will |
| 1967 | + always be the same as the offset adjustment of the end of the |
| 1968 | + section. */ |
| 1969 | + if (offset == sec->size) |
| 1970 | + { |
| 1971 | + BFD_ASSERT(last->offset + last->size == sec->size); |
| 1972 | + BFD_ASSERT(!last->rela); |
| 1973 | + return last; |
| 1974 | + } |
| 1975 | + |
| 1976 | + while (first <= last) |
| 1977 | + { |
| 1978 | + struct fragment *mid; |
| 1979 | + |
| 1980 | + mid = (last - first) / 2 + first; |
| 1981 | + if ((mid->offset + mid->size) <= offset) |
| 1982 | + first = mid + 1; |
| 1983 | + else if (mid->offset > offset) |
| 1984 | + last = mid - 1; |
| 1985 | + else |
| 1986 | + return mid; |
| 1987 | + } |
| 1988 | + |
| 1989 | + return NULL; |
| 1990 | +} |
| 1991 | + |
| 1992 | +/* Look through all relocs in a section and determine if any relocs |
| 1993 | + may be affected by relaxation in other sections. If so, allocate |
| 1994 | + an array of additional relocation data which links the affected |
| 1995 | + relocations to the frag(s) where the relaxation may occur. |
| 1996 | + |
| 1997 | + This function also links cpool references to cpool entries and |
| 1998 | + increments the refcount of the latter when this happens. */ |
| 1999 | + |
| 2000 | +static bfd_boolean |
| 2001 | +allocate_reloc_data(bfd *abfd, asection *sec, Elf_Internal_Rela *relocs, |
| 2002 | + struct bfd_link_info *info) |
| 2003 | +{ |
| 2004 | + Elf_Internal_Shdr *symtab_hdr; |
| 2005 | + Elf_Internal_Sym *isymbuf = NULL; |
| 2006 | + struct avr32_relax_data *rd; |
| 2007 | + unsigned int i; |
| 2008 | + bfd_boolean ret = FALSE; |
| 2009 | + |
| 2010 | + symtab_hdr = &elf_tdata(abfd)->symtab_hdr; |
| 2011 | + rd = avr32_relax_data(sec); |
| 2012 | + |
| 2013 | + RDBG("%s<%s>: allocate_reloc_data\n", abfd->filename, sec->name); |
| 2014 | + |
| 2015 | + for (i = 0; i < sec->reloc_count; i++) |
| 2016 | + { |
| 2017 | + Elf_Internal_Rela *rel = &relocs[i]; |
| 2018 | + asection *sym_sec; |
| 2019 | + unsigned long r_symndx; |
| 2020 | + bfd_vma sym_value; |
| 2021 | + |
| 2022 | + if (!rel->r_addend && ELF_R_TYPE(rel->r_info) != R_AVR32_DIFF32 |
| 2023 | + && !reloc_is_cpool_ref(rel)) |
| 2024 | + continue; |
| 2025 | + |
| 2026 | + r_symndx = ELF_R_SYM(rel->r_info); |
| 2027 | + |
| 2028 | + if (r_symndx < symtab_hdr->sh_info) |
| 2029 | + { |
| 2030 | + Elf_Internal_Sym *isym; |
| 2031 | + |
| 2032 | + if (!isymbuf) |
| 2033 | + isymbuf = retrieve_local_syms(abfd, info->keep_memory); |
| 2034 | + if (!isymbuf) |
| 2035 | + return FALSE; |
| 2036 | + |
| 2037 | + isym = &isymbuf[r_symndx]; |
| 2038 | + sym_sec = bfd_section_from_elf_index(abfd, isym->st_shndx); |
| 2039 | + sym_value = isym->st_value; |
| 2040 | + } |
| 2041 | + else |
| 2042 | + { |
| 2043 | + struct elf_link_hash_entry *h; |
| 2044 | + |
| 2045 | + h = elf_sym_hashes(abfd)[r_symndx - symtab_hdr->sh_info]; |
| 2046 | + |
| 2047 | + while (h->root.type == bfd_link_hash_indirect |
| 2048 | + || h->root.type == bfd_link_hash_warning) |
| 2049 | + h = (struct elf_link_hash_entry *)h->root.u.i.link; |
| 2050 | + |
| 2051 | + if (h->root.type != bfd_link_hash_defined |
| 2052 | + && h->root.type != bfd_link_hash_defweak) |
| 2053 | + continue; |
| 2054 | + |
| 2055 | + sym_sec = h->root.u.def.section; |
| 2056 | + sym_value = h->root.u.def.value; |
| 2057 | + } |
| 2058 | + |
| 2059 | + if (sym_sec && avr32_relax_data(sym_sec)->is_relaxable) |
| 2060 | + { |
| 2061 | + bfd_size_type size; |
| 2062 | + struct fragment *frag; |
| 2063 | + |
| 2064 | + if (!rd->reloc_data) |
| 2065 | + { |
| 2066 | + size = sizeof(struct avr32_reloc_data) * sec->reloc_count; |
| 2067 | + rd->reloc_data = bfd_zalloc(abfd, size); |
| 2068 | + if (!rd->reloc_data) |
| 2069 | + goto out; |
| 2070 | + } |
| 2071 | + |
| 2072 | + RDBG("[%3d] 0x%04lx: target: 0x%lx + 0x%lx", |
| 2073 | + i, rel->r_offset, sym_value, rel->r_addend); |
| 2074 | + |
| 2075 | + frag = find_frag(sym_sec, sym_value + rel->r_addend); |
| 2076 | + BFD_ASSERT(frag); |
| 2077 | + rd->reloc_data[i].add_frag = frag; |
| 2078 | + |
| 2079 | + RDBG(" -> %s<%s>:%04lx\n", sym_sec->owner->filename, sym_sec->name, |
| 2080 | + frag->rela ? frag->rela->r_offset : sym_sec->size); |
| 2081 | + |
| 2082 | + if (reloc_is_cpool_ref(rel)) |
| 2083 | + { |
| 2084 | + BFD_ASSERT(ELF_R_TYPE(frag->rela->r_info) == R_AVR32_32_CPENT); |
| 2085 | + frag->refcount++; |
| 2086 | + } |
| 2087 | + |
| 2088 | + if (ELF_R_TYPE(rel->r_info) == R_AVR32_DIFF32) |
| 2089 | + { |
| 2090 | + bfd_byte *contents; |
| 2091 | + bfd_signed_vma diff; |
| 2092 | + |
| 2093 | + contents = retrieve_contents(abfd, sec, info->keep_memory); |
| 2094 | + if (!contents) |
| 2095 | + goto out; |
| 2096 | + |
| 2097 | + diff = bfd_get_signed_32(abfd, contents + rel->r_offset); |
| 2098 | + frag = find_frag(sym_sec, sym_value + rel->r_addend + diff); |
| 2099 | + BFD_ASSERT(frag); |
| 2100 | + rd->reloc_data[i].sub_frag = frag; |
| 2101 | + |
| 2102 | + release_contents(sec, contents); |
| 2103 | + } |
| 2104 | + } |
| 2105 | + } |
| 2106 | + |
| 2107 | + ret = TRUE; |
| 2108 | + |
| 2109 | + out: |
| 2110 | + release_local_syms(abfd, isymbuf); |
| 2111 | + return ret; |
| 2112 | +} |
| 2113 | + |
| 2114 | +static bfd_boolean |
| 2115 | +global_sym_set_frag(struct elf_avr32_link_hash_entry *havr, |
| 2116 | + struct bfd_link_info *info ATTRIBUTE_UNUSED) |
| 2117 | +{ |
| 2118 | + struct fragment *frag; |
| 2119 | + asection *sec; |
| 2120 | + |
| 2121 | + if (havr->root.root.type != bfd_link_hash_defined |
| 2122 | + && havr->root.root.type != bfd_link_hash_defweak) |
| 2123 | + return TRUE; |
| 2124 | + |
| 2125 | + sec = havr->root.root.u.def.section; |
| 2126 | + if (bfd_is_const_section(sec) |
| 2127 | + || !avr32_relax_data(sec)->is_relaxable) |
| 2128 | + return TRUE; |
| 2129 | + |
| 2130 | + frag = find_frag(sec, havr->root.root.u.def.value); |
| 2131 | + if (!frag) |
| 2132 | + { |
| 2133 | + unsigned int i; |
| 2134 | + struct avr32_relax_data *rd = avr32_relax_data(sec); |
| 2135 | + |
| 2136 | + RDBG("In %s: No frag for %s <%s+%lu> (limit %lu)\n", |
| 2137 | + sec->owner->filename, havr->root.root.root.string, |
| 2138 | + sec->name, havr->root.root.u.def.value, sec->size); |
| 2139 | + for (i = 0; i < rd->frag_count; i++) |
| 2140 | + RDBG(" %8lu - %8lu\n", rd->frag[i].offset, |
| 2141 | + rd->frag[i].offset + rd->frag[i].size); |
| 2142 | + } |
| 2143 | + BFD_ASSERT(frag); |
| 2144 | + |
| 2145 | + havr->sym_frag = frag; |
| 2146 | + return TRUE; |
| 2147 | +} |
| 2148 | + |
| 2149 | +static bfd_boolean |
| 2150 | +analyze_relocations(struct bfd_link_info *info) |
| 2151 | +{ |
| 2152 | + bfd *abfd; |
| 2153 | + asection *sec; |
| 2154 | + |
| 2155 | + /* Divide all relaxable sections into fragments */ |
| 2156 | + for (abfd = info->input_bfds; abfd; abfd = abfd->link_next) |
| 2157 | + { |
| 2158 | + if (!(elf_elfheader(abfd)->e_flags & EF_AVR32_LINKRELAX)) |
| 2159 | + { |
| 2160 | + if (!(*info->callbacks->warning) |
| 2161 | + (info, _("input is not relaxable"), NULL, abfd, NULL, 0)) |
| 2162 | + return FALSE; |
| 2163 | + continue; |
| 2164 | + } |
| 2165 | + |
| 2166 | + for (sec = abfd->sections; sec; sec = sec->next) |
| 2167 | + { |
| 2168 | + struct avr32_relax_data *rd; |
| 2169 | + struct fragment *frag; |
| 2170 | + Elf_Internal_Rela *relocs; |
| 2171 | + unsigned int i; |
| 2172 | + bfd_boolean ret = TRUE; |
| 2173 | + |
| 2174 | + if (!(sec->flags & SEC_RELOC) || sec->reloc_count == 0) |
| 2175 | + continue; |
| 2176 | + |
| 2177 | + rd = avr32_relax_data(sec); |
| 2178 | + |
| 2179 | + relocs = retrieve_internal_relocs(abfd, sec, info->keep_memory); |
| 2180 | + if (!relocs) |
| 2181 | + return FALSE; |
| 2182 | + |
| 2183 | + qsort(relocs, sec->reloc_count, sizeof(Elf_Internal_Rela), |
| 2184 | + internal_reloc_compare); |
| 2185 | + |
| 2186 | + for (i = 0; i < sec->reloc_count; i++) |
| 2187 | + { |
| 2188 | + enum relax_state_id state; |
| 2189 | + |
| 2190 | + ret = FALSE; |
| 2191 | + state = get_initial_relax_state(abfd, sec, info, &relocs[i]); |
| 2192 | + if (state == RS_ERROR) |
| 2193 | + break; |
| 2194 | + |
| 2195 | + if (state) |
| 2196 | + { |
| 2197 | + frag = new_frag(abfd, sec, rd, state, &relocs[i]); |
| 2198 | + if (!frag) |
| 2199 | + break; |
| 2200 | + |
| 2201 | + pin_internal_relocs(sec, relocs); |
| 2202 | + rd->is_relaxable = TRUE; |
| 2203 | + } |
| 2204 | + |
| 2205 | + ret = TRUE; |
| 2206 | + } |
| 2207 | + |
| 2208 | + release_internal_relocs(sec, relocs); |
| 2209 | + if (!ret) |
| 2210 | + return ret; |
| 2211 | + |
| 2212 | + if (rd->is_relaxable) |
| 2213 | + { |
| 2214 | + frag = new_frag(abfd, sec, rd, RS_NONE, NULL); |
| 2215 | + if (!frag) |
| 2216 | + return FALSE; |
| 2217 | + } |
| 2218 | + } |
| 2219 | + } |
| 2220 | + |
| 2221 | + /* Link each global symbol to the fragment where it's defined. */ |
| 2222 | + elf_link_hash_traverse(elf_hash_table(info), global_sym_set_frag, info); |
| 2223 | + |
| 2224 | + /* Do the same for local symbols. */ |
| 2225 | + for (abfd = info->input_bfds; abfd; abfd = abfd->link_next) |
| 2226 | + { |
| 2227 | + Elf_Internal_Sym *isymbuf, *isym; |
| 2228 | + struct fragment **local_sym_frag; |
| 2229 | + unsigned int i, sym_count; |
| 2230 | + |
| 2231 | + sym_count = elf_tdata(abfd)->symtab_hdr.sh_info; |
| 2232 | + if (sym_count == 0) |
| 2233 | + continue; |
| 2234 | + |
| 2235 | + local_sym_frag = bfd_zalloc(abfd, sym_count * sizeof(struct fragment *)); |
| 2236 | + if (!local_sym_frag) |
| 2237 | + return FALSE; |
| 2238 | + elf_tdata(abfd)->local_sym_frag = local_sym_frag; |
| 2239 | + |
| 2240 | + isymbuf = retrieve_local_syms(abfd, info->keep_memory); |
| 2241 | + if (!isymbuf) |
| 2242 | + return FALSE; |
| 2243 | + |
| 2244 | + for (i = 0; i < sym_count; i++) |
| 2245 | + { |
| 2246 | + struct avr32_relax_data *rd; |
| 2247 | + struct fragment *frag; |
| 2248 | + asection *sec; |
| 2249 | + |
| 2250 | + isym = &isymbuf[i]; |
| 2251 | + |
| 2252 | + sec = bfd_section_from_elf_index(abfd, isym->st_shndx); |
| 2253 | + if (!sec) |
| 2254 | + continue; |
| 2255 | + |
| 2256 | + rd = avr32_relax_data(sec); |
| 2257 | + if (!rd->is_relaxable) |
| 2258 | + continue; |
| 2259 | + |
| 2260 | + frag = find_frag(sec, isym->st_value); |
| 2261 | + BFD_ASSERT(frag); |
| 2262 | + |
| 2263 | + local_sym_frag[i] = frag; |
| 2264 | + } |
| 2265 | + |
| 2266 | + release_local_syms(abfd, isymbuf); |
| 2267 | + } |
| 2268 | + |
| 2269 | + /* And again for relocs with addends and constant pool references */ |
| 2270 | + for (abfd = info->input_bfds; abfd; abfd = abfd->link_next) |
| 2271 | + for (sec = abfd->sections; sec; sec = sec->next) |
| 2272 | + { |
| 2273 | + Elf_Internal_Rela *relocs; |
| 2274 | + bfd_boolean ret; |
| 2275 | + |
| 2276 | + if (!(sec->flags & SEC_RELOC) || sec->reloc_count == 0) |
| 2277 | + continue; |
| 2278 | + |
| 2279 | + relocs = retrieve_internal_relocs(abfd, sec, info->keep_memory); |
| 2280 | + if (!relocs) |
| 2281 | + return FALSE; |
| 2282 | + |
| 2283 | + ret = allocate_reloc_data(abfd, sec, relocs, info); |
| 2284 | + |
| 2285 | + release_internal_relocs(sec, relocs); |
| 2286 | + if (ret == FALSE) |
| 2287 | + return ret; |
| 2288 | + } |
| 2289 | + |
| 2290 | + return TRUE; |
| 2291 | +} |
| 2292 | + |
| 2293 | +static bfd_boolean |
| 2294 | +rs_is_good_enough(const struct relax_state *rs, struct fragment *frag, |
| 2295 | + bfd_vma symval, bfd_vma addr, struct got_entry *got, |
| 2296 | + struct avr32_reloc_data *ind_data, |
| 2297 | + bfd_signed_vma offset_adjust) |
| 2298 | +{ |
| 2299 | + bfd_signed_vma target = 0; |
| 2300 | + |
| 2301 | + switch (rs->reftype) |
| 2302 | + { |
| 2303 | + case REF_ABSOLUTE: |
| 2304 | + target = symval; |
| 2305 | + break; |
| 2306 | + case REF_PCREL: |
| 2307 | + target = symval - addr; |
| 2308 | + break; |
| 2309 | + case REF_CPOOL: |
| 2310 | + /* cpool frags are always in the same section and always after |
| 2311 | + all frags referring to it. So it's always correct to add in |
| 2312 | + offset_adjust here. */ |
| 2313 | + target = (ind_data->add_frag->offset + ind_data->add_frag->offset_adjust |
| 2314 | + + offset_adjust - frag->offset - frag->offset_adjust); |
| 2315 | + break; |
| 2316 | + case REF_GOT: |
| 2317 | + target = got->offset; |
| 2318 | + break; |
| 2319 | + default: |
| 2320 | + abort(); |
| 2321 | + } |
| 2322 | + |
| 2323 | + if (target >= rs->range_min && target <= rs->range_max) |
| 2324 | + return TRUE; |
| 2325 | + else |
| 2326 | + return FALSE; |
| 2327 | +} |
| 2328 | + |
| 2329 | +static bfd_boolean |
| 2330 | +avr32_size_frags(bfd *abfd, asection *sec, struct bfd_link_info *info) |
| 2331 | +{ |
| 2332 | + struct elf_avr32_link_hash_table *htab; |
| 2333 | + struct avr32_relax_data *rd; |
| 2334 | + Elf_Internal_Shdr *symtab_hdr; |
| 2335 | + Elf_Internal_Rela *relocs = NULL; |
| 2336 | + Elf_Internal_Sym *isymbuf = NULL; |
| 2337 | + struct got_entry **local_got_ents; |
| 2338 | + struct fragment **local_sym_frag; |
| 2339 | + bfd_boolean ret = FALSE; |
| 2340 | + bfd_signed_vma delta = 0; |
| 2341 | + unsigned int i; |
| 2342 | + |
| 2343 | + htab = avr32_elf_hash_table(info); |
| 2344 | + rd = avr32_relax_data(sec); |
| 2345 | + |
| 2346 | + if (sec == htab->sgot) |
| 2347 | + { |
| 2348 | + RDBG("Relaxing GOT section (vma: 0x%lx)\n", |
| 2349 | + sec->output_section->vma + sec->output_offset); |
| 2350 | + if (assign_got_offsets(htab)) |
| 2351 | + htab->repeat_pass = TRUE; |
| 2352 | + return TRUE; |
| 2353 | + } |
| 2354 | + |
| 2355 | + if (!rd->is_relaxable) |
| 2356 | + return TRUE; |
| 2357 | + |
| 2358 | + if (!sec->rawsize) |
| 2359 | + sec->rawsize = sec->size; |
| 2360 | + |
| 2361 | + symtab_hdr = &elf_tdata(abfd)->symtab_hdr; |
| 2362 | + relocs = retrieve_internal_relocs(abfd, sec, info->keep_memory); |
| 2363 | + if (!relocs) |
| 2364 | + goto out; |
| 2365 | + |
| 2366 | + isymbuf = retrieve_local_syms(abfd, info->keep_memory); |
| 2367 | + if (!isymbuf) |
| 2368 | + goto out; |
| 2369 | + |
| 2370 | + local_got_ents = elf_local_got_ents(abfd); |
| 2371 | + local_sym_frag = elf_tdata(abfd)->local_sym_frag; |
| 2372 | + |
| 2373 | + RDBG("size_frags: %s<%s>\n vma: 0x%08lx, size: 0x%08lx\n", |
| 2374 | + abfd->filename, sec->name, |
| 2375 | + sec->output_section->vma + sec->output_offset, sec->size); |
| 2376 | + |
| 2377 | + for (i = 0; i < rd->frag_count; i++) |
| 2378 | + { |
| 2379 | + struct fragment *frag = &rd->frag[i]; |
| 2380 | + struct avr32_reloc_data *r_data = NULL, *ind_data = NULL; |
| 2381 | + const struct relax_state *state, *next_state; |
| 2382 | + struct fragment *target_frag = NULL; |
| 2383 | + asection *sym_sec = NULL; |
| 2384 | + Elf_Internal_Rela *rela; |
| 2385 | + struct got_entry *got; |
| 2386 | + bfd_vma symval, r_offset, addend, addr; |
| 2387 | + bfd_signed_vma size_adjust = 0, distance; |
| 2388 | + unsigned long r_symndx; |
| 2389 | + bfd_boolean defined = TRUE, dynamic = FALSE; |
| 2390 | + unsigned char sym_type; |
| 2391 | + |
| 2392 | + frag->offset_adjust += delta; |
| 2393 | + state = next_state = &relax_state[frag->state]; |
| 2394 | + rela = frag->rela; |
| 2395 | + |
| 2396 | + BFD_ASSERT(state->id == frag->state); |
| 2397 | + |
| 2398 | + RDBG(" 0x%04lx%c%d: %s [size %ld]", rela ? rela->r_offset : sec->rawsize, |
| 2399 | + (frag->offset_adjust < 0)?'-':'+', |
| 2400 | + abs(frag->offset_adjust), state->name, state->size); |
| 2401 | + |
| 2402 | + if (!rela) |
| 2403 | + { |
| 2404 | + RDBG(": no reloc, ignoring\n"); |
| 2405 | + continue; |
| 2406 | + } |
| 2407 | + |
| 2408 | + BFD_ASSERT((unsigned int)(rela - relocs) < sec->reloc_count); |
| 2409 | + BFD_ASSERT(state != RS_NONE); |
| 2410 | + |
| 2411 | + r_offset = rela->r_offset + frag->offset_adjust; |
| 2412 | + addr = sec->output_section->vma + sec->output_offset + r_offset; |
| 2413 | + |
| 2414 | + switch (frag->state) |
| 2415 | + { |
| 2416 | + case RS_ALIGN: |
| 2417 | + size_adjust = ((addr + (1 << rela->r_addend) - 1) |
| 2418 | + & ~((1 << rela->r_addend) - 1)); |
| 2419 | + size_adjust -= (sec->output_section->vma + sec->output_offset |
| 2420 | + + frag->offset + frag->offset_adjust |
| 2421 | + + frag->size + frag->size_adjust); |
| 2422 | + |
| 2423 | + RDBG(": adjusting size %lu -> %lu\n", frag->size + frag->size_adjust, |
| 2424 | + frag->size + frag->size_adjust + size_adjust); |
| 2425 | + break; |
| 2426 | + |
| 2427 | + case RS_CPENT: |
| 2428 | + if (frag->refcount == 0 && frag->size_adjust == 0) |
| 2429 | + { |
| 2430 | + RDBG(": discarding frag\n"); |
| 2431 | + size_adjust = -4; |
| 2432 | + } |
| 2433 | + else if (frag->refcount > 0 && frag->size_adjust < 0) |
| 2434 | + { |
| 2435 | + RDBG(": un-discarding frag\n"); |
| 2436 | + size_adjust = 4; |
| 2437 | + } |
| 2438 | + break; |
| 2439 | + |
| 2440 | + default: |
| 2441 | + if (rd->reloc_data) |
| 2442 | + r_data = &rd->reloc_data[frag->rela - relocs]; |
| 2443 | + |
| 2444 | + /* If this is a cpool reference, we want the symbol that the |
| 2445 | + cpool entry refers to, not the symbol for the cpool entry |
| 2446 | + itself, as we already know what frag it's in. */ |
| 2447 | + if (relax_state[frag->initial_state].reftype == REF_CPOOL) |
| 2448 | + { |
| 2449 | + Elf_Internal_Rela *irela = r_data->add_frag->rela; |
| 2450 | + |
| 2451 | + r_symndx = ELF_R_SYM(irela->r_info); |
| 2452 | + addend = irela->r_addend; |
| 2453 | + |
| 2454 | + /* The constant pool must be in the same section as the |
| 2455 | + reloc referring to it. */ |
| 2456 | + BFD_ASSERT((unsigned long)(irela - relocs) < sec->reloc_count); |
| 2457 | + |
| 2458 | + ind_data = r_data; |
| 2459 | + r_data = &rd->reloc_data[irela - relocs]; |
| 2460 | + } |
| 2461 | + else |
| 2462 | + { |
| 2463 | + r_symndx = ELF_R_SYM(rela->r_info); |
| 2464 | + addend = rela->r_addend; |
| 2465 | + } |
| 2466 | + |
| 2467 | + /* Get the value of the symbol referred to by the reloc. */ |
| 2468 | + if (r_symndx < symtab_hdr->sh_info) |
| 2469 | + { |
| 2470 | + Elf_Internal_Sym *isym; |
| 2471 | + |
| 2472 | + isym = isymbuf + r_symndx; |
| 2473 | + symval = 0; |
| 2474 | + |
| 2475 | + RDBG(" local sym %lu: ", r_symndx); |
| 2476 | + |
| 2477 | + if (isym->st_shndx == SHN_UNDEF) |
| 2478 | + defined = FALSE; |
| 2479 | + else if (isym->st_shndx == SHN_ABS) |
| 2480 | + sym_sec = bfd_abs_section_ptr; |
| 2481 | + else if (isym->st_shndx == SHN_COMMON) |
| 2482 | + sym_sec = bfd_com_section_ptr; |
| 2483 | + else |
| 2484 | + sym_sec = bfd_section_from_elf_index(abfd, isym->st_shndx); |
| 2485 | + |
| 2486 | + symval = isym->st_value; |
| 2487 | + sym_type = ELF_ST_TYPE(isym->st_info); |
| 2488 | + target_frag = local_sym_frag[r_symndx]; |
| 2489 | + |
| 2490 | + if (local_got_ents) |
| 2491 | + got = local_got_ents[r_symndx]; |
| 2492 | + else |
| 2493 | + got = NULL; |
| 2494 | + } |
| 2495 | + else |
| 2496 | + { |
| 2497 | + /* Global symbol */ |
| 2498 | + unsigned long index; |
| 2499 | + struct elf_link_hash_entry *h; |
| 2500 | + struct elf_avr32_link_hash_entry *havr; |
| 2501 | + |
| 2502 | + index = r_symndx - symtab_hdr->sh_info; |
| 2503 | + h = elf_sym_hashes(abfd)[index]; |
| 2504 | + BFD_ASSERT(h != NULL); |
| 2505 | + |
| 2506 | + while (h->root.type == bfd_link_hash_indirect |
| 2507 | + || h->root.type == bfd_link_hash_warning) |
| 2508 | + h = (struct elf_link_hash_entry *)h->root.u.i.link; |
| 2509 | + |
| 2510 | + havr = (struct elf_avr32_link_hash_entry *)h; |
| 2511 | + got = h->got.glist; |
| 2512 | + |
| 2513 | + symval = 0; |
| 2514 | + |
| 2515 | + RDBG(" %s: ", h->root.root.string); |
| 2516 | + |
| 2517 | + if (h->root.type != bfd_link_hash_defined |
| 2518 | + && h->root.type != bfd_link_hash_defweak) |
| 2519 | + { |
| 2520 | + RDBG("(undef)"); |
| 2521 | + defined = FALSE; |
| 2522 | + } |
| 2523 | + else if ((info->shared && !info->symbolic && h->dynindx != -1) |
| 2524 | + || (htab->root.dynamic_sections_created |
| 2525 | + && h->def_dynamic && !h->def_regular)) |
| 2526 | + { |
| 2527 | + RDBG("(dynamic)"); |
| 2528 | + dynamic = TRUE; |
| 2529 | + sym_sec = h->root.u.def.section; |
| 2530 | + } |
| 2531 | + else |
| 2532 | + { |
| 2533 | + sym_sec = h->root.u.def.section; |
| 2534 | + symval = h->root.u.def.value; |
| 2535 | + target_frag = havr->sym_frag; |
| 2536 | + } |
| 2537 | + |
| 2538 | + sym_type = h->type; |
| 2539 | + } |
| 2540 | + |
| 2541 | + /* Thanks to elf32-ppc for this one. */ |
| 2542 | + if (sym_sec && sym_sec->sec_info_type == ELF_INFO_TYPE_MERGE) |
| 2543 | + { |
| 2544 | + /* At this stage in linking, no SEC_MERGE symbol has been |
| 2545 | + adjusted, so all references to such symbols need to be |
| 2546 | + passed through _bfd_merged_section_offset. (Later, in |
| 2547 | + relocate_section, all SEC_MERGE symbols *except* for |
| 2548 | + section symbols have been adjusted.) |
| 2549 | + |
| 2550 | + SEC_MERGE sections are not relaxed by us, as they |
| 2551 | + shouldn't contain any code. */ |
| 2552 | + |
| 2553 | + BFD_ASSERT(!target_frag && !(r_data && r_data->add_frag)); |
| 2554 | + |
| 2555 | + /* gas may reduce relocations against symbols in SEC_MERGE |
| 2556 | + sections to a relocation against the section symbol when |
| 2557 | + the original addend was zero. When the reloc is against |
| 2558 | + a section symbol we should include the addend in the |
| 2559 | + offset passed to _bfd_merged_section_offset, since the |
| 2560 | + location of interest is the original symbol. On the |
| 2561 | + other hand, an access to "sym+addend" where "sym" is not |
| 2562 | + a section symbol should not include the addend; Such an |
| 2563 | + access is presumed to be an offset from "sym"; The |
| 2564 | + location of interest is just "sym". */ |
| 2565 | + RDBG("\n MERGE: %s: 0x%lx+0x%lx+0x%lx -> ", |
| 2566 | + (sym_type == STT_SECTION)?"section":"not section", |
| 2567 | + sym_sec->output_section->vma + sym_sec->output_offset, |
| 2568 | + symval, addend); |
| 2569 | + |
| 2570 | + if (sym_type == STT_SECTION) |
| 2571 | + symval += addend; |
| 2572 | + |
| 2573 | + symval = (_bfd_merged_section_offset |
| 2574 | + (abfd, &sym_sec, |
| 2575 | + elf_section_data(sym_sec)->sec_info, symval)); |
| 2576 | + |
| 2577 | + if (sym_type != STT_SECTION) |
| 2578 | + symval += addend; |
| 2579 | + } |
| 2580 | + else |
| 2581 | + symval += addend; |
| 2582 | + |
| 2583 | + if (defined && !dynamic) |
| 2584 | + { |
| 2585 | + RDBG("0x%lx+0x%lx", |
| 2586 | + sym_sec->output_section->vma + sym_sec->output_offset, |
| 2587 | + symval); |
| 2588 | + symval += sym_sec->output_section->vma + sym_sec->output_offset; |
| 2589 | + } |
| 2590 | + |
| 2591 | + if (r_data && r_data->add_frag) |
| 2592 | + /* If the add_frag pointer is set, it means that this reloc |
| 2593 | + has an addend that may be affected by relaxation. */ |
| 2594 | + target_frag = r_data->add_frag; |
| 2595 | + |
| 2596 | + if (target_frag) |
| 2597 | + { |
| 2598 | + symval += target_frag->offset_adjust; |
| 2599 | + |
| 2600 | + /* If target_frag comes after this frag in the same |
| 2601 | + section, we should assume that it will be moved by |
| 2602 | + the same amount we are. */ |
| 2603 | + if ((target_frag - rd->frag) < (int)rd->frag_count |
| 2604 | + && target_frag > frag) |
| 2605 | + symval += delta; |
| 2606 | + } |
| 2607 | + |
| 2608 | + distance = symval - addr; |
| 2609 | + |
| 2610 | + /* First, try to make a direct reference. If the symbol is |
| 2611 | + dynamic or undefined, we must take care not to change its |
| 2612 | + reference type, that is, we can't make it direct. |
| 2613 | + |
| 2614 | + Also, it seems like some sections may actually be resized |
| 2615 | + after the relaxation code is done, so we can't really |
| 2616 | + trust that our "distance" is correct. There's really no |
| 2617 | + easy solution to this problem, so we'll just disallow |
| 2618 | + direct references to SEC_DATA sections. |
| 2619 | + |
| 2620 | + Oh, and .bss isn't actually SEC_DATA, so we disallow |
| 2621 | + !SEC_HAS_CONTENTS as well. */ |
| 2622 | + if (!dynamic && defined |
| 2623 | + && (htab->direct_data_refs |
| 2624 | + || (!(sym_sec->flags & SEC_DATA) |
| 2625 | + && (sym_sec->flags & SEC_HAS_CONTENTS))) |
| 2626 | + && next_state->direct) |
| 2627 | + { |
| 2628 | + next_state = &relax_state[next_state->direct]; |
| 2629 | + RDBG(" D-> %s", next_state->name); |
| 2630 | + } |
| 2631 | + |
| 2632 | + /* Iterate backwards until we find a state that fits. */ |
| 2633 | + while (next_state->prev |
| 2634 | + && !rs_is_good_enough(next_state, frag, symval, addr, |
| 2635 | + got, ind_data, delta)) |
| 2636 | + { |
| 2637 | + next_state = &relax_state[next_state->prev]; |
| 2638 | + RDBG(" P-> %s", next_state->name); |
| 2639 | + } |
| 2640 | + |
| 2641 | + /* Then try to find the best possible state. */ |
| 2642 | + while (next_state->next) |
| 2643 | + { |
| 2644 | + const struct relax_state *candidate; |
| 2645 | + |
| 2646 | + candidate = &relax_state[next_state->next]; |
| 2647 | + if (!rs_is_good_enough(candidate, frag, symval, addr, got, |
| 2648 | + ind_data, delta)) |
| 2649 | + break; |
| 2650 | + |
| 2651 | + next_state = candidate; |
| 2652 | + RDBG(" N-> %s", next_state->name); |
| 2653 | + } |
| 2654 | + |
| 2655 | + RDBG(" [size %ld]\n", next_state->size); |
| 2656 | + |
| 2657 | + BFD_ASSERT(next_state->id); |
| 2658 | + BFD_ASSERT(!dynamic || next_state->reftype == REF_GOT); |
| 2659 | + |
| 2660 | + size_adjust = next_state->size - state->size; |
| 2661 | + |
| 2662 | + /* There's a theoretical possibility that shrinking one frag |
| 2663 | + may cause another to grow, which may cause the first one to |
| 2664 | + grow as well, and we're back where we started. Avoid this |
| 2665 | + scenario by disallowing a frag that has grown to ever |
| 2666 | + shrink again. */ |
| 2667 | + if (state->reftype == REF_GOT && next_state->reftype != REF_GOT) |
| 2668 | + { |
| 2669 | + if (frag->has_grown) |
| 2670 | + next_state = state; |
| 2671 | + else |
| 2672 | + unref_got_entry(htab, got); |
| 2673 | + } |
| 2674 | + else if (state->reftype != REF_GOT && next_state->reftype == REF_GOT) |
| 2675 | + { |
| 2676 | + ref_got_entry(htab, got); |
| 2677 | + frag->has_grown = TRUE; |
| 2678 | + } |
| 2679 | + else if (state->reftype == REF_CPOOL |
| 2680 | + && next_state->reftype != REF_CPOOL) |
| 2681 | + { |
| 2682 | + if (frag->has_grown) |
| 2683 | + next_state = state; |
| 2684 | + else |
| 2685 | + ind_data->add_frag->refcount--; |
| 2686 | + } |
| 2687 | + else if (state->reftype != REF_CPOOL |
| 2688 | + && next_state->reftype == REF_CPOOL) |
| 2689 | + { |
| 2690 | + ind_data->add_frag->refcount++; |
| 2691 | + frag->has_grown = TRUE; |
| 2692 | + } |
| 2693 | + else |
| 2694 | + { |
| 2695 | + if (frag->has_grown && size_adjust < 0) |
| 2696 | + next_state = state; |
| 2697 | + else if (size_adjust > 0) |
| 2698 | + frag->has_grown = TRUE; |
| 2699 | + } |
| 2700 | + |
| 2701 | + size_adjust = next_state->size - state->size; |
| 2702 | + frag->state = next_state->id; |
| 2703 | + |
| 2704 | + break; |
| 2705 | + } |
| 2706 | + |
| 2707 | + if (size_adjust) |
| 2708 | + htab->repeat_pass = TRUE; |
| 2709 | + |
| 2710 | + frag->size_adjust += size_adjust; |
| 2711 | + sec->size += size_adjust; |
| 2712 | + delta += size_adjust; |
| 2713 | + |
| 2714 | + BFD_ASSERT((frag->offset + frag->offset_adjust |
| 2715 | + + frag->size + frag->size_adjust) |
| 2716 | + == (frag[1].offset + frag[1].offset_adjust + delta)); |
| 2717 | + } |
| 2718 | + |
| 2719 | + ret = TRUE; |
| 2720 | + |
| 2721 | + out: |
| 2722 | + release_local_syms(abfd, isymbuf); |
| 2723 | + release_internal_relocs(sec, relocs); |
| 2724 | + return ret; |
| 2725 | +} |
| 2726 | + |
| 2727 | +static bfd_boolean |
| 2728 | +adjust_global_symbol(struct elf_avr32_link_hash_entry *havr, |
| 2729 | + struct bfd_link_info *info ATTRIBUTE_UNUSED) |
| 2730 | +{ |
| 2731 | + struct elf_link_hash_entry *h = &havr->root; |
| 2732 | + |
| 2733 | + if (havr->sym_frag && (h->root.type == bfd_link_hash_defined |
| 2734 | + || h->root.type == bfd_link_hash_defweak)) |
| 2735 | + { |
| 2736 | + RDBG("adjust_global_symbol: %s 0x%08lx -> 0x%08lx\n", |
| 2737 | + h->root.root.string, h->root.u.def.value, |
| 2738 | + h->root.u.def.value + havr->sym_frag->offset_adjust); |
| 2739 | + h->root.u.def.value += havr->sym_frag->offset_adjust; |
| 2740 | + } |
| 2741 | + return TRUE; |
| 2742 | +} |
| 2743 | + |
| 2744 | +static bfd_boolean |
| 2745 | +adjust_syms(struct bfd_link_info *info) |
| 2746 | +{ |
| 2747 | + struct elf_avr32_link_hash_table *htab; |
| 2748 | + bfd *abfd; |
| 2749 | + |
| 2750 | + htab = avr32_elf_hash_table(info); |
| 2751 | + elf_link_hash_traverse(&htab->root, adjust_global_symbol, info); |
| 2752 | + |
| 2753 | + for (abfd = info->input_bfds; abfd; abfd = abfd->link_next) |
| 2754 | + { |
| 2755 | + Elf_Internal_Sym *isymbuf; |
| 2756 | + struct fragment **local_sym_frag, *frag; |
| 2757 | + unsigned int i, sym_count; |
| 2758 | + |
| 2759 | + sym_count = elf_tdata(abfd)->symtab_hdr.sh_info; |
| 2760 | + if (sym_count == 0) |
| 2761 | + continue; |
| 2762 | + |
| 2763 | + isymbuf = retrieve_local_syms(abfd, info->keep_memory); |
| 2764 | + if (!isymbuf) |
| 2765 | + return FALSE; |
| 2766 | + |
| 2767 | + local_sym_frag = elf_tdata(abfd)->local_sym_frag; |
| 2768 | + |
| 2769 | + for (i = 0; i < sym_count; i++) |
| 2770 | + { |
| 2771 | + frag = local_sym_frag[i]; |
| 2772 | + if (frag) |
| 2773 | + { |
| 2774 | + RDBG("adjust_local_symbol: %s[%u] 0x%08lx -> 0x%08lx\n", |
| 2775 | + abfd->filename, i, isymbuf[i].st_value, |
| 2776 | + isymbuf[i].st_value + frag->offset_adjust); |
| 2777 | + isymbuf[i].st_value += frag->offset_adjust; |
| 2778 | + } |
| 2779 | + } |
| 2780 | + |
| 2781 | + release_local_syms(abfd, isymbuf); |
| 2782 | + } |
| 2783 | + |
| 2784 | + htab->symbols_adjusted = TRUE; |
| 2785 | + return TRUE; |
| 2786 | +} |
| 2787 | + |
| 2788 | +static bfd_boolean |
| 2789 | +adjust_relocs(bfd *abfd, asection *sec, struct bfd_link_info *info) |
| 2790 | +{ |
| 2791 | + struct avr32_relax_data *rd; |
| 2792 | + Elf_Internal_Rela *relocs; |
| 2793 | + Elf_Internal_Shdr *symtab_hdr; |
| 2794 | + unsigned int i; |
| 2795 | + bfd_boolean ret = FALSE; |
| 2796 | + |
| 2797 | + rd = avr32_relax_data(sec); |
| 2798 | + if (!rd->reloc_data) |
| 2799 | + return TRUE; |
| 2800 | + |
| 2801 | + RDBG("adjust_relocs: %s<%s> (count: %u)\n", abfd->filename, sec->name, |
| 2802 | + sec->reloc_count); |
| 2803 | + |
| 2804 | + relocs = retrieve_internal_relocs(abfd, sec, info->keep_memory); |
| 2805 | + if (!relocs) |
| 2806 | + return FALSE; |
| 2807 | + |
| 2808 | + symtab_hdr = &elf_tdata(abfd)->symtab_hdr; |
| 2809 | + |
| 2810 | + for (i = 0; i < sec->reloc_count; i++) |
| 2811 | + { |
| 2812 | + Elf_Internal_Rela *rela = &relocs[i]; |
| 2813 | + struct avr32_reloc_data *r_data = &rd->reloc_data[i]; |
| 2814 | + struct fragment *sym_frag; |
| 2815 | + unsigned long r_symndx; |
| 2816 | + |
| 2817 | + if (r_data->add_frag) |
| 2818 | + { |
| 2819 | + r_symndx = ELF_R_SYM(rela->r_info); |
| 2820 | + |
| 2821 | + if (r_symndx < symtab_hdr->sh_info) |
| 2822 | + sym_frag = elf_tdata(abfd)->local_sym_frag[r_symndx]; |
| 2823 | + else |
| 2824 | + { |
| 2825 | + struct elf_link_hash_entry *h; |
| 2826 | + |
| 2827 | + h = elf_sym_hashes(abfd)[r_symndx - symtab_hdr->sh_info]; |
| 2828 | + |
| 2829 | + while (h->root.type == bfd_link_hash_indirect |
| 2830 | + || h->root.type == bfd_link_hash_warning) |
| 2831 | + h = (struct elf_link_hash_entry *)h->root.u.i.link; |
| 2832 | + |
| 2833 | + BFD_ASSERT(h->root.type == bfd_link_hash_defined |
| 2834 | + || h->root.type == bfd_link_hash_defweak); |
| 2835 | + |
| 2836 | + sym_frag = ((struct elf_avr32_link_hash_entry *)h)->sym_frag; |
| 2837 | + } |
| 2838 | + |
| 2839 | + RDBG(" addend: 0x%08lx -> 0x%08lx\n", |
| 2840 | + rela->r_addend, |
| 2841 | + rela->r_addend + r_data->add_frag->offset_adjust |
| 2842 | + - (sym_frag ? sym_frag->offset_adjust : 0)); |
| 2843 | + |
| 2844 | + /* If this is against a section symbol, we won't find any |
| 2845 | + sym_frag, so we'll just adjust the addend. */ |
| 2846 | + rela->r_addend += r_data->add_frag->offset_adjust; |
| 2847 | + if (sym_frag) |
| 2848 | + rela->r_addend -= sym_frag->offset_adjust; |
| 2849 | + |
| 2850 | + if (r_data->sub_frag) |
| 2851 | + { |
| 2852 | + bfd_byte *contents; |
| 2853 | + bfd_signed_vma diff; |
| 2854 | + |
| 2855 | + contents = retrieve_contents(abfd, sec, info->keep_memory); |
| 2856 | + if (!contents) |
| 2857 | + goto out; |
| 2858 | + |
| 2859 | + /* I realize now that sub_frag is misnamed. It's |
| 2860 | + actually add_frag which is subtracted in this |
| 2861 | + case... */ |
| 2862 | + diff = bfd_get_signed_32(abfd, contents + rela->r_offset); |
| 2863 | + diff += (r_data->sub_frag->offset_adjust |
| 2864 | + - r_data->add_frag->offset_adjust); |
| 2865 | + bfd_put_32(abfd, diff, contents + rela->r_offset); |
| 2866 | + |
| 2867 | + RDBG(" 0x%lx: DIFF32 updated: 0x%lx\n", rela->r_offset, diff); |
| 2868 | + |
| 2869 | + release_contents(sec, contents); |
| 2870 | + } |
| 2871 | + } |
| 2872 | + else |
| 2873 | + BFD_ASSERT(!r_data->sub_frag); |
| 2874 | + } |
| 2875 | + |
| 2876 | + ret = TRUE; |
| 2877 | + |
| 2878 | + out: |
| 2879 | + release_internal_relocs(sec, relocs); |
| 2880 | + return ret; |
| 2881 | +} |
| 2882 | + |
| 2883 | +static bfd_boolean |
| 2884 | +avr32_move_data(bfd *abfd, asection *sec, struct bfd_link_info *info) |
| 2885 | +{ |
| 2886 | + struct elf_avr32_link_hash_table *htab; |
| 2887 | + struct avr32_relax_data *rd; |
| 2888 | + struct fragment *frag, *fragend; |
| 2889 | + Elf_Internal_Rela *relocs = NULL; |
| 2890 | + bfd_byte *contents = NULL; |
| 2891 | + unsigned int i; |
| 2892 | + bfd_boolean ret = FALSE; |
| 2893 | + |
| 2894 | + htab = avr32_elf_hash_table(info); |
| 2895 | + rd = avr32_relax_data(sec); |
| 2896 | + |
| 2897 | + if (!htab->symbols_adjusted) |
| 2898 | + if (!adjust_syms(info)) |
| 2899 | + return FALSE; |
| 2900 | + |
| 2901 | + if (rd->is_relaxable) |
| 2902 | + { |
| 2903 | + /* Resize the section first, so that we can be sure that enough |
| 2904 | + memory is allocated in case the section has grown. */ |
| 2905 | + if (sec->size > sec->rawsize |
| 2906 | + && elf_section_data(sec)->this_hdr.contents) |
| 2907 | + { |
| 2908 | + /* We must not use cached data if the section has grown. */ |
| 2909 | + free(elf_section_data(sec)->this_hdr.contents); |
| 2910 | + elf_section_data(sec)->this_hdr.contents = NULL; |
| 2911 | + } |
| 2912 | + |
| 2913 | + relocs = retrieve_internal_relocs(abfd, sec, info->keep_memory); |
| 2914 | + if (!relocs) |
| 2915 | + goto out; |
| 2916 | + contents = retrieve_contents(abfd, sec, info->keep_memory); |
| 2917 | + if (!contents) |
| 2918 | + goto out; |
| 2919 | + |
| 2920 | + fragend = rd->frag + rd->frag_count; |
| 2921 | + |
| 2922 | + RDBG("move_data: %s<%s>: relocs=%p, contents=%p\n", |
| 2923 | + abfd->filename, sec->name, relocs, contents); |
| 2924 | + |
| 2925 | + /* First, move the data into place. We must take care to move |
| 2926 | + frags in the right order so that we don't accidentally |
| 2927 | + overwrite parts of the next frag. */ |
| 2928 | + for (frag = rd->frag; frag < fragend; frag++) |
| 2929 | + { |
| 2930 | + RDBG(" 0x%08lx%c0x%x: size 0x%lx%c0x%x\n", |
| 2931 | + frag->offset, frag->offset_adjust >= 0 ? '+' : '-', |
| 2932 | + abs(frag->offset_adjust), |
| 2933 | + frag->size, frag->size_adjust >= 0 ? '+' : '-', |
| 2934 | + abs(frag->size_adjust)); |
| 2935 | + if (frag->offset_adjust > 0) |
| 2936 | + { |
| 2937 | + struct fragment *prev = frag - 1; |
| 2938 | + struct fragment *last; |
| 2939 | + |
| 2940 | + for (last = frag; last < fragend && last->offset_adjust > 0; |
| 2941 | + last++) ; |
| 2942 | + |
| 2943 | + if (last == fragend) |
| 2944 | + last--; |
| 2945 | + |
| 2946 | + for (frag = last; frag != prev; frag--) |
| 2947 | + { |
| 2948 | + if (frag->offset_adjust |
| 2949 | + && frag->size + frag->size_adjust > 0) |
| 2950 | + { |
| 2951 | + RDBG("memmove 0x%lx -> 0x%lx (size %lu)\n", |
| 2952 | + frag->offset, frag->offset + frag->offset_adjust, |
| 2953 | + frag->size + frag->size_adjust); |
| 2954 | + memmove(contents + frag->offset + frag->offset_adjust, |
| 2955 | + contents + frag->offset, |
| 2956 | + frag->size + frag->size_adjust); |
| 2957 | + } |
| 2958 | + } |
| 2959 | + frag = last; |
| 2960 | + } |
| 2961 | + else if (frag->offset_adjust && frag->size + frag->size_adjust > 0) |
| 2962 | + { |
| 2963 | + RDBG("memmove 0x%lx -> 0x%lx (size %lu)\n", |
| 2964 | + frag->offset, frag->offset + frag->offset_adjust, |
| 2965 | + frag->size + frag->size_adjust); |
| 2966 | + memmove(contents + frag->offset + frag->offset_adjust, |
| 2967 | + contents + frag->offset, |
| 2968 | + frag->size + frag->size_adjust); |
| 2969 | + } |
| 2970 | + } |
| 2971 | + |
| 2972 | + i = 0; |
| 2973 | + |
| 2974 | + for (frag = rd->frag; frag < fragend; frag++) |
| 2975 | + { |
| 2976 | + const struct relax_state *state, *istate; |
| 2977 | + struct avr32_reloc_data *r_data = NULL; |
| 2978 | + |
| 2979 | + istate = &relax_state[frag->initial_state]; |
| 2980 | + state = &relax_state[frag->state]; |
| 2981 | + |
| 2982 | + if (rd->reloc_data) |
| 2983 | + r_data = &rd->reloc_data[frag->rela - relocs]; |
| 2984 | + |
| 2985 | + BFD_ASSERT((long)(frag->size + frag->size_adjust) >= 0); |
| 2986 | + BFD_ASSERT(state->reftype != REF_CPOOL |
| 2987 | + || r_data->add_frag->refcount > 0); |
| 2988 | + |
| 2989 | + if (istate->reftype == REF_CPOOL && state->reftype != REF_CPOOL) |
| 2990 | + { |
| 2991 | + struct fragment *ifrag; |
| 2992 | + |
| 2993 | + /* An indirect reference through the cpool has been |
| 2994 | + converted to a direct reference. We must update the |
| 2995 | + reloc to point to the symbol itself instead of the |
| 2996 | + constant pool entry. The reloc type will be updated |
| 2997 | + later. */ |
| 2998 | + ifrag = r_data->add_frag; |
| 2999 | + frag->rela->r_info = ifrag->rela->r_info; |
| 3000 | + frag->rela->r_addend = ifrag->rela->r_addend; |
| 3001 | + |
| 3002 | + /* Copy the reloc data so the addend will be adjusted |
| 3003 | + correctly later. */ |
| 3004 | + *r_data = rd->reloc_data[ifrag->rela - relocs]; |
| 3005 | + } |
| 3006 | + |
| 3007 | + /* Move all relocs covered by this frag. */ |
| 3008 | + if (frag->rela) |
| 3009 | + BFD_ASSERT(&relocs[i] <= frag->rela); |
| 3010 | + else |
| 3011 | + BFD_ASSERT((frag + 1) == fragend && frag->state == RS_NONE); |
| 3012 | + |
| 3013 | + if (frag == rd->frag) |
| 3014 | + BFD_ASSERT(i == 0); |
| 3015 | + else |
| 3016 | + BFD_ASSERT(&relocs[i] > frag[-1].rela); |
| 3017 | + |
| 3018 | + /* If non-null, frag->rela is the last relocation in the |
| 3019 | + fragment. frag->rela can only be null in the last |
| 3020 | + fragment, so in that case, we'll just do the rest. */ |
| 3021 | + for (; (i < sec->reloc_count |
| 3022 | + && (!frag->rela || &relocs[i] <= frag->rela)); i++) |
| 3023 | + { |
| 3024 | + RDBG("[%4u] r_offset 0x%08lx -> 0x%08lx\n", i, relocs[i].r_offset, |
| 3025 | + relocs[i].r_offset + frag->offset_adjust); |
| 3026 | + relocs[i].r_offset += frag->offset_adjust; |
| 3027 | + } |
| 3028 | + |
| 3029 | + if (frag->refcount == 0) |
| 3030 | + { |
| 3031 | + /* If this frag is to be discarded, make sure we won't |
| 3032 | + relocate it later on. */ |
| 3033 | + BFD_ASSERT(frag->state == RS_CPENT); |
| 3034 | + frag->rela->r_info = ELF_R_INFO(ELF_R_SYM(frag->rela->r_info), |
| 3035 | + R_AVR32_NONE); |
| 3036 | + } |
| 3037 | + else if (frag->state == RS_ALIGN) |
| 3038 | + { |
| 3039 | + bfd_vma addr, addr_end; |
| 3040 | + |
| 3041 | + addr = frag->rela->r_offset; |
| 3042 | + addr_end = (frag->offset + frag->offset_adjust |
| 3043 | + + frag->size + frag->size_adjust); |
| 3044 | + |
| 3045 | + /* If the section is executable, insert NOPs. |
| 3046 | + Otherwise, insert zeroes. */ |
| 3047 | + if (sec->flags & SEC_CODE) |
| 3048 | + { |
| 3049 | + if (addr & 1) |
| 3050 | + { |
| 3051 | + bfd_put_8(abfd, 0, contents + addr); |
| 3052 | + addr++; |
| 3053 | + } |
| 3054 | + |
| 3055 | + BFD_ASSERT(!((addr_end - addr) & 1)); |
| 3056 | + |
| 3057 | + while (addr < addr_end) |
| 3058 | + { |
| 3059 | + bfd_put_16(abfd, NOP_OPCODE, contents + addr); |
| 3060 | + addr += 2; |
| 3061 | + } |
| 3062 | + } |
| 3063 | + else |
| 3064 | + memset(contents + addr, 0, addr_end - addr); |
| 3065 | + } |
| 3066 | + else if (state->opcode_mask) |
| 3067 | + { |
| 3068 | + bfd_vma insn; |
| 3069 | + |
| 3070 | + /* Update the opcode and the relocation type unless it's a |
| 3071 | + "special" relax state (i.e. RS_NONE, RS_ALIGN or |
| 3072 | + RS_CPENT.), in which case the opcode mask is zero. */ |
| 3073 | + insn = bfd_get_32(abfd, contents + frag->rela->r_offset); |
| 3074 | + insn &= ~state->opcode_mask; |
| 3075 | + insn |= state->opcode; |
| 3076 | + RDBG(" 0x%lx: inserting insn %08lx\n", |
| 3077 | + frag->rela->r_offset, insn); |
| 3078 | + bfd_put_32(abfd, insn, contents + frag->rela->r_offset); |
| 3079 | + |
| 3080 | + frag->rela->r_info = ELF_R_INFO(ELF_R_SYM(frag->rela->r_info), |
| 3081 | + state->r_type); |
| 3082 | + } |
| 3083 | + |
| 3084 | + if ((frag + 1) == fragend) |
| 3085 | + BFD_ASSERT((frag->offset + frag->size + frag->offset_adjust |
| 3086 | + + frag->size_adjust) == sec->size); |
| 3087 | + else |
| 3088 | + BFD_ASSERT((frag->offset + frag->size + frag->offset_adjust |
| 3089 | + + frag->size_adjust) |
| 3090 | + == (frag[1].offset + frag[1].offset_adjust)); |
| 3091 | + } |
| 3092 | + } |
| 3093 | + |
| 3094 | + /* Adjust reloc addends and DIFF32 differences */ |
| 3095 | + if (!adjust_relocs(abfd, sec, info)) |
| 3096 | + return FALSE; |
| 3097 | + |
| 3098 | + ret = TRUE; |
| 3099 | + |
| 3100 | + out: |
| 3101 | + release_contents(sec, contents); |
| 3102 | + release_internal_relocs(sec, relocs); |
| 3103 | + return ret; |
| 3104 | +} |
| 3105 | + |
| 3106 | +static bfd_boolean |
| 3107 | +avr32_elf_relax_section(bfd *abfd, asection *sec, |
| 3108 | + struct bfd_link_info *info, bfd_boolean *again) |
| 3109 | +{ |
| 3110 | + struct elf_avr32_link_hash_table *htab; |
| 3111 | + struct avr32_relax_data *rd; |
| 3112 | + |
| 3113 | + *again = FALSE; |
| 3114 | + if (info->relocatable) |
| 3115 | + return TRUE; |
| 3116 | + |
| 3117 | + htab = avr32_elf_hash_table(info); |
| 3118 | + if ((!(sec->flags & SEC_RELOC) || sec->reloc_count == 0) |
| 3119 | + && sec != htab->sgot) |
| 3120 | + return TRUE; |
| 3121 | + |
| 3122 | + if (!htab->relocations_analyzed) |
| 3123 | + { |
| 3124 | + if (!analyze_relocations(info)) |
| 3125 | + return FALSE; |
| 3126 | + htab->relocations_analyzed = TRUE; |
| 3127 | + } |
| 3128 | + |
| 3129 | + rd = avr32_relax_data(sec); |
| 3130 | + |
| 3131 | + if (rd->iteration != htab->relax_iteration) |
| 3132 | + { |
| 3133 | + if (!htab->repeat_pass) |
| 3134 | + htab->relax_pass++; |
| 3135 | + htab->relax_iteration++; |
| 3136 | + htab->repeat_pass = FALSE; |
| 3137 | + } |
| 3138 | + |
| 3139 | + rd->iteration++; |
| 3140 | + |
| 3141 | + switch (htab->relax_pass) |
| 3142 | + { |
| 3143 | + case RELAX_PASS_SIZE_FRAGS: |
| 3144 | + if (!avr32_size_frags(abfd, sec, info)) |
| 3145 | + return FALSE; |
| 3146 | + *again = TRUE; |
| 3147 | + break; |
| 3148 | + case RELAX_PASS_MOVE_DATA: |
| 3149 | + if (!avr32_move_data(abfd, sec, info)) |
| 3150 | + return FALSE; |
| 3151 | + break; |
| 3152 | + } |
| 3153 | + |
| 3154 | + return TRUE; |
| 3155 | +} |
| 3156 | + |
| 3157 | + |
| 3158 | +/* Relocation */ |
| 3159 | + |
| 3160 | +static bfd_reloc_status_type |
| 3161 | +avr32_check_reloc_value(asection *sec, Elf_Internal_Rela *rela, |
| 3162 | + bfd_signed_vma relocation, reloc_howto_type *howto); |
| 3163 | +static bfd_reloc_status_type |
| 3164 | +avr32_final_link_relocate(reloc_howto_type *howto, bfd *input_bfd, |
| 3165 | + asection *input_section, bfd_byte *contents, |
| 3166 | + Elf_Internal_Rela *rel, bfd_vma value); |
| 3167 | +static bfd_boolean |
| 3168 | +avr32_elf_relocate_section(bfd *output_bfd, struct bfd_link_info *info, |
| 3169 | + bfd *input_bfd, asection *input_section, |
| 3170 | + bfd_byte *contents, Elf_Internal_Rela *relocs, |
| 3171 | + Elf_Internal_Sym *local_syms, |
| 3172 | + asection **local_sections); |
| 3173 | + |
| 3174 | + |
| 3175 | +#define symbol_address(symbol) \ |
| 3176 | + symbol->value + symbol->section->output_section->vma \ |
| 3177 | + + symbol->section->output_offset |
| 3178 | + |
| 3179 | +#define avr32_elf_insert_field(size, field, abfd, reloc_entry, data) \ |
| 3180 | + do \ |
| 3181 | + { \ |
| 3182 | + unsigned long x; \ |
| 3183 | + x = bfd_get_##size (abfd, data + reloc_entry->address); \ |
| 3184 | + x &= ~reloc_entry->howto->dst_mask; \ |
| 3185 | + x |= field & reloc_entry->howto->dst_mask; \ |
| 3186 | + bfd_put_##size (abfd, (bfd_vma) x, data + reloc_entry->address); \ |
| 3187 | + } \ |
| 3188 | + while(0) |
| 3189 | + |
| 3190 | +static bfd_reloc_status_type |
| 3191 | +avr32_check_reloc_value(asection *sec ATTRIBUTE_UNUSED, |
| 3192 | + Elf_Internal_Rela *rela ATTRIBUTE_UNUSED, |
| 3193 | + bfd_signed_vma relocation, |
| 3194 | + reloc_howto_type *howto) |
| 3195 | +{ |
| 3196 | + bfd_vma reloc_u; |
| 3197 | + |
| 3198 | + /* We take "complain_overflow_dont" to mean "don't complain on |
| 3199 | + alignment either". This way, we don't have to special-case |
| 3200 | + R_AVR32_HI16 */ |
| 3201 | + if (howto->complain_on_overflow == complain_overflow_dont) |
| 3202 | + return bfd_reloc_ok; |
| 3203 | + |
| 3204 | + /* Check if the value is correctly aligned */ |
| 3205 | + if (relocation & ((1 << howto->rightshift) - 1)) |
| 3206 | + { |
| 3207 | + RDBG("misaligned: %s<%s+%lx>: %s: 0x%lx (align %u)\n", |
| 3208 | + sec->owner->filename, sec->name, rela->r_offset, |
| 3209 | + howto->name, relocation, howto->rightshift); |
| 3210 | + return bfd_reloc_overflow; |
| 3211 | + } |
| 3212 | + |
| 3213 | + /* Now, get rid of the unnecessary bits */ |
| 3214 | + relocation >>= howto->rightshift; |
| 3215 | + reloc_u = (bfd_vma)relocation; |
| 3216 | + |
| 3217 | + switch (howto->complain_on_overflow) |
| 3218 | + { |
| 3219 | + case complain_overflow_unsigned: |
| 3220 | + case complain_overflow_bitfield: |
| 3221 | + if (reloc_u > (unsigned long)((1 << howto->bitsize) - 1)) |
| 3222 | + { |
| 3223 | + RDBG("unsigned overflow: %s<%s+%lx>: %s: 0x%lx (size %u)\n", |
| 3224 | + sec->owner->filename, sec->name, rela->r_offset, |
| 3225 | + howto->name, reloc_u, howto->bitsize); |
| 3226 | + RDBG("reloc vma: 0x%lx\n", |
| 3227 | + sec->output_section->vma + sec->output_offset + rela->r_offset); |
| 3228 | + |
| 3229 | + return bfd_reloc_overflow; |
| 3230 | + } |
| 3231 | + break; |
| 3232 | + case complain_overflow_signed: |
| 3233 | + if (relocation > (1 << (howto->bitsize - 1)) - 1) |
| 3234 | + { |
| 3235 | + RDBG("signed overflow: %s<%s+%lx>: %s: 0x%lx (size %u)\n", |
| 3236 | + sec->owner->filename, sec->name, rela->r_offset, |
| 3237 | + howto->name, reloc_u, howto->bitsize); |
| 3238 | + RDBG("reloc vma: 0x%lx\n", |
| 3239 | + sec->output_section->vma + sec->output_offset + rela->r_offset); |
| 3240 | + |
| 3241 | + return bfd_reloc_overflow; |
| 3242 | + } |
| 3243 | + if (relocation < -(1 << (howto->bitsize - 1))) |
| 3244 | + { |
| 3245 | + RDBG("signed overflow: %s<%s+%lx>: %s: -0x%lx (size %u)\n", |
| 3246 | + sec->owner->filename, sec->name, rela->r_offset, |
| 3247 | + howto->name, -relocation, howto->bitsize); |
| 3248 | + RDBG("reloc vma: 0x%lx\n", |
| 3249 | + sec->output_section->vma + sec->output_offset + rela->r_offset); |
| 3250 | + |
| 3251 | + return bfd_reloc_overflow; |
| 3252 | + } |
| 3253 | + break; |
| 3254 | + default: |
| 3255 | + abort(); |
| 3256 | + } |
| 3257 | + |
| 3258 | + return bfd_reloc_ok; |
| 3259 | +} |
| 3260 | + |
| 3261 | + |
| 3262 | +static bfd_reloc_status_type |
| 3263 | +avr32_final_link_relocate(reloc_howto_type *howto, |
| 3264 | + bfd *input_bfd, |
| 3265 | + asection *input_section, |
| 3266 | + bfd_byte *contents, |
| 3267 | + Elf_Internal_Rela *rel, |
| 3268 | + bfd_vma value) |
| 3269 | +{ |
| 3270 | + bfd_vma field; |
| 3271 | + bfd_vma relocation; |
| 3272 | + bfd_reloc_status_type status; |
| 3273 | + bfd_byte *p = contents + rel->r_offset; |
| 3274 | + unsigned long x; |
| 3275 | + |
| 3276 | + pr_debug(" (6b) final link relocate\n"); |
| 3277 | + |
| 3278 | + /* Sanity check the address */ |
| 3279 | + if (rel->r_offset > input_section->size) |
| 3280 | + { |
| 3281 | + (*_bfd_error_handler) |
| 3282 | + ("%B: %A+0x%lx: offset out of range (section size: 0x%lx)", |
| 3283 | + input_bfd, input_section, rel->r_offset, input_section->size); |
| 3284 | + return bfd_reloc_outofrange; |
| 3285 | + } |
| 3286 | + |
| 3287 | + relocation = value + rel->r_addend; |
| 3288 | + |
| 3289 | + if (howto->pc_relative) |
| 3290 | + { |
| 3291 | + bfd_vma addr; |
| 3292 | + |
| 3293 | + addr = input_section->output_section->vma |
| 3294 | + + input_section->output_offset + rel->r_offset; |
| 3295 | + addr &= ~0UL << howto->rightshift; |
| 3296 | + relocation -= addr; |
| 3297 | + } |
| 3298 | + |
| 3299 | + switch (ELF32_R_TYPE(rel->r_info)) |
| 3300 | + { |
| 3301 | + case R_AVR32_16N_PCREL: |
| 3302 | + /* sub reg, pc, . - (sym + addend) */ |
| 3303 | + relocation = -relocation; |
| 3304 | + break; |
| 3305 | + } |
| 3306 | + |
| 3307 | + status = avr32_check_reloc_value(input_section, rel, relocation, howto); |
| 3308 | + |
| 3309 | + relocation >>= howto->rightshift; |
| 3310 | + if (howto->bitsize == 21) |
| 3311 | + field = (relocation & 0xffff) |
| 3312 | + | ((relocation & 0x10000) << 4) |
| 3313 | + | ((relocation & 0x1e0000) << 8); |
| 3314 | + else if (howto->bitsize == 12) |
| 3315 | + field = (relocation & 0xff) | ((relocation & 0xf00) << 4); |
| 3316 | + else if (howto->bitsize == 10) |
| 3317 | + field = ((relocation & 0xff) << 4) |
| 3318 | + | ((relocation & 0x300) >> 8); |
| 3319 | + else |
| 3320 | + field = relocation << howto->bitpos; |
| 3321 | + |
| 3322 | + switch (howto->size) |
| 3323 | + { |
| 3324 | + case 0: |
| 3325 | + x = bfd_get_8 (input_bfd, p); |
| 3326 | + x &= ~howto->dst_mask; |
| 3327 | + x |= field & howto->dst_mask; |
| 3328 | + bfd_put_8 (input_bfd, (bfd_vma) x, p); |
| 3329 | + break; |
| 3330 | + case 1: |
| 3331 | + x = bfd_get_16 (input_bfd, p); |
| 3332 | + x &= ~howto->dst_mask; |
| 3333 | + x |= field & howto->dst_mask; |
| 3334 | + bfd_put_16 (input_bfd, (bfd_vma) x, p); |
| 3335 | + break; |
| 3336 | + case 2: |
| 3337 | + x = bfd_get_32 (input_bfd, p); |
| 3338 | + x &= ~howto->dst_mask; |
| 3339 | + x |= field & howto->dst_mask; |
| 3340 | + bfd_put_32 (input_bfd, (bfd_vma) x, p); |
| 3341 | + break; |
| 3342 | + default: |
| 3343 | + abort(); |
| 3344 | + } |
| 3345 | + |
| 3346 | + return status; |
| 3347 | +} |
| 3348 | + |
| 3349 | +/* (6) Apply relocations to the normal (non-dynamic) sections */ |
| 3350 | + |
| 3351 | +static bfd_boolean |
| 3352 | +avr32_elf_relocate_section(bfd *output_bfd, struct bfd_link_info *info, |
| 3353 | + bfd *input_bfd, asection *input_section, |
| 3354 | + bfd_byte *contents, Elf_Internal_Rela *relocs, |
| 3355 | + Elf_Internal_Sym *local_syms, |
| 3356 | + asection **local_sections) |
| 3357 | +{ |
| 3358 | + struct elf_avr32_link_hash_table *htab; |
| 3359 | + Elf_Internal_Shdr *symtab_hdr; |
| 3360 | + Elf_Internal_Rela *rel, *relend; |
| 3361 | + struct elf_link_hash_entry **sym_hashes; |
| 3362 | + struct got_entry **local_got_ents; |
| 3363 | + asection *sgot; |
| 3364 | + asection *srelgot; |
| 3365 | + |
| 3366 | + pr_debug("(6) relocate section %s:<%s> (size 0x%lx)\n", |
| 3367 | + input_bfd->filename, input_section->name, input_section->size); |
| 3368 | + |
| 3369 | + /* If we're doing a partial link, we don't have to do anything since |
| 3370 | + we're using RELA relocations */ |
| 3371 | + if (info->relocatable) |
| 3372 | + return TRUE; |
| 3373 | + |
| 3374 | + htab = avr32_elf_hash_table(info); |
| 3375 | + symtab_hdr = &elf_tdata(input_bfd)->symtab_hdr; |
| 3376 | + sym_hashes = elf_sym_hashes(input_bfd); |
| 3377 | + local_got_ents = elf_local_got_ents(input_bfd); |
| 3378 | + sgot = htab->sgot; |
| 3379 | + srelgot = htab->srelgot; |
| 3380 | + |
| 3381 | + relend = relocs + input_section->reloc_count; |
| 3382 | + for (rel = relocs; rel < relend; rel++) |
| 3383 | + { |
| 3384 | + unsigned long r_type, r_symndx; |
| 3385 | + reloc_howto_type *howto; |
| 3386 | + Elf_Internal_Sym *sym = NULL; |
| 3387 | + struct elf_link_hash_entry *h = NULL; |
| 3388 | + asection *sec = NULL; |
| 3389 | + bfd_vma value; |
| 3390 | + bfd_vma offset; |
| 3391 | + bfd_reloc_status_type status; |
| 3392 | + |
| 3393 | + r_type = ELF32_R_TYPE(rel->r_info); |
| 3394 | + r_symndx = ELF32_R_SYM(rel->r_info); |
| 3395 | + |
| 3396 | + if (r_type == R_AVR32_NONE |
| 3397 | + || r_type == R_AVR32_ALIGN |
| 3398 | + || r_type == R_AVR32_DIFF32 |
| 3399 | + || r_type == R_AVR32_DIFF16 |
| 3400 | + || r_type == R_AVR32_DIFF8) |
| 3401 | + continue; |
| 3402 | + |
| 3403 | + /* Sanity check */ |
| 3404 | + if (r_type > R_AVR32_max) |
| 3405 | + { |
| 3406 | + bfd_set_error(bfd_error_bad_value); |
| 3407 | + return FALSE; |
| 3408 | + } |
| 3409 | + |
| 3410 | + howto = &elf_avr32_howto_table[r_type]; |
| 3411 | + |
| 3412 | + if (r_symndx < symtab_hdr->sh_info) |
| 3413 | + { |
| 3414 | + sym = local_syms + r_symndx; |
| 3415 | + sec = local_sections[r_symndx]; |
| 3416 | + |
| 3417 | + pr_debug(" (6a) processing %s against local symbol %lu\n", |
| 3418 | + howto->name, r_symndx); |
| 3419 | + |
| 3420 | + /* The following function changes rel->r_addend behind our back. */ |
| 3421 | + value = _bfd_elf_rela_local_sym(output_bfd, sym, &sec, rel); |
| 3422 | + pr_debug(" => value: %lx, addend: %lx\n", value, rel->r_addend); |
| 3423 | + } |
| 3424 | + else |
| 3425 | + { |
| 3426 | + if (sym_hashes == NULL) |
| 3427 | + return FALSE; |
| 3428 | + |
| 3429 | + h = sym_hashes[r_symndx - symtab_hdr->sh_info]; |
| 3430 | + while (h->root.type == bfd_link_hash_indirect |
| 3431 | + || h->root.type == bfd_link_hash_warning) |
| 3432 | + h = (struct elf_link_hash_entry *)h->root.u.i.link; |
| 3433 | + |
| 3434 | + pr_debug(" (6a) processing %s against symbol %s\n", |
| 3435 | + howto->name, h->root.root.string); |
| 3436 | + |
| 3437 | + if (h->root.type == bfd_link_hash_defined |
| 3438 | + || h->root.type == bfd_link_hash_defweak) |
| 3439 | + { |
| 3440 | + bfd_boolean dyn; |
| 3441 | + |
| 3442 | + dyn = htab->root.dynamic_sections_created; |
| 3443 | + sec = h->root.u.def.section; |
| 3444 | + |
| 3445 | + if (sec->output_section) |
| 3446 | + value = (h->root.u.def.value |
| 3447 | + + sec->output_section->vma |
| 3448 | + + sec->output_offset); |
| 3449 | + else |
| 3450 | + value = h->root.u.def.value; |
| 3451 | + } |
| 3452 | + else if (h->root.type == bfd_link_hash_undefweak) |
| 3453 | + value = 0; |
| 3454 | + else if (info->unresolved_syms_in_objects == RM_IGNORE |
| 3455 | + && ELF_ST_VISIBILITY(h->other) == STV_DEFAULT) |
| 3456 | + value = 0; |
| 3457 | + else |
| 3458 | + { |
| 3459 | + bfd_boolean err; |
| 3460 | + err = (info->unresolved_syms_in_objects == RM_GENERATE_ERROR |
| 3461 | + || ELF_ST_VISIBILITY(h->other) != STV_DEFAULT); |
| 3462 | + if (!info->callbacks->undefined_symbol |
| 3463 | + (info, h->root.root.string, input_bfd, |
| 3464 | + input_section, rel->r_offset, err)) |
| 3465 | + return FALSE; |
| 3466 | + value = 0; |
| 3467 | + } |
| 3468 | + |
| 3469 | + pr_debug(" => value: %lx, addend: %lx\n", value, rel->r_addend); |
| 3470 | + } |
| 3471 | + |
| 3472 | + switch (r_type) |
| 3473 | + { |
| 3474 | + case R_AVR32_GOT32: |
| 3475 | + case R_AVR32_GOT16: |
| 3476 | + case R_AVR32_GOT8: |
| 3477 | + case R_AVR32_GOT21S: |
| 3478 | + case R_AVR32_GOT18SW: |
| 3479 | + case R_AVR32_GOT16S: |
| 3480 | + case R_AVR32_GOT7UW: |
| 3481 | + case R_AVR32_LDA_GOT: |
| 3482 | + case R_AVR32_GOTCALL: |
| 3483 | + BFD_ASSERT(sgot != NULL); |
| 3484 | + |
| 3485 | + if (h != NULL) |
| 3486 | + { |
| 3487 | + BFD_ASSERT(h->got.glist->refcount > 0); |
| 3488 | + offset = h->got.glist->offset; |
| 3489 | + |
| 3490 | + BFD_ASSERT(offset < sgot->size); |
| 3491 | + if (!elf_hash_table(info)->dynamic_sections_created |
| 3492 | + || (h->def_regular |
| 3493 | + && (!info->shared |
| 3494 | + || info->symbolic |
| 3495 | + || h->dynindx == -1))) |
| 3496 | + { |
| 3497 | + /* This is actually a static link, or it is a |
| 3498 | + -Bsymbolic link and the symbol is defined |
| 3499 | + locally, or the symbol was forced to be local. */ |
| 3500 | + bfd_put_32(output_bfd, value, sgot->contents + offset); |
| 3501 | + } |
| 3502 | + } |
| 3503 | + else |
| 3504 | + { |
| 3505 | + BFD_ASSERT(local_got_ents && |
| 3506 | + local_got_ents[r_symndx]->refcount > 0); |
| 3507 | + offset = local_got_ents[r_symndx]->offset; |
| 3508 | + |
| 3509 | + /* Local GOT entries don't have relocs. If this is a |
| 3510 | + shared library, the dynamic linker will add the load |
| 3511 | + address to the initial value at startup. */ |
| 3512 | + BFD_ASSERT(offset < sgot->size); |
| 3513 | + pr_debug("Initializing GOT entry at offset %lu: 0x%lx\n", |
| 3514 | + offset, value); |
| 3515 | + bfd_put_32 (output_bfd, value, sgot->contents + offset); |
| 3516 | + } |
| 3517 | + |
| 3518 | + value = sgot->output_offset + offset; |
| 3519 | + pr_debug("GOT reference: New value %lx\n", value); |
| 3520 | + break; |
| 3521 | + |
| 3522 | + case R_AVR32_GOTPC: |
| 3523 | + /* This relocation type is for constant pool entries used in |
| 3524 | + the calculation "Rd = PC - (PC - GOT)", where the |
| 3525 | + constant pool supplies the constant (PC - GOT) |
| 3526 | + offset. The symbol value + addend indicates where the |
| 3527 | + value of PC is taken. */ |
| 3528 | + value -= sgot->output_section->vma; |
| 3529 | + break; |
| 3530 | + |
| 3531 | + case R_AVR32_32_PCREL: |
| 3532 | + /* We must adjust r_offset to account for discarded data in |
| 3533 | + the .eh_frame section. This is probably not the right |
| 3534 | + way to do this, since AFAICS all other architectures do |
| 3535 | + it some other way. I just can't figure out how... */ |
| 3536 | + { |
| 3537 | + bfd_vma r_offset; |
| 3538 | + |
| 3539 | + r_offset = _bfd_elf_section_offset(output_bfd, info, |
| 3540 | + input_section, |
| 3541 | + rel->r_offset); |
| 3542 | + if (r_offset == (bfd_vma)-1 |
| 3543 | + || r_offset == (bfd_vma)-2) |
| 3544 | + continue; |
| 3545 | + rel->r_offset = r_offset; |
| 3546 | + } |
| 3547 | + break; |
| 3548 | + |
| 3549 | + case R_AVR32_32: |
| 3550 | + /* We need to emit a run-time relocation in the following cases: |
| 3551 | + - we're creating a shared library |
| 3552 | + - the symbol is not defined in any regular objects |
| 3553 | + |
| 3554 | + Of course, sections that aren't going to be part of the |
| 3555 | + run-time image will not get any relocs, and undefined |
| 3556 | + symbols won't have any either (only weak undefined |
| 3557 | + symbols should get this far). */ |
| 3558 | + if ((info->shared |
| 3559 | + || (elf_hash_table(info)->dynamic_sections_created |
| 3560 | + && h != NULL |
| 3561 | + && h->def_dynamic |
| 3562 | + && !h->def_regular)) |
| 3563 | + && r_symndx != 0 |
| 3564 | + && (input_section->flags & SEC_ALLOC)) |
| 3565 | + { |
| 3566 | + Elf_Internal_Rela outrel; |
| 3567 | + bfd_byte *loc; |
| 3568 | + bfd_boolean skip, relocate; |
| 3569 | + struct elf_avr32_link_hash_entry *avrh; |
| 3570 | + |
| 3571 | + pr_debug("Going to generate dynamic reloc...\n"); |
| 3572 | + |
| 3573 | + skip = FALSE; |
| 3574 | + relocate = FALSE; |
| 3575 | + |
| 3576 | + outrel.r_offset = _bfd_elf_section_offset(output_bfd, info, |
| 3577 | + input_section, |
| 3578 | + rel->r_offset); |
| 3579 | + if (outrel.r_offset == (bfd_vma)-1) |
| 3580 | + skip = TRUE; |
| 3581 | + else if (outrel.r_offset == (bfd_vma)-2) |
| 3582 | + skip = TRUE, relocate = TRUE; |
| 3583 | + |
| 3584 | + outrel.r_offset += (input_section->output_section->vma |
| 3585 | + + input_section->output_offset); |
| 3586 | + |
| 3587 | + pr_debug(" ... offset %lx, dynindx %ld\n", |
| 3588 | + outrel.r_offset, h ? h->dynindx : -1); |
| 3589 | + |
| 3590 | + if (skip) |
| 3591 | + memset(&outrel, 0, sizeof(outrel)); |
| 3592 | + else |
| 3593 | + { |
| 3594 | + avrh = (struct elf_avr32_link_hash_entry *)h; |
| 3595 | + /* h->dynindx may be -1 if this symbol was marked to |
| 3596 | + become local. */ |
| 3597 | + if (h == NULL |
| 3598 | + || ((info->symbolic || h->dynindx == -1) |
| 3599 | + && h->def_regular)) |
| 3600 | + { |
| 3601 | + relocate = TRUE; |
| 3602 | + outrel.r_info = ELF32_R_INFO(0, R_AVR32_RELATIVE); |
| 3603 | + outrel.r_addend = value + rel->r_addend; |
| 3604 | + pr_debug(" ... R_AVR32_RELATIVE\n"); |
| 3605 | + } |
| 3606 | + else |
| 3607 | + { |
| 3608 | + BFD_ASSERT(h->dynindx != -1); |
| 3609 | + relocate = TRUE; |
| 3610 | + outrel.r_info = ELF32_R_INFO(h->dynindx, R_AVR32_GLOB_DAT); |
| 3611 | + outrel.r_addend = rel->r_addend; |
| 3612 | + pr_debug(" ... R_AVR32_GLOB_DAT\n"); |
| 3613 | + } |
| 3614 | + } |
| 3615 | + |
| 3616 | + pr_debug("srelgot reloc_count: %d, size %lu\n", |
| 3617 | + srelgot->reloc_count, srelgot->size); |
| 3618 | + |
| 3619 | + loc = srelgot->contents; |
| 3620 | + loc += srelgot->reloc_count++ * sizeof(Elf32_External_Rela); |
| 3621 | + bfd_elf32_swap_reloca_out(output_bfd, &outrel, loc); |
| 3622 | + |
| 3623 | + BFD_ASSERT(srelgot->reloc_count * sizeof(Elf32_External_Rela) |
| 3624 | + <= srelgot->size); |
| 3625 | + |
| 3626 | + if (!relocate) |
| 3627 | + continue; |
| 3628 | + } |
| 3629 | + break; |
| 3630 | + } |
| 3631 | + |
| 3632 | + status = avr32_final_link_relocate(howto, input_bfd, input_section, |
| 3633 | + contents, rel, value); |
| 3634 | + |
| 3635 | + switch (status) |
| 3636 | + { |
| 3637 | + case bfd_reloc_ok: |
| 3638 | + break; |
| 3639 | + |
| 3640 | + case bfd_reloc_overflow: |
| 3641 | + { |
| 3642 | + const char *name; |
| 3643 | + |
| 3644 | + if (h != NULL) |
| 3645 | + name = h->root.root.string; |
| 3646 | + else |
| 3647 | + { |
| 3648 | + name = bfd_elf_string_from_elf_section(input_bfd, |
| 3649 | + symtab_hdr->sh_link, |
| 3650 | + sym->st_name); |
| 3651 | + if (name == NULL) |
| 3652 | + return FALSE; |
| 3653 | + if (*name == '\0') |
| 3654 | + name = bfd_section_name(input_bfd, sec); |
| 3655 | + } |
| 3656 | + if (!((*info->callbacks->reloc_overflow) |
| 3657 | + (info, (h ? &h->root : NULL), name, howto->name, |
| 3658 | + rel->r_addend, input_bfd, input_section, rel->r_offset))) |
| 3659 | + return FALSE; |
| 3660 | + } |
| 3661 | + break; |
| 3662 | + |
| 3663 | + case bfd_reloc_outofrange: |
| 3664 | + default: |
| 3665 | + abort(); |
| 3666 | + } |
| 3667 | + } |
| 3668 | + |
| 3669 | + return TRUE; |
| 3670 | +} |
| 3671 | + |
| 3672 | + |
| 3673 | +/* Additional processing of dynamic sections after relocation */ |
| 3674 | + |
| 3675 | +static bfd_boolean |
| 3676 | +avr32_elf_finish_dynamic_symbol(bfd *output_bfd, struct bfd_link_info *info, |
| 3677 | + struct elf_link_hash_entry *h, |
| 3678 | + Elf_Internal_Sym *sym); |
| 3679 | +static bfd_boolean |
| 3680 | +avr32_elf_finish_dynamic_sections(bfd *output_bfd, struct bfd_link_info *info); |
| 3681 | + |
| 3682 | + |
| 3683 | +/* (7) Initialize the contents of a dynamic symbol and/or emit |
| 3684 | + relocations for it */ |
| 3685 | + |
| 3686 | +static bfd_boolean |
| 3687 | +avr32_elf_finish_dynamic_symbol(bfd *output_bfd, struct bfd_link_info *info, |
| 3688 | + struct elf_link_hash_entry *h, |
| 3689 | + Elf_Internal_Sym *sym) |
| 3690 | +{ |
| 3691 | + struct elf_avr32_link_hash_table *htab; |
| 3692 | + struct got_entry *got; |
| 3693 | + |
| 3694 | + pr_debug("(7) finish dynamic symbol: %s\n", h->root.root.string); |
| 3695 | + |
| 3696 | + htab = avr32_elf_hash_table(info); |
| 3697 | + got = h->got.glist; |
| 3698 | + |
| 3699 | + if (got && got->refcount > 0) |
| 3700 | + { |
| 3701 | + asection *sgot; |
| 3702 | + asection *srelgot; |
| 3703 | + Elf_Internal_Rela rel; |
| 3704 | + bfd_byte *loc; |
| 3705 | + |
| 3706 | + /* This symbol has an entry in the GOT. Set it up. */ |
| 3707 | + sgot = htab->sgot; |
| 3708 | + srelgot = htab->srelgot; |
| 3709 | + BFD_ASSERT(sgot && srelgot); |
| 3710 | + |
| 3711 | + rel.r_offset = (sgot->output_section->vma |
| 3712 | + + sgot->output_offset |
| 3713 | + + got->offset); |
| 3714 | + |
| 3715 | + /* If this is a static link, or it is a -Bsymbolic link and the |
| 3716 | + symbol is defined locally or was forced to be local because |
| 3717 | + of a version file, we just want to emit a RELATIVE reloc. The |
| 3718 | + entry in the global offset table will already have been |
| 3719 | + initialized in the relocate_section function. */ |
| 3720 | + if ((info->shared |
| 3721 | + && !info->symbolic |
| 3722 | + && h->dynindx != -1) |
| 3723 | + || (htab->root.dynamic_sections_created |
| 3724 | + && h->def_dynamic |
| 3725 | + && !h->def_regular)) |
| 3726 | + { |
| 3727 | + bfd_put_32(output_bfd, 0, sgot->contents + got->offset); |
| 3728 | + rel.r_info = ELF32_R_INFO(h->dynindx, R_AVR32_GLOB_DAT); |
| 3729 | + rel.r_addend = 0; |
| 3730 | + |
| 3731 | + pr_debug("GOT reloc R_AVR32_GLOB_DAT, dynindx: %ld\n", h->dynindx); |
| 3732 | + pr_debug(" srelgot reloc_count: %d, size: %lu\n", |
| 3733 | + srelgot->reloc_count, srelgot->size); |
| 3734 | + |
| 3735 | + loc = (srelgot->contents |
| 3736 | + + srelgot->reloc_count++ * sizeof(Elf32_External_Rela)); |
| 3737 | + bfd_elf32_swap_reloca_out(output_bfd, &rel, loc); |
| 3738 | + |
| 3739 | + BFD_ASSERT(srelgot->reloc_count * sizeof(Elf32_External_Rela) |
| 3740 | + <= srelgot->size); |
| 3741 | + } |
| 3742 | + } |
| 3743 | + |
| 3744 | + /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute */ |
| 3745 | + if (strcmp(h->root.root.string, "_DYNAMIC") == 0 |
| 3746 | + || strcmp(h->root.root.string, "_GLOBAL_OFFSET_TABLE_") == 0) |
| 3747 | + sym->st_shndx = SHN_ABS; |
| 3748 | + |
| 3749 | + return TRUE; |
| 3750 | +} |
| 3751 | + |
| 3752 | +/* (8) Do any remaining initialization of the dynamic sections */ |
| 3753 | + |
| 3754 | +static bfd_boolean |
| 3755 | +avr32_elf_finish_dynamic_sections(bfd *output_bfd, struct bfd_link_info *info) |
| 3756 | +{ |
| 3757 | + struct elf_avr32_link_hash_table *htab; |
| 3758 | + asection *sgot, *sdyn; |
| 3759 | + |
| 3760 | + pr_debug("(8) finish dynamic sections\n"); |
| 3761 | + |
| 3762 | + htab = avr32_elf_hash_table(info); |
| 3763 | + sgot = htab->sgot; |
| 3764 | + sdyn = bfd_get_section_by_name(htab->root.dynobj, ".dynamic"); |
| 3765 | + |
| 3766 | + if (htab->root.dynamic_sections_created) |
| 3767 | + { |
| 3768 | + Elf32_External_Dyn *dyncon, *dynconend; |
| 3769 | + |
| 3770 | + BFD_ASSERT(sdyn && sgot && sgot->size >= AVR32_GOT_HEADER_SIZE); |
| 3771 | + |
| 3772 | + dyncon = (Elf32_External_Dyn *)sdyn->contents; |
| 3773 | + dynconend = (Elf32_External_Dyn *)(sdyn->contents + sdyn->size); |
| 3774 | + for (; dyncon < dynconend; dyncon++) |
| 3775 | + { |
| 3776 | + Elf_Internal_Dyn dyn; |
| 3777 | + asection *s; |
| 3778 | + |
| 3779 | + bfd_elf32_swap_dyn_in(htab->root.dynobj, dyncon, &dyn); |
| 3780 | + |
| 3781 | + switch (dyn.d_tag) |
| 3782 | + { |
| 3783 | + default: |
| 3784 | + break; |
| 3785 | + |
| 3786 | + case DT_PLTGOT: |
| 3787 | + s = sgot->output_section; |
| 3788 | + BFD_ASSERT(s != NULL); |
| 3789 | + dyn.d_un.d_ptr = s->vma; |
| 3790 | + bfd_elf32_swap_dyn_out(output_bfd, &dyn, dyncon); |
| 3791 | + break; |
| 3792 | + |
| 3793 | + case DT_AVR32_GOTSZ: |
| 3794 | + s = sgot->output_section; |
| 3795 | + BFD_ASSERT(s != NULL); |
| 3796 | + dyn.d_un.d_val = s->size; |
| 3797 | + bfd_elf32_swap_dyn_out(output_bfd, &dyn, dyncon); |
| 3798 | + break; |
| 3799 | + } |
| 3800 | + } |
| 3801 | + |
| 3802 | + /* Fill in the first two entries in the global offset table */ |
| 3803 | + bfd_put_32(output_bfd, |
| 3804 | + sdyn->output_section->vma + sdyn->output_offset, |
| 3805 | + sgot->contents); |
| 3806 | + |
| 3807 | + /* The runtime linker will fill this one in with the address of |
| 3808 | + the run-time link map */ |
| 3809 | + bfd_put_32(output_bfd, 0, sgot->contents + 4); |
| 3810 | + } |
| 3811 | + |
| 3812 | + if (sgot) |
| 3813 | + elf_section_data(sgot->output_section)->this_hdr.sh_entsize = 4; |
| 3814 | + |
| 3815 | + return TRUE; |
| 3816 | +} |
| 3817 | + |
| 3818 | + |
| 3819 | +/* AVR32-specific private ELF data */ |
| 3820 | + |
| 3821 | +static bfd_boolean |
| 3822 | +avr32_elf_set_private_flags(bfd *abfd, flagword flags); |
| 3823 | +static bfd_boolean |
| 3824 | +avr32_elf_copy_private_bfd_data(bfd *ibfd, bfd *obfd); |
| 3825 | +static bfd_boolean |
| 3826 | +avr32_elf_merge_private_bfd_data(bfd *ibfd, bfd *obfd); |
| 3827 | +static bfd_boolean |
| 3828 | +avr32_elf_print_private_bfd_data(bfd *abfd, void *ptr); |
| 3829 | + |
| 3830 | +static bfd_boolean |
| 3831 | +avr32_elf_set_private_flags(bfd *abfd, flagword flags) |
| 3832 | +{ |
| 3833 | + elf_elfheader(abfd)->e_flags = flags; |
| 3834 | + elf_flags_init(abfd) = TRUE; |
| 3835 | + |
| 3836 | + return TRUE; |
| 3837 | +} |
| 3838 | + |
| 3839 | +/* Copy backend specific data from one object module to another. */ |
| 3840 | + |
| 3841 | +static bfd_boolean |
| 3842 | +avr32_elf_copy_private_bfd_data(bfd *ibfd, bfd *obfd) |
| 3843 | +{ |
| 3844 | + elf_elfheader(obfd)->e_flags = elf_elfheader(ibfd)->e_flags; |
| 3845 | + return TRUE; |
| 3846 | +} |
| 3847 | + |
| 3848 | +/* Merge backend specific data from an object file to the output |
| 3849 | + object file when linking. */ |
| 3850 | + |
| 3851 | +static bfd_boolean |
| 3852 | +avr32_elf_merge_private_bfd_data(bfd *ibfd, bfd *obfd) |
| 3853 | +{ |
| 3854 | + flagword out_flags, in_flags; |
| 3855 | + |
| 3856 | + pr_debug("(0) merge_private_bfd_data: %s -> %s\n", |
| 3857 | + ibfd->filename, obfd->filename); |
| 3858 | + |
| 3859 | + in_flags = elf_elfheader(ibfd)->e_flags; |
| 3860 | + out_flags = elf_elfheader(obfd)->e_flags; |
| 3861 | + |
| 3862 | + if (elf_flags_init(obfd)) |
| 3863 | + { |
| 3864 | + /* If one of the inputs are non-PIC, the output must be |
| 3865 | + considered non-PIC. The same applies to linkrelax. */ |
| 3866 | + if (!(in_flags & EF_AVR32_PIC)) |
| 3867 | + out_flags &= ~EF_AVR32_PIC; |
| 3868 | + if (!(in_flags & EF_AVR32_LINKRELAX)) |
| 3869 | + out_flags &= ~EF_AVR32_LINKRELAX; |
| 3870 | + } |
| 3871 | + else |
| 3872 | + { |
| 3873 | + elf_flags_init(obfd) = TRUE; |
| 3874 | + out_flags = in_flags; |
| 3875 | + } |
| 3876 | + |
| 3877 | + elf_elfheader(obfd)->e_flags = out_flags; |
| 3878 | + |
| 3879 | + return TRUE; |
| 3880 | +} |
| 3881 | + |
| 3882 | +static bfd_boolean |
| 3883 | +avr32_elf_print_private_bfd_data(bfd *abfd, void *ptr) |
| 3884 | +{ |
| 3885 | + FILE *file = (FILE *)ptr; |
| 3886 | + unsigned long flags; |
| 3887 | + |
| 3888 | + BFD_ASSERT(abfd != NULL && ptr != NULL); |
| 3889 | + |
| 3890 | + _bfd_elf_print_private_bfd_data(abfd, ptr); |
| 3891 | + |
| 3892 | + flags = elf_elfheader(abfd)->e_flags; |
| 3893 | + |
| 3894 | + fprintf(file, _("private flags = %lx:"), elf_elfheader(abfd)->e_flags); |
| 3895 | + |
| 3896 | + if (flags & EF_AVR32_PIC) |
| 3897 | + fprintf(file, " [PIC]"); |
| 3898 | + if (flags & EF_AVR32_LINKRELAX) |
| 3899 | + fprintf(file, " [linker relaxable]"); |
| 3900 | + |
| 3901 | + flags &= ~(EF_AVR32_PIC | EF_AVR32_LINKRELAX); |
| 3902 | + |
| 3903 | + if (flags) |
| 3904 | + fprintf(file, _("<Unrecognized flag bits set>")); |
| 3905 | + |
| 3906 | + fputc('\n', file); |
| 3907 | + |
| 3908 | + return TRUE; |
| 3909 | +} |
| 3910 | + |
| 3911 | +/* Set avr32-specific linker options. */ |
| 3912 | +void bfd_elf32_avr32_set_options(struct bfd_link_info *info, |
| 3913 | + int direct_data_refs) |
| 3914 | +{ |
| 3915 | + struct elf_avr32_link_hash_table *htab; |
| 3916 | + |
| 3917 | + htab = avr32_elf_hash_table (info); |
| 3918 | + htab->direct_data_refs = !!direct_data_refs; |
| 3919 | +} |
| 3920 | + |
| 3921 | + |
| 3922 | + |
| 3923 | +/* Understanding core dumps */ |
| 3924 | + |
| 3925 | +static bfd_boolean |
| 3926 | +avr32_elf_grok_prstatus(bfd *abfd, Elf_Internal_Note *note); |
| 3927 | +static bfd_boolean |
| 3928 | +avr32_elf_grok_psinfo(bfd *abfd, Elf_Internal_Note *note); |
| 3929 | + |
| 3930 | +static bfd_boolean |
| 3931 | +avr32_elf_grok_prstatus(bfd *abfd, Elf_Internal_Note *note) |
| 3932 | +{ |
| 3933 | + /* Linux/AVR32B elf_prstatus */ |
| 3934 | + if (note->descsz != 148) |
| 3935 | + return FALSE; |
| 3936 | + |
| 3937 | + /* pr_cursig */ |
| 3938 | + elf_tdata(abfd)->core_signal = bfd_get_16(abfd, note->descdata + 12); |
| 3939 | + |
| 3940 | + /* pr_pid */ |
| 3941 | + elf_tdata(abfd)->core_pid = bfd_get_32(abfd, note->descdata + 24); |
| 3942 | + |
| 3943 | + /* Make a ".reg/999" section for pr_reg. The size is for 16 |
| 3944 | + general-purpose registers, SR and r12_orig (18 * 4 = 72). */ |
| 3945 | + return _bfd_elfcore_make_pseudosection(abfd, ".reg", 72, |
| 3946 | + note->descpos + 72); |
| 3947 | +} |
| 3948 | + |
| 3949 | +static bfd_boolean |
| 3950 | +avr32_elf_grok_psinfo(bfd *abfd, Elf_Internal_Note *note) |
| 3951 | +{ |
| 3952 | + /* Linux/AVR32B elf_prpsinfo */ |
| 3953 | + if (note->descsz != 128) |
| 3954 | + return FALSE; |
| 3955 | + |
| 3956 | + elf_tdata(abfd)->core_program |
| 3957 | + = _bfd_elfcore_strndup(abfd, note->descdata + 32, 16); |
| 3958 | + elf_tdata(abfd)->core_command |
| 3959 | + = _bfd_elfcore_strndup(abfd, note->descdata + 48, 80); |
| 3960 | + |
| 3961 | + /* Note that for some reason, a spurious space is tacked |
| 3962 | + onto the end of the args in some (at least one anyway) |
| 3963 | + implementations, so strip it off if it exists. */ |
| 3964 | + |
| 3965 | + { |
| 3966 | + char *command = elf_tdata (abfd)->core_command; |
| 3967 | + int n = strlen (command); |
| 3968 | + |
| 3969 | + if (0 < n && command[n - 1] == ' ') |
| 3970 | + command[n - 1] = '\0'; |
| 3971 | + } |
| 3972 | + |
| 3973 | + return TRUE; |
| 3974 | +} |
| 3975 | + |
| 3976 | + |
| 3977 | +#define ELF_ARCH bfd_arch_avr32 |
| 3978 | +#define ELF_MACHINE_CODE EM_AVR32 |
| 3979 | +#define ELF_MAXPAGESIZE 1024 |
| 3980 | + |
| 3981 | +#define TARGET_BIG_SYM bfd_elf32_avr32_vec |
| 3982 | +#define TARGET_BIG_NAME "elf32-avr32" |
| 3983 | + |
| 3984 | +#define elf_backend_grok_prstatus avr32_elf_grok_prstatus |
| 3985 | +#define elf_backend_grok_psinfo avr32_elf_grok_psinfo |
| 3986 | + |
| 3987 | +/* Only RELA relocations are used */ |
| 3988 | +#define elf_backend_may_use_rel_p 0 |
| 3989 | +#define elf_backend_may_use_rela_p 1 |
| 3990 | +#define elf_backend_default_use_rela_p 1 |
| 3991 | +#define elf_backend_rela_normal 1 |
| 3992 | +#define elf_info_to_howto_rel NULL |
| 3993 | +#define elf_info_to_howto avr32_info_to_howto |
| 3994 | + |
| 3995 | +#define bfd_elf32_bfd_copy_private_bfd_data avr32_elf_copy_private_bfd_data |
| 3996 | +#define bfd_elf32_bfd_merge_private_bfd_data avr32_elf_merge_private_bfd_data |
| 3997 | +#define bfd_elf32_bfd_set_private_flags avr32_elf_set_private_flags |
| 3998 | +#define bfd_elf32_bfd_print_private_bfd_data avr32_elf_print_private_bfd_data |
| 3999 | +#define bfd_elf32_new_section_hook avr32_elf_new_section_hook |
| 4000 | + |
| 4001 | +#define elf_backend_gc_mark_hook avr32_elf_gc_mark_hook |
| 4002 | +#define elf_backend_gc_sweep_hook avr32_elf_gc_sweep_hook |
| 4003 | +#define elf_backend_relocate_section avr32_elf_relocate_section |
| 4004 | +#define elf_backend_copy_indirect_symbol avr32_elf_copy_indirect_symbol |
| 4005 | +#define elf_backend_create_dynamic_sections avr32_elf_create_dynamic_sections |
| 4006 | +#define bfd_elf32_bfd_link_hash_table_create avr32_elf_link_hash_table_create |
| 4007 | +#define elf_backend_adjust_dynamic_symbol avr32_elf_adjust_dynamic_symbol |
| 4008 | +#define elf_backend_size_dynamic_sections avr32_elf_size_dynamic_sections |
| 4009 | +#define elf_backend_finish_dynamic_symbol avr32_elf_finish_dynamic_symbol |
| 4010 | +#define elf_backend_finish_dynamic_sections avr32_elf_finish_dynamic_sections |
| 4011 | + |
| 4012 | +#define bfd_elf32_bfd_relax_section avr32_elf_relax_section |
| 4013 | + |
| 4014 | +/* Find out which symbols need an entry in .got. */ |
| 4015 | +#define elf_backend_check_relocs avr32_check_relocs |
| 4016 | +#define elf_backend_can_refcount 1 |
| 4017 | +#define elf_backend_can_gc_sections 1 |
| 4018 | +#define elf_backend_plt_readonly 1 |
| 4019 | +#define elf_backend_plt_not_loaded 1 |
| 4020 | +#define elf_backend_want_plt_sym 0 |
| 4021 | +#define elf_backend_plt_alignment 2 |
| 4022 | +#define elf_backend_want_dynbss 0 |
| 4023 | +#define elf_backend_want_got_plt 0 |
| 4024 | +#define elf_backend_want_got_sym 1 |
| 4025 | +#define elf_backend_got_header_size AVR32_GOT_HEADER_SIZE |
| 4026 | + |
| 4027 | +#include "elf32-target.h" |
| 4028 | --- /dev/null |
| 4029 | +++ b/bfd/elf32-avr32.h |
| 4030 | @@ -0,0 +1,23 @@ |
| 4031 | +/* AVR32-specific support for 32-bit ELF. |
| 4032 | + Copyright 2007,2008,2009 Atmel Corporation. |
| 4033 | + |
| 4034 | + Written by Haavard Skinnemoen, Atmel Norway, <hskinnemoen@atmel.com> |
| 4035 | + |
| 4036 | + This file is part of BFD, the Binary File Descriptor library. |
| 4037 | + |
| 4038 | + This program is free software; you can redistribute it and/or modify |
| 4039 | + it under the terms of the GNU General Public License as published by |
| 4040 | + the Free Software Foundation; either version 2 of the License, or |
| 4041 | + (at your option) any later version. |
| 4042 | + |
| 4043 | + This program is distributed in the hope that it will be useful, |
| 4044 | + but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 4045 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 4046 | + GNU General Public License for more details. |
| 4047 | + |
| 4048 | + You should have received a copy of the GNU General Public License |
| 4049 | + along with this program; if not, write to the Free Software |
| 4050 | + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ |
| 4051 | + |
| 4052 | +void bfd_elf32_avr32_set_options(struct bfd_link_info *info, |
| 4053 | + int direct_data_refs); |
| 4054 | --- a/bfd/elf-bfd.h |
| 4055 | +++ b/bfd/elf-bfd.h |
| 4056 | @@ -1503,6 +1503,10 @@ struct elf_obj_tdata |
| 4057 | find_nearest_line. */ |
| 4058 | struct mips_elf_find_line *find_line_info; |
| 4059 | |
| 4060 | + /* Used by AVR32 ELF relaxation code. Contains an array of pointers |
| 4061 | + for each local symbol to the fragment where it is defined. */ |
| 4062 | + struct fragment **local_sym_frag; |
| 4063 | + |
| 4064 | /* A place to stash dwarf1 info for this bfd. */ |
| 4065 | struct dwarf1_debug *dwarf1_find_line_info; |
| 4066 | |
| 4067 | --- a/bfd/Makefile.am |
| 4068 | +++ b/bfd/Makefile.am |
| 4069 | @@ -73,6 +73,7 @@ ALL_MACHINES = \ |
| 4070 | cpu-arc.lo \ |
| 4071 | cpu-arm.lo \ |
| 4072 | cpu-avr.lo \ |
| 4073 | + cpu-avr32.lo \ |
| 4074 | cpu-bfin.lo \ |
| 4075 | cpu-cr16.lo \ |
| 4076 | cpu-cr16c.lo \ |
| 4077 | @@ -269,6 +270,7 @@ BFD32_BACKENDS = \ |
| 4078 | elf32-arc.lo \ |
| 4079 | elf32-arm.lo \ |
| 4080 | elf32-avr.lo \ |
| 4081 | + elf32-avr32.lo \ |
| 4082 | elf32-bfin.lo \ |
| 4083 | elf32-cr16.lo \ |
| 4084 | elf32-cr16c.lo \ |
| 4085 | --- a/bfd/reloc.c |
| 4086 | +++ b/bfd/reloc.c |
| 4087 | @@ -4052,6 +4052,131 @@ ENUMDOC |
| 4088 | instructions |
| 4089 | |
| 4090 | ENUM |
| 4091 | + BFD_RELOC_AVR32_DIFF32 |
| 4092 | +ENUMX |
| 4093 | + BFD_RELOC_AVR32_DIFF16 |
| 4094 | +ENUMX |
| 4095 | + BFD_RELOC_AVR32_DIFF8 |
| 4096 | +ENUMDOC |
| 4097 | + Difference between two labels: L2 - L1. The value of L1 is encoded |
| 4098 | + as sym + addend, while the initial difference after assembly is |
| 4099 | + inserted into the object file by the assembler. |
| 4100 | +ENUM |
| 4101 | + BFD_RELOC_AVR32_GOT32 |
| 4102 | +ENUMX |
| 4103 | + BFD_RELOC_AVR32_GOT16 |
| 4104 | +ENUMX |
| 4105 | + BFD_RELOC_AVR32_GOT8 |
| 4106 | +ENUMDOC |
| 4107 | + Reference to a symbol through the Global Offset Table. The linker |
| 4108 | + will allocate an entry for symbol in the GOT and insert the offset |
| 4109 | + of this entry as the relocation value. |
| 4110 | +ENUM |
| 4111 | + BFD_RELOC_AVR32_21S |
| 4112 | +ENUMX |
| 4113 | + BFD_RELOC_AVR32_16U |
| 4114 | +ENUMX |
| 4115 | + BFD_RELOC_AVR32_16S |
| 4116 | +ENUMX |
| 4117 | + BFD_RELOC_AVR32_SUB5 |
| 4118 | +ENUMX |
| 4119 | + BFD_RELOC_AVR32_8S_EXT |
| 4120 | +ENUMX |
| 4121 | + BFD_RELOC_AVR32_8S |
| 4122 | +ENUMX |
| 4123 | + BFD_RELOC_AVR32_15S |
| 4124 | +ENUMDOC |
| 4125 | + Normal (non-pc-relative) code relocations. Alignment and signedness |
| 4126 | + is indicated by the suffixes. S means signed, U means unsigned. W |
| 4127 | + means word-aligned, H means halfword-aligned, neither means |
| 4128 | + byte-aligned (no alignment.) SUB5 is the same relocation as 16S. |
| 4129 | +ENUM |
| 4130 | + BFD_RELOC_AVR32_22H_PCREL |
| 4131 | +ENUMX |
| 4132 | + BFD_RELOC_AVR32_18W_PCREL |
| 4133 | +ENUMX |
| 4134 | + BFD_RELOC_AVR32_16B_PCREL |
| 4135 | +ENUMX |
| 4136 | + BFD_RELOC_AVR32_16N_PCREL |
| 4137 | +ENUMX |
| 4138 | + BFD_RELOC_AVR32_14UW_PCREL |
| 4139 | +ENUMX |
| 4140 | + BFD_RELOC_AVR32_11H_PCREL |
| 4141 | +ENUMX |
| 4142 | + BFD_RELOC_AVR32_10UW_PCREL |
| 4143 | +ENUMX |
| 4144 | + BFD_RELOC_AVR32_9H_PCREL |
| 4145 | +ENUMX |
| 4146 | + BFD_RELOC_AVR32_9UW_PCREL |
| 4147 | +ENUMDOC |
| 4148 | + PC-relative relocations are signed if neither 'U' nor 'S' is |
| 4149 | + specified. However, we explicitly tack on a 'B' to indicate no |
| 4150 | + alignment, to avoid confusion with data relocs. All of these resolve |
| 4151 | + to sym + addend - offset, except the one with 'N' (negated) suffix. |
| 4152 | + This particular one resolves to offset - sym - addend. |
| 4153 | +ENUM |
| 4154 | + BFD_RELOC_AVR32_GOTPC |
| 4155 | +ENUMDOC |
| 4156 | + Subtract the link-time address of the GOT from (symbol + addend) |
| 4157 | + and insert the result. |
| 4158 | +ENUM |
| 4159 | + BFD_RELOC_AVR32_GOTCALL |
| 4160 | +ENUMX |
| 4161 | + BFD_RELOC_AVR32_LDA_GOT |
| 4162 | +ENUMX |
| 4163 | + BFD_RELOC_AVR32_GOT21S |
| 4164 | +ENUMX |
| 4165 | + BFD_RELOC_AVR32_GOT18SW |
| 4166 | +ENUMX |
| 4167 | + BFD_RELOC_AVR32_GOT16S |
| 4168 | +ENUMDOC |
| 4169 | + Reference to a symbol through the GOT. The linker will allocate an |
| 4170 | + entry for symbol in the GOT and insert the offset of this entry as |
| 4171 | + the relocation value. addend must be zero. As usual, 'S' means |
| 4172 | + signed, 'W' means word-aligned, etc. |
| 4173 | +ENUM |
| 4174 | + BFD_RELOC_AVR32_32_CPENT |
| 4175 | +ENUMDOC |
| 4176 | + 32-bit constant pool entry. I don't think 8- and 16-bit entries make |
| 4177 | + a whole lot of sense. |
| 4178 | +ENUM |
| 4179 | + BFD_RELOC_AVR32_CPCALL |
| 4180 | +ENUMX |
| 4181 | + BFD_RELOC_AVR32_16_CP |
| 4182 | +ENUMX |
| 4183 | + BFD_RELOC_AVR32_9W_CP |
| 4184 | +ENUMDOC |
| 4185 | + Constant pool references. Some of these relocations are signed, |
| 4186 | + others are unsigned. It doesn't really matter, since the constant |
| 4187 | + pool always comes after the code that references it. |
| 4188 | +ENUM |
| 4189 | + BFD_RELOC_AVR32_ALIGN |
| 4190 | +ENUMDOC |
| 4191 | + sym must be the absolute symbol. The addend specifies the alignment |
| 4192 | + order, e.g. if addend is 2, the linker must add padding so that the |
| 4193 | + next address is aligned to a 4-byte boundary. |
| 4194 | +ENUM |
| 4195 | + BFD_RELOC_AVR32_14UW |
| 4196 | +ENUMX |
| 4197 | + BFD_RELOC_AVR32_10UW |
| 4198 | +ENUMX |
| 4199 | + BFD_RELOC_AVR32_10SW |
| 4200 | +ENUMX |
| 4201 | + BFD_RELOC_AVR32_STHH_W |
| 4202 | +ENUMX |
| 4203 | + BFD_RELOC_AVR32_7UW |
| 4204 | +ENUMX |
| 4205 | + BFD_RELOC_AVR32_6S |
| 4206 | +ENUMX |
| 4207 | + BFD_RELOC_AVR32_6UW |
| 4208 | +ENUMX |
| 4209 | + BFD_RELOC_AVR32_4UH |
| 4210 | +ENUMX |
| 4211 | + BFD_RELOC_AVR32_3U |
| 4212 | +ENUMDOC |
| 4213 | + Code relocations that will never make it to the output file. |
| 4214 | + |
| 4215 | +ENUM |
| 4216 | BFD_RELOC_390_12 |
| 4217 | ENUMDOC |
| 4218 | Direct 12 bit. |
| 4219 | --- a/bfd/targets.c |
| 4220 | +++ b/bfd/targets.c |
| 4221 | @@ -568,6 +568,7 @@ extern const bfd_target b_out_vec_big_ho |
| 4222 | extern const bfd_target b_out_vec_little_host; |
| 4223 | extern const bfd_target bfd_pei_ia64_vec; |
| 4224 | extern const bfd_target bfd_elf32_avr_vec; |
| 4225 | +extern const bfd_target bfd_elf32_avr32_vec; |
| 4226 | extern const bfd_target bfd_elf32_bfin_vec; |
| 4227 | extern const bfd_target bfd_elf32_bfinfdpic_vec; |
| 4228 | extern const bfd_target bfd_elf32_big_generic_vec; |
| 4229 | @@ -896,6 +897,7 @@ static const bfd_target * const _bfd_tar |
| 4230 | &bfd_pei_ia64_vec, |
| 4231 | #endif |
| 4232 | &bfd_elf32_avr_vec, |
| 4233 | + &bfd_elf32_avr32_vec, |
| 4234 | &bfd_elf32_bfin_vec, |
| 4235 | &bfd_elf32_bfinfdpic_vec, |
| 4236 | |
| 4237 | --- a/binutils/doc/binutils.info |
| 4238 | +++ b/binutils/doc/binutils.info |
| 4239 | @@ -1665,6 +1665,10 @@ equivalent. At least one option from th |
| 4240 | useful when attempting to disassemble thumb code produced by other |
| 4241 | compilers. |
| 4242 | |
| 4243 | + For the AVR32 architectures that support Floating point unit (FPU), |
| 4244 | + specifying '-M decode-fpu' will enable disassembler to print the |
| 4245 | + floating point instruction instead of 'cop' instructions. |
| 4246 | + |
| 4247 | For the x86, some of the options duplicate functions of the `-m' |
| 4248 | switch, but allow finer grained control. Multiple selections from |
| 4249 | the following may be specified as a comma separated string. |
| 4250 | --- a/binutils/doc/binutils.texi |
| 4251 | +++ b/binutils/doc/binutils.texi |
| 4252 | @@ -1935,6 +1935,10 @@ using the switch @option{--disassembler- |
| 4253 | useful when attempting to disassemble thumb code produced by other |
| 4254 | compilers. |
| 4255 | |
| 4256 | +For the AVR32 architectures that support Floating point unit (FPU), |
| 4257 | +specifying @option{-M decode-fpu} will enable disassembler to print the |
| 4258 | +floating point instructions instead of 'cop' instructions. |
| 4259 | + |
| 4260 | For the x86, some of the options duplicate functions of the @option{-m} |
| 4261 | switch, but allow finer grained control. Multiple selections from the |
| 4262 | following may be specified as a comma separated string. |
| 4263 | --- a/binutils/doc/objdump.1 |
| 4264 | +++ b/binutils/doc/objdump.1 |
| 4265 | @@ -425,6 +425,10 @@ using the switch \fB\-\-disassembler\-op |
| 4266 | useful when attempting to disassemble thumb code produced by other |
| 4267 | compilers. |
| 4268 | .Sp |
| 4269 | +For the \s-1AVR32\s0 architectures that support Floating point unit (FPU), |
| 4270 | +specifying \fB\-M decode\-fpu\fR will enable disassembler to print the |
| 4271 | +floating point instructions instead of 'cop' instructions. |
| 4272 | +.Sp |
| 4273 | For the x86, some of the options duplicate functions of the \fB\-m\fR |
| 4274 | switch, but allow finer grained control. Multiple selections from the |
| 4275 | following may be specified as a comma separated string. |
| 4276 | --- a/binutils/readelf.c |
| 4277 | +++ b/binutils/readelf.c |
| 4278 | @@ -94,6 +94,7 @@ |
| 4279 | #include "elf/arc.h" |
| 4280 | #include "elf/arm.h" |
| 4281 | #include "elf/avr.h" |
| 4282 | +#include "elf/avr32.h" |
| 4283 | #include "elf/bfin.h" |
| 4284 | #include "elf/cr16.h" |
| 4285 | #include "elf/cris.h" |
| 4286 | @@ -570,6 +571,7 @@ guess_is_rela (unsigned int e_machine) |
| 4287 | case EM_ALPHA: |
| 4288 | case EM_ALTERA_NIOS2: |
| 4289 | case EM_AVR: |
| 4290 | + case EM_AVR32: |
| 4291 | case EM_AVR_OLD: |
| 4292 | case EM_BLACKFIN: |
| 4293 | case EM_CR16: |
| 4294 | @@ -1020,6 +1022,10 @@ dump_relocations (FILE * file, |
| 4295 | rtype = elf_avr_reloc_type (type); |
| 4296 | break; |
| 4297 | |
| 4298 | + case EM_AVR32: |
| 4299 | + rtype = elf_avr32_reloc_type (type); |
| 4300 | + break; |
| 4301 | + |
| 4302 | case EM_OLD_SPARCV9: |
| 4303 | case EM_SPARC32PLUS: |
| 4304 | case EM_SPARCV9: |
| 4305 | @@ -1853,6 +1859,7 @@ get_machine_name (unsigned e_machine) |
| 4306 | case EM_VAX: return "Digital VAX"; |
| 4307 | case EM_AVR_OLD: |
| 4308 | case EM_AVR: return "Atmel AVR 8-bit microcontroller"; |
| 4309 | + case EM_AVR32: return "Atmel AVR32 32-bit microprocessor"; |
| 4310 | case EM_CRIS: return "Axis Communications 32-bit embedded processor"; |
| 4311 | case EM_JAVELIN: return "Infineon Technologies 32-bit embedded cpu"; |
| 4312 | case EM_FIREPATH: return "Element 14 64-bit DSP processor"; |
| 4313 | --- a/gas/as.c |
| 4314 | +++ b/gas/as.c |
| 4315 | @@ -445,10 +445,10 @@ parse_args (int * pargc, char *** pargv) |
| 4316 | the end of the preceeding line so that it is simpler to |
| 4317 | selectively add and remove lines from this list. */ |
| 4318 | {"alternate", no_argument, NULL, OPTION_ALTERNATE} |
| 4319 | - /* The entry for "a" is here to prevent getopt_long_only() from |
| 4320 | - considering that -a is an abbreviation for --alternate. This is |
| 4321 | - necessary because -a=<FILE> is a valid switch but getopt would |
| 4322 | - normally reject it since --alternate does not take an argument. */ |
| 4323 | + /* The next two entries are here to prevent getopt_long_only() from |
| 4324 | + considering that -a or -al is an abbreviation for --alternate. |
| 4325 | + This is necessary because -a=<FILE> is a valid switch but getopt |
| 4326 | + would normally reject it since --alternate does not take an argument. */ |
| 4327 | ,{"a", optional_argument, NULL, 'a'} |
| 4328 | /* Handle -al=<FILE>. */ |
| 4329 | ,{"al", optional_argument, NULL, OPTION_AL} |
| 4330 | @@ -811,8 +811,15 @@ This program has absolutely no warranty. |
| 4331 | case 'a': |
| 4332 | if (optarg) |
| 4333 | { |
| 4334 | - if (optarg != old_argv[optind] && optarg[-1] == '=') |
| 4335 | + /* If optarg is part of the -a switch and not a separate argument |
| 4336 | + in its own right, then scan backwards to the just after the -a. |
| 4337 | + This means skipping over both '=' and 'l' which might have been |
| 4338 | + taken to be part of the -a switch itself. */ |
| 4339 | + if (optarg != old_argv[optind]) |
| 4340 | + { |
| 4341 | + while (optarg[-1] == '=' || optarg[-1] == 'l') |
| 4342 | --optarg; |
| 4343 | + } |
| 4344 | |
| 4345 | if (md_parse_option (optc, optarg) != 0) |
| 4346 | break; |
| 4347 | @@ -1245,7 +1252,7 @@ main (int argc, char ** argv) |
| 4348 | keep_it = 0; |
| 4349 | |
| 4350 | if (!keep_it) |
| 4351 | - unlink_if_ordinary (out_file_name); |
| 4352 | + unlink (out_file_name); |
| 4353 | |
| 4354 | input_scrub_end (); |
| 4355 | |
| 4356 | --- a/gas/as.h |
| 4357 | +++ b/gas/as.h |
| 4358 | @@ -110,6 +110,7 @@ typedef int * va_list; |
| 4359 | #endif |
| 4360 | #define gas_assert(P) \ |
| 4361 | ((void) ((P) ? 0 : (as_assert (__FILE__, __LINE__, __PRETTY_FUNCTION__), 0))) |
| 4362 | +#define assert(P) gas_assert(P) |
| 4363 | #undef abort |
| 4364 | #define abort() as_abort (__FILE__, __LINE__, __PRETTY_FUNCTION__) |
| 4365 | |
| 4366 | --- a/gas/atof-generic.c |
| 4367 | +++ b/gas/atof-generic.c |
| 4368 | @@ -121,6 +121,21 @@ atof_generic (/* return pointer to just |
| 4369 | |
| 4370 | switch (first_digit[0]) |
| 4371 | { |
| 4372 | + case 's': |
| 4373 | + case 'S': |
| 4374 | + case 'q': |
| 4375 | + case 'Q': |
| 4376 | + if (!strncasecmp ("nan", first_digit+1, 3)) |
| 4377 | + { |
| 4378 | + address_of_generic_floating_point_number->sign = 0; |
| 4379 | + address_of_generic_floating_point_number->exponent = 0; |
| 4380 | + address_of_generic_floating_point_number->leader = |
| 4381 | + address_of_generic_floating_point_number->low; |
| 4382 | + *address_of_string_pointer = first_digit + 4; |
| 4383 | + return 0; |
| 4384 | + } |
| 4385 | + break; |
| 4386 | + |
| 4387 | case 'n': |
| 4388 | case 'N': |
| 4389 | if (!strncasecmp ("nan", first_digit, 3)) |
| 4390 | --- a/gas/config/atof-vax.c |
| 4391 | +++ b/gas/config/atof-vax.c |
| 4392 | @@ -268,9 +268,27 @@ flonum_gen2vax (int format_letter, /* On |
| 4393 | int exponent_skippage; |
| 4394 | LITTLENUM_TYPE word1; |
| 4395 | |
| 4396 | - /* JF: Deal with new Nan, +Inf and -Inf codes. */ |
| 4397 | + /* JF: Deal with new +/-(q/Q/s/S)Nan, +Inf and -Inf codes. */ |
| 4398 | if (f->sign != '-' && f->sign != '+') |
| 4399 | { |
| 4400 | + if (f->sign == 0) |
| 4401 | + { |
| 4402 | + /* All NaNs are 0. */ |
| 4403 | + memset (words, 0x00, sizeof (LITTLENUM_TYPE) * precision); |
| 4404 | + } |
| 4405 | + else if (f->sign == 'P') |
| 4406 | + { |
| 4407 | + /* Positive Infinity. */ |
| 4408 | + memset (words, 0xff, sizeof (LITTLENUM_TYPE) * precision); |
| 4409 | + words[0] &= 0x7fff; |
| 4410 | + } |
| 4411 | + else if (f->sign == 'N') |
| 4412 | + { |
| 4413 | + /* Negative Infinity. */ |
| 4414 | + memset (words, 0x00, sizeof (LITTLENUM_TYPE) * precision); |
| 4415 | + words[0] = 0x0080; |
| 4416 | + } |
| 4417 | + else |
| 4418 | make_invalid_floating_point_number (words); |
| 4419 | return return_value; |
| 4420 | } |
| 4421 | --- /dev/null |
| 4422 | +++ b/gas/config/tc-avr32.c |
| 4423 | @@ -0,0 +1,4839 @@ |
| 4424 | +/* Assembler implementation for AVR32. |
| 4425 | + Copyright 2003,2004,2005,2006,2007,2008,2009,2010 Atmel Corporation. |
| 4426 | + |
| 4427 | + Written by Haavard Skinnemoen, Atmel Norway, <hskinnemoen@atmel.com> |
| 4428 | + |
| 4429 | + This file is part of GAS, the GNU Assembler. |
| 4430 | + |
| 4431 | + GAS is free software; you can redistribute it and/or modify it |
| 4432 | + under the terms of the GNU General Public License as published by |
| 4433 | + the Free Software Foundation; either version 2, or (at your option) |
| 4434 | + any later version. |
| 4435 | + |
| 4436 | + GAS is distributed in the hope that it will be useful, but WITHOUT |
| 4437 | + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY |
| 4438 | + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public |
| 4439 | + License for more details. |
| 4440 | + |
| 4441 | + You should have received a copy of the GNU General Public License |
| 4442 | + along with GAS; see the file COPYING. If not, write to the Free |
| 4443 | + Software Foundation, 59 Temple Place - Suite 330, Boston, MA |
| 4444 | + 02111-1307, USA. */ |
| 4445 | + |
| 4446 | +#include <stdio.h> |
| 4447 | +#include "as.h" |
| 4448 | +#include "safe-ctype.h" |
| 4449 | +#include "subsegs.h" |
| 4450 | +#include "symcat.h" |
| 4451 | +#include "opcodes/avr32-opc.h" |
| 4452 | +#include "opcodes/avr32-asm.h" |
| 4453 | +#include "elf/avr32.h" |
| 4454 | +#include "dwarf2dbg.h" |
| 4455 | + |
| 4456 | +#define xDEBUG |
| 4457 | +#define xOPC_CONSISTENCY_CHECK |
| 4458 | + |
| 4459 | +#ifdef DEBUG |
| 4460 | +# define pr_debug(fmt, args...) fprintf(stderr, fmt, ##args) |
| 4461 | +#else |
| 4462 | +# define pr_debug(fmt, args...) |
| 4463 | +#endif |
| 4464 | + |
| 4465 | +/* 3 MSB of instruction word indicate group. Group 7 -> extended */ |
| 4466 | +#define AVR32_COMPACT_P(opcode) ((opcode[0] & 0xe0) != 0xe0) |
| 4467 | + |
| 4468 | +#define streq(a, b) (strcmp(a, b) == 0) |
| 4469 | +#define skip_whitespace(str) do { while(*(str) == ' ') ++(str); } while(0) |
| 4470 | + |
| 4471 | +/* Flags given on the command line */ |
| 4472 | +static int avr32_pic = FALSE; |
| 4473 | +int linkrelax = FALSE; |
| 4474 | +int avr32_iarcompat = FALSE; |
| 4475 | + |
| 4476 | +/* This array holds the chars that always start a comment. */ |
| 4477 | +const char comment_chars[] = "#"; |
| 4478 | + |
| 4479 | +/* This array holds the chars that only start a comment at the |
| 4480 | + beginning of a line. We must include '#' here because the compiler |
| 4481 | + may produce #APP and #NO_APP in its output. */ |
| 4482 | +const char line_comment_chars[] = "#"; |
| 4483 | + |
| 4484 | +/* These may be used instead of newline (same as ';' in C). */ |
| 4485 | +const char line_separator_chars[] = ";"; |
| 4486 | + |
| 4487 | +/* Chars that can be used to separate mantissa from exponent in |
| 4488 | + floating point numbers. */ |
| 4489 | +const char EXP_CHARS[] = "eE"; |
| 4490 | + |
| 4491 | +/* Chars that mean this number is a floating point constant. */ |
| 4492 | +const char FLT_CHARS[] = "dD"; |
| 4493 | + |
| 4494 | +/* Pre-defined "_GLOBAL_OFFSET_TABLE_" */ |
| 4495 | +symbolS *GOT_symbol; |
| 4496 | + |
| 4497 | +static struct hash_control *avr32_mnemonic_htab; |
| 4498 | + |
| 4499 | +struct avr32_ifield_data |
| 4500 | +{ |
| 4501 | + bfd_vma value; |
| 4502 | + /* FIXME: Get rid of align_order and complain. complain is never |
| 4503 | + used, align_order is used in one place. Try to use the relax |
| 4504 | + table instead. */ |
| 4505 | + unsigned int align_order; |
| 4506 | +}; |
| 4507 | + |
| 4508 | +struct avr32_insn |
| 4509 | +{ |
| 4510 | + const struct avr32_syntax *syntax; |
| 4511 | + expressionS immediate; |
| 4512 | + int pcrel; |
| 4513 | + int force_extended; |
| 4514 | + unsigned int next_slot; |
| 4515 | + bfd_reloc_code_real_type r_type; |
| 4516 | + struct avr32_ifield_data field_value[AVR32_MAX_FIELDS]; |
| 4517 | +}; |
| 4518 | + |
| 4519 | +static struct avr32_insn current_insn; |
| 4520 | + |
| 4521 | +/* The target specific pseudo-ops we support. */ |
| 4522 | +static void s_rseg (int); |
| 4523 | +static void s_cpool(int); |
| 4524 | + |
| 4525 | +const pseudo_typeS md_pseudo_table[] = |
| 4526 | +{ |
| 4527 | + /* Make sure that .word is 32 bits */ |
| 4528 | + { "word", cons, 4 }, |
| 4529 | + { "file", (void (*) PARAMS ((int))) dwarf2_directive_file, 0 }, |
| 4530 | + { "loc", dwarf2_directive_loc, 0 }, |
| 4531 | + |
| 4532 | + /* .lcomm requires an explicit alignment parameter */ |
| 4533 | + { "lcomm", s_lcomm, 1 }, |
| 4534 | + |
| 4535 | + /* AVR32-specific pseudo-ops */ |
| 4536 | + { "cpool", s_cpool, 0}, |
| 4537 | + |
| 4538 | + /* IAR compatible pseudo-ops */ |
| 4539 | + { "program", s_ignore, 0 }, |
| 4540 | + { "public", s_globl, 0 }, |
| 4541 | + { "extern", s_ignore, 0 }, |
| 4542 | + { "module", s_ignore, 0 }, |
| 4543 | + { "rseg", s_rseg, 0 }, |
| 4544 | + { "dc8", cons, 1 }, |
| 4545 | + { "dc16", cons, 2 }, |
| 4546 | + { "dc32", cons, 4 }, |
| 4547 | + |
| 4548 | + { NULL, NULL, 0 } |
| 4549 | +}; |
| 4550 | + |
| 4551 | +/* Questionable stuff starts here */ |
| 4552 | + |
| 4553 | +enum avr32_opinfo { |
| 4554 | + AVR32_OPINFO_NONE = BFD_RELOC_NONE, |
| 4555 | + AVR32_OPINFO_GOT, |
| 4556 | + AVR32_OPINFO_TLSGD, |
| 4557 | + AVR32_OPINFO_HI, |
| 4558 | + AVR32_OPINFO_LO, |
| 4559 | +}; |
| 4560 | + |
| 4561 | +enum avr32_arch { |
| 4562 | + ARCH_TYPE_AP, |
| 4563 | + ARCH_TYPE_UCR1, |
| 4564 | + ARCH_TYPE_UCR2, |
| 4565 | + ARCH_TYPE_UCR3, |
| 4566 | + ARCH_TYPE_UCR3FP |
| 4567 | +}; |
| 4568 | + |
| 4569 | +struct arch_type_s |
| 4570 | +{ |
| 4571 | + /* Architecture name */ |
| 4572 | + char *name; |
| 4573 | + /* Instruction Set Architecture Flags */ |
| 4574 | + unsigned long isa_flags; |
| 4575 | +}; |
| 4576 | + |
| 4577 | +struct part_type_s |
| 4578 | +{ |
| 4579 | + /* Part name */ |
| 4580 | + char *name; |
| 4581 | + /* Architecture type */ |
| 4582 | + unsigned int arch; |
| 4583 | +}; |
| 4584 | + |
| 4585 | +static struct arch_type_s arch_types[] = |
| 4586 | +{ |
| 4587 | + {"ap", AVR32_V1 | AVR32_SIMD | AVR32_DSP | AVR32_PICO}, |
| 4588 | + {"ucr1", AVR32_V1 | AVR32_DSP | AVR32_RMW}, |
| 4589 | + {"ucr2", AVR32_V1 | AVR32_V2 | AVR32_DSP | AVR32_RMW}, |
| 4590 | + {"ucr3", AVR32_V1 | AVR32_V2 | AVR32_V3 | AVR32_DSP | AVR32_RMW}, |
| 4591 | + {"ucr3fp", AVR32_V1 | AVR32_V2 | AVR32_V3 | AVR32_DSP | AVR32_RMW | AVR32_V3FP}, |
| 4592 | + {"all-insn", AVR32_V1 | AVR32_V2 | AVR32_V3 | AVR32_SIMD | AVR32_DSP | AVR32_RMW | AVR32_V3FP | AVR32_PICO}, |
| 4593 | + {NULL, 0} |
| 4594 | +}; |
| 4595 | + |
| 4596 | +static struct part_type_s part_types[] = |
| 4597 | +{ |
| 4598 | + {"ap7000", ARCH_TYPE_AP}, |
| 4599 | + {"ap7001", ARCH_TYPE_AP}, |
| 4600 | + {"ap7002", ARCH_TYPE_AP}, |
| 4601 | + {"ap7200", ARCH_TYPE_AP}, |
| 4602 | + {"uc3a0128", ARCH_TYPE_UCR2}, |
| 4603 | + {"uc3a0256", ARCH_TYPE_UCR2}, |
| 4604 | + {"uc3a0512es", ARCH_TYPE_UCR1}, |
| 4605 | + {"uc3a0512", ARCH_TYPE_UCR2}, |
| 4606 | + {"uc3a1128", ARCH_TYPE_UCR2}, |
| 4607 | + {"uc3a1256es", ARCH_TYPE_UCR1}, |
| 4608 | + {"uc3a1256", ARCH_TYPE_UCR2}, |
| 4609 | + {"uc3a1512es", ARCH_TYPE_UCR1}, |
| 4610 | + {"uc3a1512", ARCH_TYPE_UCR2}, |
| 4611 | + {"uc3a364", ARCH_TYPE_UCR2}, |
| 4612 | + {"uc3a364s", ARCH_TYPE_UCR2}, |
| 4613 | + {"uc3a3128", ARCH_TYPE_UCR2}, |
| 4614 | + {"uc3a3128s", ARCH_TYPE_UCR2}, |
| 4615 | + {"uc3a3256", ARCH_TYPE_UCR2}, |
| 4616 | + {"uc3a3256s", ARCH_TYPE_UCR2}, |
| 4617 | + {"uc3b064", ARCH_TYPE_UCR1}, |
| 4618 | + {"uc3b0128", ARCH_TYPE_UCR1}, |
| 4619 | + {"uc3b0256es", ARCH_TYPE_UCR1}, |
| 4620 | + {"uc3b0256", ARCH_TYPE_UCR1}, |
| 4621 | + {"uc3b0512", ARCH_TYPE_UCR2}, |
| 4622 | + {"uc3b0512revc", ARCH_TYPE_UCR2}, |
| 4623 | + {"uc3b164", ARCH_TYPE_UCR1}, |
| 4624 | + {"uc3b1128", ARCH_TYPE_UCR1}, |
| 4625 | + {"uc3b1256", ARCH_TYPE_UCR1}, |
| 4626 | + {"uc3b1256es", ARCH_TYPE_UCR1}, |
| 4627 | + {"uc3b1512", ARCH_TYPE_UCR2}, |
| 4628 | + {"uc3b1512revc", ARCH_TYPE_UCR2}, |
| 4629 | + {"uc3c0512crevc", ARCH_TYPE_UCR3}, |
| 4630 | + {"uc3c1512crevc", ARCH_TYPE_UCR3}, |
| 4631 | + {"uc3c2512crevc", ARCH_TYPE_UCR3}, |
| 4632 | + {"atuc3l0256", ARCH_TYPE_UCR3}, |
| 4633 | + {"mxt768e", ARCH_TYPE_UCR3}, |
| 4634 | + {"uc3l064", ARCH_TYPE_UCR3}, |
| 4635 | + {"uc3l032", ARCH_TYPE_UCR3}, |
| 4636 | + {"uc3l016", ARCH_TYPE_UCR3}, |
| 4637 | + {"uc3l064revb", ARCH_TYPE_UCR3}, |
| 4638 | + {"uc3c064c", ARCH_TYPE_UCR3FP}, |
| 4639 | + {"uc3c0128c", ARCH_TYPE_UCR3FP}, |
| 4640 | + {"uc3c0256c", ARCH_TYPE_UCR3FP}, |
| 4641 | + {"uc3c0512c", ARCH_TYPE_UCR3FP}, |
| 4642 | + {"uc3c164c", ARCH_TYPE_UCR3FP}, |
| 4643 | + {"uc3c1128c", ARCH_TYPE_UCR3FP}, |
| 4644 | + {"uc3c1256c", ARCH_TYPE_UCR3FP}, |
| 4645 | + {"uc3c1512c", ARCH_TYPE_UCR3FP}, |
| 4646 | + {"uc3c264c", ARCH_TYPE_UCR3FP}, |
| 4647 | + {"uc3c2128c", ARCH_TYPE_UCR3FP}, |
| 4648 | + {"uc3c2256c", ARCH_TYPE_UCR3FP}, |
| 4649 | + {"uc3c2512c", ARCH_TYPE_UCR3FP}, |
| 4650 | + {NULL, 0} |
| 4651 | +}; |
| 4652 | + |
| 4653 | +/* Current architecture type. */ |
| 4654 | +static struct arch_type_s default_arch = {"all-insn", AVR32_V1 | AVR32_V2 | AVR32_V3 | AVR32_SIMD | AVR32_DSP | AVR32_RMW | AVR32_V3FP | AVR32_PICO }; |
| 4655 | +static struct arch_type_s *avr32_arch = &default_arch; |
| 4656 | + |
| 4657 | +/* Display nicely formatted list of known part- and architecture names. */ |
| 4658 | + |
| 4659 | +static void |
| 4660 | +show_arch_list (FILE *stream) |
| 4661 | +{ |
| 4662 | + int i, x; |
| 4663 | + |
| 4664 | + fprintf (stream, _("Architectures supported by the assembler:")); |
| 4665 | + x = 1000; |
| 4666 | + |
| 4667 | + for (i = 0; arch_types[i].name; i++) |
| 4668 | + { |
| 4669 | + int len = strlen (arch_types[i].name); |
| 4670 | + |
| 4671 | + x += len + 1; |
| 4672 | + |
| 4673 | + if (x < 75) |
| 4674 | + fprintf (stream, " %s", arch_types[i].name); |
| 4675 | + else |
| 4676 | + { |
| 4677 | + fprintf (stream, "\n %s", arch_types[i].name); |
| 4678 | + x = len + 2; |
| 4679 | + } |
| 4680 | + } |
| 4681 | + |
| 4682 | + fprintf (stream, "\n"); |
| 4683 | +} |
| 4684 | + |
| 4685 | +static void |
| 4686 | +show_part_list (FILE *stream) |
| 4687 | +{ |
| 4688 | + int i, x; |
| 4689 | + |
| 4690 | + fprintf (stream, _("Known part names:")); |
| 4691 | + x = 1000; |
| 4692 | + |
| 4693 | + for (i = 0; part_types[i].name; i++) |
| 4694 | + { |
| 4695 | + int len = strlen(part_types[i].name); |
| 4696 | + |
| 4697 | + x += len + 1; |
| 4698 | + |
| 4699 | + if (x < 75) |
| 4700 | + fprintf (stream, " %s", part_types[i].name); |
| 4701 | + else |
| 4702 | + { |
| 4703 | + fprintf(stream, "\n %s", part_types[i].name); |
| 4704 | + x = len + 2; |
| 4705 | + } |
| 4706 | + } |
| 4707 | + |
| 4708 | + fprintf (stream, "\n"); |
| 4709 | +} |
| 4710 | + |
| 4711 | +const char *md_shortopts = ""; |
| 4712 | +struct option md_longopts[] = |
| 4713 | +{ |
| 4714 | +#define OPTION_ARCH (OPTION_MD_BASE) |
| 4715 | +#define OPTION_PART (OPTION_ARCH + 1) |
| 4716 | +#define OPTION_IAR (OPTION_PART + 1) |
| 4717 | +#define OPTION_PIC (OPTION_IAR + 1) |
| 4718 | +#define OPTION_NOPIC (OPTION_PIC + 1) |
| 4719 | +#define OPTION_LINKRELAX (OPTION_NOPIC + 1) |
| 4720 | +#define OPTION_NOLINKRELAX (OPTION_LINKRELAX + 1) |
| 4721 | +#define OPTION_DIRECT_DATA_REFS (OPTION_NOLINKRELAX + 1) |
| 4722 | + {"march", required_argument, NULL, OPTION_ARCH}, |
| 4723 | + {"mpart", required_argument, NULL, OPTION_PART}, |
| 4724 | + {"iar", no_argument, NULL, OPTION_IAR}, |
| 4725 | + {"pic", no_argument, NULL, OPTION_PIC}, |
| 4726 | + {"no-pic", no_argument, NULL, OPTION_NOPIC}, |
| 4727 | + {"linkrelax", no_argument, NULL, OPTION_LINKRELAX}, |
| 4728 | + {"no-linkrelax", no_argument, NULL, OPTION_NOLINKRELAX}, |
| 4729 | + /* deprecated alias for -mpart=xxx */ |
| 4730 | + {"mcpu", required_argument, NULL, OPTION_PART}, |
| 4731 | + {NULL, no_argument, NULL, 0} |
| 4732 | +}; |
| 4733 | + |
| 4734 | +size_t md_longopts_size = sizeof (md_longopts); |
| 4735 | + |
| 4736 | +void |
| 4737 | +md_show_usage (FILE *stream) |
| 4738 | +{ |
| 4739 | + fprintf (stream, _("\ |
| 4740 | +AVR32 options:\n\ |
| 4741 | + -march=[arch-name] Select cpu architecture. [Default `all-insn']\n\ |
| 4742 | + -mpart=[part-name] Select specific part. [Default `none']\n\ |
| 4743 | + --pic Produce Position-Independent Code\n\ |
| 4744 | + --no-pic Don't produce Position-Independent Code\n\ |
| 4745 | + --linkrelax Produce output suitable for linker relaxing\n\ |
| 4746 | + --no-linkrelax Don't produce output suitable for linker relaxing\n")); |
| 4747 | + show_arch_list(stream); |
| 4748 | +} |
| 4749 | + |
| 4750 | +int |
| 4751 | +md_parse_option (int c, char *arg ATTRIBUTE_UNUSED) |
| 4752 | +{ |
| 4753 | + switch (c) |
| 4754 | + { |
| 4755 | + case OPTION_ARCH: |
| 4756 | + { |
| 4757 | + int i; |
| 4758 | + char *s = alloca (strlen (arg) + 1); |
| 4759 | + |
| 4760 | + { |
| 4761 | + char *t = s; |
| 4762 | + char *arg1 = arg; |
| 4763 | + |
| 4764 | + do |
| 4765 | + *t = TOLOWER (*arg1++); |
| 4766 | + while (*t++); |
| 4767 | + } |
| 4768 | + |
| 4769 | + /* Add backward compability */ |
| 4770 | + if (strcmp ("uc", s)== 0) |
| 4771 | + { |
| 4772 | + as_warn("Deprecated arch `%s' specified. " |
| 4773 | + "Please use '-march=ucr1' instead. " |
| 4774 | + "Using to arch 'ucr1'\n", |
| 4775 | + s); |
| 4776 | + s="ucr1"; |
| 4777 | + } |
| 4778 | + |
| 4779 | + for (i = 0; arch_types[i].name; ++i) |
| 4780 | + if (strcmp (arch_types[i].name, s) == 0) |
| 4781 | + break; |
| 4782 | + |
| 4783 | + if (!arch_types[i].name) |
| 4784 | + { |
| 4785 | + show_arch_list (stderr); |
| 4786 | + as_fatal (_("unknown architecture: %s\n"), arg); |
| 4787 | + } |
| 4788 | + |
| 4789 | + avr32_arch = &arch_types[i]; |
| 4790 | + break; |
| 4791 | + } |
| 4792 | + case OPTION_PART: |
| 4793 | + { |
| 4794 | + int i; |
| 4795 | + char *s = alloca (strlen (arg) + 1); |
| 4796 | + char *t = s; |
| 4797 | + char *p = arg; |
| 4798 | + |
| 4799 | + /* If arch type has already been set, don't bother. |
| 4800 | + -march= always overrides -mpart= */ |
| 4801 | + if (avr32_arch != &default_arch) |
| 4802 | + break; |
| 4803 | + |
| 4804 | + do |
| 4805 | + *t = TOLOWER (*p++); |
| 4806 | + while (*t++); |
| 4807 | + |
| 4808 | + for (i = 0; part_types[i].name; ++i) |
| 4809 | + if (strcmp (part_types[i].name, s) == 0) |
| 4810 | + break; |
| 4811 | + |
| 4812 | + if (!part_types[i].name) |
| 4813 | + { |
| 4814 | + show_part_list (stderr); |
| 4815 | + as_fatal (_("unknown part: %s\n"), arg); |
| 4816 | + } |
| 4817 | + |
| 4818 | + avr32_arch = &arch_types[part_types[i].arch]; |
| 4819 | + break; |
| 4820 | + } |
| 4821 | + case OPTION_IAR: |
| 4822 | + avr32_iarcompat = 1; |
| 4823 | + break; |
| 4824 | + case OPTION_PIC: |
| 4825 | + avr32_pic = 1; |
| 4826 | + break; |
| 4827 | + case OPTION_NOPIC: |
| 4828 | + avr32_pic = 0; |
| 4829 | + break; |
| 4830 | + case OPTION_LINKRELAX: |
| 4831 | + linkrelax = 1; |
| 4832 | + break; |
| 4833 | + case OPTION_NOLINKRELAX: |
| 4834 | + linkrelax = 0; |
| 4835 | + break; |
| 4836 | + default: |
| 4837 | + return 0; |
| 4838 | + } |
| 4839 | + return 1; |
| 4840 | +} |
| 4841 | + |
| 4842 | +/* Can't use symbol_new here, so have to create a symbol and then at |
| 4843 | + a later date assign it a value. Thats what these functions do. |
| 4844 | + |
| 4845 | + Shamelessly stolen from ARM. */ |
| 4846 | + |
| 4847 | +static void |
| 4848 | +symbol_locate (symbolS * symbolP, |
| 4849 | + const char * name, /* It is copied, the caller can modify. */ |
| 4850 | + segT segment, /* Segment identifier (SEG_<something>). */ |
| 4851 | + valueT valu, /* Symbol value. */ |
| 4852 | + fragS * frag) /* Associated fragment. */ |
| 4853 | +{ |
| 4854 | + unsigned int name_length; |
| 4855 | + char * preserved_copy_of_name; |
| 4856 | + |
| 4857 | + name_length = strlen (name) + 1; /* +1 for \0. */ |
| 4858 | + obstack_grow (¬es, name, name_length); |
| 4859 | + preserved_copy_of_name = obstack_finish (¬es); |
| 4860 | +#ifdef STRIP_UNDERSCORE |
| 4861 | + if (preserved_copy_of_name[0] == '_') |
| 4862 | + preserved_copy_of_name++; |
| 4863 | +#endif |
| 4864 | + |
| 4865 | +#ifdef tc_canonicalize_symbol_name |
| 4866 | + preserved_copy_of_name = |
| 4867 | + tc_canonicalize_symbol_name (preserved_copy_of_name); |
| 4868 | +#endif |
| 4869 | + |
| 4870 | + S_SET_NAME (symbolP, preserved_copy_of_name); |
| 4871 | + |
| 4872 | + S_SET_SEGMENT (symbolP, segment); |
| 4873 | + S_SET_VALUE (symbolP, valu); |
| 4874 | + symbol_clear_list_pointers (symbolP); |
| 4875 | + |
| 4876 | + symbol_set_frag (symbolP, frag); |
| 4877 | + |
| 4878 | + /* Link to end of symbol chain. */ |
| 4879 | + { |
| 4880 | + extern int symbol_table_frozen; |
| 4881 | + |
| 4882 | + if (symbol_table_frozen) |
| 4883 | + abort (); |
| 4884 | + } |
| 4885 | + |
| 4886 | + symbol_append (symbolP, symbol_lastP, & symbol_rootP, & symbol_lastP); |
| 4887 | + |
| 4888 | + obj_symbol_new_hook (symbolP); |
| 4889 | + |
| 4890 | +#ifdef tc_symbol_new_hook |
| 4891 | + tc_symbol_new_hook (symbolP); |
| 4892 | +#endif |
| 4893 | + |
| 4894 | +#ifdef DEBUG_SYMS |
| 4895 | + verify_symbol_chain (symbol_rootP, symbol_lastP); |
| 4896 | +#endif /* DEBUG_SYMS */ |
| 4897 | +} |
| 4898 | + |
| 4899 | +struct cpool_entry |
| 4900 | +{ |
| 4901 | + int refcount; |
| 4902 | + offsetT offset; |
| 4903 | + expressionS exp; |
| 4904 | +}; |
| 4905 | + |
| 4906 | +struct cpool |
| 4907 | +{ |
| 4908 | + struct cpool *next; |
| 4909 | + int used; |
| 4910 | + struct cpool_entry *literals; |
| 4911 | + unsigned int padding; |
| 4912 | + unsigned int next_free_entry; |
| 4913 | + unsigned int id; |
| 4914 | + symbolS *symbol; |
| 4915 | + segT section; |
| 4916 | + subsegT sub_section; |
| 4917 | +}; |
| 4918 | + |
| 4919 | +struct cpool *cpool_list = NULL; |
| 4920 | + |
| 4921 | +static struct cpool * |
| 4922 | +find_cpool(segT section, subsegT sub_section) |
| 4923 | +{ |
| 4924 | + struct cpool *pool; |
| 4925 | + |
| 4926 | + for (pool = cpool_list; pool != NULL; pool = pool->next) |
| 4927 | + { |
| 4928 | + if (!pool->used |
| 4929 | + && pool->section == section |
| 4930 | + && pool->sub_section == sub_section) |
| 4931 | + break; |
| 4932 | + } |
| 4933 | + |
| 4934 | + return pool; |
| 4935 | +} |
| 4936 | + |
| 4937 | +static struct cpool * |
| 4938 | +find_or_make_cpool(segT section, subsegT sub_section) |
| 4939 | +{ |
| 4940 | + static unsigned int next_cpool_id = 0; |
| 4941 | + struct cpool *pool; |
| 4942 | + |
| 4943 | + pool = find_cpool(section, sub_section); |
| 4944 | + |
| 4945 | + if (!pool) |
| 4946 | + { |
| 4947 | + pool = xmalloc(sizeof(*pool)); |
| 4948 | + if (!pool) |
| 4949 | + return NULL; |
| 4950 | + |
| 4951 | + pool->used = 0; |
| 4952 | + pool->literals = NULL; |
| 4953 | + pool->padding = 0; |
| 4954 | + pool->next_free_entry = 0; |
| 4955 | + pool->section = section; |
| 4956 | + pool->sub_section = sub_section; |
| 4957 | + pool->next = cpool_list; |
| 4958 | + pool->symbol = NULL; |
| 4959 | + |
| 4960 | + cpool_list = pool; |
| 4961 | + } |
| 4962 | + |
| 4963 | + /* NULL symbol means that the pool is new or has just been emptied. */ |
| 4964 | + if (!pool->symbol) |
| 4965 | + { |
| 4966 | + pool->symbol = symbol_create(FAKE_LABEL_NAME, undefined_section, |
| 4967 | + 0, &zero_address_frag); |
| 4968 | + pool->id = next_cpool_id++; |
| 4969 | + } |
| 4970 | + |
| 4971 | + return pool; |
| 4972 | +} |
| 4973 | + |
| 4974 | +static struct cpool * |
| 4975 | +add_to_cpool(expressionS *exp, unsigned int *index, int ref) |
| 4976 | +{ |
| 4977 | + struct cpool *pool; |
| 4978 | + unsigned int entry; |
| 4979 | + |
| 4980 | + pool = find_or_make_cpool(now_seg, now_subseg); |
| 4981 | + |
| 4982 | + /* Check if this constant is already in the pool. */ |
| 4983 | + for (entry = 0; entry < pool->next_free_entry; entry++) |
| 4984 | + { |
| 4985 | + if ((pool->literals[entry].exp.X_op == exp->X_op) |
| 4986 | + && (exp->X_op == O_constant) |
| 4987 | + && (pool->literals[entry].exp.X_add_number |
| 4988 | + == exp->X_add_number) |
| 4989 | + && (pool->literals[entry].exp.X_unsigned |
| 4990 | + == exp->X_unsigned)) |
| 4991 | + break; |
| 4992 | + |
| 4993 | + if ((pool->literals[entry].exp.X_op == exp->X_op) |
| 4994 | + && (exp->X_op == O_symbol) |
| 4995 | + && (pool->literals[entry].exp.X_add_number |
| 4996 | + == exp->X_add_number) |
| 4997 | + && (pool->literals[entry].exp.X_add_symbol |
| 4998 | + == exp->X_add_symbol) |
| 4999 | + && (pool->literals[entry].exp.X_op_symbol |
| 5000 | + == exp->X_op_symbol)) |
| 5001 | + break; |
| 5002 | + } |
| 5003 | + |
| 5004 | + /* Create an entry if we didn't find a match */ |
| 5005 | + if (entry == pool->next_free_entry) |
| 5006 | + { |
| 5007 | + pool->literals = xrealloc(pool->literals, |
| 5008 | + sizeof(struct cpool_entry) * (entry + 1)); |
| 5009 | + pool->literals[entry].exp = *exp; |
| 5010 | + pool->literals[entry].refcount = 0; |
| 5011 | + pool->next_free_entry++; |
| 5012 | + } |
| 5013 | + |
| 5014 | + if (index) |
| 5015 | + *index = entry; |
| 5016 | + if (ref) |
| 5017 | + pool->literals[entry].refcount++; |
| 5018 | + |
| 5019 | + return pool; |
| 5020 | +} |
| 5021 | + |
| 5022 | +struct avr32_operand |
| 5023 | +{ |
| 5024 | + int id; |
| 5025 | + int is_signed; |
| 5026 | + int is_pcrel; |
| 5027 | + int align_order; |
| 5028 | + int (*match)(char *str); |
| 5029 | + void (*parse)(const struct avr32_operand *op, char *str, int opindex); |
| 5030 | +}; |
| 5031 | + |
| 5032 | +static int |
| 5033 | +match_anything(char *str ATTRIBUTE_UNUSED) |
| 5034 | +{ |
| 5035 | + return 1; |
| 5036 | +} |
| 5037 | + |
| 5038 | +static int |
| 5039 | +match_intreg(char *str) |
| 5040 | +{ |
| 5041 | + int regid, ret = 1; |
| 5042 | + |
| 5043 | + regid = avr32_parse_intreg(str); |
| 5044 | + if (regid < 0) |
| 5045 | + ret = 0; |
| 5046 | + |
| 5047 | + pr_debug("match_intreg: `%s': %d\n", str, ret); |
| 5048 | + |
| 5049 | + return ret; |
| 5050 | +} |
| 5051 | + |
| 5052 | +static int |
| 5053 | +match_intreg_predec(char *str) |
| 5054 | +{ |
| 5055 | + int regid; |
| 5056 | + |
| 5057 | + if (str[0] != '-' || str[1] != '-') |
| 5058 | + return 0; |
| 5059 | + |
| 5060 | + regid = avr32_parse_intreg(str + 2); |
| 5061 | + if (regid < 0) |
| 5062 | + return 0; |
| 5063 | + |
| 5064 | + return 1; |
| 5065 | +} |
| 5066 | + |
| 5067 | +static int |
| 5068 | +match_intreg_postinc(char *str) |
| 5069 | +{ |
| 5070 | + int regid, ret = 1; |
| 5071 | + char *p, c; |
| 5072 | + |
| 5073 | + for (p = str; *p; p++) |
| 5074 | + if (*p == '+') |
| 5075 | + break; |
| 5076 | + |
| 5077 | + if (p[0] != '+' || p[1] != '+') |
| 5078 | + return 0; |
| 5079 | + |
| 5080 | + c = *p, *p = 0; |
| 5081 | + regid = avr32_parse_intreg(str); |
| 5082 | + if (regid < 0) |
| 5083 | + ret = 0; |
| 5084 | + |
| 5085 | + *p = c; |
| 5086 | + return ret; |
| 5087 | +} |
| 5088 | + |
| 5089 | +static int |
| 5090 | +match_intreg_lsl(char *str) |
| 5091 | +{ |
| 5092 | + int regid, ret = 1; |
| 5093 | + char *p, c; |
| 5094 | + |
| 5095 | + for (p = str; *p; p++) |
| 5096 | + if (*p == '<') |
| 5097 | + break; |
| 5098 | + |
| 5099 | + if (p[0] && p[1] != '<') |
| 5100 | + return 0; |
| 5101 | + |
| 5102 | + c = *p, *p = 0; |
| 5103 | + regid = avr32_parse_intreg(str); |
| 5104 | + if (regid < 0) |
| 5105 | + ret = 0; |
| 5106 | + |
| 5107 | + *p = c; |
| 5108 | + return ret; |
| 5109 | +} |
| 5110 | + |
| 5111 | +static int |
| 5112 | +match_intreg_lsr(char *str) |
| 5113 | +{ |
| 5114 | + int regid, ret = 1; |
| 5115 | + char *p, c; |
| 5116 | + |
| 5117 | + for (p = str; *p; p++) |
| 5118 | + if (*p == '>') |
| 5119 | + break; |
| 5120 | + |
| 5121 | + if (p[0] && p[1] != '>') |
| 5122 | + return 0; |
| 5123 | + |
| 5124 | + c = *p, *p = 0; |
| 5125 | + |
| 5126 | + regid = avr32_parse_intreg(str); |
| 5127 | + if (regid < 0) |
| 5128 | + ret = 0; |
| 5129 | + |
| 5130 | + *p = c; |
| 5131 | + return ret; |
| 5132 | +} |
| 5133 | + |
| 5134 | +static int |
| 5135 | +match_intreg_part(char *str) |
| 5136 | +{ |
| 5137 | + int regid, ret = 1; |
| 5138 | + char *p, c; |
| 5139 | + |
| 5140 | + for (p = str; *p; p++) |
| 5141 | + if (*p == ':') |
| 5142 | + break; |
| 5143 | + |
| 5144 | + if (p[0] != ':' || !ISPRINT(p[1]) || p[2] != '\0') |
| 5145 | + return 0; |
| 5146 | + |
| 5147 | + c = *p, *p = 0; |
| 5148 | + regid = avr32_parse_intreg(str); |
| 5149 | + if (regid < 0) |
| 5150 | + ret = 0; |
| 5151 | + |
| 5152 | + *p = c; |
| 5153 | + |
| 5154 | + return ret; |
| 5155 | +} |
| 5156 | + |
| 5157 | +#define match_intreg_disp match_anything |
| 5158 | + |
| 5159 | +static int |
| 5160 | +match_intreg_index(char *str) |
| 5161 | +{ |
| 5162 | + int regid, ret = 1; |
| 5163 | + char *p, *end, c; |
| 5164 | + |
| 5165 | + for (p = str; *p; p++) |
| 5166 | + if (*p == '[') |
| 5167 | + break; |
| 5168 | + |
| 5169 | + /* don't allow empty displacement here (it makes no sense) */ |
| 5170 | + if (p[0] != '[') |
| 5171 | + return 0; |
| 5172 | + |
| 5173 | + for (end = p + 1; *end; end++) ; |
| 5174 | + if (*(--end) != ']') |
| 5175 | + return 0; |
| 5176 | + |
| 5177 | + c = *end, *end = 0; |
| 5178 | + if (!match_intreg_lsl(p + 1)) |
| 5179 | + ret = 0; |
| 5180 | + *end = c; |
| 5181 | + |
| 5182 | + if (ret) |
| 5183 | + { |
| 5184 | + c = *p, *p = 0; |
| 5185 | + regid = avr32_parse_intreg(str); |
| 5186 | + if (regid < 0) |
| 5187 | + ret = 0; |
| 5188 | + *p = c; |
| 5189 | + } |
| 5190 | + |
| 5191 | + return ret; |
| 5192 | +} |
| 5193 | + |
| 5194 | +static int |
| 5195 | +match_intreg_xindex(char *str) |
| 5196 | +{ |
| 5197 | + int regid, ret = 1; |
| 5198 | + char *p, *end, c; |
| 5199 | + |
| 5200 | + for (p = str; *p; p++) |
| 5201 | + if (*p == '[') |
| 5202 | + break; |
| 5203 | + |
| 5204 | + /* empty displacement makes no sense here either */ |
| 5205 | + if (p[0] != '[') |
| 5206 | + return 0; |
| 5207 | + |
| 5208 | + for (end = p + 1; *end; end++) |
| 5209 | + if (*end == '<') |
| 5210 | + break; |
| 5211 | + |
| 5212 | + if (!streq(end, "<<2]")) |
| 5213 | + return 0; |
| 5214 | + |
| 5215 | + c = *end, *end = 0; |
| 5216 | + if (!match_intreg_part(p + 1)) |
| 5217 | + ret = 0; |
| 5218 | + *end = c; |
| 5219 | + |
| 5220 | + if (ret) |
| 5221 | + { |
| 5222 | + c = *p, *p = 0; |
| 5223 | + regid = avr32_parse_intreg(str); |
| 5224 | + if (regid < 0) |
| 5225 | + ret = 0; |
| 5226 | + *p = c; |
| 5227 | + } |
| 5228 | + |
| 5229 | + return ret; |
| 5230 | +} |
| 5231 | + |
| 5232 | +/* The PC_UDISP_W operator may show up as a label or as a pc[disp] |
| 5233 | + expression. So there's no point in attempting to match this... */ |
| 5234 | +#define match_pc_disp match_anything |
| 5235 | + |
| 5236 | +static int |
| 5237 | +match_sp(char *str) |
| 5238 | +{ |
| 5239 | + /* SP in any form will do */ |
| 5240 | + return avr32_parse_intreg(str) == AVR32_REG_SP; |
| 5241 | +} |
| 5242 | + |
| 5243 | +static int |
| 5244 | +match_sp_disp(char *str) |
| 5245 | +{ |
| 5246 | + int regid, ret = 1; |
| 5247 | + char *p, c; |
| 5248 | + |
| 5249 | + for (p = str; *p; p++) |
| 5250 | + if (*p == '[') |
| 5251 | + break; |
| 5252 | + |
| 5253 | + /* allow empty displacement, meaning zero */ |
| 5254 | + if (p[0] == '[') |
| 5255 | + { |
| 5256 | + char *end; |
| 5257 | + for (end = p + 1; *end; end++) ; |
| 5258 | + if (end[-1] != ']') |
| 5259 | + return 0; |
| 5260 | + } |
| 5261 | + |
| 5262 | + c = *p, *p = 0; |
| 5263 | + regid = avr32_parse_intreg(str); |
| 5264 | + if (regid != AVR32_REG_SP) |
| 5265 | + ret = 0; |
| 5266 | + |
| 5267 | + *p = c; |
| 5268 | + return ret; |
| 5269 | +} |
| 5270 | + |
| 5271 | +static int |
| 5272 | +match_cpno(char *str) |
| 5273 | +{ |
| 5274 | + if (strncasecmp(str, "cp", 2) != 0) |
| 5275 | + return 0; |
| 5276 | + return 1; |
| 5277 | +} |
| 5278 | + |
| 5279 | +static int |
| 5280 | +match_cpreg(char *str) |
| 5281 | +{ |
| 5282 | + if (strncasecmp(str, "cr", 2) != 0) |
| 5283 | + return 0; |
| 5284 | + return 1; |
| 5285 | +} |
| 5286 | + |
| 5287 | +/* We allow complex expressions, and register names may show up as |
| 5288 | + symbols. Just make sure immediate expressions are always matched |
| 5289 | + last. */ |
| 5290 | +#define match_const match_anything |
| 5291 | +#define match_jmplabel match_anything |
| 5292 | +#define match_number match_anything |
| 5293 | + |
| 5294 | +/* Mnemonics that take reglists never accept anything else */ |
| 5295 | +#define match_reglist8 match_anything |
| 5296 | +#define match_reglist9 match_anything |
| 5297 | +#define match_reglist16 match_anything |
| 5298 | +#define match_reglist_ldm match_anything |
| 5299 | +#define match_reglist_cp8 match_anything |
| 5300 | +#define match_reglist_cpd8 match_anything |
| 5301 | + |
| 5302 | +/* Ditto for retval, jospinc and mcall */ |
| 5303 | +#define match_retval match_anything |
| 5304 | +#define match_jospinc match_anything |
| 5305 | +#define match_mcall match_anything |
| 5306 | + |
| 5307 | +/* COH is used to select between two different syntaxes */ |
| 5308 | +static int |
| 5309 | +match_coh(char *str) |
| 5310 | +{ |
| 5311 | + return strcasecmp(str, "coh") == 0; |
| 5312 | +} |
| 5313 | +#if 0 |
| 5314 | +static int |
| 5315 | +match_fpreg(char *str) |
| 5316 | +{ |
| 5317 | + unsigned long regid; |
| 5318 | + char *endptr; |
| 5319 | + |
| 5320 | + if ((str[0] != 'f' && str[0] != 'F') |
| 5321 | + || (str[1] != 'r' && str[1] != 'R')) |
| 5322 | + return 0; |
| 5323 | + |
| 5324 | + str += 2; |
| 5325 | + regid = strtoul(str, &endptr, 10); |
| 5326 | + if (!*str || *endptr) |
| 5327 | + return 0; |
| 5328 | + |
| 5329 | + return 1; |
| 5330 | +} |
| 5331 | +#endif |
| 5332 | + |
| 5333 | +static int |
| 5334 | +match_picoreg(char *str) |
| 5335 | +{ |
| 5336 | + int regid; |
| 5337 | + |
| 5338 | + regid = avr32_parse_picoreg(str); |
| 5339 | + if (regid < 0) |
| 5340 | + return 0; |
| 5341 | + return 1; |
| 5342 | +} |
| 5343 | + |
| 5344 | +#define match_pico_reglist_w match_anything |
| 5345 | +#define match_pico_reglist_d match_anything |
| 5346 | + |
| 5347 | +static int |
| 5348 | +match_pico_in(char *str) |
| 5349 | +{ |
| 5350 | + unsigned long regid; |
| 5351 | + char *end; |
| 5352 | + |
| 5353 | + if (strncasecmp(str, "in", 2) != 0) |
| 5354 | + return 0; |
| 5355 | + |
| 5356 | + str += 2; |
| 5357 | + regid = strtoul(str, &end, 10); |
| 5358 | + if (!*str || *end) |
| 5359 | + return 0; |
| 5360 | + |
| 5361 | + return 1; |
| 5362 | +} |
| 5363 | + |
| 5364 | +static int |
| 5365 | +match_pico_out0(char *str) |
| 5366 | +{ |
| 5367 | + if (strcasecmp(str, "out0") != 0) |
| 5368 | + return 0; |
| 5369 | + return 1; |
| 5370 | +} |
| 5371 | + |
| 5372 | +static int |
| 5373 | +match_pico_out1(char *str) |
| 5374 | +{ |
| 5375 | + if (strcasecmp(str, "out1") != 0) |
| 5376 | + return 0; |
| 5377 | + return 1; |
| 5378 | +} |
| 5379 | + |
| 5380 | +static int |
| 5381 | +match_pico_out2(char *str) |
| 5382 | +{ |
| 5383 | + if (strcasecmp(str, "out2") != 0) |
| 5384 | + return 0; |
| 5385 | + return 1; |
| 5386 | +} |
| 5387 | + |
| 5388 | +static int |
| 5389 | +match_pico_out3(char *str) |
| 5390 | +{ |
| 5391 | + if (strcasecmp(str, "out3") != 0) |
| 5392 | + return 0; |
| 5393 | + return 1; |
| 5394 | +} |
| 5395 | + |
| 5396 | +static void parse_nothing(const struct avr32_operand *op ATTRIBUTE_UNUSED, |
| 5397 | + char *str ATTRIBUTE_UNUSED, |
| 5398 | + int opindex ATTRIBUTE_UNUSED) |
| 5399 | +{ |
| 5400 | + /* Do nothing (this is used for "match-only" operands like COH) */ |
| 5401 | +} |
| 5402 | + |
| 5403 | +static void |
| 5404 | +parse_const(const struct avr32_operand *op, char *str, |
| 5405 | + int opindex ATTRIBUTE_UNUSED) |
| 5406 | +{ |
| 5407 | + expressionS *exp = ¤t_insn.immediate; |
| 5408 | + expressionS *sym_exp; |
| 5409 | + int slot; |
| 5410 | + char *save; |
| 5411 | + |
| 5412 | + pr_debug("parse_const: `%s' (signed: %d, pcrel: %d, align: %d)\n", |
| 5413 | + str, op->is_signed, op->is_pcrel, op->align_order); |
| 5414 | + |
| 5415 | + save = input_line_pointer; |
| 5416 | + input_line_pointer = str; |
| 5417 | + |
| 5418 | + expression(exp); |
| 5419 | + |
| 5420 | + slot = current_insn.next_slot++; |
| 5421 | + current_insn.field_value[slot].align_order = op->align_order; |
| 5422 | + current_insn.pcrel = op->is_pcrel; |
| 5423 | + |
| 5424 | + switch (exp->X_op) |
| 5425 | + { |
| 5426 | + case O_illegal: |
| 5427 | + as_bad(_("illegal operand")); |
| 5428 | + break; |
| 5429 | + case O_absent: |
| 5430 | + as_bad(_("missing operand")); |
| 5431 | + break; |
| 5432 | + case O_constant: |
| 5433 | + pr_debug(" -> constant: %ld\n", (long)exp->X_add_number); |
| 5434 | + current_insn.field_value[slot].value = exp->X_add_number; |
| 5435 | + break; |
| 5436 | + case O_uminus: |
| 5437 | + pr_debug(" -> uminus\n"); |
| 5438 | + sym_exp = symbol_get_value_expression(exp->X_add_symbol); |
| 5439 | + switch (sym_exp->X_op) { |
| 5440 | + case O_subtract: |
| 5441 | + pr_debug(" -> subtract: switching operands\n"); |
| 5442 | + exp->X_op_symbol = sym_exp->X_add_symbol; |
| 5443 | + exp->X_add_symbol = sym_exp->X_op_symbol; |
| 5444 | + exp->X_op = O_subtract; |
| 5445 | + /* TODO: Remove the old X_add_symbol */ |
| 5446 | + break; |
| 5447 | + default: |
| 5448 | + as_bad(_("Expression too complex\n")); |
| 5449 | + break; |
| 5450 | + } |
| 5451 | + break; |
| 5452 | +#if 0 |
| 5453 | + case O_subtract: |
| 5454 | + /* Any expression subtracting a symbol from the current section |
| 5455 | + can be made PC-relative by adding the right offset. */ |
| 5456 | + if (S_GET_SEGMENT(exp->X_op_symbol) == now_seg) |
| 5457 | + current_insn.pcrel = TRUE; |
| 5458 | + pr_debug(" -> subtract: pcrel? %s\n", |
| 5459 | + current_insn.pcrel ? "yes" : "no"); |
| 5460 | + /* fall through */ |
| 5461 | +#endif |
| 5462 | + default: |
| 5463 | + pr_debug(" -> (%p <%d> %p + %d)\n", |
| 5464 | + exp->X_add_symbol, exp->X_op, exp->X_op_symbol, |
| 5465 | + exp->X_add_number); |
| 5466 | + current_insn.field_value[slot].value = 0; |
| 5467 | + break; |
| 5468 | + } |
| 5469 | + |
| 5470 | + input_line_pointer = save; |
| 5471 | +} |
| 5472 | + |
| 5473 | +static void |
| 5474 | +parse_jmplabel(const struct avr32_operand *op, char *str, |
| 5475 | + int opindex ATTRIBUTE_UNUSED) |
| 5476 | +{ |
| 5477 | + expressionS *exp = ¤t_insn.immediate; |
| 5478 | + int slot; |
| 5479 | + char *save; |
| 5480 | + |
| 5481 | + pr_debug("parse_jmplabel: `%s' (signed: %d, pcrel: %d, align: %d)\n", |
| 5482 | + str, op->is_signed, op->is_pcrel, op->align_order); |
| 5483 | + |
| 5484 | + save = input_line_pointer; |
| 5485 | + input_line_pointer = str; |
| 5486 | + |
| 5487 | + expression(exp); |
| 5488 | + |
| 5489 | + slot = current_insn.next_slot++; |
| 5490 | + current_insn.field_value[slot].align_order = op->align_order; |
| 5491 | + current_insn.pcrel = TRUE; |
| 5492 | + |
| 5493 | + switch (exp->X_op) |
| 5494 | + { |
| 5495 | + case O_illegal: |
| 5496 | + as_bad(_("illegal operand")); |
| 5497 | + break; |
| 5498 | + case O_absent: |
| 5499 | + as_bad(_("missing operand")); |
| 5500 | + break; |
| 5501 | + case O_constant: |
| 5502 | + pr_debug(" -> constant: %ld\n", (long)exp->X_add_number); |
| 5503 | + current_insn.field_value[slot].value = exp->X_add_number; |
| 5504 | + current_insn.pcrel = 0; |
| 5505 | + break; |
| 5506 | + default: |
| 5507 | + pr_debug(" -> (%p <%d> %p + %d)\n", |
| 5508 | + exp->X_add_symbol, exp->X_op, exp->X_op_symbol, |
| 5509 | + exp->X_add_number); |
| 5510 | + current_insn.field_value[slot].value = 0; |
| 5511 | + break; |
| 5512 | + } |
| 5513 | + |
| 5514 | + input_line_pointer = save; |
| 5515 | +} |
| 5516 | + |
| 5517 | +static void |
| 5518 | +parse_intreg(const struct avr32_operand *op ATTRIBUTE_UNUSED, |
| 5519 | + char *str, int opindex ATTRIBUTE_UNUSED) |
| 5520 | +{ |
| 5521 | + int regid, slot; |
| 5522 | + |
| 5523 | + pr_debug("parse_intreg: `%s'\n", str); |
| 5524 | + |
| 5525 | + regid = avr32_parse_intreg(str); |
| 5526 | + assert(regid >= 0); |
| 5527 | + |
| 5528 | + slot = current_insn.next_slot++; |
| 5529 | + current_insn.field_value[slot].value = regid; |
| 5530 | + current_insn.field_value[slot].align_order = op->align_order; |
| 5531 | +} |
| 5532 | + |
| 5533 | +static void |
| 5534 | +parse_intreg_predec(const struct avr32_operand *op, char *str, int opindex) |
| 5535 | +{ |
| 5536 | + parse_intreg(op, str + 2, opindex); |
| 5537 | +} |
| 5538 | + |
| 5539 | +static void |
| 5540 | +parse_intreg_postinc(const struct avr32_operand *op, char *str, int opindex) |
| 5541 | +{ |
| 5542 | + char *p, c; |
| 5543 | + |
| 5544 | + pr_debug("parse_intreg_postinc: `%s'\n", str); |
| 5545 | + |
| 5546 | + for (p = str; *p != '+'; p++) ; |
| 5547 | + |
| 5548 | + c = *p, *p = 0; |
| 5549 | + parse_intreg(op, str, opindex); |
| 5550 | + *p = c; |
| 5551 | +} |
| 5552 | + |
| 5553 | +static void |
| 5554 | +parse_intreg_shift(const struct avr32_operand *op ATTRIBUTE_UNUSED, |
| 5555 | + char *str, int opindex ATTRIBUTE_UNUSED) |
| 5556 | +{ |
| 5557 | + int regid, slot, shift = 0; |
| 5558 | + char *p, c; |
| 5559 | + char shiftop; |
| 5560 | + |
| 5561 | + pr_debug("parse Ry<<sa: `%s'\n", str); |
| 5562 | + |
| 5563 | + for (p = str; *p; p++) |
| 5564 | + if (*p == '<' || *p == '>') |
| 5565 | + break; |
| 5566 | + |
| 5567 | + shiftop = *p; |
| 5568 | + |
| 5569 | + c = *p, *p = 0; |
| 5570 | + regid = avr32_parse_intreg(str); |
| 5571 | + assert(regid >= 0); |
| 5572 | + *p = c; |
| 5573 | + |
| 5574 | + if (c) |
| 5575 | + { |
| 5576 | + if (p[0] != shiftop || p[1] != shiftop) |
| 5577 | + as_bad(_("expected shift operator in `%s'"), p); |
| 5578 | + else |
| 5579 | + { |
| 5580 | + expressionS exp; |
| 5581 | + char *saved; |
| 5582 | + |
| 5583 | + saved = input_line_pointer; |
| 5584 | + input_line_pointer = p + 2; |
| 5585 | + expression(&exp); |
| 5586 | + input_line_pointer = saved; |
| 5587 | + |
| 5588 | + if (exp.X_op != O_constant) |
| 5589 | + as_bad(_("shift amount must be a numeric constant")); |
| 5590 | + else |
| 5591 | + shift = exp.X_add_number; |
| 5592 | + } |
| 5593 | + } |
| 5594 | + |
| 5595 | + slot = current_insn.next_slot++; |
| 5596 | + current_insn.field_value[slot].value = regid; |
| 5597 | + slot = current_insn.next_slot++; |
| 5598 | + current_insn.field_value[slot].value = shift; |
| 5599 | +} |
| 5600 | + |
| 5601 | +/* The match() function selected the right opcode, so it doesn't |
| 5602 | + matter which way we shift any more. */ |
| 5603 | +#define parse_intreg_lsl parse_intreg_shift |
| 5604 | +#define parse_intreg_lsr parse_intreg_shift |
| 5605 | + |
| 5606 | +static void |
| 5607 | +parse_intreg_part(const struct avr32_operand *op, char *str, |
| 5608 | + int opindex ATTRIBUTE_UNUSED) |
| 5609 | +{ |
| 5610 | + static const char bparts[] = { 'b', 'l', 'u', 't' }; |
| 5611 | + static const char hparts[] = { 'b', 't' }; |
| 5612 | + unsigned int slot, sel; |
| 5613 | + int regid; |
| 5614 | + char *p, c; |
| 5615 | + |
| 5616 | + pr_debug("parse reg:part `%s'\n", str); |
| 5617 | + |
| 5618 | + for (p = str; *p; p++) |
| 5619 | + if (*p == ':') |
| 5620 | + break; |
| 5621 | + |
| 5622 | + c = *p, *p = 0; |
| 5623 | + regid = avr32_parse_intreg(str); |
| 5624 | + assert(regid >= 0); |
| 5625 | + *p = c; |
| 5626 | + |
| 5627 | + assert(c == ':'); |
| 5628 | + |
| 5629 | + if (op->align_order) |
| 5630 | + { |
| 5631 | + for (sel = 0; sel < sizeof(hparts); sel++) |
| 5632 | + if (TOLOWER(p[1]) == hparts[sel]) |
| 5633 | + break; |
| 5634 | + |
| 5635 | + if (sel >= sizeof(hparts)) |
| 5636 | + { |
| 5637 | + as_bad(_("invalid halfword selector `%c' (must be either b or t)"), |
| 5638 | + p[1]); |
| 5639 | + sel = 0; |
| 5640 | + } |
| 5641 | + } |
| 5642 | + else |
| 5643 | + { |
| 5644 | + for (sel = 0; sel < sizeof(bparts); sel++) |
| 5645 | + if (TOLOWER(p[1]) == bparts[sel]) |
| 5646 | + break; |
| 5647 | + |
| 5648 | + if (sel >= sizeof(bparts)) |
| 5649 | + { |
| 5650 | + as_bad(_("invalid byte selector `%c' (must be one of b,l,u,t)"), |
| 5651 | + p[1]); |
| 5652 | + sel = 0; |
| 5653 | + } |
| 5654 | + } |
| 5655 | + |
| 5656 | + slot = current_insn.next_slot++; |
| 5657 | + current_insn.field_value[slot].value = regid; |
| 5658 | + slot = current_insn.next_slot++; |
| 5659 | + current_insn.field_value[slot].value = sel; |
| 5660 | +} |
| 5661 | + |
| 5662 | +/* This is the parser for "Rp[displacement]" expressions. In addition |
| 5663 | + to the "official" syntax, we accept a label as a replacement for |
| 5664 | + the register expression. This syntax implies Rp=PC and the |
| 5665 | + displacement is the pc-relative distance to the label. */ |
| 5666 | +static void |
| 5667 | +parse_intreg_disp(const struct avr32_operand *op, char *str, int opindex) |
| 5668 | +{ |
| 5669 | + expressionS *exp = ¤t_insn.immediate; |
| 5670 | + int slot, regid; |
| 5671 | + char *save, *p, c; |
| 5672 | + |
| 5673 | + pr_debug("parse_intreg_disp: `%s' (signed: %d, pcrel: %d, align: %d)\n", |
| 5674 | + str, op->is_signed, op->is_pcrel, op->align_order); |
| 5675 | + |
| 5676 | + for (p = str; *p; p++) |
| 5677 | + if (*p == '[') |
| 5678 | + break; |
| 5679 | + |
| 5680 | + slot = current_insn.next_slot++; |
| 5681 | + |
| 5682 | + /* First, check if we have a valid register either before '[' or as |
| 5683 | + the sole expression. If so, we use the Rp[disp] syntax. */ |
| 5684 | + c = *p, *p = 0; |
| 5685 | + regid = avr32_parse_intreg(str); |
| 5686 | + *p = c; |
| 5687 | + |
| 5688 | + if (regid >= 0) |
| 5689 | + { |
| 5690 | + current_insn.field_value[slot].value = regid; |
| 5691 | + |
| 5692 | + slot = current_insn.next_slot++; |
| 5693 | + current_insn.field_value[slot].align_order = op->align_order; |
| 5694 | + |
| 5695 | + if (c == '[') |
| 5696 | + { |
| 5697 | + save = input_line_pointer; |
| 5698 | + input_line_pointer = p + 1; |
| 5699 | + |
| 5700 | + expression(exp); |
| 5701 | + |
| 5702 | + if (*input_line_pointer != ']') |
| 5703 | + as_bad(_("junk after displacement expression")); |
| 5704 | + |
| 5705 | + input_line_pointer = save; |
| 5706 | + |
| 5707 | + switch (exp->X_op) |
| 5708 | + { |
| 5709 | + case O_illegal: |
| 5710 | + as_bad(_("illegal displacement expression")); |
| 5711 | + break; |
| 5712 | + case O_absent: |
| 5713 | + as_bad(_("missing displacement expression")); |
| 5714 | + break; |
| 5715 | + case O_constant: |
| 5716 | + pr_debug(" -> constant: %ld\n", exp->X_add_number); |
| 5717 | + current_insn.field_value[slot].value = exp->X_add_number; |
| 5718 | + break; |
| 5719 | +#if 0 |
| 5720 | + case O_subtract: |
| 5721 | + if (S_GET_SEGMENT(exp->X_op_symbol) == now_seg) |
| 5722 | + current_insn.pcrel = TRUE; |
| 5723 | + pr_debug(" -> subtract: pcrel? %s\n", |
| 5724 | + current_insn.pcrel ? "yes" : "no"); |
| 5725 | + /* fall through */ |
| 5726 | +#endif |
| 5727 | + default: |
| 5728 | + pr_debug(" -> (%p <%d> %p + %d)\n", |
| 5729 | + exp->X_add_symbol, exp->X_op, exp->X_op_symbol, |
| 5730 | + exp->X_add_number); |
| 5731 | + current_insn.field_value[slot].value = 0; |
| 5732 | + } |
| 5733 | + } |
| 5734 | + else |
| 5735 | + { |
| 5736 | + exp->X_op = O_constant; |
| 5737 | + exp->X_add_number = 0; |
| 5738 | + current_insn.field_value[slot].value = 0; |
| 5739 | + } |
| 5740 | + } |
| 5741 | + else |
| 5742 | + { |
| 5743 | + /* Didn't find a valid register. Try parsing it as a label. */ |
| 5744 | + current_insn.field_value[slot].value = AVR32_REG_PC; |
| 5745 | + parse_jmplabel(op, str, opindex); |
| 5746 | + } |
| 5747 | +} |
| 5748 | + |
| 5749 | +static void |
| 5750 | +parse_intreg_index(const struct avr32_operand *op ATTRIBUTE_UNUSED, |
| 5751 | + char *str, int opindex ATTRIBUTE_UNUSED) |
| 5752 | +{ |
| 5753 | + int slot, regid; |
| 5754 | + char *p, *end, c; |
| 5755 | + |
| 5756 | + for (p = str; *p; p++) |
| 5757 | + if (*p == '[') |
| 5758 | + break; |
| 5759 | + |
| 5760 | + assert(*p); |
| 5761 | + |
| 5762 | + c = *p, *p = 0; |
| 5763 | + regid = avr32_parse_intreg(str); |
| 5764 | + assert(regid >= 0); |
| 5765 | + *p = c; |
| 5766 | + |
| 5767 | + slot = current_insn.next_slot++; |
| 5768 | + current_insn.field_value[slot].value = regid; |
| 5769 | + |
| 5770 | + p++; |
| 5771 | + for (end = p; *end; end++) |
| 5772 | + if (*end == ']' || *end == '<') |
| 5773 | + break; |
| 5774 | + |
| 5775 | + assert(*end); |
| 5776 | + |
| 5777 | + c = *end, *end = 0; |
| 5778 | + regid = avr32_parse_intreg(p); |
| 5779 | + assert(regid >= 0); |
| 5780 | + *end = c; |
| 5781 | + |
| 5782 | + slot = current_insn.next_slot++; |
| 5783 | + current_insn.field_value[slot].value = regid; |
| 5784 | + |
| 5785 | + slot = current_insn.next_slot++; |
| 5786 | + current_insn.field_value[slot].value = 0; |
| 5787 | + |
| 5788 | + if (*end == '<') |
| 5789 | + { |
| 5790 | + expressionS exp; |
| 5791 | + char *save; |
| 5792 | + |
| 5793 | + p = end + 2; |
| 5794 | + for (end = p; *end; end++) |
| 5795 | + if (*end == ']') |
| 5796 | + break; |
| 5797 | + |
| 5798 | + assert(*end == ']'); |
| 5799 | + |
| 5800 | + c = *end, *end = 0; |
| 5801 | + save = input_line_pointer; |
| 5802 | + input_line_pointer = p; |
| 5803 | + expression(&exp); |
| 5804 | + |
| 5805 | + if (*input_line_pointer) |
| 5806 | + as_bad(_("junk after shift expression")); |
| 5807 | + |
| 5808 | + *end = c; |
| 5809 | + input_line_pointer = save; |
| 5810 | + |
| 5811 | + if (exp.X_op == O_constant) |
| 5812 | + current_insn.field_value[slot].value = exp.X_add_number; |
| 5813 | + else |
| 5814 | + as_bad(_("shift expression too complex")); |
| 5815 | + } |
| 5816 | +} |
| 5817 | + |
| 5818 | +static void |
| 5819 | +parse_intreg_xindex(const struct avr32_operand *op, char *str, int opindex) |
| 5820 | +{ |
| 5821 | + int slot, regid; |
| 5822 | + char *p, *end, c; |
| 5823 | + |
| 5824 | + for (p = str; *p; p++) |
| 5825 | + if (*p == '[') |
| 5826 | + break; |
| 5827 | + |
| 5828 | + assert(*p); |
| 5829 | + |
| 5830 | + c = *p, *p = 0; |
| 5831 | + regid = avr32_parse_intreg(str); |
| 5832 | + assert(regid >= 0); |
| 5833 | + *p = c; |
| 5834 | + |
| 5835 | + slot = current_insn.next_slot++; |
| 5836 | + current_insn.field_value[slot].value = regid; |
| 5837 | + |
| 5838 | + p++; |
| 5839 | + for (end = p; *end; end++) |
| 5840 | + if (*end == '<') |
| 5841 | + break; |
| 5842 | + |
| 5843 | + assert(*end); |
| 5844 | + |
| 5845 | + c = *end, *end = 0; |
| 5846 | + parse_intreg_part(op, p, opindex); |
| 5847 | + *end = c; |
| 5848 | +} |
| 5849 | + |
| 5850 | +static void |
| 5851 | +parse_pc_disp(const struct avr32_operand *op, char *str, int opindex) |
| 5852 | +{ |
| 5853 | + char *p, c; |
| 5854 | + |
| 5855 | + for (p = str; *p; p++) |
| 5856 | + if (*p == '[') |
| 5857 | + break; |
| 5858 | + |
| 5859 | + /* The lddpc instruction comes in two different syntax variants: |
| 5860 | + lddpc reg, expression |
| 5861 | + lddpc reg, pc[disp] |
| 5862 | + If the operand contains a '[', we use the second form. */ |
| 5863 | + if (*p) |
| 5864 | + { |
| 5865 | + int regid; |
| 5866 | + |
| 5867 | + c = *p, *p = 0; |
| 5868 | + regid = avr32_parse_intreg(str); |
| 5869 | + *p = c; |
| 5870 | + if (regid == AVR32_REG_PC) |
| 5871 | + { |
| 5872 | + char *end; |
| 5873 | + |
| 5874 | + for (end = ++p; *end; end++) ; |
| 5875 | + if (*(--end) != ']') |
| 5876 | + as_bad(_("unrecognized form of instruction: `%s'"), str); |
| 5877 | + else |
| 5878 | + { |
| 5879 | + c = *end, *end = 0; |
| 5880 | + parse_const(op, p, opindex); |
| 5881 | + *end = c; |
| 5882 | + current_insn.pcrel = 0; |
| 5883 | + } |
| 5884 | + } |
| 5885 | + else |
| 5886 | + as_bad(_("unrecognized form of instruction: `%s'"), str); |
| 5887 | + } |
| 5888 | + else |
| 5889 | + { |
| 5890 | + parse_jmplabel(op, str, opindex); |
| 5891 | + } |
| 5892 | +} |
| 5893 | + |
| 5894 | +static void parse_sp(const struct avr32_operand *op ATTRIBUTE_UNUSED, |
| 5895 | + char *str ATTRIBUTE_UNUSED, |
| 5896 | + int opindex ATTRIBUTE_UNUSED) |
| 5897 | +{ |
| 5898 | + int slot; |
| 5899 | + |
| 5900 | + slot = current_insn.next_slot++; |
| 5901 | + current_insn.field_value[slot].value = AVR32_REG_SP; |
| 5902 | +} |
| 5903 | + |
| 5904 | +static void |
| 5905 | +parse_sp_disp(const struct avr32_operand *op, char *str, int opindex) |
| 5906 | +{ |
| 5907 | + char *p, c; |
| 5908 | + |
| 5909 | + for (; *str; str++) |
| 5910 | + if (*str == '[') |
| 5911 | + break; |
| 5912 | + |
| 5913 | + assert(*str); |
| 5914 | + |
| 5915 | + for (p = ++str; *p; p++) |
| 5916 | + if (*p == ']') |
| 5917 | + break; |
| 5918 | + |
| 5919 | + c = *p, *p = 0; |
| 5920 | + parse_const(op, str, opindex); |
| 5921 | + *p = c; |
| 5922 | +} |
| 5923 | + |
| 5924 | +static void |
| 5925 | +parse_cpno(const struct avr32_operand *op ATTRIBUTE_UNUSED, char *str, |
| 5926 | + int opindex ATTRIBUTE_UNUSED) |
| 5927 | +{ |
| 5928 | + int slot; |
| 5929 | + |
| 5930 | + str += 2; |
| 5931 | + if (*str == '#') |
| 5932 | + str++; |
| 5933 | + if (*str < '0' || *str > '7' || str[1]) |
| 5934 | + as_bad(_("invalid coprocessor `%s'"), str); |
| 5935 | + |
| 5936 | + slot = current_insn.next_slot++; |
| 5937 | + current_insn.field_value[slot].value = *str - '0'; |
| 5938 | +} |
| 5939 | + |
| 5940 | +static void |
| 5941 | +parse_cpreg(const struct avr32_operand *op, char *str, |
| 5942 | + int opindex ATTRIBUTE_UNUSED) |
| 5943 | +{ |
| 5944 | + unsigned int crid; |
| 5945 | + int slot; |
| 5946 | + char *endptr; |
| 5947 | + |
| 5948 | + str += 2; |
| 5949 | + crid = strtoul(str, &endptr, 10); |
| 5950 | + if (*endptr || crid > 15 || crid & ((1 << op->align_order) - 1)) |
| 5951 | + as_bad(_("invalid coprocessor register `%s'"), str); |
| 5952 | + |
| 5953 | + crid >>= op->align_order; |
| 5954 | + |
| 5955 | + slot = current_insn.next_slot++; |
| 5956 | + current_insn.field_value[slot].value = crid; |
| 5957 | +} |
| 5958 | + |
| 5959 | +static void |
| 5960 | +parse_number(const struct avr32_operand *op, char *str, |
| 5961 | + int opindex ATTRIBUTE_UNUSED) |
| 5962 | +{ |
| 5963 | + expressionS exp; |
| 5964 | + int slot; |
| 5965 | + char *save; |
| 5966 | + |
| 5967 | + save = input_line_pointer; |
| 5968 | + input_line_pointer = str; |
| 5969 | + expression(&exp); |
| 5970 | + input_line_pointer = save; |
| 5971 | + |
| 5972 | + slot = current_insn.next_slot++; |
| 5973 | + current_insn.field_value[slot].align_order = op->align_order; |
| 5974 | + |
| 5975 | + if (exp.X_op == O_constant) |
| 5976 | + current_insn.field_value[slot].value = exp.X_add_number; |
| 5977 | + else |
| 5978 | + as_bad(_("invalid numeric expression `%s'"), str); |
| 5979 | +} |
| 5980 | + |
| 5981 | +static void |
| 5982 | +parse_reglist8(const struct avr32_operand *op ATTRIBUTE_UNUSED, |
| 5983 | + char *str, int opindex ATTRIBUTE_UNUSED) |
| 5984 | +{ |
| 5985 | + unsigned long regmask; |
| 5986 | + unsigned long value = 0; |
| 5987 | + int slot; |
| 5988 | + char *tail; |
| 5989 | + |
| 5990 | + regmask = avr32_parse_reglist(str, &tail); |
| 5991 | + if (*tail) |
| 5992 | + as_bad(_("invalid register list `%s'"), str); |
| 5993 | + else |
| 5994 | + { |
| 5995 | + if (avr32_make_regmask8(regmask, &value)) |
| 5996 | + as_bad(_("register list `%s' doesn't fit"), str); |
| 5997 | + } |
| 5998 | + |
| 5999 | + slot = current_insn.next_slot++; |
| 6000 | + current_insn.field_value[slot].value = value; |
| 6001 | +} |
| 6002 | + |
| 6003 | +static int |
| 6004 | +parse_reglist_tail(char *str, unsigned long regmask) |
| 6005 | +{ |
| 6006 | + expressionS exp; |
| 6007 | + char *save, *p, c; |
| 6008 | + int regid; |
| 6009 | + |
| 6010 | + for (p = str + 1; *p; p++) |
| 6011 | + if (*p == '=') |
| 6012 | + break; |
| 6013 | + |
| 6014 | + if (!*p) |
| 6015 | + { |
| 6016 | + as_bad(_("invalid register list `%s'"), str); |
| 6017 | + return -2; |
| 6018 | + } |
| 6019 | + |
| 6020 | + c = *p, *p = 0; |
| 6021 | + regid = avr32_parse_intreg(str); |
| 6022 | + *p = c; |
| 6023 | + |
| 6024 | + if (regid != 12) |
| 6025 | + { |
| 6026 | + as_bad(_("invalid register list `%s'"), str); |
| 6027 | + return -2; |
| 6028 | + } |
| 6029 | + |
| 6030 | + /* If we have an assignment, we must pop PC and we must _not_ |
| 6031 | + pop LR or R12 */ |
| 6032 | + if (!(regmask & (1 << AVR32_REG_PC))) |
| 6033 | + { |
| 6034 | + as_bad(_("return value specified for non-return instruction")); |
| 6035 | + return -2; |
| 6036 | + } |
| 6037 | + else if (regmask & ((1 << AVR32_REG_R12) | (1 << AVR32_REG_LR))) |
| 6038 | + { |
| 6039 | + as_bad(_("can't pop LR or R12 when specifying return value")); |
| 6040 | + return -2; |
| 6041 | + } |
| 6042 | + |
| 6043 | + save = input_line_pointer; |
| 6044 | + input_line_pointer = p + 1; |
| 6045 | + expression(&exp); |
| 6046 | + input_line_pointer = save; |
| 6047 | + |
| 6048 | + if (exp.X_op != O_constant |
| 6049 | + || exp.X_add_number < -1 |
| 6050 | + || exp.X_add_number > 1) |
| 6051 | + { |
| 6052 | + as_bad(_("invalid return value `%s'"), str); |
| 6053 | + return -2; |
| 6054 | + } |
| 6055 | + |
| 6056 | + return exp.X_add_number; |
| 6057 | +} |
| 6058 | + |
| 6059 | +static void |
| 6060 | +parse_reglist9(const struct avr32_operand *op ATTRIBUTE_UNUSED, |
| 6061 | + char *str, int opindex ATTRIBUTE_UNUSED) |
| 6062 | +{ |
| 6063 | + unsigned long regmask; |
| 6064 | + unsigned long value = 0, kbit = 0; |
| 6065 | + int slot; |
| 6066 | + char *tail; |
| 6067 | + |
| 6068 | + regmask = avr32_parse_reglist(str, &tail); |
| 6069 | + /* printf("parsed reglist16: %04lx, tail: `%s'\n", regmask, tail); */ |
| 6070 | + if (*tail) |
| 6071 | + { |
| 6072 | + int retval; |
| 6073 | + |
| 6074 | + retval = parse_reglist_tail(tail, regmask); |
| 6075 | + |
| 6076 | + switch (retval) |
| 6077 | + { |
| 6078 | + case -1: |
| 6079 | + regmask |= 1 << AVR32_REG_LR; |
| 6080 | + break; |
| 6081 | + case 0: |
| 6082 | + break; |
| 6083 | + case 1: |
| 6084 | + regmask |= 1 << AVR32_REG_R12; |
| 6085 | + break; |
| 6086 | + default: |
| 6087 | + break; |
| 6088 | + } |
| 6089 | + |
| 6090 | + kbit = 1; |
| 6091 | + } |
| 6092 | + |
| 6093 | + if (avr32_make_regmask8(regmask, &value)) |
| 6094 | + as_bad(_("register list `%s' doesn't fit"), str); |
| 6095 | + |
| 6096 | + |
| 6097 | + slot = current_insn.next_slot++; |
| 6098 | + current_insn.field_value[slot].value = (value << 1) | kbit; |
| 6099 | +} |
| 6100 | + |
| 6101 | +static void |
| 6102 | +parse_reglist16(const struct avr32_operand *op ATTRIBUTE_UNUSED, |
| 6103 | + char *str, int opindex ATTRIBUTE_UNUSED) |
| 6104 | +{ |
| 6105 | + unsigned long regmask; |
| 6106 | + int slot; |
| 6107 | + char *tail; |
| 6108 | + |
| 6109 | + regmask = avr32_parse_reglist(str, &tail); |
| 6110 | + if (*tail) |
| 6111 | + as_bad(_("invalid register list `%s'"), str); |
| 6112 | + |
| 6113 | + slot = current_insn.next_slot++; |
| 6114 | + current_insn.field_value[slot].value = regmask; |
| 6115 | +} |
| 6116 | + |
| 6117 | +static void |
| 6118 | +parse_reglist_ldm(const struct avr32_operand *op ATTRIBUTE_UNUSED, |
| 6119 | + char *str, int opindex ATTRIBUTE_UNUSED) |
| 6120 | +{ |
| 6121 | + unsigned long regmask; |
| 6122 | + int slot, rp, w_bit = 0; |
| 6123 | + char *tail, *p, c; |
| 6124 | + |
| 6125 | + for (p = str; *p && *p != ','; p++) |
| 6126 | + if (*p == '+') |
| 6127 | + break; |
| 6128 | + |
| 6129 | + c = *p, *p = 0; |
| 6130 | + rp = avr32_parse_intreg(str); |
| 6131 | + *p = c; |
| 6132 | + if (rp < 0) |
| 6133 | + { |
| 6134 | + as_bad(_("invalid destination register in `%s'"), str); |
| 6135 | + return; |
| 6136 | + } |
| 6137 | + |
| 6138 | + if (p[0] == '+' && p[1] == '+') |
| 6139 | + { |
| 6140 | + w_bit = 1; |
| 6141 | + p += 2; |
| 6142 | + } |
| 6143 | + |
| 6144 | + if (*p != ',') |
| 6145 | + { |
| 6146 | + as_bad(_("expected `,' after destination register in `%s'"), str); |
| 6147 | + return; |
| 6148 | + } |
| 6149 | + |
| 6150 | + str = p + 1; |
| 6151 | + regmask = avr32_parse_reglist(str, &tail); |
| 6152 | + if (*tail) |
| 6153 | + { |
| 6154 | + int retval; |
| 6155 | + |
| 6156 | + if (rp != AVR32_REG_SP) |
| 6157 | + { |
| 6158 | + as_bad(_("junk at end of line: `%s'"), tail); |
| 6159 | + return; |
| 6160 | + } |
| 6161 | + |
| 6162 | + rp = AVR32_REG_PC; |
| 6163 | + |
| 6164 | + retval = parse_reglist_tail(tail, regmask); |
| 6165 | + |
| 6166 | + switch (retval) |
| 6167 | + { |
| 6168 | + case -1: |
| 6169 | + regmask |= 1 << AVR32_REG_LR; |
| 6170 | + break; |
| 6171 | + case 0: |
| 6172 | + break; |
| 6173 | + case 1: |
| 6174 | + regmask |= 1 << AVR32_REG_R12; |
| 6175 | + break; |
| 6176 | + default: |
| 6177 | + return; |
| 6178 | + } |
| 6179 | + } |
| 6180 | + |
| 6181 | + slot = current_insn.next_slot++; |
| 6182 | + current_insn.field_value[slot].value = rp; |
| 6183 | + slot = current_insn.next_slot++; |
| 6184 | + current_insn.field_value[slot].value = w_bit; |
| 6185 | + slot = current_insn.next_slot++; |
| 6186 | + current_insn.field_value[slot].value = regmask; |
| 6187 | +} |
| 6188 | + |
| 6189 | +static void |
| 6190 | +parse_reglist_cp8(const struct avr32_operand *op ATTRIBUTE_UNUSED, |
| 6191 | + char *str, int opindex ATTRIBUTE_UNUSED) |
| 6192 | +{ |
| 6193 | + unsigned long regmask; |
| 6194 | + int slot, h_bit = 0; |
| 6195 | + char *tail; |
| 6196 | + |
| 6197 | + regmask = avr32_parse_cpreglist(str, &tail); |
| 6198 | + if (*tail) |
| 6199 | + as_bad(_("junk at end of line: `%s'"), tail); |
| 6200 | + else if (regmask & 0xffUL) |
| 6201 | + { |
| 6202 | + if (regmask & 0xff00UL) |
| 6203 | + as_bad(_("register list `%s' doesn't fit"), str); |
| 6204 | + regmask &= 0xff; |
| 6205 | + } |
| 6206 | + else if (regmask & 0xff00UL) |
| 6207 | + { |
| 6208 | + regmask >>= 8; |
| 6209 | + h_bit = 1; |
| 6210 | + } |
| 6211 | + else |
| 6212 | + as_warn(_("register list is empty")); |
| 6213 | + |
| 6214 | + slot = current_insn.next_slot++; |
| 6215 | + current_insn.field_value[slot].value = regmask; |
| 6216 | + slot = current_insn.next_slot++; |
| 6217 | + current_insn.field_value[slot].value = h_bit; |
| 6218 | +} |
| 6219 | + |
| 6220 | +static void |
| 6221 | +parse_reglist_cpd8(const struct avr32_operand *op ATTRIBUTE_UNUSED, |
| 6222 | + char *str, int opindex ATTRIBUTE_UNUSED) |
| 6223 | +{ |
| 6224 | + unsigned long regmask, regmask_d = 0; |
| 6225 | + int slot, i; |
| 6226 | + char *tail; |
| 6227 | + |
| 6228 | + regmask = avr32_parse_cpreglist(str, &tail); |
| 6229 | + if (*tail) |
| 6230 | + as_bad(_("junk at end of line: `%s'"), tail); |
| 6231 | + |
| 6232 | + for (i = 0; i < 8; i++) |
| 6233 | + { |
| 6234 | + if (regmask & 1) |
| 6235 | + { |
| 6236 | + if (!(regmask & 2)) |
| 6237 | + { |
| 6238 | + as_bad(_("register list `%s' doesn't fit"), str); |
| 6239 | + break; |
| 6240 | + } |
| 6241 | + regmask_d |= 1 << i; |
| 6242 | + } |
| 6243 | + else if (regmask & 2) |
| 6244 | + { |
| 6245 | + as_bad(_("register list `%s' doesn't fit"), str); |
| 6246 | + break; |
| 6247 | + } |
| 6248 | + |
| 6249 | + regmask >>= 2; |
| 6250 | + } |
| 6251 | + |
| 6252 | + slot = current_insn.next_slot++; |
| 6253 | + current_insn.field_value[slot].value = regmask_d; |
| 6254 | +} |
| 6255 | + |
| 6256 | +static void |
| 6257 | +parse_retval(const struct avr32_operand *op ATTRIBUTE_UNUSED, |
| 6258 | + char *str, int opindex ATTRIBUTE_UNUSED) |
| 6259 | +{ |
| 6260 | + int regid, slot; |
| 6261 | + |
| 6262 | + regid = avr32_parse_intreg(str); |
| 6263 | + if (regid < 0) |
| 6264 | + { |
| 6265 | + expressionS exp; |
| 6266 | + char *save; |
| 6267 | + |
| 6268 | + regid = 0; |
| 6269 | + |
| 6270 | + save = input_line_pointer; |
| 6271 | + input_line_pointer = str; |
| 6272 | + expression(&exp); |
| 6273 | + input_line_pointer = save; |
| 6274 | + |
| 6275 | + if (exp.X_op != O_constant) |
| 6276 | + as_bad(_("invalid return value `%s'"), str); |
| 6277 | + else |
| 6278 | + switch (exp.X_add_number) |
| 6279 | + { |
| 6280 | + case -1: |
| 6281 | + regid = AVR32_REG_LR; |
| 6282 | + break; |
| 6283 | + case 0: |
| 6284 | + regid = AVR32_REG_SP; |
| 6285 | + break; |
| 6286 | + case 1: |
| 6287 | + regid = AVR32_REG_PC; |
| 6288 | + break; |
| 6289 | + default: |
| 6290 | + as_bad(_("invalid return value `%s'"), str); |
| 6291 | + break; |
| 6292 | + } |
| 6293 | + } |
| 6294 | + |
| 6295 | + slot = current_insn.next_slot++; |
| 6296 | + current_insn.field_value[slot].value = regid; |
| 6297 | +} |
| 6298 | + |
| 6299 | +#define parse_mcall parse_intreg_disp |
| 6300 | + |
| 6301 | +static void |
| 6302 | +parse_jospinc(const struct avr32_operand *op ATTRIBUTE_UNUSED, |
| 6303 | + char *str, int opindex ATTRIBUTE_UNUSED) |
| 6304 | +{ |
| 6305 | + expressionS exp; |
| 6306 | + int slot; |
| 6307 | + char *save; |
| 6308 | + |
| 6309 | + save = input_line_pointer; |
| 6310 | + input_line_pointer = str; |
| 6311 | + expression(&exp); |
| 6312 | + input_line_pointer = save; |
| 6313 | + |
| 6314 | + slot = current_insn.next_slot++; |
| 6315 | + |
| 6316 | + if (exp.X_op == O_constant) |
| 6317 | + { |
| 6318 | + if (exp.X_add_number > 0) |
| 6319 | + exp.X_add_number--; |
| 6320 | + current_insn.field_value[slot].value = exp.X_add_number; |
| 6321 | + } |
| 6322 | + else |
| 6323 | + as_bad(_("invalid numeric expression `%s'"), str); |
| 6324 | +} |
| 6325 | + |
| 6326 | +#define parse_coh parse_nothing |
| 6327 | +#if 0 |
| 6328 | +static void |
| 6329 | +parse_fpreg(const struct avr32_operand *op, |
| 6330 | + char *str, int opindex ATTRIBUTE_UNUSED) |
| 6331 | +{ |
| 6332 | + unsigned long regid; |
| 6333 | + int slot; |
| 6334 | + |
| 6335 | + regid = strtoul(str + 2, NULL, 10); |
| 6336 | + |
| 6337 | + if ((regid >= 16) || (regid & ((1 << op->align_order) - 1))) |
| 6338 | + as_bad(_("invalid floating-point register `%s'"), str); |
| 6339 | + |
| 6340 | + slot = current_insn.next_slot++; |
| 6341 | + current_insn.field_value[slot].value = regid; |
| 6342 | + current_insn.field_value[slot].align_order = op->align_order; |
| 6343 | +} |
| 6344 | +#endif |
| 6345 | + |
| 6346 | +static void |
| 6347 | +parse_picoreg(const struct avr32_operand *op, |
| 6348 | + char *str, int opindex ATTRIBUTE_UNUSED) |
| 6349 | +{ |
| 6350 | + unsigned long regid; |
| 6351 | + int slot; |
| 6352 | + |
| 6353 | + regid = avr32_parse_picoreg(str); |
| 6354 | + if (regid & ((1 << op->align_order) - 1)) |
| 6355 | + as_bad(_("invalid double-word PiCo register `%s'"), str); |
| 6356 | + |
| 6357 | + slot = current_insn.next_slot++; |
| 6358 | + current_insn.field_value[slot].value = regid; |
| 6359 | + current_insn.field_value[slot].align_order = op->align_order; |
| 6360 | +} |
| 6361 | + |
| 6362 | +static void |
| 6363 | +parse_pico_reglist_w(const struct avr32_operand *op ATTRIBUTE_UNUSED, |
| 6364 | + char *str, int opindex ATTRIBUTE_UNUSED) |
| 6365 | +{ |
| 6366 | + unsigned long regmask; |
| 6367 | + int slot, h_bit = 0; |
| 6368 | + char *tail; |
| 6369 | + |
| 6370 | + regmask = avr32_parse_pico_reglist(str, &tail); |
| 6371 | + if (*tail) |
| 6372 | + as_bad(_("junk at end of line: `%s'"), tail); |
| 6373 | + |
| 6374 | + if (regmask & 0x00ffUL) |
| 6375 | + { |
| 6376 | + if (regmask & 0xff00UL) |
| 6377 | + as_bad(_("register list `%s' doesn't fit"), str); |
| 6378 | + regmask &= 0x00ffUL; |
| 6379 | + } |
| 6380 | + else if (regmask & 0xff00UL) |
| 6381 | + { |
| 6382 | + regmask >>= 8; |
| 6383 | + h_bit = 1; |
| 6384 | + } |
| 6385 | + else |
| 6386 | + as_warn(_("register list is empty")); |
| 6387 | + |
| 6388 | + slot = current_insn.next_slot++; |
| 6389 | + current_insn.field_value[slot].value = regmask; |
| 6390 | + slot = current_insn.next_slot++; |
| 6391 | + current_insn.field_value[slot].value = h_bit; |
| 6392 | +} |
| 6393 | + |
| 6394 | +static void |
| 6395 | +parse_pico_reglist_d(const struct avr32_operand *op ATTRIBUTE_UNUSED, |
| 6396 | + char *str, int opindex ATTRIBUTE_UNUSED) |
| 6397 | +{ |
| 6398 | + unsigned long regmask, regmask_d = 0; |
| 6399 | + int slot, i; |
| 6400 | + char *tail; |
| 6401 | + |
| 6402 | + regmask = avr32_parse_pico_reglist(str, &tail); |
| 6403 | + if (*tail) |
| 6404 | + as_bad(_("junk at end of line: `%s'"), tail); |
| 6405 | + |
| 6406 | + for (i = 0; i < 8; i++) |
| 6407 | + { |
| 6408 | + if (regmask & 1) |
| 6409 | + { |
| 6410 | + if (!(regmask & 2)) |
| 6411 | + { |
| 6412 | + as_bad(_("register list `%s' doesn't fit"), str); |
| 6413 | + break; |
| 6414 | + } |
| 6415 | + regmask_d |= 1 << i; |
| 6416 | + } |
| 6417 | + else if (regmask & 2) |
| 6418 | + { |
| 6419 | + as_bad(_("register list `%s' doesn't fit"), str); |
| 6420 | + break; |
| 6421 | + } |
| 6422 | + |
| 6423 | + regmask >>= 2; |
| 6424 | + } |
| 6425 | + |
| 6426 | + slot = current_insn.next_slot++; |
| 6427 | + current_insn.field_value[slot].value = regmask_d; |
| 6428 | +} |
| 6429 | + |
| 6430 | +static void |
| 6431 | +parse_pico_in(const struct avr32_operand *op ATTRIBUTE_UNUSED, |
| 6432 | + char *str, int opindex ATTRIBUTE_UNUSED) |
| 6433 | +{ |
| 6434 | + unsigned long regid; |
| 6435 | + int slot; |
| 6436 | + |
| 6437 | + regid = strtoul(str + 2, NULL, 10); |
| 6438 | + |
| 6439 | + if (regid >= 12) |
| 6440 | + as_bad(_("invalid PiCo IN register `%s'"), str); |
| 6441 | + |
| 6442 | + slot = current_insn.next_slot++; |
| 6443 | + current_insn.field_value[slot].value = regid; |
| 6444 | + current_insn.field_value[slot].align_order = 0; |
| 6445 | +} |
| 6446 | + |
| 6447 | +#define parse_pico_out0 parse_nothing |
| 6448 | +#define parse_pico_out1 parse_nothing |
| 6449 | +#define parse_pico_out2 parse_nothing |
| 6450 | +#define parse_pico_out3 parse_nothing |
| 6451 | + |
| 6452 | +#define OP(name, sgn, pcrel, align, func) \ |
| 6453 | + { AVR32_OPERAND_##name, sgn, pcrel, align, match_##func, parse_##func } |
| 6454 | + |
| 6455 | +struct avr32_operand avr32_operand_table[] = { |
| 6456 | + OP(INTREG, 0, 0, 0, intreg), |
| 6457 | + OP(INTREG_PREDEC, 0, 0, 0, intreg_predec), |
| 6458 | + OP(INTREG_POSTINC, 0, 0, 0, intreg_postinc), |
| 6459 | + OP(INTREG_LSL, 0, 0, 0, intreg_lsl), |
| 6460 | + OP(INTREG_LSR, 0, 0, 0, intreg_lsr), |
| 6461 | + OP(INTREG_BSEL, 0, 0, 0, intreg_part), |
| 6462 | + OP(INTREG_HSEL, 0, 0, 1, intreg_part), |
| 6463 | + OP(INTREG_SDISP, 1, 0, 0, intreg_disp), |
| 6464 | + OP(INTREG_SDISP_H, 1, 0, 1, intreg_disp), |
| 6465 | + OP(INTREG_SDISP_W, 1, 0, 2, intreg_disp), |
| 6466 | + OP(INTREG_UDISP, 0, 0, 0, intreg_disp), |
| 6467 | + OP(INTREG_UDISP_H, 0, 0, 1, intreg_disp), |
| 6468 | + OP(INTREG_UDISP_W, 0, 0, 2, intreg_disp), |
| 6469 | + OP(INTREG_INDEX, 0, 0, 0, intreg_index), |
| 6470 | + OP(INTREG_XINDEX, 0, 0, 0, intreg_xindex), |
| 6471 | + OP(DWREG, 0, 0, 1, intreg), |
| 6472 | + OP(PC_UDISP_W, 0, 1, 2, pc_disp), |
| 6473 | + OP(SP, 0, 0, 0, sp), |
| 6474 | + OP(SP_UDISP_W, 0, 0, 2, sp_disp), |
| 6475 | + OP(CPNO, 0, 0, 0, cpno), |
| 6476 | + OP(CPREG, 0, 0, 0, cpreg), |
| 6477 | + OP(CPREG_D, 0, 0, 1, cpreg), |
| 6478 | + OP(UNSIGNED_CONST, 0, 0, 0, const), |
| 6479 | + OP(UNSIGNED_CONST_W, 0, 0, 2, const), |
| 6480 | + OP(SIGNED_CONST, 1, 0, 0, const), |
| 6481 | + OP(SIGNED_CONST_W, 1, 0, 2, const), |
| 6482 | + OP(JMPLABEL, 1, 1, 1, jmplabel), |
| 6483 | + OP(UNSIGNED_NUMBER, 0, 0, 0, number), |
| 6484 | + OP(UNSIGNED_NUMBER_W, 0, 0, 2, number), |
| 6485 | + OP(REGLIST8, 0, 0, 0, reglist8), |
| 6486 | + OP(REGLIST9, 0, 0, 0, reglist9), |
| 6487 | + OP(REGLIST16, 0, 0, 0, reglist16), |
| 6488 | + OP(REGLIST_LDM, 0, 0, 0, reglist_ldm), |
| 6489 | + OP(REGLIST_CP8, 0, 0, 0, reglist_cp8), |
| 6490 | + OP(REGLIST_CPD8, 0, 0, 0, reglist_cpd8), |
| 6491 | + OP(RETVAL, 0, 0, 0, retval), |
| 6492 | + OP(MCALL, 1, 0, 2, mcall), |
| 6493 | + OP(JOSPINC, 0, 0, 0, jospinc), |
| 6494 | + OP(COH, 0, 0, 0, coh), |
| 6495 | + OP(PICO_REG_W, 0, 0, 0, picoreg), |
| 6496 | + OP(PICO_REG_D, 0, 0, 1, picoreg), |
| 6497 | + OP(PICO_REGLIST_W, 0, 0, 0, pico_reglist_w), |
| 6498 | + OP(PICO_REGLIST_D, 0, 0, 0, pico_reglist_d), |
| 6499 | + OP(PICO_IN, 0, 0, 0, pico_in), |
| 6500 | + OP(PICO_OUT0, 0, 0, 0, pico_out0), |
| 6501 | + OP(PICO_OUT1, 0, 0, 0, pico_out1), |
| 6502 | + OP(PICO_OUT2, 0, 0, 0, pico_out2), |
| 6503 | + OP(PICO_OUT3, 0, 0, 0, pico_out3), |
| 6504 | +}; |
| 6505 | + |
| 6506 | +symbolS * |
| 6507 | +md_undefined_symbol (char *name ATTRIBUTE_UNUSED) |
| 6508 | +{ |
| 6509 | + pr_debug("md_undefined_symbol: %s\n", name); |
| 6510 | + return 0; |
| 6511 | +} |
| 6512 | + |
| 6513 | +struct avr32_relax_type |
| 6514 | +{ |
| 6515 | + long lower_bound; |
| 6516 | + long upper_bound; |
| 6517 | + unsigned char align; |
| 6518 | + unsigned char length; |
| 6519 | + signed short next; |
| 6520 | +}; |
| 6521 | + |
| 6522 | +#define EMPTY { 0, 0, 0, 0, -1 } |
| 6523 | +#define C(lower, upper, align, next) \ |
| 6524 | + { (lower), (upper), (align), 2, AVR32_OPC_##next } |
| 6525 | +#define E(lower, upper, align) \ |
| 6526 | + { (lower), (upper), (align), 4, -1 } |
| 6527 | + |
| 6528 | +static const struct avr32_relax_type avr32_relax_table[] = |
| 6529 | + { |
| 6530 | + /* 0 */ |
| 6531 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6532 | + EMPTY, EMPTY, EMPTY, |
| 6533 | + E(0, 65535, 0), E(0, 65535, 0), E(0, 65535, 0), E(0, 65535, 0), |
| 6534 | + EMPTY, |
| 6535 | + /* 16 */ |
| 6536 | + EMPTY, EMPTY, EMPTY, EMPTY, |
| 6537 | + |
| 6538 | + C(-256, 254, 1, BREQ2), C(-256, 254, 1, BRNE2), |
| 6539 | + C(-256, 254, 1, BRCC2), C(-256, 254, 1, BRCS2), |
| 6540 | + C(-256, 254, 1, BRGE2), C(-256, 254, 1, BRLT2), |
| 6541 | + C(-256, 254, 1, BRMI2), C(-256, 254, 1, BRPL2), |
| 6542 | + E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), |
| 6543 | + E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), |
| 6544 | + /* 32 */ |
| 6545 | + E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), |
| 6546 | + E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), |
| 6547 | + E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), |
| 6548 | + E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), |
| 6549 | + E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), |
| 6550 | + E(-2097152, 2097150, 1), E(-2097152, 2097150, 1), |
| 6551 | + |
| 6552 | + EMPTY, EMPTY, EMPTY, EMPTY, |
| 6553 | + /* 48 */ |
| 6554 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6555 | + EMPTY, EMPTY, EMPTY, |
| 6556 | + |
| 6557 | + C(-32, 31, 0, CP_W3), E(-1048576, 1048575, 0), |
| 6558 | + |
| 6559 | + EMPTY, EMPTY, EMPTY, |
| 6560 | + /* 64: csrfcz */ |
| 6561 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6562 | + E(0, 65535, 0), E(0, 65535, 0), |
| 6563 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6564 | + E(-32768, 32767, 0), |
| 6565 | + /* 80: LD_SB2 */ |
| 6566 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6567 | + |
| 6568 | + C(0, 7, 0, LD_UB4), E(-32768, 32767, 0), |
| 6569 | + |
| 6570 | + EMPTY, |
| 6571 | + EMPTY, EMPTY, |
| 6572 | + |
| 6573 | + C(0, 14, 1, LD_SH4), E(-32768, 32767, 0), |
| 6574 | + |
| 6575 | + EMPTY, EMPTY, EMPTY, |
| 6576 | + |
| 6577 | + C(0, 14, 1, LD_UH4), |
| 6578 | + |
| 6579 | + /* 96: LD_UH4 */ |
| 6580 | + E(-32768, 32767, 0), |
| 6581 | + |
| 6582 | + EMPTY, EMPTY, EMPTY, EMPTY, |
| 6583 | + |
| 6584 | + C(0, 124, 2, LD_W4), E(-32768, 32767, 0), |
| 6585 | + |
| 6586 | + E(0, 1020, 2), /* LDC_D1 */ |
| 6587 | + EMPTY, EMPTY, |
| 6588 | + E(0, 1020, 2), /* LDC_W1 */ |
| 6589 | + EMPTY, EMPTY, |
| 6590 | + E(0, 16380, 2), /* LDC0_D */ |
| 6591 | + E(0, 16380, 2), /* LDC0_W */ |
| 6592 | + EMPTY, |
| 6593 | + |
| 6594 | + /* 112: LDCM_D_PU */ |
| 6595 | + EMPTY, EMPTY, EMPTY, |
| 6596 | + |
| 6597 | + C(0, 508, 2, LDDPC_EXT), E(-32768, 32767, 0), |
| 6598 | + |
| 6599 | + EMPTY,EMPTY, EMPTY, |
| 6600 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6601 | + |
| 6602 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6603 | + /* 134: MACHH_W */ |
| 6604 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6605 | + E(-131072, 131068, 2), /* MCALL */ |
| 6606 | + E(0, 1020, 2), /* MFDR */ |
| 6607 | + E(0, 1020, 2), /* MFSR */ |
| 6608 | + EMPTY, EMPTY, |
| 6609 | + |
| 6610 | + C(-128, 127, 0, MOV2), E(-1048576, 1048575, 0), |
| 6611 | + |
| 6612 | + EMPTY, EMPTY, EMPTY, |
| 6613 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6614 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6615 | + |
| 6616 | + E(-128, 127, 0), /* MOVEQ2 */ |
| 6617 | + E(-128, 127, 0), /* MOVNE2 */ |
| 6618 | + E(-128, 127, 0), /* MOVCC2 */ |
| 6619 | + E(-128, 127, 0), /* 166: MOVCS2 */ |
| 6620 | + E(-128, 127, 0), /* MOVGE2 */ |
| 6621 | + E(-128, 127, 0), /* MOVLT2 */ |
| 6622 | + E(-128, 127, 0), /* MOVMI2 */ |
| 6623 | + E(-128, 127, 0), /* MOVPL2 */ |
| 6624 | + E(-128, 127, 0), /* MOVLS2 */ |
| 6625 | + E(-128, 127, 0), /* MOVGT2 */ |
| 6626 | + E(-128, 127, 0), /* MOVLE2 */ |
| 6627 | + E(-128, 127, 0), /* MOVHI2 */ |
| 6628 | + E(-128, 127, 0), /* MOVVS2 */ |
| 6629 | + E(-128, 127, 0), /* MOVVC2 */ |
| 6630 | + E(-128, 127, 0), /* MOVQS2 */ |
| 6631 | + E(-128, 127, 0), /* MOVAL2 */ |
| 6632 | + |
| 6633 | + E(0, 1020, 2), /* MTDR */ |
| 6634 | + E(0, 1020, 2), /* MTSR */ |
| 6635 | + EMPTY, |
| 6636 | + EMPTY, |
| 6637 | + E(-128, 127, 0), /* MUL3 */ |
| 6638 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6639 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6640 | + /* 198: MVCR_W */ |
| 6641 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6642 | + E(0, 65535, 0), E(0, 65535, 0), |
| 6643 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6644 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6645 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6646 | + /* 230: PASR_H */ |
| 6647 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6648 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6649 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6650 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6651 | + /* 262: PUNPCKSB_H */ |
| 6652 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6653 | + |
| 6654 | + C(-1024, 1022, 1, RCALL2), E(-2097152, 2097150, 1), |
| 6655 | + |
| 6656 | + EMPTY, |
| 6657 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6658 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6659 | + EMPTY, EMPTY, EMPTY, |
| 6660 | + |
| 6661 | + C(-1024, 1022, 1, BRAL), |
| 6662 | + |
| 6663 | + EMPTY, EMPTY, EMPTY, |
| 6664 | + E(-128, 127, 0), /* RSUB2 */ |
| 6665 | + /* 294: SATADD_H */ |
| 6666 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6667 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6668 | + E(0, 255, 0), /* SLEEP */ |
| 6669 | + EMPTY, EMPTY, |
| 6670 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6671 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6672 | + /* 326: ST_B2 */ |
| 6673 | + EMPTY, EMPTY, |
| 6674 | + C(0, 7, 0, ST_B4), E(-32768, 32767, 0), |
| 6675 | + EMPTY, EMPTY, EMPTY, EMPTY, |
| 6676 | + E(-32768, 32767, 0), |
| 6677 | + EMPTY, EMPTY, EMPTY, |
| 6678 | + C(0, 14, 1, ST_H4), E(-32768, 32767, 0), |
| 6679 | + EMPTY, EMPTY, |
| 6680 | + EMPTY, |
| 6681 | + C(0, 60, 2, ST_W4), E(-32768, 32767, 0), |
| 6682 | + E(0, 1020, 2), /* STC_D1 */ |
| 6683 | + EMPTY, EMPTY, |
| 6684 | + E(0, 1020, 2), /* STC_W1 */ |
| 6685 | + EMPTY, EMPTY, |
| 6686 | + E(0, 16380, 2), /* STC0_D */ |
| 6687 | + E(0, 16380, 2), /* STC0_W */ |
| 6688 | + |
| 6689 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6690 | + /* 358: STDSP */ |
| 6691 | + EMPTY, EMPTY, |
| 6692 | + E(0, 1020, 2), /* STHH_W1 */ |
| 6693 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6694 | + EMPTY, EMPTY, EMPTY, |
| 6695 | + E(-32768, 32767, 0), |
| 6696 | + C(-512, 508, 2, SUB4), |
| 6697 | + C(-128, 127, 0, SUB4), E(-1048576, 1048576, 0), |
| 6698 | + /* SUB{cond} */ |
| 6699 | + E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), |
| 6700 | + E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), |
| 6701 | + E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), |
| 6702 | + E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), |
| 6703 | + /* SUBF{cond} */ |
| 6704 | + E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), |
| 6705 | + E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), |
| 6706 | + E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), |
| 6707 | + E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), |
| 6708 | + EMPTY, |
| 6709 | + |
| 6710 | + /* 406: SWAP_B */ |
| 6711 | + EMPTY, EMPTY, EMPTY, |
| 6712 | + E(0, 255, 0), /* SYNC */ |
| 6713 | + EMPTY, EMPTY, EMPTY, EMPTY, |
| 6714 | + /* 414: TST */ |
| 6715 | + EMPTY, EMPTY, E(-65536, 65535, 2), E(-65536, 65535, 2), E(-65536, 65535, 2), EMPTY, EMPTY, EMPTY, |
| 6716 | + /* 422: RSUB{cond} */ |
| 6717 | + E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), |
| 6718 | + E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), |
| 6719 | + E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), |
| 6720 | + E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), E(-128, 127, 0), |
| 6721 | + /* 436: ADD{cond} */ |
| 6722 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6723 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6724 | + /* 454: SUB{cond} */ |
| 6725 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6726 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6727 | + /* 472: AND{cond} */ |
| 6728 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6729 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6730 | + /* 486: OR{cond} */ |
| 6731 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6732 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6733 | + /* 502: EOR{cond} */ |
| 6734 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6735 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6736 | + /* 518: LD.w{cond} */ |
| 6737 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6738 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6739 | + /* 534: LD.sh{cond} */ |
| 6740 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6741 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6742 | + /* 550: LD.uh{cond} */ |
| 6743 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6744 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6745 | + /* 566: LD.sb{cond} */ |
| 6746 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6747 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6748 | + /* 582: LD.ub{cond} */ |
| 6749 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6750 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6751 | + /* 596: ST.w{cond} */ |
| 6752 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6753 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6754 | + /* 614: ST.h{cond} */ |
| 6755 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6756 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6757 | + /* 630: ST.b{cond} */ |
| 6758 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6759 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6760 | + /* 646: movh */ |
| 6761 | + E(0, 65535, 0), EMPTY, EMPTY, |
| 6762 | + /* 649: fmac.s */ |
| 6763 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6764 | + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, |
| 6765 | + }; |
| 6766 | + |
| 6767 | +#undef E |
| 6768 | +#undef C |
| 6769 | +#undef EMPTY |
| 6770 | + |
| 6771 | +#define AVR32_RS_NONE (-1) |
| 6772 | + |
| 6773 | +#define avr32_rs_size(state) (avr32_relax_table[(state)].length) |
| 6774 | +#define avr32_rs_align(state) (avr32_relax_table[(state)].align) |
| 6775 | +#define relax_more(state) (avr32_relax_table[(state)].next) |
| 6776 | + |
| 6777 | +#define opc_initial_substate(opc) ((opc)->id) |
| 6778 | + |
| 6779 | +static int need_relax(int subtype, offsetT distance) |
| 6780 | +{ |
| 6781 | + offsetT upper_bound, lower_bound; |
| 6782 | + |
| 6783 | + upper_bound = avr32_relax_table[subtype].upper_bound; |
| 6784 | + lower_bound = avr32_relax_table[subtype].lower_bound; |
| 6785 | + |
| 6786 | + if (distance & ((1 << avr32_rs_align(subtype)) - 1)) |
| 6787 | + return 1; |
| 6788 | + if ((distance > upper_bound) || (distance < lower_bound)) |
| 6789 | + return 1; |
| 6790 | + |
| 6791 | + return 0; |
| 6792 | +} |
| 6793 | + |
| 6794 | +enum { |
| 6795 | + LDA_SUBTYPE_MOV1, |
| 6796 | + LDA_SUBTYPE_MOV2, |
| 6797 | + LDA_SUBTYPE_SUB, |
| 6798 | + LDA_SUBTYPE_LDDPC, |
| 6799 | + LDA_SUBTYPE_LDW, |
| 6800 | + LDA_SUBTYPE_GOTLOAD, |
| 6801 | + LDA_SUBTYPE_GOTLOAD_LARGE, |
| 6802 | +}; |
| 6803 | + |
| 6804 | +enum { |
| 6805 | + CALL_SUBTYPE_RCALL1, |
| 6806 | + CALL_SUBTYPE_RCALL2, |
| 6807 | + CALL_SUBTYPE_MCALL_CP, |
| 6808 | + CALL_SUBTYPE_MCALL_GOT, |
| 6809 | + CALL_SUBTYPE_MCALL_LARGE, |
| 6810 | +}; |
| 6811 | + |
| 6812 | +#define LDA_INITIAL_SIZE (avr32_pic ? 4 : 2) |
| 6813 | +#define CALL_INITIAL_SIZE 2 |
| 6814 | + |
| 6815 | +#define need_reloc(sym, seg, pcrel) \ |
| 6816 | + (!(S_IS_DEFINED(sym) \ |
| 6817 | + && ((pcrel && S_GET_SEGMENT(sym) == seg) \ |
| 6818 | + || (!pcrel && S_GET_SEGMENT(sym) == absolute_section))) \ |
| 6819 | + || S_FORCE_RELOC(sym, 1)) |
| 6820 | + |
| 6821 | +/* Return an initial guess of the length by which a fragment must grow to |
| 6822 | + hold a branch to reach its destination. |
| 6823 | + Also updates fr_type/fr_subtype as necessary. |
| 6824 | + |
| 6825 | + Called just before doing relaxation. |
| 6826 | + Any symbol that is now undefined will not become defined. |
| 6827 | + The guess for fr_var is ACTUALLY the growth beyond fr_fix. |
| 6828 | + Whatever we do to grow fr_fix or fr_var contributes to our returned value. |
| 6829 | + Although it may not be explicit in the frag, pretend fr_var starts with a |
| 6830 | + 0 value. */ |
| 6831 | + |
| 6832 | +static int |
| 6833 | +avr32_default_estimate_size_before_relax (fragS *fragP, segT segment) |
| 6834 | +{ |
| 6835 | + int growth = 0; |
| 6836 | + |
| 6837 | + assert(fragP); |
| 6838 | + assert(fragP->fr_symbol); |
| 6839 | + |
| 6840 | + if (fragP->tc_frag_data.force_extended |
| 6841 | + || need_reloc(fragP->fr_symbol, segment, fragP->tc_frag_data.pcrel)) |
| 6842 | + { |
| 6843 | + int largest_state = fragP->fr_subtype; |
| 6844 | + while (relax_more(largest_state) != AVR32_RS_NONE) |
| 6845 | + largest_state = relax_more(largest_state); |
| 6846 | + growth = avr32_rs_size(largest_state) - fragP->fr_var; |
| 6847 | + } |
| 6848 | + else |
| 6849 | + { |
| 6850 | + growth = avr32_rs_size(fragP->fr_subtype) - fragP->fr_var; |
| 6851 | + } |
| 6852 | + |
| 6853 | + pr_debug("%s:%d: md_estimate_size_before_relax: %d\n", |
| 6854 | + fragP->fr_file, fragP->fr_line, growth); |
| 6855 | + |
| 6856 | + return growth; |
| 6857 | +} |
| 6858 | + |
| 6859 | +static int |
| 6860 | +avr32_lda_estimate_size_before_relax(fragS *fragP, segT segment ATTRIBUTE_UNUSED) |
| 6861 | +{ |
| 6862 | + return fragP->fr_var - LDA_INITIAL_SIZE; |
| 6863 | +} |
| 6864 | + |
| 6865 | +static int |
| 6866 | +avr32_call_estimate_size_before_relax(fragS *fragP, segT segment ATTRIBUTE_UNUSED) |
| 6867 | +{ |
| 6868 | + return fragP->fr_var - CALL_INITIAL_SIZE; |
| 6869 | +} |
| 6870 | + |
| 6871 | +static int |
| 6872 | +avr32_cpool_estimate_size_before_relax(fragS *fragP, |
| 6873 | + segT segment ATTRIBUTE_UNUSED) |
| 6874 | +{ |
| 6875 | + return fragP->fr_var; |
| 6876 | +} |
| 6877 | + |
| 6878 | +/* This macro may be defined to relax a frag. GAS will call this with the |
| 6879 | + * segment, the frag, and the change in size of all previous frags; |
| 6880 | + * md_relax_frag should return the change in size of the frag. */ |
| 6881 | +static long |
| 6882 | +avr32_default_relax_frag (segT segment, fragS *fragP, long stretch) |
| 6883 | +{ |
| 6884 | + int state, next_state; |
| 6885 | + symbolS *symbolP; /* The target symbol */ |
| 6886 | + long growth = 0; |
| 6887 | + |
| 6888 | + state = next_state = fragP->fr_subtype; |
| 6889 | + |
| 6890 | + symbolP = fragP->fr_symbol; |
| 6891 | + |
| 6892 | + if (fragP->tc_frag_data.force_extended |
| 6893 | + || need_reloc(symbolP, segment, fragP->tc_frag_data.pcrel)) |
| 6894 | + { |
| 6895 | + /* Symbol must be resolved by the linker. Emit the largest |
| 6896 | + possible opcode. */ |
| 6897 | + while (relax_more(next_state) != AVR32_RS_NONE) |
| 6898 | + next_state = relax_more(next_state); |
| 6899 | + } |
| 6900 | + else |
| 6901 | + { |
| 6902 | + addressT address; /* The address of fragP */ |
| 6903 | + addressT target; /* The address of the target symbol */ |
| 6904 | + offsetT distance; /* The distance between the insn and the symbol */ |
| 6905 | + fragS *sym_frag; |
| 6906 | + |
| 6907 | + address = fragP->fr_address; |
| 6908 | + target = fragP->fr_offset; |
| 6909 | + symbolP = fragP->fr_symbol; |
| 6910 | + sym_frag = symbol_get_frag(symbolP); |
| 6911 | + |
| 6912 | + address += fragP->fr_fix - fragP->fr_var; |
| 6913 | + target += S_GET_VALUE(symbolP); |
| 6914 | + |
| 6915 | + if (stretch != 0 |
| 6916 | + && sym_frag->relax_marker != fragP->relax_marker |
| 6917 | + && S_GET_SEGMENT(symbolP) == segment) |
| 6918 | + /* if it was correctly aligned before, make sure it stays aligned */ |
| 6919 | + target += stretch & (~0UL << avr32_rs_align(state)); |
| 6920 | + |
| 6921 | + if (fragP->tc_frag_data.pcrel) |
| 6922 | + distance = target - (address & (~0UL << avr32_rs_align(state))); |
| 6923 | + else |
| 6924 | + distance = target; |
| 6925 | + |
| 6926 | + pr_debug("%s:%d: relax more? 0x%x - 0x%x = 0x%x (%d), align %d\n", |
| 6927 | + fragP->fr_file, fragP->fr_line, target, address, |
| 6928 | + distance, distance, avr32_rs_align(state)); |
| 6929 | + |
| 6930 | + if (need_relax(state, distance)) |
| 6931 | + { |
| 6932 | + if (relax_more(state) != AVR32_RS_NONE) |
| 6933 | + next_state = relax_more(state); |
| 6934 | + pr_debug("%s:%d: relax more %d -> %d (%d - %d, align %d)\n", |
| 6935 | + fragP->fr_file, fragP->fr_line, state, next_state, |
| 6936 | + target, address, avr32_rs_align(state)); |
| 6937 | + } |
| 6938 | + } |
| 6939 | + |
| 6940 | + growth = avr32_rs_size(next_state) - avr32_rs_size(state); |
| 6941 | + fragP->fr_subtype = next_state; |
| 6942 | + |
| 6943 | + pr_debug("%s:%d: md_relax_frag: growth=%d, subtype=%d, opc=0x%08lx\n", |
| 6944 | + fragP->fr_file, fragP->fr_line, growth, fragP->fr_subtype, |
| 6945 | + avr32_opc_table[next_state].value); |
| 6946 | + |
| 6947 | + return growth; |
| 6948 | +} |
| 6949 | + |
| 6950 | +static long |
| 6951 | +avr32_lda_relax_frag(segT segment, fragS *fragP, long stretch) |
| 6952 | +{ |
| 6953 | + struct cpool *pool= NULL; |
| 6954 | + unsigned int entry = 0; |
| 6955 | + addressT address, target; |
| 6956 | + offsetT distance; |
| 6957 | + symbolS *symbolP; |
| 6958 | + fragS *sym_frag; |
| 6959 | + long old_size, new_size; |
| 6960 | + |
| 6961 | + symbolP = fragP->fr_symbol; |
| 6962 | + old_size = fragP->fr_var; |
| 6963 | + if (!avr32_pic) |
| 6964 | + { |
| 6965 | + pool = fragP->tc_frag_data.pool; |
| 6966 | + entry = fragP->tc_frag_data.pool_entry; |
| 6967 | + } |
| 6968 | + |
| 6969 | + address = fragP->fr_address; |
| 6970 | + address += fragP->fr_fix - LDA_INITIAL_SIZE; |
| 6971 | + |
| 6972 | + if (!S_IS_DEFINED(symbolP) || S_FORCE_RELOC(symbolP, 1)) |
| 6973 | + goto relax_max; |
| 6974 | + |
| 6975 | + target = fragP->fr_offset; |
| 6976 | + sym_frag = symbol_get_frag(symbolP); |
| 6977 | + target += S_GET_VALUE(symbolP); |
| 6978 | + |
| 6979 | + if (sym_frag->relax_marker != fragP->relax_marker |
| 6980 | + && S_GET_SEGMENT(symbolP) == segment) |
| 6981 | + target += stretch; |
| 6982 | + |
| 6983 | + distance = target - address; |
| 6984 | + |
| 6985 | + pr_debug("lda_relax_frag: target: %d, address: %d, var: %d\n", |
| 6986 | + target, address, fragP->fr_var); |
| 6987 | + |
| 6988 | + if (!avr32_pic && S_GET_SEGMENT(symbolP) == absolute_section |
| 6989 | + && target <= 127 && (offsetT)target >= -128) |
| 6990 | + { |
| 6991 | + if (fragP->fr_subtype == LDA_SUBTYPE_LDDPC |
| 6992 | + || fragP->fr_subtype == LDA_SUBTYPE_LDW) |
| 6993 | + pool->literals[entry].refcount--; |
| 6994 | + new_size = 2; |
| 6995 | + fragP->fr_subtype = LDA_SUBTYPE_MOV1; |
| 6996 | + } |
| 6997 | + else if (!avr32_pic && S_GET_SEGMENT(symbolP) == absolute_section |
| 6998 | + && target <= 1048575 && (offsetT)target >= -1048576) |
| 6999 | + { |
| 7000 | + if (fragP->fr_subtype == LDA_SUBTYPE_LDDPC |
| 7001 | + || fragP->fr_subtype == LDA_SUBTYPE_LDW) |
| 7002 | + pool->literals[entry].refcount--; |
| 7003 | + new_size = 4; |
| 7004 | + fragP->fr_subtype = LDA_SUBTYPE_MOV2; |
| 7005 | + } |
| 7006 | + else if (!linkrelax && S_GET_SEGMENT(symbolP) == segment |
| 7007 | + /* the field will be negated, so this is really -(-32768) |
| 7008 | + and -(32767) */ |
| 7009 | + && distance <= 32768 && distance >= -32767) |
| 7010 | + { |
| 7011 | + if (!avr32_pic |
| 7012 | + && (fragP->fr_subtype == LDA_SUBTYPE_LDDPC |
| 7013 | + || fragP->fr_subtype == LDA_SUBTYPE_LDW)) |
| 7014 | + pool->literals[entry].refcount--; |
| 7015 | + new_size = 4; |
| 7016 | + fragP->fr_subtype = LDA_SUBTYPE_SUB; |
| 7017 | + } |
| 7018 | + else |
| 7019 | + { |
| 7020 | + relax_max: |
| 7021 | + if (avr32_pic) |
| 7022 | + { |
| 7023 | + if (linkrelax) |
| 7024 | + { |
| 7025 | + new_size = 8; |
| 7026 | + fragP->fr_subtype = LDA_SUBTYPE_GOTLOAD_LARGE; |
| 7027 | + } |
| 7028 | + else |
| 7029 | + { |
| 7030 | + new_size = 4; |
| 7031 | + fragP->fr_subtype = LDA_SUBTYPE_GOTLOAD; |
| 7032 | + } |
| 7033 | + } |
| 7034 | + else |
| 7035 | + { |
| 7036 | + if (fragP->fr_subtype != LDA_SUBTYPE_LDDPC |
| 7037 | + && fragP->fr_subtype != LDA_SUBTYPE_LDW) |
| 7038 | + pool->literals[entry].refcount++; |
| 7039 | + |
| 7040 | + sym_frag = symbol_get_frag(pool->symbol); |
| 7041 | + target = (sym_frag->fr_address + sym_frag->fr_fix |
| 7042 | + + pool->padding + pool->literals[entry].offset); |
| 7043 | + |
| 7044 | + pr_debug("cpool sym address: 0x%lx\n", |
| 7045 | + sym_frag->fr_address + sym_frag->fr_fix); |
| 7046 | + |
| 7047 | + know(pool->section == segment); |
| 7048 | + |
| 7049 | + if (sym_frag->relax_marker != fragP->relax_marker) |
| 7050 | + target += stretch; |
| 7051 | + |
| 7052 | + distance = target - address; |
| 7053 | + if (distance <= 508 && distance >= 0) |
| 7054 | + { |
| 7055 | + new_size = 2; |
| 7056 | + fragP->fr_subtype = LDA_SUBTYPE_LDDPC; |
| 7057 | + } |
| 7058 | + else |
| 7059 | + { |
| 7060 | + new_size = 4; |
| 7061 | + fragP->fr_subtype = LDA_SUBTYPE_LDW; |
| 7062 | + } |
| 7063 | + |
| 7064 | + pr_debug("lda_relax_frag (cpool): target=0x%lx, address=0x%lx, refcount=%d\n", |
| 7065 | + target, address, pool->literals[entry].refcount); |
| 7066 | + } |
| 7067 | + } |
| 7068 | + |
| 7069 | + fragP->fr_var = new_size; |
| 7070 | + |
| 7071 | + pr_debug("%s:%d: lda: relax pass done. subtype: %d, growth: %ld\n", |
| 7072 | + fragP->fr_file, fragP->fr_line, |
| 7073 | + fragP->fr_subtype, new_size - old_size); |
| 7074 | + |
| 7075 | + return new_size - old_size; |
| 7076 | +} |
| 7077 | + |
| 7078 | +static long |
| 7079 | +avr32_call_relax_frag(segT segment, fragS *fragP, long stretch) |
| 7080 | +{ |
| 7081 | + struct cpool *pool = NULL; |
| 7082 | + unsigned int entry = 0; |
| 7083 | + addressT address, target; |
| 7084 | + offsetT distance; |
| 7085 | + symbolS *symbolP; |
| 7086 | + fragS *sym_frag; |
| 7087 | + long old_size, new_size; |
| 7088 | + |
| 7089 | + symbolP = fragP->fr_symbol; |
| 7090 | + old_size = fragP->fr_var; |
| 7091 | + if (!avr32_pic) |
| 7092 | + { |
| 7093 | + pool = fragP->tc_frag_data.pool; |
| 7094 | + entry = fragP->tc_frag_data.pool_entry; |
| 7095 | + } |
| 7096 | + |
| 7097 | + address = fragP->fr_address; |
| 7098 | + address += fragP->fr_fix - CALL_INITIAL_SIZE; |
| 7099 | + |
| 7100 | + if (need_reloc(symbolP, segment, 1)) |
| 7101 | + { |
| 7102 | + pr_debug("call: must emit reloc\n"); |
| 7103 | + goto relax_max; |
| 7104 | + } |
| 7105 | + |
| 7106 | + target = fragP->fr_offset; |
| 7107 | + sym_frag = symbol_get_frag(symbolP); |
| 7108 | + target += S_GET_VALUE(symbolP); |
| 7109 | + |
| 7110 | + if (sym_frag->relax_marker != fragP->relax_marker |
| 7111 | + && S_GET_SEGMENT(symbolP) == segment) |
| 7112 | + target += stretch; |
| 7113 | + |
| 7114 | + distance = target - address; |
| 7115 | + |
| 7116 | + if (distance <= 1022 && distance >= -1024) |
| 7117 | + { |
| 7118 | + pr_debug("call: distance is %d, emitting short rcall\n", distance); |
| 7119 | + if (!avr32_pic && fragP->fr_subtype == CALL_SUBTYPE_MCALL_CP) |
| 7120 | + pool->literals[entry].refcount--; |
| 7121 | + new_size = 2; |
| 7122 | + fragP->fr_subtype = CALL_SUBTYPE_RCALL1; |
| 7123 | + } |
| 7124 | + else if (distance <= 2097150 && distance >= -2097152) |
| 7125 | + { |
| 7126 | + pr_debug("call: distance is %d, emitting long rcall\n", distance); |
| 7127 | + if (!avr32_pic && fragP->fr_subtype == CALL_SUBTYPE_MCALL_CP) |
| 7128 | + pool->literals[entry].refcount--; |
| 7129 | + new_size = 4; |
| 7130 | + fragP->fr_subtype = CALL_SUBTYPE_RCALL2; |
| 7131 | + } |
| 7132 | + else |
| 7133 | + { |
| 7134 | + pr_debug("call: distance %d too far, emitting something big\n", distance); |
| 7135 | + |
| 7136 | + relax_max: |
| 7137 | + if (avr32_pic) |
| 7138 | + { |
| 7139 | + if (linkrelax) |
| 7140 | + { |
| 7141 | + new_size = 10; |
| 7142 | + fragP->fr_subtype = CALL_SUBTYPE_MCALL_LARGE; |
| 7143 | + } |
| 7144 | + else |
| 7145 | + { |
| 7146 | + new_size = 4; |
| 7147 | + fragP->fr_subtype = CALL_SUBTYPE_MCALL_GOT; |
| 7148 | + } |
| 7149 | + } |
| 7150 | + else |
| 7151 | + { |
| 7152 | + if (fragP->fr_subtype != CALL_SUBTYPE_MCALL_CP) |
| 7153 | + pool->literals[entry].refcount++; |
| 7154 | + |
| 7155 | + new_size = 4; |
| 7156 | + fragP->fr_subtype = CALL_SUBTYPE_MCALL_CP; |
| 7157 | + } |
| 7158 | + } |
| 7159 | + |
| 7160 | + fragP->fr_var = new_size; |
| 7161 | + |
| 7162 | + pr_debug("%s:%d: call: relax pass done, growth: %d, fr_var: %d\n", |
| 7163 | + fragP->fr_file, fragP->fr_line, |
| 7164 | + new_size - old_size, fragP->fr_var); |
| 7165 | + |
| 7166 | + return new_size - old_size; |
| 7167 | +} |
| 7168 | + |
| 7169 | +static long |
| 7170 | +avr32_cpool_relax_frag(segT segment ATTRIBUTE_UNUSED, |
| 7171 | + fragS *fragP, |
| 7172 | + long stretch ATTRIBUTE_UNUSED) |
| 7173 | +{ |
| 7174 | + struct cpool *pool; |
| 7175 | + addressT address; |
| 7176 | + long old_size, new_size; |
| 7177 | + unsigned int entry; |
| 7178 | + |
| 7179 | + pool = fragP->tc_frag_data.pool; |
| 7180 | + address = fragP->fr_address + fragP->fr_fix; |
| 7181 | + old_size = fragP->fr_var; |
| 7182 | + new_size = 0; |
| 7183 | + |
| 7184 | + for (entry = 0; entry < pool->next_free_entry; entry++) |
| 7185 | + { |
| 7186 | + if (pool->literals[entry].refcount > 0) |
| 7187 | + { |
| 7188 | + pool->literals[entry].offset = new_size; |
| 7189 | + new_size += 4; |
| 7190 | + } |
| 7191 | + } |
| 7192 | + |
| 7193 | + fragP->fr_var = new_size; |
| 7194 | + |
| 7195 | + return new_size - old_size; |
| 7196 | +} |
| 7197 | + |
| 7198 | +/* *fragP has been relaxed to its final size, and now needs to have |
| 7199 | + the bytes inside it modified to conform to the new size. |
| 7200 | + |
| 7201 | + Called after relaxation is finished. |
| 7202 | + fragP->fr_type == rs_machine_dependent. |
| 7203 | + fragP->fr_subtype is the subtype of what the address relaxed to. */ |
| 7204 | + |
| 7205 | +static void |
| 7206 | +avr32_default_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, |
| 7207 | + segT segment ATTRIBUTE_UNUSED, |
| 7208 | + fragS *fragP) |
| 7209 | +{ |
| 7210 | + const struct avr32_opcode *opc; |
| 7211 | + const struct avr32_ifield *ifield; |
| 7212 | + bfd_reloc_code_real_type r_type; |
| 7213 | + symbolS *symbolP; |
| 7214 | + fixS *fixP; |
| 7215 | + bfd_vma value; |
| 7216 | + int subtype; |
| 7217 | + |
| 7218 | + opc = &avr32_opc_table[fragP->fr_subtype]; |
| 7219 | + ifield = opc->fields[opc->var_field]; |
| 7220 | + symbolP = fragP->fr_symbol; |
| 7221 | + subtype = fragP->fr_subtype; |
| 7222 | + r_type = opc->reloc_type; |
| 7223 | + |
| 7224 | + /* Clear the opcode bits and the bits belonging to the relaxed |
| 7225 | + field. We assume all other fields stay the same. */ |
| 7226 | + value = bfd_getb32(fragP->fr_opcode); |
| 7227 | + value &= ~(opc->mask | ifield->mask); |
| 7228 | + |
| 7229 | + /* Insert the new opcode */ |
| 7230 | + value |= opc->value; |
| 7231 | + bfd_putb32(value, fragP->fr_opcode); |
| 7232 | + |
| 7233 | + fragP->fr_fix += opc->size - fragP->fr_var; |
| 7234 | + |
| 7235 | + if (fragP->tc_frag_data.reloc_info != AVR32_OPINFO_NONE) |
| 7236 | + { |
| 7237 | + switch (fragP->tc_frag_data.reloc_info) |
| 7238 | + { |
| 7239 | + case AVR32_OPINFO_HI: |
| 7240 | + r_type = BFD_RELOC_HI16; |
| 7241 | + break; |
| 7242 | + case AVR32_OPINFO_LO: |
| 7243 | + r_type = BFD_RELOC_LO16; |
| 7244 | + break; |
| 7245 | + case AVR32_OPINFO_GOT: |
| 7246 | + switch (r_type) |
| 7247 | + { |
| 7248 | + case BFD_RELOC_AVR32_18W_PCREL: |
| 7249 | + r_type = BFD_RELOC_AVR32_GOT18SW; |
| 7250 | + break; |
| 7251 | + case BFD_RELOC_AVR32_16S: |
| 7252 | + r_type = BFD_RELOC_AVR32_GOT16S; |
| 7253 | + break; |
| 7254 | + default: |
| 7255 | + BAD_CASE(r_type); |
| 7256 | + break; |
| 7257 | + } |
| 7258 | + break; |
| 7259 | + default: |
| 7260 | + BAD_CASE(fragP->tc_frag_data.reloc_info); |
| 7261 | + break; |
| 7262 | + } |
| 7263 | + } |
| 7264 | + |
| 7265 | + pr_debug("%s:%d: convert_frag: new %s fixup\n", |
| 7266 | + fragP->fr_file, fragP->fr_line, |
| 7267 | + bfd_get_reloc_code_name(r_type)); |
| 7268 | + |
| 7269 | +#if 1 |
| 7270 | + fixP = fix_new_exp(fragP, fragP->fr_fix - opc->size, opc->size, |
| 7271 | + &fragP->tc_frag_data.exp, |
| 7272 | + fragP->tc_frag_data.pcrel, r_type); |
| 7273 | +#else |
| 7274 | + fixP = fix_new(fragP, fragP->fr_fix - opc->size, opc->size, symbolP, |
| 7275 | + fragP->fr_offset, fragP->tc_frag_data.pcrel, r_type); |
| 7276 | +#endif |
| 7277 | + |
| 7278 | + /* Revert fix_new brain damage. "dot_value" is the value of PC at |
| 7279 | + the point of the fixup, relative to the frag address. fix_new() |
| 7280 | + and friends think they are only being called during the assembly |
| 7281 | + pass, not during relaxation or similar, so fx_dot_value, fx_file |
| 7282 | + and fx_line are all initialized to the wrong value. But we don't |
| 7283 | + know the size of the fixup until now, so we really can't live up |
| 7284 | + to the assumptions these functions make about the target. What |
| 7285 | + do these functions think the "where" and "frag" argument mean |
| 7286 | + anyway? */ |
| 7287 | + fixP->fx_dot_value = fragP->fr_fix - opc->size; |
| 7288 | + fixP->fx_file = fragP->fr_file; |
| 7289 | + fixP->fx_line = fragP->fr_line; |
| 7290 | + |
| 7291 | + fixP->tc_fix_data.ifield = ifield; |
| 7292 | + fixP->tc_fix_data.align = avr32_rs_align(subtype); |
| 7293 | + fixP->tc_fix_data.min = avr32_relax_table[subtype].lower_bound; |
| 7294 | + fixP->tc_fix_data.max = avr32_relax_table[subtype].upper_bound; |
| 7295 | +} |
| 7296 | + |
| 7297 | +static void |
| 7298 | +avr32_lda_convert_frag(bfd *abfd ATTRIBUTE_UNUSED, |
| 7299 | + segT segment ATTRIBUTE_UNUSED, |
| 7300 | + fragS *fragP) |
| 7301 | +{ |
| 7302 | + const struct avr32_opcode *opc; |
| 7303 | + const struct avr32_ifield *ifield; |
| 7304 | + bfd_reloc_code_real_type r_type; |
| 7305 | + expressionS exp; |
| 7306 | + struct cpool *pool; |
| 7307 | + fixS *fixP; |
| 7308 | + bfd_vma value; |
| 7309 | + int regid, pcrel = 0, align = 0; |
| 7310 | + char *p; |
| 7311 | + |
| 7312 | + r_type = BFD_RELOC_NONE; |
| 7313 | + regid = fragP->tc_frag_data.reloc_info; |
| 7314 | + p = fragP->fr_opcode; |
| 7315 | + exp.X_add_symbol = fragP->fr_symbol; |
| 7316 | + exp.X_add_number = fragP->fr_offset; |
| 7317 | + exp.X_op = O_symbol; |
| 7318 | + |
| 7319 | + pr_debug("%s:%d: lda_convert_frag, subtype: %d, fix: %d, var: %d, regid: %d\n", |
| 7320 | + fragP->fr_file, fragP->fr_line, |
| 7321 | + fragP->fr_subtype, fragP->fr_fix, fragP->fr_var, regid); |
| 7322 | + |
| 7323 | + switch (fragP->fr_subtype) |
| 7324 | + { |
| 7325 | + case LDA_SUBTYPE_MOV1: |
| 7326 | + opc = &avr32_opc_table[AVR32_OPC_MOV1]; |
| 7327 | + opc->fields[0]->insert(opc->fields[0], p, regid); |
| 7328 | + ifield = opc->fields[1]; |
| 7329 | + r_type = opc->reloc_type; |
| 7330 | + break; |
| 7331 | + case LDA_SUBTYPE_MOV2: |
| 7332 | + opc = &avr32_opc_table[AVR32_OPC_MOV2]; |
| 7333 | + opc->fields[0]->insert(opc->fields[0], p, regid); |
| 7334 | + ifield = opc->fields[1]; |
| 7335 | + r_type = opc->reloc_type; |
| 7336 | + break; |
| 7337 | + case LDA_SUBTYPE_SUB: |
| 7338 | + opc = &avr32_opc_table[AVR32_OPC_SUB5]; |
| 7339 | + opc->fields[0]->insert(opc->fields[0], p, regid); |
| 7340 | + opc->fields[1]->insert(opc->fields[1], p, AVR32_REG_PC); |
| 7341 | + ifield = opc->fields[2]; |
| 7342 | + r_type = BFD_RELOC_AVR32_16N_PCREL; |
| 7343 | + |
| 7344 | + /* Pretend that SUB5 isn't a "negated" pcrel expression for now. |
| 7345 | + We'll have to fix it up later when we know whether to |
| 7346 | + generate a reloc for it (in which case the linker will negate |
| 7347 | + it, so we shouldn't). */ |
| 7348 | + pcrel = 1; |
| 7349 | + break; |
| 7350 | + case LDA_SUBTYPE_LDDPC: |
| 7351 | + opc = &avr32_opc_table[AVR32_OPC_LDDPC]; |
| 7352 | + align = 2; |
| 7353 | + r_type = BFD_RELOC_AVR32_9W_CP; |
| 7354 | + goto cpool_common; |
| 7355 | + case LDA_SUBTYPE_LDW: |
| 7356 | + opc = &avr32_opc_table[AVR32_OPC_LDDPC_EXT]; |
| 7357 | + r_type = BFD_RELOC_AVR32_16_CP; |
| 7358 | + cpool_common: |
| 7359 | + opc->fields[0]->insert(opc->fields[0], p, regid); |
| 7360 | + ifield = opc->fields[1]; |
| 7361 | + pool = fragP->tc_frag_data.pool; |
| 7362 | + exp.X_add_symbol = pool->symbol; |
| 7363 | + exp.X_add_number = pool->literals[fragP->tc_frag_data.pool_entry].offset; |
| 7364 | + pcrel = 1; |
| 7365 | + break; |
| 7366 | + case LDA_SUBTYPE_GOTLOAD_LARGE: |
| 7367 | + /* ld.w Rd, r6[Rd << 2] (last) */ |
| 7368 | + opc = &avr32_opc_table[AVR32_OPC_LD_W5]; |
| 7369 | + bfd_putb32(opc->value, p + 4); |
| 7370 | + opc->fields[0]->insert(opc->fields[0], p + 4, regid); |
| 7371 | + opc->fields[1]->insert(opc->fields[1], p + 4, 6); |
| 7372 | + opc->fields[2]->insert(opc->fields[2], p + 4, regid); |
| 7373 | + opc->fields[3]->insert(opc->fields[3], p + 4, 2); |
| 7374 | + |
| 7375 | + /* mov Rd, (got_offset / 4) */ |
| 7376 | + opc = &avr32_opc_table[AVR32_OPC_MOV2]; |
| 7377 | + opc->fields[0]->insert(opc->fields[0], p, regid); |
| 7378 | + ifield = opc->fields[1]; |
| 7379 | + r_type = BFD_RELOC_AVR32_LDA_GOT; |
| 7380 | + break; |
| 7381 | + case LDA_SUBTYPE_GOTLOAD: |
| 7382 | + opc = &avr32_opc_table[AVR32_OPC_LD_W4]; |
| 7383 | + opc->fields[0]->insert(opc->fields[0], p, regid); |
| 7384 | + opc->fields[1]->insert(opc->fields[1], p, 6); |
| 7385 | + ifield = opc->fields[2]; |
| 7386 | + if (r_type == BFD_RELOC_NONE) |
| 7387 | + r_type = BFD_RELOC_AVR32_GOT16S; |
| 7388 | + break; |
| 7389 | + default: |
| 7390 | + BAD_CASE(fragP->fr_subtype); |
| 7391 | + } |
| 7392 | + |
| 7393 | + value = bfd_getb32(p); |
| 7394 | + value &= ~(opc->mask | ifield->mask); |
| 7395 | + value |= opc->value; |
| 7396 | + bfd_putb32(value, p); |
| 7397 | + |
| 7398 | + fragP->fr_fix += fragP->fr_var - LDA_INITIAL_SIZE; |
| 7399 | + |
| 7400 | + if (fragP->fr_next |
| 7401 | + && ((offsetT)(fragP->fr_next->fr_address - fragP->fr_address) |
| 7402 | + != fragP->fr_fix)) |
| 7403 | + { |
| 7404 | + fprintf(stderr, "LDA frag: fr_fix is wrong! fragP->fr_var = %ld, r_type = %s\n", |
| 7405 | + fragP->fr_var, bfd_get_reloc_code_name(r_type)); |
| 7406 | + abort(); |
| 7407 | + } |
| 7408 | + |
| 7409 | + fixP = fix_new_exp(fragP, fragP->fr_fix - fragP->fr_var, fragP->fr_var, |
| 7410 | + &exp, pcrel, r_type); |
| 7411 | + |
| 7412 | + /* Revert fix_new brain damage. "dot_value" is the value of PC at |
| 7413 | + the point of the fixup, relative to the frag address. fix_new() |
| 7414 | + and friends think they are only being called during the assembly |
| 7415 | + pass, not during relaxation or similar, so fx_dot_value, fx_file |
| 7416 | + and fx_line are all initialized to the wrong value. But we don't |
| 7417 | + know the size of the fixup until now, so we really can't live up |
| 7418 | + to the assumptions these functions make about the target. What |
| 7419 | + do these functions think the "where" and "frag" argument mean |
| 7420 | + anyway? */ |
| 7421 | + fixP->fx_dot_value = fragP->fr_fix - opc->size; |
| 7422 | + fixP->fx_file = fragP->fr_file; |
| 7423 | + fixP->fx_line = fragP->fr_line; |
| 7424 | + |
| 7425 | + fixP->tc_fix_data.ifield = ifield; |
| 7426 | + fixP->tc_fix_data.align = align; |
| 7427 | + /* these are only used if the fixup can actually be resolved */ |
| 7428 | + fixP->tc_fix_data.min = -32768; |
| 7429 | + fixP->tc_fix_data.max = 32767; |
| 7430 | +} |
| 7431 | + |
| 7432 | +static void |
| 7433 | +avr32_call_convert_frag(bfd *abfd ATTRIBUTE_UNUSED, |
| 7434 | + segT segment ATTRIBUTE_UNUSED, |
| 7435 | + fragS *fragP) |
| 7436 | +{ |
| 7437 | + const struct avr32_opcode *opc = NULL; |
| 7438 | + const struct avr32_ifield *ifield; |
| 7439 | + bfd_reloc_code_real_type r_type; |
| 7440 | + symbolS *symbol; |
| 7441 | + offsetT offset; |
| 7442 | + fixS *fixP; |
| 7443 | + bfd_vma value; |
| 7444 | + int pcrel = 0, align = 0; |
| 7445 | + char *p; |
| 7446 | + |
| 7447 | + symbol = fragP->fr_symbol; |
| 7448 | + offset = fragP->fr_offset; |
| 7449 | + r_type = BFD_RELOC_NONE; |
| 7450 | + p = fragP->fr_opcode; |
| 7451 | + |
| 7452 | + pr_debug("%s:%d: call_convert_frag, subtype: %d, fix: %d, var: %d\n", |
| 7453 | + fragP->fr_file, fragP->fr_line, |
| 7454 | + fragP->fr_subtype, fragP->fr_fix, fragP->fr_var); |
| 7455 | + |
| 7456 | + switch (fragP->fr_subtype) |
| 7457 | + { |
| 7458 | + case CALL_SUBTYPE_RCALL1: |
| 7459 | + opc = &avr32_opc_table[AVR32_OPC_RCALL1]; |
| 7460 | + /* fall through */ |
| 7461 | + case CALL_SUBTYPE_RCALL2: |
| 7462 | + if (!opc) |
| 7463 | + opc = &avr32_opc_table[AVR32_OPC_RCALL2]; |
| 7464 | + ifield = opc->fields[0]; |
| 7465 | + r_type = opc->reloc_type; |
| 7466 | + pcrel = 1; |
| 7467 | + align = 1; |
| 7468 | + break; |
| 7469 | + case CALL_SUBTYPE_MCALL_CP: |
| 7470 | + opc = &avr32_opc_table[AVR32_OPC_MCALL]; |
| 7471 | + opc->fields[0]->insert(opc->fields[0], p, AVR32_REG_PC); |
| 7472 | + ifield = opc->fields[1]; |
| 7473 | + r_type = BFD_RELOC_AVR32_CPCALL; |
| 7474 | + symbol = fragP->tc_frag_data.pool->symbol; |
| 7475 | + offset = fragP->tc_frag_data.pool->literals[fragP->tc_frag_data.pool_entry].offset; |
| 7476 | + assert(fragP->tc_frag_data.pool->literals[fragP->tc_frag_data.pool_entry].refcount > 0); |
| 7477 | + pcrel = 1; |
| 7478 | + align = 2; |
| 7479 | + break; |
| 7480 | + case CALL_SUBTYPE_MCALL_GOT: |
| 7481 | + opc = &avr32_opc_table[AVR32_OPC_MCALL]; |
| 7482 | + opc->fields[0]->insert(opc->fields[0], p, 6); |
| 7483 | + ifield = opc->fields[1]; |
| 7484 | + r_type = BFD_RELOC_AVR32_GOT18SW; |
| 7485 | + break; |
| 7486 | + case CALL_SUBTYPE_MCALL_LARGE: |
| 7487 | + assert(fragP->fr_var == 10); |
| 7488 | + /* ld.w lr, r6[lr << 2] */ |
| 7489 | + opc = &avr32_opc_table[AVR32_OPC_LD_W5]; |
| 7490 | + bfd_putb32(opc->value, p + 4); |
| 7491 | + opc->fields[0]->insert(opc->fields[0], p + 4, AVR32_REG_LR); |
| 7492 | + opc->fields[1]->insert(opc->fields[1], p + 4, 6); |
| 7493 | + opc->fields[2]->insert(opc->fields[2], p + 4, AVR32_REG_LR); |
| 7494 | + opc->fields[3]->insert(opc->fields[3], p + 4, 2); |
| 7495 | + |
| 7496 | + /* icall lr */ |
| 7497 | + opc = &avr32_opc_table[AVR32_OPC_ICALL]; |
| 7498 | + bfd_putb16(opc->value >> 16, p + 8); |
| 7499 | + opc->fields[0]->insert(opc->fields[0], p + 8, AVR32_REG_LR); |
| 7500 | + |
| 7501 | + /* mov lr, (got_offset / 4) */ |
| 7502 | + opc = &avr32_opc_table[AVR32_OPC_MOV2]; |
| 7503 | + opc->fields[0]->insert(opc->fields[0], p, AVR32_REG_LR); |
| 7504 | + ifield = opc->fields[1]; |
| 7505 | + r_type = BFD_RELOC_AVR32_GOTCALL; |
| 7506 | + break; |
| 7507 | + default: |
| 7508 | + BAD_CASE(fragP->fr_subtype); |
| 7509 | + } |
| 7510 | + |
| 7511 | + /* Insert the opcode and clear the variable ifield */ |
| 7512 | + value = bfd_getb32(p); |
| 7513 | + value &= ~(opc->mask | ifield->mask); |
| 7514 | + value |= opc->value; |
| 7515 | + bfd_putb32(value, p); |
| 7516 | + |
| 7517 | + fragP->fr_fix += fragP->fr_var - CALL_INITIAL_SIZE; |
| 7518 | + |
| 7519 | + if (fragP->fr_next |
| 7520 | + && ((offsetT)(fragP->fr_next->fr_address - fragP->fr_address) |
| 7521 | + != fragP->fr_fix)) |
| 7522 | + { |
| 7523 | + fprintf(stderr, "%s:%d: fr_fix %lu is wrong! fr_var=%lu, r_type=%s\n", |
| 7524 | + fragP->fr_file, fragP->fr_line, |
| 7525 | + fragP->fr_fix, fragP->fr_var, bfd_get_reloc_code_name(r_type)); |
| 7526 | + fprintf(stderr, "fr_fix should be %ld. next frag is %s:%d\n", |
| 7527 | + (offsetT)(fragP->fr_next->fr_address - fragP->fr_address), |
| 7528 | + fragP->fr_next->fr_file, fragP->fr_next->fr_line); |
| 7529 | + } |
| 7530 | + |
| 7531 | + fixP = fix_new(fragP, fragP->fr_fix - fragP->fr_var, fragP->fr_var, |
| 7532 | + symbol, offset, pcrel, r_type); |
| 7533 | + |
| 7534 | + /* Revert fix_new brain damage. "dot_value" is the value of PC at |
| 7535 | + the point of the fixup, relative to the frag address. fix_new() |
| 7536 | + and friends think they are only being called during the assembly |
| 7537 | + pass, not during relaxation or similar, so fx_dot_value, fx_file |
| 7538 | + and fx_line are all initialized to the wrong value. But we don't |
| 7539 | + know the size of the fixup until now, so we really can't live up |
| 7540 | + to the assumptions these functions make about the target. What |
| 7541 | + do these functions think the "where" and "frag" argument mean |
| 7542 | + anyway? */ |
| 7543 | + fixP->fx_dot_value = fragP->fr_fix - opc->size; |
| 7544 | + fixP->fx_file = fragP->fr_file; |
| 7545 | + fixP->fx_line = fragP->fr_line; |
| 7546 | + |
| 7547 | + fixP->tc_fix_data.ifield = ifield; |
| 7548 | + fixP->tc_fix_data.align = align; |
| 7549 | + /* these are only used if the fixup can actually be resolved */ |
| 7550 | + fixP->tc_fix_data.min = -2097152; |
| 7551 | + fixP->tc_fix_data.max = 2097150; |
| 7552 | +} |
| 7553 | + |
| 7554 | +static void |
| 7555 | +avr32_cpool_convert_frag(bfd *abfd ATTRIBUTE_UNUSED, |
| 7556 | + segT segment ATTRIBUTE_UNUSED, |
| 7557 | + fragS *fragP) |
| 7558 | +{ |
| 7559 | + struct cpool *pool; |
| 7560 | + addressT address; |
| 7561 | + unsigned int entry; |
| 7562 | + char *p; |
| 7563 | + char sym_name[20]; |
| 7564 | + |
| 7565 | + /* Did we get rid of the frag altogether? */ |
| 7566 | + if (!fragP->fr_var) |
| 7567 | + return; |
| 7568 | + |
| 7569 | + pool = fragP->tc_frag_data.pool; |
| 7570 | + address = fragP->fr_address + fragP->fr_fix; |
| 7571 | + p = fragP->fr_literal + fragP->fr_fix; |
| 7572 | + |
| 7573 | + sprintf(sym_name, "$$cp_\002%x", pool->id); |
| 7574 | + symbol_locate(pool->symbol, sym_name, pool->section, fragP->fr_fix, fragP); |
| 7575 | + symbol_table_insert(pool->symbol); |
| 7576 | + |
| 7577 | + for (entry = 0; entry < pool->next_free_entry; entry++) |
| 7578 | + { |
| 7579 | + if (pool->literals[entry].refcount > 0) |
| 7580 | + { |
| 7581 | + fix_new_exp(fragP, fragP->fr_fix, 4, &pool->literals[entry].exp, |
| 7582 | + FALSE, BFD_RELOC_AVR32_32_CPENT); |
| 7583 | + fragP->fr_fix += 4; |
| 7584 | + } |
| 7585 | + } |
| 7586 | +} |
| 7587 | + |
| 7588 | +static struct avr32_relaxer avr32_default_relaxer = { |
| 7589 | + .estimate_size = avr32_default_estimate_size_before_relax, |
| 7590 | + .relax_frag = avr32_default_relax_frag, |
| 7591 | + .convert_frag = avr32_default_convert_frag, |
| 7592 | +}; |
| 7593 | +static struct avr32_relaxer avr32_lda_relaxer = { |
| 7594 | + .estimate_size = avr32_lda_estimate_size_before_relax, |
| 7595 | + .relax_frag = avr32_lda_relax_frag, |
| 7596 | + .convert_frag = avr32_lda_convert_frag, |
| 7597 | +}; |
| 7598 | +static struct avr32_relaxer avr32_call_relaxer = { |
| 7599 | + .estimate_size = avr32_call_estimate_size_before_relax, |
| 7600 | + .relax_frag = avr32_call_relax_frag, |
| 7601 | + .convert_frag = avr32_call_convert_frag, |
| 7602 | +}; |
| 7603 | +static struct avr32_relaxer avr32_cpool_relaxer = { |
| 7604 | + .estimate_size = avr32_cpool_estimate_size_before_relax, |
| 7605 | + .relax_frag = avr32_cpool_relax_frag, |
| 7606 | + .convert_frag = avr32_cpool_convert_frag, |
| 7607 | +}; |
| 7608 | + |
| 7609 | +static void s_cpool(int arg ATTRIBUTE_UNUSED) |
| 7610 | +{ |
| 7611 | + struct cpool *pool; |
| 7612 | + unsigned int max_size; |
| 7613 | + char *buf; |
| 7614 | + |
| 7615 | + pool = find_cpool(now_seg, now_subseg); |
| 7616 | + if (!pool || !pool->symbol || pool->next_free_entry == 0) |
| 7617 | + return; |
| 7618 | + |
| 7619 | + /* Make sure the constant pool is properly aligned */ |
| 7620 | + frag_align_code(2, 0); |
| 7621 | + if (bfd_get_section_alignment(stdoutput, pool->section) < 2) |
| 7622 | + bfd_set_section_alignment(stdoutput, pool->section, 2); |
| 7623 | + |
| 7624 | + /* Assume none of the entries are discarded, and that we need the |
| 7625 | + maximum amount of alignment. But we're not going to allocate |
| 7626 | + anything up front. */ |
| 7627 | + max_size = pool->next_free_entry * 4 + 2; |
| 7628 | + frag_grow(max_size); |
| 7629 | + buf = frag_more(0); |
| 7630 | + |
| 7631 | + frag_now->tc_frag_data.relaxer = &avr32_cpool_relaxer; |
| 7632 | + frag_now->tc_frag_data.pool = pool; |
| 7633 | + |
| 7634 | + symbol_set_frag(pool->symbol, frag_now); |
| 7635 | + |
| 7636 | + /* Assume zero initial size, allowing other relaxers to be |
| 7637 | + optimistic about things. */ |
| 7638 | + frag_var(rs_machine_dependent, max_size, 0, |
| 7639 | + 0, pool->symbol, 0, NULL); |
| 7640 | + |
| 7641 | + /* Mark the pool as empty. */ |
| 7642 | + pool->used = 1; |
| 7643 | +} |
| 7644 | + |
| 7645 | +/* The location from which a PC relative jump should be calculated, |
| 7646 | + given a PC relative reloc. */ |
| 7647 | + |
| 7648 | +long |
| 7649 | +md_pcrel_from_section (fixS *fixP, segT sec) |
| 7650 | +{ |
| 7651 | + pr_debug("pcrel_from_section, fx_offset = %d\n", fixP->fx_offset); |
| 7652 | + |
| 7653 | + if (fixP->fx_addsy != NULL |
| 7654 | + && (! S_IS_DEFINED (fixP->fx_addsy) |
| 7655 | + || S_GET_SEGMENT (fixP->fx_addsy) != sec |
| 7656 | + || S_FORCE_RELOC(fixP->fx_addsy, 1))) |
| 7657 | + { |
| 7658 | + pr_debug("Unknown pcrel symbol: %s\n", S_GET_NAME(fixP->fx_addsy)); |
| 7659 | + |
| 7660 | + /* The symbol is undefined (or is defined but not in this section). |
| 7661 | + Let the linker figure it out. */ |
| 7662 | + return 0; |
| 7663 | + } |
| 7664 | + |
| 7665 | + pr_debug("pcrel from %x + %x, symbol: %s (%x)\n", |
| 7666 | + fixP->fx_frag->fr_address, fixP->fx_where, |
| 7667 | + fixP->fx_addsy?S_GET_NAME(fixP->fx_addsy):"(null)", |
| 7668 | + fixP->fx_addsy?S_GET_VALUE(fixP->fx_addsy):0); |
| 7669 | + |
| 7670 | + return ((fixP->fx_frag->fr_address + fixP->fx_where) |
| 7671 | + & (~0UL << fixP->tc_fix_data.align)); |
| 7672 | +} |
| 7673 | + |
| 7674 | +valueT |
| 7675 | +md_section_align (segT segment, valueT size) |
| 7676 | +{ |
| 7677 | + int align = bfd_get_section_alignment (stdoutput, segment); |
| 7678 | + return ((size + (1 << align) - 1) & (-1 << align)); |
| 7679 | +} |
| 7680 | + |
| 7681 | +static int syntax_matches(const struct avr32_syntax *syntax, |
| 7682 | + char *str) |
| 7683 | +{ |
| 7684 | + int i; |
| 7685 | + |
| 7686 | + pr_debug("syntax %d matches `%s'?\n", syntax->id, str); |
| 7687 | + |
| 7688 | + if (syntax->nr_operands < 0) |
| 7689 | + { |
| 7690 | + struct avr32_operand *op; |
| 7691 | + int optype; |
| 7692 | + |
| 7693 | + for (i = 0; i < (-syntax->nr_operands - 1); i++) |
| 7694 | + { |
| 7695 | + char *p; |
| 7696 | + char c; |
| 7697 | + |
| 7698 | + optype = syntax->operand[i]; |
| 7699 | + assert(optype < AVR32_NR_OPERANDS); |
| 7700 | + op = &avr32_operand_table[optype]; |
| 7701 | + |
| 7702 | + for (p = str; *p; p++) |
| 7703 | + if (*p == ',') |
| 7704 | + break; |
| 7705 | + |
| 7706 | + if (p == str) |
| 7707 | + return 0; |
| 7708 | + |
| 7709 | + c = *p; |
| 7710 | + *p = 0; |
| 7711 | + |
| 7712 | + if (!op->match(str)) |
| 7713 | + { |
| 7714 | + *p = c; |
| 7715 | + return 0; |
| 7716 | + } |
| 7717 | + |
| 7718 | + str = p; |
| 7719 | + *p = c; |
| 7720 | + if (c) |
| 7721 | + str++; |
| 7722 | + } |
| 7723 | + |
| 7724 | + optype = syntax->operand[i]; |
| 7725 | + assert(optype < AVR32_NR_OPERANDS); |
| 7726 | + op = &avr32_operand_table[optype]; |
| 7727 | + |
| 7728 | + if (!op->match(str)) |
| 7729 | + return 0; |
| 7730 | + return 1; |
| 7731 | + } |
| 7732 | + |
| 7733 | + for (i = 0; i < syntax->nr_operands; i++) |
| 7734 | + { |
| 7735 | + struct avr32_operand *op; |
| 7736 | + int optype = syntax->operand[i]; |
| 7737 | + char *p; |
| 7738 | + char c; |
| 7739 | + |
| 7740 | + assert(optype < AVR32_NR_OPERANDS); |
| 7741 | + op = &avr32_operand_table[optype]; |
| 7742 | + |
| 7743 | + for (p = str; *p; p++) |
| 7744 | + if (*p == ',') |
| 7745 | + break; |
| 7746 | + |
| 7747 | + if (p == str) |
| 7748 | + return 0; |
| 7749 | + |
| 7750 | + c = *p; |
| 7751 | + *p = 0; |
| 7752 | + |
| 7753 | + if (!op->match(str)) |
| 7754 | + { |
| 7755 | + *p = c; |
| 7756 | + return 0; |
| 7757 | + } |
| 7758 | + |
| 7759 | + str = p; |
| 7760 | + *p = c; |
| 7761 | + if (c) |
| 7762 | + str++; |
| 7763 | + } |
| 7764 | + |
| 7765 | + if (*str == '\0') |
| 7766 | + return 1; |
| 7767 | + |
| 7768 | + if ((*str == 'e' || *str == 'E') && !str[1]) |
| 7769 | + return 1; |
| 7770 | + |
| 7771 | + return 0; |
| 7772 | +} |
| 7773 | + |
| 7774 | +static int parse_operands(char *str) |
| 7775 | +{ |
| 7776 | + int i; |
| 7777 | + |
| 7778 | + if (current_insn.syntax->nr_operands < 0) |
| 7779 | + { |
| 7780 | + int optype; |
| 7781 | + struct avr32_operand *op; |
| 7782 | + |
| 7783 | + for (i = 0; i < (-current_insn.syntax->nr_operands - 1); i++) |
| 7784 | + { |
| 7785 | + char *p; |
| 7786 | + char c; |
| 7787 | + |
| 7788 | + optype = current_insn.syntax->operand[i]; |
| 7789 | + op = &avr32_operand_table[optype]; |
| 7790 | + |
| 7791 | + for (p = str; *p; p++) |
| 7792 | + if (*p == ',') |
| 7793 | + break; |
| 7794 | + |
| 7795 | + assert(p != str); |
| 7796 | + |
| 7797 | + c = *p, *p = 0; |
| 7798 | + op->parse(op, str, i); |
| 7799 | + *p = c; |
| 7800 | + |
| 7801 | + str = p; |
| 7802 | + if (c) str++; |
| 7803 | + } |
| 7804 | + |
| 7805 | + /* give the rest of the line to the last operand */ |
| 7806 | + optype = current_insn.syntax->operand[i]; |
| 7807 | + op = &avr32_operand_table[optype]; |
| 7808 | + op->parse(op, str, i); |
| 7809 | + } |
| 7810 | + else |
| 7811 | + { |
| 7812 | + for (i = 0; i < current_insn.syntax->nr_operands; i++) |
| 7813 | + { |
| 7814 | + int optype = current_insn.syntax->operand[i]; |
| 7815 | + struct avr32_operand *op = &avr32_operand_table[optype]; |
| 7816 | + char *p; |
| 7817 | + char c; |
| 7818 | + |
| 7819 | + skip_whitespace(str); |
| 7820 | + |
| 7821 | + for (p = str; *p; p++) |
| 7822 | + if (*p == ',') |
| 7823 | + break; |
| 7824 | + |
| 7825 | + assert(p != str); |
| 7826 | + |
| 7827 | + c = *p, *p = 0; |
| 7828 | + op->parse(op, str, i); |
| 7829 | + *p = c; |
| 7830 | + |
| 7831 | + str = p; |
| 7832 | + if (c) str++; |
| 7833 | + } |
| 7834 | + |
| 7835 | + if (*str == 'E' || *str == 'e') |
| 7836 | + current_insn.force_extended = 1; |
| 7837 | + } |
| 7838 | + |
| 7839 | + return 0; |
| 7840 | +} |
| 7841 | + |
| 7842 | +static const char * |
| 7843 | +finish_insn(const struct avr32_opcode *opc) |
| 7844 | +{ |
| 7845 | + expressionS *exp = ¤t_insn.immediate; |
| 7846 | + unsigned int i; |
| 7847 | + int will_relax = 0; |
| 7848 | + char *buf; |
| 7849 | + |
| 7850 | + assert(current_insn.next_slot == opc->nr_fields); |
| 7851 | + |
| 7852 | + pr_debug("%s:%d: finish_insn: trying opcode %d\n", |
| 7853 | + frag_now->fr_file, frag_now->fr_line, opc->id); |
| 7854 | + |
| 7855 | + /* Go through the relaxation stage for all instructions that can |
| 7856 | + possibly take a symbolic immediate. The relax code will take |
| 7857 | + care of range checking and alignment. */ |
| 7858 | + if (opc->var_field != -1) |
| 7859 | + { |
| 7860 | + int substate, largest_substate; |
| 7861 | + symbolS *sym; |
| 7862 | + offsetT off; |
| 7863 | + |
| 7864 | + will_relax = 1; |
| 7865 | + substate = largest_substate = opc_initial_substate(opc); |
| 7866 | + |
| 7867 | + while (relax_more(largest_substate) != AVR32_RS_NONE) |
| 7868 | + largest_substate = relax_more(largest_substate); |
| 7869 | + |
| 7870 | + pr_debug("will relax. initial substate: %d (size %d), largest substate: %d (size %d)\n", |
| 7871 | + substate, avr32_rs_size(substate), |
| 7872 | + largest_substate, avr32_rs_size(largest_substate)); |
| 7873 | + |
| 7874 | + /* make sure we have enough room for the largest possible opcode */ |
| 7875 | + frag_grow(avr32_rs_size(largest_substate)); |
| 7876 | + buf = frag_more(opc->size); |
| 7877 | + |
| 7878 | + dwarf2_emit_insn(opc->size); |
| 7879 | + |
| 7880 | + frag_now->tc_frag_data.reloc_info = AVR32_OPINFO_NONE; |
| 7881 | + frag_now->tc_frag_data.pcrel = current_insn.pcrel; |
| 7882 | + frag_now->tc_frag_data.force_extended = current_insn.force_extended; |
| 7883 | + frag_now->tc_frag_data.relaxer = &avr32_default_relaxer; |
| 7884 | + |
| 7885 | + if (exp->X_op == O_hi) |
| 7886 | + { |
| 7887 | + frag_now->tc_frag_data.reloc_info = AVR32_OPINFO_HI; |
| 7888 | + exp->X_op = exp->X_md; |
| 7889 | + } |
| 7890 | + else if (exp->X_op == O_lo) |
| 7891 | + { |
| 7892 | + frag_now->tc_frag_data.reloc_info = AVR32_OPINFO_LO; |
| 7893 | + exp->X_op = exp->X_md; |
| 7894 | + } |
| 7895 | + else if (exp->X_op == O_got) |
| 7896 | + { |
| 7897 | + frag_now->tc_frag_data.reloc_info = AVR32_OPINFO_GOT; |
| 7898 | + exp->X_op = O_symbol; |
| 7899 | + } |
| 7900 | + |
| 7901 | +#if 0 |
| 7902 | + if ((opc->reloc_type == BFD_RELOC_AVR32_SUB5) |
| 7903 | + && exp->X_op == O_subtract) |
| 7904 | + { |
| 7905 | + symbolS *tmp; |
| 7906 | + tmp = exp->X_add_symbol; |
| 7907 | + exp->X_add_symbol = exp->X_op_symbol; |
| 7908 | + exp->X_op_symbol = tmp; |
| 7909 | + } |
| 7910 | +#endif |
| 7911 | + |
| 7912 | + frag_now->tc_frag_data.exp = current_insn.immediate; |
| 7913 | + |
| 7914 | + sym = exp->X_add_symbol; |
| 7915 | + off = exp->X_add_number; |
| 7916 | + if (exp->X_op != O_symbol) |
| 7917 | + { |
| 7918 | + sym = make_expr_symbol(exp); |
| 7919 | + off = 0; |
| 7920 | + } |
| 7921 | + |
| 7922 | + frag_var(rs_machine_dependent, |
| 7923 | + avr32_rs_size(largest_substate) - opc->size, |
| 7924 | + opc->size, |
| 7925 | + substate, sym, off, buf); |
| 7926 | + } |
| 7927 | + else |
| 7928 | + { |
| 7929 | + assert(avr32_rs_size(opc_initial_substate(opc)) == 0); |
| 7930 | + |
| 7931 | + /* Make sure we always have room for another whole word, as the ifield |
| 7932 | + inserters can only write words. */ |
| 7933 | + frag_grow(4); |
| 7934 | + buf = frag_more(opc->size); |
| 7935 | + dwarf2_emit_insn(opc->size); |
| 7936 | + } |
| 7937 | + |
| 7938 | + assert(!(opc->value & ~opc->mask)); |
| 7939 | + |
| 7940 | + pr_debug("inserting opcode: 0x%lx\n", opc->value); |
| 7941 | + bfd_putb32(opc->value, buf); |
| 7942 | + |
| 7943 | + for (i = 0; i < opc->nr_fields; i++) |
| 7944 | + { |
| 7945 | + const struct avr32_ifield *f = opc->fields[i]; |
| 7946 | + const struct avr32_ifield_data *fd = ¤t_insn.field_value[i]; |
| 7947 | + |
| 7948 | + pr_debug("inserting field: 0x%lx & 0x%lx\n", |
| 7949 | + fd->value >> fd->align_order, f->mask); |
| 7950 | + |
| 7951 | + f->insert(f, buf, fd->value >> fd->align_order); |
| 7952 | + } |
| 7953 | + |
| 7954 | + assert(will_relax || !current_insn.immediate.X_add_symbol); |
| 7955 | + return NULL; |
| 7956 | +} |
| 7957 | + |
| 7958 | +static const char * |
| 7959 | +finish_alias(const struct avr32_alias *alias) |
| 7960 | +{ |
| 7961 | + const struct avr32_opcode *opc; |
| 7962 | + struct { |
| 7963 | + unsigned long value; |
| 7964 | + unsigned long align; |
| 7965 | + } mapped_operand[AVR32_MAX_OPERANDS]; |
| 7966 | + unsigned int i; |
| 7967 | + |
| 7968 | + opc = alias->opc; |
| 7969 | + |
| 7970 | + /* Remap the operands from the alias to the real opcode */ |
| 7971 | + for (i = 0; i < opc->nr_fields; i++) |
| 7972 | + { |
| 7973 | + if (alias->operand_map[i].is_opindex) |
| 7974 | + { |
| 7975 | + struct avr32_ifield_data *fd; |
| 7976 | + fd = ¤t_insn.field_value[alias->operand_map[i].value]; |
| 7977 | + mapped_operand[i].value = fd->value; |
| 7978 | + mapped_operand[i].align = fd->align_order; |
| 7979 | + } |
| 7980 | + else |
| 7981 | + { |
| 7982 | + mapped_operand[i].value = alias->operand_map[i].value; |
| 7983 | + mapped_operand[i].align = 0; |
| 7984 | + } |
| 7985 | + } |
| 7986 | + |
| 7987 | + for (i = 0; i < opc->nr_fields; i++) |
| 7988 | + { |
| 7989 | + current_insn.field_value[i].value = mapped_operand[i].value; |
| 7990 | + if (opc->id == AVR32_OPC_COP) |
| 7991 | + current_insn.field_value[i].align_order = 0; |
| 7992 | + else |
| 7993 | + current_insn.field_value[i].align_order |
| 7994 | + = mapped_operand[i].align; |
| 7995 | + } |
| 7996 | + |
| 7997 | + current_insn.next_slot = opc->nr_fields; |
| 7998 | + |
| 7999 | + return finish_insn(opc); |
| 8000 | +} |
| 8001 | + |
| 8002 | +static const char * |
| 8003 | +finish_lda(const struct avr32_syntax *syntax ATTRIBUTE_UNUSED) |
| 8004 | +{ |
| 8005 | + expressionS *exp = ¤t_insn.immediate; |
| 8006 | + relax_substateT initial_subtype; |
| 8007 | + symbolS *sym; |
| 8008 | + offsetT off; |
| 8009 | + int initial_size, max_size; |
| 8010 | + char *buf; |
| 8011 | + |
| 8012 | + initial_size = LDA_INITIAL_SIZE; |
| 8013 | + |
| 8014 | + if (avr32_pic) |
| 8015 | + { |
| 8016 | + initial_subtype = LDA_SUBTYPE_SUB; |
| 8017 | + if (linkrelax) |
| 8018 | + max_size = 8; |
| 8019 | + else |
| 8020 | + max_size = 4; |
| 8021 | + } |
| 8022 | + else |
| 8023 | + { |
| 8024 | + initial_subtype = LDA_SUBTYPE_MOV1; |
| 8025 | + max_size = 4; |
| 8026 | + } |
| 8027 | + |
| 8028 | + frag_grow(max_size); |
| 8029 | + buf = frag_more(initial_size); |
| 8030 | + dwarf2_emit_insn(initial_size); |
| 8031 | + |
| 8032 | + if (exp->X_op == O_symbol) |
| 8033 | + { |
| 8034 | + sym = exp->X_add_symbol; |
| 8035 | + off = exp->X_add_number; |
| 8036 | + } |
| 8037 | + else |
| 8038 | + { |
| 8039 | + sym = make_expr_symbol(exp); |
| 8040 | + off = 0; |
| 8041 | + } |
| 8042 | + |
| 8043 | + frag_now->tc_frag_data.reloc_info = current_insn.field_value[0].value; |
| 8044 | + frag_now->tc_frag_data.relaxer = &avr32_lda_relaxer; |
| 8045 | + |
| 8046 | + if (!avr32_pic) |
| 8047 | + { |
| 8048 | + /* The relaxer will bump the refcount if necessary */ |
| 8049 | + frag_now->tc_frag_data.pool |
| 8050 | + = add_to_cpool(exp, &frag_now->tc_frag_data.pool_entry, 0); |
| 8051 | + } |
| 8052 | + |
| 8053 | + frag_var(rs_machine_dependent, max_size - initial_size, |
| 8054 | + initial_size, initial_subtype, sym, off, buf); |
| 8055 | + |
| 8056 | + return NULL; |
| 8057 | +} |
| 8058 | + |
| 8059 | +static const char * |
| 8060 | +finish_call(const struct avr32_syntax *syntax ATTRIBUTE_UNUSED) |
| 8061 | +{ |
| 8062 | + expressionS *exp = ¤t_insn.immediate; |
| 8063 | + symbolS *sym; |
| 8064 | + offsetT off; |
| 8065 | + int initial_size, max_size; |
| 8066 | + char *buf; |
| 8067 | + |
| 8068 | + initial_size = CALL_INITIAL_SIZE; |
| 8069 | + |
| 8070 | + if (avr32_pic) |
| 8071 | + { |
| 8072 | + if (linkrelax) |
| 8073 | + max_size = 10; |
| 8074 | + else |
| 8075 | + max_size = 4; |
| 8076 | + } |
| 8077 | + else |
| 8078 | + max_size = 4; |
| 8079 | + |
| 8080 | + frag_grow(max_size); |
| 8081 | + buf = frag_more(initial_size); |
| 8082 | + dwarf2_emit_insn(initial_size); |
| 8083 | + |
| 8084 | + frag_now->tc_frag_data.relaxer = &avr32_call_relaxer; |
| 8085 | + |
| 8086 | + if (exp->X_op == O_symbol) |
| 8087 | + { |
| 8088 | + sym = exp->X_add_symbol; |
| 8089 | + off = exp->X_add_number; |
| 8090 | + } |
| 8091 | + else |
| 8092 | + { |
| 8093 | + sym = make_expr_symbol(exp); |
| 8094 | + off = 0; |
| 8095 | + } |
| 8096 | + |
| 8097 | + if (!avr32_pic) |
| 8098 | + { |
| 8099 | + /* The relaxer will bump the refcount if necessary */ |
| 8100 | + frag_now->tc_frag_data.pool |
| 8101 | + = add_to_cpool(exp, &frag_now->tc_frag_data.pool_entry, 0); |
| 8102 | + } |
| 8103 | + |
| 8104 | + frag_var(rs_machine_dependent, max_size - initial_size, |
| 8105 | + initial_size, CALL_SUBTYPE_RCALL1, sym, off, buf); |
| 8106 | + |
| 8107 | + return NULL; |
| 8108 | +} |
| 8109 | + |
| 8110 | +void |
| 8111 | +md_begin (void) |
| 8112 | +{ |
| 8113 | + unsigned long flags = 0; |
| 8114 | + int i; |
| 8115 | + |
| 8116 | + avr32_mnemonic_htab = hash_new(); |
| 8117 | + |
| 8118 | + if (!avr32_mnemonic_htab) |
| 8119 | + as_fatal(_("virtual memory exhausted")); |
| 8120 | + |
| 8121 | + for (i = 0; i < AVR32_NR_MNEMONICS; i++) |
| 8122 | + { |
| 8123 | + hash_insert(avr32_mnemonic_htab, avr32_mnemonic_table[i].name, |
| 8124 | + (void *)&avr32_mnemonic_table[i]); |
| 8125 | + } |
| 8126 | + |
| 8127 | + if (linkrelax) |
| 8128 | + flags |= EF_AVR32_LINKRELAX; |
| 8129 | + if (avr32_pic) |
| 8130 | + flags |= EF_AVR32_PIC; |
| 8131 | + |
| 8132 | + bfd_set_private_flags(stdoutput, flags); |
| 8133 | + |
| 8134 | +#ifdef OPC_CONSISTENCY_CHECK |
| 8135 | + if (sizeof(avr32_operand_table)/sizeof(avr32_operand_table[0]) |
| 8136 | + < AVR32_NR_OPERANDS) |
| 8137 | + as_fatal(_("operand table is incomplete")); |
| 8138 | + |
| 8139 | + for (i = 0; i < AVR32_NR_OPERANDS; i++) |
| 8140 | + if (avr32_operand_table[i].id != i) |
| 8141 | + as_fatal(_("operand table inconsistency found at index %d\n"), i); |
| 8142 | + pr_debug("%d operands verified\n", AVR32_NR_OPERANDS); |
| 8143 | + |
| 8144 | + for (i = 0; i < AVR32_NR_IFIELDS; i++) |
| 8145 | + if (avr32_ifield_table[i].id != i) |
| 8146 | + as_fatal(_("ifield table inconsistency found at index %d\n"), i); |
| 8147 | + pr_debug("%d instruction fields verified\n", AVR32_NR_IFIELDS); |
| 8148 | + |
| 8149 | + for (i = 0; i < AVR32_NR_OPCODES; i++) |
| 8150 | + { |
| 8151 | + if (avr32_opc_table[i].id != i) |
| 8152 | + as_fatal(_("opcode table inconsistency found at index %d\n"), i); |
| 8153 | + if ((avr32_opc_table[i].var_field == -1 |
| 8154 | + && avr32_relax_table[i].length != 0) |
| 8155 | + || (avr32_opc_table[i].var_field != -1 |
| 8156 | + && avr32_relax_table[i].length == 0)) |
| 8157 | + as_fatal(_("relax table inconsistency found at index %d\n"), i); |
| 8158 | + } |
| 8159 | + pr_debug("%d opcodes verified\n", AVR32_NR_OPCODES); |
| 8160 | + |
| 8161 | + for (i = 0; i < AVR32_NR_SYNTAX; i++) |
| 8162 | + if (avr32_syntax_table[i].id != i) |
| 8163 | + as_fatal(_("syntax table inconsistency found at index %d\n"), i); |
| 8164 | + pr_debug("%d syntax variants verified\n", AVR32_NR_SYNTAX); |
| 8165 | + |
| 8166 | + for (i = 0; i < AVR32_NR_ALIAS; i++) |
| 8167 | + if (avr32_alias_table[i].id != i) |
| 8168 | + as_fatal(_("alias table inconsistency found at index %d\n"), i); |
| 8169 | + pr_debug("%d aliases verified\n", AVR32_NR_ALIAS); |
| 8170 | + |
| 8171 | + for (i = 0; i < AVR32_NR_MNEMONICS; i++) |
| 8172 | + if (avr32_mnemonic_table[i].id != i) |
| 8173 | + as_fatal(_("mnemonic table inconsistency found at index %d\n"), i); |
| 8174 | + pr_debug("%d mnemonics verified\n", AVR32_NR_MNEMONICS); |
| 8175 | +#endif |
| 8176 | +} |
| 8177 | + |
| 8178 | +void |
| 8179 | +md_assemble (char *str) |
| 8180 | +{ |
| 8181 | + struct avr32_mnemonic *mnemonic; |
| 8182 | + char *p, c; |
| 8183 | + |
| 8184 | + memset(¤t_insn, 0, sizeof(current_insn)); |
| 8185 | + current_insn.immediate.X_op = O_constant; |
| 8186 | + |
| 8187 | + skip_whitespace(str); |
| 8188 | + for (p = str; *p; p++) |
| 8189 | + if (*p == ' ') |
| 8190 | + break; |
| 8191 | + c = *p; |
| 8192 | + *p = 0; |
| 8193 | + |
| 8194 | + mnemonic = hash_find(avr32_mnemonic_htab, str); |
| 8195 | + *p = c; |
| 8196 | + if (c) p++; |
| 8197 | + |
| 8198 | + if (mnemonic) |
| 8199 | + { |
| 8200 | + const struct avr32_syntax *syntax; |
| 8201 | + |
| 8202 | + for (syntax = mnemonic->syntax; syntax; syntax = syntax->next) |
| 8203 | + { |
| 8204 | + const char *errmsg = NULL; |
| 8205 | + |
| 8206 | + if (syntax_matches(syntax, p)) |
| 8207 | + { |
| 8208 | + if (!(syntax->isa_flags & avr32_arch->isa_flags)) |
| 8209 | + { |
| 8210 | + as_bad(_("Selected architecture `%s' does not support `%s'"), |
| 8211 | + avr32_arch->name, str); |
| 8212 | + return; |
| 8213 | + } |
| 8214 | + |
| 8215 | + current_insn.syntax = syntax; |
| 8216 | + parse_operands(p); |
| 8217 | + |
| 8218 | + switch (syntax->type) |
| 8219 | + { |
| 8220 | + case AVR32_PARSER_NORMAL: |
| 8221 | + errmsg = finish_insn(syntax->u.opc); |
| 8222 | + break; |
| 8223 | + case AVR32_PARSER_ALIAS: |
| 8224 | + errmsg = finish_alias(syntax->u.alias); |
| 8225 | + break; |
| 8226 | + case AVR32_PARSER_LDA: |
| 8227 | + errmsg = finish_lda(syntax); |
| 8228 | + break; |
| 8229 | + case AVR32_PARSER_CALL: |
| 8230 | + errmsg = finish_call(syntax); |
| 8231 | + break; |
| 8232 | + default: |
| 8233 | + BAD_CASE(syntax->type); |
| 8234 | + break; |
| 8235 | + } |
| 8236 | + |
| 8237 | + if (errmsg) |
| 8238 | + as_bad("%s in `%s'", errmsg, str); |
| 8239 | + |
| 8240 | + return; |
| 8241 | + } |
| 8242 | + } |
| 8243 | + |
| 8244 | + as_bad(_("unrecognized form of instruction: `%s'"), str); |
| 8245 | + } |
| 8246 | + else |
| 8247 | + as_bad(_("unrecognized instruction `%s'"), str); |
| 8248 | +} |
| 8249 | + |
| 8250 | +void avr32_cleanup(void) |
| 8251 | +{ |
| 8252 | + struct cpool *pool; |
| 8253 | + |
| 8254 | + /* Emit any constant pools that haven't been explicitly flushed with |
| 8255 | + a .cpool directive. */ |
| 8256 | + for (pool = cpool_list; pool; pool = pool->next) |
| 8257 | + { |
| 8258 | + subseg_set(pool->section, pool->sub_section); |
| 8259 | + s_cpool(0); |
| 8260 | + } |
| 8261 | +} |
| 8262 | + |
| 8263 | +/* Handle any PIC-related operands in data allocation pseudo-ops */ |
| 8264 | +void |
| 8265 | +avr32_cons_fix_new (fragS *frag, int off, int size, expressionS *exp) |
| 8266 | +{ |
| 8267 | + bfd_reloc_code_real_type r_type = BFD_RELOC_UNUSED; |
| 8268 | + int pcrel = 0; |
| 8269 | + |
| 8270 | + pr_debug("%s:%u: cons_fix_new, add_sym: %s, op_sym: %s, op: %d, add_num: %d\n", |
| 8271 | + frag->fr_file, frag->fr_line, |
| 8272 | + exp->X_add_symbol?S_GET_NAME(exp->X_add_symbol):"(none)", |
| 8273 | + exp->X_op_symbol?S_GET_NAME(exp->X_op_symbol):"(none)", |
| 8274 | + exp->X_op, exp->X_add_number); |
| 8275 | + |
| 8276 | + if (exp->X_op == O_subtract && exp->X_op_symbol) |
| 8277 | + { |
| 8278 | + if (exp->X_op_symbol == GOT_symbol) |
| 8279 | + { |
| 8280 | + if (size != 4) |
| 8281 | + goto bad_size; |
| 8282 | + r_type = BFD_RELOC_AVR32_GOTPC; |
| 8283 | + exp->X_op = O_symbol; |
| 8284 | + exp->X_op_symbol = NULL; |
| 8285 | + } |
| 8286 | + } |
| 8287 | + else if (exp->X_op == O_got) |
| 8288 | + { |
| 8289 | + switch (size) |
| 8290 | + { |
| 8291 | + case 1: |
| 8292 | + r_type = BFD_RELOC_AVR32_GOT8; |
| 8293 | + break; |
| 8294 | + case 2: |
| 8295 | + r_type = BFD_RELOC_AVR32_GOT16; |
| 8296 | + break; |
| 8297 | + case 4: |
| 8298 | + r_type = BFD_RELOC_AVR32_GOT32; |
| 8299 | + break; |
| 8300 | + default: |
| 8301 | + goto bad_size; |
| 8302 | + } |
| 8303 | + |
| 8304 | + exp->X_op = O_symbol; |
| 8305 | + } |
| 8306 | + |
| 8307 | + if (r_type == BFD_RELOC_UNUSED) |
| 8308 | + switch (size) |
| 8309 | + { |
| 8310 | + case 1: |
| 8311 | + r_type = BFD_RELOC_8; |
| 8312 | + break; |
| 8313 | + case 2: |
| 8314 | + r_type = BFD_RELOC_16; |
| 8315 | + break; |
| 8316 | + case 4: |
| 8317 | + r_type = BFD_RELOC_32; |
| 8318 | + break; |
| 8319 | + default: |
| 8320 | + goto bad_size; |
| 8321 | + } |
| 8322 | + else if (size != 4) |
| 8323 | + { |
| 8324 | + bad_size: |
| 8325 | + as_bad(_("unsupported BFD relocation size %u"), size); |
| 8326 | + r_type = BFD_RELOC_UNUSED; |
| 8327 | + } |
| 8328 | + |
| 8329 | + fix_new_exp (frag, off, size, exp, pcrel, r_type); |
| 8330 | +} |
| 8331 | + |
| 8332 | +static void |
| 8333 | +avr32_frob_section(bfd *abfd ATTRIBUTE_UNUSED, segT sec, |
| 8334 | + void *ignore ATTRIBUTE_UNUSED) |
| 8335 | +{ |
| 8336 | + segment_info_type *seginfo; |
| 8337 | + fixS *fix; |
| 8338 | + |
| 8339 | + seginfo = seg_info(sec); |
| 8340 | + if (!seginfo) |
| 8341 | + return; |
| 8342 | + |
| 8343 | + for (fix = seginfo->fix_root; fix; fix = fix->fx_next) |
| 8344 | + { |
| 8345 | + if (fix->fx_done) |
| 8346 | + continue; |
| 8347 | + |
| 8348 | + if (fix->fx_r_type == BFD_RELOC_AVR32_SUB5 |
| 8349 | + && fix->fx_addsy && fix->fx_subsy) |
| 8350 | + { |
| 8351 | + if (S_GET_SEGMENT(fix->fx_addsy) != S_GET_SEGMENT(fix->fx_subsy) |
| 8352 | + || linkrelax) |
| 8353 | + { |
| 8354 | + symbolS *tmp; |
| 8355 | +#ifdef DEBUG |
| 8356 | + fprintf(stderr, "Swapping symbols in fixup:\n"); |
| 8357 | + print_fixup(fix); |
| 8358 | +#endif |
| 8359 | + tmp = fix->fx_addsy; |
| 8360 | + fix->fx_addsy = fix->fx_subsy; |
| 8361 | + fix->fx_subsy = tmp; |
| 8362 | + fix->fx_offset = -fix->fx_offset; |
| 8363 | + } |
| 8364 | + } |
| 8365 | + } |
| 8366 | +} |
| 8367 | + |
| 8368 | +/* We need to look for SUB5 instructions with expressions that will be |
| 8369 | + made PC-relative and switch fx_addsy with fx_subsy. This has to be |
| 8370 | + done before adjustment or the wrong symbol might be adjusted. |
| 8371 | + |
| 8372 | + This applies to fixups that are a result of expressions like -(sym |
| 8373 | + - .) and that will make it all the way to md_apply_fix3(). LDA |
| 8374 | + does the right thing in convert_frag, so we must not convert |
| 8375 | + those. */ |
| 8376 | +void |
| 8377 | +avr32_frob_file(void) |
| 8378 | +{ |
| 8379 | + /* if (1 || !linkrelax) |
| 8380 | + return; */ |
| 8381 | + |
| 8382 | + bfd_map_over_sections(stdoutput, avr32_frob_section, NULL); |
| 8383 | +} |
| 8384 | + |
| 8385 | +static bfd_boolean |
| 8386 | +convert_to_diff_reloc(fixS *fixP) |
| 8387 | +{ |
| 8388 | + switch (fixP->fx_r_type) |
| 8389 | + { |
| 8390 | + case BFD_RELOC_32: |
| 8391 | + fixP->fx_r_type = BFD_RELOC_AVR32_DIFF32; |
| 8392 | + break; |
| 8393 | + case BFD_RELOC_16: |
| 8394 | + fixP->fx_r_type = BFD_RELOC_AVR32_DIFF16; |
| 8395 | + break; |
| 8396 | + case BFD_RELOC_8: |
| 8397 | + fixP->fx_r_type = BFD_RELOC_AVR32_DIFF8; |
| 8398 | + break; |
| 8399 | + default: |
| 8400 | + return FALSE; |
| 8401 | + } |
| 8402 | + |
| 8403 | + return TRUE; |
| 8404 | +} |
| 8405 | + |
| 8406 | +/* Simplify a fixup. If possible, the fixup is reduced to a single |
| 8407 | + constant which is written to the output file. Otherwise, a |
| 8408 | + relocation is generated so that the linker can take care of the |
| 8409 | + rest. |
| 8410 | + |
| 8411 | + ELF relocations have certain constraints: They can only take a |
| 8412 | + single symbol and a single addend. This means that for difference |
| 8413 | + expressions, we _must_ get rid of the fx_subsy symbol somehow. |
| 8414 | + |
| 8415 | + The difference between two labels in the same section can be |
| 8416 | + calculated directly unless 'linkrelax' is set, or a relocation is |
| 8417 | + forced. If so, we must emit a R_AVR32_DIFFxx relocation. If there |
| 8418 | + are addends involved at this point, we must be especially careful |
| 8419 | + as the relocation must point exactly to the symbol being |
| 8420 | + subtracted. |
| 8421 | + |
| 8422 | + When subtracting a symbol defined in the same section as the fixup, |
| 8423 | + we might be able to convert it to a PC-relative expression, unless |
| 8424 | + linkrelax is set. If this is the case, there's no way we can make |
| 8425 | + sure that the difference between the fixup and fx_subsy stays |
| 8426 | + constant. So for now, we're just going to disallow that. |
| 8427 | + */ |
| 8428 | +void |
| 8429 | +avr32_process_fixup(fixS *fixP, segT this_segment) |
| 8430 | +{ |
| 8431 | + segT add_symbol_segment = absolute_section; |
| 8432 | + segT sub_symbol_segment = absolute_section; |
| 8433 | + symbolS *fx_addsy, *fx_subsy; |
| 8434 | + offsetT value = 0, fx_offset; |
| 8435 | + bfd_boolean apply = FALSE; |
| 8436 | + |
| 8437 | + assert(this_segment != absolute_section); |
| 8438 | + |
| 8439 | + if (fixP->fx_r_type >= BFD_RELOC_UNUSED) |
| 8440 | + { |
| 8441 | + as_bad_where(fixP->fx_file, fixP->fx_line, |
| 8442 | + _("Bad relocation type %d\n"), fixP->fx_r_type); |
| 8443 | + return; |
| 8444 | + } |
| 8445 | + |
| 8446 | + /* BFD_RELOC_AVR32_SUB5 fixups have been swapped by avr32_frob_section() */ |
| 8447 | + fx_addsy = fixP->fx_addsy; |
| 8448 | + fx_subsy = fixP->fx_subsy; |
| 8449 | + fx_offset = fixP->fx_offset; |
| 8450 | + |
| 8451 | + if (fx_addsy) |
| 8452 | + add_symbol_segment = S_GET_SEGMENT(fx_addsy); |
| 8453 | + |
| 8454 | + if (fx_subsy) |
| 8455 | + { |
| 8456 | + resolve_symbol_value(fx_subsy); |
| 8457 | + sub_symbol_segment = S_GET_SEGMENT(fx_subsy); |
| 8458 | + |
| 8459 | + if (sub_symbol_segment == this_segment |
| 8460 | + && (!linkrelax |
| 8461 | + || S_GET_VALUE(fx_subsy) == (fixP->fx_frag->fr_address |
| 8462 | + + fixP->fx_where))) |
| 8463 | + { |
| 8464 | + fixP->fx_pcrel = TRUE; |
| 8465 | + fx_offset += (fixP->fx_frag->fr_address + fixP->fx_where |
| 8466 | + - S_GET_VALUE(fx_subsy)); |
| 8467 | + fx_subsy = NULL; |
| 8468 | + } |
| 8469 | + else if (sub_symbol_segment == absolute_section) |
| 8470 | + { |
| 8471 | + /* The symbol is really a constant. */ |
| 8472 | + fx_offset -= S_GET_VALUE(fx_subsy); |
| 8473 | + fx_subsy = NULL; |
| 8474 | + } |
| 8475 | + else if (SEG_NORMAL(add_symbol_segment) |
| 8476 | + && sub_symbol_segment == add_symbol_segment |
| 8477 | + && (!linkrelax || convert_to_diff_reloc(fixP))) |
| 8478 | + { |
| 8479 | + /* Difference between two labels in the same section. */ |
| 8480 | + if (linkrelax) |
| 8481 | + { |
| 8482 | + /* convert_to_diff() has ensured that the reloc type is |
| 8483 | + either DIFF32, DIFF16 or DIFF8. */ |
| 8484 | + value = (S_GET_VALUE(fx_addsy) + fixP->fx_offset |
| 8485 | + - S_GET_VALUE(fx_subsy)); |
| 8486 | + |
| 8487 | + /* Try to convert it to a section symbol if possible */ |
| 8488 | + if (!S_FORCE_RELOC(fx_addsy, 1) |
| 8489 | + && !(sub_symbol_segment->flags & SEC_THREAD_LOCAL)) |
| 8490 | + { |
| 8491 | + fx_offset = S_GET_VALUE(fx_subsy); |
| 8492 | + fx_addsy = section_symbol(sub_symbol_segment); |
| 8493 | + } |
| 8494 | + else |
| 8495 | + { |
| 8496 | + fx_addsy = fx_subsy; |
| 8497 | + fx_offset = 0; |
| 8498 | + } |
| 8499 | + |
| 8500 | + fx_subsy = NULL; |
| 8501 | + apply = TRUE; |
| 8502 | + } |
| 8503 | + else |
| 8504 | + { |
| 8505 | + fx_offset += S_GET_VALUE(fx_addsy); |
| 8506 | + fx_offset -= S_GET_VALUE(fx_subsy); |
| 8507 | + fx_addsy = NULL; |
| 8508 | + fx_subsy = NULL; |
| 8509 | + } |
| 8510 | + } |
| 8511 | + else |
| 8512 | + { |
| 8513 | + as_bad_where(fixP->fx_file, fixP->fx_line, |
| 8514 | + _("can't resolve `%s' {%s section} - `%s' {%s section}"), |
| 8515 | + fx_addsy ? S_GET_NAME (fx_addsy) : "0", |
| 8516 | + segment_name (add_symbol_segment), |
| 8517 | + S_GET_NAME (fx_subsy), |
| 8518 | + segment_name (sub_symbol_segment)); |
| 8519 | + return; |
| 8520 | + } |
| 8521 | + } |
| 8522 | + |
| 8523 | + if (fx_addsy && !TC_FORCE_RELOCATION(fixP)) |
| 8524 | + { |
| 8525 | + if (add_symbol_segment == this_segment |
| 8526 | + && fixP->fx_pcrel) |
| 8527 | + { |
| 8528 | + value += S_GET_VALUE(fx_addsy); |
| 8529 | + value -= md_pcrel_from_section(fixP, this_segment); |
| 8530 | + fx_addsy = NULL; |
| 8531 | + fixP->fx_pcrel = FALSE; |
| 8532 | + } |
| 8533 | + else if (add_symbol_segment == absolute_section) |
| 8534 | + { |
| 8535 | + fx_offset += S_GET_VALUE(fixP->fx_addsy); |
| 8536 | + fx_addsy = NULL; |
| 8537 | + } |
| 8538 | + } |
| 8539 | + |
| 8540 | + if (!fx_addsy) |
| 8541 | + fixP->fx_done = TRUE; |
| 8542 | + |
| 8543 | + if (fixP->fx_pcrel) |
| 8544 | + { |
| 8545 | + if (fx_addsy != NULL |
| 8546 | + && S_IS_DEFINED(fx_addsy) |
| 8547 | + && S_GET_SEGMENT(fx_addsy) != this_segment) |
| 8548 | + value += md_pcrel_from_section(fixP, this_segment); |
| 8549 | + |
| 8550 | + switch (fixP->fx_r_type) |
| 8551 | + { |
| 8552 | + case BFD_RELOC_32: |
| 8553 | + fixP->fx_r_type = BFD_RELOC_32_PCREL; |
| 8554 | + break; |
| 8555 | + case BFD_RELOC_16: |
| 8556 | + fixP->fx_r_type = BFD_RELOC_16_PCREL; |
| 8557 | + break; |
| 8558 | + case BFD_RELOC_8: |
| 8559 | + fixP->fx_r_type = BFD_RELOC_8_PCREL; |
| 8560 | + break; |
| 8561 | + case BFD_RELOC_AVR32_SUB5: |
| 8562 | + fixP->fx_r_type = BFD_RELOC_AVR32_16N_PCREL; |
| 8563 | + break; |
| 8564 | + case BFD_RELOC_AVR32_16S: |
| 8565 | + fixP->fx_r_type = BFD_RELOC_AVR32_16B_PCREL; |
| 8566 | + break; |
| 8567 | + case BFD_RELOC_AVR32_14UW: |
| 8568 | + fixP->fx_r_type = BFD_RELOC_AVR32_14UW_PCREL; |
| 8569 | + break; |
| 8570 | + case BFD_RELOC_AVR32_10UW: |
| 8571 | + fixP->fx_r_type = BFD_RELOC_AVR32_10UW_PCREL; |
| 8572 | + break; |
| 8573 | + default: |
| 8574 | + /* Should have been taken care of already */ |
| 8575 | + break; |
| 8576 | + } |
| 8577 | + } |
| 8578 | + |
| 8579 | + if (fixP->fx_done || apply) |
| 8580 | + { |
| 8581 | + const struct avr32_ifield *ifield; |
| 8582 | + char *buf = fixP->fx_where + fixP->fx_frag->fr_literal; |
| 8583 | + |
| 8584 | + if (fixP->fx_done) |
| 8585 | + value += fx_offset; |
| 8586 | + |
| 8587 | + /* For hosts with longs bigger than 32-bits make sure that the top |
| 8588 | + bits of a 32-bit negative value read in by the parser are set, |
| 8589 | + so that the correct comparisons are made. */ |
| 8590 | + if (value & 0x80000000) |
| 8591 | + value |= (-1L << 31); |
| 8592 | + |
| 8593 | + switch (fixP->fx_r_type) |
| 8594 | + { |
| 8595 | + case BFD_RELOC_32: |
| 8596 | + case BFD_RELOC_16: |
| 8597 | + case BFD_RELOC_8: |
| 8598 | + case BFD_RELOC_AVR32_DIFF32: |
| 8599 | + case BFD_RELOC_AVR32_DIFF16: |
| 8600 | + case BFD_RELOC_AVR32_DIFF8: |
| 8601 | + md_number_to_chars(buf, value, fixP->fx_size); |
| 8602 | + break; |
| 8603 | + case BFD_RELOC_HI16: |
| 8604 | + value >>= 16; |
| 8605 | + case BFD_RELOC_LO16: |
| 8606 | + value &= 0xffff; |
| 8607 | + md_number_to_chars(buf + 2, value, 2); |
| 8608 | + break; |
| 8609 | + case BFD_RELOC_AVR32_16N_PCREL: |
| 8610 | + value = -value; |
| 8611 | + /* fall through */ |
| 8612 | + case BFD_RELOC_AVR32_22H_PCREL: |
| 8613 | + case BFD_RELOC_AVR32_18W_PCREL: |
| 8614 | + case BFD_RELOC_AVR32_16B_PCREL: |
| 8615 | + case BFD_RELOC_AVR32_11H_PCREL: |
| 8616 | + case BFD_RELOC_AVR32_9H_PCREL: |
| 8617 | + case BFD_RELOC_AVR32_9UW_PCREL: |
| 8618 | + case BFD_RELOC_AVR32_3U: |
| 8619 | + case BFD_RELOC_AVR32_4UH: |
| 8620 | + case BFD_RELOC_AVR32_6UW: |
| 8621 | + case BFD_RELOC_AVR32_6S: |
| 8622 | + case BFD_RELOC_AVR32_7UW: |
| 8623 | + case BFD_RELOC_AVR32_8S_EXT: |
| 8624 | + case BFD_RELOC_AVR32_8S: |
| 8625 | + case BFD_RELOC_AVR32_10UW: |
| 8626 | + case BFD_RELOC_AVR32_10SW: |
| 8627 | + case BFD_RELOC_AVR32_STHH_W: |
| 8628 | + case BFD_RELOC_AVR32_14UW: |
| 8629 | + case BFD_RELOC_AVR32_16S: |
| 8630 | + case BFD_RELOC_AVR32_16U: |
| 8631 | + case BFD_RELOC_AVR32_21S: |
| 8632 | + case BFD_RELOC_AVR32_SUB5: |
| 8633 | + case BFD_RELOC_AVR32_CPCALL: |
| 8634 | + case BFD_RELOC_AVR32_16_CP: |
| 8635 | + case BFD_RELOC_AVR32_9W_CP: |
| 8636 | + case BFD_RELOC_AVR32_15S: |
| 8637 | + ifield = fixP->tc_fix_data.ifield; |
| 8638 | + pr_debug("insert field: %ld <= %ld <= %ld (align %u)\n", |
| 8639 | + fixP->tc_fix_data.min, value, fixP->tc_fix_data.max, |
| 8640 | + fixP->tc_fix_data.align); |
| 8641 | + if (value < fixP->tc_fix_data.min || value > fixP->tc_fix_data.max) |
| 8642 | + as_bad_where(fixP->fx_file, fixP->fx_line, |
| 8643 | + _("operand out of range (%ld not between %ld and %ld)"), |
| 8644 | + value, fixP->tc_fix_data.min, fixP->tc_fix_data.max); |
| 8645 | + if (value & ((1 << fixP->tc_fix_data.align) - 1)) |
| 8646 | + as_bad_where(fixP->fx_file, fixP->fx_line, |
| 8647 | + _("misaligned operand (required alignment: %d)"), |
| 8648 | + 1 << fixP->tc_fix_data.align); |
| 8649 | + ifield->insert(ifield, buf, value >> fixP->tc_fix_data.align); |
| 8650 | + break; |
| 8651 | + case BFD_RELOC_AVR32_ALIGN: |
| 8652 | + /* Nothing to do */ |
| 8653 | + fixP->fx_done = FALSE; |
| 8654 | + break; |
| 8655 | + default: |
| 8656 | + as_fatal("reloc type %s not handled\n", |
| 8657 | + bfd_get_reloc_code_name(fixP->fx_r_type)); |
| 8658 | + } |
| 8659 | + } |
| 8660 | + |
| 8661 | + fixP->fx_addsy = fx_addsy; |
| 8662 | + fixP->fx_subsy = fx_subsy; |
| 8663 | + fixP->fx_offset = fx_offset; |
| 8664 | + |
| 8665 | + if (!fixP->fx_done) |
| 8666 | + { |
| 8667 | + if (!fixP->fx_addsy) |
| 8668 | + fixP->fx_addsy = abs_section_sym; |
| 8669 | + |
| 8670 | + symbol_mark_used_in_reloc(fixP->fx_addsy); |
| 8671 | + if (fixP->fx_subsy) |
| 8672 | + abort(); |
| 8673 | + } |
| 8674 | +} |
| 8675 | + |
| 8676 | +#if 0 |
| 8677 | +void |
| 8678 | +md_apply_fix3 (fixS *fixP, valueT *valP, segT seg) |
| 8679 | +{ |
| 8680 | + const struct avr32_ifield *ifield; |
| 8681 | + offsetT value = *valP; |
| 8682 | + char *buf = fixP->fx_where + fixP->fx_frag->fr_literal; |
| 8683 | + bfd_boolean apply; |
| 8684 | + |
| 8685 | + pr_debug("%s:%u: apply_fix3: r_type=%d value=%lx offset=%lx\n", |
| 8686 | + fixP->fx_file, fixP->fx_line, fixP->fx_r_type, *valP, |
| 8687 | + fixP->fx_offset); |
| 8688 | + |
| 8689 | + if (fixP->fx_r_type >= BFD_RELOC_UNUSED) |
| 8690 | + { |
| 8691 | + as_bad_where(fixP->fx_file, fixP->fx_line, |
| 8692 | + _("Bad relocation type %d\n"), fixP->fx_r_type); |
| 8693 | + return; |
| 8694 | + } |
| 8695 | + |
| 8696 | + if (!fixP->fx_addsy && !fixP->fx_subsy) |
| 8697 | + fixP->fx_done = 1; |
| 8698 | + |
| 8699 | + if (fixP->fx_pcrel) |
| 8700 | + { |
| 8701 | + if (fixP->fx_addsy != NULL |
| 8702 | + && S_IS_DEFINED(fixP->fx_addsy) |
| 8703 | + && S_GET_SEGMENT(fixP->fx_addsy) != seg) |
| 8704 | + value += md_pcrel_from_section(fixP, seg); |
| 8705 | + |
| 8706 | + switch (fixP->fx_r_type) |
| 8707 | + { |
| 8708 | + case BFD_RELOC_32: |
| 8709 | + fixP->fx_r_type = BFD_RELOC_32_PCREL; |
| 8710 | + break; |
| 8711 | + case BFD_RELOC_16: |
| 8712 | + case BFD_RELOC_8: |
| 8713 | + as_bad_where (fixP->fx_file, fixP->fx_line, |
| 8714 | + _("8- and 16-bit PC-relative relocations not supported")); |
| 8715 | + break; |
| 8716 | + case BFD_RELOC_AVR32_SUB5: |
| 8717 | + fixP->fx_r_type = BFD_RELOC_AVR32_PCREL_SUB5; |
| 8718 | + break; |
| 8719 | + case BFD_RELOC_AVR32_16S: |
| 8720 | + fixP->fx_r_type = BFD_RELOC_AVR32_16_PCREL; |
| 8721 | + break; |
| 8722 | + default: |
| 8723 | + /* Should have been taken care of already */ |
| 8724 | + break; |
| 8725 | + } |
| 8726 | + } |
| 8727 | + |
| 8728 | + if (fixP->fx_r_type == BFD_RELOC_32 |
| 8729 | + && fixP->fx_subsy) |
| 8730 | + { |
| 8731 | + fixP->fx_r_type = BFD_RELOC_AVR32_DIFF32; |
| 8732 | + |
| 8733 | + /* Offsets are only allowed if it's a result of adjusting a |
| 8734 | + local symbol into a section-relative offset. |
| 8735 | + tc_fix_adjustable() should prevent any adjustment if there |
| 8736 | + was an offset involved before. */ |
| 8737 | + if (fixP->fx_offset && !symbol_section_p(fixP->fx_addsy)) |
| 8738 | + as_bad_where(fixP->fx_file, fixP->fx_line, |
| 8739 | + _("cannot represent symbol difference with an offset")); |
| 8740 | + |
| 8741 | + value = (S_GET_VALUE(fixP->fx_addsy) + fixP->fx_offset |
| 8742 | + - S_GET_VALUE(fixP->fx_subsy)); |
| 8743 | + |
| 8744 | + /* The difference before any relaxing takes place is written |
| 8745 | + out, and the DIFF32 reloc identifies the address of the first |
| 8746 | + symbol (i.e. the on that's subtracted.) */ |
| 8747 | + *valP = value; |
| 8748 | + fixP->fx_offset -= value; |
| 8749 | + fixP->fx_subsy = NULL; |
| 8750 | + |
| 8751 | + md_number_to_chars(buf, value, fixP->fx_size); |
| 8752 | + } |
| 8753 | + |
| 8754 | + if (fixP->fx_done) |
| 8755 | + { |
| 8756 | + switch (fixP->fx_r_type) |
| 8757 | + { |
| 8758 | + case BFD_RELOC_8: |
| 8759 | + case BFD_RELOC_16: |
| 8760 | + case BFD_RELOC_32: |
| 8761 | + md_number_to_chars(buf, value, fixP->fx_size); |
| 8762 | + break; |
| 8763 | + case BFD_RELOC_HI16: |
| 8764 | + value >>= 16; |
| 8765 | + case BFD_RELOC_LO16: |
| 8766 | + value &= 0xffff; |
| 8767 | + *valP = value; |
| 8768 | + md_number_to_chars(buf + 2, value, 2); |
| 8769 | + break; |
| 8770 | + case BFD_RELOC_AVR32_PCREL_SUB5: |
| 8771 | + value = -value; |
| 8772 | + /* fall through */ |
| 8773 | + case BFD_RELOC_AVR32_9_PCREL: |
| 8774 | + case BFD_RELOC_AVR32_11_PCREL: |
| 8775 | + case BFD_RELOC_AVR32_16_PCREL: |
| 8776 | + case BFD_RELOC_AVR32_18_PCREL: |
| 8777 | + case BFD_RELOC_AVR32_22_PCREL: |
| 8778 | + case BFD_RELOC_AVR32_3U: |
| 8779 | + case BFD_RELOC_AVR32_4UH: |
| 8780 | + case BFD_RELOC_AVR32_6UW: |
| 8781 | + case BFD_RELOC_AVR32_6S: |
| 8782 | + case BFD_RELOC_AVR32_7UW: |
| 8783 | + case BFD_RELOC_AVR32_8S: |
| 8784 | + case BFD_RELOC_AVR32_10UW: |
| 8785 | + case BFD_RELOC_AVR32_10SW: |
| 8786 | + case BFD_RELOC_AVR32_14UW: |
| 8787 | + case BFD_RELOC_AVR32_16S: |
| 8788 | + case BFD_RELOC_AVR32_16U: |
| 8789 | + case BFD_RELOC_AVR32_21S: |
| 8790 | + case BFD_RELOC_AVR32_BRC1: |
| 8791 | + case BFD_RELOC_AVR32_SUB5: |
| 8792 | + case BFD_RELOC_AVR32_CPCALL: |
| 8793 | + case BFD_RELOC_AVR32_16_CP: |
| 8794 | + case BFD_RELOC_AVR32_9_CP: |
| 8795 | + case BFD_RELOC_AVR32_15S: |
| 8796 | + ifield = fixP->tc_fix_data.ifield; |
| 8797 | + pr_debug("insert field: %ld <= %ld <= %ld (align %u)\n", |
| 8798 | + fixP->tc_fix_data.min, value, fixP->tc_fix_data.max, |
| 8799 | + fixP->tc_fix_data.align); |
| 8800 | + if (value < fixP->tc_fix_data.min || value > fixP->tc_fix_data.max) |
| 8801 | + as_bad_where(fixP->fx_file, fixP->fx_line, |
| 8802 | + _("operand out of range (%ld not between %ld and %ld)"), |
| 8803 | + value, fixP->tc_fix_data.min, fixP->tc_fix_data.max); |
| 8804 | + if (value & ((1 << fixP->tc_fix_data.align) - 1)) |
| 8805 | + as_bad_where(fixP->fx_file, fixP->fx_line, |
| 8806 | + _("misaligned operand (required alignment: %d)"), |
| 8807 | + 1 << fixP->tc_fix_data.align); |
| 8808 | + ifield->insert(ifield, buf, value >> fixP->tc_fix_data.align); |
| 8809 | + break; |
| 8810 | + case BFD_RELOC_AVR32_ALIGN: |
| 8811 | + /* Nothing to do */ |
| 8812 | + fixP->fx_done = FALSE; |
| 8813 | + break; |
| 8814 | + default: |
| 8815 | + as_fatal("reloc type %s not handled\n", |
| 8816 | + bfd_get_reloc_code_name(fixP->fx_r_type)); |
| 8817 | + } |
| 8818 | + } |
| 8819 | +} |
| 8820 | +#endif |
| 8821 | + |
| 8822 | +arelent * |
| 8823 | +tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, |
| 8824 | + fixS *fixp) |
| 8825 | +{ |
| 8826 | + arelent *reloc; |
| 8827 | + bfd_reloc_code_real_type code; |
| 8828 | + |
| 8829 | + reloc = xmalloc (sizeof (arelent)); |
| 8830 | + |
| 8831 | + reloc->sym_ptr_ptr = xmalloc (sizeof (asymbol *)); |
| 8832 | + *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy); |
| 8833 | + reloc->address = fixp->fx_frag->fr_address + fixp->fx_where; |
| 8834 | + reloc->addend = fixp->fx_offset; |
| 8835 | + code = fixp->fx_r_type; |
| 8836 | + |
| 8837 | + reloc->howto = bfd_reloc_type_lookup (stdoutput, code); |
| 8838 | + |
| 8839 | + if (reloc->howto == NULL) |
| 8840 | + { |
| 8841 | + as_bad_where (fixp->fx_file, fixp->fx_line, |
| 8842 | + _("cannot represent relocation %s in this object file format"), |
| 8843 | + bfd_get_reloc_code_name (code)); |
| 8844 | + return NULL; |
| 8845 | + } |
| 8846 | + |
| 8847 | + return reloc; |
| 8848 | +} |
| 8849 | + |
| 8850 | +bfd_boolean |
| 8851 | +avr32_force_reloc(fixS *fixP) |
| 8852 | +{ |
| 8853 | + if (linkrelax && fixP->fx_addsy |
| 8854 | + && !(S_GET_SEGMENT(fixP->fx_addsy)->flags & SEC_DEBUGGING) |
| 8855 | + && S_GET_SEGMENT(fixP->fx_addsy) != absolute_section) |
| 8856 | + { |
| 8857 | + pr_debug(stderr, "force reloc: addsy=%p, r_type=%d, sec=%s\n", |
| 8858 | + fixP->fx_addsy, fixP->fx_r_type, S_GET_SEGMENT(fixP->fx_addsy)->name); |
| 8859 | + return 1; |
| 8860 | + } |
| 8861 | + |
| 8862 | + return generic_force_reloc(fixP); |
| 8863 | +} |
| 8864 | + |
| 8865 | +bfd_boolean |
| 8866 | +avr32_fix_adjustable(fixS *fixP) |
| 8867 | +{ |
| 8868 | + switch (fixP->fx_r_type) |
| 8869 | + { |
| 8870 | + /* GOT relocations can't have addends since BFD treats all |
| 8871 | + references to a given symbol the same. This means that we |
| 8872 | + must avoid section-relative references to local symbols when |
| 8873 | + dealing with these kinds of relocs */ |
| 8874 | + case BFD_RELOC_AVR32_GOT32: |
| 8875 | + case BFD_RELOC_AVR32_GOT16: |
| 8876 | + case BFD_RELOC_AVR32_GOT8: |
| 8877 | + case BFD_RELOC_AVR32_GOT21S: |
| 8878 | + case BFD_RELOC_AVR32_GOT18SW: |
| 8879 | + case BFD_RELOC_AVR32_GOT16S: |
| 8880 | + case BFD_RELOC_AVR32_LDA_GOT: |
| 8881 | + case BFD_RELOC_AVR32_GOTCALL: |
| 8882 | + pr_debug("fix not adjustable\n"); |
| 8883 | + return 0; |
| 8884 | + |
| 8885 | + default: |
| 8886 | + break; |
| 8887 | + } |
| 8888 | + |
| 8889 | + return 1; |
| 8890 | +} |
| 8891 | + |
| 8892 | +/* When we want the linker to be able to relax the code, we need to |
| 8893 | + output a reloc for every .align directive requesting an alignment |
| 8894 | + to a four byte boundary or larger. If we don't do this, the linker |
| 8895 | + can't guarantee that the alignment is actually maintained in the |
| 8896 | + linker output. |
| 8897 | + |
| 8898 | + TODO: Might as well insert proper NOPs while we're at it... */ |
| 8899 | +void |
| 8900 | +avr32_handle_align(fragS *frag) |
| 8901 | +{ |
| 8902 | + if (linkrelax |
| 8903 | + && frag->fr_type == rs_align_code |
| 8904 | + && frag->fr_address + frag->fr_fix > 0 |
| 8905 | + && frag->fr_offset > 0) |
| 8906 | + { |
| 8907 | + /* The alignment order (fr_offset) is stored in the addend. */ |
| 8908 | + fix_new(frag, frag->fr_fix, 2, &abs_symbol, frag->fr_offset, |
| 8909 | + FALSE, BFD_RELOC_AVR32_ALIGN); |
| 8910 | + } |
| 8911 | +} |
| 8912 | + |
| 8913 | +/* Relax_align. Advance location counter to next address that has 'alignment' |
| 8914 | + lowest order bits all 0s, return size of adjustment made. */ |
| 8915 | +relax_addressT |
| 8916 | +avr32_relax_align(segT segment ATTRIBUTE_UNUSED, |
| 8917 | + fragS *fragP, |
| 8918 | + relax_addressT address) |
| 8919 | +{ |
| 8920 | + relax_addressT mask; |
| 8921 | + relax_addressT new_address; |
| 8922 | + int alignment; |
| 8923 | + |
| 8924 | + alignment = fragP->fr_offset; |
| 8925 | + mask = ~((~0) << alignment); |
| 8926 | + new_address = (address + mask) & (~mask); |
| 8927 | + |
| 8928 | + return new_address - address; |
| 8929 | +} |
| 8930 | + |
| 8931 | +/* Turn a string in input_line_pointer into a floating point constant |
| 8932 | + of type type, and store the appropriate bytes in *litP. The number |
| 8933 | + of LITTLENUMS emitted is stored in *sizeP . An error message is |
| 8934 | + returned, or NULL on OK. */ |
| 8935 | + |
| 8936 | +/* Equal to MAX_PRECISION in atof-ieee.c */ |
| 8937 | +#define MAX_LITTLENUMS 6 |
| 8938 | + |
| 8939 | +char * |
| 8940 | +md_atof (type, litP, sizeP) |
| 8941 | +char type; |
| 8942 | +char * litP; |
| 8943 | +int * sizeP; |
| 8944 | +{ |
| 8945 | + int i; |
| 8946 | + int prec; |
| 8947 | + LITTLENUM_TYPE words [MAX_LITTLENUMS]; |
| 8948 | + char * t; |
| 8949 | + |
| 8950 | + switch (type) |
| 8951 | + { |
| 8952 | + case 'f': |
| 8953 | + case 'F': |
| 8954 | + case 's': |
| 8955 | + case 'S': |
| 8956 | + prec = 2; |
| 8957 | + break; |
| 8958 | + |
| 8959 | + case 'd': |
| 8960 | + case 'D': |
| 8961 | + case 'r': |
| 8962 | + case 'R': |
| 8963 | + prec = 4; |
| 8964 | + break; |
| 8965 | + |
| 8966 | + /* FIXME: Some targets allow other format chars for bigger sizes here. */ |
| 8967 | + |
| 8968 | + default: |
| 8969 | + * sizeP = 0; |
| 8970 | + return _("Bad call to md_atof()"); |
| 8971 | + } |
| 8972 | + |
| 8973 | + t = atof_ieee (input_line_pointer, type, words); |
| 8974 | + if (t) |
| 8975 | + input_line_pointer = t; |
| 8976 | + * sizeP = prec * sizeof (LITTLENUM_TYPE); |
| 8977 | + |
| 8978 | + for (i = 0; i < prec; i++) |
| 8979 | + { |
| 8980 | + md_number_to_chars (litP, (valueT) words[i], |
| 8981 | + sizeof (LITTLENUM_TYPE)); |
| 8982 | + litP += sizeof (LITTLENUM_TYPE); |
| 8983 | + } |
| 8984 | + |
| 8985 | + return 0; |
| 8986 | +} |
| 8987 | + |
| 8988 | +static char *avr32_end_of_match(char *cont, char *what) |
| 8989 | +{ |
| 8990 | + int len = strlen (what); |
| 8991 | + |
| 8992 | + if (! is_part_of_name (cont[len]) |
| 8993 | + && strncasecmp (cont, what, len) == 0) |
| 8994 | + return cont + len; |
| 8995 | + |
| 8996 | + return NULL; |
| 8997 | +} |
| 8998 | + |
| 8999 | +int |
| 9000 | +avr32_parse_name (char const *name, expressionS *exp, char *nextchar) |
| 9001 | +{ |
| 9002 | + char *next = input_line_pointer; |
| 9003 | + char *next_end; |
| 9004 | + |
| 9005 | + pr_debug("parse_name: %s, nextchar=%c (%02x)\n", name, *nextchar, *nextchar); |
| 9006 | + |
| 9007 | + if (*nextchar == '(') |
| 9008 | + { |
| 9009 | + if (strcasecmp(name, "hi") == 0) |
| 9010 | + { |
| 9011 | + *next = *nextchar; |
| 9012 | + |
| 9013 | + expression(exp); |
| 9014 | + |
| 9015 | + if (exp->X_op == O_constant) |
| 9016 | + { |
| 9017 | + pr_debug(" -> constant hi(0x%08lx) -> 0x%04lx\n", |
| 9018 | + exp->X_add_number, exp->X_add_number >> 16); |
| 9019 | + exp->X_add_number = (exp->X_add_number >> 16) & 0xffff; |
| 9020 | + } |
| 9021 | + else |
| 9022 | + { |
| 9023 | + exp->X_md = exp->X_op; |
| 9024 | + exp->X_op = O_hi; |
| 9025 | + } |
| 9026 | + |
| 9027 | + return 1; |
| 9028 | + } |
| 9029 | + else if (strcasecmp(name, "lo") == 0) |
| 9030 | + { |
| 9031 | + *next = *nextchar; |
| 9032 | + |
| 9033 | + expression(exp); |
| 9034 | + |
| 9035 | + if (exp->X_op == O_constant) |
| 9036 | + exp->X_add_number &= 0xffff; |
| 9037 | + else |
| 9038 | + { |
| 9039 | + exp->X_md = exp->X_op; |
| 9040 | + exp->X_op = O_lo; |
| 9041 | + } |
| 9042 | + |
| 9043 | + return 1; |
| 9044 | + } |
| 9045 | + } |
| 9046 | + else if (*nextchar == '@') |
| 9047 | + { |
| 9048 | + exp->X_md = exp->X_op; |
| 9049 | + |
| 9050 | + if ((next_end = avr32_end_of_match (next + 1, "got"))) |
| 9051 | + exp->X_op = O_got; |
| 9052 | + else if ((next_end = avr32_end_of_match (next + 1, "tlsgd"))) |
| 9053 | + exp->X_op = O_tlsgd; |
| 9054 | + /* Add more as needed */ |
| 9055 | + else |
| 9056 | + { |
| 9057 | + char c; |
| 9058 | + input_line_pointer++; |
| 9059 | + c = get_symbol_end(); |
| 9060 | + as_bad (_("unknown relocation override `%s'"), next + 1); |
| 9061 | + *input_line_pointer = c; |
| 9062 | + input_line_pointer = next; |
| 9063 | + return 0; |
| 9064 | + } |
| 9065 | + |
| 9066 | + exp->X_op_symbol = NULL; |
| 9067 | + exp->X_add_symbol = symbol_find_or_make (name); |
| 9068 | + exp->X_add_number = 0; |
| 9069 | + |
| 9070 | + *input_line_pointer = *nextchar; |
| 9071 | + input_line_pointer = next_end; |
| 9072 | + *nextchar = *input_line_pointer; |
| 9073 | + *input_line_pointer = '\0'; |
| 9074 | + return 1; |
| 9075 | + } |
| 9076 | + else if (strcmp (name, "_GLOBAL_OFFSET_TABLE_") == 0) |
| 9077 | + { |
| 9078 | + if (!GOT_symbol) |
| 9079 | + GOT_symbol = symbol_find_or_make(name); |
| 9080 | + |
| 9081 | + exp->X_add_symbol = GOT_symbol; |
| 9082 | + exp->X_op = O_symbol; |
| 9083 | + exp->X_add_number = 0; |
| 9084 | + return 1; |
| 9085 | + } |
| 9086 | + |
| 9087 | + return 0; |
| 9088 | +} |
| 9089 | + |
| 9090 | +static void |
| 9091 | +s_rseg (int value ATTRIBUTE_UNUSED) |
| 9092 | +{ |
| 9093 | + /* Syntax: RSEG segment_name [:type] [NOROOT|ROOT] [(align)] |
| 9094 | + * Defaults: |
| 9095 | + * - type: undocumented ("typically CODE or DATA") |
| 9096 | + * - ROOT |
| 9097 | + * - align: 1 for code, 0 for others |
| 9098 | + * |
| 9099 | + * TODO: NOROOT is ignored. If gas supports discardable segments, it should |
| 9100 | + * be implemented. |
| 9101 | + */ |
| 9102 | + char *name, *end; |
| 9103 | + int length, type, attr; |
| 9104 | + int align = 0; |
| 9105 | + |
| 9106 | + SKIP_WHITESPACE(); |
| 9107 | + |
| 9108 | + end = input_line_pointer; |
| 9109 | + while (0 == strchr ("\n\t;:( ", *end)) |
| 9110 | + end++; |
| 9111 | + if (end == input_line_pointer) |
| 9112 | + { |
| 9113 | + as_warn (_("missing name")); |
| 9114 | + ignore_rest_of_line(); |
| 9115 | + return; |
| 9116 | + } |
| 9117 | + |
| 9118 | + name = xmalloc (end - input_line_pointer + 1); |
| 9119 | + memcpy (name, input_line_pointer, end - input_line_pointer); |
| 9120 | + name[end - input_line_pointer] = '\0'; |
| 9121 | + input_line_pointer = end; |
| 9122 | + |
| 9123 | + SKIP_WHITESPACE(); |
| 9124 | + |
| 9125 | + type = SHT_NULL; |
| 9126 | + attr = 0; |
| 9127 | + |
| 9128 | + if (*input_line_pointer == ':') |
| 9129 | + { |
| 9130 | + /* Skip the colon */ |
| 9131 | + ++input_line_pointer; |
| 9132 | + SKIP_WHITESPACE(); |
| 9133 | + |
| 9134 | + /* Possible options at this point: |
| 9135 | + * - flag (ROOT or NOROOT) |
| 9136 | + * - a segment type |
| 9137 | + */ |
| 9138 | + end = input_line_pointer; |
| 9139 | + while (0 == strchr ("\n\t;:( ", *end)) |
| 9140 | + end++; |
| 9141 | + length = end - input_line_pointer; |
| 9142 | + if (((length == 4) && (0 == strncasecmp( input_line_pointer, "ROOT", 4))) || |
| 9143 | + ((length == 6) && (0 == strncasecmp( input_line_pointer, "NOROOT", 6)))) |
| 9144 | + { |
| 9145 | + /* Ignore ROOT/NOROOT */ |
| 9146 | + input_line_pointer = end; |
| 9147 | + } |
| 9148 | + else |
| 9149 | + { |
| 9150 | + /* Must be a segment type */ |
| 9151 | + switch (*input_line_pointer) |
| 9152 | + { |
| 9153 | + case 'C': |
| 9154 | + case 'c': |
| 9155 | + if ((length == 4) && |
| 9156 | + (0 == strncasecmp (input_line_pointer, "CODE", 4))) |
| 9157 | + { |
| 9158 | + attr |= SHF_ALLOC | SHF_EXECINSTR; |
| 9159 | + type = SHT_PROGBITS; |
| 9160 | + align = 1; |
| 9161 | + break; |
| 9162 | + } |
| 9163 | + if ((length == 5) && |
| 9164 | + (0 == strncasecmp (input_line_pointer, "CONST", 5))) |
| 9165 | + { |
| 9166 | + attr |= SHF_ALLOC; |
| 9167 | + type = SHT_PROGBITS; |
| 9168 | + break; |
| 9169 | + } |
| 9170 | + goto de_fault; |
| 9171 | + |
| 9172 | + case 'D': |
| 9173 | + case 'd': |
| 9174 | + if ((length == 4) && |
| 9175 | + (0 == strncasecmp (input_line_pointer, "DATA", 4))) |
| 9176 | + { |
| 9177 | + attr |= SHF_ALLOC | SHF_WRITE; |
| 9178 | + type = SHT_PROGBITS; |
| 9179 | + break; |
| 9180 | + } |
| 9181 | + goto de_fault; |
| 9182 | + |
| 9183 | + /* TODO: Add FAR*, HUGE*, IDATA and NEAR* if necessary */ |
| 9184 | + |
| 9185 | + case 'U': |
| 9186 | + case 'u': |
| 9187 | + if ((length == 7) && |
| 9188 | + (0 == strncasecmp (input_line_pointer, "UNTYPED", 7))) |
| 9189 | + break; |
| 9190 | + goto de_fault; |
| 9191 | + |
| 9192 | + /* TODO: Add XDATA and ZPAGE if necessary */ |
| 9193 | + |
| 9194 | + de_fault: |
| 9195 | + default: |
| 9196 | + as_warn (_("unrecognized segment type")); |
| 9197 | + } |
| 9198 | + |
| 9199 | + input_line_pointer = end; |
| 9200 | + SKIP_WHITESPACE(); |
| 9201 | + |
| 9202 | + if (*input_line_pointer == ':') |
| 9203 | + { |
| 9204 | + /* ROOT/NOROOT */ |
| 9205 | + ++input_line_pointer; |
| 9206 | + SKIP_WHITESPACE(); |
| 9207 | + |
| 9208 | + end = input_line_pointer; |
| 9209 | + while (0 == strchr ("\n\t;:( ", *end)) |
| 9210 | + end++; |
| 9211 | + length = end - input_line_pointer; |
| 9212 | + if (! ((length == 4) && |
| 9213 | + (0 == strncasecmp( input_line_pointer, "ROOT", 4))) && |
| 9214 | + ! ((length == 6) && |
| 9215 | + (0 == strncasecmp( input_line_pointer, "NOROOT", 6)))) |
| 9216 | + { |
| 9217 | + as_warn (_("unrecognized segment flag")); |
| 9218 | + } |
| 9219 | + |
| 9220 | + input_line_pointer = end; |
| 9221 | + SKIP_WHITESPACE(); |
| 9222 | + } |
| 9223 | + } |
| 9224 | + } |
| 9225 | + |
| 9226 | + if (*input_line_pointer == '(') |
| 9227 | + { |
| 9228 | + align = get_absolute_expression (); |
| 9229 | + } |
| 9230 | + |
| 9231 | + demand_empty_rest_of_line(); |
| 9232 | + |
| 9233 | + obj_elf_change_section (name, type, attr, 0, NULL, 0, 0); |
| 9234 | +#ifdef AVR32_DEBUG |
| 9235 | + fprintf( stderr, "RSEG: Changed section to %s, type: 0x%x, attr: 0x%x\n", |
| 9236 | + name, type, attr ); |
| 9237 | + fprintf( stderr, "RSEG: Aligning to 2**%d\n", align ); |
| 9238 | +#endif |
| 9239 | + |
| 9240 | + if (align > 15) |
| 9241 | + { |
| 9242 | + align = 15; |
| 9243 | + as_warn (_("alignment too large: %u assumed"), align); |
| 9244 | + } |
| 9245 | + |
| 9246 | + /* Hope not, that is */ |
| 9247 | + assert (now_seg != absolute_section); |
| 9248 | + |
| 9249 | + /* Only make a frag if we HAVE to... */ |
| 9250 | + if (align != 0 && !need_pass_2) |
| 9251 | + { |
| 9252 | + if (subseg_text_p (now_seg)) |
| 9253 | + frag_align_code (align, 0); |
| 9254 | + else |
| 9255 | + frag_align (align, 0, 0); |
| 9256 | + } |
| 9257 | + |
| 9258 | + record_alignment (now_seg, align - OCTETS_PER_BYTE_POWER); |
| 9259 | +} |
| 9260 | + |
| 9261 | +/* vim: syntax=c sw=2 |
| 9262 | + */ |
| 9263 | --- /dev/null |
| 9264 | +++ b/gas/config/tc-avr32.h |
| 9265 | @@ -0,0 +1,325 @@ |
| 9266 | +/* Assembler definitions for AVR32. |
| 9267 | + Copyright 2003,2004,2005,2006,2007,2008,2009 Atmel Corporation. |
| 9268 | + |
| 9269 | + Written by Haavard Skinnemoen, Atmel Norway, <hskinnemoen@atmel.com> |
| 9270 | + |
| 9271 | + This file is part of GAS, the GNU Assembler. |
| 9272 | + |
| 9273 | + GAS is free software; you can redistribute it and/or modify it |
| 9274 | + under the terms of the GNU General Public License as published by |
| 9275 | + the Free Software Foundation; either version 2, or (at your option) |
| 9276 | + any later version. |
| 9277 | + |
| 9278 | + GAS is distributed in the hope that it will be useful, but WITHOUT |
| 9279 | + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY |
| 9280 | + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public |
| 9281 | + License for more details. |
| 9282 | + |
| 9283 | + You should have received a copy of the GNU General Public License |
| 9284 | + along with GAS; see the file COPYING. If not, write to the Free |
| 9285 | + Software Foundation, 59 Temple Place - Suite 330, Boston, MA |
| 9286 | + 02111-1307, USA. */ |
| 9287 | + |
| 9288 | +#if 0 |
| 9289 | +#define DEBUG |
| 9290 | +#define DEBUG1 |
| 9291 | +#define DEBUG2 |
| 9292 | +#define DEBUG3 |
| 9293 | +#define DEBUG4 |
| 9294 | +#define DEBUG5 |
| 9295 | +#endif |
| 9296 | + |
| 9297 | +/* Are we trying to be compatible with the IAR assembler? (--iar) */ |
| 9298 | +extern int avr32_iarcompat; |
| 9299 | + |
| 9300 | +/* By convention, you should define this macro in the `.h' file. For |
| 9301 | + example, `tc-m68k.h' defines `TC_M68K'. You might have to use this |
| 9302 | + if it is necessary to add CPU specific code to the object format |
| 9303 | + file. */ |
| 9304 | +#define TC_AVR32 |
| 9305 | + |
| 9306 | +/* This macro is the BFD target name to use when creating the output |
| 9307 | + file. This will normally depend upon the `OBJ_FMT' macro. */ |
| 9308 | +#define TARGET_FORMAT "elf32-avr32" |
| 9309 | + |
| 9310 | +/* This macro is the BFD architecture to pass to `bfd_set_arch_mach'. */ |
| 9311 | +#define TARGET_ARCH bfd_arch_avr32 |
| 9312 | + |
| 9313 | +/* This macro is the BFD machine number to pass to |
| 9314 | + `bfd_set_arch_mach'. If it is not defined, GAS will use 0. */ |
| 9315 | +#define TARGET_MACH 0 |
| 9316 | + |
| 9317 | +/* UNDOCUMENTED: Allow //-style comments */ |
| 9318 | +#define DOUBLESLASH_LINE_COMMENTS |
| 9319 | + |
| 9320 | +/* You should define this macro to be non-zero if the target is big |
| 9321 | + endian, and zero if the target is little endian. */ |
| 9322 | +#define TARGET_BYTES_BIG_ENDIAN 1 |
| 9323 | + |
| 9324 | +/* FIXME: It seems that GAS only expects a one-byte opcode... |
| 9325 | + #define NOP_OPCODE 0xd703 */ |
| 9326 | + |
| 9327 | +/* If you define this macro, GAS will warn about the use of |
| 9328 | + nonstandard escape sequences in a string. */ |
| 9329 | +#undef ONLY_STANDARD_ESCAPES |
| 9330 | + |
| 9331 | +#define DWARF2_FORMAT(SEC) dwarf2_format_32bit |
| 9332 | + |
| 9333 | +/* Instructions are either 2 or 4 bytes long */ |
| 9334 | +/* #define DWARF2_LINE_MIN_INSN_LENGTH 2 */ |
| 9335 | + |
| 9336 | +/* GAS will call this function for any expression that can not be |
| 9337 | + recognized. When the function is called, `input_line_pointer' |
| 9338 | + will point to the start of the expression. */ |
| 9339 | +#define md_operand(x) |
| 9340 | + |
| 9341 | +#define md_parse_name(name, expr, mode, c) avr32_parse_name(name, expr, c) |
| 9342 | +extern int avr32_parse_name(const char *, struct expressionS *, char *); |
| 9343 | + |
| 9344 | +/* You may define this macro to generate a fixup for a data |
| 9345 | + allocation pseudo-op. */ |
| 9346 | +#define TC_CONS_FIX_NEW(FRAG, OFF, LEN, EXP) \ |
| 9347 | + avr32_cons_fix_new(FRAG, OFF, LEN, EXP) |
| 9348 | +void avr32_cons_fix_new (fragS *, int, int, expressionS *); |
| 9349 | + |
| 9350 | +/* `extsym - .' expressions can be emitted using PC-relative relocs */ |
| 9351 | +#define DIFF_EXPR_OK |
| 9352 | + |
| 9353 | +/* This is used to construct expressions out of @gotoff, etc. The |
| 9354 | + relocation type is stored in X_md */ |
| 9355 | +#define O_got O_md1 |
| 9356 | +#define O_hi O_md2 |
| 9357 | +#define O_lo O_md3 |
| 9358 | +#define O_tlsgd O_md4 |
| 9359 | + |
| 9360 | +/* You may define this macro to parse an expression used in a data |
| 9361 | + allocation pseudo-op such as `.word'. You can use this to |
| 9362 | + recognize relocation directives that may appear in such directives. */ |
| 9363 | +/* #define TC_PARSE_CONS_EXPRESSION(EXPR,N) avr_parse_cons_expression (EXPR,N) |
| 9364 | + void avr_parse_cons_expression (expressionS *exp, int nbytes); */ |
| 9365 | + |
| 9366 | +/* This should just call either `number_to_chars_bigendian' or |
| 9367 | + `number_to_chars_littleendian', whichever is appropriate. On |
| 9368 | + targets like the MIPS which support options to change the |
| 9369 | + endianness, which function to call is a runtime decision. On |
| 9370 | + other targets, `md_number_to_chars' can be a simple macro. */ |
| 9371 | +#define md_number_to_chars number_to_chars_bigendian |
| 9372 | + |
| 9373 | +/* `md_short_jump_size' |
| 9374 | + `md_long_jump_size' |
| 9375 | + `md_create_short_jump' |
| 9376 | + `md_create_long_jump' |
| 9377 | + If `WORKING_DOT_WORD' is defined, GAS will not do broken word |
| 9378 | + processing (*note Broken words::.). Otherwise, you should set |
| 9379 | + `md_short_jump_size' to the size of a short jump (a jump that is |
| 9380 | + just long enough to jump around a long jmp) and |
| 9381 | + `md_long_jump_size' to the size of a long jump (a jump that can go |
| 9382 | + anywhere in the function), You should define |
| 9383 | + `md_create_short_jump' to create a short jump around a long jump, |
| 9384 | + and define `md_create_long_jump' to create a long jump. */ |
| 9385 | +#define WORKING_DOT_WORD |
| 9386 | + |
| 9387 | +/* If you define this macro, it means that `tc_gen_reloc' may return |
| 9388 | + multiple relocation entries for a single fixup. In this case, the |
| 9389 | + return value of `tc_gen_reloc' is a pointer to a null terminated |
| 9390 | + array. */ |
| 9391 | +#undef RELOC_EXPANSION_POSSIBLE |
| 9392 | + |
| 9393 | +/* If you define this macro, GAS will not require pseudo-ops to start with a . |
| 9394 | + character. */ |
| 9395 | +#define NO_PSEUDO_DOT (avr32_iarcompat) |
| 9396 | + |
| 9397 | +/* The IAR assembler uses $ as the location counter. Unfortunately, we |
| 9398 | + can't make this dependent on avr32_iarcompat... */ |
| 9399 | +#define DOLLAR_DOT |
| 9400 | + |
| 9401 | +/* Values passed to md_apply_fix3 don't include the symbol value. */ |
| 9402 | +#define MD_APPLY_SYM_VALUE(FIX) 0 |
| 9403 | + |
| 9404 | +/* The number of bytes to put into a word in a listing. This affects |
| 9405 | + the way the bytes are clumped together in the listing. For |
| 9406 | + example, a value of 2 might print `1234 5678' where a value of 1 |
| 9407 | + would print `12 34 56 78'. The default value is 4. */ |
| 9408 | +#define LISTING_WORD_SIZE 4 |
| 9409 | + |
| 9410 | +/* extern const struct relax_type md_relax_table[]; |
| 9411 | +#define TC_GENERIC_RELAX_TABLE md_relax_table */ |
| 9412 | + |
| 9413 | +/* |
| 9414 | + An `.lcomm' directive with no explicit alignment parameter will use |
| 9415 | + this macro to set P2VAR to the alignment that a request for SIZE |
| 9416 | + bytes will have. The alignment is expressed as a power of two. If |
| 9417 | + no alignment should take place, the macro definition should do |
| 9418 | + nothing. Some targets define a `.bss' directive that is also |
| 9419 | + affected by this macro. The default definition will set P2VAR to |
| 9420 | + the truncated power of two of sizes up to eight bytes. |
| 9421 | + |
| 9422 | + We want doublewords to be word-aligned, so we're going to modify the |
| 9423 | + default definition a tiny bit. |
| 9424 | +*/ |
| 9425 | +#define TC_IMPLICIT_LCOMM_ALIGNMENT(SIZE, P2VAR) \ |
| 9426 | + do \ |
| 9427 | + { \ |
| 9428 | + if ((SIZE) >= 4) \ |
| 9429 | + (P2VAR) = 2; \ |
| 9430 | + else if ((SIZE) >= 2) \ |
| 9431 | + (P2VAR) = 1; \ |
| 9432 | + else \ |
| 9433 | + (P2VAR) = 0; \ |
| 9434 | + } \ |
| 9435 | + while (0) |
| 9436 | + |
| 9437 | +/* When relaxing, we need to generate relocations for alignment |
| 9438 | + directives. */ |
| 9439 | +#define HANDLE_ALIGN(frag) avr32_handle_align(frag) |
| 9440 | +extern void avr32_handle_align(fragS *); |
| 9441 | + |
| 9442 | +/* See internals doc for explanation. Oh wait... |
| 9443 | + Now, can you guess where "alignment" comes from? ;-) */ |
| 9444 | +#define MAX_MEM_FOR_RS_ALIGN_CODE ((1 << alignment) - 1) |
| 9445 | + |
| 9446 | +/* We need to stop gas from reducing certain expressions (e.g. GOT |
| 9447 | + references) */ |
| 9448 | +#define tc_fix_adjustable(fix) avr32_fix_adjustable(fix) |
| 9449 | +extern bfd_boolean avr32_fix_adjustable(struct fix *); |
| 9450 | + |
| 9451 | +/* The linker needs to be passed a little more information when relaxing. */ |
| 9452 | +#define TC_FORCE_RELOCATION(fix) avr32_force_reloc(fix) |
| 9453 | +extern bfd_boolean avr32_force_reloc(struct fix *); |
| 9454 | + |
| 9455 | +/* I'm tired of working around all the madness in fixup_segment(). |
| 9456 | + This hook will do basically the same things as the generic code, |
| 9457 | + and then it will "goto" right past it. */ |
| 9458 | +#define TC_VALIDATE_FIX(FIX, SEG, SKIP) \ |
| 9459 | + do \ |
| 9460 | + { \ |
| 9461 | + avr32_process_fixup(FIX, SEG); \ |
| 9462 | + if (!(FIX)->fx_done) \ |
| 9463 | + ++seg_reloc_count; \ |
| 9464 | + goto SKIP; \ |
| 9465 | + } \ |
| 9466 | + while (0) |
| 9467 | +extern void avr32_process_fixup(struct fix *fixP, segT this_segment); |
| 9468 | + |
| 9469 | +/* Positive values of TC_FX_SIZE_SLACK allow a target to define |
| 9470 | + fixups that far past the end of a frag. Having such fixups |
| 9471 | + is of course most most likely a bug in setting fx_size correctly. |
| 9472 | + A negative value disables the fixup check entirely, which is |
| 9473 | + appropriate for something like the Renesas / SuperH SH_COUNT |
| 9474 | + reloc. */ |
| 9475 | +/* This target is buggy, and sets fix size too large. */ |
| 9476 | +#define TC_FX_SIZE_SLACK(FIX) -1 |
| 9477 | + |
| 9478 | +/* We don't want the gas core to make any assumptions about our way of |
| 9479 | + doing linkrelaxing. */ |
| 9480 | +#define TC_LINKRELAX_FIXUP(SEG) 0 |
| 9481 | + |
| 9482 | +/* ... but we do want it to insert lots of padding. */ |
| 9483 | +#define LINKER_RELAXING_SHRINKS_ONLY |
| 9484 | + |
| 9485 | +/* Better do it ourselves, really... */ |
| 9486 | +#define TC_RELAX_ALIGN(SEG, FRAG, ADDR) avr32_relax_align(SEG, FRAG, ADDR) |
| 9487 | +extern relax_addressT |
| 9488 | +avr32_relax_align(segT segment, fragS *fragP, relax_addressT address); |
| 9489 | + |
| 9490 | +/* Use line number format that is amenable to linker relaxation. */ |
| 9491 | +#define DWARF2_USE_FIXED_ADVANCE_PC (linkrelax != 0) |
| 9492 | + |
| 9493 | +/* This is called by write_object_file() just before symbols are |
| 9494 | + attempted converted into section symbols. */ |
| 9495 | +#define tc_frob_file_before_adjust() avr32_frob_file() |
| 9496 | +extern void avr32_frob_file(void); |
| 9497 | + |
| 9498 | +/* If you define this macro, GAS will call it at the end of each input |
| 9499 | + file. */ |
| 9500 | +#define md_cleanup() avr32_cleanup() |
| 9501 | +extern void avr32_cleanup(void); |
| 9502 | + |
| 9503 | +/* There's an AVR32-specific hack in operand() which creates O_md |
| 9504 | + expressions when encountering HWRD or LWRD. We need to generate |
| 9505 | + proper relocs for them */ |
| 9506 | +/* #define md_cgen_record_fixup_exp avr32_cgen_record_fixup_exp */ |
| 9507 | + |
| 9508 | +/* I needed to add an extra hook in gas_cgen_finish_insn() for |
| 9509 | + conversion of O_md* operands because md_cgen_record_fixup_exp() |
| 9510 | + isn't called for relaxable insns */ |
| 9511 | +/* #define md_cgen_convert_expr(exp, opinfo) avr32_cgen_convert_expr(exp, opinfo) |
| 9512 | + int avr32_cgen_convert_expr(expressionS *, int); */ |
| 9513 | + |
| 9514 | +/* #define tc_gen_reloc gas_cgen_tc_gen_reloc */ |
| 9515 | + |
| 9516 | +/* If you define this macro, it should return the position from which |
| 9517 | + the PC relative adjustment for a PC relative fixup should be |
| 9518 | + made. On many processors, the base of a PC relative instruction is |
| 9519 | + the next instruction, so this macro would return the length of an |
| 9520 | + instruction, plus the address of the PC relative fixup. The latter |
| 9521 | + can be calculated as fixp->fx_where + fixp->fx_frag->fr_address. */ |
| 9522 | +extern long md_pcrel_from_section (struct fix *, segT); |
| 9523 | +#define MD_PCREL_FROM_SECTION(FIX, SEC) md_pcrel_from_section (FIX, SEC) |
| 9524 | + |
| 9525 | +#define LOCAL_LABEL(name) (name[0] == '.' && (name[1] == 'L')) |
| 9526 | +#define LOCAL_LABELS_FB 1 |
| 9527 | + |
| 9528 | +struct avr32_relaxer |
| 9529 | +{ |
| 9530 | + int (*estimate_size)(fragS *, segT); |
| 9531 | + long (*relax_frag)(segT, fragS *, long); |
| 9532 | + void (*convert_frag)(bfd *, segT, fragS *); |
| 9533 | +}; |
| 9534 | + |
| 9535 | +/* AVR32 has quite complex instruction coding, which means we need |
| 9536 | + * lots of information in order to do the right thing during relaxing |
| 9537 | + * (basically, we need to be able to reconstruct a whole new opcode if |
| 9538 | + * necessary) */ |
| 9539 | +#define TC_FRAG_TYPE struct avr32_frag_data |
| 9540 | + |
| 9541 | +struct cpool; |
| 9542 | + |
| 9543 | +struct avr32_frag_data |
| 9544 | +{ |
| 9545 | + /* TODO: Maybe add an expression object here so that we can use |
| 9546 | + fix_new_exp() in md_convert_frag? We may have to decide |
| 9547 | + pcrel-ness in md_estimate_size_before_relax() as well...or we |
| 9548 | + might do it when parsing. Doing it while parsing may fail |
| 9549 | + because the sub_symbol is undefined then... */ |
| 9550 | + int pcrel; |
| 9551 | + int force_extended; |
| 9552 | + int reloc_info; |
| 9553 | + struct avr32_relaxer *relaxer; |
| 9554 | + expressionS exp; |
| 9555 | + |
| 9556 | + /* Points to associated constant pool, for use by LDA and CALL in |
| 9557 | + non-pic mode, and when relaxing the .cpool directive */ |
| 9558 | + struct cpool *pool; |
| 9559 | + unsigned int pool_entry; |
| 9560 | +}; |
| 9561 | + |
| 9562 | +/* We will have to initialize the fields explicitly when needed */ |
| 9563 | +#define TC_FRAG_INIT(fragP) |
| 9564 | + |
| 9565 | +#define md_estimate_size_before_relax(fragP, segT) \ |
| 9566 | + ((fragP)->tc_frag_data.relaxer->estimate_size(fragP, segT)) |
| 9567 | +#define md_relax_frag(segment, fragP, stretch) \ |
| 9568 | + ((fragP)->tc_frag_data.relaxer->relax_frag(segment, fragP, stretch)) |
| 9569 | +#define md_convert_frag(abfd, segment, fragP) \ |
| 9570 | + ((fragP)->tc_frag_data.relaxer->convert_frag(abfd, segment, fragP)) |
| 9571 | + |
| 9572 | +#define TC_FIX_TYPE struct avr32_fix_data |
| 9573 | + |
| 9574 | +struct avr32_fix_data |
| 9575 | +{ |
| 9576 | + const struct avr32_ifield *ifield; |
| 9577 | + unsigned int align; |
| 9578 | + long min; |
| 9579 | + long max; |
| 9580 | +}; |
| 9581 | + |
| 9582 | +#define TC_INIT_FIX_DATA(fixP) \ |
| 9583 | + do \ |
| 9584 | + { \ |
| 9585 | + (fixP)->tc_fix_data.ifield = NULL; \ |
| 9586 | + (fixP)->tc_fix_data.align = 0; \ |
| 9587 | + (fixP)->tc_fix_data.min = 0; \ |
| 9588 | + (fixP)->tc_fix_data.max = 0; \ |
| 9589 | + } \ |
| 9590 | + while (0) |
| 9591 | --- a/gas/configure.tgt |
| 9592 | +++ b/gas/configure.tgt |
| 9593 | @@ -33,6 +33,7 @@ case ${cpu} in |
| 9594 | am33_2.0) cpu_type=mn10300 endian=little ;; |
| 9595 | arm*be|arm*b) cpu_type=arm endian=big ;; |
| 9596 | arm*) cpu_type=arm endian=little ;; |
| 9597 | + avr32*) cpu_type=avr32 endian=big ;; |
| 9598 | bfin*) cpu_type=bfin endian=little ;; |
| 9599 | c4x*) cpu_type=tic4x ;; |
| 9600 | cr16*) cpu_type=cr16 endian=little ;; |
| 9601 | @@ -136,6 +137,9 @@ case ${generic_target} in |
| 9602 | |
| 9603 | cr16-*-elf*) fmt=elf ;; |
| 9604 | |
| 9605 | + avr32-*-linux*) fmt=elf em=linux bfd_gas=yes ;; |
| 9606 | + avr32*) fmt=elf bfd_gas=yes ;; |
| 9607 | + |
| 9608 | cris-*-linux-* | crisv32-*-linux-*) |
| 9609 | fmt=multi em=linux ;; |
| 9610 | cris-*-* | crisv32-*-*) fmt=multi ;; |
| 9611 | --- a/gas/doc/all.texi |
| 9612 | +++ b/gas/doc/all.texi |
| 9613 | @@ -30,6 +30,7 @@ |
| 9614 | @set ARC |
| 9615 | @set ARM |
| 9616 | @set AVR |
| 9617 | +@set AVR32 |
| 9618 | @set Blackfin |
| 9619 | @set CR16 |
| 9620 | @set CRIS |
| 9621 | --- a/gas/doc/asconfig.texi |
| 9622 | +++ b/gas/doc/asconfig.texi |
| 9623 | @@ -30,6 +30,7 @@ |
| 9624 | @set ARC |
| 9625 | @set ARM |
| 9626 | @set AVR |
| 9627 | +@set AVR32 |
| 9628 | @set Blackfin |
| 9629 | @set CR16 |
| 9630 | @set CRIS |
| 9631 | --- a/gas/doc/as.texinfo |
| 9632 | +++ b/gas/doc/as.texinfo |
| 9633 | @@ -6731,6 +6731,9 @@ subject, see the hardware manufacturer's |
| 9634 | @ifset AVR |
| 9635 | * AVR-Dependent:: AVR Dependent Features |
| 9636 | @end ifset |
| 9637 | +@ifset AVR32 |
| 9638 | +* AVR32-Dependent:: AVR32 Dependent Features |
| 9639 | +@end ifset |
| 9640 | @ifset Blackfin |
| 9641 | * Blackfin-Dependent:: Blackfin Dependent Features |
| 9642 | @end ifset |
| 9643 | @@ -6866,6 +6869,10 @@ subject, see the hardware manufacturer's |
| 9644 | @include c-avr.texi |
| 9645 | @end ifset |
| 9646 | |
| 9647 | +@ifset AVR32 |
| 9648 | +@include c-avr32.texi |
| 9649 | +@end ifset |
| 9650 | + |
| 9651 | @ifset Blackfin |
| 9652 | @include c-bfin.texi |
| 9653 | @end ifset |
| 9654 | --- /dev/null |
| 9655 | +++ b/gas/doc/c-avr32.texi |
| 9656 | @@ -0,0 +1,244 @@ |
| 9657 | +@c Copyright 2005, 2006, 2007, 2008, 2009 |
| 9658 | +@c Atmel Corporation |
| 9659 | +@c This is part of the GAS manual. |
| 9660 | +@c For copying conditions, see the file as.texinfo. |
| 9661 | + |
| 9662 | +@ifset GENERIC |
| 9663 | +@page |
| 9664 | +@node AVR32-Dependent |
| 9665 | +@chapter AVR32 Dependent Features |
| 9666 | +@end ifset |
| 9667 | + |
| 9668 | +@ifclear GENERIC |
| 9669 | +@node Machine Dependencies |
| 9670 | +@chapter AVR32 Dependent Features |
| 9671 | +@end ifclear |
| 9672 | + |
| 9673 | +@cindex AVR32 support |
| 9674 | +@menu |
| 9675 | +* AVR32 Options:: Options |
| 9676 | +* AVR32 Syntax:: Syntax |
| 9677 | +* AVR32 Directives:: Directives |
| 9678 | +* AVR32 Opcodes:: Opcodes |
| 9679 | +@end menu |
| 9680 | + |
| 9681 | +@node AVR32 Options |
| 9682 | +@section Options |
| 9683 | +@cindex AVR32 options |
| 9684 | +@cindex options for AVR32 |
| 9685 | + |
| 9686 | +@table @code |
| 9687 | + |
| 9688 | +@cindex @code{--pic} command line option, AVR32 |
| 9689 | +@cindex PIC code generation for AVR32 |
| 9690 | +@item --pic |
| 9691 | +This option specifies that the output of the assembler should be marked |
| 9692 | +as position-independent code (PIC). It will also ensure that |
| 9693 | +pseudo-instructions that deal with address calculation are output as |
| 9694 | +PIC, and that all absolute address references in the code are marked as |
| 9695 | +such. |
| 9696 | + |
| 9697 | +@cindex @code{--linkrelax} command line option, AVR32 |
| 9698 | +@item --linkrelax |
| 9699 | +This option specifies that the output of the assembler should be marked |
| 9700 | +as linker-relaxable. It will also ensure that all PC-relative operands |
| 9701 | +that may change during linker relaxation get appropriate relocations. |
| 9702 | + |
| 9703 | +@end table |
| 9704 | + |
| 9705 | + |
| 9706 | +@node AVR32 Syntax |
| 9707 | +@section Syntax |
| 9708 | +@menu |
| 9709 | +* AVR32-Chars:: Special Characters |
| 9710 | +* AVR32-Symrefs:: Symbol references |
| 9711 | +@end menu |
| 9712 | + |
| 9713 | +@node AVR32-Chars |
| 9714 | +@subsection Special Characters |
| 9715 | + |
| 9716 | +@cindex line comment character, AVR32 |
| 9717 | +@cindex AVR32 line comment character |
| 9718 | +The presence of a @samp{//} on a line indicates the start of a comment |
| 9719 | +that extends to the end of the current line. If a @samp{#} appears as |
| 9720 | +the first character of a line, the whole line is treated as a comment. |
| 9721 | + |
| 9722 | +@cindex line separator, AVR32 |
| 9723 | +@cindex statement separator, AVR32 |
| 9724 | +@cindex AVR32 line separator |
| 9725 | +The @samp{;} character can be used instead of a newline to separate |
| 9726 | +statements. |
| 9727 | + |
| 9728 | +@node AVR32-Symrefs |
| 9729 | +@subsection Symbol references |
| 9730 | + |
| 9731 | +The absolute value of a symbol can be obtained by simply naming the |
| 9732 | +symbol. However, as AVR32 symbols have 32-bit values, most symbols have |
| 9733 | +values that are outside the range of any instructions. |
| 9734 | + |
| 9735 | +Instructions that take a PC-relative offset, e.g. @code{lddpc} or |
| 9736 | +@code{rcall}, can also reference a symbol by simply naming the symbol |
| 9737 | +(no explicit calculations necessary). In this case, the assembler or |
| 9738 | +linker subtracts the address of the instruction from the symbol's value |
| 9739 | +and inserts the result into the instruction. Note that even though an |
| 9740 | +overflow is less likely to happen for a relative reference than for an |
| 9741 | +absolute reference, the assembler or linker will generate an error if |
| 9742 | +the referenced symbol is too far away from the current location. |
| 9743 | + |
| 9744 | +Relative references can be used for data as well. For example: |
| 9745 | + |
| 9746 | +@smallexample |
| 9747 | + lddpc r0, 2f |
| 9748 | +1: add r0, pc |
| 9749 | + ... |
| 9750 | + .align 2 |
| 9751 | +2: .int @var{some_symbol} - 1b |
| 9752 | +@end smallexample |
| 9753 | + |
| 9754 | +Here, r0 will end up with the run-time address of @var{some_symbol} even |
| 9755 | +if the program was loaded at a different address than it was linked |
| 9756 | +(position-independent code). |
| 9757 | + |
| 9758 | +@subsubsection Symbol modifiers |
| 9759 | + |
| 9760 | +@table @code |
| 9761 | + |
| 9762 | +@item @code{hi(@var{symbol})} |
| 9763 | +Evaluates to the value of the symbol shifted right 16 bits. This will |
| 9764 | +work even if @var{symbol} is defined in a different module. |
| 9765 | + |
| 9766 | +@item @code{lo(@var{symbol})} |
| 9767 | +Evaluates to the low 16 bits of the symbol's value. This will work even |
| 9768 | +if @var{symbol} is defined in a different module. |
| 9769 | + |
| 9770 | +@item @code{@var{symbol}@@got} |
| 9771 | +Create a GOT entry for @var{symbol} and return the offset of that entry |
| 9772 | +relative to the GOT base. |
| 9773 | + |
| 9774 | +@end table |
| 9775 | + |
| 9776 | + |
| 9777 | +@node AVR32 Directives |
| 9778 | +@section Directives |
| 9779 | +@cindex machine directives, AVR32 |
| 9780 | +@cindex AVR32 directives |
| 9781 | + |
| 9782 | +@table @code |
| 9783 | + |
| 9784 | +@cindex @code{.cpool} directive, AVR32 |
| 9785 | +@item .cpool |
| 9786 | +This directive causes the current contents of the constant pool to be |
| 9787 | +dumped into the current section at the current location (aligned to a |
| 9788 | +word boundary). @code{GAS} maintains a separate constant pool for each |
| 9789 | +section and each sub-section. The @code{.cpool} directive will only |
| 9790 | +affect the constant pool of the current section and sub-section. At the |
| 9791 | +end of assembly, all remaining, non-empty constant pools will |
| 9792 | +automatically be dumped. |
| 9793 | + |
| 9794 | +@end table |
| 9795 | + |
| 9796 | + |
| 9797 | +@node AVR32 Opcodes |
| 9798 | +@section Opcodes |
| 9799 | +@cindex AVR32 opcodes |
| 9800 | +@cindex opcodes for AVR32 |
| 9801 | + |
| 9802 | +@code{@value{AS}} implements all the standard AVR32 opcodes. It also |
| 9803 | +implements several pseudo-opcodes, which are recommended to use wherever |
| 9804 | +possible because they give the tool chain better freedom to generate |
| 9805 | +optimal code. |
| 9806 | + |
| 9807 | +@table @code |
| 9808 | + |
| 9809 | +@cindex @code{LDA.W reg, symbol} pseudo op, AVR32 |
| 9810 | +@item LDA.W |
| 9811 | +@smallexample |
| 9812 | + lda.w @var{reg}, @var{symbol} |
| 9813 | +@end smallexample |
| 9814 | + |
| 9815 | +This instruction will load the address of @var{symbol} into |
| 9816 | +@var{reg}. The instruction will evaluate to one of the following, |
| 9817 | +depending on the relative distance to the symbol, the relative distance |
| 9818 | +to the constant pool and whether the @code{--pic} option has been |
| 9819 | +specified. If the @code{--pic} option has not been specified, the |
| 9820 | +alternatives are as follows: |
| 9821 | +@smallexample |
| 9822 | + /* @var{symbol} evaluates to a small enough value */ |
| 9823 | + mov @var{reg}, @var{symbol} |
| 9824 | + |
| 9825 | + /* (. - @var{symbol}) evaluates to a small enough value */ |
| 9826 | + sub @var{reg}, pc, . - @var{symbol} |
| 9827 | + |
| 9828 | + /* Constant pool is close enough */ |
| 9829 | + lddpc @var{reg}, @var{cpent} |
| 9830 | + ... |
| 9831 | +@var{cpent}: |
| 9832 | + .long @var{symbol} |
| 9833 | + |
| 9834 | + /* Otherwise (not implemented yet, probably not necessary) */ |
| 9835 | + mov @var{reg}, lo(@var{symbol}) |
| 9836 | + orh @var{reg}, hi(@var{symbol}) |
| 9837 | +@end smallexample |
| 9838 | + |
| 9839 | +If the @code{--pic} option has been specified, the alternatives are as |
| 9840 | +follows: |
| 9841 | +@smallexample |
| 9842 | + /* (. - @var{symbol}) evaluates to a small enough value */ |
| 9843 | + sub @var{reg}, pc, . - @var{symbol} |
| 9844 | + |
| 9845 | + /* If @code{--linkrelax} not specified */ |
| 9846 | + ld.w @var{reg}, r6[@var{symbol}@@got] |
| 9847 | + |
| 9848 | + /* Otherwise */ |
| 9849 | + mov @var{reg}, @var{symbol}@@got / 4 |
| 9850 | + ld.w @var{reg}, r6[@var{reg} << 2] |
| 9851 | +@end smallexample |
| 9852 | + |
| 9853 | +If @var{symbol} is not defined in the same file and section as the |
| 9854 | +@code{LDA.W} instruction, the most pessimistic alternative of the |
| 9855 | +above is selected. The linker may convert it back into the most |
| 9856 | +optimal alternative when the final value of all symbols is known. |
| 9857 | + |
| 9858 | +@cindex @code{CALL symbol} pseudo op, AVR32 |
| 9859 | +@item CALL |
| 9860 | +@smallexample |
| 9861 | + call @var{symbol} |
| 9862 | +@end smallexample |
| 9863 | + |
| 9864 | +This instruction will insert code to call the subroutine identified by |
| 9865 | +@var{symbol}. It will evaluate to one of the following, depending on |
| 9866 | +the relative distance to the symbol as well as the @code{--linkrelax} |
| 9867 | +and @code{--pic} command-line options. |
| 9868 | + |
| 9869 | +If @var{symbol} is defined in the same section and input file, and the |
| 9870 | +distance is small enough, an @code{rcall} instruction is inserted: |
| 9871 | +@smallexample |
| 9872 | + rcall @var{symbol} |
| 9873 | +@end smallexample |
| 9874 | + |
| 9875 | +Otherwise, if the @code{--pic} option has not been specified: |
| 9876 | +@smallexample |
| 9877 | + mcall @var{cpent} |
| 9878 | + ... |
| 9879 | +@var{cpent}: |
| 9880 | + .long @var{symbol} |
| 9881 | +@end smallexample |
| 9882 | + |
| 9883 | +Finally, if nothing else fits and the @code{--pic} option has been |
| 9884 | +specified, the assembler will indirect the call through the Global |
| 9885 | +Offset Table: |
| 9886 | +@smallexample |
| 9887 | + /* If @code{--linkrelax} not specified */ |
| 9888 | + mcall r6[@var{symbol}@@got] |
| 9889 | + |
| 9890 | + /* If @code{--linkrelax} specified */ |
| 9891 | + mov lr, @var{symbol}@@got / 4 |
| 9892 | + ld.w lr, r6[lr << 2] |
| 9893 | + icall lr |
| 9894 | +@end smallexample |
| 9895 | + |
| 9896 | +The linker, after determining the final value of @var{symbol}, may |
| 9897 | +convert any of these into more optimal alternatives. This includes |
| 9898 | +deleting any superfluous constant pool- and GOT-entries. |
| 9899 | + |
| 9900 | +@end table |
| 9901 | --- a/gas/doc/Makefile.am |
| 9902 | +++ b/gas/doc/Makefile.am |
| 9903 | @@ -33,6 +33,7 @@ CPU_DOCS = \ |
| 9904 | c-arc.texi \ |
| 9905 | c-arm.texi \ |
| 9906 | c-avr.texi \ |
| 9907 | + c-avr32.texi \ |
| 9908 | c-bfin.texi \ |
| 9909 | c-cr16.texi \ |
| 9910 | c-d10v.texi \ |
| 9911 | --- a/gas/Makefile.am |
| 9912 | +++ b/gas/Makefile.am |
| 9913 | @@ -43,6 +43,7 @@ CPU_TYPES = \ |
| 9914 | arc \ |
| 9915 | arm \ |
| 9916 | avr \ |
| 9917 | + avr32 \ |
| 9918 | bfin \ |
| 9919 | cr16 \ |
| 9920 | cris \ |
| 9921 | @@ -244,6 +245,7 @@ TARGET_CPU_CFILES = \ |
| 9922 | config/tc-arc.c \ |
| 9923 | config/tc-arm.c \ |
| 9924 | config/tc-avr.c \ |
| 9925 | + config/tc-avr32.c \ |
| 9926 | config/tc-bfin.c \ |
| 9927 | config/tc-cr16.c \ |
| 9928 | config/tc-cris.c \ |
| 9929 | @@ -307,6 +309,7 @@ TARGET_CPU_HFILES = \ |
| 9930 | config/tc-arc.h \ |
| 9931 | config/tc-arm.h \ |
| 9932 | config/tc-avr.h \ |
| 9933 | + config/tc-avr32.h \ |
| 9934 | config/tc-bfin.h \ |
| 9935 | config/tc-cr16.h \ |
| 9936 | config/tc-cris.h \ |
| 9937 | --- /dev/null |
| 9938 | +++ b/gas/testsuite/gas/avr32/aliases.d |
| 9939 | @@ -0,0 +1,19 @@ |
| 9940 | +#as: |
| 9941 | +#objdump: -dr |
| 9942 | +#name: aliases |
| 9943 | + |
| 9944 | +.*: +file format .* |
| 9945 | + |
| 9946 | +Disassembly of section \.text: |
| 9947 | + |
| 9948 | +00000000 <ld_nodisp>: |
| 9949 | + 0: 19 80 [ \t]+ld\.ub r0,r12\[0x0\] |
| 9950 | + 2: f9 20 00 00[ \t]+ld\.sb r0,r12\[0\] |
| 9951 | + 6: 98 80 [ \t]+ld\.uh r0,r12\[0x0\] |
| 9952 | + 8: 98 00 [ \t]+ld\.sh r0,r12\[0x0\] |
| 9953 | + a: 78 00 [ \t]+ld\.w r0,r12\[0x0\] |
| 9954 | + |
| 9955 | +0000000c <st_nodisp>: |
| 9956 | + c: b8 80 [ \t]+st\.b r12\[0x0\],r0 |
| 9957 | + e: b8 00 [ \t]+st\.h r12\[0x0\],r0 |
| 9958 | + 10: 99 00 [ \t]+st\.w r12\[0x0\],r0 |
| 9959 | --- /dev/null |
| 9960 | +++ b/gas/testsuite/gas/avr32/aliases.s |
| 9961 | @@ -0,0 +1,14 @@ |
| 9962 | + .text |
| 9963 | + .global ld_nodisp |
| 9964 | +ld_nodisp: |
| 9965 | + ld.ub r0, r12 |
| 9966 | + ld.sb r0, r12 |
| 9967 | + ld.uh r0, r12 |
| 9968 | + ld.sh r0, r12 |
| 9969 | + ld.w r0, r12 |
| 9970 | + |
| 9971 | + .global st_nodisp |
| 9972 | +st_nodisp: |
| 9973 | + st.b r12, r0 |
| 9974 | + st.h r12, r0 |
| 9975 | + st.w r12, r0 |
| 9976 | --- /dev/null |
| 9977 | +++ b/gas/testsuite/gas/avr32/allinsn.d |
| 9978 | @@ -0,0 +1,2987 @@ |
| 9979 | +#as: |
| 9980 | +#objdump: -dr |
| 9981 | +#name: allinsn |
| 9982 | + |
| 9983 | +.*: +file format .* |
| 9984 | + |
| 9985 | +Disassembly of section \.text: |
| 9986 | + |
| 9987 | +[0-9a-f]* <ld_d5>: |
| 9988 | + *[0-9a-f]*: fe 0f 02 3e ld\.d lr,pc\[pc<<0x3\] |
| 9989 | + *[0-9a-f]*: e0 00 02 00 ld\.d r0,r0\[r0\] |
| 9990 | + *[0-9a-f]*: ea 05 02 26 ld\.d r6,r5\[r5<<0x2\] |
| 9991 | + *[0-9a-f]*: e8 04 02 14 ld\.d r4,r4\[r4<<0x1\] |
| 9992 | + *[0-9a-f]*: fc 0e 02 1e ld\.d lr,lr\[lr<<0x1\] |
| 9993 | + *[0-9a-f]*: e6 0d 02 2a ld\.d r10,r3\[sp<<0x2\] |
| 9994 | + *[0-9a-f]*: f4 06 02 28 ld\.d r8,r10\[r6<<0x2\] |
| 9995 | + *[0-9a-f]*: ee 09 02 02 ld\.d r2,r7\[r9\] |
| 9996 | + |
| 9997 | +[0-9a-f]* <ld_w5>: |
| 9998 | + *[0-9a-f]*: fe 0f 03 0f ld\.w pc,pc\[pc\] |
| 9999 | + *[0-9a-f]*: f8 0c 03 3c ld\.w r12,r12\[r12<<0x3\] |
| 10000 | + *[0-9a-f]*: ea 05 03 25 ld\.w r5,r5\[r5<<0x2\] |
| 10001 | + *[0-9a-f]*: e8 04 03 14 ld\.w r4,r4\[r4<<0x1\] |
| 10002 | + *[0-9a-f]*: fc 0e 03 1e ld\.w lr,lr\[lr<<0x1\] |
| 10003 | + *[0-9a-f]*: f2 09 03 02 ld\.w r2,r9\[r9\] |
| 10004 | + *[0-9a-f]*: e4 06 03 0b ld\.w r11,r2\[r6\] |
| 10005 | + *[0-9a-f]*: e4 0d 03 30 ld\.w r0,r2\[sp<<0x3\] |
| 10006 | + |
| 10007 | +[0-9a-f]* <ld_sh5>: |
| 10008 | + *[0-9a-f]*: fe 0f 04 0f ld\.sh pc,pc\[pc\] |
| 10009 | + *[0-9a-f]*: f8 0c 04 3c ld\.sh r12,r12\[r12<<0x3\] |
| 10010 | + *[0-9a-f]*: ea 05 04 25 ld\.sh r5,r5\[r5<<0x2\] |
| 10011 | + *[0-9a-f]*: e8 04 04 14 ld\.sh r4,r4\[r4<<0x1\] |
| 10012 | + *[0-9a-f]*: fc 0e 04 1e ld\.sh lr,lr\[lr<<0x1\] |
| 10013 | + *[0-9a-f]*: e0 0f 04 2b ld\.sh r11,r0\[pc<<0x2\] |
| 10014 | + *[0-9a-f]*: fa 06 04 2a ld\.sh r10,sp\[r6<<0x2\] |
| 10015 | + *[0-9a-f]*: e4 02 04 0c ld\.sh r12,r2\[r2\] |
| 10016 | + |
| 10017 | +[0-9a-f]* <ld_uh5>: |
| 10018 | + *[0-9a-f]*: fe 0f 05 0f ld\.uh pc,pc\[pc\] |
| 10019 | + *[0-9a-f]*: f8 0c 05 3c ld\.uh r12,r12\[r12<<0x3\] |
| 10020 | + *[0-9a-f]*: ea 05 05 25 ld\.uh r5,r5\[r5<<0x2\] |
| 10021 | + *[0-9a-f]*: e8 04 05 14 ld\.uh r4,r4\[r4<<0x1\] |
| 10022 | + *[0-9a-f]*: fc 0e 05 1e ld\.uh lr,lr\[lr<<0x1\] |
| 10023 | + *[0-9a-f]*: fe 0e 05 38 ld\.uh r8,pc\[lr<<0x3\] |
| 10024 | + *[0-9a-f]*: e2 0f 05 16 ld\.uh r6,r1\[pc<<0x1\] |
| 10025 | + *[0-9a-f]*: fc 0d 05 16 ld\.uh r6,lr\[sp<<0x1\] |
| 10026 | + |
| 10027 | +[0-9a-f]* <ld_sb2>: |
| 10028 | + *[0-9a-f]*: fe 0f 06 0f ld\.sb pc,pc\[pc\] |
| 10029 | + *[0-9a-f]*: f8 0c 06 3c ld\.sb r12,r12\[r12<<0x3\] |
| 10030 | + *[0-9a-f]*: ea 05 06 25 ld\.sb r5,r5\[r5<<0x2\] |
| 10031 | + *[0-9a-f]*: e8 04 06 14 ld\.sb r4,r4\[r4<<0x1\] |
| 10032 | + *[0-9a-f]*: fc 0e 06 1e ld\.sb lr,lr\[lr<<0x1\] |
| 10033 | + *[0-9a-f]*: e2 0f 06 39 ld\.sb r9,r1\[pc<<0x3\] |
| 10034 | + *[0-9a-f]*: e6 0b 06 10 ld\.sb r0,r3\[r11<<0x1\] |
| 10035 | + *[0-9a-f]*: ea 05 06 1a ld\.sb r10,r5\[r5<<0x1\] |
| 10036 | + |
| 10037 | +[0-9a-f]* <ld_ub5>: |
| 10038 | + *[0-9a-f]*: fe 0f 07 0f ld\.ub pc,pc\[pc\] |
| 10039 | + *[0-9a-f]*: f8 0c 07 3c ld\.ub r12,r12\[r12<<0x3\] |
| 10040 | + *[0-9a-f]*: ea 05 07 25 ld\.ub r5,r5\[r5<<0x2\] |
| 10041 | + *[0-9a-f]*: e8 04 07 14 ld\.ub r4,r4\[r4<<0x1\] |
| 10042 | + *[0-9a-f]*: fc 0e 07 1e ld\.ub lr,lr\[lr<<0x1\] |
| 10043 | + *[0-9a-f]*: f8 07 07 36 ld\.ub r6,r12\[r7<<0x3\] |
| 10044 | + *[0-9a-f]*: ec 0c 07 02 ld\.ub r2,r6\[r12\] |
| 10045 | + *[0-9a-f]*: ee 0b 07 10 ld\.ub r0,r7\[r11<<0x1\] |
| 10046 | + |
| 10047 | +[0-9a-f]* <st_d5>: |
| 10048 | + *[0-9a-f]*: fe 0f 08 0e st\.d pc\[pc\],lr |
| 10049 | + *[0-9a-f]*: f8 0c 08 3c st\.d r12\[r12<<0x3\],r12 |
| 10050 | + *[0-9a-f]*: ea 05 08 26 st\.d r5\[r5<<0x2\],r6 |
| 10051 | + *[0-9a-f]*: e8 04 08 14 st\.d r4\[r4<<0x1\],r4 |
| 10052 | + *[0-9a-f]*: fc 0e 08 1e st\.d lr\[lr<<0x1\],lr |
| 10053 | + *[0-9a-f]*: e2 09 08 14 st\.d r1\[r9<<0x1\],r4 |
| 10054 | + *[0-9a-f]*: f4 02 08 14 st\.d r10\[r2<<0x1\],r4 |
| 10055 | + *[0-9a-f]*: f8 06 08 0e st\.d r12\[r6\],lr |
| 10056 | + |
| 10057 | +[0-9a-f]* <st_w5>: |
| 10058 | + *[0-9a-f]*: fe 0f 09 0f st\.w pc\[pc\],pc |
| 10059 | + *[0-9a-f]*: f8 0c 09 3c st\.w r12\[r12<<0x3\],r12 |
| 10060 | + *[0-9a-f]*: ea 05 09 25 st\.w r5\[r5<<0x2\],r5 |
| 10061 | + *[0-9a-f]*: e8 04 09 14 st\.w r4\[r4<<0x1\],r4 |
| 10062 | + *[0-9a-f]*: fc 0e 09 1e st\.w lr\[lr<<0x1\],lr |
| 10063 | + *[0-9a-f]*: e2 0a 09 03 st\.w r1\[r10\],r3 |
| 10064 | + *[0-9a-f]*: e0 0a 09 19 st\.w r0\[r10<<0x1\],r9 |
| 10065 | + *[0-9a-f]*: e8 05 09 3f st\.w r4\[r5<<0x3\],pc |
| 10066 | + |
| 10067 | +[0-9a-f]* <st_h5>: |
| 10068 | + *[0-9a-f]*: fe 0f 0a 0f st\.h pc\[pc\],pc |
| 10069 | + *[0-9a-f]*: f8 0c 0a 3c st\.h r12\[r12<<0x3\],r12 |
| 10070 | + *[0-9a-f]*: ea 05 0a 25 st\.h r5\[r5<<0x2\],r5 |
| 10071 | + *[0-9a-f]*: e8 04 0a 14 st\.h r4\[r4<<0x1\],r4 |
| 10072 | + *[0-9a-f]*: fc 0e 0a 1e st\.h lr\[lr<<0x1\],lr |
| 10073 | + *[0-9a-f]*: e4 09 0a 0b st\.h r2\[r9\],r11 |
| 10074 | + *[0-9a-f]*: ea 01 0a 2c st\.h r5\[r1<<0x2\],r12 |
| 10075 | + *[0-9a-f]*: fe 08 0a 23 st\.h pc\[r8<<0x2\],r3 |
| 10076 | + |
| 10077 | +[0-9a-f]* <st_b5>: |
| 10078 | + *[0-9a-f]*: fe 0f 0b 0f st\.b pc\[pc\],pc |
| 10079 | + *[0-9a-f]*: f8 0c 0b 3c st\.b r12\[r12<<0x3\],r12 |
| 10080 | + *[0-9a-f]*: ea 05 0b 25 st\.b r5\[r5<<0x2\],r5 |
| 10081 | + *[0-9a-f]*: e8 04 0b 14 st\.b r4\[r4<<0x1\],r4 |
| 10082 | + *[0-9a-f]*: fc 0e 0b 1e st\.b lr\[lr<<0x1\],lr |
| 10083 | + *[0-9a-f]*: e2 08 0b 16 st\.b r1\[r8<<0x1\],r6 |
| 10084 | + *[0-9a-f]*: fc 0e 0b 31 st\.b lr\[lr<<0x3\],r1 |
| 10085 | + *[0-9a-f]*: ea 00 0b 2f st\.b r5\[r0<<0x2\],pc |
| 10086 | + |
| 10087 | +[0-9a-f]* <divs>: |
| 10088 | + *[0-9a-f]*: fe 0f 0c 0f divs pc,pc,pc |
| 10089 | + *[0-9a-f]*: f8 0c 0c 0c divs r12,r12,r12 |
| 10090 | + *[0-9a-f]*: ea 05 0c 05 divs r5,r5,r5 |
| 10091 | + *[0-9a-f]*: e8 04 0c 04 divs r4,r4,r4 |
| 10092 | + *[0-9a-f]*: fc 0e 0c 0e divs lr,lr,lr |
| 10093 | + *[0-9a-f]*: fe 0f 0c 03 divs r3,pc,pc |
| 10094 | + *[0-9a-f]*: f8 02 0c 09 divs r9,r12,r2 |
| 10095 | + *[0-9a-f]*: e8 01 0c 07 divs r7,r4,r1 |
| 10096 | + |
| 10097 | +[0-9a-f]* <add1>: |
| 10098 | + *[0-9a-f]*: 1e 0f add pc,pc |
| 10099 | + *[0-9a-f]*: 18 0c add r12,r12 |
| 10100 | + *[0-9a-f]*: 0a 05 add r5,r5 |
| 10101 | + *[0-9a-f]*: 08 04 add r4,r4 |
| 10102 | + *[0-9a-f]*: 1c 0e add lr,lr |
| 10103 | + *[0-9a-f]*: 12 0c add r12,r9 |
| 10104 | + *[0-9a-f]*: 06 06 add r6,r3 |
| 10105 | + *[0-9a-f]*: 18 0a add r10,r12 |
| 10106 | + |
| 10107 | +[0-9a-f]* <sub1>: |
| 10108 | + *[0-9a-f]*: 1e 1f sub pc,pc |
| 10109 | + *[0-9a-f]*: 18 1c sub r12,r12 |
| 10110 | + *[0-9a-f]*: 0a 15 sub r5,r5 |
| 10111 | + *[0-9a-f]*: 08 14 sub r4,r4 |
| 10112 | + *[0-9a-f]*: 1c 1e sub lr,lr |
| 10113 | + *[0-9a-f]*: 0c 1e sub lr,r6 |
| 10114 | + *[0-9a-f]*: 1a 10 sub r0,sp |
| 10115 | + *[0-9a-f]*: 18 16 sub r6,r12 |
| 10116 | + |
| 10117 | +[0-9a-f]* <rsub1>: |
| 10118 | + *[0-9a-f]*: 1e 2f rsub pc,pc |
| 10119 | + *[0-9a-f]*: 18 2c rsub r12,r12 |
| 10120 | + *[0-9a-f]*: 0a 25 rsub r5,r5 |
| 10121 | + *[0-9a-f]*: 08 24 rsub r4,r4 |
| 10122 | + *[0-9a-f]*: 1c 2e rsub lr,lr |
| 10123 | + *[0-9a-f]*: 1a 2b rsub r11,sp |
| 10124 | + *[0-9a-f]*: 08 27 rsub r7,r4 |
| 10125 | + *[0-9a-f]*: 02 29 rsub r9,r1 |
| 10126 | + |
| 10127 | +[0-9a-f]* <cp1>: |
| 10128 | + *[0-9a-f]*: 1e 3f cp\.w pc,pc |
| 10129 | + *[0-9a-f]*: 18 3c cp\.w r12,r12 |
| 10130 | + *[0-9a-f]*: 0a 35 cp\.w r5,r5 |
| 10131 | + *[0-9a-f]*: 08 34 cp\.w r4,r4 |
| 10132 | + *[0-9a-f]*: 1c 3e cp\.w lr,lr |
| 10133 | + *[0-9a-f]*: 04 36 cp\.w r6,r2 |
| 10134 | + *[0-9a-f]*: 12 30 cp\.w r0,r9 |
| 10135 | + *[0-9a-f]*: 1a 33 cp\.w r3,sp |
| 10136 | + |
| 10137 | +[0-9a-f]* <or1>: |
| 10138 | + *[0-9a-f]*: 1e 4f or pc,pc |
| 10139 | + *[0-9a-f]*: 18 4c or r12,r12 |
| 10140 | + *[0-9a-f]*: 0a 45 or r5,r5 |
| 10141 | + *[0-9a-f]*: 08 44 or r4,r4 |
| 10142 | + *[0-9a-f]*: 1c 4e or lr,lr |
| 10143 | + *[0-9a-f]*: 12 44 or r4,r9 |
| 10144 | + *[0-9a-f]*: 08 4b or r11,r4 |
| 10145 | + *[0-9a-f]*: 00 44 or r4,r0 |
| 10146 | + |
| 10147 | +[0-9a-f]* <eor1>: |
| 10148 | + *[0-9a-f]*: 1e 5f eor pc,pc |
| 10149 | + *[0-9a-f]*: 18 5c eor r12,r12 |
| 10150 | + *[0-9a-f]*: 0a 55 eor r5,r5 |
| 10151 | + *[0-9a-f]*: 08 54 eor r4,r4 |
| 10152 | + *[0-9a-f]*: 1c 5e eor lr,lr |
| 10153 | + *[0-9a-f]*: 16 5c eor r12,r11 |
| 10154 | + *[0-9a-f]*: 02 50 eor r0,r1 |
| 10155 | + *[0-9a-f]*: 1e 55 eor r5,pc |
| 10156 | + |
| 10157 | +[0-9a-f]* <and1>: |
| 10158 | + *[0-9a-f]*: 1e 6f and pc,pc |
| 10159 | + *[0-9a-f]*: 18 6c and r12,r12 |
| 10160 | + *[0-9a-f]*: 0a 65 and r5,r5 |
| 10161 | + *[0-9a-f]*: 08 64 and r4,r4 |
| 10162 | + *[0-9a-f]*: 1c 6e and lr,lr |
| 10163 | + *[0-9a-f]*: 02 68 and r8,r1 |
| 10164 | + *[0-9a-f]*: 1a 60 and r0,sp |
| 10165 | + *[0-9a-f]*: 0a 6a and r10,r5 |
| 10166 | + |
| 10167 | +[0-9a-f]* <tst>: |
| 10168 | + *[0-9a-f]*: 1e 7f tst pc,pc |
| 10169 | + *[0-9a-f]*: 18 7c tst r12,r12 |
| 10170 | + *[0-9a-f]*: 0a 75 tst r5,r5 |
| 10171 | + *[0-9a-f]*: 08 74 tst r4,r4 |
| 10172 | + *[0-9a-f]*: 1c 7e tst lr,lr |
| 10173 | + *[0-9a-f]*: 18 70 tst r0,r12 |
| 10174 | + *[0-9a-f]*: 0c 7a tst r10,r6 |
| 10175 | + *[0-9a-f]*: 08 7d tst sp,r4 |
| 10176 | + |
| 10177 | +[0-9a-f]* <andn>: |
| 10178 | + *[0-9a-f]*: 1e 8f andn pc,pc |
| 10179 | + *[0-9a-f]*: 18 8c andn r12,r12 |
| 10180 | + *[0-9a-f]*: 0a 85 andn r5,r5 |
| 10181 | + *[0-9a-f]*: 08 84 andn r4,r4 |
| 10182 | + *[0-9a-f]*: 1c 8e andn lr,lr |
| 10183 | + *[0-9a-f]*: 18 89 andn r9,r12 |
| 10184 | + *[0-9a-f]*: 1a 8b andn r11,sp |
| 10185 | + *[0-9a-f]*: 0a 8c andn r12,r5 |
| 10186 | + |
| 10187 | +[0-9a-f]* <mov3>: |
| 10188 | + *[0-9a-f]*: 1e 9f mov pc,pc |
| 10189 | + *[0-9a-f]*: 18 9c mov r12,r12 |
| 10190 | + *[0-9a-f]*: 0a 95 mov r5,r5 |
| 10191 | + *[0-9a-f]*: 08 94 mov r4,r4 |
| 10192 | + *[0-9a-f]*: 1c 9e mov lr,lr |
| 10193 | + *[0-9a-f]*: 12 95 mov r5,r9 |
| 10194 | + *[0-9a-f]*: 16 9b mov r11,r11 |
| 10195 | + *[0-9a-f]*: 1c 92 mov r2,lr |
| 10196 | + |
| 10197 | +[0-9a-f]* <st_w1>: |
| 10198 | + *[0-9a-f]*: 1e af st\.w pc\+\+,pc |
| 10199 | + *[0-9a-f]*: 18 ac st\.w r12\+\+,r12 |
| 10200 | + *[0-9a-f]*: 0a a5 st\.w r5\+\+,r5 |
| 10201 | + *[0-9a-f]*: 08 a4 st\.w r4\+\+,r4 |
| 10202 | + *[0-9a-f]*: 1c ae st\.w lr\+\+,lr |
| 10203 | + *[0-9a-f]*: 02 ab st\.w r1\+\+,r11 |
| 10204 | + *[0-9a-f]*: 1a a0 st\.w sp\+\+,r0 |
| 10205 | + *[0-9a-f]*: 1a a1 st\.w sp\+\+,r1 |
| 10206 | + |
| 10207 | +[0-9a-f]* <st_h1>: |
| 10208 | + *[0-9a-f]*: 1e bf st\.h pc\+\+,pc |
| 10209 | + *[0-9a-f]*: 18 bc st\.h r12\+\+,r12 |
| 10210 | + *[0-9a-f]*: 0a b5 st\.h r5\+\+,r5 |
| 10211 | + *[0-9a-f]*: 08 b4 st\.h r4\+\+,r4 |
| 10212 | + *[0-9a-f]*: 1c be st\.h lr\+\+,lr |
| 10213 | + *[0-9a-f]*: 18 bd st\.h r12\+\+,sp |
| 10214 | + *[0-9a-f]*: 0e be st\.h r7\+\+,lr |
| 10215 | + *[0-9a-f]*: 0e b4 st\.h r7\+\+,r4 |
| 10216 | + |
| 10217 | +[0-9a-f]* <st_b1>: |
| 10218 | + *[0-9a-f]*: 1e cf st\.b pc\+\+,pc |
| 10219 | + *[0-9a-f]*: 18 cc st\.b r12\+\+,r12 |
| 10220 | + *[0-9a-f]*: 0a c5 st\.b r5\+\+,r5 |
| 10221 | + *[0-9a-f]*: 08 c4 st\.b r4\+\+,r4 |
| 10222 | + *[0-9a-f]*: 1c ce st\.b lr\+\+,lr |
| 10223 | + *[0-9a-f]*: 12 cd st\.b r9\+\+,sp |
| 10224 | + *[0-9a-f]*: 02 cd st\.b r1\+\+,sp |
| 10225 | + *[0-9a-f]*: 00 c4 st\.b r0\+\+,r4 |
| 10226 | + |
| 10227 | +[0-9a-f]* <st_w2>: |
| 10228 | + *[0-9a-f]*: 1e df st\.w --pc,pc |
| 10229 | + *[0-9a-f]*: 18 dc st\.w --r12,r12 |
| 10230 | + *[0-9a-f]*: 0a d5 st\.w --r5,r5 |
| 10231 | + *[0-9a-f]*: 08 d4 st\.w --r4,r4 |
| 10232 | + *[0-9a-f]*: 1c de st\.w --lr,lr |
| 10233 | + *[0-9a-f]*: 02 d7 st\.w --r1,r7 |
| 10234 | + *[0-9a-f]*: 06 d9 st\.w --r3,r9 |
| 10235 | + *[0-9a-f]*: 0a d5 st\.w --r5,r5 |
| 10236 | + |
| 10237 | +[0-9a-f]* <st_h2>: |
| 10238 | + *[0-9a-f]*: 1e ef st\.h --pc,pc |
| 10239 | + *[0-9a-f]*: 18 ec st\.h --r12,r12 |
| 10240 | + *[0-9a-f]*: 0a e5 st\.h --r5,r5 |
| 10241 | + *[0-9a-f]*: 08 e4 st\.h --r4,r4 |
| 10242 | + *[0-9a-f]*: 1c ee st\.h --lr,lr |
| 10243 | + *[0-9a-f]*: 0a e7 st\.h --r5,r7 |
| 10244 | + *[0-9a-f]*: 10 e8 st\.h --r8,r8 |
| 10245 | + *[0-9a-f]*: 0e e2 st\.h --r7,r2 |
| 10246 | + |
| 10247 | +[0-9a-f]* <st_b2>: |
| 10248 | + *[0-9a-f]*: 1e ff st\.b --pc,pc |
| 10249 | + *[0-9a-f]*: 18 fc st\.b --r12,r12 |
| 10250 | + *[0-9a-f]*: 0a f5 st\.b --r5,r5 |
| 10251 | + *[0-9a-f]*: 08 f4 st\.b --r4,r4 |
| 10252 | + *[0-9a-f]*: 1c fe st\.b --lr,lr |
| 10253 | + *[0-9a-f]*: 1a fd st\.b --sp,sp |
| 10254 | + *[0-9a-f]*: 1a fb st\.b --sp,r11 |
| 10255 | + *[0-9a-f]*: 08 f5 st\.b --r4,r5 |
| 10256 | + |
| 10257 | +[0-9a-f]* <ld_w1>: |
| 10258 | + *[0-9a-f]*: 1f 0f ld\.w pc,pc\+\+ |
| 10259 | + *[0-9a-f]*: 19 0c ld\.w r12,r12\+\+ |
| 10260 | + *[0-9a-f]*: 0b 05 ld\.w r5,r5\+\+ |
| 10261 | + *[0-9a-f]*: 09 04 ld\.w r4,r4\+\+ |
| 10262 | + *[0-9a-f]*: 1d 0e ld\.w lr,lr\+\+ |
| 10263 | + *[0-9a-f]*: 0f 03 ld\.w r3,r7\+\+ |
| 10264 | + *[0-9a-f]*: 1d 03 ld\.w r3,lr\+\+ |
| 10265 | + *[0-9a-f]*: 0b 0c ld\.w r12,r5\+\+ |
| 10266 | + |
| 10267 | +[0-9a-f]* <ld_sh1>: |
| 10268 | + *[0-9a-f]*: 1f 1f ld\.sh pc,pc\+\+ |
| 10269 | + *[0-9a-f]*: 19 1c ld\.sh r12,r12\+\+ |
| 10270 | + *[0-9a-f]*: 0b 15 ld\.sh r5,r5\+\+ |
| 10271 | + *[0-9a-f]*: 09 14 ld\.sh r4,r4\+\+ |
| 10272 | + *[0-9a-f]*: 1d 1e ld\.sh lr,lr\+\+ |
| 10273 | + *[0-9a-f]*: 05 1b ld\.sh r11,r2\+\+ |
| 10274 | + *[0-9a-f]*: 11 12 ld\.sh r2,r8\+\+ |
| 10275 | + *[0-9a-f]*: 0d 17 ld\.sh r7,r6\+\+ |
| 10276 | + |
| 10277 | +[0-9a-f]* <ld_uh1>: |
| 10278 | + *[0-9a-f]*: 1f 2f ld\.uh pc,pc\+\+ |
| 10279 | + *[0-9a-f]*: 19 2c ld\.uh r12,r12\+\+ |
| 10280 | + *[0-9a-f]*: 0b 25 ld\.uh r5,r5\+\+ |
| 10281 | + *[0-9a-f]*: 09 24 ld\.uh r4,r4\+\+ |
| 10282 | + *[0-9a-f]*: 1d 2e ld\.uh lr,lr\+\+ |
| 10283 | + *[0-9a-f]*: 0f 26 ld\.uh r6,r7\+\+ |
| 10284 | + *[0-9a-f]*: 17 2a ld\.uh r10,r11\+\+ |
| 10285 | + *[0-9a-f]*: 09 2e ld\.uh lr,r4\+\+ |
| 10286 | + |
| 10287 | +[0-9a-f]* <ld_ub1>: |
| 10288 | + *[0-9a-f]*: 1f 3f ld\.ub pc,pc\+\+ |
| 10289 | + *[0-9a-f]*: 19 3c ld\.ub r12,r12\+\+ |
| 10290 | + *[0-9a-f]*: 0b 35 ld\.ub r5,r5\+\+ |
| 10291 | + *[0-9a-f]*: 09 34 ld\.ub r4,r4\+\+ |
| 10292 | + *[0-9a-f]*: 1d 3e ld\.ub lr,lr\+\+ |
| 10293 | + *[0-9a-f]*: 1d 38 ld\.ub r8,lr\+\+ |
| 10294 | + *[0-9a-f]*: 19 3c ld\.ub r12,r12\+\+ |
| 10295 | + *[0-9a-f]*: 15 3b ld\.ub r11,r10\+\+ |
| 10296 | + |
| 10297 | +[0-9a-f]* <ld_w2>: |
| 10298 | + *[0-9a-f]*: 1f 4f ld\.w pc,--pc |
| 10299 | + *[0-9a-f]*: 19 4c ld\.w r12,--r12 |
| 10300 | + *[0-9a-f]*: 0b 45 ld\.w r5,--r5 |
| 10301 | + *[0-9a-f]*: 09 44 ld\.w r4,--r4 |
| 10302 | + *[0-9a-f]*: 1d 4e ld\.w lr,--lr |
| 10303 | + *[0-9a-f]*: 1d 4a ld\.w r10,--lr |
| 10304 | + *[0-9a-f]*: 13 4c ld\.w r12,--r9 |
| 10305 | + *[0-9a-f]*: 0b 46 ld\.w r6,--r5 |
| 10306 | + |
| 10307 | +[0-9a-f]* <ld_sh2>: |
| 10308 | + *[0-9a-f]*: 1f 5f ld\.sh pc,--pc |
| 10309 | + *[0-9a-f]*: 19 5c ld\.sh r12,--r12 |
| 10310 | + *[0-9a-f]*: 0b 55 ld\.sh r5,--r5 |
| 10311 | + *[0-9a-f]*: 09 54 ld\.sh r4,--r4 |
| 10312 | + *[0-9a-f]*: 1d 5e ld\.sh lr,--lr |
| 10313 | + *[0-9a-f]*: 15 5f ld\.sh pc,--r10 |
| 10314 | + *[0-9a-f]*: 07 56 ld\.sh r6,--r3 |
| 10315 | + *[0-9a-f]*: 0d 54 ld\.sh r4,--r6 |
| 10316 | + |
| 10317 | +[0-9a-f]* <ld_uh2>: |
| 10318 | + *[0-9a-f]*: 1f 6f ld\.uh pc,--pc |
| 10319 | + *[0-9a-f]*: 19 6c ld\.uh r12,--r12 |
| 10320 | + *[0-9a-f]*: 0b 65 ld\.uh r5,--r5 |
| 10321 | + *[0-9a-f]*: 09 64 ld\.uh r4,--r4 |
| 10322 | + *[0-9a-f]*: 1d 6e ld\.uh lr,--lr |
| 10323 | + *[0-9a-f]*: 05 63 ld\.uh r3,--r2 |
| 10324 | + *[0-9a-f]*: 01 61 ld\.uh r1,--r0 |
| 10325 | + *[0-9a-f]*: 13 62 ld\.uh r2,--r9 |
| 10326 | + |
| 10327 | +[0-9a-f]* <ld_ub2>: |
| 10328 | + *[0-9a-f]*: 1f 7f ld\.ub pc,--pc |
| 10329 | + *[0-9a-f]*: 19 7c ld\.ub r12,--r12 |
| 10330 | + *[0-9a-f]*: 0b 75 ld\.ub r5,--r5 |
| 10331 | + *[0-9a-f]*: 09 74 ld\.ub r4,--r4 |
| 10332 | + *[0-9a-f]*: 1d 7e ld\.ub lr,--lr |
| 10333 | + *[0-9a-f]*: 03 71 ld\.ub r1,--r1 |
| 10334 | + *[0-9a-f]*: 0d 70 ld\.ub r0,--r6 |
| 10335 | + *[0-9a-f]*: 0f 72 ld\.ub r2,--r7 |
| 10336 | + |
| 10337 | +[0-9a-f]* <ld_ub3>: |
| 10338 | + *[0-9a-f]*: 1f 8f ld\.ub pc,pc\[0x0\] |
| 10339 | + *[0-9a-f]*: 19 fc ld\.ub r12,r12\[0x7\] |
| 10340 | + *[0-9a-f]*: 0b c5 ld\.ub r5,r5\[0x4\] |
| 10341 | + *[0-9a-f]*: 09 b4 ld\.ub r4,r4\[0x3\] |
| 10342 | + *[0-9a-f]*: 1d 9e ld\.ub lr,lr\[0x1\] |
| 10343 | + *[0-9a-f]*: 13 e6 ld\.ub r6,r9\[0x6\] |
| 10344 | + *[0-9a-f]*: 1d c2 ld\.ub r2,lr\[0x4\] |
| 10345 | + *[0-9a-f]*: 11 81 ld\.ub r1,r8\[0x0\] |
| 10346 | + |
| 10347 | +[0-9a-f]* <sub3_sp>: |
| 10348 | + *[0-9a-f]*: 20 0d sub sp,0 |
| 10349 | + *[0-9a-f]*: 2f fd sub sp,-4 |
| 10350 | + *[0-9a-f]*: 28 0d sub sp,-512 |
| 10351 | + *[0-9a-f]*: 27 fd sub sp,508 |
| 10352 | + *[0-9a-f]*: 20 1d sub sp,4 |
| 10353 | + *[0-9a-f]*: 20 bd sub sp,44 |
| 10354 | + *[0-9a-f]*: 20 2d sub sp,8 |
| 10355 | + *[0-9a-f]*: 25 7d sub sp,348 |
| 10356 | + |
| 10357 | +[0-9a-f]* <sub3>: |
| 10358 | + *[0-9a-f]*: 20 0f sub pc,0 |
| 10359 | + *[0-9a-f]*: 2f fc sub r12,-1 |
| 10360 | + *[0-9a-f]*: 28 05 sub r5,-128 |
| 10361 | + *[0-9a-f]*: 27 f4 sub r4,127 |
| 10362 | + *[0-9a-f]*: 20 1e sub lr,1 |
| 10363 | + *[0-9a-f]*: 2d 76 sub r6,-41 |
| 10364 | + *[0-9a-f]*: 22 54 sub r4,37 |
| 10365 | + *[0-9a-f]*: 23 8c sub r12,56 |
| 10366 | + |
| 10367 | +[0-9a-f]* <mov1>: |
| 10368 | + *[0-9a-f]*: 30 0f mov pc,0 |
| 10369 | + *[0-9a-f]*: 3f fc mov r12,-1 |
| 10370 | + *[0-9a-f]*: 38 05 mov r5,-128 |
| 10371 | + *[0-9a-f]*: 37 f4 mov r4,127 |
| 10372 | + *[0-9a-f]*: 30 1e mov lr,1 |
| 10373 | + *[0-9a-f]*: 30 ef mov pc,14 |
| 10374 | + *[0-9a-f]*: 39 c6 mov r6,-100 |
| 10375 | + *[0-9a-f]*: 38 6e mov lr,-122 |
| 10376 | + |
| 10377 | +[0-9a-f]* <lddsp>: |
| 10378 | + *[0-9a-f]*: 40 0f lddsp pc,sp\[0x0\] |
| 10379 | + *[0-9a-f]*: 47 fc lddsp r12,sp\[0x1fc\] |
| 10380 | + *[0-9a-f]*: 44 05 lddsp r5,sp\[0x100\] |
| 10381 | + *[0-9a-f]*: 43 f4 lddsp r4,sp\[0xfc\] |
| 10382 | + *[0-9a-f]*: 40 1e lddsp lr,sp\[0x4\] |
| 10383 | + *[0-9a-f]*: 44 0e lddsp lr,sp\[0x100\] |
| 10384 | + *[0-9a-f]*: 40 5c lddsp r12,sp\[0x14\] |
| 10385 | + *[0-9a-f]*: 47 69 lddsp r9,sp\[0x1d8\] |
| 10386 | + |
| 10387 | +[0-9a-f]* <lddpc>: |
| 10388 | + *[0-9a-f]*: 48 0f lddpc pc,[0-9a-f]* <.*> |
| 10389 | + *[0-9a-f]*: 4f f0 lddpc r0,[0-9a-f]* <.*> |
| 10390 | + *[0-9a-f]*: 4c 08 lddpc r8,[0-9a-f]* <.*> |
| 10391 | + *[0-9a-f]*: 4b f7 lddpc r7,[0-9a-f]* <.*> |
| 10392 | + *[0-9a-f]*: 48 1e lddpc lr,[0-9a-f]* <.*> |
| 10393 | + *[0-9a-f]*: 4f 6d lddpc sp,[0-9a-f]* <.*> |
| 10394 | + *[0-9a-f]*: 49 e6 lddpc r6,[0-9a-f]* <.*> |
| 10395 | + *[0-9a-f]*: 48 7b lddpc r11,[0-9a-f]* <.*> |
| 10396 | + |
| 10397 | +[0-9a-f]* <stdsp>: |
| 10398 | + *[0-9a-f]*: 50 0f stdsp sp\[0x0\],pc |
| 10399 | + *[0-9a-f]*: 57 fc stdsp sp\[0x1fc\],r12 |
| 10400 | + *[0-9a-f]*: 54 05 stdsp sp\[0x100\],r5 |
| 10401 | + *[0-9a-f]*: 53 f4 stdsp sp\[0xfc\],r4 |
| 10402 | + *[0-9a-f]*: 50 1e stdsp sp\[0x4\],lr |
| 10403 | + *[0-9a-f]*: 54 cf stdsp sp\[0x130\],pc |
| 10404 | + *[0-9a-f]*: 54 00 stdsp sp\[0x100\],r0 |
| 10405 | + *[0-9a-f]*: 55 45 stdsp sp\[0x150\],r5 |
| 10406 | + |
| 10407 | +[0-9a-f]* <cp2>: |
| 10408 | + *[0-9a-f]*: 58 0f cp.w pc,0 |
| 10409 | + *[0-9a-f]*: 5b fc cp.w r12,-1 |
| 10410 | + *[0-9a-f]*: 5a 05 cp.w r5,-32 |
| 10411 | + *[0-9a-f]*: 59 f4 cp.w r4,31 |
| 10412 | + *[0-9a-f]*: 58 1e cp.w lr,1 |
| 10413 | + *[0-9a-f]*: 58 38 cp.w r8,3 |
| 10414 | + *[0-9a-f]*: 59 0e cp.w lr,16 |
| 10415 | + *[0-9a-f]*: 5a 67 cp.w r7,-26 |
| 10416 | + |
| 10417 | +[0-9a-f]* <acr>: |
| 10418 | + *[0-9a-f]*: 5c 0f acr pc |
| 10419 | + *[0-9a-f]*: 5c 0c acr r12 |
| 10420 | + *[0-9a-f]*: 5c 05 acr r5 |
| 10421 | + *[0-9a-f]*: 5c 04 acr r4 |
| 10422 | + *[0-9a-f]*: 5c 0e acr lr |
| 10423 | + *[0-9a-f]*: 5c 02 acr r2 |
| 10424 | + *[0-9a-f]*: 5c 0c acr r12 |
| 10425 | + *[0-9a-f]*: 5c 0f acr pc |
| 10426 | + |
| 10427 | +[0-9a-f]* <scr>: |
| 10428 | + *[0-9a-f]*: 5c 1f scr pc |
| 10429 | + *[0-9a-f]*: 5c 1c scr r12 |
| 10430 | + *[0-9a-f]*: 5c 15 scr r5 |
| 10431 | + *[0-9a-f]*: 5c 14 scr r4 |
| 10432 | + *[0-9a-f]*: 5c 1e scr lr |
| 10433 | + *[0-9a-f]*: 5c 1f scr pc |
| 10434 | + *[0-9a-f]*: 5c 16 scr r6 |
| 10435 | + *[0-9a-f]*: 5c 11 scr r1 |
| 10436 | + |
| 10437 | +[0-9a-f]* <cpc0>: |
| 10438 | + *[0-9a-f]*: 5c 2f cpc pc |
| 10439 | + *[0-9a-f]*: 5c 2c cpc r12 |
| 10440 | + *[0-9a-f]*: 5c 25 cpc r5 |
| 10441 | + *[0-9a-f]*: 5c 24 cpc r4 |
| 10442 | + *[0-9a-f]*: 5c 2e cpc lr |
| 10443 | + *[0-9a-f]*: 5c 2f cpc pc |
| 10444 | + *[0-9a-f]*: 5c 24 cpc r4 |
| 10445 | + *[0-9a-f]*: 5c 29 cpc r9 |
| 10446 | + |
| 10447 | +[0-9a-f]* <neg>: |
| 10448 | + *[0-9a-f]*: 5c 3f neg pc |
| 10449 | + *[0-9a-f]*: 5c 3c neg r12 |
| 10450 | + *[0-9a-f]*: 5c 35 neg r5 |
| 10451 | + *[0-9a-f]*: 5c 34 neg r4 |
| 10452 | + *[0-9a-f]*: 5c 3e neg lr |
| 10453 | + *[0-9a-f]*: 5c 37 neg r7 |
| 10454 | + *[0-9a-f]*: 5c 31 neg r1 |
| 10455 | + *[0-9a-f]*: 5c 39 neg r9 |
| 10456 | + |
| 10457 | +[0-9a-f]* <abs>: |
| 10458 | + *[0-9a-f]*: 5c 4f abs pc |
| 10459 | + *[0-9a-f]*: 5c 4c abs r12 |
| 10460 | + *[0-9a-f]*: 5c 45 abs r5 |
| 10461 | + *[0-9a-f]*: 5c 44 abs r4 |
| 10462 | + *[0-9a-f]*: 5c 4e abs lr |
| 10463 | + *[0-9a-f]*: 5c 46 abs r6 |
| 10464 | + *[0-9a-f]*: 5c 46 abs r6 |
| 10465 | + *[0-9a-f]*: 5c 44 abs r4 |
| 10466 | + |
| 10467 | +[0-9a-f]* <castu_b>: |
| 10468 | + *[0-9a-f]*: 5c 5f castu\.b pc |
| 10469 | + *[0-9a-f]*: 5c 5c castu\.b r12 |
| 10470 | + *[0-9a-f]*: 5c 55 castu\.b r5 |
| 10471 | + *[0-9a-f]*: 5c 54 castu\.b r4 |
| 10472 | + *[0-9a-f]*: 5c 5e castu\.b lr |
| 10473 | + *[0-9a-f]*: 5c 57 castu\.b r7 |
| 10474 | + *[0-9a-f]*: 5c 5d castu\.b sp |
| 10475 | + *[0-9a-f]*: 5c 59 castu\.b r9 |
| 10476 | + |
| 10477 | +[0-9a-f]* <casts_b>: |
| 10478 | + *[0-9a-f]*: 5c 6f casts\.b pc |
| 10479 | + *[0-9a-f]*: 5c 6c casts\.b r12 |
| 10480 | + *[0-9a-f]*: 5c 65 casts\.b r5 |
| 10481 | + *[0-9a-f]*: 5c 64 casts\.b r4 |
| 10482 | + *[0-9a-f]*: 5c 6e casts\.b lr |
| 10483 | + *[0-9a-f]*: 5c 6b casts\.b r11 |
| 10484 | + *[0-9a-f]*: 5c 61 casts\.b r1 |
| 10485 | + *[0-9a-f]*: 5c 6a casts\.b r10 |
| 10486 | + |
| 10487 | +[0-9a-f]* <castu_h>: |
| 10488 | + *[0-9a-f]*: 5c 7f castu\.h pc |
| 10489 | + *[0-9a-f]*: 5c 7c castu\.h r12 |
| 10490 | + *[0-9a-f]*: 5c 75 castu\.h r5 |
| 10491 | + *[0-9a-f]*: 5c 74 castu\.h r4 |
| 10492 | + *[0-9a-f]*: 5c 7e castu\.h lr |
| 10493 | + *[0-9a-f]*: 5c 7a castu\.h r10 |
| 10494 | + *[0-9a-f]*: 5c 7b castu\.h r11 |
| 10495 | + *[0-9a-f]*: 5c 71 castu\.h r1 |
| 10496 | + |
| 10497 | +[0-9a-f]* <casts_h>: |
| 10498 | + *[0-9a-f]*: 5c 8f casts\.h pc |
| 10499 | + *[0-9a-f]*: 5c 8c casts\.h r12 |
| 10500 | + *[0-9a-f]*: 5c 85 casts\.h r5 |
| 10501 | + *[0-9a-f]*: 5c 84 casts\.h r4 |
| 10502 | + *[0-9a-f]*: 5c 8e casts\.h lr |
| 10503 | + *[0-9a-f]*: 5c 80 casts\.h r0 |
| 10504 | + *[0-9a-f]*: 5c 85 casts\.h r5 |
| 10505 | + *[0-9a-f]*: 5c 89 casts\.h r9 |
| 10506 | + |
| 10507 | +[0-9a-f]* <brev>: |
| 10508 | + *[0-9a-f]*: 5c 9f brev pc |
| 10509 | + *[0-9a-f]*: 5c 9c brev r12 |
| 10510 | + *[0-9a-f]*: 5c 95 brev r5 |
| 10511 | + *[0-9a-f]*: 5c 94 brev r4 |
| 10512 | + *[0-9a-f]*: 5c 9e brev lr |
| 10513 | + *[0-9a-f]*: 5c 95 brev r5 |
| 10514 | + *[0-9a-f]*: 5c 9a brev r10 |
| 10515 | + *[0-9a-f]*: 5c 98 brev r8 |
| 10516 | + |
| 10517 | +[0-9a-f]* <swap_h>: |
| 10518 | + *[0-9a-f]*: 5c af swap\.h pc |
| 10519 | + *[0-9a-f]*: 5c ac swap\.h r12 |
| 10520 | + *[0-9a-f]*: 5c a5 swap\.h r5 |
| 10521 | + *[0-9a-f]*: 5c a4 swap\.h r4 |
| 10522 | + *[0-9a-f]*: 5c ae swap\.h lr |
| 10523 | + *[0-9a-f]*: 5c a7 swap\.h r7 |
| 10524 | + *[0-9a-f]*: 5c a0 swap\.h r0 |
| 10525 | + *[0-9a-f]*: 5c a8 swap\.h r8 |
| 10526 | + |
| 10527 | +[0-9a-f]* <swap_b>: |
| 10528 | + *[0-9a-f]*: 5c bf swap\.b pc |
| 10529 | + *[0-9a-f]*: 5c bc swap\.b r12 |
| 10530 | + *[0-9a-f]*: 5c b5 swap\.b r5 |
| 10531 | + *[0-9a-f]*: 5c b4 swap\.b r4 |
| 10532 | + *[0-9a-f]*: 5c be swap\.b lr |
| 10533 | + *[0-9a-f]*: 5c ba swap\.b r10 |
| 10534 | + *[0-9a-f]*: 5c bc swap\.b r12 |
| 10535 | + *[0-9a-f]*: 5c b1 swap\.b r1 |
| 10536 | + |
| 10537 | +[0-9a-f]* <swap_bh>: |
| 10538 | + *[0-9a-f]*: 5c cf swap\.bh pc |
| 10539 | + *[0-9a-f]*: 5c cc swap\.bh r12 |
| 10540 | + *[0-9a-f]*: 5c c5 swap\.bh r5 |
| 10541 | + *[0-9a-f]*: 5c c4 swap\.bh r4 |
| 10542 | + *[0-9a-f]*: 5c ce swap\.bh lr |
| 10543 | + *[0-9a-f]*: 5c c9 swap\.bh r9 |
| 10544 | + *[0-9a-f]*: 5c c4 swap\.bh r4 |
| 10545 | + *[0-9a-f]*: 5c c1 swap\.bh r1 |
| 10546 | + |
| 10547 | +[0-9a-f]* <One_s_compliment>: |
| 10548 | + *[0-9a-f]*: 5c df com pc |
| 10549 | + *[0-9a-f]*: 5c dc com r12 |
| 10550 | + *[0-9a-f]*: 5c d5 com r5 |
| 10551 | + *[0-9a-f]*: 5c d4 com r4 |
| 10552 | + *[0-9a-f]*: 5c de com lr |
| 10553 | + *[0-9a-f]*: 5c d2 com r2 |
| 10554 | + *[0-9a-f]*: 5c d2 com r2 |
| 10555 | + *[0-9a-f]*: 5c d7 com r7 |
| 10556 | + |
| 10557 | +[0-9a-f]* <tnbz>: |
| 10558 | + *[0-9a-f]*: 5c ef tnbz pc |
| 10559 | + *[0-9a-f]*: 5c ec tnbz r12 |
| 10560 | + *[0-9a-f]*: 5c e5 tnbz r5 |
| 10561 | + *[0-9a-f]*: 5c e4 tnbz r4 |
| 10562 | + *[0-9a-f]*: 5c ee tnbz lr |
| 10563 | + *[0-9a-f]*: 5c e8 tnbz r8 |
| 10564 | + *[0-9a-f]*: 5c ec tnbz r12 |
| 10565 | + *[0-9a-f]*: 5c ef tnbz pc |
| 10566 | + |
| 10567 | +[0-9a-f]* <rol>: |
| 10568 | + *[0-9a-f]*: 5c ff rol pc |
| 10569 | + *[0-9a-f]*: 5c fc rol r12 |
| 10570 | + *[0-9a-f]*: 5c f5 rol r5 |
| 10571 | + *[0-9a-f]*: 5c f4 rol r4 |
| 10572 | + *[0-9a-f]*: 5c fe rol lr |
| 10573 | + *[0-9a-f]*: 5c fa rol r10 |
| 10574 | + *[0-9a-f]*: 5c f9 rol r9 |
| 10575 | + *[0-9a-f]*: 5c f5 rol r5 |
| 10576 | + |
| 10577 | +[0-9a-f]* <ror>: |
| 10578 | + *[0-9a-f]*: 5d 0f ror pc |
| 10579 | + *[0-9a-f]*: 5d 0c ror r12 |
| 10580 | + *[0-9a-f]*: 5d 05 ror r5 |
| 10581 | + *[0-9a-f]*: 5d 04 ror r4 |
| 10582 | + *[0-9a-f]*: 5d 0e ror lr |
| 10583 | + *[0-9a-f]*: 5d 08 ror r8 |
| 10584 | + *[0-9a-f]*: 5d 04 ror r4 |
| 10585 | + *[0-9a-f]*: 5d 07 ror r7 |
| 10586 | + |
| 10587 | +[0-9a-f]* <icall>: |
| 10588 | + *[0-9a-f]*: 5d 1f icall pc |
| 10589 | + *[0-9a-f]*: 5d 1c icall r12 |
| 10590 | + *[0-9a-f]*: 5d 15 icall r5 |
| 10591 | + *[0-9a-f]*: 5d 14 icall r4 |
| 10592 | + *[0-9a-f]*: 5d 1e icall lr |
| 10593 | + *[0-9a-f]*: 5d 13 icall r3 |
| 10594 | + *[0-9a-f]*: 5d 11 icall r1 |
| 10595 | + *[0-9a-f]*: 5d 13 icall r3 |
| 10596 | + |
| 10597 | +[0-9a-f]* <mustr>: |
| 10598 | + *[0-9a-f]*: 5d 2f mustr pc |
| 10599 | + *[0-9a-f]*: 5d 2c mustr r12 |
| 10600 | + *[0-9a-f]*: 5d 25 mustr r5 |
| 10601 | + *[0-9a-f]*: 5d 24 mustr r4 |
| 10602 | + *[0-9a-f]*: 5d 2e mustr lr |
| 10603 | + *[0-9a-f]*: 5d 21 mustr r1 |
| 10604 | + *[0-9a-f]*: 5d 24 mustr r4 |
| 10605 | + *[0-9a-f]*: 5d 2c mustr r12 |
| 10606 | + |
| 10607 | +[0-9a-f]* <musfr>: |
| 10608 | + *[0-9a-f]*: 5d 3f musfr pc |
| 10609 | + *[0-9a-f]*: 5d 3c musfr r12 |
| 10610 | + *[0-9a-f]*: 5d 35 musfr r5 |
| 10611 | + *[0-9a-f]*: 5d 34 musfr r4 |
| 10612 | + *[0-9a-f]*: 5d 3e musfr lr |
| 10613 | + *[0-9a-f]*: 5d 3b musfr r11 |
| 10614 | + *[0-9a-f]*: 5d 3c musfr r12 |
| 10615 | + *[0-9a-f]*: 5d 32 musfr r2 |
| 10616 | + |
| 10617 | +[0-9a-f]* <ret_cond>: |
| 10618 | + *[0-9a-f]*: 5e 0f reteq 1 |
| 10619 | + *[0-9a-f]*: 5e fc retal r12 |
| 10620 | + *[0-9a-f]*: 5e 85 retls r5 |
| 10621 | + *[0-9a-f]*: 5e 74 retpl r4 |
| 10622 | + *[0-9a-f]*: 5e 1e retne -1 |
| 10623 | + *[0-9a-f]*: 5e 90 retgt r0 |
| 10624 | + *[0-9a-f]*: 5e 9c retgt r12 |
| 10625 | + *[0-9a-f]*: 5e 4a retge r10 |
| 10626 | + |
| 10627 | +[0-9a-f]* <sr_cond>: |
| 10628 | + *[0-9a-f]*: 5f 0f sreq pc |
| 10629 | + *[0-9a-f]*: 5f fc sral r12 |
| 10630 | + *[0-9a-f]*: 5f 85 srls r5 |
| 10631 | + *[0-9a-f]*: 5f 74 srpl r4 |
| 10632 | + *[0-9a-f]*: 5f 1e srne lr |
| 10633 | + *[0-9a-f]*: 5f 50 srlt r0 |
| 10634 | + *[0-9a-f]*: 5f fd sral sp |
| 10635 | + *[0-9a-f]*: 5f 49 srge r9 |
| 10636 | + |
| 10637 | +[0-9a-f]* <ld_w3>: |
| 10638 | + *[0-9a-f]*: 7e 0f ld\.w pc,pc\[0x0\] |
| 10639 | + *[0-9a-f]*: 79 fc ld\.w r12,r12\[0x7c\] |
| 10640 | + *[0-9a-f]*: 6b 05 ld\.w r5,r5\[0x40\] |
| 10641 | + *[0-9a-f]*: 68 f4 ld\.w r4,r4\[0x3c\] |
| 10642 | + *[0-9a-f]*: 7c 1e ld\.w lr,lr\[0x4\] |
| 10643 | + *[0-9a-f]*: 64 dd ld\.w sp,r2\[0x34\] |
| 10644 | + *[0-9a-f]*: 62 29 ld\.w r9,r1\[0x8\] |
| 10645 | + *[0-9a-f]*: 7a f5 ld\.w r5,sp\[0x3c\] |
| 10646 | + |
| 10647 | +[0-9a-f]* <ld_sh3>: |
| 10648 | + *[0-9a-f]*: 9e 0f ld\.sh pc,pc\[0x0\] |
| 10649 | + *[0-9a-f]*: 98 7c ld\.sh r12,r12\[0xe\] |
| 10650 | + *[0-9a-f]*: 8a 45 ld\.sh r5,r5\[0x8\] |
| 10651 | + *[0-9a-f]*: 88 34 ld\.sh r4,r4\[0x6\] |
| 10652 | + *[0-9a-f]*: 9c 1e ld\.sh lr,lr\[0x2\] |
| 10653 | + *[0-9a-f]*: 84 44 ld\.sh r4,r2\[0x8\] |
| 10654 | + *[0-9a-f]*: 9c 5d ld\.sh sp,lr\[0xa\] |
| 10655 | + *[0-9a-f]*: 96 12 ld\.sh r2,r11\[0x2\] |
| 10656 | + |
| 10657 | +[0-9a-f]* <ld_uh3>: |
| 10658 | + *[0-9a-f]*: 9e 8f ld\.uh pc,pc\[0x0\] |
| 10659 | + *[0-9a-f]*: 98 fc ld\.uh r12,r12\[0xe\] |
| 10660 | + *[0-9a-f]*: 8a c5 ld\.uh r5,r5\[0x8\] |
| 10661 | + *[0-9a-f]*: 88 b4 ld\.uh r4,r4\[0x6\] |
| 10662 | + *[0-9a-f]*: 9c 9e ld\.uh lr,lr\[0x2\] |
| 10663 | + *[0-9a-f]*: 80 da ld\.uh r10,r0\[0xa\] |
| 10664 | + *[0-9a-f]*: 96 c8 ld\.uh r8,r11\[0x8\] |
| 10665 | + *[0-9a-f]*: 84 ea ld\.uh r10,r2\[0xc\] |
| 10666 | + |
| 10667 | +[0-9a-f]* <st_w3>: |
| 10668 | + *[0-9a-f]*: 9f 0f st\.w pc\[0x0\],pc |
| 10669 | + *[0-9a-f]*: 99 fc st\.w r12\[0x3c\],r12 |
| 10670 | + *[0-9a-f]*: 8b 85 st\.w r5\[0x20\],r5 |
| 10671 | + *[0-9a-f]*: 89 74 st\.w r4\[0x1c\],r4 |
| 10672 | + *[0-9a-f]*: 9d 1e st\.w lr\[0x4\],lr |
| 10673 | + *[0-9a-f]*: 8f bb st\.w r7\[0x2c\],r11 |
| 10674 | + *[0-9a-f]*: 85 66 st\.w r2\[0x18\],r6 |
| 10675 | + *[0-9a-f]*: 89 39 st\.w r4\[0xc\],r9 |
| 10676 | + |
| 10677 | +[0-9a-f]* <st_h3>: |
| 10678 | + *[0-9a-f]*: be 0f st\.h pc\[0x0\],pc |
| 10679 | + *[0-9a-f]*: b8 7c st\.h r12\[0xe\],r12 |
| 10680 | + *[0-9a-f]*: aa 45 st\.h r5\[0x8\],r5 |
| 10681 | + *[0-9a-f]*: a8 34 st\.h r4\[0x6\],r4 |
| 10682 | + *[0-9a-f]*: bc 1e st\.h lr\[0x2\],lr |
| 10683 | + *[0-9a-f]*: bc 5c st\.h lr\[0xa\],r12 |
| 10684 | + *[0-9a-f]*: ac 20 st\.h r6\[0x4\],r0 |
| 10685 | + *[0-9a-f]*: aa 6d st\.h r5\[0xc\],sp |
| 10686 | + |
| 10687 | +[0-9a-f]* <st_b3>: |
| 10688 | + *[0-9a-f]*: be 8f st\.b pc\[0x0\],pc |
| 10689 | + *[0-9a-f]*: b8 fc st\.b r12\[0x7\],r12 |
| 10690 | + *[0-9a-f]*: aa c5 st\.b r5\[0x4\],r5 |
| 10691 | + *[0-9a-f]*: a8 b4 st\.b r4\[0x3\],r4 |
| 10692 | + *[0-9a-f]*: bc 9e st\.b lr\[0x1\],lr |
| 10693 | + *[0-9a-f]*: b8 e9 st\.b r12\[0x6\],r9 |
| 10694 | + *[0-9a-f]*: a4 be st\.b r2\[0x3\],lr |
| 10695 | + *[0-9a-f]*: a2 bb st\.b r1\[0x3\],r11 |
| 10696 | + |
| 10697 | +[0-9a-f]* <ldd>: |
| 10698 | + *[0-9a-f]*: bf 00 ld\.d r0,pc |
| 10699 | + *[0-9a-f]*: b9 0e ld\.d lr,r12 |
| 10700 | + *[0-9a-f]*: ab 08 ld\.d r8,r5 |
| 10701 | + *[0-9a-f]*: a9 06 ld\.d r6,r4 |
| 10702 | + *[0-9a-f]*: bd 02 ld\.d r2,lr |
| 10703 | + *[0-9a-f]*: af 0e ld\.d lr,r7 |
| 10704 | + *[0-9a-f]*: a9 04 ld\.d r4,r4 |
| 10705 | + *[0-9a-f]*: bf 0e ld\.d lr,pc |
| 10706 | + |
| 10707 | +[0-9a-f]* <ldd_postinc>: |
| 10708 | + *[0-9a-f]*: bf 01 ld\.d r0,pc\+\+ |
| 10709 | + *[0-9a-f]*: b9 0f ld\.d lr,r12\+\+ |
| 10710 | + *[0-9a-f]*: ab 09 ld\.d r8,r5\+\+ |
| 10711 | + *[0-9a-f]*: a9 07 ld\.d r6,r4\+\+ |
| 10712 | + *[0-9a-f]*: bd 03 ld\.d r2,lr\+\+ |
| 10713 | + *[0-9a-f]*: ab 0f ld\.d lr,r5\+\+ |
| 10714 | + *[0-9a-f]*: b7 0d ld\.d r12,r11\+\+ |
| 10715 | + *[0-9a-f]*: b9 03 ld\.d r2,r12\+\+ |
| 10716 | + |
| 10717 | +[0-9a-f]* <ldd_predec>: |
| 10718 | + *[0-9a-f]*: bf 10 ld\.d r0,--pc |
| 10719 | + *[0-9a-f]*: b9 1e ld\.d lr,--r12 |
| 10720 | + *[0-9a-f]*: ab 18 ld\.d r8,--r5 |
| 10721 | + *[0-9a-f]*: a9 16 ld\.d r6,--r4 |
| 10722 | + *[0-9a-f]*: bd 12 ld\.d r2,--lr |
| 10723 | + *[0-9a-f]*: a1 18 ld\.d r8,--r0 |
| 10724 | + *[0-9a-f]*: bf 1a ld\.d r10,--pc |
| 10725 | + *[0-9a-f]*: a9 12 ld\.d r2,--r4 |
| 10726 | + |
| 10727 | +[0-9a-f]* <std>: |
| 10728 | + *[0-9a-f]*: bf 11 st\.d pc,r0 |
| 10729 | + *[0-9a-f]*: b9 1f st\.d r12,lr |
| 10730 | + *[0-9a-f]*: ab 19 st\.d r5,r8 |
| 10731 | + *[0-9a-f]*: a9 17 st\.d r4,r6 |
| 10732 | + *[0-9a-f]*: bd 13 st\.d lr,r2 |
| 10733 | + *[0-9a-f]*: a1 1d st\.d r0,r12 |
| 10734 | + *[0-9a-f]*: bb 15 st\.d sp,r4 |
| 10735 | + *[0-9a-f]*: b9 1d st\.d r12,r12 |
| 10736 | + |
| 10737 | +[0-9a-f]* <std_postinc>: |
| 10738 | + *[0-9a-f]*: bf 20 st\.d pc\+\+,r0 |
| 10739 | + *[0-9a-f]*: b9 2e st\.d r12\+\+,lr |
| 10740 | + *[0-9a-f]*: ab 28 st\.d r5\+\+,r8 |
| 10741 | + *[0-9a-f]*: a9 26 st\.d r4\+\+,r6 |
| 10742 | + *[0-9a-f]*: bd 22 st\.d lr\+\+,r2 |
| 10743 | + *[0-9a-f]*: bb 26 st\.d sp\+\+,r6 |
| 10744 | + *[0-9a-f]*: b5 26 st\.d r10\+\+,r6 |
| 10745 | + *[0-9a-f]*: af 22 st\.d r7\+\+,r2 |
| 10746 | + |
| 10747 | +[0-9a-f]* <std_predec>: |
| 10748 | + *[0-9a-f]*: bf 21 st\.d --pc,r0 |
| 10749 | + *[0-9a-f]*: b9 2f st\.d --r12,lr |
| 10750 | + *[0-9a-f]*: ab 29 st\.d --r5,r8 |
| 10751 | + *[0-9a-f]*: a9 27 st\.d --r4,r6 |
| 10752 | + *[0-9a-f]*: bd 23 st\.d --lr,r2 |
| 10753 | + *[0-9a-f]*: a7 27 st\.d --r3,r6 |
| 10754 | + *[0-9a-f]*: bd 23 st\.d --lr,r2 |
| 10755 | + *[0-9a-f]*: a1 25 st\.d --r0,r4 |
| 10756 | + |
| 10757 | +[0-9a-f]* <mul>: |
| 10758 | + *[0-9a-f]*: bf 3f mul pc,pc |
| 10759 | + *[0-9a-f]*: b9 3c mul r12,r12 |
| 10760 | + *[0-9a-f]*: ab 35 mul r5,r5 |
| 10761 | + *[0-9a-f]*: a9 34 mul r4,r4 |
| 10762 | + *[0-9a-f]*: bd 3e mul lr,lr |
| 10763 | + *[0-9a-f]*: bd 3a mul r10,lr |
| 10764 | + *[0-9a-f]*: b1 30 mul r0,r8 |
| 10765 | + *[0-9a-f]*: ab 38 mul r8,r5 |
| 10766 | + |
| 10767 | +[0-9a-f]* <asr_imm5>: |
| 10768 | + *[0-9a-f]*: a1 4f asr pc,0x0 |
| 10769 | + *[0-9a-f]*: bf 5c asr r12,0x1f |
| 10770 | + *[0-9a-f]*: b1 45 asr r5,0x10 |
| 10771 | + *[0-9a-f]*: af 54 asr r4,0xf |
| 10772 | + *[0-9a-f]*: a1 5e asr lr,0x1 |
| 10773 | + *[0-9a-f]*: b7 56 asr r6,0x17 |
| 10774 | + *[0-9a-f]*: b3 46 asr r6,0x12 |
| 10775 | + *[0-9a-f]*: a9 45 asr r5,0x8 |
| 10776 | + |
| 10777 | +[0-9a-f]* <lsl_imm5>: |
| 10778 | + *[0-9a-f]*: a1 6f lsl pc,0x0 |
| 10779 | + *[0-9a-f]*: bf 7c lsl r12,0x1f |
| 10780 | + *[0-9a-f]*: b1 65 lsl r5,0x10 |
| 10781 | + *[0-9a-f]*: af 74 lsl r4,0xf |
| 10782 | + *[0-9a-f]*: a1 7e lsl lr,0x1 |
| 10783 | + *[0-9a-f]*: ad 7c lsl r12,0xd |
| 10784 | + *[0-9a-f]*: b1 66 lsl r6,0x10 |
| 10785 | + *[0-9a-f]*: b9 71 lsl r1,0x19 |
| 10786 | + |
| 10787 | +[0-9a-f]* <lsr_imm5>: |
| 10788 | + *[0-9a-f]*: a1 8f lsr pc,0x0 |
| 10789 | + *[0-9a-f]*: bf 9c lsr r12,0x1f |
| 10790 | + *[0-9a-f]*: b1 85 lsr r5,0x10 |
| 10791 | + *[0-9a-f]*: af 94 lsr r4,0xf |
| 10792 | + *[0-9a-f]*: a1 9e lsr lr,0x1 |
| 10793 | + *[0-9a-f]*: a1 90 lsr r0,0x1 |
| 10794 | + *[0-9a-f]*: ab 88 lsr r8,0xa |
| 10795 | + *[0-9a-f]*: bb 87 lsr r7,0x1a |
| 10796 | + |
| 10797 | +[0-9a-f]* <sbr>: |
| 10798 | + *[0-9a-f]*: a1 af sbr pc,0x0 |
| 10799 | + *[0-9a-f]*: bf bc sbr r12,0x1f |
| 10800 | + *[0-9a-f]*: b1 a5 sbr r5,0x10 |
| 10801 | + *[0-9a-f]*: af b4 sbr r4,0xf |
| 10802 | + *[0-9a-f]*: a1 be sbr lr,0x1 |
| 10803 | + *[0-9a-f]*: bf b8 sbr r8,0x1f |
| 10804 | + *[0-9a-f]*: b7 a6 sbr r6,0x16 |
| 10805 | + *[0-9a-f]*: b7 b1 sbr r1,0x17 |
| 10806 | + |
| 10807 | +[0-9a-f]* <cbr>: |
| 10808 | + *[0-9a-f]*: a1 cf cbr pc,0x0 |
| 10809 | + *[0-9a-f]*: bf dc cbr r12,0x1f |
| 10810 | + *[0-9a-f]*: b1 c5 cbr r5,0x10 |
| 10811 | + *[0-9a-f]*: af d4 cbr r4,0xf |
| 10812 | + *[0-9a-f]*: a1 de cbr lr,0x1 |
| 10813 | + *[0-9a-f]*: ab cc cbr r12,0xa |
| 10814 | + *[0-9a-f]*: b7 c7 cbr r7,0x16 |
| 10815 | + *[0-9a-f]*: a9 d8 cbr r8,0x9 |
| 10816 | + |
| 10817 | +[0-9a-f]* <brc1>: |
| 10818 | + *[0-9a-f]*: c0 00 breq [0-9a-f]* <.*> |
| 10819 | + *[0-9a-f]*: cf f7 brpl [0-9a-f]* <.*> |
| 10820 | + *[0-9a-f]*: c8 04 brge [0-9a-f]* <.*> |
| 10821 | + *[0-9a-f]*: c7 f3 brcs [0-9a-f]* <.*> |
| 10822 | + *[0-9a-f]*: c0 11 brne [0-9a-f]* <.*> |
| 10823 | + *[0-9a-f]*: c7 33 brcs [0-9a-f]* <.*> |
| 10824 | + *[0-9a-f]*: cf 70 breq [0-9a-f]* <.*> |
| 10825 | + *[0-9a-f]*: c0 60 breq [0-9a-f]* <.*> |
| 10826 | + |
| 10827 | +[0-9a-f]* <rjmp>: |
| 10828 | + *[0-9a-f]*: c0 08 rjmp [0-9a-f]* <.*> |
| 10829 | + *[0-9a-f]*: cf fb rjmp [0-9a-f]* <.*> |
| 10830 | + *[0-9a-f]*: c0 0a rjmp [0-9a-f]* <.*> |
| 10831 | + *[0-9a-f]*: cf f9 rjmp [0-9a-f]* <.*> |
| 10832 | + *[0-9a-f]*: c0 18 rjmp [0-9a-f]* <.*> |
| 10833 | + *[0-9a-f]*: c1 fa rjmp [0-9a-f]* <.*> |
| 10834 | + *[0-9a-f]*: c0 78 rjmp [0-9a-f]* <.*> |
| 10835 | + *[0-9a-f]*: cf ea rjmp [0-9a-f]* <.*> |
| 10836 | + |
| 10837 | +[0-9a-f]* <rcall1>: |
| 10838 | + *[0-9a-f]*: c0 0c rcall [0-9a-f]* <.*> |
| 10839 | + *[0-9a-f]*: cf ff rcall [0-9a-f]* <.*> |
| 10840 | + *[0-9a-f]*: c0 0e rcall [0-9a-f]* <.*> |
| 10841 | + *[0-9a-f]*: cf fd rcall [0-9a-f]* <.*> |
| 10842 | + *[0-9a-f]*: c0 1c rcall [0-9a-f]* <.*> |
| 10843 | + *[0-9a-f]*: c6 cc rcall [0-9a-f]* <.*> |
| 10844 | + *[0-9a-f]*: cf 7e rcall [0-9a-f]* <.*> |
| 10845 | + *[0-9a-f]*: c1 ae rcall [0-9a-f]* <.*> |
| 10846 | + |
| 10847 | +[0-9a-f]* <acall>: |
| 10848 | + *[0-9a-f]*: d0 00 acall 0x0 |
| 10849 | + *[0-9a-f]*: df f0 acall 0x3fc |
| 10850 | + *[0-9a-f]*: d8 00 acall 0x200 |
| 10851 | + *[0-9a-f]*: d7 f0 acall 0x1fc |
| 10852 | + *[0-9a-f]*: d0 10 acall 0x4 |
| 10853 | + *[0-9a-f]*: d5 90 acall 0x164 |
| 10854 | + *[0-9a-f]*: d4 c0 acall 0x130 |
| 10855 | + *[0-9a-f]*: d2 b0 acall 0xac |
| 10856 | + |
| 10857 | +[0-9a-f]* <scall>: |
| 10858 | + *[0-9a-f]*: d7 33 scall |
| 10859 | + *[0-9a-f]*: d7 33 scall |
| 10860 | + *[0-9a-f]*: d7 33 scall |
| 10861 | + *[0-9a-f]*: d7 33 scall |
| 10862 | + *[0-9a-f]*: d7 33 scall |
| 10863 | + *[0-9a-f]*: d7 33 scall |
| 10864 | + *[0-9a-f]*: d7 33 scall |
| 10865 | + *[0-9a-f]*: d7 33 scall |
| 10866 | + |
| 10867 | +[0-9a-f]* <popm>: |
| 10868 | + *[0-9a-f]*: d8 02 popm pc |
| 10869 | + *[0-9a-f]*: dd fa popm r0-r11,pc,r12=-1 |
| 10870 | + *[0-9a-f]*: d4 02 popm lr |
| 10871 | + *[0-9a-f]*: db fa popm r0-r11,pc,r12=1 |
| 10872 | + *[0-9a-f]*: d0 12 popm r0-r3 |
| 10873 | + *[0-9a-f]*: d8 e2 popm r4-r10,pc |
| 10874 | + *[0-9a-f]*: d9 1a popm r0-r3,r11,pc,r12=0 |
| 10875 | + *[0-9a-f]*: d7 b2 popm r0-r7,r10-r12,lr |
| 10876 | + |
| 10877 | +[0-9a-f]* <pushm>: |
| 10878 | + *[0-9a-f]*: d8 01 pushm pc |
| 10879 | + *[0-9a-f]*: df f1 pushm r0-r12,lr-pc |
| 10880 | + *[0-9a-f]*: d8 01 pushm pc |
| 10881 | + *[0-9a-f]*: d7 f1 pushm r0-r12,lr |
| 10882 | + *[0-9a-f]*: d0 11 pushm r0-r3 |
| 10883 | + *[0-9a-f]*: dc c1 pushm r8-r10,lr-pc |
| 10884 | + *[0-9a-f]*: d0 91 pushm r0-r3,r10 |
| 10885 | + *[0-9a-f]*: d2 41 pushm r8-r9,r12 |
| 10886 | + |
| 10887 | +[0-9a-f]* <popm_n>: |
| 10888 | +.* |
| 10889 | +.* |
| 10890 | +.* |
| 10891 | +.* |
| 10892 | +.* |
| 10893 | +.* |
| 10894 | +.* |
| 10895 | +.* |
| 10896 | + |
| 10897 | +[0-9a-f]* <pushm_n>: |
| 10898 | +.* |
| 10899 | +.* |
| 10900 | +.* |
| 10901 | +.* |
| 10902 | +.* |
| 10903 | +.* |
| 10904 | +.* |
| 10905 | +.* |
| 10906 | + |
| 10907 | +[0-9a-f]* <csrfcz>: |
| 10908 | + *[0-9a-f]*: d0 03 csrfcz 0x0 |
| 10909 | + *[0-9a-f]*: d1 f3 csrfcz 0x1f |
| 10910 | + *[0-9a-f]*: d1 03 csrfcz 0x10 |
| 10911 | + *[0-9a-f]*: d0 f3 csrfcz 0xf |
| 10912 | + *[0-9a-f]*: d0 13 csrfcz 0x1 |
| 10913 | + *[0-9a-f]*: d0 53 csrfcz 0x5 |
| 10914 | + *[0-9a-f]*: d0 d3 csrfcz 0xd |
| 10915 | + *[0-9a-f]*: d1 73 csrfcz 0x17 |
| 10916 | + |
| 10917 | +[0-9a-f]* <ssrf>: |
| 10918 | + *[0-9a-f]*: d2 03 ssrf 0x0 |
| 10919 | + *[0-9a-f]*: d3 f3 ssrf 0x1f |
| 10920 | + *[0-9a-f]*: d3 03 ssrf 0x10 |
| 10921 | + *[0-9a-f]*: d2 f3 ssrf 0xf |
| 10922 | + *[0-9a-f]*: d2 13 ssrf 0x1 |
| 10923 | + *[0-9a-f]*: d3 d3 ssrf 0x1d |
| 10924 | + *[0-9a-f]*: d2 d3 ssrf 0xd |
| 10925 | + *[0-9a-f]*: d2 d3 ssrf 0xd |
| 10926 | + |
| 10927 | +[0-9a-f]* <csrf>: |
| 10928 | + *[0-9a-f]*: d4 03 csrf 0x0 |
| 10929 | + *[0-9a-f]*: d5 f3 csrf 0x1f |
| 10930 | + *[0-9a-f]*: d5 03 csrf 0x10 |
| 10931 | + *[0-9a-f]*: d4 f3 csrf 0xf |
| 10932 | + *[0-9a-f]*: d4 13 csrf 0x1 |
| 10933 | + *[0-9a-f]*: d4 a3 csrf 0xa |
| 10934 | + *[0-9a-f]*: d4 f3 csrf 0xf |
| 10935 | + *[0-9a-f]*: d4 b3 csrf 0xb |
| 10936 | + |
| 10937 | +[0-9a-f]* <rete>: |
| 10938 | + *[0-9a-f]*: d6 03 rete |
| 10939 | + |
| 10940 | +[0-9a-f]* <rets>: |
| 10941 | + *[0-9a-f]*: d6 13 rets |
| 10942 | + |
| 10943 | +[0-9a-f]* <retd>: |
| 10944 | + *[0-9a-f]*: d6 23 retd |
| 10945 | + |
| 10946 | +[0-9a-f]* <retj>: |
| 10947 | + *[0-9a-f]*: d6 33 retj |
| 10948 | + |
| 10949 | +[0-9a-f]* <tlbr>: |
| 10950 | + *[0-9a-f]*: d6 43 tlbr |
| 10951 | + |
| 10952 | +[0-9a-f]* <tlbs>: |
| 10953 | + *[0-9a-f]*: d6 53 tlbs |
| 10954 | + |
| 10955 | +[0-9a-f]* <tlbw>: |
| 10956 | + *[0-9a-f]*: d6 63 tlbw |
| 10957 | + |
| 10958 | +[0-9a-f]* <breakpoint>: |
| 10959 | + *[0-9a-f]*: d6 73 breakpoint |
| 10960 | + |
| 10961 | +[0-9a-f]* <incjosp>: |
| 10962 | + *[0-9a-f]*: d6 83 incjosp 1 |
| 10963 | + *[0-9a-f]*: d6 93 incjosp 2 |
| 10964 | + *[0-9a-f]*: d6 a3 incjosp 3 |
| 10965 | + *[0-9a-f]*: d6 b3 incjosp 4 |
| 10966 | + *[0-9a-f]*: d6 c3 incjosp -4 |
| 10967 | + *[0-9a-f]*: d6 d3 incjosp -3 |
| 10968 | + *[0-9a-f]*: d6 e3 incjosp -2 |
| 10969 | + *[0-9a-f]*: d6 f3 incjosp -1 |
| 10970 | + |
| 10971 | +[0-9a-f]* <nop>: |
| 10972 | + *[0-9a-f]*: d7 03 nop |
| 10973 | + |
| 10974 | +[0-9a-f]* <popjc>: |
| 10975 | + *[0-9a-f]*: d7 13 popjc |
| 10976 | + |
| 10977 | +[0-9a-f]* <pushjc>: |
| 10978 | + *[0-9a-f]*: d7 23 pushjc |
| 10979 | + |
| 10980 | +[0-9a-f]* <add2>: |
| 10981 | + *[0-9a-f]*: fe 0f 00 0f add pc,pc,pc |
| 10982 | + *[0-9a-f]*: f8 0c 00 3c add r12,r12,r12<<0x3 |
| 10983 | + *[0-9a-f]*: ea 05 00 25 add r5,r5,r5<<0x2 |
| 10984 | + *[0-9a-f]*: e8 04 00 14 add r4,r4,r4<<0x1 |
| 10985 | + *[0-9a-f]*: fc 0e 00 1e add lr,lr,lr<<0x1 |
| 10986 | + *[0-9a-f]*: f8 00 00 10 add r0,r12,r0<<0x1 |
| 10987 | + *[0-9a-f]*: f8 04 00 09 add r9,r12,r4 |
| 10988 | + *[0-9a-f]*: f8 07 00 2c add r12,r12,r7<<0x2 |
| 10989 | + |
| 10990 | +[0-9a-f]* <sub2>: |
| 10991 | + *[0-9a-f]*: fe 0f 01 0f sub pc,pc,pc |
| 10992 | + *[0-9a-f]*: f8 0c 01 3c sub r12,r12,r12<<0x3 |
| 10993 | + *[0-9a-f]*: ea 05 01 25 sub r5,r5,r5<<0x2 |
| 10994 | + *[0-9a-f]*: e8 04 01 14 sub r4,r4,r4<<0x1 |
| 10995 | + *[0-9a-f]*: fc 0e 01 1e sub lr,lr,lr<<0x1 |
| 10996 | + *[0-9a-f]*: e6 04 01 0d sub sp,r3,r4 |
| 10997 | + *[0-9a-f]*: ee 03 01 03 sub r3,r7,r3 |
| 10998 | + *[0-9a-f]*: f4 0d 01 1d sub sp,r10,sp<<0x1 |
| 10999 | + |
| 11000 | +[0-9a-f]* <divu>: |
| 11001 | + *[0-9a-f]*: fe 0f 0d 0f divu pc,pc,pc |
| 11002 | + *[0-9a-f]*: f8 0c 0d 0c divu r12,r12,r12 |
| 11003 | + *[0-9a-f]*: ea 05 0d 05 divu r5,r5,r5 |
| 11004 | + *[0-9a-f]*: e8 04 0d 04 divu r4,r4,r4 |
| 11005 | + *[0-9a-f]*: fc 0e 0d 0e divu lr,lr,lr |
| 11006 | + *[0-9a-f]*: e8 0f 0d 0d divu sp,r4,pc |
| 11007 | + *[0-9a-f]*: ea 0d 0d 05 divu r5,r5,sp |
| 11008 | + *[0-9a-f]*: fa 00 0d 0a divu r10,sp,r0 |
| 11009 | + |
| 11010 | +[0-9a-f]* <addhh_w>: |
| 11011 | + *[0-9a-f]*: fe 0f 0e 0f addhh\.w pc,pc:b,pc:b |
| 11012 | + *[0-9a-f]*: f8 0c 0e 3c addhh\.w r12,r12:t,r12:t |
| 11013 | + *[0-9a-f]*: ea 05 0e 35 addhh\.w r5,r5:t,r5:t |
| 11014 | + *[0-9a-f]*: e8 04 0e 04 addhh\.w r4,r4:b,r4:b |
| 11015 | + *[0-9a-f]*: fc 0e 0e 3e addhh\.w lr,lr:t,lr:t |
| 11016 | + *[0-9a-f]*: e0 03 0e 00 addhh\.w r0,r0:b,r3:b |
| 11017 | + *[0-9a-f]*: f8 07 0e 2e addhh\.w lr,r12:t,r7:b |
| 11018 | + *[0-9a-f]*: f4 02 0e 23 addhh\.w r3,r10:t,r2:b |
| 11019 | + |
| 11020 | +[0-9a-f]* <subhh_w>: |
| 11021 | + *[0-9a-f]*: fe 0f 0f 0f subhh\.w pc,pc:b,pc:b |
| 11022 | + *[0-9a-f]*: f8 0c 0f 3c subhh\.w r12,r12:t,r12:t |
| 11023 | + *[0-9a-f]*: ea 05 0f 35 subhh\.w r5,r5:t,r5:t |
| 11024 | + *[0-9a-f]*: e8 04 0f 04 subhh\.w r4,r4:b,r4:b |
| 11025 | + *[0-9a-f]*: fc 0e 0f 3e subhh\.w lr,lr:t,lr:t |
| 11026 | + *[0-9a-f]*: e2 07 0f 2a subhh\.w r10,r1:t,r7:b |
| 11027 | + *[0-9a-f]*: f4 0e 0f 3f subhh\.w pc,r10:t,lr:t |
| 11028 | + *[0-9a-f]*: e0 0c 0f 23 subhh\.w r3,r0:t,r12:b |
| 11029 | + |
| 11030 | +[0-9a-f]* <adc>: |
| 11031 | + *[0-9a-f]*: fe 0f 00 4f adc pc,pc,pc |
| 11032 | + *[0-9a-f]*: f8 0c 00 4c adc r12,r12,r12 |
| 11033 | + *[0-9a-f]*: ea 05 00 45 adc r5,r5,r5 |
| 11034 | + *[0-9a-f]*: e8 04 00 44 adc r4,r4,r4 |
| 11035 | + *[0-9a-f]*: fc 0e 00 4e adc lr,lr,lr |
| 11036 | + *[0-9a-f]*: e0 07 00 44 adc r4,r0,r7 |
| 11037 | + *[0-9a-f]*: e8 03 00 4d adc sp,r4,r3 |
| 11038 | + *[0-9a-f]*: f8 00 00 42 adc r2,r12,r0 |
| 11039 | + |
| 11040 | +[0-9a-f]* <sbc>: |
| 11041 | + *[0-9a-f]*: fe 0f 01 4f sbc pc,pc,pc |
| 11042 | + *[0-9a-f]*: f8 0c 01 4c sbc r12,r12,r12 |
| 11043 | + *[0-9a-f]*: ea 05 01 45 sbc r5,r5,r5 |
| 11044 | + *[0-9a-f]*: e8 04 01 44 sbc r4,r4,r4 |
| 11045 | + *[0-9a-f]*: fc 0e 01 4e sbc lr,lr,lr |
| 11046 | + *[0-9a-f]*: ee 09 01 46 sbc r6,r7,r9 |
| 11047 | + *[0-9a-f]*: f0 05 01 40 sbc r0,r8,r5 |
| 11048 | + *[0-9a-f]*: e0 04 01 41 sbc r1,r0,r4 |
| 11049 | + |
| 11050 | +[0-9a-f]* <mul_2>: |
| 11051 | + *[0-9a-f]*: fe 0f 02 4f mul pc,pc,pc |
| 11052 | + *[0-9a-f]*: f8 0c 02 4c mul r12,r12,r12 |
| 11053 | + *[0-9a-f]*: ea 05 02 45 mul r5,r5,r5 |
| 11054 | + *[0-9a-f]*: e8 04 02 44 mul r4,r4,r4 |
| 11055 | + *[0-9a-f]*: fc 0e 02 4e mul lr,lr,lr |
| 11056 | + *[0-9a-f]*: e0 00 02 4f mul pc,r0,r0 |
| 11057 | + *[0-9a-f]*: fe 0e 02 48 mul r8,pc,lr |
| 11058 | + *[0-9a-f]*: f8 0f 02 44 mul r4,r12,pc |
| 11059 | + |
| 11060 | +[0-9a-f]* <mac>: |
| 11061 | + *[0-9a-f]*: fe 0f 03 4f mac pc,pc,pc |
| 11062 | + *[0-9a-f]*: f8 0c 03 4c mac r12,r12,r12 |
| 11063 | + *[0-9a-f]*: ea 05 03 45 mac r5,r5,r5 |
| 11064 | + *[0-9a-f]*: e8 04 03 44 mac r4,r4,r4 |
| 11065 | + *[0-9a-f]*: fc 0e 03 4e mac lr,lr,lr |
| 11066 | + *[0-9a-f]*: e8 00 03 4a mac r10,r4,r0 |
| 11067 | + *[0-9a-f]*: fc 00 03 47 mac r7,lr,r0 |
| 11068 | + *[0-9a-f]*: f2 0c 03 42 mac r2,r9,r12 |
| 11069 | + |
| 11070 | +[0-9a-f]* <mulsd>: |
| 11071 | + *[0-9a-f]*: fe 0f 04 4f muls\.d pc,pc,pc |
| 11072 | + *[0-9a-f]*: f8 0c 04 4c muls\.d r12,r12,r12 |
| 11073 | + *[0-9a-f]*: ea 05 04 45 muls\.d r5,r5,r5 |
| 11074 | + *[0-9a-f]*: e8 04 04 44 muls\.d r4,r4,r4 |
| 11075 | + *[0-9a-f]*: fc 0e 04 4e muls\.d lr,lr,lr |
| 11076 | + *[0-9a-f]*: f0 0e 04 42 muls\.d r2,r8,lr |
| 11077 | + *[0-9a-f]*: e0 0b 04 44 muls\.d r4,r0,r11 |
| 11078 | + *[0-9a-f]*: fc 06 04 45 muls\.d r5,lr,r6 |
| 11079 | + |
| 11080 | +[0-9a-f]* <macsd>: |
| 11081 | + *[0-9a-f]*: fe 0f 05 40 macs\.d r0,pc,pc |
| 11082 | + *[0-9a-f]*: f8 0c 05 4e macs\.d lr,r12,r12 |
| 11083 | + *[0-9a-f]*: ea 05 05 48 macs\.d r8,r5,r5 |
| 11084 | + *[0-9a-f]*: e8 04 05 46 macs\.d r6,r4,r4 |
| 11085 | + *[0-9a-f]*: fc 0e 05 42 macs\.d r2,lr,lr |
| 11086 | + *[0-9a-f]*: e2 09 05 48 macs\.d r8,r1,r9 |
| 11087 | + *[0-9a-f]*: f0 08 05 4e macs\.d lr,r8,r8 |
| 11088 | + *[0-9a-f]*: e6 0c 05 44 macs\.d r4,r3,r12 |
| 11089 | + |
| 11090 | +[0-9a-f]* <mulud>: |
| 11091 | + *[0-9a-f]*: fe 0f 06 40 mulu\.d r0,pc,pc |
| 11092 | + *[0-9a-f]*: f8 0c 06 4e mulu\.d lr,r12,r12 |
| 11093 | + *[0-9a-f]*: ea 05 06 48 mulu\.d r8,r5,r5 |
| 11094 | + *[0-9a-f]*: e8 04 06 46 mulu\.d r6,r4,r4 |
| 11095 | + *[0-9a-f]*: fc 0e 06 42 mulu\.d r2,lr,lr |
| 11096 | + *[0-9a-f]*: ea 00 06 46 mulu\.d r6,r5,r0 |
| 11097 | + *[0-9a-f]*: ec 01 06 44 mulu\.d r4,r6,r1 |
| 11098 | + *[0-9a-f]*: f0 02 06 48 mulu\.d r8,r8,r2 |
| 11099 | + |
| 11100 | +[0-9a-f]* <macud>: |
| 11101 | + *[0-9a-f]*: fe 0f 07 40 macu\.d r0,pc,pc |
| 11102 | + *[0-9a-f]*: f8 0c 07 4e macu\.d lr,r12,r12 |
| 11103 | + *[0-9a-f]*: ea 05 07 48 macu\.d r8,r5,r5 |
| 11104 | + *[0-9a-f]*: e8 04 07 46 macu\.d r6,r4,r4 |
| 11105 | + *[0-9a-f]*: fc 0e 07 42 macu\.d r2,lr,lr |
| 11106 | + *[0-9a-f]*: fa 0b 07 46 macu\.d r6,sp,r11 |
| 11107 | + *[0-9a-f]*: e8 08 07 42 macu\.d r2,r4,r8 |
| 11108 | + *[0-9a-f]*: f4 09 07 46 macu\.d r6,r10,r9 |
| 11109 | + |
| 11110 | +[0-9a-f]* <asr_1>: |
| 11111 | + *[0-9a-f]*: fe 0f 08 4f asr pc,pc,pc |
| 11112 | + *[0-9a-f]*: f8 0c 08 4c asr r12,r12,r12 |
| 11113 | + *[0-9a-f]*: ea 05 08 45 asr r5,r5,r5 |
| 11114 | + *[0-9a-f]*: e8 04 08 44 asr r4,r4,r4 |
| 11115 | + *[0-9a-f]*: fc 0e 08 4e asr lr,lr,lr |
| 11116 | + *[0-9a-f]*: ec 0f 08 4f asr pc,r6,pc |
| 11117 | + *[0-9a-f]*: ec 0c 08 40 asr r0,r6,r12 |
| 11118 | + *[0-9a-f]*: fa 00 08 44 asr r4,sp,r0 |
| 11119 | + |
| 11120 | +[0-9a-f]* <lsl_1>: |
| 11121 | + *[0-9a-f]*: fe 0f 09 4f lsl pc,pc,pc |
| 11122 | + *[0-9a-f]*: f8 0c 09 4c lsl r12,r12,r12 |
| 11123 | + *[0-9a-f]*: ea 05 09 45 lsl r5,r5,r5 |
| 11124 | + *[0-9a-f]*: e8 04 09 44 lsl r4,r4,r4 |
| 11125 | + *[0-9a-f]*: fc 0e 09 4e lsl lr,lr,lr |
| 11126 | + *[0-9a-f]*: ea 0e 09 4e lsl lr,r5,lr |
| 11127 | + *[0-9a-f]*: fe 03 09 45 lsl r5,pc,r3 |
| 11128 | + *[0-9a-f]*: fe 09 09 41 lsl r1,pc,r9 |
| 11129 | + |
| 11130 | +[0-9a-f]* <lsr_1>: |
| 11131 | + *[0-9a-f]*: fe 0f 0a 4f lsr pc,pc,pc |
| 11132 | + *[0-9a-f]*: f8 0c 0a 4c lsr r12,r12,r12 |
| 11133 | + *[0-9a-f]*: ea 05 0a 45 lsr r5,r5,r5 |
| 11134 | + *[0-9a-f]*: e8 04 0a 44 lsr r4,r4,r4 |
| 11135 | + *[0-9a-f]*: fc 0e 0a 4e lsr lr,lr,lr |
| 11136 | + *[0-9a-f]*: e8 01 0a 42 lsr r2,r4,r1 |
| 11137 | + *[0-9a-f]*: e2 06 0a 45 lsr r5,r1,r6 |
| 11138 | + *[0-9a-f]*: ec 07 0a 4d lsr sp,r6,r7 |
| 11139 | + |
| 11140 | +[0-9a-f]* <xchg>: |
| 11141 | + *[0-9a-f]*: fe 0f 0b 4f xchg pc,pc,pc |
| 11142 | + *[0-9a-f]*: f8 0c 0b 4c xchg r12,r12,r12 |
| 11143 | + *[0-9a-f]*: ea 05 0b 45 xchg r5,r5,r5 |
| 11144 | + *[0-9a-f]*: e8 04 0b 44 xchg r4,r4,r4 |
| 11145 | + *[0-9a-f]*: fc 0e 0b 4e xchg lr,lr,lr |
| 11146 | + *[0-9a-f]*: e8 0d 0b 4e xchg lr,r4,sp |
| 11147 | + *[0-9a-f]*: ea 0c 0b 41 xchg r1,r5,r12 |
| 11148 | + *[0-9a-f]*: f8 00 0b 4e xchg lr,r12,r0 |
| 11149 | + |
| 11150 | +[0-9a-f]* <max>: |
| 11151 | + *[0-9a-f]*: fe 0f 0c 4f max pc,pc,pc |
| 11152 | + *[0-9a-f]*: f8 0c 0c 4c max r12,r12,r12 |
| 11153 | + *[0-9a-f]*: ea 05 0c 45 max r5,r5,r5 |
| 11154 | + *[0-9a-f]*: e8 04 0c 44 max r4,r4,r4 |
| 11155 | + *[0-9a-f]*: fc 0e 0c 4e max lr,lr,lr |
| 11156 | + *[0-9a-f]*: e4 0d 0c 4e max lr,r2,sp |
| 11157 | + *[0-9a-f]*: f4 09 0c 44 max r4,r10,r9 |
| 11158 | + *[0-9a-f]*: f2 0e 0c 4e max lr,r9,lr |
| 11159 | + |
| 11160 | +[0-9a-f]* <min>: |
| 11161 | + *[0-9a-f]*: fe 0f 0d 4f min pc,pc,pc |
| 11162 | + *[0-9a-f]*: f8 0c 0d 4c min r12,r12,r12 |
| 11163 | + *[0-9a-f]*: ea 05 0d 45 min r5,r5,r5 |
| 11164 | + *[0-9a-f]*: e8 04 0d 44 min r4,r4,r4 |
| 11165 | + *[0-9a-f]*: fc 0e 0d 4e min lr,lr,lr |
| 11166 | + *[0-9a-f]*: ee 08 0d 49 min r9,r7,r8 |
| 11167 | + *[0-9a-f]*: ea 05 0d 4d min sp,r5,r5 |
| 11168 | + *[0-9a-f]*: e2 04 0d 44 min r4,r1,r4 |
| 11169 | + |
| 11170 | +[0-9a-f]* <addabs>: |
| 11171 | + *[0-9a-f]*: fe 0f 0e 4f addabs pc,pc,pc |
| 11172 | + *[0-9a-f]*: f8 0c 0e 4c addabs r12,r12,r12 |
| 11173 | + *[0-9a-f]*: ea 05 0e 45 addabs r5,r5,r5 |
| 11174 | + *[0-9a-f]*: e8 04 0e 44 addabs r4,r4,r4 |
| 11175 | + *[0-9a-f]*: fc 0e 0e 4e addabs lr,lr,lr |
| 11176 | + *[0-9a-f]*: f4 00 0e 47 addabs r7,r10,r0 |
| 11177 | + *[0-9a-f]*: f2 07 0e 49 addabs r9,r9,r7 |
| 11178 | + *[0-9a-f]*: f0 0c 0e 42 addabs r2,r8,r12 |
| 11179 | + |
| 11180 | +[0-9a-f]* <mulnhh_w>: |
| 11181 | + *[0-9a-f]*: fe 0f 01 8f mulnhh\.w pc,pc:b,pc:b |
| 11182 | + *[0-9a-f]*: f8 0c 01 bc mulnhh\.w r12,r12:t,r12:t |
| 11183 | + *[0-9a-f]*: ea 05 01 b5 mulnhh\.w r5,r5:t,r5:t |
| 11184 | + *[0-9a-f]*: e8 04 01 84 mulnhh\.w r4,r4:b,r4:b |
| 11185 | + *[0-9a-f]*: fc 0e 01 be mulnhh\.w lr,lr:t,lr:t |
| 11186 | + *[0-9a-f]*: fa 09 01 ab mulnhh\.w r11,sp:t,r9:b |
| 11187 | + *[0-9a-f]*: e8 0e 01 9d mulnhh\.w sp,r4:b,lr:t |
| 11188 | + *[0-9a-f]*: e4 0b 01 ac mulnhh\.w r12,r2:t,r11:b |
| 11189 | + |
| 11190 | +[0-9a-f]* <mulnwh_d>: |
| 11191 | + *[0-9a-f]*: fe 0f 02 80 mulnwh\.d r0,pc,pc:b |
| 11192 | + *[0-9a-f]*: f8 0c 02 9e mulnwh\.d lr,r12,r12:t |
| 11193 | + *[0-9a-f]*: ea 05 02 98 mulnwh\.d r8,r5,r5:t |
| 11194 | + *[0-9a-f]*: e8 04 02 86 mulnwh\.d r6,r4,r4:b |
| 11195 | + *[0-9a-f]*: fc 0e 02 92 mulnwh\.d r2,lr,lr:t |
| 11196 | + *[0-9a-f]*: e6 02 02 9e mulnwh\.d lr,r3,r2:t |
| 11197 | + *[0-9a-f]*: ea 09 02 84 mulnwh\.d r4,r5,r9:b |
| 11198 | + *[0-9a-f]*: e8 04 02 9c mulnwh\.d r12,r4,r4:t |
| 11199 | + |
| 11200 | +[0-9a-f]* <machh_w>: |
| 11201 | + *[0-9a-f]*: fe 0f 04 8f machh\.w pc,pc:b,pc:b |
| 11202 | + *[0-9a-f]*: f8 0c 04 bc machh\.w r12,r12:t,r12:t |
| 11203 | + *[0-9a-f]*: ea 05 04 b5 machh\.w r5,r5:t,r5:t |
| 11204 | + *[0-9a-f]*: e8 04 04 84 machh\.w r4,r4:b,r4:b |
| 11205 | + *[0-9a-f]*: fc 0e 04 be machh\.w lr,lr:t,lr:t |
| 11206 | + *[0-9a-f]*: ea 01 04 9e machh\.w lr,r5:b,r1:t |
| 11207 | + *[0-9a-f]*: ec 07 04 89 machh\.w r9,r6:b,r7:b |
| 11208 | + *[0-9a-f]*: fc 0c 04 a5 machh\.w r5,lr:t,r12:b |
| 11209 | + |
| 11210 | +[0-9a-f]* <machh_d>: |
| 11211 | + *[0-9a-f]*: fe 0f 05 80 machh\.d r0,pc:b,pc:b |
| 11212 | + *[0-9a-f]*: f8 0c 05 be machh\.d lr,r12:t,r12:t |
| 11213 | + *[0-9a-f]*: ea 05 05 b8 machh\.d r8,r5:t,r5:t |
| 11214 | + *[0-9a-f]*: e8 04 05 86 machh\.d r6,r4:b,r4:b |
| 11215 | + *[0-9a-f]*: fc 0e 05 b2 machh\.d r2,lr:t,lr:t |
| 11216 | + *[0-9a-f]*: e0 08 05 8a machh\.d r10,r0:b,r8:b |
| 11217 | + *[0-9a-f]*: e8 05 05 9e machh\.d lr,r4:b,r5:t |
| 11218 | + *[0-9a-f]*: e0 04 05 98 machh\.d r8,r0:b,r4:t |
| 11219 | + |
| 11220 | +[0-9a-f]* <macsathh_w>: |
| 11221 | + *[0-9a-f]*: fe 0f 06 8f macsathh\.w pc,pc:b,pc:b |
| 11222 | + *[0-9a-f]*: f8 0c 06 bc macsathh\.w r12,r12:t,r12:t |
| 11223 | + *[0-9a-f]*: ea 05 06 b5 macsathh\.w r5,r5:t,r5:t |
| 11224 | + *[0-9a-f]*: e8 04 06 84 macsathh\.w r4,r4:b,r4:b |
| 11225 | + *[0-9a-f]*: fc 0e 06 be macsathh\.w lr,lr:t,lr:t |
| 11226 | + *[0-9a-f]*: ee 0f 06 b7 macsathh\.w r7,r7:t,pc:t |
| 11227 | + *[0-9a-f]*: e4 04 06 a4 macsathh\.w r4,r2:t,r4:b |
| 11228 | + *[0-9a-f]*: f0 03 06 b4 macsathh\.w r4,r8:t,r3:t |
| 11229 | + |
| 11230 | +[0-9a-f]* <mulhh_w>: |
| 11231 | + *[0-9a-f]*: fe 0f 07 8f mulhh\.w pc,pc:b,pc:b |
| 11232 | + *[0-9a-f]*: f8 0c 07 bc mulhh\.w r12,r12:t,r12:t |
| 11233 | + *[0-9a-f]*: ea 05 07 b5 mulhh\.w r5,r5:t,r5:t |
| 11234 | + *[0-9a-f]*: e8 04 07 84 mulhh\.w r4,r4:b,r4:b |
| 11235 | + *[0-9a-f]*: fc 0e 07 be mulhh\.w lr,lr:t,lr:t |
| 11236 | + *[0-9a-f]*: e8 09 07 a7 mulhh\.w r7,r4:t,r9:b |
| 11237 | + *[0-9a-f]*: e6 07 07 bf mulhh\.w pc,r3:t,r7:t |
| 11238 | + *[0-9a-f]*: e8 09 07 9f mulhh\.w pc,r4:b,r9:t |
| 11239 | + |
| 11240 | +[0-9a-f]* <mulsathh_h>: |
| 11241 | + *[0-9a-f]*: fe 0f 08 8f mulsathh\.h pc,pc:b,pc:b |
| 11242 | + *[0-9a-f]*: f8 0c 08 bc mulsathh\.h r12,r12:t,r12:t |
| 11243 | + *[0-9a-f]*: ea 05 08 b5 mulsathh\.h r5,r5:t,r5:t |
| 11244 | + *[0-9a-f]*: e8 04 08 84 mulsathh\.h r4,r4:b,r4:b |
| 11245 | + *[0-9a-f]*: fc 0e 08 be mulsathh\.h lr,lr:t,lr:t |
| 11246 | + *[0-9a-f]*: e2 0d 08 83 mulsathh\.h r3,r1:b,sp:b |
| 11247 | + *[0-9a-f]*: fc 0b 08 ab mulsathh\.h r11,lr:t,r11:b |
| 11248 | + *[0-9a-f]*: f0 0b 08 98 mulsathh\.h r8,r8:b,r11:t |
| 11249 | + |
| 11250 | +[0-9a-f]* <mulsathh_w>: |
| 11251 | + *[0-9a-f]*: fe 0f 09 8f mulsathh\.w pc,pc:b,pc:b |
| 11252 | + *[0-9a-f]*: f8 0c 09 bc mulsathh\.w r12,r12:t,r12:t |
| 11253 | + *[0-9a-f]*: ea 05 09 b5 mulsathh\.w r5,r5:t,r5:t |
| 11254 | + *[0-9a-f]*: e8 04 09 84 mulsathh\.w r4,r4:b,r4:b |
| 11255 | + *[0-9a-f]*: fc 0e 09 be mulsathh\.w lr,lr:t,lr:t |
| 11256 | + *[0-9a-f]*: f6 06 09 ae mulsathh\.w lr,r11:t,r6:b |
| 11257 | + *[0-9a-f]*: ec 07 09 96 mulsathh\.w r6,r6:b,r7:t |
| 11258 | + *[0-9a-f]*: e4 03 09 8a mulsathh\.w r10,r2:b,r3:b |
| 11259 | + |
| 11260 | +[0-9a-f]* <mulsatrndhh_h>: |
| 11261 | + *[0-9a-f]*: fe 0f 0a 8f mulsatrndhh\.h pc,pc:b,pc:b |
| 11262 | + *[0-9a-f]*: f8 0c 0a bc mulsatrndhh\.h r12,r12:t,r12:t |
| 11263 | + *[0-9a-f]*: ea 05 0a b5 mulsatrndhh\.h r5,r5:t,r5:t |
| 11264 | + *[0-9a-f]*: e8 04 0a 84 mulsatrndhh\.h r4,r4:b,r4:b |
| 11265 | + *[0-9a-f]*: fc 0e 0a be mulsatrndhh\.h lr,lr:t,lr:t |
| 11266 | + *[0-9a-f]*: ec 09 0a 8b mulsatrndhh\.h r11,r6:b,r9:b |
| 11267 | + *[0-9a-f]*: e6 08 0a 9b mulsatrndhh\.h r11,r3:b,r8:t |
| 11268 | + *[0-9a-f]*: fa 07 0a b5 mulsatrndhh\.h r5,sp:t,r7:t |
| 11269 | + |
| 11270 | +[0-9a-f]* <mulsatrndwh_w>: |
| 11271 | + *[0-9a-f]*: fe 0f 0b 8f mulsatrndwh\.w pc,pc,pc:b |
| 11272 | + *[0-9a-f]*: f8 0c 0b 9c mulsatrndwh\.w r12,r12,r12:t |
| 11273 | + *[0-9a-f]*: ea 05 0b 95 mulsatrndwh\.w r5,r5,r5:t |
| 11274 | + *[0-9a-f]*: e8 04 0b 84 mulsatrndwh\.w r4,r4,r4:b |
| 11275 | + *[0-9a-f]*: fc 0e 0b 9e mulsatrndwh\.w lr,lr,lr:t |
| 11276 | + *[0-9a-f]*: f8 00 0b 85 mulsatrndwh\.w r5,r12,r0:b |
| 11277 | + *[0-9a-f]*: f4 0f 0b 87 mulsatrndwh\.w r7,r10,pc:b |
| 11278 | + *[0-9a-f]*: f0 05 0b 9a mulsatrndwh\.w r10,r8,r5:t |
| 11279 | + |
| 11280 | +[0-9a-f]* <macwh_d>: |
| 11281 | + *[0-9a-f]*: fe 0f 0c 80 macwh\.d r0,pc,pc:b |
| 11282 | + *[0-9a-f]*: f8 0c 0c 9e macwh\.d lr,r12,r12:t |
| 11283 | + *[0-9a-f]*: ea 05 0c 98 macwh\.d r8,r5,r5:t |
| 11284 | + *[0-9a-f]*: e8 04 0c 86 macwh\.d r6,r4,r4:b |
| 11285 | + *[0-9a-f]*: fc 0e 0c 92 macwh\.d r2,lr,lr:t |
| 11286 | + *[0-9a-f]*: f4 0c 0c 94 macwh\.d r4,r10,r12:t |
| 11287 | + *[0-9a-f]*: ee 0d 0c 84 macwh\.d r4,r7,sp:b |
| 11288 | + *[0-9a-f]*: f2 0b 0c 8e macwh\.d lr,r9,r11:b |
| 11289 | + |
| 11290 | +[0-9a-f]* <mulwh_d>: |
| 11291 | + *[0-9a-f]*: fe 0f 0d 80 mulwh\.d r0,pc,pc:b |
| 11292 | + *[0-9a-f]*: f8 0c 0d 9e mulwh\.d lr,r12,r12:t |
| 11293 | + *[0-9a-f]*: ea 05 0d 98 mulwh\.d r8,r5,r5:t |
| 11294 | + *[0-9a-f]*: e8 04 0d 86 mulwh\.d r6,r4,r4:b |
| 11295 | + *[0-9a-f]*: fc 0e 0d 92 mulwh\.d r2,lr,lr:t |
| 11296 | + *[0-9a-f]*: ea 01 0d 8c mulwh\.d r12,r5,r1:b |
| 11297 | + *[0-9a-f]*: e2 03 0d 90 mulwh\.d r0,r1,r3:t |
| 11298 | + *[0-9a-f]*: f2 02 0d 80 mulwh\.d r0,r9,r2:b |
| 11299 | + |
| 11300 | +[0-9a-f]* <mulsatwh_w>: |
| 11301 | + *[0-9a-f]*: fe 0f 0e 8f mulsatwh\.w pc,pc,pc:b |
| 11302 | + *[0-9a-f]*: f8 0c 0e 9c mulsatwh\.w r12,r12,r12:t |
| 11303 | + *[0-9a-f]*: ea 05 0e 95 mulsatwh\.w r5,r5,r5:t |
| 11304 | + *[0-9a-f]*: e8 04 0e 84 mulsatwh\.w r4,r4,r4:b |
| 11305 | + *[0-9a-f]*: fc 0e 0e 9e mulsatwh\.w lr,lr,lr:t |
| 11306 | + *[0-9a-f]*: fe 0a 0e 9b mulsatwh\.w r11,pc,r10:t |
| 11307 | + *[0-9a-f]*: f8 09 0e 9d mulsatwh\.w sp,r12,r9:t |
| 11308 | + *[0-9a-f]*: e6 02 0e 90 mulsatwh\.w r0,r3,r2:t |
| 11309 | + |
| 11310 | +[0-9a-f]* <ldw7>: |
| 11311 | + *[0-9a-f]*: fe 0f 0f 8f ld\.w pc,pc\[pc:b<<2\] |
| 11312 | + *[0-9a-f]*: f8 0c 0f bc ld\.w r12,r12\[r12:t<<2\] |
| 11313 | + *[0-9a-f]*: ea 05 0f a5 ld\.w r5,r5\[r5:u<<2\] |
| 11314 | + *[0-9a-f]*: e8 04 0f 94 ld\.w r4,r4\[r4:l<<2\] |
| 11315 | + *[0-9a-f]*: fc 0e 0f 9e ld\.w lr,lr\[lr:l<<2\] |
| 11316 | + *[0-9a-f]*: f4 06 0f 99 ld\.w r9,r10\[r6:l<<2\] |
| 11317 | + *[0-9a-f]*: f4 0a 0f 82 ld\.w r2,r10\[r10:b<<2\] |
| 11318 | + *[0-9a-f]*: ea 0f 0f 8b ld\.w r11,r5\[pc:b<<2\] |
| 11319 | + |
| 11320 | +[0-9a-f]* <satadd_w>: |
| 11321 | + *[0-9a-f]*: fe 0f 00 cf satadd\.w pc,pc,pc |
| 11322 | + *[0-9a-f]*: f8 0c 00 cc satadd\.w r12,r12,r12 |
| 11323 | + *[0-9a-f]*: ea 05 00 c5 satadd\.w r5,r5,r5 |
| 11324 | + *[0-9a-f]*: e8 04 00 c4 satadd\.w r4,r4,r4 |
| 11325 | + *[0-9a-f]*: fc 0e 00 ce satadd\.w lr,lr,lr |
| 11326 | + *[0-9a-f]*: f0 0b 00 c4 satadd\.w r4,r8,r11 |
| 11327 | + *[0-9a-f]*: f8 06 00 c3 satadd\.w r3,r12,r6 |
| 11328 | + *[0-9a-f]*: fc 09 00 c3 satadd\.w r3,lr,r9 |
| 11329 | + |
| 11330 | +[0-9a-f]* <satsub_w1>: |
| 11331 | + *[0-9a-f]*: fe 0f 01 cf satsub\.w pc,pc,pc |
| 11332 | + *[0-9a-f]*: f8 0c 01 cc satsub\.w r12,r12,r12 |
| 11333 | + *[0-9a-f]*: ea 05 01 c5 satsub\.w r5,r5,r5 |
| 11334 | + *[0-9a-f]*: e8 04 01 c4 satsub\.w r4,r4,r4 |
| 11335 | + *[0-9a-f]*: fc 0e 01 ce satsub\.w lr,lr,lr |
| 11336 | + *[0-9a-f]*: fa 00 01 c8 satsub\.w r8,sp,r0 |
| 11337 | + *[0-9a-f]*: f0 04 01 c9 satsub\.w r9,r8,r4 |
| 11338 | + *[0-9a-f]*: fc 02 01 cf satsub\.w pc,lr,r2 |
| 11339 | + |
| 11340 | +[0-9a-f]* <satadd_h>: |
| 11341 | + *[0-9a-f]*: fe 0f 02 cf satadd\.h pc,pc,pc |
| 11342 | + *[0-9a-f]*: f8 0c 02 cc satadd\.h r12,r12,r12 |
| 11343 | + *[0-9a-f]*: ea 05 02 c5 satadd\.h r5,r5,r5 |
| 11344 | + *[0-9a-f]*: e8 04 02 c4 satadd\.h r4,r4,r4 |
| 11345 | + *[0-9a-f]*: fc 0e 02 ce satadd\.h lr,lr,lr |
| 11346 | + *[0-9a-f]*: e6 09 02 c7 satadd\.h r7,r3,r9 |
| 11347 | + *[0-9a-f]*: e0 02 02 c1 satadd\.h r1,r0,r2 |
| 11348 | + *[0-9a-f]*: e8 0e 02 c1 satadd\.h r1,r4,lr |
| 11349 | + |
| 11350 | +[0-9a-f]* <satsub_h>: |
| 11351 | + *[0-9a-f]*: fe 0f 03 cf satsub\.h pc,pc,pc |
| 11352 | + *[0-9a-f]*: f8 0c 03 cc satsub\.h r12,r12,r12 |
| 11353 | + *[0-9a-f]*: ea 05 03 c5 satsub\.h r5,r5,r5 |
| 11354 | + *[0-9a-f]*: e8 04 03 c4 satsub\.h r4,r4,r4 |
| 11355 | + *[0-9a-f]*: fc 0e 03 ce satsub\.h lr,lr,lr |
| 11356 | + *[0-9a-f]*: fc 03 03 ce satsub\.h lr,lr,r3 |
| 11357 | + *[0-9a-f]*: ec 05 03 cb satsub\.h r11,r6,r5 |
| 11358 | + *[0-9a-f]*: fa 00 03 c3 satsub\.h r3,sp,r0 |
| 11359 | + |
| 11360 | +[0-9a-f]* <mul3>: |
| 11361 | + *[0-9a-f]*: fe 0f 10 00 mul pc,pc,0 |
| 11362 | + *[0-9a-f]*: f8 0c 10 ff mul r12,r12,-1 |
| 11363 | + *[0-9a-f]*: ea 05 10 80 mul r5,r5,-128 |
| 11364 | + *[0-9a-f]*: e8 04 10 7f mul r4,r4,127 |
| 11365 | + *[0-9a-f]*: fc 0e 10 01 mul lr,lr,1 |
| 11366 | + *[0-9a-f]*: e4 0c 10 f9 mul r12,r2,-7 |
| 11367 | + *[0-9a-f]*: fe 01 10 5f mul r1,pc,95 |
| 11368 | + *[0-9a-f]*: ec 04 10 13 mul r4,r6,19 |
| 11369 | + |
| 11370 | +[0-9a-f]* <rsub2>: |
| 11371 | + *[0-9a-f]*: fe 0f 11 00 rsub pc,pc,0 |
| 11372 | + *[0-9a-f]*: f8 0c 11 ff rsub r12,r12,-1 |
| 11373 | + *[0-9a-f]*: ea 05 11 80 rsub r5,r5,-128 |
| 11374 | + *[0-9a-f]*: e8 04 11 7f rsub r4,r4,127 |
| 11375 | + *[0-9a-f]*: fc 0e 11 01 rsub lr,lr,1 |
| 11376 | + *[0-9a-f]*: fc 09 11 60 rsub r9,lr,96 |
| 11377 | + *[0-9a-f]*: e2 0b 11 38 rsub r11,r1,56 |
| 11378 | + *[0-9a-f]*: ee 00 11 a9 rsub r0,r7,-87 |
| 11379 | + |
| 11380 | +[0-9a-f]* <clz>: |
| 11381 | + *[0-9a-f]*: fe 0f 12 00 clz pc,pc |
| 11382 | + *[0-9a-f]*: f8 0c 12 00 clz r12,r12 |
| 11383 | + *[0-9a-f]*: ea 05 12 00 clz r5,r5 |
| 11384 | + *[0-9a-f]*: e8 04 12 00 clz r4,r4 |
| 11385 | + *[0-9a-f]*: fc 0e 12 00 clz lr,lr |
| 11386 | + *[0-9a-f]*: e6 02 12 00 clz r2,r3 |
| 11387 | + *[0-9a-f]*: f6 05 12 00 clz r5,r11 |
| 11388 | + *[0-9a-f]*: e6 0f 12 00 clz pc,r3 |
| 11389 | + |
| 11390 | +[0-9a-f]* <cpc1>: |
| 11391 | + *[0-9a-f]*: fe 0f 13 00 cpc pc,pc |
| 11392 | + *[0-9a-f]*: f8 0c 13 00 cpc r12,r12 |
| 11393 | + *[0-9a-f]*: ea 05 13 00 cpc r5,r5 |
| 11394 | + *[0-9a-f]*: e8 04 13 00 cpc r4,r4 |
| 11395 | + *[0-9a-f]*: fc 0e 13 00 cpc lr,lr |
| 11396 | + *[0-9a-f]*: e8 0f 13 00 cpc pc,r4 |
| 11397 | + *[0-9a-f]*: f2 05 13 00 cpc r5,r9 |
| 11398 | + *[0-9a-f]*: ee 06 13 00 cpc r6,r7 |
| 11399 | + |
| 11400 | +[0-9a-f]* <asr3>: |
| 11401 | + *[0-9a-f]*: fe 0f 14 00 asr pc,pc,0x0 |
| 11402 | + *[0-9a-f]*: f8 0c 14 1f asr r12,r12,0x1f |
| 11403 | + *[0-9a-f]*: ea 05 14 10 asr r5,r5,0x10 |
| 11404 | + *[0-9a-f]*: e8 04 14 0f asr r4,r4,0xf |
| 11405 | + *[0-9a-f]*: fc 0e 14 01 asr lr,lr,0x1 |
| 11406 | + *[0-9a-f]*: f6 04 14 13 asr r4,r11,0x13 |
| 11407 | + *[0-9a-f]*: fe 0d 14 1a asr sp,pc,0x1a |
| 11408 | + *[0-9a-f]*: fa 0b 14 08 asr r11,sp,0x8 |
| 11409 | + |
| 11410 | +[0-9a-f]* <lsl3>: |
| 11411 | + *[0-9a-f]*: fe 0f 15 00 lsl pc,pc,0x0 |
| 11412 | + *[0-9a-f]*: f8 0c 15 1f lsl r12,r12,0x1f |
| 11413 | + *[0-9a-f]*: ea 05 15 10 lsl r5,r5,0x10 |
| 11414 | + *[0-9a-f]*: e8 04 15 0f lsl r4,r4,0xf |
| 11415 | + *[0-9a-f]*: fc 0e 15 01 lsl lr,lr,0x1 |
| 11416 | + *[0-9a-f]*: f4 08 15 11 lsl r8,r10,0x11 |
| 11417 | + *[0-9a-f]*: fc 02 15 03 lsl r2,lr,0x3 |
| 11418 | + *[0-9a-f]*: f6 0e 15 0e lsl lr,r11,0xe |
| 11419 | + |
| 11420 | +[0-9a-f]* <lsr3>: |
| 11421 | + *[0-9a-f]*: fe 0f 16 00 lsr pc,pc,0x0 |
| 11422 | + *[0-9a-f]*: f8 0c 16 1f lsr r12,r12,0x1f |
| 11423 | + *[0-9a-f]*: ea 05 16 10 lsr r5,r5,0x10 |
| 11424 | + *[0-9a-f]*: e8 04 16 0f lsr r4,r4,0xf |
| 11425 | + *[0-9a-f]*: fc 0e 16 01 lsr lr,lr,0x1 |
| 11426 | + *[0-9a-f]*: e6 04 16 1f lsr r4,r3,0x1f |
| 11427 | + *[0-9a-f]*: f2 0f 16 0e lsr pc,r9,0xe |
| 11428 | + *[0-9a-f]*: e0 03 16 06 lsr r3,r0,0x6 |
| 11429 | + |
| 11430 | +[0-9a-f]* <movc1>: |
| 11431 | + *[0-9a-f]*: fe 0f 17 00 moveq pc,pc |
| 11432 | + *[0-9a-f]*: f8 0c 17 f0 moval r12,r12 |
| 11433 | + *[0-9a-f]*: ea 05 17 80 movls r5,r5 |
| 11434 | + *[0-9a-f]*: e8 04 17 70 movpl r4,r4 |
| 11435 | + *[0-9a-f]*: fc 0e 17 10 movne lr,lr |
| 11436 | + *[0-9a-f]*: f6 0f 17 10 movne pc,r11 |
| 11437 | + *[0-9a-f]*: e4 0a 17 60 movmi r10,r2 |
| 11438 | + *[0-9a-f]*: f8 08 17 80 movls r8,r12 |
| 11439 | + |
| 11440 | +[0-9a-f]* <padd_h>: |
| 11441 | + *[0-9a-f]*: fe 0f 20 0f padd\.h pc,pc,pc |
| 11442 | + *[0-9a-f]*: f8 0c 20 0c padd\.h r12,r12,r12 |
| 11443 | + *[0-9a-f]*: ea 05 20 05 padd\.h r5,r5,r5 |
| 11444 | + *[0-9a-f]*: e8 04 20 04 padd\.h r4,r4,r4 |
| 11445 | + *[0-9a-f]*: fc 0e 20 0e padd\.h lr,lr,lr |
| 11446 | + *[0-9a-f]*: e4 07 20 08 padd\.h r8,r2,r7 |
| 11447 | + *[0-9a-f]*: e0 03 20 00 padd\.h r0,r0,r3 |
| 11448 | + *[0-9a-f]*: f6 06 20 0d padd\.h sp,r11,r6 |
| 11449 | + |
| 11450 | +[0-9a-f]* <psub_h>: |
| 11451 | + *[0-9a-f]*: fe 0f 20 1f psub\.h pc,pc,pc |
| 11452 | + *[0-9a-f]*: f8 0c 20 1c psub\.h r12,r12,r12 |
| 11453 | + *[0-9a-f]*: ea 05 20 15 psub\.h r5,r5,r5 |
| 11454 | + *[0-9a-f]*: e8 04 20 14 psub\.h r4,r4,r4 |
| 11455 | + *[0-9a-f]*: fc 0e 20 1e psub\.h lr,lr,lr |
| 11456 | + *[0-9a-f]*: ec 08 20 1e psub\.h lr,r6,r8 |
| 11457 | + *[0-9a-f]*: e2 0d 20 10 psub\.h r0,r1,sp |
| 11458 | + *[0-9a-f]*: fe 0d 20 1f psub\.h pc,pc,sp |
| 11459 | + |
| 11460 | +[0-9a-f]* <paddx_h>: |
| 11461 | + *[0-9a-f]*: fe 0f 20 2f paddx\.h pc,pc,pc |
| 11462 | + *[0-9a-f]*: f8 0c 20 2c paddx\.h r12,r12,r12 |
| 11463 | + *[0-9a-f]*: ea 05 20 25 paddx\.h r5,r5,r5 |
| 11464 | + *[0-9a-f]*: e8 04 20 24 paddx\.h r4,r4,r4 |
| 11465 | + *[0-9a-f]*: fc 0e 20 2e paddx\.h lr,lr,lr |
| 11466 | + *[0-9a-f]*: fe 01 20 2f paddx\.h pc,pc,r1 |
| 11467 | + *[0-9a-f]*: e8 05 20 2a paddx\.h r10,r4,r5 |
| 11468 | + *[0-9a-f]*: fe 02 20 25 paddx\.h r5,pc,r2 |
| 11469 | + |
| 11470 | +[0-9a-f]* <psubx_h>: |
| 11471 | + *[0-9a-f]*: fe 0f 20 3f psubx\.h pc,pc,pc |
| 11472 | + *[0-9a-f]*: f8 0c 20 3c psubx\.h r12,r12,r12 |
| 11473 | + *[0-9a-f]*: ea 05 20 35 psubx\.h r5,r5,r5 |
| 11474 | + *[0-9a-f]*: e8 04 20 34 psubx\.h r4,r4,r4 |
| 11475 | + *[0-9a-f]*: fc 0e 20 3e psubx\.h lr,lr,lr |
| 11476 | + *[0-9a-f]*: f8 05 20 35 psubx\.h r5,r12,r5 |
| 11477 | + *[0-9a-f]*: f0 03 20 33 psubx\.h r3,r8,r3 |
| 11478 | + *[0-9a-f]*: e4 03 20 35 psubx\.h r5,r2,r3 |
| 11479 | + |
| 11480 | +[0-9a-f]* <padds_sh>: |
| 11481 | + *[0-9a-f]*: fe 0f 20 4f padds\.sh pc,pc,pc |
| 11482 | + *[0-9a-f]*: f8 0c 20 4c padds\.sh r12,r12,r12 |
| 11483 | + *[0-9a-f]*: ea 05 20 45 padds\.sh r5,r5,r5 |
| 11484 | + *[0-9a-f]*: e8 04 20 44 padds\.sh r4,r4,r4 |
| 11485 | + *[0-9a-f]*: fc 0e 20 4e padds\.sh lr,lr,lr |
| 11486 | + *[0-9a-f]*: fc 02 20 49 padds\.sh r9,lr,r2 |
| 11487 | + *[0-9a-f]*: f0 01 20 46 padds\.sh r6,r8,r1 |
| 11488 | + *[0-9a-f]*: e8 0a 20 46 padds\.sh r6,r4,r10 |
| 11489 | + |
| 11490 | +[0-9a-f]* <psubs_sh>: |
| 11491 | + *[0-9a-f]*: fe 0f 20 5f psubs\.sh pc,pc,pc |
| 11492 | + *[0-9a-f]*: f8 0c 20 5c psubs\.sh r12,r12,r12 |
| 11493 | + *[0-9a-f]*: ea 05 20 55 psubs\.sh r5,r5,r5 |
| 11494 | + *[0-9a-f]*: e8 04 20 54 psubs\.sh r4,r4,r4 |
| 11495 | + *[0-9a-f]*: fc 0e 20 5e psubs\.sh lr,lr,lr |
| 11496 | + *[0-9a-f]*: fc 0b 20 56 psubs\.sh r6,lr,r11 |
| 11497 | + *[0-9a-f]*: f8 04 20 52 psubs\.sh r2,r12,r4 |
| 11498 | + *[0-9a-f]*: f2 00 20 50 psubs\.sh r0,r9,r0 |
| 11499 | + |
| 11500 | +[0-9a-f]* <paddxs_sh>: |
| 11501 | + *[0-9a-f]*: fe 0f 20 6f paddxs\.sh pc,pc,pc |
| 11502 | + *[0-9a-f]*: f8 0c 20 6c paddxs\.sh r12,r12,r12 |
| 11503 | + *[0-9a-f]*: ea 05 20 65 paddxs\.sh r5,r5,r5 |
| 11504 | + *[0-9a-f]*: e8 04 20 64 paddxs\.sh r4,r4,r4 |
| 11505 | + *[0-9a-f]*: fc 0e 20 6e paddxs\.sh lr,lr,lr |
| 11506 | + *[0-9a-f]*: e6 09 20 60 paddxs\.sh r0,r3,r9 |
| 11507 | + *[0-9a-f]*: f4 0b 20 6f paddxs\.sh pc,r10,r11 |
| 11508 | + *[0-9a-f]*: f4 0f 20 6f paddxs\.sh pc,r10,pc |
| 11509 | + |
| 11510 | +[0-9a-f]* <psubxs_sh>: |
| 11511 | + *[0-9a-f]*: fe 0f 20 7f psubxs\.sh pc,pc,pc |
| 11512 | + *[0-9a-f]*: f8 0c 20 7c psubxs\.sh r12,r12,r12 |
| 11513 | + *[0-9a-f]*: ea 05 20 75 psubxs\.sh r5,r5,r5 |
| 11514 | + *[0-9a-f]*: e8 04 20 74 psubxs\.sh r4,r4,r4 |
| 11515 | + *[0-9a-f]*: fc 0e 20 7e psubxs\.sh lr,lr,lr |
| 11516 | + *[0-9a-f]*: e8 04 20 77 psubxs\.sh r7,r4,r4 |
| 11517 | + *[0-9a-f]*: f0 03 20 77 psubxs\.sh r7,r8,r3 |
| 11518 | + *[0-9a-f]*: ec 05 20 7f psubxs\.sh pc,r6,r5 |
| 11519 | + |
| 11520 | +[0-9a-f]* <padds_uh>: |
| 11521 | + *[0-9a-f]*: fe 0f 20 8f padds\.uh pc,pc,pc |
| 11522 | + *[0-9a-f]*: f8 0c 20 8c padds\.uh r12,r12,r12 |
| 11523 | + *[0-9a-f]*: ea 05 20 85 padds\.uh r5,r5,r5 |
| 11524 | + *[0-9a-f]*: e8 04 20 84 padds\.uh r4,r4,r4 |
| 11525 | + *[0-9a-f]*: fc 0e 20 8e padds\.uh lr,lr,lr |
| 11526 | + *[0-9a-f]*: f6 07 20 8c padds\.uh r12,r11,r7 |
| 11527 | + *[0-9a-f]*: f0 0e 20 87 padds\.uh r7,r8,lr |
| 11528 | + *[0-9a-f]*: f2 07 20 86 padds\.uh r6,r9,r7 |
| 11529 | + |
| 11530 | +[0-9a-f]* <psubs_uh>: |
| 11531 | + *[0-9a-f]*: fe 0f 20 9f psubs\.uh pc,pc,pc |
| 11532 | + *[0-9a-f]*: f8 0c 20 9c psubs\.uh r12,r12,r12 |
| 11533 | + *[0-9a-f]*: ea 05 20 95 psubs\.uh r5,r5,r5 |
| 11534 | + *[0-9a-f]*: e8 04 20 94 psubs\.uh r4,r4,r4 |
| 11535 | + *[0-9a-f]*: fc 0e 20 9e psubs\.uh lr,lr,lr |
| 11536 | + *[0-9a-f]*: f4 06 20 9e psubs\.uh lr,r10,r6 |
| 11537 | + *[0-9a-f]*: e4 0f 20 9d psubs\.uh sp,r2,pc |
| 11538 | + *[0-9a-f]*: f2 02 20 92 psubs\.uh r2,r9,r2 |
| 11539 | + |
| 11540 | +[0-9a-f]* <paddxs_uh>: |
| 11541 | + *[0-9a-f]*: fe 0f 20 af paddxs\.uh pc,pc,pc |
| 11542 | + *[0-9a-f]*: f8 0c 20 ac paddxs\.uh r12,r12,r12 |
| 11543 | + *[0-9a-f]*: ea 05 20 a5 paddxs\.uh r5,r5,r5 |
| 11544 | + *[0-9a-f]*: e8 04 20 a4 paddxs\.uh r4,r4,r4 |
| 11545 | + *[0-9a-f]*: fc 0e 20 ae paddxs\.uh lr,lr,lr |
| 11546 | + *[0-9a-f]*: f2 05 20 a7 paddxs\.uh r7,r9,r5 |
| 11547 | + *[0-9a-f]*: e2 04 20 a9 paddxs\.uh r9,r1,r4 |
| 11548 | + *[0-9a-f]*: e4 03 20 a5 paddxs\.uh r5,r2,r3 |
| 11549 | + |
| 11550 | +[0-9a-f]* <psubxs_uh>: |
| 11551 | + *[0-9a-f]*: fe 0f 20 bf psubxs\.uh pc,pc,pc |
| 11552 | + *[0-9a-f]*: f8 0c 20 bc psubxs\.uh r12,r12,r12 |
| 11553 | + *[0-9a-f]*: ea 05 20 b5 psubxs\.uh r5,r5,r5 |
| 11554 | + *[0-9a-f]*: e8 04 20 b4 psubxs\.uh r4,r4,r4 |
| 11555 | + *[0-9a-f]*: fc 0e 20 be psubxs\.uh lr,lr,lr |
| 11556 | + *[0-9a-f]*: ea 0d 20 bd psubxs\.uh sp,r5,sp |
| 11557 | + *[0-9a-f]*: ec 06 20 bd psubxs\.uh sp,r6,r6 |
| 11558 | + *[0-9a-f]*: f6 08 20 b3 psubxs\.uh r3,r11,r8 |
| 11559 | + |
| 11560 | +[0-9a-f]* <paddh_sh>: |
| 11561 | + *[0-9a-f]*: fe 0f 20 cf paddh\.sh pc,pc,pc |
| 11562 | + *[0-9a-f]*: f8 0c 20 cc paddh\.sh r12,r12,r12 |
| 11563 | + *[0-9a-f]*: ea 05 20 c5 paddh\.sh r5,r5,r5 |
| 11564 | + *[0-9a-f]*: e8 04 20 c4 paddh\.sh r4,r4,r4 |
| 11565 | + *[0-9a-f]*: fc 0e 20 ce paddh\.sh lr,lr,lr |
| 11566 | + *[0-9a-f]*: fa 03 20 cc paddh\.sh r12,sp,r3 |
| 11567 | + *[0-9a-f]*: ea 03 20 cf paddh\.sh pc,r5,r3 |
| 11568 | + *[0-9a-f]*: f0 0d 20 c8 paddh\.sh r8,r8,sp |
| 11569 | + |
| 11570 | +[0-9a-f]* <psubh_sh>: |
| 11571 | + *[0-9a-f]*: fe 0f 20 df psubh\.sh pc,pc,pc |
| 11572 | + *[0-9a-f]*: f8 0c 20 dc psubh\.sh r12,r12,r12 |
| 11573 | + *[0-9a-f]*: ea 05 20 d5 psubh\.sh r5,r5,r5 |
| 11574 | + *[0-9a-f]*: e8 04 20 d4 psubh\.sh r4,r4,r4 |
| 11575 | + *[0-9a-f]*: fc 0e 20 de psubh\.sh lr,lr,lr |
| 11576 | + *[0-9a-f]*: ea 08 20 d1 psubh\.sh r1,r5,r8 |
| 11577 | + *[0-9a-f]*: e6 06 20 d7 psubh\.sh r7,r3,r6 |
| 11578 | + *[0-9a-f]*: e6 03 20 d4 psubh\.sh r4,r3,r3 |
| 11579 | + |
| 11580 | +[0-9a-f]* <paddxh_sh>: |
| 11581 | + *[0-9a-f]*: fe 0f 20 ef paddxh\.sh pc,pc,pc |
| 11582 | + *[0-9a-f]*: f8 0c 20 ec paddxh\.sh r12,r12,r12 |
| 11583 | + *[0-9a-f]*: ea 05 20 e5 paddxh\.sh r5,r5,r5 |
| 11584 | + *[0-9a-f]*: e8 04 20 e4 paddxh\.sh r4,r4,r4 |
| 11585 | + *[0-9a-f]*: fc 0e 20 ee paddxh\.sh lr,lr,lr |
| 11586 | + *[0-9a-f]*: e0 04 20 e6 paddxh\.sh r6,r0,r4 |
| 11587 | + *[0-9a-f]*: f0 09 20 e9 paddxh\.sh r9,r8,r9 |
| 11588 | + *[0-9a-f]*: e0 0d 20 e3 paddxh\.sh r3,r0,sp |
| 11589 | + |
| 11590 | +[0-9a-f]* <psubxh_sh>: |
| 11591 | + *[0-9a-f]*: fe 0f 20 ff psubxh\.sh pc,pc,pc |
| 11592 | + *[0-9a-f]*: f8 0c 20 fc psubxh\.sh r12,r12,r12 |
| 11593 | + *[0-9a-f]*: ea 05 20 f5 psubxh\.sh r5,r5,r5 |
| 11594 | + *[0-9a-f]*: e8 04 20 f4 psubxh\.sh r4,r4,r4 |
| 11595 | + *[0-9a-f]*: fc 0e 20 fe psubxh\.sh lr,lr,lr |
| 11596 | + *[0-9a-f]*: fe 0c 20 f4 psubxh\.sh r4,pc,r12 |
| 11597 | + *[0-9a-f]*: e8 06 20 f8 psubxh\.sh r8,r4,r6 |
| 11598 | + *[0-9a-f]*: f2 04 20 fc psubxh\.sh r12,r9,r4 |
| 11599 | + |
| 11600 | +[0-9a-f]* <paddsub_h>: |
| 11601 | + *[0-9a-f]*: fe 0f 21 0f paddsub\.h pc,pc:b,pc:b |
| 11602 | + *[0-9a-f]*: f8 0c 21 3c paddsub\.h r12,r12:t,r12:t |
| 11603 | + *[0-9a-f]*: ea 05 21 35 paddsub\.h r5,r5:t,r5:t |
| 11604 | + *[0-9a-f]*: e8 04 21 04 paddsub\.h r4,r4:b,r4:b |
| 11605 | + *[0-9a-f]*: fc 0e 21 3e paddsub\.h lr,lr:t,lr:t |
| 11606 | + *[0-9a-f]*: e4 0e 21 25 paddsub\.h r5,r2:t,lr:b |
| 11607 | + *[0-9a-f]*: e2 08 21 07 paddsub\.h r7,r1:b,r8:b |
| 11608 | + *[0-9a-f]*: f4 05 21 36 paddsub\.h r6,r10:t,r5:t |
| 11609 | + |
| 11610 | +[0-9a-f]* <psubadd_h>: |
| 11611 | + *[0-9a-f]*: fe 0f 21 4f psubadd\.h pc,pc:b,pc:b |
| 11612 | + *[0-9a-f]*: f8 0c 21 7c psubadd\.h r12,r12:t,r12:t |
| 11613 | + *[0-9a-f]*: ea 05 21 75 psubadd\.h r5,r5:t,r5:t |
| 11614 | + *[0-9a-f]*: e8 04 21 44 psubadd\.h r4,r4:b,r4:b |
| 11615 | + *[0-9a-f]*: fc 0e 21 7e psubadd\.h lr,lr:t,lr:t |
| 11616 | + *[0-9a-f]*: f6 08 21 79 psubadd\.h r9,r11:t,r8:t |
| 11617 | + *[0-9a-f]*: ee 0e 21 7a psubadd\.h r10,r7:t,lr:t |
| 11618 | + *[0-9a-f]*: fe 0f 21 66 psubadd\.h r6,pc:t,pc:b |
| 11619 | + |
| 11620 | +[0-9a-f]* <paddsubs_sh>: |
| 11621 | + *[0-9a-f]*: fe 0f 21 8f paddsubs\.sh pc,pc:b,pc:b |
| 11622 | + *[0-9a-f]*: f8 0c 21 bc paddsubs\.sh r12,r12:t,r12:t |
| 11623 | + *[0-9a-f]*: ea 05 21 b5 paddsubs\.sh r5,r5:t,r5:t |
| 11624 | + *[0-9a-f]*: e8 04 21 84 paddsubs\.sh r4,r4:b,r4:b |
| 11625 | + *[0-9a-f]*: fc 0e 21 be paddsubs\.sh lr,lr:t,lr:t |
| 11626 | + *[0-9a-f]*: fc 00 21 a0 paddsubs\.sh r0,lr:t,r0:b |
| 11627 | + *[0-9a-f]*: e4 04 21 b9 paddsubs\.sh r9,r2:t,r4:t |
| 11628 | + *[0-9a-f]*: f2 0d 21 bc paddsubs\.sh r12,r9:t,sp:t |
| 11629 | + |
| 11630 | +[0-9a-f]* <psubadds_sh>: |
| 11631 | + *[0-9a-f]*: fe 0f 21 cf psubadds\.sh pc,pc:b,pc:b |
| 11632 | + *[0-9a-f]*: f8 0c 21 fc psubadds\.sh r12,r12:t,r12:t |
| 11633 | + *[0-9a-f]*: ea 05 21 f5 psubadds\.sh r5,r5:t,r5:t |
| 11634 | + *[0-9a-f]*: e8 04 21 c4 psubadds\.sh r4,r4:b,r4:b |
| 11635 | + *[0-9a-f]*: fc 0e 21 fe psubadds\.sh lr,lr:t,lr:t |
| 11636 | + *[0-9a-f]*: fc 01 21 df psubadds\.sh pc,lr:b,r1:t |
| 11637 | + *[0-9a-f]*: e6 0c 21 cb psubadds\.sh r11,r3:b,r12:b |
| 11638 | + *[0-9a-f]*: e4 08 21 fa psubadds\.sh r10,r2:t,r8:t |
| 11639 | + |
| 11640 | +[0-9a-f]* <paddsubs_uh>: |
| 11641 | + *[0-9a-f]*: fe 0f 22 0f paddsubs\.uh pc,pc:b,pc:b |
| 11642 | + *[0-9a-f]*: f8 0c 22 3c paddsubs\.uh r12,r12:t,r12:t |
| 11643 | + *[0-9a-f]*: ea 05 22 35 paddsubs\.uh r5,r5:t,r5:t |
| 11644 | + *[0-9a-f]*: e8 04 22 04 paddsubs\.uh r4,r4:b,r4:b |
| 11645 | + *[0-9a-f]*: fc 0e 22 3e paddsubs\.uh lr,lr:t,lr:t |
| 11646 | + *[0-9a-f]*: e4 03 22 09 paddsubs\.uh r9,r2:b,r3:b |
| 11647 | + *[0-9a-f]*: fa 07 22 1d paddsubs\.uh sp,sp:b,r7:t |
| 11648 | + *[0-9a-f]*: e0 0a 22 1e paddsubs\.uh lr,r0:b,r10:t |
| 11649 | + |
| 11650 | +[0-9a-f]* <psubadds_uh>: |
| 11651 | + *[0-9a-f]*: fe 0f 22 4f psubadds\.uh pc,pc:b,pc:b |
| 11652 | + *[0-9a-f]*: f8 0c 22 7c psubadds\.uh r12,r12:t,r12:t |
| 11653 | + *[0-9a-f]*: ea 05 22 75 psubadds\.uh r5,r5:t,r5:t |
| 11654 | + *[0-9a-f]*: e8 04 22 44 psubadds\.uh r4,r4:b,r4:b |
| 11655 | + *[0-9a-f]*: fc 0e 22 7e psubadds\.uh lr,lr:t,lr:t |
| 11656 | + *[0-9a-f]*: f2 0f 22 7c psubadds\.uh r12,r9:t,pc:t |
| 11657 | + *[0-9a-f]*: ec 08 22 48 psubadds\.uh r8,r6:b,r8:b |
| 11658 | + *[0-9a-f]*: f0 04 22 48 psubadds\.uh r8,r8:b,r4:b |
| 11659 | + |
| 11660 | +[0-9a-f]* <paddsubh_sh>: |
| 11661 | + *[0-9a-f]*: fe 0f 22 8f paddsubh\.sh pc,pc:b,pc:b |
| 11662 | + *[0-9a-f]*: f8 0c 22 bc paddsubh\.sh r12,r12:t,r12:t |
| 11663 | + *[0-9a-f]*: ea 05 22 b5 paddsubh\.sh r5,r5:t,r5:t |
| 11664 | + *[0-9a-f]*: e8 04 22 84 paddsubh\.sh r4,r4:b,r4:b |
| 11665 | + *[0-9a-f]*: fc 0e 22 be paddsubh\.sh lr,lr:t,lr:t |
| 11666 | + *[0-9a-f]*: f2 09 22 a8 paddsubh\.sh r8,r9:t,r9:b |
| 11667 | + *[0-9a-f]*: fa 01 22 b0 paddsubh\.sh r0,sp:t,r1:t |
| 11668 | + *[0-9a-f]*: e2 00 22 93 paddsubh\.sh r3,r1:b,r0:t |
| 11669 | + |
| 11670 | +[0-9a-f]* <psubaddh_sh>: |
| 11671 | + *[0-9a-f]*: fe 0f 22 cf psubaddh\.sh pc,pc:b,pc:b |
| 11672 | + *[0-9a-f]*: f8 0c 22 fc psubaddh\.sh r12,r12:t,r12:t |
| 11673 | + *[0-9a-f]*: ea 05 22 f5 psubaddh\.sh r5,r5:t,r5:t |
| 11674 | + *[0-9a-f]*: e8 04 22 c4 psubaddh\.sh r4,r4:b,r4:b |
| 11675 | + *[0-9a-f]*: fc 0e 22 fe psubaddh\.sh lr,lr:t,lr:t |
| 11676 | + *[0-9a-f]*: e6 0a 22 e7 psubaddh\.sh r7,r3:t,r10:b |
| 11677 | + *[0-9a-f]*: e4 01 22 f7 psubaddh\.sh r7,r2:t,r1:t |
| 11678 | + *[0-9a-f]*: e6 06 22 cb psubaddh\.sh r11,r3:b,r6:b |
| 11679 | + |
| 11680 | +[0-9a-f]* <padd_b>: |
| 11681 | + *[0-9a-f]*: fe 0f 23 0f padd\.b pc,pc,pc |
| 11682 | + *[0-9a-f]*: f8 0c 23 0c padd\.b r12,r12,r12 |
| 11683 | + *[0-9a-f]*: ea 05 23 05 padd\.b r5,r5,r5 |
| 11684 | + *[0-9a-f]*: e8 04 23 04 padd\.b r4,r4,r4 |
| 11685 | + *[0-9a-f]*: fc 0e 23 0e padd\.b lr,lr,lr |
| 11686 | + *[0-9a-f]*: ec 0f 23 02 padd\.b r2,r6,pc |
| 11687 | + *[0-9a-f]*: f2 0c 23 08 padd\.b r8,r9,r12 |
| 11688 | + *[0-9a-f]*: f8 03 23 05 padd\.b r5,r12,r3 |
| 11689 | + |
| 11690 | +[0-9a-f]* <psub_b>: |
| 11691 | + *[0-9a-f]*: fe 0f 23 1f psub\.b pc,pc,pc |
| 11692 | + *[0-9a-f]*: f8 0c 23 1c psub\.b r12,r12,r12 |
| 11693 | + *[0-9a-f]*: ea 05 23 15 psub\.b r5,r5,r5 |
| 11694 | + *[0-9a-f]*: e8 04 23 14 psub\.b r4,r4,r4 |
| 11695 | + *[0-9a-f]*: fc 0e 23 1e psub\.b lr,lr,lr |
| 11696 | + *[0-9a-f]*: f8 0f 23 10 psub\.b r0,r12,pc |
| 11697 | + *[0-9a-f]*: fa 0a 23 17 psub\.b r7,sp,r10 |
| 11698 | + *[0-9a-f]*: fa 0c 23 15 psub\.b r5,sp,r12 |
| 11699 | + |
| 11700 | +[0-9a-f]* <padds_sb>: |
| 11701 | + *[0-9a-f]*: fe 0f 23 2f padds\.sb pc,pc,pc |
| 11702 | + *[0-9a-f]*: f8 0c 23 2c padds\.sb r12,r12,r12 |
| 11703 | + *[0-9a-f]*: ea 05 23 25 padds\.sb r5,r5,r5 |
| 11704 | + *[0-9a-f]*: e8 04 23 24 padds\.sb r4,r4,r4 |
| 11705 | + *[0-9a-f]*: fc 0e 23 2e padds\.sb lr,lr,lr |
| 11706 | + *[0-9a-f]*: f6 04 23 2d padds\.sb sp,r11,r4 |
| 11707 | + *[0-9a-f]*: f4 0b 23 2b padds\.sb r11,r10,r11 |
| 11708 | + *[0-9a-f]*: f8 06 23 25 padds\.sb r5,r12,r6 |
| 11709 | + |
| 11710 | +[0-9a-f]* <psubs_sb>: |
| 11711 | + *[0-9a-f]*: fe 0f 23 3f psubs\.sb pc,pc,pc |
| 11712 | + *[0-9a-f]*: f8 0c 23 3c psubs\.sb r12,r12,r12 |
| 11713 | + *[0-9a-f]*: ea 05 23 35 psubs\.sb r5,r5,r5 |
| 11714 | + *[0-9a-f]*: e8 04 23 34 psubs\.sb r4,r4,r4 |
| 11715 | + *[0-9a-f]*: fc 0e 23 3e psubs\.sb lr,lr,lr |
| 11716 | + *[0-9a-f]*: ec 08 23 37 psubs\.sb r7,r6,r8 |
| 11717 | + *[0-9a-f]*: f4 09 23 3c psubs\.sb r12,r10,r9 |
| 11718 | + *[0-9a-f]*: f6 00 23 3f psubs\.sb pc,r11,r0 |
| 11719 | + |
| 11720 | +[0-9a-f]* <padds_ub>: |
| 11721 | + *[0-9a-f]*: fe 0f 23 4f padds\.ub pc,pc,pc |
| 11722 | + *[0-9a-f]*: f8 0c 23 4c padds\.ub r12,r12,r12 |
| 11723 | + *[0-9a-f]*: ea 05 23 45 padds\.ub r5,r5,r5 |
| 11724 | + *[0-9a-f]*: e8 04 23 44 padds\.ub r4,r4,r4 |
| 11725 | + *[0-9a-f]*: fc 0e 23 4e padds\.ub lr,lr,lr |
| 11726 | + *[0-9a-f]*: e4 0b 23 43 padds\.ub r3,r2,r11 |
| 11727 | + *[0-9a-f]*: f0 01 23 4a padds\.ub r10,r8,r1 |
| 11728 | + *[0-9a-f]*: f0 0a 23 4b padds\.ub r11,r8,r10 |
| 11729 | + |
| 11730 | +[0-9a-f]* <psubs_ub>: |
| 11731 | + *[0-9a-f]*: fe 0f 23 5f psubs\.ub pc,pc,pc |
| 11732 | + *[0-9a-f]*: f8 0c 23 5c psubs\.ub r12,r12,r12 |
| 11733 | + *[0-9a-f]*: ea 05 23 55 psubs\.ub r5,r5,r5 |
| 11734 | + *[0-9a-f]*: e8 04 23 54 psubs\.ub r4,r4,r4 |
| 11735 | + *[0-9a-f]*: fc 0e 23 5e psubs\.ub lr,lr,lr |
| 11736 | + *[0-9a-f]*: e4 07 23 50 psubs\.ub r0,r2,r7 |
| 11737 | + *[0-9a-f]*: ea 03 23 5e psubs\.ub lr,r5,r3 |
| 11738 | + *[0-9a-f]*: ee 09 23 56 psubs\.ub r6,r7,r9 |
| 11739 | + |
| 11740 | +[0-9a-f]* <paddh_ub>: |
| 11741 | + *[0-9a-f]*: fe 0f 23 6f paddh\.ub pc,pc,pc |
| 11742 | + *[0-9a-f]*: f8 0c 23 6c paddh\.ub r12,r12,r12 |
| 11743 | + *[0-9a-f]*: ea 05 23 65 paddh\.ub r5,r5,r5 |
| 11744 | + *[0-9a-f]*: e8 04 23 64 paddh\.ub r4,r4,r4 |
| 11745 | + *[0-9a-f]*: fc 0e 23 6e paddh\.ub lr,lr,lr |
| 11746 | + *[0-9a-f]*: e2 00 23 6e paddh\.ub lr,r1,r0 |
| 11747 | + *[0-9a-f]*: ee 07 23 62 paddh\.ub r2,r7,r7 |
| 11748 | + *[0-9a-f]*: e2 02 23 62 paddh\.ub r2,r1,r2 |
| 11749 | + |
| 11750 | +[0-9a-f]* <psubh_ub>: |
| 11751 | + *[0-9a-f]*: fe 0f 23 7f psubh\.ub pc,pc,pc |
| 11752 | + *[0-9a-f]*: f8 0c 23 7c psubh\.ub r12,r12,r12 |
| 11753 | + *[0-9a-f]*: ea 05 23 75 psubh\.ub r5,r5,r5 |
| 11754 | + *[0-9a-f]*: e8 04 23 74 psubh\.ub r4,r4,r4 |
| 11755 | + *[0-9a-f]*: fc 0e 23 7e psubh\.ub lr,lr,lr |
| 11756 | + *[0-9a-f]*: e2 06 23 70 psubh\.ub r0,r1,r6 |
| 11757 | + *[0-9a-f]*: fc 0a 23 74 psubh\.ub r4,lr,r10 |
| 11758 | + *[0-9a-f]*: f0 01 23 79 psubh\.ub r9,r8,r1 |
| 11759 | + |
| 11760 | +[0-9a-f]* <pmax_ub>: |
| 11761 | + *[0-9a-f]*: fe 0f 23 8f pmax\.ub pc,pc,pc |
| 11762 | + *[0-9a-f]*: f8 0c 23 8c pmax\.ub r12,r12,r12 |
| 11763 | + *[0-9a-f]*: ea 05 23 85 pmax\.ub r5,r5,r5 |
| 11764 | + *[0-9a-f]*: e8 04 23 84 pmax\.ub r4,r4,r4 |
| 11765 | + *[0-9a-f]*: fc 0e 23 8e pmax\.ub lr,lr,lr |
| 11766 | + *[0-9a-f]*: e4 0b 23 8f pmax\.ub pc,r2,r11 |
| 11767 | + *[0-9a-f]*: e2 01 23 8c pmax\.ub r12,r1,r1 |
| 11768 | + *[0-9a-f]*: e4 00 23 85 pmax\.ub r5,r2,r0 |
| 11769 | + |
| 11770 | +[0-9a-f]* <pmax_sh>: |
| 11771 | + *[0-9a-f]*: fe 0f 23 9f pmax\.sh pc,pc,pc |
| 11772 | + *[0-9a-f]*: f8 0c 23 9c pmax\.sh r12,r12,r12 |
| 11773 | + *[0-9a-f]*: ea 05 23 95 pmax\.sh r5,r5,r5 |
| 11774 | + *[0-9a-f]*: e8 04 23 94 pmax\.sh r4,r4,r4 |
| 11775 | + *[0-9a-f]*: fc 0e 23 9e pmax\.sh lr,lr,lr |
| 11776 | + *[0-9a-f]*: ec 0c 23 9e pmax\.sh lr,r6,r12 |
| 11777 | + *[0-9a-f]*: fe 05 23 92 pmax\.sh r2,pc,r5 |
| 11778 | + *[0-9a-f]*: e4 07 23 9f pmax\.sh pc,r2,r7 |
| 11779 | + |
| 11780 | +[0-9a-f]* <pmin_ub>: |
| 11781 | + *[0-9a-f]*: fe 0f 23 af pmin\.ub pc,pc,pc |
| 11782 | + *[0-9a-f]*: f8 0c 23 ac pmin\.ub r12,r12,r12 |
| 11783 | + *[0-9a-f]*: ea 05 23 a5 pmin\.ub r5,r5,r5 |
| 11784 | + *[0-9a-f]*: e8 04 23 a4 pmin\.ub r4,r4,r4 |
| 11785 | + *[0-9a-f]*: fc 0e 23 ae pmin\.ub lr,lr,lr |
| 11786 | + *[0-9a-f]*: e2 05 23 a8 pmin\.ub r8,r1,r5 |
| 11787 | + *[0-9a-f]*: f0 03 23 a1 pmin\.ub r1,r8,r3 |
| 11788 | + *[0-9a-f]*: e4 07 23 a0 pmin\.ub r0,r2,r7 |
| 11789 | + |
| 11790 | +[0-9a-f]* <pmin_sh>: |
| 11791 | + *[0-9a-f]*: fe 0f 23 bf pmin\.sh pc,pc,pc |
| 11792 | + *[0-9a-f]*: f8 0c 23 bc pmin\.sh r12,r12,r12 |
| 11793 | + *[0-9a-f]*: ea 05 23 b5 pmin\.sh r5,r5,r5 |
| 11794 | + *[0-9a-f]*: e8 04 23 b4 pmin\.sh r4,r4,r4 |
| 11795 | + *[0-9a-f]*: fc 0e 23 be pmin\.sh lr,lr,lr |
| 11796 | + *[0-9a-f]*: e8 0a 23 b8 pmin\.sh r8,r4,r10 |
| 11797 | + *[0-9a-f]*: f4 0c 23 be pmin\.sh lr,r10,r12 |
| 11798 | + *[0-9a-f]*: ec 02 23 b2 pmin\.sh r2,r6,r2 |
| 11799 | + |
| 11800 | +[0-9a-f]* <pavg_ub>: |
| 11801 | + *[0-9a-f]*: fe 0f 23 cf pavg\.ub pc,pc,pc |
| 11802 | + *[0-9a-f]*: f8 0c 23 cc pavg\.ub r12,r12,r12 |
| 11803 | + *[0-9a-f]*: ea 05 23 c5 pavg\.ub r5,r5,r5 |
| 11804 | + *[0-9a-f]*: e8 04 23 c4 pavg\.ub r4,r4,r4 |
| 11805 | + *[0-9a-f]*: fc 0e 23 ce pavg\.ub lr,lr,lr |
| 11806 | + *[0-9a-f]*: e2 06 23 c0 pavg\.ub r0,r1,r6 |
| 11807 | + *[0-9a-f]*: e6 06 23 c8 pavg\.ub r8,r3,r6 |
| 11808 | + *[0-9a-f]*: f8 0a 23 cf pavg\.ub pc,r12,r10 |
| 11809 | + |
| 11810 | +[0-9a-f]* <pavg_sh>: |
| 11811 | + *[0-9a-f]*: fe 0f 23 df pavg\.sh pc,pc,pc |
| 11812 | + *[0-9a-f]*: f8 0c 23 dc pavg\.sh r12,r12,r12 |
| 11813 | + *[0-9a-f]*: ea 05 23 d5 pavg\.sh r5,r5,r5 |
| 11814 | + *[0-9a-f]*: e8 04 23 d4 pavg\.sh r4,r4,r4 |
| 11815 | + *[0-9a-f]*: fc 0e 23 de pavg\.sh lr,lr,lr |
| 11816 | + *[0-9a-f]*: fe 0d 23 d9 pavg\.sh r9,pc,sp |
| 11817 | + *[0-9a-f]*: fa 03 23 df pavg\.sh pc,sp,r3 |
| 11818 | + *[0-9a-f]*: e2 09 23 d6 pavg\.sh r6,r1,r9 |
| 11819 | + |
| 11820 | +[0-9a-f]* <pabs_sb>: |
| 11821 | + *[0-9a-f]*: e0 0f 23 ef pabs\.sb pc,pc |
| 11822 | + *[0-9a-f]*: e0 0c 23 ec pabs\.sb r12,r12 |
| 11823 | + *[0-9a-f]*: e0 05 23 e5 pabs\.sb r5,r5 |
| 11824 | + *[0-9a-f]*: e0 04 23 e4 pabs\.sb r4,r4 |
| 11825 | + *[0-9a-f]*: e0 0e 23 ee pabs\.sb lr,lr |
| 11826 | + *[0-9a-f]*: e0 06 23 eb pabs\.sb r11,r6 |
| 11827 | + *[0-9a-f]*: e0 09 23 ee pabs\.sb lr,r9 |
| 11828 | + *[0-9a-f]*: e0 07 23 ed pabs\.sb sp,r7 |
| 11829 | + |
| 11830 | +[0-9a-f]* <pabs_sh>: |
| 11831 | + *[0-9a-f]*: e0 0f 23 ff pabs\.sh pc,pc |
| 11832 | + *[0-9a-f]*: e0 0c 23 fc pabs\.sh r12,r12 |
| 11833 | + *[0-9a-f]*: e0 05 23 f5 pabs\.sh r5,r5 |
| 11834 | + *[0-9a-f]*: e0 04 23 f4 pabs\.sh r4,r4 |
| 11835 | + *[0-9a-f]*: e0 0e 23 fe pabs\.sh lr,lr |
| 11836 | + *[0-9a-f]*: e0 03 23 ff pabs\.sh pc,r3 |
| 11837 | + *[0-9a-f]*: e0 07 23 f5 pabs\.sh r5,r7 |
| 11838 | + *[0-9a-f]*: e0 00 23 f4 pabs\.sh r4,r0 |
| 11839 | + |
| 11840 | +[0-9a-f]* <psad>: |
| 11841 | + *[0-9a-f]*: fe 0f 24 0f psad pc,pc,pc |
| 11842 | + *[0-9a-f]*: f8 0c 24 0c psad r12,r12,r12 |
| 11843 | + *[0-9a-f]*: ea 05 24 05 psad r5,r5,r5 |
| 11844 | + *[0-9a-f]*: e8 04 24 04 psad r4,r4,r4 |
| 11845 | + *[0-9a-f]*: fc 0e 24 0e psad lr,lr,lr |
| 11846 | + *[0-9a-f]*: f6 0b 24 09 psad r9,r11,r11 |
| 11847 | + *[0-9a-f]*: e8 0d 24 0e psad lr,r4,sp |
| 11848 | + *[0-9a-f]*: e8 05 24 0e psad lr,r4,r5 |
| 11849 | + |
| 11850 | +[0-9a-f]* <pasr_b>: |
| 11851 | + *[0-9a-f]*: fe 00 24 1f pasr\.b pc,pc,0x0 |
| 11852 | + *[0-9a-f]*: f8 07 24 1c pasr\.b r12,r12,0x7 |
| 11853 | + *[0-9a-f]*: ea 04 24 15 pasr\.b r5,r5,0x4 |
| 11854 | + *[0-9a-f]*: e8 03 24 14 pasr\.b r4,r4,0x3 |
| 11855 | + *[0-9a-f]*: fc 01 24 1e pasr\.b lr,lr,0x1 |
| 11856 | + *[0-9a-f]*: ee 01 24 1f pasr\.b pc,r7,0x1 |
| 11857 | + *[0-9a-f]*: fc 06 24 1d pasr\.b sp,lr,0x6 |
| 11858 | + *[0-9a-f]*: e6 02 24 1d pasr\.b sp,r3,0x2 |
| 11859 | + |
| 11860 | +[0-9a-f]* <plsl_b>: |
| 11861 | + *[0-9a-f]*: fe 00 24 2f plsl\.b pc,pc,0x0 |
| 11862 | + *[0-9a-f]*: f8 07 24 2c plsl\.b r12,r12,0x7 |
| 11863 | + *[0-9a-f]*: ea 04 24 25 plsl\.b r5,r5,0x4 |
| 11864 | + *[0-9a-f]*: e8 03 24 24 plsl\.b r4,r4,0x3 |
| 11865 | + *[0-9a-f]*: fc 01 24 2e plsl\.b lr,lr,0x1 |
| 11866 | + *[0-9a-f]*: f6 04 24 22 plsl\.b r2,r11,0x4 |
| 11867 | + *[0-9a-f]*: ea 07 24 28 plsl\.b r8,r5,0x7 |
| 11868 | + *[0-9a-f]*: e0 02 24 2f plsl\.b pc,r0,0x2 |
| 11869 | + |
| 11870 | +[0-9a-f]* <plsr_b>: |
| 11871 | + *[0-9a-f]*: fe 00 24 3f plsr\.b pc,pc,0x0 |
| 11872 | + *[0-9a-f]*: f8 07 24 3c plsr\.b r12,r12,0x7 |
| 11873 | + *[0-9a-f]*: ea 04 24 35 plsr\.b r5,r5,0x4 |
| 11874 | + *[0-9a-f]*: e8 03 24 34 plsr\.b r4,r4,0x3 |
| 11875 | + *[0-9a-f]*: fc 01 24 3e plsr\.b lr,lr,0x1 |
| 11876 | + *[0-9a-f]*: e2 02 24 3c plsr\.b r12,r1,0x2 |
| 11877 | + *[0-9a-f]*: fe 07 24 36 plsr\.b r6,pc,0x7 |
| 11878 | + *[0-9a-f]*: f6 02 24 3c plsr\.b r12,r11,0x2 |
| 11879 | + |
| 11880 | +[0-9a-f]* <pasr_h>: |
| 11881 | + *[0-9a-f]*: fe 00 24 4f pasr\.h pc,pc,0x0 |
| 11882 | + *[0-9a-f]*: f8 0f 24 4c pasr\.h r12,r12,0xf |
| 11883 | + *[0-9a-f]*: ea 08 24 45 pasr\.h r5,r5,0x8 |
| 11884 | + *[0-9a-f]*: e8 07 24 44 pasr\.h r4,r4,0x7 |
| 11885 | + *[0-9a-f]*: fc 01 24 4e pasr\.h lr,lr,0x1 |
| 11886 | + *[0-9a-f]*: f6 0a 24 40 pasr\.h r0,r11,0xa |
| 11887 | + *[0-9a-f]*: ec 08 24 44 pasr\.h r4,r6,0x8 |
| 11888 | + *[0-9a-f]*: e4 04 24 46 pasr\.h r6,r2,0x4 |
| 11889 | + |
| 11890 | +[0-9a-f]* <plsl_h>: |
| 11891 | + *[0-9a-f]*: fe 00 24 5f plsl\.h pc,pc,0x0 |
| 11892 | + *[0-9a-f]*: f8 0f 24 5c plsl\.h r12,r12,0xf |
| 11893 | + *[0-9a-f]*: ea 08 24 55 plsl\.h r5,r5,0x8 |
| 11894 | + *[0-9a-f]*: e8 07 24 54 plsl\.h r4,r4,0x7 |
| 11895 | + *[0-9a-f]*: fc 01 24 5e plsl\.h lr,lr,0x1 |
| 11896 | + *[0-9a-f]*: f4 09 24 55 plsl\.h r5,r10,0x9 |
| 11897 | + *[0-9a-f]*: fc 08 24 5d plsl\.h sp,lr,0x8 |
| 11898 | + *[0-9a-f]*: fc 07 24 50 plsl\.h r0,lr,0x7 |
| 11899 | + |
| 11900 | +[0-9a-f]* <plsr_h>: |
| 11901 | + *[0-9a-f]*: fe 00 24 6f plsr\.h pc,pc,0x0 |
| 11902 | + *[0-9a-f]*: f8 0f 24 6c plsr\.h r12,r12,0xf |
| 11903 | + *[0-9a-f]*: ea 08 24 65 plsr\.h r5,r5,0x8 |
| 11904 | + *[0-9a-f]*: e8 07 24 64 plsr\.h r4,r4,0x7 |
| 11905 | + *[0-9a-f]*: fc 01 24 6e plsr\.h lr,lr,0x1 |
| 11906 | + *[0-9a-f]*: e0 0f 24 6b plsr\.h r11,r0,0xf |
| 11907 | + *[0-9a-f]*: e6 03 24 6e plsr\.h lr,r3,0x3 |
| 11908 | + *[0-9a-f]*: fc 0a 24 68 plsr\.h r8,lr,0xa |
| 11909 | + |
| 11910 | +[0-9a-f]* <packw_sh>: |
| 11911 | + *[0-9a-f]*: fe 0f 24 7f packw\.sh pc,pc,pc |
| 11912 | + *[0-9a-f]*: f8 0c 24 7c packw\.sh r12,r12,r12 |
| 11913 | + *[0-9a-f]*: ea 05 24 75 packw\.sh r5,r5,r5 |
| 11914 | + *[0-9a-f]*: e8 04 24 74 packw\.sh r4,r4,r4 |
| 11915 | + *[0-9a-f]*: fc 0e 24 7e packw\.sh lr,lr,lr |
| 11916 | + *[0-9a-f]*: f6 0a 24 7d packw\.sh sp,r11,r10 |
| 11917 | + *[0-9a-f]*: e4 0c 24 78 packw\.sh r8,r2,r12 |
| 11918 | + *[0-9a-f]*: e2 05 24 78 packw\.sh r8,r1,r5 |
| 11919 | + |
| 11920 | +[0-9a-f]* <punpckub_h>: |
| 11921 | + *[0-9a-f]*: fe 00 24 8f punpckub\.h pc,pc:b |
| 11922 | + *[0-9a-f]*: f8 00 24 9c punpckub\.h r12,r12:t |
| 11923 | + *[0-9a-f]*: ea 00 24 95 punpckub\.h r5,r5:t |
| 11924 | + *[0-9a-f]*: e8 00 24 84 punpckub\.h r4,r4:b |
| 11925 | + *[0-9a-f]*: fc 00 24 9e punpckub\.h lr,lr:t |
| 11926 | + *[0-9a-f]*: e2 00 24 96 punpckub\.h r6,r1:t |
| 11927 | + *[0-9a-f]*: ea 00 24 8e punpckub\.h lr,r5:b |
| 11928 | + *[0-9a-f]*: e4 00 24 9e punpckub\.h lr,r2:t |
| 11929 | + |
| 11930 | +[0-9a-f]* <punpcksb_h>: |
| 11931 | + *[0-9a-f]*: fe 00 24 af punpcksb\.h pc,pc:b |
| 11932 | + *[0-9a-f]*: f8 00 24 bc punpcksb\.h r12,r12:t |
| 11933 | + *[0-9a-f]*: ea 00 24 b5 punpcksb\.h r5,r5:t |
| 11934 | + *[0-9a-f]*: e8 00 24 a4 punpcksb\.h r4,r4:b |
| 11935 | + *[0-9a-f]*: fc 00 24 be punpcksb\.h lr,lr:t |
| 11936 | + *[0-9a-f]*: ee 00 24 b4 punpcksb\.h r4,r7:t |
| 11937 | + *[0-9a-f]*: fc 00 24 a6 punpcksb\.h r6,lr:b |
| 11938 | + *[0-9a-f]*: f8 00 24 bc punpcksb\.h r12,r12:t |
| 11939 | + |
| 11940 | +[0-9a-f]* <packsh_ub>: |
| 11941 | + *[0-9a-f]*: fe 0f 24 cf packsh\.ub pc,pc,pc |
| 11942 | + *[0-9a-f]*: f8 0c 24 cc packsh\.ub r12,r12,r12 |
| 11943 | + *[0-9a-f]*: ea 05 24 c5 packsh\.ub r5,r5,r5 |
| 11944 | + *[0-9a-f]*: e8 04 24 c4 packsh\.ub r4,r4,r4 |
| 11945 | + *[0-9a-f]*: fc 0e 24 ce packsh\.ub lr,lr,lr |
| 11946 | + *[0-9a-f]*: ec 03 24 c3 packsh\.ub r3,r6,r3 |
| 11947 | + *[0-9a-f]*: e0 03 24 c8 packsh\.ub r8,r0,r3 |
| 11948 | + *[0-9a-f]*: e6 0e 24 c9 packsh\.ub r9,r3,lr |
| 11949 | + |
| 11950 | +[0-9a-f]* <packsh_sb>: |
| 11951 | + *[0-9a-f]*: fe 0f 24 df packsh\.sb pc,pc,pc |
| 11952 | + *[0-9a-f]*: f8 0c 24 dc packsh\.sb r12,r12,r12 |
| 11953 | + *[0-9a-f]*: ea 05 24 d5 packsh\.sb r5,r5,r5 |
| 11954 | + *[0-9a-f]*: e8 04 24 d4 packsh\.sb r4,r4,r4 |
| 11955 | + *[0-9a-f]*: fc 0e 24 de packsh\.sb lr,lr,lr |
| 11956 | + *[0-9a-f]*: f0 01 24 d6 packsh\.sb r6,r8,r1 |
| 11957 | + *[0-9a-f]*: f2 08 24 de packsh\.sb lr,r9,r8 |
| 11958 | + *[0-9a-f]*: ec 06 24 dd packsh\.sb sp,r6,r6 |
| 11959 | + |
| 11960 | +[0-9a-f]* <andl>: |
| 11961 | + *[0-9a-f]*: e0 1f 00 00 andl pc,0x0 |
| 11962 | + *[0-9a-f]*: e0 1c ff ff andl r12,0xffff |
| 11963 | + *[0-9a-f]*: e0 15 80 00 andl r5,0x8000 |
| 11964 | + *[0-9a-f]*: e0 14 7f ff andl r4,0x7fff |
| 11965 | + *[0-9a-f]*: e0 1e 00 01 andl lr,0x1 |
| 11966 | + *[0-9a-f]*: e0 1f 5a 58 andl pc,0x5a58 |
| 11967 | + *[0-9a-f]*: e0 18 b8 9e andl r8,0xb89e |
| 11968 | + *[0-9a-f]*: e0 17 35 97 andl r7,0x3597 |
| 11969 | + |
| 11970 | +[0-9a-f]* <andl_coh>: |
| 11971 | + *[0-9a-f]*: e2 1f 00 00 andl pc,0x0,COH |
| 11972 | + *[0-9a-f]*: e2 1c ff ff andl r12,0xffff,COH |
| 11973 | + *[0-9a-f]*: e2 15 80 00 andl r5,0x8000,COH |
| 11974 | + *[0-9a-f]*: e2 14 7f ff andl r4,0x7fff,COH |
| 11975 | + *[0-9a-f]*: e2 1e 00 01 andl lr,0x1,COH |
| 11976 | + *[0-9a-f]*: e2 16 58 e1 andl r6,0x58e1,COH |
| 11977 | + *[0-9a-f]*: e2 10 9e cd andl r0,0x9ecd,COH |
| 11978 | + *[0-9a-f]*: e2 14 bd c4 andl r4,0xbdc4,COH |
| 11979 | + |
| 11980 | +[0-9a-f]* <andh>: |
| 11981 | + *[0-9a-f]*: e4 1f 00 00 andh pc,0x0 |
| 11982 | + *[0-9a-f]*: e4 1c ff ff andh r12,0xffff |
| 11983 | + *[0-9a-f]*: e4 15 80 00 andh r5,0x8000 |
| 11984 | + *[0-9a-f]*: e4 14 7f ff andh r4,0x7fff |
| 11985 | + *[0-9a-f]*: e4 1e 00 01 andh lr,0x1 |
| 11986 | + *[0-9a-f]*: e4 1c cc 58 andh r12,0xcc58 |
| 11987 | + *[0-9a-f]*: e4 13 21 e3 andh r3,0x21e3 |
| 11988 | + *[0-9a-f]*: e4 12 a7 eb andh r2,0xa7eb |
| 11989 | + |
| 11990 | +[0-9a-f]* <andh_coh>: |
| 11991 | + *[0-9a-f]*: e6 1f 00 00 andh pc,0x0,COH |
| 11992 | + *[0-9a-f]*: e6 1c ff ff andh r12,0xffff,COH |
| 11993 | + *[0-9a-f]*: e6 15 80 00 andh r5,0x8000,COH |
| 11994 | + *[0-9a-f]*: e6 14 7f ff andh r4,0x7fff,COH |
| 11995 | + *[0-9a-f]*: e6 1e 00 01 andh lr,0x1,COH |
| 11996 | + *[0-9a-f]*: e6 1b 86 0d andh r11,0x860d,COH |
| 11997 | + *[0-9a-f]*: e6 18 ce f6 andh r8,0xcef6,COH |
| 11998 | + *[0-9a-f]*: e6 1a 5c 83 andh r10,0x5c83,COH |
| 11999 | + |
| 12000 | +[0-9a-f]* <orl>: |
| 12001 | + *[0-9a-f]*: e8 1f 00 00 orl pc,0x0 |
| 12002 | + *[0-9a-f]*: e8 1c ff ff orl r12,0xffff |
| 12003 | + *[0-9a-f]*: e8 15 80 00 orl r5,0x8000 |
| 12004 | + *[0-9a-f]*: e8 14 7f ff orl r4,0x7fff |
| 12005 | + *[0-9a-f]*: e8 1e 00 01 orl lr,0x1 |
| 12006 | + *[0-9a-f]*: e8 1d 41 7e orl sp,0x417e |
| 12007 | + *[0-9a-f]*: e8 10 52 bd orl r0,0x52bd |
| 12008 | + *[0-9a-f]*: e8 1f ac 47 orl pc,0xac47 |
| 12009 | + |
| 12010 | +[0-9a-f]* <orh>: |
| 12011 | + *[0-9a-f]*: ea 1f 00 00 orh pc,0x0 |
| 12012 | + *[0-9a-f]*: ea 1c ff ff orh r12,0xffff |
| 12013 | + *[0-9a-f]*: ea 15 80 00 orh r5,0x8000 |
| 12014 | + *[0-9a-f]*: ea 14 7f ff orh r4,0x7fff |
| 12015 | + *[0-9a-f]*: ea 1e 00 01 orh lr,0x1 |
| 12016 | + *[0-9a-f]*: ea 18 6e 7d orh r8,0x6e7d |
| 12017 | + *[0-9a-f]*: ea 1c 77 1c orh r12,0x771c |
| 12018 | + *[0-9a-f]*: ea 11 ea 1a orh r1,0xea1a |
| 12019 | + |
| 12020 | +[0-9a-f]* <eorl>: |
| 12021 | + *[0-9a-f]*: ec 1f 00 00 eorl pc,0x0 |
| 12022 | + *[0-9a-f]*: ec 1c ff ff eorl r12,0xffff |
| 12023 | + *[0-9a-f]*: ec 15 80 00 eorl r5,0x8000 |
| 12024 | + *[0-9a-f]*: ec 14 7f ff eorl r4,0x7fff |
| 12025 | + *[0-9a-f]*: ec 1e 00 01 eorl lr,0x1 |
| 12026 | + *[0-9a-f]*: ec 14 c7 b9 eorl r4,0xc7b9 |
| 12027 | + *[0-9a-f]*: ec 16 fb dd eorl r6,0xfbdd |
| 12028 | + *[0-9a-f]*: ec 11 51 b1 eorl r1,0x51b1 |
| 12029 | + |
| 12030 | +[0-9a-f]* <eorh>: |
| 12031 | + *[0-9a-f]*: ee 1f 00 00 eorh pc,0x0 |
| 12032 | + *[0-9a-f]*: ee 1c ff ff eorh r12,0xffff |
| 12033 | + *[0-9a-f]*: ee 15 80 00 eorh r5,0x8000 |
| 12034 | + *[0-9a-f]*: ee 14 7f ff eorh r4,0x7fff |
| 12035 | + *[0-9a-f]*: ee 1e 00 01 eorh lr,0x1 |
| 12036 | + *[0-9a-f]*: ee 10 2d d4 eorh r0,0x2dd4 |
| 12037 | + *[0-9a-f]*: ee 1a 94 b5 eorh r10,0x94b5 |
| 12038 | + *[0-9a-f]*: ee 19 df 2a eorh r9,0xdf2a |
| 12039 | + |
| 12040 | +[0-9a-f]* <mcall>: |
| 12041 | + *[0-9a-f]*: f0 1f 00 00 mcall [0-9a-f]* <.*> |
| 12042 | + *[0-9a-f]*: f0 1c ff ff mcall r12\[-4\] |
| 12043 | + *[0-9a-f]*: f0 15 80 00 mcall r5\[-131072\] |
| 12044 | + *[0-9a-f]*: f0 14 7f ff mcall r4\[131068\] |
| 12045 | + *[0-9a-f]*: f0 1e 00 01 mcall lr\[4\] |
| 12046 | + *[0-9a-f]*: f0 1d 3b bf mcall sp\[61180\] |
| 12047 | + *[0-9a-f]*: f0 14 dd d2 mcall r4\[-35000\] |
| 12048 | + *[0-9a-f]*: f0 10 09 b1 mcall r0\[9924\] |
| 12049 | + |
| 12050 | +[0-9a-f]* <pref>: |
| 12051 | + *[0-9a-f]*: f2 1f 00 00 pref pc\[0\] |
| 12052 | + *[0-9a-f]*: f2 1c ff ff pref r12\[-1\] |
| 12053 | + *[0-9a-f]*: f2 15 80 00 pref r5\[-32768\] |
| 12054 | + *[0-9a-f]*: f2 14 7f ff pref r4\[32767\] |
| 12055 | + *[0-9a-f]*: f2 1e 00 01 pref lr\[1\] |
| 12056 | + *[0-9a-f]*: f2 17 1e 44 pref r7\[7748\] |
| 12057 | + *[0-9a-f]*: f2 17 e1 ed pref r7\[-7699\] |
| 12058 | + *[0-9a-f]*: f2 12 9a dc pref r2\[-25892\] |
| 12059 | + |
| 12060 | +[0-9a-f]* <cache>: |
| 12061 | + *[0-9a-f]*: f4 1f 00 00 cache pc\[0\],0x0 |
| 12062 | + *[0-9a-f]*: f4 1c ff ff cache r12\[-1\],0x1f |
| 12063 | + *[0-9a-f]*: f4 15 84 00 cache r5\[-1024\],0x10 |
| 12064 | + *[0-9a-f]*: f4 14 7b ff cache r4\[1023\],0xf |
| 12065 | + *[0-9a-f]*: f4 1e 08 01 cache lr\[1\],0x1 |
| 12066 | + *[0-9a-f]*: f4 13 8c 3c cache r3\[-964\],0x11 |
| 12067 | + *[0-9a-f]*: f4 14 b6 89 cache r4\[-375\],0x16 |
| 12068 | + *[0-9a-f]*: f4 13 8c 88 cache r3\[-888\],0x11 |
| 12069 | + |
| 12070 | +[0-9a-f]* <sub4>: |
| 12071 | + *[0-9a-f]*: 20 0f sub pc,0 |
| 12072 | + *[0-9a-f]*: 2f fc sub r12,-1 |
| 12073 | + *[0-9a-f]*: f0 25 00 00 sub r5,-1048576 |
| 12074 | + *[0-9a-f]*: ee 34 ff ff sub r4,1048575 |
| 12075 | + *[0-9a-f]*: 20 1e sub lr,1 |
| 12076 | + *[0-9a-f]*: f6 22 8d 6c sub r2,-619156 |
| 12077 | + *[0-9a-f]*: e6 3e 0a cd sub lr,461517 |
| 12078 | + *[0-9a-f]*: fc 38 2d 25 sub r8,-185051 |
| 12079 | + |
| 12080 | +[0-9a-f]* <cp3>: |
| 12081 | + *[0-9a-f]*: 58 0f cp.w pc,0 |
| 12082 | + *[0-9a-f]*: 5b fc cp.w r12,-1 |
| 12083 | + *[0-9a-f]*: f0 45 00 00 cp.w r5,-1048576 |
| 12084 | + *[0-9a-f]*: ee 54 ff ff cp.w r4,1048575 |
| 12085 | + *[0-9a-f]*: 58 1e cp.w lr,1 |
| 12086 | + *[0-9a-f]*: e0 51 e4 ae cp.w r1,124078 |
| 12087 | + *[0-9a-f]*: fa 40 37 e3 cp.w r0,-378909 |
| 12088 | + *[0-9a-f]*: fc 44 4a 14 cp.w r4,-243180 |
| 12089 | + |
| 12090 | +[0-9a-f]* <mov2>: |
| 12091 | + *[0-9a-f]*: 30 0f mov pc,0 |
| 12092 | + *[0-9a-f]*: 3f fc mov r12,-1 |
| 12093 | + *[0-9a-f]*: f0 65 00 00 mov r5,-1048576 |
| 12094 | + *[0-9a-f]*: ee 74 ff ff mov r4,1048575 |
| 12095 | + *[0-9a-f]*: 30 1e mov lr,1 |
| 12096 | + *[0-9a-f]*: fa 75 29 a3 mov r5,-317021 |
| 12097 | + *[0-9a-f]*: f4 6d 91 94 mov sp,-749164 |
| 12098 | + *[0-9a-f]*: ee 65 58 93 mov r5,940179 |
| 12099 | + |
| 12100 | +[0-9a-f]* <brc2>: |
| 12101 | + *[0-9a-f]*: c0 00 breq [0-9a-f]* <.*> |
| 12102 | + *[0-9a-f]*: fe 9f ff ff bral [0-9a-f]* <.*> |
| 12103 | + *[0-9a-f]*: f0 88 00 00 brls [0-9a-f]* <.*> |
| 12104 | + *[0-9a-f]*: ee 97 ff ff brpl [0-9a-f]* <.*> |
| 12105 | + *[0-9a-f]*: c0 11 brne [0-9a-f]* <.*> |
| 12106 | + *[0-9a-f]*: f2 8b 4a 4d brhi [0-9a-f]* <.*> |
| 12107 | + *[0-9a-f]*: ea 8e 14 cc brqs [0-9a-f]* <.*> |
| 12108 | + *[0-9a-f]*: fa 98 98 33 brls [0-9a-f]* <.*> |
| 12109 | + |
| 12110 | +[0-9a-f]* <rcall2>: |
| 12111 | + *[0-9a-f]*: c0 0c rcall [0-9a-f]* <.*> |
| 12112 | + *[0-9a-f]*: cf ff rcall [0-9a-f]* <.*> |
| 12113 | + *[0-9a-f]*: f0 a0 00 00 rcall [0-9a-f]* <.*> |
| 12114 | + *[0-9a-f]*: ee b0 ff ff rcall [0-9a-f]* <.*> |
| 12115 | + *[0-9a-f]*: c0 1c rcall [0-9a-f]* <.*> |
| 12116 | + *[0-9a-f]*: e2 b0 ca 5a rcall [0-9a-f]* <.*> |
| 12117 | + *[0-9a-f]*: e8 a0 47 52 rcall [0-9a-f]* <.*> |
| 12118 | + *[0-9a-f]*: fe b0 fd ef rcall [0-9a-f]* <.*> |
| 12119 | + |
| 12120 | +[0-9a-f]* <sub5>: |
| 12121 | + *[0-9a-f]*: fe cf 00 00 sub pc,pc,0 |
| 12122 | + *[0-9a-f]*: f8 cc ff ff sub r12,r12,-1 |
| 12123 | + *[0-9a-f]*: ea c5 80 00 sub r5,r5,-32768 |
| 12124 | + *[0-9a-f]*: e8 c4 7f ff sub r4,r4,32767 |
| 12125 | + *[0-9a-f]*: fc ce 00 01 sub lr,lr,1 |
| 12126 | + *[0-9a-f]*: fe cf ce 38 sub pc,pc,-12744 |
| 12127 | + *[0-9a-f]*: ee c7 95 1b sub r7,r7,-27365 |
| 12128 | + *[0-9a-f]*: f2 c2 bc 32 sub r2,r9,-17358 |
| 12129 | + |
| 12130 | +[0-9a-f]* <satsub_w2>: |
| 12131 | + *[0-9a-f]*: fe df 00 00 satsub\.w pc,pc,0 |
| 12132 | + *[0-9a-f]*: f8 dc ff ff satsub\.w r12,r12,-1 |
| 12133 | + *[0-9a-f]*: ea d5 80 00 satsub\.w r5,r5,-32768 |
| 12134 | + *[0-9a-f]*: e8 d4 7f ff satsub\.w r4,r4,32767 |
| 12135 | + *[0-9a-f]*: fc de 00 01 satsub\.w lr,lr,1 |
| 12136 | + *[0-9a-f]*: fc d2 f8 29 satsub\.w r2,lr,-2007 |
| 12137 | + *[0-9a-f]*: f8 d7 fc f0 satsub\.w r7,r12,-784 |
| 12138 | + *[0-9a-f]*: ee d4 5a 8c satsub\.w r4,r7,23180 |
| 12139 | + |
| 12140 | +[0-9a-f]* <ld_d4>: |
| 12141 | + *[0-9a-f]*: fe e0 00 00 ld\.d r0,pc\[0\] |
| 12142 | + *[0-9a-f]*: f8 ee ff ff ld\.d lr,r12\[-1\] |
| 12143 | + *[0-9a-f]*: ea e8 80 00 ld\.d r8,r5\[-32768\] |
| 12144 | + *[0-9a-f]*: e8 e6 7f ff ld\.d r6,r4\[32767\] |
| 12145 | + *[0-9a-f]*: fc e2 00 01 ld\.d r2,lr\[1\] |
| 12146 | + *[0-9a-f]*: f6 ee 39 c0 ld\.d lr,r11\[14784\] |
| 12147 | + *[0-9a-f]*: f2 e6 b6 27 ld\.d r6,r9\[-18905\] |
| 12148 | + *[0-9a-f]*: e6 e2 e7 2d ld\.d r2,r3\[-6355\] |
| 12149 | + |
| 12150 | +[0-9a-f]* <ld_w4>: |
| 12151 | + *[0-9a-f]*: 7e 0f ld\.w pc,pc\[0x0\] |
| 12152 | + *[0-9a-f]*: f8 fc ff ff ld\.w r12,r12\[-1\] |
| 12153 | + *[0-9a-f]*: ea f5 80 00 ld\.w r5,r5\[-32768\] |
| 12154 | + *[0-9a-f]*: e8 f4 7f ff ld\.w r4,r4\[32767\] |
| 12155 | + *[0-9a-f]*: fc fe 00 01 ld\.w lr,lr\[1\] |
| 12156 | + *[0-9a-f]*: f8 f0 a9 8b ld\.w r0,r12\[-22133\] |
| 12157 | + *[0-9a-f]*: fe fd af d7 ld\.w sp,pc\[-20521\] |
| 12158 | + *[0-9a-f]*: d7 03 nop |
| 12159 | + |
| 12160 | +[0-9a-f]* <ld_sh4>: |
| 12161 | + *[0-9a-f]*: 9e 0f ld\.sh pc,pc\[0x0\] |
| 12162 | + *[0-9a-f]*: f9 0c ff ff ld\.sh r12,r12\[-1\] |
| 12163 | + *[0-9a-f]*: eb 05 80 00 ld\.sh r5,r5\[-32768\] |
| 12164 | + *[0-9a-f]*: e9 04 7f ff ld\.sh r4,r4\[32767\] |
| 12165 | + *[0-9a-f]*: fd 0e 00 01 ld\.sh lr,lr\[1\] |
| 12166 | + *[0-9a-f]*: f5 06 78 d2 ld\.sh r6,r10\[30930\] |
| 12167 | + *[0-9a-f]*: f5 06 55 d5 ld\.sh r6,r10\[21973\] |
| 12168 | + *[0-9a-f]*: d7 03 nop |
| 12169 | + |
| 12170 | +[0-9a-f]* <ld_uh4>: |
| 12171 | + *[0-9a-f]*: 9e 8f ld\.uh pc,pc\[0x0\] |
| 12172 | + *[0-9a-f]*: f9 1c ff ff ld\.uh r12,r12\[-1\] |
| 12173 | + *[0-9a-f]*: eb 15 80 00 ld\.uh r5,r5\[-32768\] |
| 12174 | + *[0-9a-f]*: e9 14 7f ff ld\.uh r4,r4\[32767\] |
| 12175 | + *[0-9a-f]*: fd 1e 00 01 ld\.uh lr,lr\[1\] |
| 12176 | + *[0-9a-f]*: f3 11 cb d6 ld\.uh r1,r9\[-13354\] |
| 12177 | + *[0-9a-f]*: f7 1e 53 59 ld\.uh lr,r11\[21337\] |
| 12178 | + *[0-9a-f]*: d7 03 nop |
| 12179 | + |
| 12180 | +[0-9a-f]* <ld_sb1>: |
| 12181 | + *[0-9a-f]*: ff 2f 00 00 ld\.sb pc,pc\[0\] |
| 12182 | + *[0-9a-f]*: f9 2c ff ff ld\.sb r12,r12\[-1\] |
| 12183 | + *[0-9a-f]*: eb 25 80 00 ld\.sb r5,r5\[-32768\] |
| 12184 | + *[0-9a-f]*: e9 24 7f ff ld\.sb r4,r4\[32767\] |
| 12185 | + *[0-9a-f]*: fd 2e 00 01 ld\.sb lr,lr\[1\] |
| 12186 | + *[0-9a-f]*: fb 27 90 09 ld\.sb r7,sp\[-28663\] |
| 12187 | + *[0-9a-f]*: e3 22 e9 09 ld\.sb r2,r1\[-5879\] |
| 12188 | + *[0-9a-f]*: e7 2c 49 2e ld\.sb r12,r3\[18734\] |
| 12189 | + |
| 12190 | +[0-9a-f]* <ld_ub4>: |
| 12191 | + *[0-9a-f]*: 1f 8f ld\.ub pc,pc\[0x0\] |
| 12192 | + *[0-9a-f]*: f9 3c ff ff ld\.ub r12,r12\[-1\] |
| 12193 | + *[0-9a-f]*: eb 35 80 00 ld\.ub r5,r5\[-32768\] |
| 12194 | + *[0-9a-f]*: e9 34 7f ff ld\.ub r4,r4\[32767\] |
| 12195 | + *[0-9a-f]*: 1d 9e ld\.ub lr,lr\[0x1\] |
| 12196 | + *[0-9a-f]*: e9 3f 20 55 ld\.ub pc,r4\[8277\] |
| 12197 | + *[0-9a-f]*: f9 35 4a e4 ld\.ub r5,r12\[19172\] |
| 12198 | + *[0-9a-f]*: fd 3a 66 eb ld\.ub r10,lr\[26347\] |
| 12199 | + |
| 12200 | +[0-9a-f]* <st_d4>: |
| 12201 | + *[0-9a-f]*: fe e1 00 00 st\.d pc\[0\],r0 |
| 12202 | + *[0-9a-f]*: f8 ef ff ff st\.d r12\[-1\],lr |
| 12203 | + *[0-9a-f]*: ea e9 80 00 st\.d r5\[-32768\],r8 |
| 12204 | + *[0-9a-f]*: e8 e7 7f ff st\.d r4\[32767\],r6 |
| 12205 | + *[0-9a-f]*: fc e3 00 01 st\.d lr\[1\],r2 |
| 12206 | + *[0-9a-f]*: ea eb 33 90 st\.d r5\[13200\],r10 |
| 12207 | + *[0-9a-f]*: ea eb 24 88 st\.d r5\[9352\],r10 |
| 12208 | + *[0-9a-f]*: ea e5 7e 75 st\.d r5\[32373\],r4 |
| 12209 | + |
| 12210 | +[0-9a-f]* <st_w4>: |
| 12211 | + *[0-9a-f]*: 9f 0f st\.w pc\[0x0\],pc |
| 12212 | + *[0-9a-f]*: f9 4c ff ff st\.w r12\[-1\],r12 |
| 12213 | + *[0-9a-f]*: eb 45 80 00 st\.w r5\[-32768\],r5 |
| 12214 | + *[0-9a-f]*: e9 44 7f ff st\.w r4\[32767\],r4 |
| 12215 | + *[0-9a-f]*: fd 4e 00 01 st\.w lr\[1\],lr |
| 12216 | + *[0-9a-f]*: fb 47 17 f8 st\.w sp\[6136\],r7 |
| 12217 | + *[0-9a-f]*: ed 4c 69 cf st\.w r6\[27087\],r12 |
| 12218 | + *[0-9a-f]*: d7 03 nop |
| 12219 | + |
| 12220 | +[0-9a-f]* <st_h4>: |
| 12221 | + *[0-9a-f]*: be 0f st\.h pc\[0x0\],pc |
| 12222 | + *[0-9a-f]*: f9 5c ff ff st\.h r12\[-1\],r12 |
| 12223 | + *[0-9a-f]*: eb 55 80 00 st\.h r5\[-32768\],r5 |
| 12224 | + *[0-9a-f]*: e9 54 7f ff st\.h r4\[32767\],r4 |
| 12225 | + *[0-9a-f]*: fd 5e 00 01 st\.h lr\[1\],lr |
| 12226 | + *[0-9a-f]*: e9 57 d9 16 st\.h r4\[-9962\],r7 |
| 12227 | + *[0-9a-f]*: f3 53 c0 86 st\.h r9\[-16250\],r3 |
| 12228 | + *[0-9a-f]*: d7 03 nop |
| 12229 | + |
| 12230 | +[0-9a-f]* <st_b4>: |
| 12231 | + *[0-9a-f]*: be 8f st\.b pc\[0x0\],pc |
| 12232 | + *[0-9a-f]*: f9 6c ff ff st\.b r12\[-1\],r12 |
| 12233 | + *[0-9a-f]*: eb 65 80 00 st\.b r5\[-32768\],r5 |
| 12234 | + *[0-9a-f]*: e9 64 7f ff st\.b r4\[32767\],r4 |
| 12235 | + *[0-9a-f]*: bc 9e st\.b lr\[0x1\],lr |
| 12236 | + *[0-9a-f]*: f9 66 75 96 st\.b r12\[30102\],r6 |
| 12237 | + *[0-9a-f]*: eb 61 71 31 st\.b r5\[28977\],r1 |
| 12238 | + *[0-9a-f]*: e1 61 15 5e st\.b r0\[5470\],r1 |
| 12239 | + |
| 12240 | +[0-9a-f]* <mfsr>: |
| 12241 | + *[0-9a-f]*: e1 bf 00 00 mfsr pc,0x0 |
| 12242 | + *[0-9a-f]*: e1 bc 00 ff mfsr r12,0x3fc |
| 12243 | + *[0-9a-f]*: e1 b5 00 80 mfsr r5,0x200 |
| 12244 | + *[0-9a-f]*: e1 b4 00 7f mfsr r4,0x1fc |
| 12245 | + *[0-9a-f]*: e1 be 00 01 mfsr lr,0x4 |
| 12246 | + *[0-9a-f]*: e1 b2 00 ae mfsr r2,0x2b8 |
| 12247 | + *[0-9a-f]*: e1 b4 00 41 mfsr r4,0x104 |
| 12248 | + *[0-9a-f]*: e1 ba 00 fe mfsr r10,0x3f8 |
| 12249 | + |
| 12250 | +[0-9a-f]* <mtsr>: |
| 12251 | + *[0-9a-f]*: e3 bf 00 00 mtsr 0x0,pc |
| 12252 | + *[0-9a-f]*: e3 bc 00 ff mtsr 0x3fc,r12 |
| 12253 | + *[0-9a-f]*: e3 b5 00 80 mtsr 0x200,r5 |
| 12254 | + *[0-9a-f]*: e3 b4 00 7f mtsr 0x1fc,r4 |
| 12255 | + *[0-9a-f]*: e3 be 00 01 mtsr 0x4,lr |
| 12256 | + *[0-9a-f]*: e3 ba 00 38 mtsr 0xe0,r10 |
| 12257 | + *[0-9a-f]*: e3 bc 00 d1 mtsr 0x344,r12 |
| 12258 | + *[0-9a-f]*: e3 b9 00 4c mtsr 0x130,r9 |
| 12259 | + |
| 12260 | +[0-9a-f]* <mfdr>: |
| 12261 | + *[0-9a-f]*: e5 bf 00 00 mfdr pc,0x0 |
| 12262 | + *[0-9a-f]*: e5 bc 00 ff mfdr r12,0x3fc |
| 12263 | + *[0-9a-f]*: e5 b5 00 80 mfdr r5,0x200 |
| 12264 | + *[0-9a-f]*: e5 b4 00 7f mfdr r4,0x1fc |
| 12265 | + *[0-9a-f]*: e5 be 00 01 mfdr lr,0x4 |
| 12266 | + *[0-9a-f]*: e5 b6 00 e9 mfdr r6,0x3a4 |
| 12267 | + *[0-9a-f]*: e5 b5 00 09 mfdr r5,0x24 |
| 12268 | + *[0-9a-f]*: e5 b9 00 4b mfdr r9,0x12c |
| 12269 | + |
| 12270 | +[0-9a-f]* <mtdr>: |
| 12271 | + *[0-9a-f]*: e7 bf 00 00 mtdr 0x0,pc |
| 12272 | + *[0-9a-f]*: e7 bc 00 ff mtdr 0x3fc,r12 |
| 12273 | + *[0-9a-f]*: e7 b5 00 80 mtdr 0x200,r5 |
| 12274 | + *[0-9a-f]*: e7 b4 00 7f mtdr 0x1fc,r4 |
| 12275 | + *[0-9a-f]*: e7 be 00 01 mtdr 0x4,lr |
| 12276 | + *[0-9a-f]*: e7 b8 00 2d mtdr 0xb4,r8 |
| 12277 | + *[0-9a-f]*: e7 ba 00 b4 mtdr 0x2d0,r10 |
| 12278 | + *[0-9a-f]*: e7 be 00 66 mtdr 0x198,lr |
| 12279 | + |
| 12280 | +[0-9a-f]* <sleep>: |
| 12281 | + *[0-9a-f]*: e9 b0 00 00 sleep 0x0 |
| 12282 | + *[0-9a-f]*: e9 b0 00 ff sleep 0xff |
| 12283 | + *[0-9a-f]*: e9 b0 00 80 sleep 0x80 |
| 12284 | + *[0-9a-f]*: e9 b0 00 7f sleep 0x7f |
| 12285 | + *[0-9a-f]*: e9 b0 00 01 sleep 0x1 |
| 12286 | + *[0-9a-f]*: e9 b0 00 fe sleep 0xfe |
| 12287 | + *[0-9a-f]*: e9 b0 00 0f sleep 0xf |
| 12288 | + *[0-9a-f]*: e9 b0 00 2b sleep 0x2b |
| 12289 | + |
| 12290 | +[0-9a-f]* <sync>: |
| 12291 | + *[0-9a-f]*: eb b0 00 00 sync 0x0 |
| 12292 | + *[0-9a-f]*: eb b0 00 ff sync 0xff |
| 12293 | + *[0-9a-f]*: eb b0 00 80 sync 0x80 |
| 12294 | + *[0-9a-f]*: eb b0 00 7f sync 0x7f |
| 12295 | + *[0-9a-f]*: eb b0 00 01 sync 0x1 |
| 12296 | + *[0-9a-f]*: eb b0 00 a6 sync 0xa6 |
| 12297 | + *[0-9a-f]*: eb b0 00 e6 sync 0xe6 |
| 12298 | + *[0-9a-f]*: eb b0 00 b4 sync 0xb4 |
| 12299 | + |
| 12300 | +[0-9a-f]* <bld>: |
| 12301 | + *[0-9a-f]*: ed bf 00 00 bld pc,0x0 |
| 12302 | + *[0-9a-f]*: ed bc 00 1f bld r12,0x1f |
| 12303 | + *[0-9a-f]*: ed b5 00 10 bld r5,0x10 |
| 12304 | + *[0-9a-f]*: ed b4 00 0f bld r4,0xf |
| 12305 | + *[0-9a-f]*: ed be 00 01 bld lr,0x1 |
| 12306 | + *[0-9a-f]*: ed b9 00 0f bld r9,0xf |
| 12307 | + *[0-9a-f]*: ed b0 00 04 bld r0,0x4 |
| 12308 | + *[0-9a-f]*: ed be 00 1a bld lr,0x1a |
| 12309 | + |
| 12310 | +[0-9a-f]* <bst>: |
| 12311 | + *[0-9a-f]*: ef bf 00 00 bst pc,0x0 |
| 12312 | + *[0-9a-f]*: ef bc 00 1f bst r12,0x1f |
| 12313 | + *[0-9a-f]*: ef b5 00 10 bst r5,0x10 |
| 12314 | + *[0-9a-f]*: ef b4 00 0f bst r4,0xf |
| 12315 | + *[0-9a-f]*: ef be 00 01 bst lr,0x1 |
| 12316 | + *[0-9a-f]*: ef ba 00 1c bst r10,0x1c |
| 12317 | + *[0-9a-f]*: ef b0 00 03 bst r0,0x3 |
| 12318 | + *[0-9a-f]*: ef bd 00 02 bst sp,0x2 |
| 12319 | + |
| 12320 | +[0-9a-f]* <sats>: |
| 12321 | + *[0-9a-f]*: f1 bf 00 00 sats pc,0x0 |
| 12322 | + *[0-9a-f]*: f1 bc 03 ff sats r12>>0x1f,0x1f |
| 12323 | + *[0-9a-f]*: f1 b5 02 10 sats r5>>0x10,0x10 |
| 12324 | + *[0-9a-f]*: f1 b4 01 ef sats r4>>0xf,0xf |
| 12325 | + *[0-9a-f]*: f1 be 00 21 sats lr>>0x1,0x1 |
| 12326 | + *[0-9a-f]*: f1 ba 02 63 sats r10>>0x3,0x13 |
| 12327 | + *[0-9a-f]*: f1 ba 03 42 sats r10>>0x2,0x1a |
| 12328 | + *[0-9a-f]*: f1 b1 00 34 sats r1>>0x14,0x1 |
| 12329 | + |
| 12330 | +[0-9a-f]* <satu>: |
| 12331 | + *[0-9a-f]*: f1 bf 04 00 satu pc,0x0 |
| 12332 | + *[0-9a-f]*: f1 bc 07 ff satu r12>>0x1f,0x1f |
| 12333 | + *[0-9a-f]*: f1 b5 06 10 satu r5>>0x10,0x10 |
| 12334 | + *[0-9a-f]*: f1 b4 05 ef satu r4>>0xf,0xf |
| 12335 | + *[0-9a-f]*: f1 be 04 21 satu lr>>0x1,0x1 |
| 12336 | + *[0-9a-f]*: f1 bf 04 e5 satu pc>>0x5,0x7 |
| 12337 | + *[0-9a-f]*: f1 b7 04 a5 satu r7>>0x5,0x5 |
| 12338 | + *[0-9a-f]*: f1 b2 06 7a satu r2>>0x1a,0x13 |
| 12339 | + |
| 12340 | +[0-9a-f]* <satrnds>: |
| 12341 | + *[0-9a-f]*: f3 bf 00 00 satrnds pc,0x0 |
| 12342 | + *[0-9a-f]*: f3 bc 03 ff satrnds r12>>0x1f,0x1f |
| 12343 | + *[0-9a-f]*: f3 b5 02 10 satrnds r5>>0x10,0x10 |
| 12344 | + *[0-9a-f]*: f3 b4 01 ef satrnds r4>>0xf,0xf |
| 12345 | + *[0-9a-f]*: f3 be 00 21 satrnds lr>>0x1,0x1 |
| 12346 | + *[0-9a-f]*: f3 b0 02 75 satrnds r0>>0x15,0x13 |
| 12347 | + *[0-9a-f]*: f3 bd 00 40 satrnds sp,0x2 |
| 12348 | + *[0-9a-f]*: f3 b7 03 a6 satrnds r7>>0x6,0x1d |
| 12349 | + |
| 12350 | +[0-9a-f]* <satrndu>: |
| 12351 | + *[0-9a-f]*: f3 bf 04 00 satrndu pc,0x0 |
| 12352 | + *[0-9a-f]*: f3 bc 07 ff satrndu r12>>0x1f,0x1f |
| 12353 | + *[0-9a-f]*: f3 b5 06 10 satrndu r5>>0x10,0x10 |
| 12354 | + *[0-9a-f]*: f3 b4 05 ef satrndu r4>>0xf,0xf |
| 12355 | + *[0-9a-f]*: f3 be 04 21 satrndu lr>>0x1,0x1 |
| 12356 | + *[0-9a-f]*: f3 bc 07 40 satrndu r12,0x1a |
| 12357 | + *[0-9a-f]*: f3 b4 04 75 satrndu r4>>0x15,0x3 |
| 12358 | + *[0-9a-f]*: f3 ba 06 03 satrndu r10>>0x3,0x10 |
| 12359 | + |
| 12360 | +[0-9a-f]* <subfc>: |
| 12361 | + *[0-9a-f]*: f5 bf 00 00 subfeq pc,0 |
| 12362 | + *[0-9a-f]*: f5 bc 0f ff subfal r12,-1 |
| 12363 | + *[0-9a-f]*: f5 b5 08 80 subfls r5,-128 |
| 12364 | + *[0-9a-f]*: f5 b4 07 7f subfpl r4,127 |
| 12365 | + *[0-9a-f]*: f5 be 01 01 subfne lr,1 |
| 12366 | + *[0-9a-f]*: f5 ba 08 08 subfls r10,8 |
| 12367 | + *[0-9a-f]*: f5 bb 0d 63 subfvc r11,99 |
| 12368 | + *[0-9a-f]*: f5 b2 0c 49 subfvs r2,73 |
| 12369 | + |
| 12370 | +[0-9a-f]* <subc>: |
| 12371 | + *[0-9a-f]*: f7 bf 00 00 subeq pc,0 |
| 12372 | + *[0-9a-f]*: f7 bc 0f ff subal r12,-1 |
| 12373 | + *[0-9a-f]*: f7 b5 08 80 subls r5,-128 |
| 12374 | + *[0-9a-f]*: f7 b4 07 7f subpl r4,127 |
| 12375 | + *[0-9a-f]*: f7 be 01 01 subne lr,1 |
| 12376 | + *[0-9a-f]*: f7 bc 08 76 subls r12,118 |
| 12377 | + *[0-9a-f]*: f7 be 0d f4 subvc lr,-12 |
| 12378 | + *[0-9a-f]*: f7 b4 06 f3 submi r4,-13 |
| 12379 | + |
| 12380 | +[0-9a-f]* <movc2>: |
| 12381 | + *[0-9a-f]*: f9 bf 00 00 moveq pc,0 |
| 12382 | + *[0-9a-f]*: f9 bc 0f ff moval r12,-1 |
| 12383 | + *[0-9a-f]*: f9 b5 08 80 movls r5,-128 |
| 12384 | + *[0-9a-f]*: f9 b4 07 7f movpl r4,127 |
| 12385 | + *[0-9a-f]*: f9 be 01 01 movne lr,1 |
| 12386 | + *[0-9a-f]*: f9 b3 05 86 movlt r3,-122 |
| 12387 | + *[0-9a-f]*: f9 b8 0d 02 movvc r8,2 |
| 12388 | + *[0-9a-f]*: f9 b7 01 91 movne r7,-111 |
| 12389 | + |
| 12390 | +[0-9a-f]* <cp_b>: |
| 12391 | + *[0-9a-f]*: e0 0f 18 00 cp\.b pc,r0 |
| 12392 | + *[0-9a-f]*: fe 00 18 00 cp\.b r0,pc |
| 12393 | + *[0-9a-f]*: f0 07 18 00 cp\.b r7,r8 |
| 12394 | + *[0-9a-f]*: ee 08 18 00 cp\.b r8,r7 |
| 12395 | + |
| 12396 | +[0-9a-f]* <cp_h>: |
| 12397 | + *[0-9a-f]*: e0 0f 19 00 cp\.h pc,r0 |
| 12398 | + *[0-9a-f]*: fe 00 19 00 cp\.h r0,pc |
| 12399 | + *[0-9a-f]*: f0 07 19 00 cp\.h r7,r8 |
| 12400 | + *[0-9a-f]*: ee 08 19 00 cp\.h r8,r7 |
| 12401 | + |
| 12402 | +[0-9a-f]* <ldm>: |
| 12403 | + *[0-9a-f]*: e1 cf 00 7e ldm pc,r1-r6 |
| 12404 | + *[0-9a-f]*: e1 cc ff ff ldm r12,r0-pc |
| 12405 | + *[0-9a-f]*: e1 c5 80 00 ldm r5,pc |
| 12406 | + *[0-9a-f]*: e1 c4 7f ff ldm r4,r0-lr |
| 12407 | + *[0-9a-f]*: e1 ce 00 01 ldm lr,r0 |
| 12408 | + *[0-9a-f]*: e1 c9 40 22 ldm r9,r1,r5,lr |
| 12409 | + *[0-9a-f]*: e1 cb 81 ec ldm r11,r2-r3,r5-r8,pc |
| 12410 | + *[0-9a-f]*: e1 c6 a2 09 ldm r6,r0,r3,r9,sp,pc |
| 12411 | + |
| 12412 | +[0-9a-f]* <ldm_pu>: |
| 12413 | + *[0-9a-f]*: e3 cf 03 c0 ldm pc\+\+,r6-r9 |
| 12414 | + *[0-9a-f]*: e3 cc ff ff ldm r12\+\+,r0-pc |
| 12415 | + *[0-9a-f]*: e3 c5 80 00 ldm r5\+\+,pc |
| 12416 | + *[0-9a-f]*: e3 c4 7f ff ldm r4\+\+,r0-lr |
| 12417 | + *[0-9a-f]*: e3 ce 00 01 ldm lr\+\+,r0 |
| 12418 | + *[0-9a-f]*: e3 cc d5 38 ldm r12\+\+,r3-r5,r8,r10,r12,lr-pc |
| 12419 | + *[0-9a-f]*: e3 ca c0 74 ldm r10\+\+,r2,r4-r6,lr-pc |
| 12420 | + *[0-9a-f]*: e3 c6 7e 1a ldm r6\+\+,r1,r3-r4,r9-lr |
| 12421 | + |
| 12422 | +[0-9a-f]* <ldmts>: |
| 12423 | + *[0-9a-f]*: e5 cf 01 80 ldmts pc,r7-r8 |
| 12424 | + *[0-9a-f]*: e5 cc ff ff ldmts r12,r0-pc |
| 12425 | + *[0-9a-f]*: e5 c5 80 00 ldmts r5,pc |
| 12426 | + *[0-9a-f]*: e5 c4 7f ff ldmts r4,r0-lr |
| 12427 | + *[0-9a-f]*: e5 ce 00 01 ldmts lr,r0 |
| 12428 | + *[0-9a-f]*: e5 c0 18 06 ldmts r0,r1-r2,r11-r12 |
| 12429 | + *[0-9a-f]*: e5 ce 61 97 ldmts lr,r0-r2,r4,r7-r8,sp-lr |
| 12430 | + *[0-9a-f]*: e5 cc c2 3b ldmts r12,r0-r1,r3-r5,r9,lr-pc |
| 12431 | + |
| 12432 | +[0-9a-f]* <ldmts_pu>: |
| 12433 | + *[0-9a-f]*: e7 cf 02 00 ldmts pc\+\+,r9 |
| 12434 | + *[0-9a-f]*: e7 cc ff ff ldmts r12\+\+,r0-pc |
| 12435 | + *[0-9a-f]*: e7 c5 80 00 ldmts r5\+\+,pc |
| 12436 | + *[0-9a-f]*: e7 c4 7f ff ldmts r4\+\+,r0-lr |
| 12437 | + *[0-9a-f]*: e7 ce 00 01 ldmts lr\+\+,r0 |
| 12438 | + *[0-9a-f]*: e7 cd 0a bd ldmts sp\+\+,r0,r2-r5,r7,r9,r11 |
| 12439 | + *[0-9a-f]*: e7 c5 0c 8e ldmts r5\+\+,r1-r3,r7,r10-r11 |
| 12440 | + *[0-9a-f]*: e7 c8 a1 9c ldmts r8\+\+,r2-r4,r7-r8,sp,pc |
| 12441 | + |
| 12442 | +[0-9a-f]* <stm>: |
| 12443 | + *[0-9a-f]*: e9 cf 00 80 stm pc,r7 |
| 12444 | + *[0-9a-f]*: e9 cc ff ff stm r12,r0-pc |
| 12445 | + *[0-9a-f]*: e9 c5 80 00 stm r5,pc |
| 12446 | + *[0-9a-f]*: e9 c4 7f ff stm r4,r0-lr |
| 12447 | + *[0-9a-f]*: e9 ce 00 01 stm lr,r0 |
| 12448 | + *[0-9a-f]*: e9 cd 49 2c stm sp,r2-r3,r5,r8,r11,lr |
| 12449 | + *[0-9a-f]*: e9 c4 4c 5f stm r4,r0-r4,r6,r10-r11,lr |
| 12450 | + *[0-9a-f]*: e9 c9 f2 22 stm r9,r1,r5,r9,r12-pc |
| 12451 | + |
| 12452 | +[0-9a-f]* <stm_pu>: |
| 12453 | + *[0-9a-f]*: eb cf 00 70 stm --pc,r4-r6 |
| 12454 | + *[0-9a-f]*: eb cc ff ff stm --r12,r0-pc |
| 12455 | + *[0-9a-f]*: eb c5 80 00 stm --r5,pc |
| 12456 | + *[0-9a-f]*: eb c4 7f ff stm --r4,r0-lr |
| 12457 | + *[0-9a-f]*: eb ce 00 01 stm --lr,r0 |
| 12458 | + *[0-9a-f]*: eb cb fb f1 stm --r11,r0,r4-r9,r11-pc |
| 12459 | + *[0-9a-f]*: eb cb 56 09 stm --r11,r0,r3,r9-r10,r12,lr |
| 12460 | + *[0-9a-f]*: eb c6 63 04 stm --r6,r2,r8-r9,sp-lr |
| 12461 | + |
| 12462 | +[0-9a-f]* <stmts>: |
| 12463 | + *[0-9a-f]*: ed cf 01 00 stmts pc,r8 |
| 12464 | + *[0-9a-f]*: ed cc ff ff stmts r12,r0-pc |
| 12465 | + *[0-9a-f]*: ed c5 80 00 stmts r5,pc |
| 12466 | + *[0-9a-f]*: ed c4 7f ff stmts r4,r0-lr |
| 12467 | + *[0-9a-f]*: ed ce 00 01 stmts lr,r0 |
| 12468 | + *[0-9a-f]*: ed c1 c6 5b stmts r1,r0-r1,r3-r4,r6,r9-r10,lr-pc |
| 12469 | + *[0-9a-f]*: ed c3 1d c1 stmts r3,r0,r6-r8,r10-r12 |
| 12470 | + *[0-9a-f]*: ed cb d6 d1 stmts r11,r0,r4,r6-r7,r9-r10,r12,lr-pc |
| 12471 | + |
| 12472 | +[0-9a-f]* <stmts_pu>: |
| 12473 | + *[0-9a-f]*: ef cf 01 c0 stmts --pc,r6-r8 |
| 12474 | + *[0-9a-f]*: ef cc ff ff stmts --r12,r0-pc |
| 12475 | + *[0-9a-f]*: ef c5 80 00 stmts --r5,pc |
| 12476 | + *[0-9a-f]*: ef c4 7f ff stmts --r4,r0-lr |
| 12477 | + *[0-9a-f]*: ef ce 00 01 stmts --lr,r0 |
| 12478 | + *[0-9a-f]*: ef c2 36 19 stmts --r2,r0,r3-r4,r9-r10,r12-sp |
| 12479 | + *[0-9a-f]*: ef c3 c0 03 stmts --r3,r0-r1,lr-pc |
| 12480 | + *[0-9a-f]*: ef c0 44 7d stmts --r0,r0,r2-r6,r10,lr |
| 12481 | + |
| 12482 | +[0-9a-f]* <ldins_h>: |
| 12483 | + *[0-9a-f]*: ff df 00 00 ldins\.h pc:b,pc\[0\] |
| 12484 | + *[0-9a-f]*: f9 dc 1f ff ldins\.h r12:t,r12\[-2\] |
| 12485 | + *[0-9a-f]*: eb d5 18 00 ldins\.h r5:t,r5\[-4096\] |
| 12486 | + *[0-9a-f]*: e9 d4 07 ff ldins\.h r4:b,r4\[4094\] |
| 12487 | + *[0-9a-f]*: fd de 10 01 ldins\.h lr:t,lr\[2\] |
| 12488 | + *[0-9a-f]*: fd d0 13 c5 ldins\.h r0:t,lr\[1930\] |
| 12489 | + *[0-9a-f]*: ef d3 0e f5 ldins\.h r3:b,r7\[-534\] |
| 12490 | + *[0-9a-f]*: f9 d2 0b 9a ldins\.h r2:b,r12\[-2252\] |
| 12491 | + |
| 12492 | +[0-9a-f]* <ldins_b>: |
| 12493 | + *[0-9a-f]*: ff df 40 00 ldins\.b pc:b,pc\[0\] |
| 12494 | + *[0-9a-f]*: f9 dc 7f ff ldins\.b r12:t,r12\[-1\] |
| 12495 | + *[0-9a-f]*: eb d5 68 00 ldins\.b r5:u,r5\[-2048\] |
| 12496 | + *[0-9a-f]*: e9 d4 57 ff ldins\.b r4:l,r4\[2047\] |
| 12497 | + *[0-9a-f]*: fd de 50 01 ldins\.b lr:l,lr\[1\] |
| 12498 | + *[0-9a-f]*: e9 d6 7d 6a ldins\.b r6:t,r4\[-662\] |
| 12499 | + *[0-9a-f]*: e3 d5 4f 69 ldins\.b r5:b,r1\[-151\] |
| 12500 | + *[0-9a-f]*: f7 da 78 7d ldins\.b r10:t,r11\[-1923\] |
| 12501 | + |
| 12502 | +[0-9a-f]* <ldswp_sh>: |
| 12503 | + *[0-9a-f]*: ff df 20 00 ldswp\.sh pc,pc\[0\] |
| 12504 | + *[0-9a-f]*: f9 dc 2f ff ldswp\.sh r12,r12\[-2\] |
| 12505 | + *[0-9a-f]*: eb d5 28 00 ldswp\.sh r5,r5\[-4096\] |
| 12506 | + *[0-9a-f]*: e9 d4 27 ff ldswp\.sh r4,r4\[4094\] |
| 12507 | + *[0-9a-f]*: fd de 20 01 ldswp\.sh lr,lr\[2\] |
| 12508 | + *[0-9a-f]*: f5 d9 27 84 ldswp\.sh r9,r10\[3848\] |
| 12509 | + *[0-9a-f]*: f9 d4 2c 04 ldswp\.sh r4,r12\[-2040\] |
| 12510 | + *[0-9a-f]*: e5 da 26 08 ldswp\.sh r10,r2\[3088\] |
| 12511 | + |
| 12512 | +[0-9a-f]* <ldswp_uh>: |
| 12513 | + *[0-9a-f]*: ff df 30 00 ldswp\.uh pc,pc\[0\] |
| 12514 | + *[0-9a-f]*: f9 dc 3f ff ldswp\.uh r12,r12\[-2\] |
| 12515 | + *[0-9a-f]*: eb d5 38 00 ldswp\.uh r5,r5\[-4096\] |
| 12516 | + *[0-9a-f]*: e9 d4 37 ff ldswp\.uh r4,r4\[4094\] |
| 12517 | + *[0-9a-f]*: fd de 30 01 ldswp\.uh lr,lr\[2\] |
| 12518 | + *[0-9a-f]*: f3 d4 37 46 ldswp\.uh r4,r9\[3724\] |
| 12519 | + *[0-9a-f]*: fb de 3c bc ldswp\.uh lr,sp\[-1672\] |
| 12520 | + *[0-9a-f]*: f9 d8 38 7d ldswp\.uh r8,r12\[-3846\] |
| 12521 | + |
| 12522 | +[0-9a-f]* <ldswp_w>: |
| 12523 | + *[0-9a-f]*: ff df 80 00 ldswp\.w pc,pc\[0\] |
| 12524 | + *[0-9a-f]*: f9 dc 8f ff ldswp\.w r12,r12\[-4\] |
| 12525 | + *[0-9a-f]*: eb d5 88 00 ldswp\.w r5,r5\[-8192\] |
| 12526 | + *[0-9a-f]*: e9 d4 87 ff ldswp\.w r4,r4\[8188\] |
| 12527 | + *[0-9a-f]*: fd de 80 01 ldswp\.w lr,lr\[4\] |
| 12528 | + *[0-9a-f]*: ef dd 81 d1 ldswp\.w sp,r7\[1860\] |
| 12529 | + *[0-9a-f]*: eb df 8c c1 ldswp\.w pc,r5\[-3324\] |
| 12530 | + *[0-9a-f]*: f5 dc 8c c8 ldswp\.w r12,r10\[-3296\] |
| 12531 | + |
| 12532 | +[0-9a-f]* <stswp_h>: |
| 12533 | + *[0-9a-f]*: ff df 90 00 stswp\.h pc\[0\],pc |
| 12534 | + *[0-9a-f]*: f9 dc 9f ff stswp\.h r12\[-2\],r12 |
| 12535 | + *[0-9a-f]*: eb d5 98 00 stswp\.h r5\[-4096\],r5 |
| 12536 | + *[0-9a-f]*: e9 d4 97 ff stswp\.h r4\[4094\],r4 |
| 12537 | + *[0-9a-f]*: fd de 90 01 stswp\.h lr\[2\],lr |
| 12538 | + *[0-9a-f]*: ef da 90 20 stswp\.h r7\[64\],r10 |
| 12539 | + *[0-9a-f]*: f5 d2 95 e8 stswp\.h r10\[3024\],r2 |
| 12540 | + *[0-9a-f]*: e1 da 9b 74 stswp\.h r0\[-2328\],r10 |
| 12541 | + |
| 12542 | +[0-9a-f]* <stswp_w>: |
| 12543 | + *[0-9a-f]*: ff df a0 00 stswp\.w pc\[0\],pc |
| 12544 | + *[0-9a-f]*: f9 dc af ff stswp\.w r12\[-4\],r12 |
| 12545 | + *[0-9a-f]*: eb d5 a8 00 stswp\.w r5\[-8192\],r5 |
| 12546 | + *[0-9a-f]*: e9 d4 a7 ff stswp\.w r4\[8188\],r4 |
| 12547 | + *[0-9a-f]*: fd de a0 01 stswp\.w lr\[4\],lr |
| 12548 | + *[0-9a-f]*: ff d8 a1 21 stswp\.w pc\[1156\],r8 |
| 12549 | + *[0-9a-f]*: fb da a7 ce stswp\.w sp\[7992\],r10 |
| 12550 | + *[0-9a-f]*: f1 d5 ae db stswp\.w r8\[-1172\],r5 |
| 12551 | + |
| 12552 | +[0-9a-f]* <and2>: |
| 12553 | + *[0-9a-f]*: ff ef 00 0f and pc,pc,pc |
| 12554 | + *[0-9a-f]*: f9 ec 01 fc and r12,r12,r12<<0x1f |
| 12555 | + *[0-9a-f]*: eb e5 01 05 and r5,r5,r5<<0x10 |
| 12556 | + *[0-9a-f]*: e9 e4 00 f4 and r4,r4,r4<<0xf |
| 12557 | + *[0-9a-f]*: fd ee 00 1e and lr,lr,lr<<0x1 |
| 12558 | + *[0-9a-f]*: e5 e1 00 1a and r10,r2,r1<<0x1 |
| 12559 | + *[0-9a-f]*: f1 eb 01 bc and r12,r8,r11<<0x1b |
| 12560 | + *[0-9a-f]*: ef e0 00 3a and r10,r7,r0<<0x3 |
| 12561 | + |
| 12562 | +[0-9a-f]* <and3>: |
| 12563 | + *[0-9a-f]*: ff ef 02 0f and pc,pc,pc |
| 12564 | + *[0-9a-f]*: f9 ec 03 fc and r12,r12,r12>>0x1f |
| 12565 | + *[0-9a-f]*: eb e5 03 05 and r5,r5,r5>>0x10 |
| 12566 | + *[0-9a-f]*: e9 e4 02 f4 and r4,r4,r4>>0xf |
| 12567 | + *[0-9a-f]*: fd ee 02 1e and lr,lr,lr>>0x1 |
| 12568 | + *[0-9a-f]*: f1 e7 03 1c and r12,r8,r7>>0x11 |
| 12569 | + *[0-9a-f]*: e9 e9 03 4f and pc,r4,r9>>0x14 |
| 12570 | + *[0-9a-f]*: f3 ea 02 ca and r10,r9,r10>>0xc |
| 12571 | + |
| 12572 | +[0-9a-f]* <or2>: |
| 12573 | + *[0-9a-f]*: ff ef 10 0f or pc,pc,pc |
| 12574 | + *[0-9a-f]*: f9 ec 11 fc or r12,r12,r12<<0x1f |
| 12575 | + *[0-9a-f]*: eb e5 11 05 or r5,r5,r5<<0x10 |
| 12576 | + *[0-9a-f]*: e9 e4 10 f4 or r4,r4,r4<<0xf |
| 12577 | + *[0-9a-f]*: fd ee 10 1e or lr,lr,lr<<0x1 |
| 12578 | + *[0-9a-f]*: fb eb 11 d8 or r8,sp,r11<<0x1d |
| 12579 | + *[0-9a-f]*: f3 e2 11 cf or pc,r9,r2<<0x1c |
| 12580 | + *[0-9a-f]*: e3 e2 10 35 or r5,r1,r2<<0x3 |
| 12581 | + |
| 12582 | +[0-9a-f]* <or3>: |
| 12583 | + *[0-9a-f]*: ff ef 12 0f or pc,pc,pc |
| 12584 | + *[0-9a-f]*: f9 ec 13 fc or r12,r12,r12>>0x1f |
| 12585 | + *[0-9a-f]*: eb e5 13 05 or r5,r5,r5>>0x10 |
| 12586 | + *[0-9a-f]*: e9 e4 12 f4 or r4,r4,r4>>0xf |
| 12587 | + *[0-9a-f]*: fd ee 12 1e or lr,lr,lr>>0x1 |
| 12588 | + *[0-9a-f]*: fb ed 12 21 or r1,sp,sp>>0x2 |
| 12589 | + *[0-9a-f]*: e3 e1 13 d0 or r0,r1,r1>>0x1d |
| 12590 | + *[0-9a-f]*: f9 e8 12 84 or r4,r12,r8>>0x8 |
| 12591 | + |
| 12592 | +[0-9a-f]* <eor2>: |
| 12593 | + *[0-9a-f]*: ff ef 20 0f eor pc,pc,pc |
| 12594 | + *[0-9a-f]*: f9 ec 21 fc eor r12,r12,r12<<0x1f |
| 12595 | + *[0-9a-f]*: eb e5 21 05 eor r5,r5,r5<<0x10 |
| 12596 | + *[0-9a-f]*: e9 e4 20 f4 eor r4,r4,r4<<0xf |
| 12597 | + *[0-9a-f]*: fd ee 20 1e eor lr,lr,lr<<0x1 |
| 12598 | + *[0-9a-f]*: f3 e4 20 ba eor r10,r9,r4<<0xb |
| 12599 | + *[0-9a-f]*: e1 e1 21 f4 eor r4,r0,r1<<0x1f |
| 12600 | + *[0-9a-f]*: e5 ec 20 d6 eor r6,r2,r12<<0xd |
| 12601 | + |
| 12602 | +[0-9a-f]* <eor3>: |
| 12603 | + *[0-9a-f]*: ff ef 22 0f eor pc,pc,pc |
| 12604 | + *[0-9a-f]*: f9 ec 23 fc eor r12,r12,r12>>0x1f |
| 12605 | + *[0-9a-f]*: eb e5 23 05 eor r5,r5,r5>>0x10 |
| 12606 | + *[0-9a-f]*: e9 e4 22 f4 eor r4,r4,r4>>0xf |
| 12607 | + *[0-9a-f]*: fd ee 22 1e eor lr,lr,lr>>0x1 |
| 12608 | + *[0-9a-f]*: eb e5 23 65 eor r5,r5,r5>>0x16 |
| 12609 | + *[0-9a-f]*: e3 ee 22 3a eor r10,r1,lr>>0x3 |
| 12610 | + *[0-9a-f]*: fd ed 23 a7 eor r7,lr,sp>>0x1a |
| 12611 | + |
| 12612 | +[0-9a-f]* <sthh_w2>: |
| 12613 | + *[0-9a-f]*: ff ef 8f 0f sthh\.w pc\[pc\],pc:b,pc:b |
| 12614 | + *[0-9a-f]*: f9 ec bc 3c sthh\.w r12\[r12<<0x3\],r12:t,r12:t |
| 12615 | + *[0-9a-f]*: eb e5 b5 25 sthh\.w r5\[r5<<0x2\],r5:t,r5:t |
| 12616 | + *[0-9a-f]*: e9 e4 84 14 sthh\.w r4\[r4<<0x1\],r4:b,r4:b |
| 12617 | + *[0-9a-f]*: fd ee be 1e sthh\.w lr\[lr<<0x1\],lr:t,lr:t |
| 12618 | + *[0-9a-f]*: e3 ec b6 3d sthh\.w sp\[r6<<0x3\],r1:t,r12:t |
| 12619 | + *[0-9a-f]*: f3 e9 b6 06 sthh\.w r6\[r6\],r9:t,r9:t |
| 12620 | + *[0-9a-f]*: e1 eb 93 0a sthh\.w r10\[r3\],r0:b,r11:t |
| 12621 | + |
| 12622 | +[0-9a-f]* <sthh_w1>: |
| 12623 | + *[0-9a-f]*: ff ef c0 0f sthh\.w pc\[0x0\],pc:b,pc:b |
| 12624 | + *[0-9a-f]*: f9 ec ff fc sthh\.w r12\[0x3fc\],r12:t,r12:t |
| 12625 | + *[0-9a-f]*: eb e5 f8 05 sthh\.w r5\[0x200\],r5:t,r5:t |
| 12626 | + *[0-9a-f]*: e9 e4 c7 f4 sthh\.w r4\[0x1fc\],r4:b,r4:b |
| 12627 | + *[0-9a-f]*: fd ee f0 1e sthh\.w lr\[0x4\],lr:t,lr:t |
| 12628 | + *[0-9a-f]*: f3 e0 e6 54 sthh\.w r4\[0x194\],r9:t,r0:b |
| 12629 | + *[0-9a-f]*: e5 ea e5 78 sthh\.w r8\[0x15c\],r2:t,r10:b |
| 12630 | + *[0-9a-f]*: f3 e2 c2 bd sthh\.w sp\[0xac\],r9:b,r2:b |
| 12631 | + |
| 12632 | +[0-9a-f]* <cop>: |
| 12633 | + *[0-9a-f]*: e1 a0 00 00 cop cp0,cr0,cr0,cr0,0x0 |
| 12634 | + *[0-9a-f]*: e7 af ff ff cop cp7,cr15,cr15,cr15,0x7f |
| 12635 | + *[0-9a-f]*: e3 a8 75 55 cop cp3,cr5,cr5,cr5,0x31 |
| 12636 | + *[0-9a-f]*: e3 a8 44 44 cop cp2,cr4,cr4,cr4,0x30 |
| 12637 | + *[0-9a-f]*: e5 ad a8 37 cop cp5,cr8,cr3,cr7,0x5a |
| 12638 | + |
| 12639 | +[0-9a-f]* <ldc_w1>: |
| 12640 | + *[0-9a-f]*: e9 a0 00 00 ldc\.w cp0,cr0,r0\[0x0\] |
| 12641 | + *[0-9a-f]*: e9 af ef ff ldc\.w cp7,cr15,pc\[0x3fc\] |
| 12642 | + *[0-9a-f]*: e9 a5 65 80 ldc\.w cp3,cr5,r5\[0x200\] |
| 12643 | + *[0-9a-f]*: e9 a4 44 7f ldc\.w cp2,cr4,r4\[0x1fc\] |
| 12644 | + *[0-9a-f]*: e9 ad 89 24 ldc\.w cp4,cr9,sp\[0x90\] |
| 12645 | + |
| 12646 | +[0-9a-f]* <ldc_w2>: |
| 12647 | + *[0-9a-f]*: ef a0 00 40 ldc\.w cp0,cr0,--r0 |
| 12648 | + *[0-9a-f]*: ef af ef 40 ldc\.w cp7,cr15,--pc |
| 12649 | + *[0-9a-f]*: ef a5 65 40 ldc\.w cp3,cr5,--r5 |
| 12650 | + *[0-9a-f]*: ef a4 44 40 ldc\.w cp2,cr4,--r4 |
| 12651 | + *[0-9a-f]*: ef ad 89 40 ldc\.w cp4,cr9,--sp |
| 12652 | + |
| 12653 | +[0-9a-f]* <ldc_w3>: |
| 12654 | + *[0-9a-f]*: ef a0 10 00 ldc\.w cp0,cr0,r0\[r0\] |
| 12655 | + *[0-9a-f]*: ef af ff 3f ldc\.w cp7,cr15,pc\[pc<<0x3\] |
| 12656 | + *[0-9a-f]*: ef a5 75 24 ldc\.w cp3,cr5,r5\[r4<<0x2\] |
| 12657 | + *[0-9a-f]*: ef a4 54 13 ldc\.w cp2,cr4,r4\[r3<<0x1\] |
| 12658 | + *[0-9a-f]*: ef ad 99 0c ldc\.w cp4,cr9,sp\[r12\] |
| 12659 | + |
| 12660 | +[0-9a-f]* <ldc_d1>: |
| 12661 | + *[0-9a-f]*: e9 a0 10 00 ldc\.d cp0,cr0,r0\[0x0\] |
| 12662 | + *[0-9a-f]*: e9 af fe ff ldc\.d cp7,cr14,pc\[0x3fc\] |
| 12663 | + *[0-9a-f]*: e9 a5 76 80 ldc\.d cp3,cr6,r5\[0x200\] |
| 12664 | + *[0-9a-f]*: e9 a4 54 7f ldc\.d cp2,cr4,r4\[0x1fc\] |
| 12665 | + *[0-9a-f]*: e9 ad 98 24 ldc\.d cp4,cr8,sp\[0x90\] |
| 12666 | + |
| 12667 | +[0-9a-f]* <ldc_d2>: |
| 12668 | + *[0-9a-f]*: ef a0 00 50 ldc\.d cp0,cr0,--r0 |
| 12669 | + *[0-9a-f]*: ef af ee 50 ldc\.d cp7,cr14,--pc |
| 12670 | + *[0-9a-f]*: ef a5 66 50 ldc\.d cp3,cr6,--r5 |
| 12671 | + *[0-9a-f]*: ef a4 44 50 ldc\.d cp2,cr4,--r4 |
| 12672 | + *[0-9a-f]*: ef ad 88 50 ldc\.d cp4,cr8,--sp |
| 12673 | + |
| 12674 | +[0-9a-f]* <ldc_d3>: |
| 12675 | + *[0-9a-f]*: ef a0 10 40 ldc\.d cp0,cr0,r0\[r0\] |
| 12676 | + *[0-9a-f]*: ef af fe 7f ldc\.d cp7,cr14,pc\[pc<<0x3\] |
| 12677 | + *[0-9a-f]*: ef a5 76 64 ldc\.d cp3,cr6,r5\[r4<<0x2\] |
| 12678 | + *[0-9a-f]*: ef a4 54 53 ldc\.d cp2,cr4,r4\[r3<<0x1\] |
| 12679 | + *[0-9a-f]*: ef ad 98 4c ldc\.d cp4,cr8,sp\[r12\] |
| 12680 | + |
| 12681 | +[0-9a-f]* <stc_w1>: |
| 12682 | + *[0-9a-f]*: eb a0 00 00 stc\.w cp0,r0\[0x0\],cr0 |
| 12683 | + *[0-9a-f]*: eb af ef ff stc\.w cp7,pc\[0x3fc\],cr15 |
| 12684 | + *[0-9a-f]*: eb a5 65 80 stc\.w cp3,r5\[0x200\],cr5 |
| 12685 | + *[0-9a-f]*: eb a4 44 7f stc\.w cp2,r4\[0x1fc\],cr4 |
| 12686 | + *[0-9a-f]*: eb ad 89 24 stc\.w cp4,sp\[0x90\],cr9 |
| 12687 | + |
| 12688 | +[0-9a-f]* <stc_w2>: |
| 12689 | + *[0-9a-f]*: ef a0 00 60 stc\.w cp0,r0\+\+,cr0 |
| 12690 | + *[0-9a-f]*: ef af ef 60 stc\.w cp7,pc\+\+,cr15 |
| 12691 | + *[0-9a-f]*: ef a5 65 60 stc\.w cp3,r5\+\+,cr5 |
| 12692 | + *[0-9a-f]*: ef a4 44 60 stc\.w cp2,r4\+\+,cr4 |
| 12693 | + *[0-9a-f]*: ef ad 89 60 stc\.w cp4,sp\+\+,cr9 |
| 12694 | + |
| 12695 | +[0-9a-f]* <stc_w3>: |
| 12696 | + *[0-9a-f]*: ef a0 10 80 stc\.w cp0,r0\[r0\],cr0 |
| 12697 | + *[0-9a-f]*: ef af ff bf stc\.w cp7,pc\[pc<<0x3\],cr15 |
| 12698 | + *[0-9a-f]*: ef a5 75 a4 stc\.w cp3,r5\[r4<<0x2\],cr5 |
| 12699 | + *[0-9a-f]*: ef a4 54 93 stc\.w cp2,r4\[r3<<0x1\],cr4 |
| 12700 | + *[0-9a-f]*: ef ad 99 8c stc\.w cp4,sp\[r12\],cr9 |
| 12701 | + |
| 12702 | +[0-9a-f]* <stc_d1>: |
| 12703 | + *[0-9a-f]*: eb a0 10 00 stc\.d cp0,r0\[0x0\],cr0 |
| 12704 | + *[0-9a-f]*: eb af fe ff stc\.d cp7,pc\[0x3fc\],cr14 |
| 12705 | + *[0-9a-f]*: eb a5 76 80 stc\.d cp3,r5\[0x200\],cr6 |
| 12706 | + *[0-9a-f]*: eb a4 54 7f stc\.d cp2,r4\[0x1fc\],cr4 |
| 12707 | + *[0-9a-f]*: eb ad 98 24 stc\.d cp4,sp\[0x90\],cr8 |
| 12708 | + |
| 12709 | +[0-9a-f]* <stc_d2>: |
| 12710 | + *[0-9a-f]*: ef a0 00 70 stc\.d cp0,r0\+\+,cr0 |
| 12711 | + *[0-9a-f]*: ef af ee 70 stc\.d cp7,pc\+\+,cr14 |
| 12712 | + *[0-9a-f]*: ef a5 66 70 stc\.d cp3,r5\+\+,cr6 |
| 12713 | + *[0-9a-f]*: ef a4 44 70 stc\.d cp2,r4\+\+,cr4 |
| 12714 | + *[0-9a-f]*: ef ad 88 70 stc\.d cp4,sp\+\+,cr8 |
| 12715 | + |
| 12716 | +[0-9a-f]* <stc_d3>: |
| 12717 | + *[0-9a-f]*: ef a0 10 c0 stc\.d cp0,r0\[r0\],cr0 |
| 12718 | + *[0-9a-f]*: ef af fe ff stc\.d cp7,pc\[pc<<0x3\],cr14 |
| 12719 | + *[0-9a-f]*: ef a5 76 e4 stc\.d cp3,r5\[r4<<0x2\],cr6 |
| 12720 | + *[0-9a-f]*: ef a4 54 d3 stc\.d cp2,r4\[r3<<0x1\],cr4 |
| 12721 | + *[0-9a-f]*: ef ad 98 cc stc\.d cp4,sp\[r12\],cr8 |
| 12722 | + |
| 12723 | +[0-9a-f]* <ldc0_w>: |
| 12724 | + *[0-9a-f]*: f1 a0 00 00 ldc0\.w cr0,r0\[0x0\] |
| 12725 | + *[0-9a-f]*: f1 af ff ff ldc0\.w cr15,pc\[0x3ffc\] |
| 12726 | + *[0-9a-f]*: f1 a5 85 00 ldc0\.w cr5,r5\[0x2000\] |
| 12727 | + *[0-9a-f]*: f1 a4 74 ff ldc0\.w cr4,r4\[0x1ffc\] |
| 12728 | + *[0-9a-f]*: f1 ad 09 93 ldc0\.w cr9,sp\[0x24c\] |
| 12729 | + |
| 12730 | +[0-9a-f]* <ldc0_d>: |
| 12731 | + *[0-9a-f]*: f3 a0 00 00 ldc0\.d cr0,r0\[0x0\] |
| 12732 | + *[0-9a-f]*: f3 af fe ff ldc0\.d cr14,pc\[0x3ffc\] |
| 12733 | + *[0-9a-f]*: f3 a5 86 00 ldc0\.d cr6,r5\[0x2000\] |
| 12734 | + *[0-9a-f]*: f3 a4 74 ff ldc0\.d cr4,r4\[0x1ffc\] |
| 12735 | + *[0-9a-f]*: f3 ad 08 93 ldc0\.d cr8,sp\[0x24c\] |
| 12736 | + |
| 12737 | +[0-9a-f]* <stc0_w>: |
| 12738 | + *[0-9a-f]*: f5 a0 00 00 stc0\.w r0\[0x0\],cr0 |
| 12739 | + *[0-9a-f]*: f5 af ff ff stc0\.w pc\[0x3ffc\],cr15 |
| 12740 | + *[0-9a-f]*: f5 a5 85 00 stc0\.w r5\[0x2000\],cr5 |
| 12741 | + *[0-9a-f]*: f5 a4 74 ff stc0\.w r4\[0x1ffc\],cr4 |
| 12742 | + *[0-9a-f]*: f5 ad 09 93 stc0\.w sp\[0x24c\],cr9 |
| 12743 | + |
| 12744 | +[0-9a-f]* <stc0_d>: |
| 12745 | + *[0-9a-f]*: f7 a0 00 00 stc0\.d r0\[0x0\],cr0 |
| 12746 | + *[0-9a-f]*: f7 af fe ff stc0\.d pc\[0x3ffc\],cr14 |
| 12747 | + *[0-9a-f]*: f7 a5 86 00 stc0\.d r5\[0x2000\],cr6 |
| 12748 | + *[0-9a-f]*: f7 a4 74 ff stc0\.d r4\[0x1ffc\],cr4 |
| 12749 | + *[0-9a-f]*: f7 ad 08 93 stc0\.d sp\[0x24c\],cr8 |
| 12750 | + |
| 12751 | +[0-9a-f]* <memc>: |
| 12752 | + *[0-9a-f]*: f6 10 00 00 memc 0,0x0 |
| 12753 | + *[0-9a-f]*: f6 1f ff ff memc -4,0x1f |
| 12754 | + *[0-9a-f]*: f6 18 40 00 memc -65536,0x10 |
| 12755 | + *[0-9a-f]*: f6 17 bf ff memc 65532,0xf |
| 12756 | + |
| 12757 | +[0-9a-f]* <mems>: |
| 12758 | + *[0-9a-f]*: f8 10 00 00 mems 0,0x0 |
| 12759 | + *[0-9a-f]*: f8 1f ff ff mems -4,0x1f |
| 12760 | + *[0-9a-f]*: f8 18 40 00 mems -65536,0x10 |
| 12761 | + *[0-9a-f]*: f8 17 bf ff mems 65532,0xf |
| 12762 | + |
| 12763 | +[0-9a-f]* <memt>: |
| 12764 | + *[0-9a-f]*: fa 10 00 00 memt 0,0x0 |
| 12765 | + *[0-9a-f]*: fa 1f ff ff memt -4,0x1f |
| 12766 | + *[0-9a-f]*: fa 18 40 00 memt -65536,0x10 |
| 12767 | + *[0-9a-f]*: fa 17 bf ff memt 65532,0xf |
| 12768 | + |
| 12769 | +[0-9a-f]* <stcond>: |
| 12770 | + *[0-9a-f]*: e1 70 00 00 stcond r0\[0\],r0 |
| 12771 | + *[0-9a-f]*: ff 7f ff ff stcond pc\[-1\],pc |
| 12772 | + *[0-9a-f]*: f1 77 80 00 stcond r8\[-32768\],r7 |
| 12773 | + *[0-9a-f]*: ef 78 7f ff stcond r7\[32767\],r8 |
| 12774 | + *[0-9a-f]*: eb 7a 12 34 stcond r5\[4660\],r10 |
| 12775 | + |
| 12776 | +[0-9a-f]* <ldcm_w>: |
| 12777 | + *[0-9a-f]*: ed af 00 ff ldcm\.w cp0,pc,cr0-cr7 |
| 12778 | + *[0-9a-f]*: ed a0 e0 01 ldcm\.w cp7,r0,cr0 |
| 12779 | + *[0-9a-f]*: ed a4 90 7f ldcm\.w cp4,r4\+\+,cr0-cr6 |
| 12780 | + *[0-9a-f]*: ed a7 60 80 ldcm\.w cp3,r7,cr7 |
| 12781 | + *[0-9a-f]*: ed ac 30 72 ldcm\.w cp1,r12\+\+,cr1,cr4-cr6 |
| 12782 | + *[0-9a-f]*: ed af 01 ff ldcm\.w cp0,pc,cr8-cr15 |
| 12783 | + *[0-9a-f]*: ed a0 e1 01 ldcm\.w cp7,r0,cr8 |
| 12784 | + *[0-9a-f]*: ed a4 91 7f ldcm\.w cp4,r4\+\+,cr8-cr14 |
| 12785 | + *[0-9a-f]*: ed a7 61 80 ldcm\.w cp3,r7,cr15 |
| 12786 | + *[0-9a-f]*: ed ac 31 72 ldcm\.w cp1,r12\+\+,cr9,cr12-cr14 |
| 12787 | + |
| 12788 | +[0-9a-f]* <ldcm_d>: |
| 12789 | + *[0-9a-f]*: ed af 04 ff ldcm\.d cp0,pc,cr0-cr15 |
| 12790 | + *[0-9a-f]*: ed a0 e4 01 ldcm\.d cp7,r0,cr0-cr1 |
| 12791 | + *[0-9a-f]*: ed a4 94 7f ldcm\.d cp4,r4\+\+,cr0-cr13 |
| 12792 | + *[0-9a-f]*: ed a7 64 80 ldcm\.d cp3,r7,cr14-cr15 |
| 12793 | + *[0-9a-f]*: ed ac 54 93 ldcm\.d cp2,r12\+\+,cr0-cr3,cr8-cr9,cr14-cr15 |
| 12794 | + |
| 12795 | +[0-9a-f]* <stcm_w>: |
| 12796 | + *[0-9a-f]*: ed af 02 ff stcm\.w cp0,pc,cr0-cr7 |
| 12797 | + *[0-9a-f]*: ed a0 e2 01 stcm\.w cp7,r0,cr0 |
| 12798 | + *[0-9a-f]*: ed a4 92 7f stcm\.w cp4,--r4,cr0-cr6 |
| 12799 | + *[0-9a-f]*: ed a7 62 80 stcm\.w cp3,r7,cr7 |
| 12800 | + *[0-9a-f]*: ed ac 32 72 stcm\.w cp1,--r12,cr1,cr4-cr6 |
| 12801 | + *[0-9a-f]*: ed af 03 ff stcm\.w cp0,pc,cr8-cr15 |
| 12802 | + *[0-9a-f]*: ed a0 e3 01 stcm\.w cp7,r0,cr8 |
| 12803 | + *[0-9a-f]*: ed a4 93 7f stcm\.w cp4,--r4,cr8-cr14 |
| 12804 | + *[0-9a-f]*: ed a7 63 80 stcm\.w cp3,r7,cr15 |
| 12805 | + *[0-9a-f]*: ed ac 33 72 stcm\.w cp1,--r12,cr9,cr12-cr14 |
| 12806 | + |
| 12807 | +[0-9a-f]* <stcm_d>: |
| 12808 | + *[0-9a-f]*: ed af 05 ff stcm\.d cp0,pc,cr0-cr15 |
| 12809 | + *[0-9a-f]*: ed a0 e5 01 stcm\.d cp7,r0,cr0-cr1 |
| 12810 | + *[0-9a-f]*: ed a4 95 7f stcm\.d cp4,--r4,cr0-cr13 |
| 12811 | + *[0-9a-f]*: ed a7 65 80 stcm\.d cp3,r7,cr14-cr15 |
| 12812 | + *[0-9a-f]*: ed ac 55 93 stcm\.d cp2,--r12,cr0-cr3,cr8-cr9,cr14-cr15 |
| 12813 | + |
| 12814 | +[0-9a-f]* <mvcr_w>: |
| 12815 | + *[0-9a-f]*: ef af ef 00 mvcr\.w cp7,pc,cr15 |
| 12816 | + *[0-9a-f]*: ef a0 00 00 mvcr\.w cp0,r0,cr0 |
| 12817 | + *[0-9a-f]*: ef af 0f 00 mvcr\.w cp0,pc,cr15 |
| 12818 | + *[0-9a-f]*: ef a0 ef 00 mvcr\.w cp7,r0,cr15 |
| 12819 | + *[0-9a-f]*: ef af e0 00 mvcr\.w cp7,pc,cr0 |
| 12820 | + *[0-9a-f]*: ef a7 88 00 mvcr\.w cp4,r7,cr8 |
| 12821 | + *[0-9a-f]*: ef a8 67 00 mvcr\.w cp3,r8,cr7 |
| 12822 | + |
| 12823 | +[0-9a-f]* <mvcr_d>: |
| 12824 | + *[0-9a-f]*: ef ae ee 10 mvcr\.d cp7,lr,cr14 |
| 12825 | + *[0-9a-f]*: ef a0 00 10 mvcr\.d cp0,r0,cr0 |
| 12826 | + *[0-9a-f]*: ef ae 0e 10 mvcr\.d cp0,lr,cr14 |
| 12827 | + *[0-9a-f]*: ef a0 ee 10 mvcr\.d cp7,r0,cr14 |
| 12828 | + *[0-9a-f]*: ef ae e0 10 mvcr\.d cp7,lr,cr0 |
| 12829 | + *[0-9a-f]*: ef a6 88 10 mvcr\.d cp4,r6,cr8 |
| 12830 | + *[0-9a-f]*: ef a8 66 10 mvcr\.d cp3,r8,cr6 |
| 12831 | + |
| 12832 | +[0-9a-f]* <mvrc_w>: |
| 12833 | + *[0-9a-f]*: ef af ef 20 mvrc\.w cp7,cr15,pc |
| 12834 | + *[0-9a-f]*: ef a0 00 20 mvrc\.w cp0,cr0,r0 |
| 12835 | + *[0-9a-f]*: ef af 0f 20 mvrc\.w cp0,cr15,pc |
| 12836 | + *[0-9a-f]*: ef a0 ef 20 mvrc\.w cp7,cr15,r0 |
| 12837 | + *[0-9a-f]*: ef af e0 20 mvrc\.w cp7,cr0,pc |
| 12838 | + *[0-9a-f]*: ef a7 88 20 mvrc\.w cp4,cr8,r7 |
| 12839 | + *[0-9a-f]*: ef a8 67 20 mvrc\.w cp3,cr7,r8 |
| 12840 | + |
| 12841 | +[0-9a-f]* <mvrc_d>: |
| 12842 | + *[0-9a-f]*: ef ae ee 30 mvrc\.d cp7,cr14,lr |
| 12843 | + *[0-9a-f]*: ef a0 00 30 mvrc\.d cp0,cr0,r0 |
| 12844 | + *[0-9a-f]*: ef ae 0e 30 mvrc\.d cp0,cr14,lr |
| 12845 | + *[0-9a-f]*: ef a0 ee 30 mvrc\.d cp7,cr14,r0 |
| 12846 | + *[0-9a-f]*: ef ae e0 30 mvrc\.d cp7,cr0,lr |
| 12847 | + *[0-9a-f]*: ef a6 88 30 mvrc\.d cp4,cr8,r6 |
| 12848 | + *[0-9a-f]*: ef a8 66 30 mvrc\.d cp3,cr6,r8 |
| 12849 | + |
| 12850 | +[0-9a-f]* <bfexts>: |
| 12851 | + *[0-9a-f]*: ff df b3 ff bfexts pc,pc,0x1f,0x1f |
| 12852 | + *[0-9a-f]*: e1 d0 b0 00 bfexts r0,r0,0x0,0x0 |
| 12853 | + *[0-9a-f]*: e1 df b3 ff bfexts r0,pc,0x1f,0x1f |
| 12854 | + *[0-9a-f]*: ff d0 b3 ff bfexts pc,r0,0x1f,0x1f |
| 12855 | + *[0-9a-f]*: ff df b0 1f bfexts pc,pc,0x0,0x1f |
| 12856 | + *[0-9a-f]*: ff df b3 e0 bfexts pc,pc,0x1f,0x0 |
| 12857 | + *[0-9a-f]*: ef d8 b1 f0 bfexts r7,r8,0xf,0x10 |
| 12858 | + *[0-9a-f]*: f1 d7 b2 0f bfexts r8,r7,0x10,0xf |
| 12859 | + |
| 12860 | +[0-9a-f]* <bfextu>: |
| 12861 | + *[0-9a-f]*: ff df c3 ff bfextu pc,pc,0x1f,0x1f |
| 12862 | + *[0-9a-f]*: e1 d0 c0 00 bfextu r0,r0,0x0,0x0 |
| 12863 | + *[0-9a-f]*: e1 df c3 ff bfextu r0,pc,0x1f,0x1f |
| 12864 | + *[0-9a-f]*: ff d0 c3 ff bfextu pc,r0,0x1f,0x1f |
| 12865 | + *[0-9a-f]*: ff df c0 1f bfextu pc,pc,0x0,0x1f |
| 12866 | + *[0-9a-f]*: ff df c3 e0 bfextu pc,pc,0x1f,0x0 |
| 12867 | + *[0-9a-f]*: ef d8 c1 f0 bfextu r7,r8,0xf,0x10 |
| 12868 | + *[0-9a-f]*: f1 d7 c2 0f bfextu r8,r7,0x10,0xf |
| 12869 | + |
| 12870 | +[0-9a-f]* <bfins>: |
| 12871 | + *[0-9a-f]*: ff df d3 ff bfins pc,pc,0x1f,0x1f |
| 12872 | + *[0-9a-f]*: e1 d0 d0 00 bfins r0,r0,0x0,0x0 |
| 12873 | + *[0-9a-f]*: e1 df d3 ff bfins r0,pc,0x1f,0x1f |
| 12874 | + *[0-9a-f]*: ff d0 d3 ff bfins pc,r0,0x1f,0x1f |
| 12875 | + *[0-9a-f]*: ff df d0 1f bfins pc,pc,0x0,0x1f |
| 12876 | + *[0-9a-f]*: ff df d3 e0 bfins pc,pc,0x1f,0x0 |
| 12877 | + *[0-9a-f]*: ef d8 d1 f0 bfins r7,r8,0xf,0x10 |
| 12878 | + *[0-9a-f]*: f1 d7 d2 0f bfins r8,r7,0x10,0xf |
| 12879 | + |
| 12880 | +[0-9a-f]* <rsubc>: |
| 12881 | + *[0-9a-f]*: fb bf 00 00 rsubeq pc,0 |
| 12882 | + *[0-9a-f]*: fb bc 0f ff rsubal r12,-1 |
| 12883 | + *[0-9a-f]*: fb b5 08 80 rsubls r5,-128 |
| 12884 | + *[0-9a-f]*: fb b4 07 7f rsubpl r4,127 |
| 12885 | + *[0-9a-f]*: fb be 01 01 rsubne lr,1 |
| 12886 | + *[0-9a-f]*: fb bc 08 76 rsubls r12,118 |
| 12887 | + *[0-9a-f]*: fb be 0d f4 rsubvc lr,-12 |
| 12888 | + *[0-9a-f]*: fb b4 06 f3 rsubmi r4,-13 |
| 12889 | + |
| 12890 | +[0-9a-f]* <addc>: |
| 12891 | + *[0-9a-f]*: ff df e0 0f addeq pc,pc,pc |
| 12892 | + *[0-9a-f]*: f9 dc ef 0c addal r12,r12,r12 |
| 12893 | + *[0-9a-f]*: eb d5 e8 05 addls r5,r5,r5 |
| 12894 | + *[0-9a-f]*: e9 d4 e7 04 addpl r4,r4,r4 |
| 12895 | + *[0-9a-f]*: fd de e1 0e addne lr,lr,lr |
| 12896 | + *[0-9a-f]*: e5 d1 e8 0a addls r10,r2,r1 |
| 12897 | + *[0-9a-f]*: f1 db ed 0c addvc r12,r8,r11 |
| 12898 | + *[0-9a-f]*: ef d0 e6 0a addmi r10,r7,r0 |
| 12899 | + |
| 12900 | +[0-9a-f]* <subc2>: |
| 12901 | + *[0-9a-f]*: ff df e0 1f subeq pc,pc,pc |
| 12902 | + *[0-9a-f]*: f9 dc ef 1c subal r12,r12,r12 |
| 12903 | + *[0-9a-f]*: eb d5 e8 15 subls r5,r5,r5 |
| 12904 | + *[0-9a-f]*: e9 d4 e7 14 subpl r4,r4,r4 |
| 12905 | + *[0-9a-f]*: fd de e1 1e subne lr,lr,lr |
| 12906 | + *[0-9a-f]*: e5 d1 e8 1a subls r10,r2,r1 |
| 12907 | + *[0-9a-f]*: f1 db ed 1c subvc r12,r8,r11 |
| 12908 | + *[0-9a-f]*: ef d0 e6 1a submi r10,r7,r0 |
| 12909 | + |
| 12910 | +[0-9a-f]* <andc>: |
| 12911 | + *[0-9a-f]*: ff df e0 2f andeq pc,pc,pc |
| 12912 | + *[0-9a-f]*: f9 dc ef 2c andal r12,r12,r12 |
| 12913 | + *[0-9a-f]*: eb d5 e8 25 andls r5,r5,r5 |
| 12914 | + *[0-9a-f]*: e9 d4 e7 24 andpl r4,r4,r4 |
| 12915 | + *[0-9a-f]*: fd de e1 2e andne lr,lr,lr |
| 12916 | + *[0-9a-f]*: e5 d1 e8 2a andls r10,r2,r1 |
| 12917 | + *[0-9a-f]*: f1 db ed 2c andvc r12,r8,r11 |
| 12918 | + *[0-9a-f]*: ef d0 e6 2a andmi r10,r7,r0 |
| 12919 | + |
| 12920 | +[0-9a-f]* <orc>: |
| 12921 | + *[0-9a-f]*: ff df e0 3f oreq pc,pc,pc |
| 12922 | + *[0-9a-f]*: f9 dc ef 3c oral r12,r12,r12 |
| 12923 | + *[0-9a-f]*: eb d5 e8 35 orls r5,r5,r5 |
| 12924 | + *[0-9a-f]*: e9 d4 e7 34 orpl r4,r4,r4 |
| 12925 | + *[0-9a-f]*: fd de e1 3e orne lr,lr,lr |
| 12926 | + *[0-9a-f]*: e5 d1 e8 3a orls r10,r2,r1 |
| 12927 | + *[0-9a-f]*: f1 db ed 3c orvc r12,r8,r11 |
| 12928 | + *[0-9a-f]*: ef d0 e6 3a ormi r10,r7,r0 |
| 12929 | + |
| 12930 | +[0-9a-f]* <eorc>: |
| 12931 | + *[0-9a-f]*: ff df e0 4f eoreq pc,pc,pc |
| 12932 | + *[0-9a-f]*: f9 dc ef 4c eoral r12,r12,r12 |
| 12933 | + *[0-9a-f]*: eb d5 e8 45 eorls r5,r5,r5 |
| 12934 | + *[0-9a-f]*: e9 d4 e7 44 eorpl r4,r4,r4 |
| 12935 | + *[0-9a-f]*: fd de e1 4e eorne lr,lr,lr |
| 12936 | + *[0-9a-f]*: e5 d1 e8 4a eorls r10,r2,r1 |
| 12937 | + *[0-9a-f]*: f1 db ed 4c eorvc r12,r8,r11 |
| 12938 | + *[0-9a-f]*: ef d0 e6 4a eormi r10,r7,r0 |
| 12939 | + |
| 12940 | +[0-9a-f]* <ldcond>: |
| 12941 | + *[0-9a-f]*: ff ff 01 ff ld.weq pc,pc[0x7fc] |
| 12942 | + *[0-9a-f]*: f9 fc f3 ff ld.shal r12,r12[0x3fe] |
| 12943 | + *[0-9a-f]*: eb f5 84 00 ld.shls r5,r5[0x0] |
| 12944 | + *[0-9a-f]*: e9 f4 79 ff ld.ubpl r4,r4[0x1ff] |
| 12945 | + *[0-9a-f]*: fd fe 16 00 ld.sbne lr,lr[0x0] |
| 12946 | + *[0-9a-f]*: e5 fa 80 00 ld.wls r10,r2[0x0] |
| 12947 | + *[0-9a-f]*: f1 fc d3 ff ld.shvc r12,r8[0x3fe] |
| 12948 | + *[0-9a-f]*: ef fa 68 01 ld.ubmi r10,r7[0x1] |
| 12949 | + |
| 12950 | +[0-9a-f]* <stcond2>: |
| 12951 | + *[0-9a-f]*: ff ff 0b ff st.weq pc[0x7fc],pc |
| 12952 | + *[0-9a-f]*: f9 fc fd ff st.hal r12[0x3fe],r12 |
| 12953 | + *[0-9a-f]*: eb f5 8c 00 st.hls r5[0x0],r5 |
| 12954 | + *[0-9a-f]*: e9 f4 7f ff st.bpl r4[0x1ff],r4 |
| 12955 | + *[0-9a-f]*: fd fe 1e 00 st.bne lr[0x0],lr |
| 12956 | + *[0-9a-f]*: e5 fa 8a 00 st.wls r2[0x0],r10 |
| 12957 | + *[0-9a-f]*: f1 fc dd ff st.hvc r8[0x3fe],r12 |
| 12958 | + *[0-9a-f]*: ef fa 6e 01 st.bmi r7[0x1],r10 |
| 12959 | + |
| 12960 | +[0-9a-f]* <movh>: |
| 12961 | + *[0-9a-f]*: fc 1f ff ff movh pc,0xffff |
| 12962 | + *[0-9a-f]*: fc 10 00 00 movh r0,0x0 |
| 12963 | + *[0-9a-f]*: fc 15 00 01 movh r5,0x1 |
| 12964 | + *[0-9a-f]*: fc 1c 7f ff movh r12,0x7fff |
| 12965 | + |
| 12966 | --- /dev/null |
| 12967 | +++ b/gas/testsuite/gas/avr32/allinsn.exp |
| 12968 | @@ -0,0 +1,5 @@ |
| 12969 | +# AVR32 assembler testsuite. -*- Tcl -*- |
| 12970 | + |
| 12971 | +if [istarget avr32-*-*] { |
| 12972 | + run_dump_test "allinsn" |
| 12973 | +} |
| 12974 | --- /dev/null |
| 12975 | +++ b/gas/testsuite/gas/avr32/allinsn.s |
| 12976 | @@ -0,0 +1,3330 @@ |
| 12977 | + .data |
| 12978 | +foodata: .word 42 |
| 12979 | + .text |
| 12980 | +footext: |
| 12981 | + .text |
| 12982 | + .global ld_d5 |
| 12983 | +ld_d5: |
| 12984 | + ld.d lr,pc[pc<<3] |
| 12985 | + ld.d r0,r0[r0<<0] |
| 12986 | + ld.d r6,r5[r5<<2] |
| 12987 | + ld.d r4,r4[r4<<1] |
| 12988 | + ld.d lr,lr[lr<<1] |
| 12989 | + ld.d r10,r3[sp<<2] |
| 12990 | + ld.d r8,r10[r6<<2] |
| 12991 | + ld.d r2,r7[r9<<0] |
| 12992 | + .text |
| 12993 | + .global ld_w5 |
| 12994 | +ld_w5: |
| 12995 | + ld.w pc,pc[pc<<0] |
| 12996 | + ld.w r12,r12[r12<<3] |
| 12997 | + ld.w r5,r5[r5<<2] |
| 12998 | + ld.w r4,r4[r4<<1] |
| 12999 | + ld.w lr,lr[lr<<1] |
| 13000 | + ld.w r2,r9[r9<<0] |
| 13001 | + ld.w r11,r2[r6<<0] |
| 13002 | + ld.w r0,r2[sp<<3] |
| 13003 | + .text |
| 13004 | + .global ld_sh5 |
| 13005 | +ld_sh5: |
| 13006 | + ld.sh pc,pc[pc<<0] |
| 13007 | + ld.sh r12,r12[r12<<3] |
| 13008 | + ld.sh r5,r5[r5<<2] |
| 13009 | + ld.sh r4,r4[r4<<1] |
| 13010 | + ld.sh lr,lr[lr<<1] |
| 13011 | + ld.sh r11,r0[pc<<2] |
| 13012 | + ld.sh r10,sp[r6<<2] |
| 13013 | + ld.sh r12,r2[r2<<0] |
| 13014 | + .text |
| 13015 | + .global ld_uh5 |
| 13016 | +ld_uh5: |
| 13017 | + ld.uh pc,pc[pc<<0] |
| 13018 | + ld.uh r12,r12[r12<<3] |
| 13019 | + ld.uh r5,r5[r5<<2] |
| 13020 | + ld.uh r4,r4[r4<<1] |
| 13021 | + ld.uh lr,lr[lr<<1] |
| 13022 | + ld.uh r8,pc[lr<<3] |
| 13023 | + ld.uh r6,r1[pc<<1] |
| 13024 | + ld.uh r6,lr[sp<<1] |
| 13025 | + .text |
| 13026 | + .global ld_sb2 |
| 13027 | +ld_sb2: |
| 13028 | + ld.sb pc,pc[pc<<0] |
| 13029 | + ld.sb r12,r12[r12<<3] |
| 13030 | + ld.sb r5,r5[r5<<2] |
| 13031 | + ld.sb r4,r4[r4<<1] |
| 13032 | + ld.sb lr,lr[lr<<1] |
| 13033 | + ld.sb r9,r1[pc<<3] |
| 13034 | + ld.sb r0,r3[r11<<1] |
| 13035 | + ld.sb r10,r5[r5<<1] |
| 13036 | + .text |
| 13037 | + .global ld_ub5 |
| 13038 | +ld_ub5: |
| 13039 | + ld.ub pc,pc[pc<<0] |
| 13040 | + ld.ub r12,r12[r12<<3] |
| 13041 | + ld.ub r5,r5[r5<<2] |
| 13042 | + ld.ub r4,r4[r4<<1] |
| 13043 | + ld.ub lr,lr[lr<<1] |
| 13044 | + ld.ub r6,r12[r7<<3] |
| 13045 | + ld.ub r2,r6[r12<<0] |
| 13046 | + ld.ub r0,r7[r11<<1] |
| 13047 | + .text |
| 13048 | + .global st_d5 |
| 13049 | +st_d5: |
| 13050 | + st.d pc[pc<<0],r14 |
| 13051 | + st.d r12[r12<<3],r12 |
| 13052 | + st.d r5[r5<<2],r6 |
| 13053 | + st.d r4[r4<<1],r4 |
| 13054 | + st.d lr[lr<<1],lr |
| 13055 | + st.d r1[r9<<1],r4 |
| 13056 | + st.d r10[r2<<1],r4 |
| 13057 | + st.d r12[r6<<0],lr |
| 13058 | + .text |
| 13059 | + .global st_w5 |
| 13060 | +st_w5: |
| 13061 | + st.w pc[pc<<0],pc |
| 13062 | + st.w r12[r12<<3],r12 |
| 13063 | + st.w r5[r5<<2],r5 |
| 13064 | + st.w r4[r4<<1],r4 |
| 13065 | + st.w lr[lr<<1],lr |
| 13066 | + st.w r1[r10<<0],r3 |
| 13067 | + st.w r0[r10<<1],r9 |
| 13068 | + st.w r4[r5<<3],pc |
| 13069 | + .text |
| 13070 | + .global st_h5 |
| 13071 | +st_h5: |
| 13072 | + st.h pc[pc<<0],pc |
| 13073 | + st.h r12[r12<<3],r12 |
| 13074 | + st.h r5[r5<<2],r5 |
| 13075 | + st.h r4[r4<<1],r4 |
| 13076 | + st.h lr[lr<<1],lr |
| 13077 | + st.h r2[r9<<0],r11 |
| 13078 | + st.h r5[r1<<2],r12 |
| 13079 | + st.h pc[r8<<2],r3 |
| 13080 | + .text |
| 13081 | + .global st_b5 |
| 13082 | +st_b5: |
| 13083 | + st.b pc[pc<<0],pc |
| 13084 | + st.b r12[r12<<3],r12 |
| 13085 | + st.b r5[r5<<2],r5 |
| 13086 | + st.b r4[r4<<1],r4 |
| 13087 | + st.b lr[lr<<1],lr |
| 13088 | + st.b r1[r8<<1],r6 |
| 13089 | + st.b lr[lr<<3],r1 |
| 13090 | + st.b r5[r0<<2],pc |
| 13091 | + .text |
| 13092 | + .global divs |
| 13093 | +divs: |
| 13094 | + divs pc,pc,pc |
| 13095 | + divs r12,r12,r12 |
| 13096 | + divs r5,r5,r5 |
| 13097 | + divs r4,r4,r4 |
| 13098 | + divs lr,lr,lr |
| 13099 | + divs r3,pc,pc |
| 13100 | + divs r9,r12,r2 |
| 13101 | + divs r7,r4,r1 |
| 13102 | + .text |
| 13103 | + .global add1 |
| 13104 | +add1: |
| 13105 | + add pc,pc |
| 13106 | + add r12,r12 |
| 13107 | + add r5,r5 |
| 13108 | + add r4,r4 |
| 13109 | + add lr,lr |
| 13110 | + add r12,r9 |
| 13111 | + add r6,r3 |
| 13112 | + add r10,r12 |
| 13113 | + .text |
| 13114 | + .global sub1 |
| 13115 | +sub1: |
| 13116 | + sub pc,pc |
| 13117 | + sub r12,r12 |
| 13118 | + sub r5,r5 |
| 13119 | + sub r4,r4 |
| 13120 | + sub lr,lr |
| 13121 | + sub lr,r6 |
| 13122 | + sub r0,sp |
| 13123 | + sub r6,r12 |
| 13124 | + .text |
| 13125 | + .global rsub1 |
| 13126 | +rsub1: |
| 13127 | + rsub pc,pc |
| 13128 | + rsub r12,r12 |
| 13129 | + rsub r5,r5 |
| 13130 | + rsub r4,r4 |
| 13131 | + rsub lr,lr |
| 13132 | + rsub r11,sp |
| 13133 | + rsub r7,r4 |
| 13134 | + rsub r9,r1 |
| 13135 | + .text |
| 13136 | + .global cp1 |
| 13137 | +cp1: |
| 13138 | + cp pc,pc |
| 13139 | + cp r12,r12 |
| 13140 | + cp r5,r5 |
| 13141 | + cp r4,r4 |
| 13142 | + cp lr,lr |
| 13143 | + cp r6,r2 |
| 13144 | + cp r0,r9 |
| 13145 | + cp r3,sp |
| 13146 | + .text |
| 13147 | + .global or1 |
| 13148 | +or1: |
| 13149 | + or pc,pc |
| 13150 | + or r12,r12 |
| 13151 | + or r5,r5 |
| 13152 | + or r4,r4 |
| 13153 | + or lr,lr |
| 13154 | + or r4,r9 |
| 13155 | + or r11,r4 |
| 13156 | + or r4,r0 |
| 13157 | + .text |
| 13158 | + .global eor1 |
| 13159 | +eor1: |
| 13160 | + eor pc,pc |
| 13161 | + eor r12,r12 |
| 13162 | + eor r5,r5 |
| 13163 | + eor r4,r4 |
| 13164 | + eor lr,lr |
| 13165 | + eor r12,r11 |
| 13166 | + eor r0,r1 |
| 13167 | + eor r5,pc |
| 13168 | + .text |
| 13169 | + .global and1 |
| 13170 | +and1: |
| 13171 | + and pc,pc |
| 13172 | + and r12,r12 |
| 13173 | + and r5,r5 |
| 13174 | + and r4,r4 |
| 13175 | + and lr,lr |
| 13176 | + and r8,r1 |
| 13177 | + and r0,sp |
| 13178 | + and r10,r5 |
| 13179 | + .text |
| 13180 | + .global tst |
| 13181 | +tst: |
| 13182 | + tst pc,pc |
| 13183 | + tst r12,r12 |
| 13184 | + tst r5,r5 |
| 13185 | + tst r4,r4 |
| 13186 | + tst lr,lr |
| 13187 | + tst r0,r12 |
| 13188 | + tst r10,r6 |
| 13189 | + tst sp,r4 |
| 13190 | + .text |
| 13191 | + .global andn |
| 13192 | +andn: |
| 13193 | + andn pc,pc |
| 13194 | + andn r12,r12 |
| 13195 | + andn r5,r5 |
| 13196 | + andn r4,r4 |
| 13197 | + andn lr,lr |
| 13198 | + andn r9,r12 |
| 13199 | + andn r11,sp |
| 13200 | + andn r12,r5 |
| 13201 | + .text |
| 13202 | + .global mov3 |
| 13203 | +mov3: |
| 13204 | + mov pc,pc |
| 13205 | + mov r12,r12 |
| 13206 | + mov r5,r5 |
| 13207 | + mov r4,r4 |
| 13208 | + mov lr,lr |
| 13209 | + mov r5,r9 |
| 13210 | + mov r11,r11 |
| 13211 | + mov r2,lr |
| 13212 | + .text |
| 13213 | + .global st_w1 |
| 13214 | +st_w1: |
| 13215 | + st.w pc++,pc |
| 13216 | + st.w r12++,r12 |
| 13217 | + st.w r5++,r5 |
| 13218 | + st.w r4++,r4 |
| 13219 | + st.w lr++,lr |
| 13220 | + st.w r1++,r11 |
| 13221 | + st.w sp++,r0 |
| 13222 | + st.w sp++,r1 |
| 13223 | + .text |
| 13224 | + .global st_h1 |
| 13225 | +st_h1: |
| 13226 | + st.h pc++,pc |
| 13227 | + st.h r12++,r12 |
| 13228 | + st.h r5++,r5 |
| 13229 | + st.h r4++,r4 |
| 13230 | + st.h lr++,lr |
| 13231 | + st.h r12++,sp |
| 13232 | + st.h r7++,lr |
| 13233 | + st.h r7++,r4 |
| 13234 | + .text |
| 13235 | + .global st_b1 |
| 13236 | +st_b1: |
| 13237 | + st.b pc++,pc |
| 13238 | + st.b r12++,r12 |
| 13239 | + st.b r5++,r5 |
| 13240 | + st.b r4++,r4 |
| 13241 | + st.b lr++,lr |
| 13242 | + st.b r9++,sp |
| 13243 | + st.b r1++,sp |
| 13244 | + st.b r0++,r4 |
| 13245 | + .text |
| 13246 | + .global st_w2 |
| 13247 | +st_w2: |
| 13248 | + st.w --pc,pc |
| 13249 | + st.w --r12,r12 |
| 13250 | + st.w --r5,r5 |
| 13251 | + st.w --r4,r4 |
| 13252 | + st.w --lr,lr |
| 13253 | + st.w --r1,r7 |
| 13254 | + st.w --r3,r9 |
| 13255 | + st.w --r5,r5 |
| 13256 | + .text |
| 13257 | + .global st_h2 |
| 13258 | +st_h2: |
| 13259 | + st.h --pc,pc |
| 13260 | + st.h --r12,r12 |
| 13261 | + st.h --r5,r5 |
| 13262 | + st.h --r4,r4 |
| 13263 | + st.h --lr,lr |
| 13264 | + st.h --r5,r7 |
| 13265 | + st.h --r8,r8 |
| 13266 | + st.h --r7,r2 |
| 13267 | + .text |
| 13268 | + .global st_b2 |
| 13269 | +st_b2: |
| 13270 | + st.b --pc,pc |
| 13271 | + st.b --r12,r12 |
| 13272 | + st.b --r5,r5 |
| 13273 | + st.b --r4,r4 |
| 13274 | + st.b --lr,lr |
| 13275 | + st.b --sp,sp |
| 13276 | + st.b --sp,r11 |
| 13277 | + st.b --r4,r5 |
| 13278 | + .text |
| 13279 | + .global ld_w1 |
| 13280 | +ld_w1: |
| 13281 | + ld.w pc,pc++ |
| 13282 | + ld.w r12,r12++ |
| 13283 | + ld.w r5,r5++ |
| 13284 | + ld.w r4,r4++ |
| 13285 | + ld.w lr,lr++ |
| 13286 | + ld.w r3,r7++ |
| 13287 | + ld.w r3,lr++ |
| 13288 | + ld.w r12,r5++ |
| 13289 | + .text |
| 13290 | + .global ld_sh1 |
| 13291 | +ld_sh1: |
| 13292 | + ld.sh pc,pc++ |
| 13293 | + ld.sh r12,r12++ |
| 13294 | + ld.sh r5,r5++ |
| 13295 | + ld.sh r4,r4++ |
| 13296 | + ld.sh lr,lr++ |
| 13297 | + ld.sh r11,r2++ |
| 13298 | + ld.sh r2,r8++ |
| 13299 | + ld.sh r7,r6++ |
| 13300 | + .text |
| 13301 | + .global ld_uh1 |
| 13302 | +ld_uh1: |
| 13303 | + ld.uh pc,pc++ |
| 13304 | + ld.uh r12,r12++ |
| 13305 | + ld.uh r5,r5++ |
| 13306 | + ld.uh r4,r4++ |
| 13307 | + ld.uh lr,lr++ |
| 13308 | + ld.uh r6,r7++ |
| 13309 | + ld.uh r10,r11++ |
| 13310 | + ld.uh lr,r4++ |
| 13311 | + .text |
| 13312 | + .global ld_ub1 |
| 13313 | +ld_ub1: |
| 13314 | + ld.ub pc,pc++ |
| 13315 | + ld.ub r12,r12++ |
| 13316 | + ld.ub r5,r5++ |
| 13317 | + ld.ub r4,r4++ |
| 13318 | + ld.ub lr,lr++ |
| 13319 | + ld.ub r8,lr++ |
| 13320 | + ld.ub r12,r12++ |
| 13321 | + ld.ub r11,r10++ |
| 13322 | + .text |
| 13323 | + .global ld_w2 |
| 13324 | +ld_w2: |
| 13325 | + ld.w pc,--pc |
| 13326 | + ld.w r12,--r12 |
| 13327 | + ld.w r5,--r5 |
| 13328 | + ld.w r4,--r4 |
| 13329 | + ld.w lr,--lr |
| 13330 | + ld.w r10,--lr |
| 13331 | + ld.w r12,--r9 |
| 13332 | + ld.w r6,--r5 |
| 13333 | + .text |
| 13334 | + .global ld_sh2 |
| 13335 | +ld_sh2: |
| 13336 | + ld.sh pc,--pc |
| 13337 | + ld.sh r12,--r12 |
| 13338 | + ld.sh r5,--r5 |
| 13339 | + ld.sh r4,--r4 |
| 13340 | + ld.sh lr,--lr |
| 13341 | + ld.sh pc,--r10 |
| 13342 | + ld.sh r6,--r3 |
| 13343 | + ld.sh r4,--r6 |
| 13344 | + .text |
| 13345 | + .global ld_uh2 |
| 13346 | +ld_uh2: |
| 13347 | + ld.uh pc,--pc |
| 13348 | + ld.uh r12,--r12 |
| 13349 | + ld.uh r5,--r5 |
| 13350 | + ld.uh r4,--r4 |
| 13351 | + ld.uh lr,--lr |
| 13352 | + ld.uh r3,--r2 |
| 13353 | + ld.uh r1,--r0 |
| 13354 | + ld.uh r2,--r9 |
| 13355 | + .text |
| 13356 | + .global ld_ub2 |
| 13357 | +ld_ub2: |
| 13358 | + ld.ub pc,--pc |
| 13359 | + ld.ub r12,--r12 |
| 13360 | + ld.ub r5,--r5 |
| 13361 | + ld.ub r4,--r4 |
| 13362 | + ld.ub lr,--lr |
| 13363 | + ld.ub r1,--r1 |
| 13364 | + ld.ub r0,--r6 |
| 13365 | + ld.ub r2,--r7 |
| 13366 | + .text |
| 13367 | + .global ld_ub3 |
| 13368 | +ld_ub3: |
| 13369 | + ld.ub pc,pc[0] |
| 13370 | + ld.ub r12,r12[7] |
| 13371 | + ld.ub r5,r5[4] |
| 13372 | + ld.ub r4,r4[3] |
| 13373 | + ld.ub lr,lr[1] |
| 13374 | + ld.ub r6,r9[6] |
| 13375 | + ld.ub r2,lr[4] |
| 13376 | + ld.ub r1,r8[0] |
| 13377 | + .text |
| 13378 | + .global sub3_sp |
| 13379 | +sub3_sp: |
| 13380 | + sub sp,0 |
| 13381 | + sub sp,-4 |
| 13382 | + sub sp,-512 |
| 13383 | + sub sp,508 |
| 13384 | + sub sp,4 |
| 13385 | + sub sp,44 |
| 13386 | + sub sp,8 |
| 13387 | + sub sp,348 |
| 13388 | + .text |
| 13389 | + .global sub3 |
| 13390 | +sub3: |
| 13391 | + sub pc,0 |
| 13392 | + sub r12,-1 |
| 13393 | + sub r5,-128 |
| 13394 | + sub r4,127 |
| 13395 | + sub lr,1 |
| 13396 | + sub r6,-41 |
| 13397 | + sub r4,37 |
| 13398 | + sub r12,56 |
| 13399 | + .text |
| 13400 | + .global mov1 |
| 13401 | +mov1: |
| 13402 | + mov pc,0 |
| 13403 | + mov r12,-1 |
| 13404 | + mov r5,-128 |
| 13405 | + mov r4,127 |
| 13406 | + mov lr,1 |
| 13407 | + mov pc,14 |
| 13408 | + mov r6,-100 |
| 13409 | + mov lr,-122 |
| 13410 | + .text |
| 13411 | + .global lddsp |
| 13412 | +lddsp: |
| 13413 | + lddsp pc,sp[0] |
| 13414 | + lddsp r12,sp[508] |
| 13415 | + lddsp r5,sp[256] |
| 13416 | + lddsp r4,sp[252] |
| 13417 | + lddsp lr,sp[4] |
| 13418 | + lddsp lr,sp[256] |
| 13419 | + lddsp r12,sp[20] |
| 13420 | + lddsp r9,sp[472] |
| 13421 | + .text |
| 13422 | + .global lddpc |
| 13423 | +lddpc: |
| 13424 | + lddpc pc,pc[0] |
| 13425 | + lddpc r0,pc[508] |
| 13426 | + lddpc r8,pc[256] |
| 13427 | + lddpc r7,pc[252] |
| 13428 | + lddpc lr,pc[4] |
| 13429 | + lddpc sp,pc[472] |
| 13430 | + lddpc r6,pc[120] |
| 13431 | + lddpc r11,pc[28] |
| 13432 | + .text |
| 13433 | + .global stdsp |
| 13434 | +stdsp: |
| 13435 | + stdsp sp[0],pc |
| 13436 | + stdsp sp[508],r12 |
| 13437 | + stdsp sp[256],r5 |
| 13438 | + stdsp sp[252],r4 |
| 13439 | + stdsp sp[4],lr |
| 13440 | + stdsp sp[304],pc |
| 13441 | + stdsp sp[256],r0 |
| 13442 | + stdsp sp[336],r5 |
| 13443 | + .text |
| 13444 | + .global cp2 |
| 13445 | +cp2: |
| 13446 | + cp pc,0 |
| 13447 | + cp r12,-1 |
| 13448 | + cp r5,-32 |
| 13449 | + cp r4,31 |
| 13450 | + cp lr,1 |
| 13451 | + cp r8,3 |
| 13452 | + cp lr,16 |
| 13453 | + cp r7,-26 |
| 13454 | + .text |
| 13455 | + .global acr |
| 13456 | +acr: |
| 13457 | + acr pc |
| 13458 | + acr r12 |
| 13459 | + acr r5 |
| 13460 | + acr r4 |
| 13461 | + acr lr |
| 13462 | + acr r2 |
| 13463 | + acr r12 |
| 13464 | + acr pc |
| 13465 | + .text |
| 13466 | + .global scr |
| 13467 | +scr: |
| 13468 | + scr pc |
| 13469 | + scr r12 |
| 13470 | + scr r5 |
| 13471 | + scr r4 |
| 13472 | + scr lr |
| 13473 | + scr pc |
| 13474 | + scr r6 |
| 13475 | + scr r1 |
| 13476 | + .text |
| 13477 | + .global cpc0 |
| 13478 | +cpc0: |
| 13479 | + cpc pc |
| 13480 | + cpc r12 |
| 13481 | + cpc r5 |
| 13482 | + cpc r4 |
| 13483 | + cpc lr |
| 13484 | + cpc pc |
| 13485 | + cpc r4 |
| 13486 | + cpc r9 |
| 13487 | + .text |
| 13488 | + .global neg |
| 13489 | +neg: |
| 13490 | + neg pc |
| 13491 | + neg r12 |
| 13492 | + neg r5 |
| 13493 | + neg r4 |
| 13494 | + neg lr |
| 13495 | + neg r7 |
| 13496 | + neg r1 |
| 13497 | + neg r9 |
| 13498 | + .text |
| 13499 | + .global abs |
| 13500 | +abs: |
| 13501 | + abs pc |
| 13502 | + abs r12 |
| 13503 | + abs r5 |
| 13504 | + abs r4 |
| 13505 | + abs lr |
| 13506 | + abs r6 |
| 13507 | + abs r6 |
| 13508 | + abs r4 |
| 13509 | + .text |
| 13510 | + .global castu_b |
| 13511 | +castu_b: |
| 13512 | + castu.b pc |
| 13513 | + castu.b r12 |
| 13514 | + castu.b r5 |
| 13515 | + castu.b r4 |
| 13516 | + castu.b lr |
| 13517 | + castu.b r7 |
| 13518 | + castu.b sp |
| 13519 | + castu.b r9 |
| 13520 | + .text |
| 13521 | + .global casts_b |
| 13522 | +casts_b: |
| 13523 | + casts.b pc |
| 13524 | + casts.b r12 |
| 13525 | + casts.b r5 |
| 13526 | + casts.b r4 |
| 13527 | + casts.b lr |
| 13528 | + casts.b r11 |
| 13529 | + casts.b r1 |
| 13530 | + casts.b r10 |
| 13531 | + .text |
| 13532 | + .global castu_h |
| 13533 | +castu_h: |
| 13534 | + castu.h pc |
| 13535 | + castu.h r12 |
| 13536 | + castu.h r5 |
| 13537 | + castu.h r4 |
| 13538 | + castu.h lr |
| 13539 | + castu.h r10 |
| 13540 | + castu.h r11 |
| 13541 | + castu.h r1 |
| 13542 | + .text |
| 13543 | + .global casts_h |
| 13544 | +casts_h: |
| 13545 | + casts.h pc |
| 13546 | + casts.h r12 |
| 13547 | + casts.h r5 |
| 13548 | + casts.h r4 |
| 13549 | + casts.h lr |
| 13550 | + casts.h r0 |
| 13551 | + casts.h r5 |
| 13552 | + casts.h r9 |
| 13553 | + .text |
| 13554 | + .global brev |
| 13555 | +brev: |
| 13556 | + brev pc |
| 13557 | + brev r12 |
| 13558 | + brev r5 |
| 13559 | + brev r4 |
| 13560 | + brev lr |
| 13561 | + brev r5 |
| 13562 | + brev r10 |
| 13563 | + brev r8 |
| 13564 | + .text |
| 13565 | + .global swap_h |
| 13566 | +swap_h: |
| 13567 | + swap.h pc |
| 13568 | + swap.h r12 |
| 13569 | + swap.h r5 |
| 13570 | + swap.h r4 |
| 13571 | + swap.h lr |
| 13572 | + swap.h r7 |
| 13573 | + swap.h r0 |
| 13574 | + swap.h r8 |
| 13575 | + .text |
| 13576 | + .global swap_b |
| 13577 | +swap_b: |
| 13578 | + swap.b pc |
| 13579 | + swap.b r12 |
| 13580 | + swap.b r5 |
| 13581 | + swap.b r4 |
| 13582 | + swap.b lr |
| 13583 | + swap.b r10 |
| 13584 | + swap.b r12 |
| 13585 | + swap.b r1 |
| 13586 | + .text |
| 13587 | + .global swap_bh |
| 13588 | +swap_bh: |
| 13589 | + swap.bh pc |
| 13590 | + swap.bh r12 |
| 13591 | + swap.bh r5 |
| 13592 | + swap.bh r4 |
| 13593 | + swap.bh lr |
| 13594 | + swap.bh r9 |
| 13595 | + swap.bh r4 |
| 13596 | + swap.bh r1 |
| 13597 | + .text |
| 13598 | + .global One_s_compliment |
| 13599 | +One_s_compliment: |
| 13600 | + com pc |
| 13601 | + com r12 |
| 13602 | + com r5 |
| 13603 | + com r4 |
| 13604 | + com lr |
| 13605 | + com r2 |
| 13606 | + com r2 |
| 13607 | + com r7 |
| 13608 | + .text |
| 13609 | + .global tnbz |
| 13610 | +tnbz: |
| 13611 | + tnbz pc |
| 13612 | + tnbz r12 |
| 13613 | + tnbz r5 |
| 13614 | + tnbz r4 |
| 13615 | + tnbz lr |
| 13616 | + tnbz r8 |
| 13617 | + tnbz r12 |
| 13618 | + tnbz pc |
| 13619 | + .text |
| 13620 | + .global rol |
| 13621 | +rol: |
| 13622 | + rol pc |
| 13623 | + rol r12 |
| 13624 | + rol r5 |
| 13625 | + rol r4 |
| 13626 | + rol lr |
| 13627 | + rol r10 |
| 13628 | + rol r9 |
| 13629 | + rol r5 |
| 13630 | + .text |
| 13631 | + .global ror |
| 13632 | +ror: |
| 13633 | + ror pc |
| 13634 | + ror r12 |
| 13635 | + ror r5 |
| 13636 | + ror r4 |
| 13637 | + ror lr |
| 13638 | + ror r8 |
| 13639 | + ror r4 |
| 13640 | + ror r7 |
| 13641 | + .text |
| 13642 | + .global icall |
| 13643 | +icall: |
| 13644 | + icall pc |
| 13645 | + icall r12 |
| 13646 | + icall r5 |
| 13647 | + icall r4 |
| 13648 | + icall lr |
| 13649 | + icall r3 |
| 13650 | + icall r1 |
| 13651 | + icall r3 |
| 13652 | + .text |
| 13653 | + .global mustr |
| 13654 | +mustr: |
| 13655 | + mustr pc |
| 13656 | + mustr r12 |
| 13657 | + mustr r5 |
| 13658 | + mustr r4 |
| 13659 | + mustr lr |
| 13660 | + mustr r1 |
| 13661 | + mustr r4 |
| 13662 | + mustr r12 |
| 13663 | + .text |
| 13664 | + .global musfr |
| 13665 | +musfr: |
| 13666 | + musfr pc |
| 13667 | + musfr r12 |
| 13668 | + musfr r5 |
| 13669 | + musfr r4 |
| 13670 | + musfr lr |
| 13671 | + musfr r11 |
| 13672 | + musfr r12 |
| 13673 | + musfr r2 |
| 13674 | + .text |
| 13675 | + .global ret_cond |
| 13676 | +ret_cond: |
| 13677 | + reteq pc |
| 13678 | + retal r12 |
| 13679 | + retls r5 |
| 13680 | + retpl r4 |
| 13681 | + retne lr |
| 13682 | + retgt r0 |
| 13683 | + retgt r12 |
| 13684 | + retge r10 |
| 13685 | + .text |
| 13686 | + .global sr_cond |
| 13687 | +sr_cond: |
| 13688 | + sreq pc |
| 13689 | + sral r12 |
| 13690 | + srls r5 |
| 13691 | + srpl r4 |
| 13692 | + srne lr |
| 13693 | + srlt r0 |
| 13694 | + sral sp |
| 13695 | + srge r9 |
| 13696 | + .text |
| 13697 | + .global ld_w3 |
| 13698 | +ld_w3: |
| 13699 | + ld.w pc,pc[0] |
| 13700 | + ld.w r12,r12[124] |
| 13701 | + ld.w r5,r5[64] |
| 13702 | + ld.w r4,r4[60] |
| 13703 | + ld.w lr,lr[4] |
| 13704 | + ld.w sp,r2[52] |
| 13705 | + ld.w r9,r1[8] |
| 13706 | + ld.w r5,sp[60] |
| 13707 | + .text |
| 13708 | + .global ld_sh3 |
| 13709 | +ld_sh3: |
| 13710 | + ld.sh pc,pc[0] |
| 13711 | + ld.sh r12,r12[14] |
| 13712 | + ld.sh r5,r5[8] |
| 13713 | + ld.sh r4,r4[6] |
| 13714 | + ld.sh lr,lr[2] |
| 13715 | + ld.sh r4,r2[8] |
| 13716 | + ld.sh sp,lr[10] |
| 13717 | + ld.sh r2,r11[2] |
| 13718 | + .text |
| 13719 | + .global ld_uh3 |
| 13720 | +ld_uh3: |
| 13721 | + ld.uh pc,pc[0] |
| 13722 | + ld.uh r12,r12[14] |
| 13723 | + ld.uh r5,r5[8] |
| 13724 | + ld.uh r4,r4[6] |
| 13725 | + ld.uh lr,lr[2] |
| 13726 | + ld.uh r10,r0[10] |
| 13727 | + ld.uh r8,r11[8] |
| 13728 | + ld.uh r10,r2[12] |
| 13729 | + .text |
| 13730 | + .global st_w3 |
| 13731 | +st_w3: |
| 13732 | + st.w pc[0],pc |
| 13733 | + st.w r12[60],r12 |
| 13734 | + st.w r5[32],r5 |
| 13735 | + st.w r4[28],r4 |
| 13736 | + st.w lr[4],lr |
| 13737 | + st.w r7[44],r11 |
| 13738 | + st.w r2[24],r6 |
| 13739 | + st.w r4[12],r9 |
| 13740 | + .text |
| 13741 | + .global st_h3 |
| 13742 | +st_h3: |
| 13743 | + st.h pc[0],pc |
| 13744 | + st.h r12[14],r12 |
| 13745 | + st.h r5[8],r5 |
| 13746 | + st.h r4[6],r4 |
| 13747 | + st.h lr[2],lr |
| 13748 | + st.h lr[10],r12 |
| 13749 | + st.h r6[4],r0 |
| 13750 | + st.h r5[12],sp |
| 13751 | + .text |
| 13752 | + .global st_b3 |
| 13753 | +st_b3: |
| 13754 | + st.b pc[0],pc |
| 13755 | + st.b r12[7],r12 |
| 13756 | + st.b r5[4],r5 |
| 13757 | + st.b r4[3],r4 |
| 13758 | + st.b lr[1],lr |
| 13759 | + st.b r12[6],r9 |
| 13760 | + st.b r2[3],lr |
| 13761 | + st.b r1[3],r11 |
| 13762 | + .text |
| 13763 | + .global ldd |
| 13764 | +ldd: |
| 13765 | + ld.d r0,pc |
| 13766 | + ld.d r14,r12 |
| 13767 | + ld.d r8,r5 |
| 13768 | + ld.d r6,r4 |
| 13769 | + ld.d r2,lr |
| 13770 | + ld.d r14,r7 |
| 13771 | + ld.d r4,r4 |
| 13772 | + ld.d r14,pc |
| 13773 | + .text |
| 13774 | + .global ldd_postinc |
| 13775 | +ldd_postinc: |
| 13776 | + ld.d r0,pc++ |
| 13777 | + ld.d r14,r12++ |
| 13778 | + ld.d r8,r5++ |
| 13779 | + ld.d r6,r4++ |
| 13780 | + ld.d r2,lr++ |
| 13781 | + ld.d r14,r5++ |
| 13782 | + ld.d r12,r11++ |
| 13783 | + ld.d r2,r12++ |
| 13784 | + .text |
| 13785 | + .global ldd_predec |
| 13786 | +ldd_predec: |
| 13787 | + ld.d r0,--pc |
| 13788 | + ld.d r14,--r12 |
| 13789 | + ld.d r8,--r5 |
| 13790 | + ld.d r6,--r4 |
| 13791 | + ld.d r2,--lr |
| 13792 | + ld.d r8,--r0 |
| 13793 | + ld.d r10,--pc |
| 13794 | + ld.d r2,--r4 |
| 13795 | + .text |
| 13796 | + .global std |
| 13797 | +std: |
| 13798 | + st.d pc,r0 |
| 13799 | + st.d r12,r14 |
| 13800 | + st.d r5,r8 |
| 13801 | + st.d r4,r6 |
| 13802 | + st.d lr,r2 |
| 13803 | + st.d r0,r12 |
| 13804 | + st.d sp,r4 |
| 13805 | + st.d r12,r12 |
| 13806 | + .text |
| 13807 | + .global std_postinc |
| 13808 | +std_postinc: |
| 13809 | + st.d pc++,r0 |
| 13810 | + st.d r12++,r14 |
| 13811 | + st.d r5++,r8 |
| 13812 | + st.d r4++,r6 |
| 13813 | + st.d lr++,r2 |
| 13814 | + st.d sp++,r6 |
| 13815 | + st.d r10++,r6 |
| 13816 | + st.d r7++,r2 |
| 13817 | + .text |
| 13818 | + .global std_predec |
| 13819 | +std_predec: |
| 13820 | + st.d --pc,r0 |
| 13821 | + st.d --r12,r14 |
| 13822 | + st.d --r5,r8 |
| 13823 | + st.d --r4,r6 |
| 13824 | + st.d --lr,r2 |
| 13825 | + st.d --r3,r6 |
| 13826 | + st.d --lr,r2 |
| 13827 | + st.d --r0,r4 |
| 13828 | + .text |
| 13829 | + .global mul |
| 13830 | +mul: |
| 13831 | + mul pc,pc |
| 13832 | + mul r12,r12 |
| 13833 | + mul r5,r5 |
| 13834 | + mul r4,r4 |
| 13835 | + mul lr,lr |
| 13836 | + mul r10,lr |
| 13837 | + mul r0,r8 |
| 13838 | + mul r8,r5 |
| 13839 | + .text |
| 13840 | + .global asr_imm5 |
| 13841 | +asr_imm5: |
| 13842 | + asr pc,0 |
| 13843 | + asr r12,31 |
| 13844 | + asr r5,16 |
| 13845 | + asr r4,15 |
| 13846 | + asr lr,1 |
| 13847 | + asr r6,23 |
| 13848 | + asr r6,18 |
| 13849 | + asr r5,8 |
| 13850 | + .text |
| 13851 | + .global lsl_imm5 |
| 13852 | +lsl_imm5: |
| 13853 | + lsl pc,0 |
| 13854 | + lsl r12,31 |
| 13855 | + lsl r5,16 |
| 13856 | + lsl r4,15 |
| 13857 | + lsl lr,1 |
| 13858 | + lsl r12,13 |
| 13859 | + lsl r6,16 |
| 13860 | + lsl r1,25 |
| 13861 | + .text |
| 13862 | + .global lsr_imm5 |
| 13863 | +lsr_imm5: |
| 13864 | + lsr pc,0 |
| 13865 | + lsr r12,31 |
| 13866 | + lsr r5,16 |
| 13867 | + lsr r4,15 |
| 13868 | + lsr lr,1 |
| 13869 | + lsr r0,1 |
| 13870 | + lsr r8,10 |
| 13871 | + lsr r7,26 |
| 13872 | + .text |
| 13873 | + .global sbr |
| 13874 | +sbr: |
| 13875 | + sbr pc,0 |
| 13876 | + sbr r12,31 |
| 13877 | + sbr r5,16 |
| 13878 | + sbr r4,15 |
| 13879 | + sbr lr,1 |
| 13880 | + sbr r8,31 |
| 13881 | + sbr r6,22 |
| 13882 | + sbr r1,23 |
| 13883 | + .text |
| 13884 | + .global cbr |
| 13885 | +cbr: |
| 13886 | + cbr pc,0 |
| 13887 | + cbr r12,31 |
| 13888 | + cbr r5,16 |
| 13889 | + cbr r4,15 |
| 13890 | + cbr lr,1 |
| 13891 | + cbr r12,10 |
| 13892 | + cbr r7,22 |
| 13893 | + cbr r8,9 |
| 13894 | + .text |
| 13895 | + .global brc1 |
| 13896 | +brc1: |
| 13897 | + breq 0 |
| 13898 | + brpl -2 |
| 13899 | + brge -256 |
| 13900 | + brcs 254 |
| 13901 | + brne 2 |
| 13902 | + brcs 230 |
| 13903 | + breq -18 |
| 13904 | + breq 12 |
| 13905 | + .text |
| 13906 | + .global rjmp |
| 13907 | +rjmp: |
| 13908 | + rjmp 0 |
| 13909 | + rjmp -2 |
| 13910 | + rjmp -1024 |
| 13911 | + rjmp 1022 |
| 13912 | + rjmp 2 |
| 13913 | + rjmp -962 |
| 13914 | + rjmp 14 |
| 13915 | + rjmp -516 |
| 13916 | + .text |
| 13917 | + .global rcall1 |
| 13918 | +rcall1: |
| 13919 | + rcall 0 |
| 13920 | + rcall -2 |
| 13921 | + rcall -1024 |
| 13922 | + rcall 1022 |
| 13923 | + rcall 2 |
| 13924 | + rcall 216 |
| 13925 | + rcall -530 |
| 13926 | + rcall -972 |
| 13927 | + .text |
| 13928 | + .global acall |
| 13929 | +acall: |
| 13930 | + acall 0 |
| 13931 | + acall 1020 |
| 13932 | + acall 512 |
| 13933 | + acall 508 |
| 13934 | + acall 4 |
| 13935 | + acall 356 |
| 13936 | + acall 304 |
| 13937 | + acall 172 |
| 13938 | + .text |
| 13939 | + .global scall |
| 13940 | +scall: |
| 13941 | + scall |
| 13942 | + scall |
| 13943 | + scall |
| 13944 | + scall |
| 13945 | + scall |
| 13946 | + scall |
| 13947 | + scall |
| 13948 | + scall |
| 13949 | + .text |
| 13950 | + .global popm |
| 13951 | +popm: |
| 13952 | + /* popm with no argument fails currently */ |
| 13953 | + popm pc |
| 13954 | + popm r0-r11,pc,r12=-1 |
| 13955 | + popm lr |
| 13956 | + popm r0-r11,pc,r12=1 |
| 13957 | + popm r0-r3 |
| 13958 | + popm r4-r10,pc |
| 13959 | + popm r0-r3,r11,pc,r12=0 |
| 13960 | + popm r0-r7,r10-r12,lr |
| 13961 | + .text |
| 13962 | + .global pushm |
| 13963 | +pushm: |
| 13964 | + pushm pc |
| 13965 | + pushm r0-r12,lr,pc |
| 13966 | + pushm pc |
| 13967 | + pushm r0-r12,lr |
| 13968 | + pushm r0-r3 |
| 13969 | + pushm r8-r10,lr,pc |
| 13970 | + pushm r0-r3,r10 |
| 13971 | + pushm r8-r9,r12 |
| 13972 | + .text |
| 13973 | + .global popm_n |
| 13974 | +popm_n: |
| 13975 | + popm pc |
| 13976 | + popm r0-r11,pc,r12=-1 |
| 13977 | + popm lr |
| 13978 | + popm r0-r11,pc,r12=1 |
| 13979 | + popm r0-r3 |
| 13980 | + popm r4-r10,pc |
| 13981 | + popm r0-r3,r11,pc,r12=0 |
| 13982 | + popm r0-r7,r10-r12,lr |
| 13983 | + .text |
| 13984 | + .global pushm_n |
| 13985 | +pushm_n: |
| 13986 | + pushm pc |
| 13987 | + pushm r0-r12,lr,pc |
| 13988 | + pushm pc |
| 13989 | + pushm r0-r12,lr |
| 13990 | + pushm r0-r3 |
| 13991 | + pushm r8-r10,lr,pc |
| 13992 | + pushm r0-r3,r10 |
| 13993 | + pushm r8-r9,r12 |
| 13994 | + .text |
| 13995 | + .global csrfcz |
| 13996 | +csrfcz: |
| 13997 | + csrfcz 0 |
| 13998 | + csrfcz 31 |
| 13999 | + csrfcz 16 |
| 14000 | + csrfcz 15 |
| 14001 | + csrfcz 1 |
| 14002 | + csrfcz 5 |
| 14003 | + csrfcz 13 |
| 14004 | + csrfcz 23 |
| 14005 | + .text |
| 14006 | + .global ssrf |
| 14007 | +ssrf: |
| 14008 | + ssrf 0 |
| 14009 | + ssrf 31 |
| 14010 | + ssrf 16 |
| 14011 | + ssrf 15 |
| 14012 | + ssrf 1 |
| 14013 | + ssrf 29 |
| 14014 | + ssrf 13 |
| 14015 | + ssrf 13 |
| 14016 | + .text |
| 14017 | + .global csrf |
| 14018 | +csrf: |
| 14019 | + csrf 0 |
| 14020 | + csrf 31 |
| 14021 | + csrf 16 |
| 14022 | + csrf 15 |
| 14023 | + csrf 1 |
| 14024 | + csrf 10 |
| 14025 | + csrf 15 |
| 14026 | + csrf 11 |
| 14027 | + .text |
| 14028 | + .global rete |
| 14029 | +rete: |
| 14030 | + rete |
| 14031 | + .text |
| 14032 | + .global rets |
| 14033 | +rets: |
| 14034 | + rets |
| 14035 | + .text |
| 14036 | + .global retd |
| 14037 | +retd: |
| 14038 | + retd |
| 14039 | + .text |
| 14040 | + .global retj |
| 14041 | +retj: |
| 14042 | + retj |
| 14043 | + .text |
| 14044 | + .global tlbr |
| 14045 | +tlbr: |
| 14046 | + tlbr |
| 14047 | + .text |
| 14048 | + .global tlbs |
| 14049 | +tlbs: |
| 14050 | + tlbs |
| 14051 | + .text |
| 14052 | + .global tlbw |
| 14053 | +tlbw: |
| 14054 | + tlbw |
| 14055 | + .text |
| 14056 | + .global breakpoint |
| 14057 | +breakpoint: |
| 14058 | + breakpoint |
| 14059 | + .text |
| 14060 | + .global incjosp |
| 14061 | +incjosp: |
| 14062 | + incjosp 1 |
| 14063 | + incjosp 2 |
| 14064 | + incjosp 3 |
| 14065 | + incjosp 4 |
| 14066 | + incjosp -4 |
| 14067 | + incjosp -3 |
| 14068 | + incjosp -2 |
| 14069 | + incjosp -1 |
| 14070 | + .text |
| 14071 | + .global nop |
| 14072 | +nop: |
| 14073 | + nop |
| 14074 | + .text |
| 14075 | + .global popjc |
| 14076 | +popjc: |
| 14077 | + popjc |
| 14078 | + .text |
| 14079 | + .global pushjc |
| 14080 | +pushjc: |
| 14081 | + pushjc |
| 14082 | + .text |
| 14083 | + .global add2 |
| 14084 | +add2: |
| 14085 | + add pc,pc,pc<<0 |
| 14086 | + add r12,r12,r12<<3 |
| 14087 | + add r5,r5,r5<<2 |
| 14088 | + add r4,r4,r4<<1 |
| 14089 | + add lr,lr,lr<<1 |
| 14090 | + add r0,r12,r0<<1 |
| 14091 | + add r9,r12,r4<<0 |
| 14092 | + add r12,r12,r7<<2 |
| 14093 | + .text |
| 14094 | + .global sub2 |
| 14095 | +sub2: |
| 14096 | + sub pc,pc,pc<<0 |
| 14097 | + sub r12,r12,r12<<3 |
| 14098 | + sub r5,r5,r5<<2 |
| 14099 | + sub r4,r4,r4<<1 |
| 14100 | + sub lr,lr,lr<<1 |
| 14101 | + sub sp,r3,r4<<0 |
| 14102 | + sub r3,r7,r3<<0 |
| 14103 | + sub sp,r10,sp<<1 |
| 14104 | + .text |
| 14105 | + .global divu |
| 14106 | +divu: |
| 14107 | + divu pc,pc,pc |
| 14108 | + divu r12,r12,r12 |
| 14109 | + divu r5,r5,r5 |
| 14110 | + divu r4,r4,r4 |
| 14111 | + divu lr,lr,lr |
| 14112 | + divu sp,r4,pc |
| 14113 | + divu r5,r5,sp |
| 14114 | + divu r10,sp,r0 |
| 14115 | + .text |
| 14116 | + .global addhh_w |
| 14117 | +addhh_w: |
| 14118 | + addhh.w pc,pc:b,pc:b |
| 14119 | + addhh.w r12,r12:t,r12:t |
| 14120 | + addhh.w r5,r5:t,r5:t |
| 14121 | + addhh.w r4,r4:b,r4:b |
| 14122 | + addhh.w lr,lr:t,lr:t |
| 14123 | + addhh.w r0,r0:b,r3:b |
| 14124 | + addhh.w lr,r12:t,r7:b |
| 14125 | + addhh.w r3,r10:t,r2:b |
| 14126 | + .text |
| 14127 | + .global subhh_w |
| 14128 | +subhh_w: |
| 14129 | + subhh.w pc,pc:b,pc:b |
| 14130 | + subhh.w r12,r12:t,r12:t |
| 14131 | + subhh.w r5,r5:t,r5:t |
| 14132 | + subhh.w r4,r4:b,r4:b |
| 14133 | + subhh.w lr,lr:t,lr:t |
| 14134 | + subhh.w r10,r1:t,r7:b |
| 14135 | + subhh.w pc,r10:t,lr:t |
| 14136 | + subhh.w r3,r0:t,r12:b |
| 14137 | + .text |
| 14138 | + .global adc |
| 14139 | +adc: |
| 14140 | + adc pc,pc,pc |
| 14141 | + adc r12,r12,r12 |
| 14142 | + adc r5,r5,r5 |
| 14143 | + adc r4,r4,r4 |
| 14144 | + adc lr,lr,lr |
| 14145 | + adc r4,r0,r7 |
| 14146 | + adc sp,r4,r3 |
| 14147 | + adc r2,r12,r0 |
| 14148 | + .text |
| 14149 | + .global sbc |
| 14150 | +sbc: |
| 14151 | + sbc pc,pc,pc |
| 14152 | + sbc r12,r12,r12 |
| 14153 | + sbc r5,r5,r5 |
| 14154 | + sbc r4,r4,r4 |
| 14155 | + sbc lr,lr,lr |
| 14156 | + sbc r6,r7,r9 |
| 14157 | + sbc r0,r8,r5 |
| 14158 | + sbc r1,r0,r4 |
| 14159 | + .text |
| 14160 | + .global mul_2 |
| 14161 | +mul_2: |
| 14162 | + mul pc,pc,pc |
| 14163 | + mul r12,r12,r12 |
| 14164 | + mul r5,r5,r5 |
| 14165 | + mul r4,r4,r4 |
| 14166 | + mul lr,lr,lr |
| 14167 | + mul pc,r0,r0 |
| 14168 | + mul r8,pc,lr |
| 14169 | + mul r4,r12,pc |
| 14170 | + .text |
| 14171 | + .global mac |
| 14172 | +mac: |
| 14173 | + mac pc,pc,pc |
| 14174 | + mac r12,r12,r12 |
| 14175 | + mac r5,r5,r5 |
| 14176 | + mac r4,r4,r4 |
| 14177 | + mac lr,lr,lr |
| 14178 | + mac r10,r4,r0 |
| 14179 | + mac r7,lr,r0 |
| 14180 | + mac r2,r9,r12 |
| 14181 | + .text |
| 14182 | + .global mulsd |
| 14183 | +mulsd: |
| 14184 | + muls.d pc,pc,pc |
| 14185 | + muls.d r12,r12,r12 |
| 14186 | + muls.d r5,r5,r5 |
| 14187 | + muls.d r4,r4,r4 |
| 14188 | + muls.d lr,lr,lr |
| 14189 | + muls.d r2,r8,lr |
| 14190 | + muls.d r4,r0,r11 |
| 14191 | + muls.d r5,lr,r6 |
| 14192 | + .text |
| 14193 | + .global macsd |
| 14194 | +macsd: |
| 14195 | + macs.d r0,pc,pc |
| 14196 | + macs.d r14,r12,r12 |
| 14197 | + macs.d r8,r5,r5 |
| 14198 | + macs.d r6,r4,r4 |
| 14199 | + macs.d r2,lr,lr |
| 14200 | + macs.d r8,r1,r9 |
| 14201 | + macs.d r14,r8,r8 |
| 14202 | + macs.d r4,r3,r12 |
| 14203 | + .text |
| 14204 | + .global mulud |
| 14205 | +mulud: |
| 14206 | + mulu.d r0,pc,pc |
| 14207 | + mulu.d r14,r12,r12 |
| 14208 | + mulu.d r8,r5,r5 |
| 14209 | + mulu.d r6,r4,r4 |
| 14210 | + mulu.d r2,lr,lr |
| 14211 | + mulu.d r6,r5,r0 |
| 14212 | + mulu.d r4,r6,r1 |
| 14213 | + mulu.d r8,r8,r2 |
| 14214 | + .text |
| 14215 | + .global macud |
| 14216 | +macud: |
| 14217 | + macu.d r0,pc,pc |
| 14218 | + macu.d r14,r12,r12 |
| 14219 | + macu.d r8,r5,r5 |
| 14220 | + macu.d r6,r4,r4 |
| 14221 | + macu.d r2,lr,lr |
| 14222 | + macu.d r6,sp,r11 |
| 14223 | + macu.d r2,r4,r8 |
| 14224 | + macu.d r6,r10,r9 |
| 14225 | + .text |
| 14226 | + .global asr_1 |
| 14227 | +asr_1: |
| 14228 | + asr pc,pc,pc |
| 14229 | + asr r12,r12,r12 |
| 14230 | + asr r5,r5,r5 |
| 14231 | + asr r4,r4,r4 |
| 14232 | + asr lr,lr,lr |
| 14233 | + asr pc,r6,pc |
| 14234 | + asr r0,r6,r12 |
| 14235 | + asr r4,sp,r0 |
| 14236 | + .text |
| 14237 | + .global lsl_1 |
| 14238 | +lsl_1: |
| 14239 | + lsl pc,pc,pc |
| 14240 | + lsl r12,r12,r12 |
| 14241 | + lsl r5,r5,r5 |
| 14242 | + lsl r4,r4,r4 |
| 14243 | + lsl lr,lr,lr |
| 14244 | + lsl lr,r5,lr |
| 14245 | + lsl r5,pc,r3 |
| 14246 | + lsl r1,pc,r9 |
| 14247 | + .text |
| 14248 | + .global lsr_1 |
| 14249 | +lsr_1: |
| 14250 | + lsr pc,pc,pc |
| 14251 | + lsr r12,r12,r12 |
| 14252 | + lsr r5,r5,r5 |
| 14253 | + lsr r4,r4,r4 |
| 14254 | + lsr lr,lr,lr |
| 14255 | + lsr r2,r4,r1 |
| 14256 | + lsr r5,r1,r6 |
| 14257 | + lsr sp,r6,r7 |
| 14258 | + .text |
| 14259 | + .global xchg |
| 14260 | +xchg: |
| 14261 | + xchg pc,pc,pc |
| 14262 | + xchg r12,r12,r12 |
| 14263 | + xchg r5,r5,r5 |
| 14264 | + xchg r4,r4,r4 |
| 14265 | + xchg lr,lr,lr |
| 14266 | + xchg lr,r4,sp |
| 14267 | + xchg r1,r5,r12 |
| 14268 | + xchg lr,r12,r0 |
| 14269 | + .text |
| 14270 | + .global max |
| 14271 | +max: |
| 14272 | + max pc,pc,pc |
| 14273 | + max r12,r12,r12 |
| 14274 | + max r5,r5,r5 |
| 14275 | + max r4,r4,r4 |
| 14276 | + max lr,lr,lr |
| 14277 | + max lr,r2,sp |
| 14278 | + max r4,r10,r9 |
| 14279 | + max lr,r9,lr |
| 14280 | + .text |
| 14281 | + .global min |
| 14282 | +min: |
| 14283 | + min pc,pc,pc |
| 14284 | + min r12,r12,r12 |
| 14285 | + min r5,r5,r5 |
| 14286 | + min r4,r4,r4 |
| 14287 | + min lr,lr,lr |
| 14288 | + min r9,r7,r8 |
| 14289 | + min sp,r5,r5 |
| 14290 | + min r4,r1,r4 |
| 14291 | + .text |
| 14292 | + .global addabs |
| 14293 | +addabs: |
| 14294 | + addabs pc,pc,pc |
| 14295 | + addabs r12,r12,r12 |
| 14296 | + addabs r5,r5,r5 |
| 14297 | + addabs r4,r4,r4 |
| 14298 | + addabs lr,lr,lr |
| 14299 | + addabs r7,r10,r0 |
| 14300 | + addabs r9,r9,r7 |
| 14301 | + addabs r2,r8,r12 |
| 14302 | + .text |
| 14303 | + .global mulnhh_w |
| 14304 | +mulnhh_w: |
| 14305 | + mulnhh.w pc,pc:b,pc:b |
| 14306 | + mulnhh.w r12,r12:t,r12:t |
| 14307 | + mulnhh.w r5,r5:t,r5:t |
| 14308 | + mulnhh.w r4,r4:b,r4:b |
| 14309 | + mulnhh.w lr,lr:t,lr:t |
| 14310 | + mulnhh.w r11,sp:t,r9:b |
| 14311 | + mulnhh.w sp,r4:b,lr:t |
| 14312 | + mulnhh.w r12,r2:t,r11:b |
| 14313 | + .text |
| 14314 | + .global mulnwh_d |
| 14315 | +mulnwh_d: |
| 14316 | + mulnwh.d r0,pc,pc:b |
| 14317 | + mulnwh.d r14,r12,r12:t |
| 14318 | + mulnwh.d r8,r5,r5:t |
| 14319 | + mulnwh.d r6,r4,r4:b |
| 14320 | + mulnwh.d r2,lr,lr:t |
| 14321 | + mulnwh.d r14,r3,r2:t |
| 14322 | + mulnwh.d r4,r5,r9:b |
| 14323 | + mulnwh.d r12,r4,r4:t |
| 14324 | + .text |
| 14325 | + .global machh_w |
| 14326 | +machh_w: |
| 14327 | + machh.w pc,pc:b,pc:b |
| 14328 | + machh.w r12,r12:t,r12:t |
| 14329 | + machh.w r5,r5:t,r5:t |
| 14330 | + machh.w r4,r4:b,r4:b |
| 14331 | + machh.w lr,lr:t,lr:t |
| 14332 | + machh.w lr,r5:b,r1:t |
| 14333 | + machh.w r9,r6:b,r7:b |
| 14334 | + machh.w r5,lr:t,r12:b |
| 14335 | + .text |
| 14336 | + .global machh_d |
| 14337 | +machh_d: |
| 14338 | + machh.d r0,pc:b,pc:b |
| 14339 | + machh.d r14,r12:t,r12:t |
| 14340 | + machh.d r8,r5:t,r5:t |
| 14341 | + machh.d r6,r4:b,r4:b |
| 14342 | + machh.d r2,lr:t,lr:t |
| 14343 | + machh.d r10,r0:b,r8:b |
| 14344 | + machh.d r14,r4:b,r5:t |
| 14345 | + machh.d r8,r0:b,r4:t |
| 14346 | + .text |
| 14347 | + .global macsathh_w |
| 14348 | +macsathh_w: |
| 14349 | + macsathh.w pc,pc:b,pc:b |
| 14350 | + macsathh.w r12,r12:t,r12:t |
| 14351 | + macsathh.w r5,r5:t,r5:t |
| 14352 | + macsathh.w r4,r4:b,r4:b |
| 14353 | + macsathh.w lr,lr:t,lr:t |
| 14354 | + macsathh.w r7,r7:t,pc:t |
| 14355 | + macsathh.w r4,r2:t,r4:b |
| 14356 | + macsathh.w r4,r8:t,r3:t |
| 14357 | + .text |
| 14358 | + .global mulhh_w |
| 14359 | +mulhh_w: |
| 14360 | + mulhh.w pc,pc:b,pc:b |
| 14361 | + mulhh.w r12,r12:t,r12:t |
| 14362 | + mulhh.w r5,r5:t,r5:t |
| 14363 | + mulhh.w r4,r4:b,r4:b |
| 14364 | + mulhh.w lr,lr:t,lr:t |
| 14365 | + mulhh.w r7,r4:t,r9:b |
| 14366 | + mulhh.w pc,r3:t,r7:t |
| 14367 | + mulhh.w pc,r4:b,r9:t |
| 14368 | + .text |
| 14369 | + .global mulsathh_h |
| 14370 | +mulsathh_h: |
| 14371 | + mulsathh.h pc,pc:b,pc:b |
| 14372 | + mulsathh.h r12,r12:t,r12:t |
| 14373 | + mulsathh.h r5,r5:t,r5:t |
| 14374 | + mulsathh.h r4,r4:b,r4:b |
| 14375 | + mulsathh.h lr,lr:t,lr:t |
| 14376 | + mulsathh.h r3,r1:b,sp:b |
| 14377 | + mulsathh.h r11,lr:t,r11:b |
| 14378 | + mulsathh.h r8,r8:b,r11:t |
| 14379 | + .text |
| 14380 | + .global mulsathh_w |
| 14381 | +mulsathh_w: |
| 14382 | + mulsathh.w pc,pc:b,pc:b |
| 14383 | + mulsathh.w r12,r12:t,r12:t |
| 14384 | + mulsathh.w r5,r5:t,r5:t |
| 14385 | + mulsathh.w r4,r4:b,r4:b |
| 14386 | + mulsathh.w lr,lr:t,lr:t |
| 14387 | + mulsathh.w lr,r11:t,r6:b |
| 14388 | + mulsathh.w r6,r6:b,r7:t |
| 14389 | + mulsathh.w r10,r2:b,r3:b |
| 14390 | + .text |
| 14391 | + .global mulsatrndhh_h |
| 14392 | +mulsatrndhh_h: |
| 14393 | + mulsatrndhh.h pc,pc:b,pc:b |
| 14394 | + mulsatrndhh.h r12,r12:t,r12:t |
| 14395 | + mulsatrndhh.h r5,r5:t,r5:t |
| 14396 | + mulsatrndhh.h r4,r4:b,r4:b |
| 14397 | + mulsatrndhh.h lr,lr:t,lr:t |
| 14398 | + mulsatrndhh.h r11,r6:b,r9:b |
| 14399 | + mulsatrndhh.h r11,r3:b,r8:t |
| 14400 | + mulsatrndhh.h r5,sp:t,r7:t |
| 14401 | + .text |
| 14402 | + .global mulsatrndwh_w |
| 14403 | +mulsatrndwh_w: |
| 14404 | + mulsatrndwh.w pc,pc,pc:b |
| 14405 | + mulsatrndwh.w r12,r12,r12:t |
| 14406 | + mulsatrndwh.w r5,r5,r5:t |
| 14407 | + mulsatrndwh.w r4,r4,r4:b |
| 14408 | + mulsatrndwh.w lr,lr,lr:t |
| 14409 | + mulsatrndwh.w r5,r12,r0:b |
| 14410 | + mulsatrndwh.w r7,r10,pc:b |
| 14411 | + mulsatrndwh.w r10,r8,r5:t |
| 14412 | + .text |
| 14413 | + .global macwh_d |
| 14414 | +macwh_d: |
| 14415 | + macwh.d r0,pc,pc:b |
| 14416 | + macwh.d r14,r12,r12:t |
| 14417 | + macwh.d r8,r5,r5:t |
| 14418 | + macwh.d r6,r4,r4:b |
| 14419 | + macwh.d r2,lr,lr:t |
| 14420 | + macwh.d r4,r10,r12:t |
| 14421 | + macwh.d r4,r7,sp:b |
| 14422 | + macwh.d r14,r9,r11:b |
| 14423 | + .text |
| 14424 | + .global mulwh_d |
| 14425 | +mulwh_d: |
| 14426 | + mulwh.d r0,pc,pc:b |
| 14427 | + mulwh.d r14,r12,r12:t |
| 14428 | + mulwh.d r8,r5,r5:t |
| 14429 | + mulwh.d r6,r4,r4:b |
| 14430 | + mulwh.d r2,lr,lr:t |
| 14431 | + mulwh.d r12,r5,r1:b |
| 14432 | + mulwh.d r0,r1,r3:t |
| 14433 | + mulwh.d r0,r9,r2:b |
| 14434 | + .text |
| 14435 | + .global mulsatwh_w |
| 14436 | +mulsatwh_w: |
| 14437 | + mulsatwh.w pc,pc,pc:b |
| 14438 | + mulsatwh.w r12,r12,r12:t |
| 14439 | + mulsatwh.w r5,r5,r5:t |
| 14440 | + mulsatwh.w r4,r4,r4:b |
| 14441 | + mulsatwh.w lr,lr,lr:t |
| 14442 | + mulsatwh.w r11,pc,r10:t |
| 14443 | + mulsatwh.w sp,r12,r9:t |
| 14444 | + mulsatwh.w r0,r3,r2:t |
| 14445 | + .text |
| 14446 | + .global ldw7 |
| 14447 | +ldw7: |
| 14448 | + ld.w pc,pc[pc:b<<2] |
| 14449 | + ld.w r12,r12[r12:t<<2] |
| 14450 | + ld.w r5,r5[r5:u<<2] |
| 14451 | + ld.w r4,r4[r4:l<<2] |
| 14452 | + ld.w lr,lr[lr:l<<2] |
| 14453 | + ld.w r9,r10[r6:l<<2] |
| 14454 | + ld.w r2,r10[r10:b<<2] |
| 14455 | + ld.w r11,r5[pc:b<<2] |
| 14456 | + .text |
| 14457 | + .global satadd_w |
| 14458 | +satadd_w: |
| 14459 | + satadd.w pc,pc,pc |
| 14460 | + satadd.w r12,r12,r12 |
| 14461 | + satadd.w r5,r5,r5 |
| 14462 | + satadd.w r4,r4,r4 |
| 14463 | + satadd.w lr,lr,lr |
| 14464 | + satadd.w r4,r8,r11 |
| 14465 | + satadd.w r3,r12,r6 |
| 14466 | + satadd.w r3,lr,r9 |
| 14467 | + .text |
| 14468 | + .global satsub_w1 |
| 14469 | +satsub_w1: |
| 14470 | + satsub.w pc,pc,pc |
| 14471 | + satsub.w r12,r12,r12 |
| 14472 | + satsub.w r5,r5,r5 |
| 14473 | + satsub.w r4,r4,r4 |
| 14474 | + satsub.w lr,lr,lr |
| 14475 | + satsub.w r8,sp,r0 |
| 14476 | + satsub.w r9,r8,r4 |
| 14477 | + satsub.w pc,lr,r2 |
| 14478 | + .text |
| 14479 | + .global satadd_h |
| 14480 | +satadd_h: |
| 14481 | + satadd.h pc,pc,pc |
| 14482 | + satadd.h r12,r12,r12 |
| 14483 | + satadd.h r5,r5,r5 |
| 14484 | + satadd.h r4,r4,r4 |
| 14485 | + satadd.h lr,lr,lr |
| 14486 | + satadd.h r7,r3,r9 |
| 14487 | + satadd.h r1,r0,r2 |
| 14488 | + satadd.h r1,r4,lr |
| 14489 | + .text |
| 14490 | + .global satsub_h |
| 14491 | +satsub_h: |
| 14492 | + satsub.h pc,pc,pc |
| 14493 | + satsub.h r12,r12,r12 |
| 14494 | + satsub.h r5,r5,r5 |
| 14495 | + satsub.h r4,r4,r4 |
| 14496 | + satsub.h lr,lr,lr |
| 14497 | + satsub.h lr,lr,r3 |
| 14498 | + satsub.h r11,r6,r5 |
| 14499 | + satsub.h r3,sp,r0 |
| 14500 | + .text |
| 14501 | + .global mul3 |
| 14502 | +mul3: |
| 14503 | + mul pc,pc,0 |
| 14504 | + mul r12,r12,-1 |
| 14505 | + mul r5,r5,-128 |
| 14506 | + mul r4,r4,127 |
| 14507 | + mul lr,lr,1 |
| 14508 | + mul r12,r2,-7 |
| 14509 | + mul r1,pc,95 |
| 14510 | + mul r4,r6,19 |
| 14511 | + .text |
| 14512 | + .global rsub2 |
| 14513 | +rsub2: |
| 14514 | + rsub pc,pc,0 |
| 14515 | + rsub r12,r12,-1 |
| 14516 | + rsub r5,r5,-128 |
| 14517 | + rsub r4,r4,127 |
| 14518 | + rsub lr,lr,1 |
| 14519 | + rsub r9,lr,96 |
| 14520 | + rsub r11,r1,56 |
| 14521 | + rsub r0,r7,-87 |
| 14522 | + .text |
| 14523 | + .global clz |
| 14524 | +clz: |
| 14525 | + clz pc,pc |
| 14526 | + clz r12,r12 |
| 14527 | + clz r5,r5 |
| 14528 | + clz r4,r4 |
| 14529 | + clz lr,lr |
| 14530 | + clz r2,r3 |
| 14531 | + clz r5,r11 |
| 14532 | + clz pc,r3 |
| 14533 | + .text |
| 14534 | + .global cpc1 |
| 14535 | +cpc1: |
| 14536 | + cpc pc,pc |
| 14537 | + cpc r12,r12 |
| 14538 | + cpc r5,r5 |
| 14539 | + cpc r4,r4 |
| 14540 | + cpc lr,lr |
| 14541 | + cpc pc,r4 |
| 14542 | + cpc r5,r9 |
| 14543 | + cpc r6,r7 |
| 14544 | + .text |
| 14545 | + .global asr3 |
| 14546 | +asr3: |
| 14547 | + asr pc,pc,0 |
| 14548 | + asr r12,r12,31 |
| 14549 | + asr r5,r5,16 |
| 14550 | + asr r4,r4,15 |
| 14551 | + asr lr,lr,1 |
| 14552 | + asr r4,r11,19 |
| 14553 | + asr sp,pc,26 |
| 14554 | + asr r11,sp,8 |
| 14555 | + .text |
| 14556 | + .global lsl3 |
| 14557 | +lsl3: |
| 14558 | + lsl pc,pc,0 |
| 14559 | + lsl r12,r12,31 |
| 14560 | + lsl r5,r5,16 |
| 14561 | + lsl r4,r4,15 |
| 14562 | + lsl lr,lr,1 |
| 14563 | + lsl r8,r10,17 |
| 14564 | + lsl r2,lr,3 |
| 14565 | + lsl lr,r11,14 |
| 14566 | + .text |
| 14567 | + .global lsr3 |
| 14568 | +lsr3: |
| 14569 | + lsr pc,pc,0 |
| 14570 | + lsr r12,r12,31 |
| 14571 | + lsr r5,r5,16 |
| 14572 | + lsr r4,r4,15 |
| 14573 | + lsr lr,lr,1 |
| 14574 | + lsr r4,r3,31 |
| 14575 | + lsr pc,r9,14 |
| 14576 | + lsr r3,r0,6 |
| 14577 | +/* .text |
| 14578 | + .global extract_b |
| 14579 | +extract_b: |
| 14580 | + extract.b pc,pc:b |
| 14581 | + extract.b r12,r12:t |
| 14582 | + extract.b r5,r5:u |
| 14583 | + extract.b r4,r4:l |
| 14584 | + extract.b lr,lr:l |
| 14585 | + extract.b r2,r5:l |
| 14586 | + extract.b r12,r3:l |
| 14587 | + extract.b sp,r3:l |
| 14588 | + .text |
| 14589 | + .global insert_b |
| 14590 | +insert_b: |
| 14591 | + insert.b pc:b,pc |
| 14592 | + insert.b r12:t,r12 |
| 14593 | + insert.b r5:u,r5 |
| 14594 | + insert.b r4:l,r4 |
| 14595 | + insert.b lr:l,lr |
| 14596 | + insert.b r12:u,r3 |
| 14597 | + insert.b r10:l,lr |
| 14598 | + insert.b r11:l,r12 |
| 14599 | + .text |
| 14600 | + .global extract_h |
| 14601 | +extract_h: |
| 14602 | + extract.h pc,pc:b |
| 14603 | + extract.h r12,r12:t |
| 14604 | + extract.h r5,r5:t |
| 14605 | + extract.h r4,r4:b |
| 14606 | + extract.h lr,lr:t |
| 14607 | + extract.h r11,lr:b |
| 14608 | + extract.h r10,r0:b |
| 14609 | + extract.h r11,r12:b |
| 14610 | + .text |
| 14611 | + .global insert_h |
| 14612 | +insert_h: |
| 14613 | + insert.h pc:b,pc |
| 14614 | + insert.h r12:t,r12 |
| 14615 | + insert.h r5:t,r5 |
| 14616 | + insert.h r4:b,r4 |
| 14617 | + insert.h lr:t,lr |
| 14618 | + insert.h r12:t,r11 |
| 14619 | + insert.h r7:b,r6 |
| 14620 | + insert.h r1:t,r11 */ |
| 14621 | + .text |
| 14622 | + .global movc1 |
| 14623 | +movc1: |
| 14624 | + moveq pc,pc |
| 14625 | + moval r12,r12 |
| 14626 | + movls r5,r5 |
| 14627 | + movpl r4,r4 |
| 14628 | + movne lr,lr |
| 14629 | + movne pc,r11 |
| 14630 | + movmi r10,r2 |
| 14631 | + movls r8,r12 |
| 14632 | + .text |
| 14633 | + .global padd_h |
| 14634 | +padd_h: |
| 14635 | + padd.h pc,pc,pc |
| 14636 | + padd.h r12,r12,r12 |
| 14637 | + padd.h r5,r5,r5 |
| 14638 | + padd.h r4,r4,r4 |
| 14639 | + padd.h lr,lr,lr |
| 14640 | + padd.h r8,r2,r7 |
| 14641 | + padd.h r0,r0,r3 |
| 14642 | + padd.h sp,r11,r6 |
| 14643 | + .text |
| 14644 | + .global psub_h |
| 14645 | +psub_h: |
| 14646 | + psub.h pc,pc,pc |
| 14647 | + psub.h r12,r12,r12 |
| 14648 | + psub.h r5,r5,r5 |
| 14649 | + psub.h r4,r4,r4 |
| 14650 | + psub.h lr,lr,lr |
| 14651 | + psub.h lr,r6,r8 |
| 14652 | + psub.h r0,r1,sp |
| 14653 | + psub.h pc,pc,sp |
| 14654 | + .text |
| 14655 | + .global paddx_h |
| 14656 | +paddx_h: |
| 14657 | + paddx.h pc,pc,pc |
| 14658 | + paddx.h r12,r12,r12 |
| 14659 | + paddx.h r5,r5,r5 |
| 14660 | + paddx.h r4,r4,r4 |
| 14661 | + paddx.h lr,lr,lr |
| 14662 | + paddx.h pc,pc,r1 |
| 14663 | + paddx.h r10,r4,r5 |
| 14664 | + paddx.h r5,pc,r2 |
| 14665 | + .text |
| 14666 | + .global psubx_h |
| 14667 | +psubx_h: |
| 14668 | + psubx.h pc,pc,pc |
| 14669 | + psubx.h r12,r12,r12 |
| 14670 | + psubx.h r5,r5,r5 |
| 14671 | + psubx.h r4,r4,r4 |
| 14672 | + psubx.h lr,lr,lr |
| 14673 | + psubx.h r5,r12,r5 |
| 14674 | + psubx.h r3,r8,r3 |
| 14675 | + psubx.h r5,r2,r3 |
| 14676 | + .text |
| 14677 | + .global padds_sh |
| 14678 | +padds_sh: |
| 14679 | + padds.sh pc,pc,pc |
| 14680 | + padds.sh r12,r12,r12 |
| 14681 | + padds.sh r5,r5,r5 |
| 14682 | + padds.sh r4,r4,r4 |
| 14683 | + padds.sh lr,lr,lr |
| 14684 | + padds.sh r9,lr,r2 |
| 14685 | + padds.sh r6,r8,r1 |
| 14686 | + padds.sh r6,r4,r10 |
| 14687 | + .text |
| 14688 | + .global psubs_sh |
| 14689 | +psubs_sh: |
| 14690 | + psubs.sh pc,pc,pc |
| 14691 | + psubs.sh r12,r12,r12 |
| 14692 | + psubs.sh r5,r5,r5 |
| 14693 | + psubs.sh r4,r4,r4 |
| 14694 | + psubs.sh lr,lr,lr |
| 14695 | + psubs.sh r6,lr,r11 |
| 14696 | + psubs.sh r2,r12,r4 |
| 14697 | + psubs.sh r0,r9,r0 |
| 14698 | + .text |
| 14699 | + .global paddxs_sh |
| 14700 | +paddxs_sh: |
| 14701 | + paddxs.sh pc,pc,pc |
| 14702 | + paddxs.sh r12,r12,r12 |
| 14703 | + paddxs.sh r5,r5,r5 |
| 14704 | + paddxs.sh r4,r4,r4 |
| 14705 | + paddxs.sh lr,lr,lr |
| 14706 | + paddxs.sh r0,r3,r9 |
| 14707 | + paddxs.sh pc,r10,r11 |
| 14708 | + paddxs.sh pc,r10,pc |
| 14709 | + .text |
| 14710 | + .global psubxs_sh |
| 14711 | +psubxs_sh: |
| 14712 | + psubxs.sh pc,pc,pc |
| 14713 | + psubxs.sh r12,r12,r12 |
| 14714 | + psubxs.sh r5,r5,r5 |
| 14715 | + psubxs.sh r4,r4,r4 |
| 14716 | + psubxs.sh lr,lr,lr |
| 14717 | + psubxs.sh r7,r4,r4 |
| 14718 | + psubxs.sh r7,r8,r3 |
| 14719 | + psubxs.sh pc,r6,r5 |
| 14720 | + .text |
| 14721 | + .global padds_uh |
| 14722 | +padds_uh: |
| 14723 | + padds.uh pc,pc,pc |
| 14724 | + padds.uh r12,r12,r12 |
| 14725 | + padds.uh r5,r5,r5 |
| 14726 | + padds.uh r4,r4,r4 |
| 14727 | + padds.uh lr,lr,lr |
| 14728 | + padds.uh r12,r11,r7 |
| 14729 | + padds.uh r7,r8,lr |
| 14730 | + padds.uh r6,r9,r7 |
| 14731 | + .text |
| 14732 | + .global psubs_uh |
| 14733 | +psubs_uh: |
| 14734 | + psubs.uh pc,pc,pc |
| 14735 | + psubs.uh r12,r12,r12 |
| 14736 | + psubs.uh r5,r5,r5 |
| 14737 | + psubs.uh r4,r4,r4 |
| 14738 | + psubs.uh lr,lr,lr |
| 14739 | + psubs.uh lr,r10,r6 |
| 14740 | + psubs.uh sp,r2,pc |
| 14741 | + psubs.uh r2,r9,r2 |
| 14742 | + .text |
| 14743 | + .global paddxs_uh |
| 14744 | +paddxs_uh: |
| 14745 | + paddxs.uh pc,pc,pc |
| 14746 | + paddxs.uh r12,r12,r12 |
| 14747 | + paddxs.uh r5,r5,r5 |
| 14748 | + paddxs.uh r4,r4,r4 |
| 14749 | + paddxs.uh lr,lr,lr |
| 14750 | + paddxs.uh r7,r9,r5 |
| 14751 | + paddxs.uh r9,r1,r4 |
| 14752 | + paddxs.uh r5,r2,r3 |
| 14753 | + .text |
| 14754 | + .global psubxs_uh |
| 14755 | +psubxs_uh: |
| 14756 | + psubxs.uh pc,pc,pc |
| 14757 | + psubxs.uh r12,r12,r12 |
| 14758 | + psubxs.uh r5,r5,r5 |
| 14759 | + psubxs.uh r4,r4,r4 |
| 14760 | + psubxs.uh lr,lr,lr |
| 14761 | + psubxs.uh sp,r5,sp |
| 14762 | + psubxs.uh sp,r6,r6 |
| 14763 | + psubxs.uh r3,r11,r8 |
| 14764 | + .text |
| 14765 | + .global paddh_sh |
| 14766 | +paddh_sh: |
| 14767 | + paddh.sh pc,pc,pc |
| 14768 | + paddh.sh r12,r12,r12 |
| 14769 | + paddh.sh r5,r5,r5 |
| 14770 | + paddh.sh r4,r4,r4 |
| 14771 | + paddh.sh lr,lr,lr |
| 14772 | + paddh.sh r12,sp,r3 |
| 14773 | + paddh.sh pc,r5,r3 |
| 14774 | + paddh.sh r8,r8,sp |
| 14775 | + .text |
| 14776 | + .global psubh_sh |
| 14777 | +psubh_sh: |
| 14778 | + psubh.sh pc,pc,pc |
| 14779 | + psubh.sh r12,r12,r12 |
| 14780 | + psubh.sh r5,r5,r5 |
| 14781 | + psubh.sh r4,r4,r4 |
| 14782 | + psubh.sh lr,lr,lr |
| 14783 | + psubh.sh r1,r5,r8 |
| 14784 | + psubh.sh r7,r3,r6 |
| 14785 | + psubh.sh r4,r3,r3 |
| 14786 | + .text |
| 14787 | + .global paddxh_sh |
| 14788 | +paddxh_sh: |
| 14789 | + paddxh.sh pc,pc,pc |
| 14790 | + paddxh.sh r12,r12,r12 |
| 14791 | + paddxh.sh r5,r5,r5 |
| 14792 | + paddxh.sh r4,r4,r4 |
| 14793 | + paddxh.sh lr,lr,lr |
| 14794 | + paddxh.sh r6,r0,r4 |
| 14795 | + paddxh.sh r9,r8,r9 |
| 14796 | + paddxh.sh r3,r0,sp |
| 14797 | + .text |
| 14798 | + .global psubxh_sh |
| 14799 | +psubxh_sh: |
| 14800 | + psubxh.sh pc,pc,pc |
| 14801 | + psubxh.sh r12,r12,r12 |
| 14802 | + psubxh.sh r5,r5,r5 |
| 14803 | + psubxh.sh r4,r4,r4 |
| 14804 | + psubxh.sh lr,lr,lr |
| 14805 | + psubxh.sh r4,pc,r12 |
| 14806 | + psubxh.sh r8,r4,r6 |
| 14807 | + psubxh.sh r12,r9,r4 |
| 14808 | + .text |
| 14809 | + .global paddsub_h |
| 14810 | +paddsub_h: |
| 14811 | + paddsub.h pc,pc:b,pc:b |
| 14812 | + paddsub.h r12,r12:t,r12:t |
| 14813 | + paddsub.h r5,r5:t,r5:t |
| 14814 | + paddsub.h r4,r4:b,r4:b |
| 14815 | + paddsub.h lr,lr:t,lr:t |
| 14816 | + paddsub.h r5,r2:t,lr:b |
| 14817 | + paddsub.h r7,r1:b,r8:b |
| 14818 | + paddsub.h r6,r10:t,r5:t |
| 14819 | + .text |
| 14820 | + .global psubadd_h |
| 14821 | +psubadd_h: |
| 14822 | + psubadd.h pc,pc:b,pc:b |
| 14823 | + psubadd.h r12,r12:t,r12:t |
| 14824 | + psubadd.h r5,r5:t,r5:t |
| 14825 | + psubadd.h r4,r4:b,r4:b |
| 14826 | + psubadd.h lr,lr:t,lr:t |
| 14827 | + psubadd.h r9,r11:t,r8:t |
| 14828 | + psubadd.h r10,r7:t,lr:t |
| 14829 | + psubadd.h r6,pc:t,pc:b |
| 14830 | + .text |
| 14831 | + .global paddsubs_sh |
| 14832 | +paddsubs_sh: |
| 14833 | + paddsubs.sh pc,pc:b,pc:b |
| 14834 | + paddsubs.sh r12,r12:t,r12:t |
| 14835 | + paddsubs.sh r5,r5:t,r5:t |
| 14836 | + paddsubs.sh r4,r4:b,r4:b |
| 14837 | + paddsubs.sh lr,lr:t,lr:t |
| 14838 | + paddsubs.sh r0,lr:t,r0:b |
| 14839 | + paddsubs.sh r9,r2:t,r4:t |
| 14840 | + paddsubs.sh r12,r9:t,sp:t |
| 14841 | + .text |
| 14842 | + .global psubadds_sh |
| 14843 | +psubadds_sh: |
| 14844 | + psubadds.sh pc,pc:b,pc:b |
| 14845 | + psubadds.sh r12,r12:t,r12:t |
| 14846 | + psubadds.sh r5,r5:t,r5:t |
| 14847 | + psubadds.sh r4,r4:b,r4:b |
| 14848 | + psubadds.sh lr,lr:t,lr:t |
| 14849 | + psubadds.sh pc,lr:b,r1:t |
| 14850 | + psubadds.sh r11,r3:b,r12:b |
| 14851 | + psubadds.sh r10,r2:t,r8:t |
| 14852 | + .text |
| 14853 | + .global paddsubs_uh |
| 14854 | +paddsubs_uh: |
| 14855 | + paddsubs.uh pc,pc:b,pc:b |
| 14856 | + paddsubs.uh r12,r12:t,r12:t |
| 14857 | + paddsubs.uh r5,r5:t,r5:t |
| 14858 | + paddsubs.uh r4,r4:b,r4:b |
| 14859 | + paddsubs.uh lr,lr:t,lr:t |
| 14860 | + paddsubs.uh r9,r2:b,r3:b |
| 14861 | + paddsubs.uh sp,sp:b,r7:t |
| 14862 | + paddsubs.uh lr,r0:b,r10:t |
| 14863 | + .text |
| 14864 | + .global psubadds_uh |
| 14865 | +psubadds_uh: |
| 14866 | + psubadds.uh pc,pc:b,pc:b |
| 14867 | + psubadds.uh r12,r12:t,r12:t |
| 14868 | + psubadds.uh r5,r5:t,r5:t |
| 14869 | + psubadds.uh r4,r4:b,r4:b |
| 14870 | + psubadds.uh lr,lr:t,lr:t |
| 14871 | + psubadds.uh r12,r9:t,pc:t |
| 14872 | + psubadds.uh r8,r6:b,r8:b |
| 14873 | + psubadds.uh r8,r8:b,r4:b |
| 14874 | + .text |
| 14875 | + .global paddsubh_sh |
| 14876 | +paddsubh_sh: |
| 14877 | + paddsubh.sh pc,pc:b,pc:b |
| 14878 | + paddsubh.sh r12,r12:t,r12:t |
| 14879 | + paddsubh.sh r5,r5:t,r5:t |
| 14880 | + paddsubh.sh r4,r4:b,r4:b |
| 14881 | + paddsubh.sh lr,lr:t,lr:t |
| 14882 | + paddsubh.sh r8,r9:t,r9:b |
| 14883 | + paddsubh.sh r0,sp:t,r1:t |
| 14884 | + paddsubh.sh r3,r1:b,r0:t |
| 14885 | + .text |
| 14886 | + .global psubaddh_sh |
| 14887 | +psubaddh_sh: |
| 14888 | + psubaddh.sh pc,pc:b,pc:b |
| 14889 | + psubaddh.sh r12,r12:t,r12:t |
| 14890 | + psubaddh.sh r5,r5:t,r5:t |
| 14891 | + psubaddh.sh r4,r4:b,r4:b |
| 14892 | + psubaddh.sh lr,lr:t,lr:t |
| 14893 | + psubaddh.sh r7,r3:t,r10:b |
| 14894 | + psubaddh.sh r7,r2:t,r1:t |
| 14895 | + psubaddh.sh r11,r3:b,r6:b |
| 14896 | + .text |
| 14897 | + .global padd_b |
| 14898 | +padd_b: |
| 14899 | + padd.b pc,pc,pc |
| 14900 | + padd.b r12,r12,r12 |
| 14901 | + padd.b r5,r5,r5 |
| 14902 | + padd.b r4,r4,r4 |
| 14903 | + padd.b lr,lr,lr |
| 14904 | + padd.b r2,r6,pc |
| 14905 | + padd.b r8,r9,r12 |
| 14906 | + padd.b r5,r12,r3 |
| 14907 | + .text |
| 14908 | + .global psub_b |
| 14909 | +psub_b: |
| 14910 | + psub.b pc,pc,pc |
| 14911 | + psub.b r12,r12,r12 |
| 14912 | + psub.b r5,r5,r5 |
| 14913 | + psub.b r4,r4,r4 |
| 14914 | + psub.b lr,lr,lr |
| 14915 | + psub.b r0,r12,pc |
| 14916 | + psub.b r7,sp,r10 |
| 14917 | + psub.b r5,sp,r12 |
| 14918 | + .text |
| 14919 | + .global padds_sb |
| 14920 | +padds_sb: |
| 14921 | + padds.sb pc,pc,pc |
| 14922 | + padds.sb r12,r12,r12 |
| 14923 | + padds.sb r5,r5,r5 |
| 14924 | + padds.sb r4,r4,r4 |
| 14925 | + padds.sb lr,lr,lr |
| 14926 | + padds.sb sp,r11,r4 |
| 14927 | + padds.sb r11,r10,r11 |
| 14928 | + padds.sb r5,r12,r6 |
| 14929 | + .text |
| 14930 | + .global psubs_sb |
| 14931 | +psubs_sb: |
| 14932 | + psubs.sb pc,pc,pc |
| 14933 | + psubs.sb r12,r12,r12 |
| 14934 | + psubs.sb r5,r5,r5 |
| 14935 | + psubs.sb r4,r4,r4 |
| 14936 | + psubs.sb lr,lr,lr |
| 14937 | + psubs.sb r7,r6,r8 |
| 14938 | + psubs.sb r12,r10,r9 |
| 14939 | + psubs.sb pc,r11,r0 |
| 14940 | + .text |
| 14941 | + .global padds_ub |
| 14942 | +padds_ub: |
| 14943 | + padds.ub pc,pc,pc |
| 14944 | + padds.ub r12,r12,r12 |
| 14945 | + padds.ub r5,r5,r5 |
| 14946 | + padds.ub r4,r4,r4 |
| 14947 | + padds.ub lr,lr,lr |
| 14948 | + padds.ub r3,r2,r11 |
| 14949 | + padds.ub r10,r8,r1 |
| 14950 | + padds.ub r11,r8,r10 |
| 14951 | + .text |
| 14952 | + .global psubs_ub |
| 14953 | +psubs_ub: |
| 14954 | + psubs.ub pc,pc,pc |
| 14955 | + psubs.ub r12,r12,r12 |
| 14956 | + psubs.ub r5,r5,r5 |
| 14957 | + psubs.ub r4,r4,r4 |
| 14958 | + psubs.ub lr,lr,lr |
| 14959 | + psubs.ub r0,r2,r7 |
| 14960 | + psubs.ub lr,r5,r3 |
| 14961 | + psubs.ub r6,r7,r9 |
| 14962 | + .text |
| 14963 | + .global paddh_ub |
| 14964 | +paddh_ub: |
| 14965 | + paddh.ub pc,pc,pc |
| 14966 | + paddh.ub r12,r12,r12 |
| 14967 | + paddh.ub r5,r5,r5 |
| 14968 | + paddh.ub r4,r4,r4 |
| 14969 | + paddh.ub lr,lr,lr |
| 14970 | + paddh.ub lr,r1,r0 |
| 14971 | + paddh.ub r2,r7,r7 |
| 14972 | + paddh.ub r2,r1,r2 |
| 14973 | + .text |
| 14974 | + .global psubh_ub |
| 14975 | +psubh_ub: |
| 14976 | + psubh.ub pc,pc,pc |
| 14977 | + psubh.ub r12,r12,r12 |
| 14978 | + psubh.ub r5,r5,r5 |
| 14979 | + psubh.ub r4,r4,r4 |
| 14980 | + psubh.ub lr,lr,lr |
| 14981 | + psubh.ub r0,r1,r6 |
| 14982 | + psubh.ub r4,lr,r10 |
| 14983 | + psubh.ub r9,r8,r1 |
| 14984 | + .text |
| 14985 | + .global pmax_ub |
| 14986 | +pmax_ub: |
| 14987 | + pmax.ub pc,pc,pc |
| 14988 | + pmax.ub r12,r12,r12 |
| 14989 | + pmax.ub r5,r5,r5 |
| 14990 | + pmax.ub r4,r4,r4 |
| 14991 | + pmax.ub lr,lr,lr |
| 14992 | + pmax.ub pc,r2,r11 |
| 14993 | + pmax.ub r12,r1,r1 |
| 14994 | + pmax.ub r5,r2,r0 |
| 14995 | + .text |
| 14996 | + .global pmax_sh |
| 14997 | +pmax_sh: |
| 14998 | + pmax.sh pc,pc,pc |
| 14999 | + pmax.sh r12,r12,r12 |
| 15000 | + pmax.sh r5,r5,r5 |
| 15001 | + pmax.sh r4,r4,r4 |
| 15002 | + pmax.sh lr,lr,lr |
| 15003 | + pmax.sh lr,r6,r12 |
| 15004 | + pmax.sh r2,pc,r5 |
| 15005 | + pmax.sh pc,r2,r7 |
| 15006 | + .text |
| 15007 | + .global pmin_ub |
| 15008 | +pmin_ub: |
| 15009 | + pmin.ub pc,pc,pc |
| 15010 | + pmin.ub r12,r12,r12 |
| 15011 | + pmin.ub r5,r5,r5 |
| 15012 | + pmin.ub r4,r4,r4 |
| 15013 | + pmin.ub lr,lr,lr |
| 15014 | + pmin.ub r8,r1,r5 |
| 15015 | + pmin.ub r1,r8,r3 |
| 15016 | + pmin.ub r0,r2,r7 |
| 15017 | + .text |
| 15018 | + .global pmin_sh |
| 15019 | +pmin_sh: |
| 15020 | + pmin.sh pc,pc,pc |
| 15021 | + pmin.sh r12,r12,r12 |
| 15022 | + pmin.sh r5,r5,r5 |
| 15023 | + pmin.sh r4,r4,r4 |
| 15024 | + pmin.sh lr,lr,lr |
| 15025 | + pmin.sh r8,r4,r10 |
| 15026 | + pmin.sh lr,r10,r12 |
| 15027 | + pmin.sh r2,r6,r2 |
| 15028 | + .text |
| 15029 | + .global pavg_ub |
| 15030 | +pavg_ub: |
| 15031 | + pavg.ub pc,pc,pc |
| 15032 | + pavg.ub r12,r12,r12 |
| 15033 | + pavg.ub r5,r5,r5 |
| 15034 | + pavg.ub r4,r4,r4 |
| 15035 | + pavg.ub lr,lr,lr |
| 15036 | + pavg.ub r0,r1,r6 |
| 15037 | + pavg.ub r8,r3,r6 |
| 15038 | + pavg.ub pc,r12,r10 |
| 15039 | + .text |
| 15040 | + .global pavg_sh |
| 15041 | +pavg_sh: |
| 15042 | + pavg.sh pc,pc,pc |
| 15043 | + pavg.sh r12,r12,r12 |
| 15044 | + pavg.sh r5,r5,r5 |
| 15045 | + pavg.sh r4,r4,r4 |
| 15046 | + pavg.sh lr,lr,lr |
| 15047 | + pavg.sh r9,pc,sp |
| 15048 | + pavg.sh pc,sp,r3 |
| 15049 | + pavg.sh r6,r1,r9 |
| 15050 | + .text |
| 15051 | + .global pabs_sb |
| 15052 | +pabs_sb: |
| 15053 | + pabs.sb pc,pc |
| 15054 | + pabs.sb r12,r12 |
| 15055 | + pabs.sb r5,r5 |
| 15056 | + pabs.sb r4,r4 |
| 15057 | + pabs.sb lr,lr |
| 15058 | + pabs.sb r11,r6 |
| 15059 | + pabs.sb lr,r9 |
| 15060 | + pabs.sb sp,r7 |
| 15061 | + .text |
| 15062 | + .global pabs_sh |
| 15063 | +pabs_sh: |
| 15064 | + pabs.sh pc,pc |
| 15065 | + pabs.sh r12,r12 |
| 15066 | + pabs.sh r5,r5 |
| 15067 | + pabs.sh r4,r4 |
| 15068 | + pabs.sh lr,lr |
| 15069 | + pabs.sh pc,r3 |
| 15070 | + pabs.sh r5,r7 |
| 15071 | + pabs.sh r4,r0 |
| 15072 | + .text |
| 15073 | + .global psad |
| 15074 | +psad: |
| 15075 | + psad pc,pc,pc |
| 15076 | + psad r12,r12,r12 |
| 15077 | + psad r5,r5,r5 |
| 15078 | + psad r4,r4,r4 |
| 15079 | + psad lr,lr,lr |
| 15080 | + psad r9,r11,r11 |
| 15081 | + psad lr,r4,sp |
| 15082 | + psad lr,r4,r5 |
| 15083 | + .text |
| 15084 | + .global pasr_b |
| 15085 | +pasr_b: |
| 15086 | + pasr.b pc,pc,0 |
| 15087 | + pasr.b r12,r12,7 |
| 15088 | + pasr.b r5,r5,4 |
| 15089 | + pasr.b r4,r4,3 |
| 15090 | + pasr.b lr,lr,1 |
| 15091 | + pasr.b pc,r7,1 |
| 15092 | + pasr.b sp,lr,6 |
| 15093 | + pasr.b sp,r3,2 |
| 15094 | + .text |
| 15095 | + .global plsl_b |
| 15096 | +plsl_b: |
| 15097 | + plsl.b pc,pc,0 |
| 15098 | + plsl.b r12,r12,7 |
| 15099 | + plsl.b r5,r5,4 |
| 15100 | + plsl.b r4,r4,3 |
| 15101 | + plsl.b lr,lr,1 |
| 15102 | + plsl.b r2,r11,4 |
| 15103 | + plsl.b r8,r5,7 |
| 15104 | + plsl.b pc,r0,2 |
| 15105 | + .text |
| 15106 | + .global plsr_b |
| 15107 | +plsr_b: |
| 15108 | + plsr.b pc,pc,0 |
| 15109 | + plsr.b r12,r12,7 |
| 15110 | + plsr.b r5,r5,4 |
| 15111 | + plsr.b r4,r4,3 |
| 15112 | + plsr.b lr,lr,1 |
| 15113 | + plsr.b r12,r1,2 |
| 15114 | + plsr.b r6,pc,7 |
| 15115 | + plsr.b r12,r11,2 |
| 15116 | + .text |
| 15117 | + .global pasr_h |
| 15118 | +pasr_h: |
| 15119 | + pasr.h pc,pc,0 |
| 15120 | + pasr.h r12,r12,15 |
| 15121 | + pasr.h r5,r5,8 |
| 15122 | + pasr.h r4,r4,7 |
| 15123 | + pasr.h lr,lr,1 |
| 15124 | + pasr.h r0,r11,10 |
| 15125 | + pasr.h r4,r6,8 |
| 15126 | + pasr.h r6,r2,4 |
| 15127 | + .text |
| 15128 | + .global plsl_h |
| 15129 | +plsl_h: |
| 15130 | + plsl.h pc,pc,0 |
| 15131 | + plsl.h r12,r12,15 |
| 15132 | + plsl.h r5,r5,8 |
| 15133 | + plsl.h r4,r4,7 |
| 15134 | + plsl.h lr,lr,1 |
| 15135 | + plsl.h r5,r10,9 |
| 15136 | + plsl.h sp,lr,8 |
| 15137 | + plsl.h r0,lr,7 |
| 15138 | + .text |
| 15139 | + .global plsr_h |
| 15140 | +plsr_h: |
| 15141 | + plsr.h pc,pc,0 |
| 15142 | + plsr.h r12,r12,15 |
| 15143 | + plsr.h r5,r5,8 |
| 15144 | + plsr.h r4,r4,7 |
| 15145 | + plsr.h lr,lr,1 |
| 15146 | + plsr.h r11,r0,15 |
| 15147 | + plsr.h lr,r3,3 |
| 15148 | + plsr.h r8,lr,10 |
| 15149 | + .text |
| 15150 | + .global packw_sh |
| 15151 | +packw_sh: |
| 15152 | + packw.sh pc,pc,pc |
| 15153 | + packw.sh r12,r12,r12 |
| 15154 | + packw.sh r5,r5,r5 |
| 15155 | + packw.sh r4,r4,r4 |
| 15156 | + packw.sh lr,lr,lr |
| 15157 | + packw.sh sp,r11,r10 |
| 15158 | + packw.sh r8,r2,r12 |
| 15159 | + packw.sh r8,r1,r5 |
| 15160 | + .text |
| 15161 | + .global punpckub_h |
| 15162 | +punpckub_h: |
| 15163 | + punpckub.h pc,pc:b |
| 15164 | + punpckub.h r12,r12:t |
| 15165 | + punpckub.h r5,r5:t |
| 15166 | + punpckub.h r4,r4:b |
| 15167 | + punpckub.h lr,lr:t |
| 15168 | + punpckub.h r6,r1:t |
| 15169 | + punpckub.h lr,r5:b |
| 15170 | + punpckub.h lr,r2:t |
| 15171 | + .text |
| 15172 | + .global punpcksb_h |
| 15173 | +punpcksb_h: |
| 15174 | + punpcksb.h pc,pc:b |
| 15175 | + punpcksb.h r12,r12:t |
| 15176 | + punpcksb.h r5,r5:t |
| 15177 | + punpcksb.h r4,r4:b |
| 15178 | + punpcksb.h lr,lr:t |
| 15179 | + punpcksb.h r4,r7:t |
| 15180 | + punpcksb.h r6,lr:b |
| 15181 | + punpcksb.h r12,r12:t |
| 15182 | + .text |
| 15183 | + .global packsh_ub |
| 15184 | +packsh_ub: |
| 15185 | + packsh.ub pc,pc,pc |
| 15186 | + packsh.ub r12,r12,r12 |
| 15187 | + packsh.ub r5,r5,r5 |
| 15188 | + packsh.ub r4,r4,r4 |
| 15189 | + packsh.ub lr,lr,lr |
| 15190 | + packsh.ub r3,r6,r3 |
| 15191 | + packsh.ub r8,r0,r3 |
| 15192 | + packsh.ub r9,r3,lr |
| 15193 | + .text |
| 15194 | + .global packsh_sb |
| 15195 | +packsh_sb: |
| 15196 | + packsh.sb pc,pc,pc |
| 15197 | + packsh.sb r12,r12,r12 |
| 15198 | + packsh.sb r5,r5,r5 |
| 15199 | + packsh.sb r4,r4,r4 |
| 15200 | + packsh.sb lr,lr,lr |
| 15201 | + packsh.sb r6,r8,r1 |
| 15202 | + packsh.sb lr,r9,r8 |
| 15203 | + packsh.sb sp,r6,r6 |
| 15204 | + .text |
| 15205 | + .global andl |
| 15206 | +andl: |
| 15207 | + andl pc,0 |
| 15208 | + andl r12,65535 |
| 15209 | + andl r5,32768 |
| 15210 | + andl r4,32767 |
| 15211 | + andl lr,1 |
| 15212 | + andl pc,23128 |
| 15213 | + andl r8,47262 |
| 15214 | + andl r7,13719 |
| 15215 | + .text |
| 15216 | + .global andl_coh |
| 15217 | +andl_coh: |
| 15218 | + andl pc,0,COH |
| 15219 | + andl r12,65535,COH |
| 15220 | + andl r5,32768,COH |
| 15221 | + andl r4,32767,COH |
| 15222 | + andl lr,1,COH |
| 15223 | + andl r6,22753,COH |
| 15224 | + andl r0,40653,COH |
| 15225 | + andl r4,48580,COH |
| 15226 | + .text |
| 15227 | + .global andh |
| 15228 | +andh: |
| 15229 | + andh pc,0 |
| 15230 | + andh r12,65535 |
| 15231 | + andh r5,32768 |
| 15232 | + andh r4,32767 |
| 15233 | + andh lr,1 |
| 15234 | + andh r12,52312 |
| 15235 | + andh r3,8675 |
| 15236 | + andh r2,42987 |
| 15237 | + .text |
| 15238 | + .global andh_coh |
| 15239 | +andh_coh: |
| 15240 | + andh pc,0,COH |
| 15241 | + andh r12,65535,COH |
| 15242 | + andh r5,32768,COH |
| 15243 | + andh r4,32767,COH |
| 15244 | + andh lr,1,COH |
| 15245 | + andh r11,34317,COH |
| 15246 | + andh r8,52982,COH |
| 15247 | + andh r10,23683,COH |
| 15248 | + .text |
| 15249 | + .global orl |
| 15250 | +orl: |
| 15251 | + orl pc,0 |
| 15252 | + orl r12,65535 |
| 15253 | + orl r5,32768 |
| 15254 | + orl r4,32767 |
| 15255 | + orl lr,1 |
| 15256 | + orl sp,16766 |
| 15257 | + orl r0,21181 |
| 15258 | + orl pc,44103 |
| 15259 | + .text |
| 15260 | + .global orh |
| 15261 | +orh: |
| 15262 | + orh pc,0 |
| 15263 | + orh r12,65535 |
| 15264 | + orh r5,32768 |
| 15265 | + orh r4,32767 |
| 15266 | + orh lr,1 |
| 15267 | + orh r8,28285 |
| 15268 | + orh r12,30492 |
| 15269 | + orh r1,59930 |
| 15270 | + .text |
| 15271 | + .global eorl |
| 15272 | +eorl: |
| 15273 | + eorl pc,0 |
| 15274 | + eorl r12,65535 |
| 15275 | + eorl r5,32768 |
| 15276 | + eorl r4,32767 |
| 15277 | + eorl lr,1 |
| 15278 | + eorl r4,51129 |
| 15279 | + eorl r6,64477 |
| 15280 | + eorl r1,20913 |
| 15281 | + .text |
| 15282 | + .global eorh |
| 15283 | +eorh: |
| 15284 | + eorh pc,0 |
| 15285 | + eorh r12,65535 |
| 15286 | + eorh r5,32768 |
| 15287 | + eorh r4,32767 |
| 15288 | + eorh lr,1 |
| 15289 | + eorh r0,11732 |
| 15290 | + eorh r10,38069 |
| 15291 | + eorh r9,57130 |
| 15292 | + .text |
| 15293 | + .global mcall |
| 15294 | +mcall: |
| 15295 | + mcall pc[0] |
| 15296 | + mcall r12[-4] |
| 15297 | + mcall r5[-131072] |
| 15298 | + mcall r4[131068] |
| 15299 | + mcall lr[4] |
| 15300 | + mcall sp[61180] |
| 15301 | + mcall r4[-35000] |
| 15302 | + mcall r0[9924] |
| 15303 | + .text |
| 15304 | + .global pref |
| 15305 | +pref: |
| 15306 | + pref pc[0] |
| 15307 | + pref r12[-1] |
| 15308 | + pref r5[-32768] |
| 15309 | + pref r4[32767] |
| 15310 | + pref lr[1] |
| 15311 | + pref r7[7748] |
| 15312 | + pref r7[-7699] |
| 15313 | + pref r2[-25892] |
| 15314 | + .text |
| 15315 | + .global cache |
| 15316 | +cache: |
| 15317 | + cache pc[0],0 |
| 15318 | + cache r12[-1],31 |
| 15319 | + cache r5[-1024],16 |
| 15320 | + cache r4[1023],15 |
| 15321 | + cache lr[1],1 |
| 15322 | + cache r3[-964],17 |
| 15323 | + cache r4[-375],22 |
| 15324 | + cache r3[-888],17 |
| 15325 | + .text |
| 15326 | + .global sub4 |
| 15327 | +sub4: |
| 15328 | + sub pc,0 |
| 15329 | + sub r12,-1 |
| 15330 | + sub r5,-1048576 |
| 15331 | + sub r4,1048575 |
| 15332 | + sub lr,1 |
| 15333 | + sub r2,-619156 |
| 15334 | + sub lr,461517 |
| 15335 | + sub r8,-185051 |
| 15336 | + .text |
| 15337 | + .global cp3 |
| 15338 | +cp3: |
| 15339 | + cp pc,0 |
| 15340 | + cp r12,-1 |
| 15341 | + cp r5,-1048576 |
| 15342 | + cp r4,1048575 |
| 15343 | + cp lr,1 |
| 15344 | + cp r1,124078 |
| 15345 | + cp r0,-378909 |
| 15346 | + cp r4,-243180 |
| 15347 | + .text |
| 15348 | + .global mov2 |
| 15349 | +mov2: |
| 15350 | + mov pc,0 |
| 15351 | + mov r12,-1 |
| 15352 | + mov r5,-1048576 |
| 15353 | + mov r4,1048575 |
| 15354 | + mov lr,1 |
| 15355 | + mov r5,-317021 |
| 15356 | + mov sp,-749164 |
| 15357 | + mov r5,940179 |
| 15358 | + .text |
| 15359 | + .global brc2 |
| 15360 | +brc2: |
| 15361 | + breq 0 |
| 15362 | + bral -2 |
| 15363 | + brls -2097152 |
| 15364 | + brpl 2097150 |
| 15365 | + brne 2 |
| 15366 | + brhi -1796966 |
| 15367 | + brqs 1321368 |
| 15368 | + brls -577434 |
| 15369 | + .text |
| 15370 | + .global rcall2 |
| 15371 | +rcall2: |
| 15372 | + rcall 0 |
| 15373 | + rcall -2 |
| 15374 | + rcall -2097152 |
| 15375 | + rcall 2097150 |
| 15376 | + rcall 2 |
| 15377 | + rcall 496820 |
| 15378 | + rcall 1085092 |
| 15379 | + rcall -1058 |
| 15380 | + .text |
| 15381 | + .global sub5 |
| 15382 | +sub5: |
| 15383 | + sub pc,pc,0 |
| 15384 | + sub r12,r12,-1 |
| 15385 | + sub r5,r5,-32768 |
| 15386 | + sub r4,r4,32767 |
| 15387 | + sub lr,lr,1 |
| 15388 | + sub pc,pc,-12744 |
| 15389 | + sub r7,r7,-27365 |
| 15390 | + sub r2,r9,-17358 |
| 15391 | + .text |
| 15392 | + .global satsub_w2 |
| 15393 | +satsub_w2: |
| 15394 | + satsub.w pc,pc,0 |
| 15395 | + satsub.w r12,r12,-1 |
| 15396 | + satsub.w r5,r5,-32768 |
| 15397 | + satsub.w r4,r4,32767 |
| 15398 | + satsub.w lr,lr,1 |
| 15399 | + satsub.w r2,lr,-2007 |
| 15400 | + satsub.w r7,r12,-784 |
| 15401 | + satsub.w r4,r7,23180 |
| 15402 | + .text |
| 15403 | + .global ld_d4 |
| 15404 | +ld_d4: |
| 15405 | + ld.d r0,pc[0] |
| 15406 | + ld.d r14,r12[-1] |
| 15407 | + ld.d r8,r5[-32768] |
| 15408 | + ld.d r6,r4[32767] |
| 15409 | + ld.d r2,lr[1] |
| 15410 | + ld.d r14,r11[14784] |
| 15411 | + ld.d r6,r9[-18905] |
| 15412 | + ld.d r2,r3[-6355] |
| 15413 | + .text |
| 15414 | + .global ld_w4 |
| 15415 | +ld_w4: |
| 15416 | + ld.w pc,pc[0] |
| 15417 | + ld.w r12,r12[-1] |
| 15418 | + ld.w r5,r5[-32768] |
| 15419 | + ld.w r4,r4[32767] |
| 15420 | + ld.w lr,lr[1] |
| 15421 | + ld.w r0,r12[-22133] |
| 15422 | + ld.w sp,pc[-20521] |
| 15423 | + /* ld.w r3,r5[29035] */ |
| 15424 | + nop |
| 15425 | + .text |
| 15426 | + .global ld_sh4 |
| 15427 | +ld_sh4: |
| 15428 | + ld.sh pc,pc[0] |
| 15429 | + ld.sh r12,r12[-1] |
| 15430 | + ld.sh r5,r5[-32768] |
| 15431 | + ld.sh r4,r4[32767] |
| 15432 | + ld.sh lr,lr[1] |
| 15433 | + ld.sh r6,r10[30930] |
| 15434 | + ld.sh r6,r10[21973] |
| 15435 | + /* ld.sh r11,r10[-2058] */ |
| 15436 | + nop |
| 15437 | + .text |
| 15438 | + .global ld_uh4 |
| 15439 | +ld_uh4: |
| 15440 | + ld.uh pc,pc[0] |
| 15441 | + ld.uh r12,r12[-1] |
| 15442 | + ld.uh r5,r5[-32768] |
| 15443 | + ld.uh r4,r4[32767] |
| 15444 | + ld.uh lr,lr[1] |
| 15445 | + ld.uh r1,r9[-13354] |
| 15446 | + ld.uh lr,r11[21337] |
| 15447 | + /* ld.uh r2,lr[-25370] */ |
| 15448 | + nop |
| 15449 | + .text |
| 15450 | + .global ld_sb1 |
| 15451 | +ld_sb1: |
| 15452 | + ld.sb pc,pc[0] |
| 15453 | + ld.sb r12,r12[-1] |
| 15454 | + ld.sb r5,r5[-32768] |
| 15455 | + ld.sb r4,r4[32767] |
| 15456 | + ld.sb lr,lr[1] |
| 15457 | + ld.sb r7,sp[-28663] |
| 15458 | + ld.sb r2,r1[-5879] |
| 15459 | + ld.sb r12,r3[18734] |
| 15460 | + .text |
| 15461 | + .global ld_ub4 |
| 15462 | +ld_ub4: |
| 15463 | + ld.ub pc,pc[0] |
| 15464 | + ld.ub r12,r12[-1] |
| 15465 | + ld.ub r5,r5[-32768] |
| 15466 | + ld.ub r4,r4[32767] |
| 15467 | + ld.ub lr,lr[1] |
| 15468 | + ld.ub pc,r4[8277] |
| 15469 | + ld.ub r5,r12[19172] |
| 15470 | + ld.ub r10,lr[26347] |
| 15471 | + .text |
| 15472 | + .global st_d4 |
| 15473 | +st_d4: |
| 15474 | + st.d pc[0],r0 |
| 15475 | + st.d r12[-1],r14 |
| 15476 | + st.d r5[-32768],r8 |
| 15477 | + st.d r4[32767],r6 |
| 15478 | + st.d lr[1],r2 |
| 15479 | + st.d r5[13200],r10 |
| 15480 | + st.d r5[9352],r10 |
| 15481 | + st.d r5[32373],r4 |
| 15482 | + .text |
| 15483 | + .global st_w4 |
| 15484 | +st_w4: |
| 15485 | + st.w pc[0],pc |
| 15486 | + st.w r12[-1],r12 |
| 15487 | + st.w r5[-32768],r5 |
| 15488 | + st.w r4[32767],r4 |
| 15489 | + st.w lr[1],lr |
| 15490 | + st.w sp[6136],r7 |
| 15491 | + st.w r6[27087],r12 |
| 15492 | + /* st.w r3[20143],r7 */ |
| 15493 | + nop |
| 15494 | + .text |
| 15495 | + .global st_h4 |
| 15496 | +st_h4: |
| 15497 | + st.h pc[0],pc |
| 15498 | + st.h r12[-1],r12 |
| 15499 | + st.h r5[-32768],r5 |
| 15500 | + st.h r4[32767],r4 |
| 15501 | + st.h lr[1],lr |
| 15502 | + st.h r4[-9962],r7 |
| 15503 | + st.h r9[-16250],r3 |
| 15504 | + /* st.h r8[-28810],r7 */ |
| 15505 | + nop |
| 15506 | + .text |
| 15507 | + .global st_b4 |
| 15508 | +st_b4: |
| 15509 | + st.b pc[0],pc |
| 15510 | + st.b r12[-1],r12 |
| 15511 | + st.b r5[-32768],r5 |
| 15512 | + st.b r4[32767],r4 |
| 15513 | + st.b lr[1],lr |
| 15514 | + st.b r12[30102],r6 |
| 15515 | + st.b r5[28977],r1 |
| 15516 | + st.b r0[5470],r1 |
| 15517 | + .text |
| 15518 | + .global mfsr |
| 15519 | +mfsr: |
| 15520 | + mfsr pc,0 |
| 15521 | + mfsr r12,1020 |
| 15522 | + mfsr r5,512 |
| 15523 | + mfsr r4,508 |
| 15524 | + mfsr lr,4 |
| 15525 | + mfsr r2,696 |
| 15526 | + mfsr r4,260 |
| 15527 | + mfsr r10,1016 |
| 15528 | + .text |
| 15529 | + .global mtsr |
| 15530 | +mtsr: |
| 15531 | + mtsr 0,pc |
| 15532 | + mtsr 1020,r12 |
| 15533 | + mtsr 512,r5 |
| 15534 | + mtsr 508,r4 |
| 15535 | + mtsr 4,lr |
| 15536 | + mtsr 224,r10 |
| 15537 | + mtsr 836,r12 |
| 15538 | + mtsr 304,r9 |
| 15539 | + .text |
| 15540 | + .global mfdr |
| 15541 | +mfdr: |
| 15542 | + mfdr pc,0 |
| 15543 | + mfdr r12,1020 |
| 15544 | + mfdr r5,512 |
| 15545 | + mfdr r4,508 |
| 15546 | + mfdr lr,4 |
| 15547 | + mfdr r6,932 |
| 15548 | + mfdr r5,36 |
| 15549 | + mfdr r9,300 |
| 15550 | + .text |
| 15551 | + .global mtdr |
| 15552 | +mtdr: |
| 15553 | + mtdr 0,pc |
| 15554 | + mtdr 1020,r12 |
| 15555 | + mtdr 512,r5 |
| 15556 | + mtdr 508,r4 |
| 15557 | + mtdr 4,lr |
| 15558 | + mtdr 180,r8 |
| 15559 | + mtdr 720,r10 |
| 15560 | + mtdr 408,lr |
| 15561 | + .text |
| 15562 | + .global sleep |
| 15563 | +sleep: |
| 15564 | + sleep 0 |
| 15565 | + sleep 255 |
| 15566 | + sleep 128 |
| 15567 | + sleep 127 |
| 15568 | + sleep 1 |
| 15569 | + sleep 254 |
| 15570 | + sleep 15 |
| 15571 | + sleep 43 |
| 15572 | + .text |
| 15573 | + .global sync |
| 15574 | +sync: |
| 15575 | + sync 0 |
| 15576 | + sync 255 |
| 15577 | + sync 128 |
| 15578 | + sync 127 |
| 15579 | + sync 1 |
| 15580 | + sync 166 |
| 15581 | + sync 230 |
| 15582 | + sync 180 |
| 15583 | + .text |
| 15584 | + .global bld |
| 15585 | +bld: |
| 15586 | + bld pc,0 |
| 15587 | + bld r12,31 |
| 15588 | + bld r5,16 |
| 15589 | + bld r4,15 |
| 15590 | + bld lr,1 |
| 15591 | + bld r9,15 |
| 15592 | + bld r0,4 |
| 15593 | + bld lr,26 |
| 15594 | + .text |
| 15595 | + .global bst |
| 15596 | +bst: |
| 15597 | + bst pc,0 |
| 15598 | + bst r12,31 |
| 15599 | + bst r5,16 |
| 15600 | + bst r4,15 |
| 15601 | + bst lr,1 |
| 15602 | + bst r10,28 |
| 15603 | + bst r0,3 |
| 15604 | + bst sp,2 |
| 15605 | + .text |
| 15606 | + .global sats |
| 15607 | +sats: |
| 15608 | + sats pc>>0,0 |
| 15609 | + sats r12>>31,31 |
| 15610 | + sats r5>>16,16 |
| 15611 | + sats r4>>15,15 |
| 15612 | + sats lr>>1,1 |
| 15613 | + sats r10>>3,19 |
| 15614 | + sats r10>>2,26 |
| 15615 | + sats r1>>20,1 |
| 15616 | + .text |
| 15617 | + .global satu |
| 15618 | +satu: |
| 15619 | + satu pc>>0,0 |
| 15620 | + satu r12>>31,31 |
| 15621 | + satu r5>>16,16 |
| 15622 | + satu r4>>15,15 |
| 15623 | + satu lr>>1,1 |
| 15624 | + satu pc>>5,7 |
| 15625 | + satu r7>>5,5 |
| 15626 | + satu r2>>26,19 |
| 15627 | + .text |
| 15628 | + .global satrnds |
| 15629 | +satrnds: |
| 15630 | + satrnds pc>>0,0 |
| 15631 | + satrnds r12>>31,31 |
| 15632 | + satrnds r5>>16,16 |
| 15633 | + satrnds r4>>15,15 |
| 15634 | + satrnds lr>>1,1 |
| 15635 | + satrnds r0>>21,19 |
| 15636 | + satrnds sp>>0,2 |
| 15637 | + satrnds r7>>6,29 |
| 15638 | + .text |
| 15639 | + .global satrndu |
| 15640 | +satrndu: |
| 15641 | + satrndu pc>>0,0 |
| 15642 | + satrndu r12>>31,31 |
| 15643 | + satrndu r5>>16,16 |
| 15644 | + satrndu r4>>15,15 |
| 15645 | + satrndu lr>>1,1 |
| 15646 | + satrndu r12>>0,26 |
| 15647 | + satrndu r4>>21,3 |
| 15648 | + satrndu r10>>3,16 |
| 15649 | + .text |
| 15650 | + .global subfc |
| 15651 | +subfc: |
| 15652 | + subfeq pc,0 |
| 15653 | + subfal r12,-1 |
| 15654 | + subfls r5,-128 |
| 15655 | + subfpl r4,127 |
| 15656 | + subfne lr,1 |
| 15657 | + subfls r10,8 |
| 15658 | + subfvc r11,99 |
| 15659 | + subfvs r2,73 |
| 15660 | + .text |
| 15661 | + .global subc |
| 15662 | +subc: |
| 15663 | + subeq pc,0 |
| 15664 | + subal r12,-1 |
| 15665 | + subls r5,-128 |
| 15666 | + subpl r4,127 |
| 15667 | + subne lr,1 |
| 15668 | + subls r12,118 |
| 15669 | + subvc lr,-12 |
| 15670 | + submi r4,-13 |
| 15671 | + .text |
| 15672 | + .global movc2 |
| 15673 | +movc2: |
| 15674 | + moveq pc,0 |
| 15675 | + moval r12,-1 |
| 15676 | + movls r5,-128 |
| 15677 | + movpl r4,127 |
| 15678 | + movne lr,1 |
| 15679 | + movlt r3,-122 |
| 15680 | + movvc r8,2 |
| 15681 | + movne r7,-111 |
| 15682 | + .text |
| 15683 | + .global cp_b |
| 15684 | +cp_b: |
| 15685 | + cp.b pc,r0 |
| 15686 | + cp.b r0,pc |
| 15687 | + cp.b r7,r8 |
| 15688 | + cp.b r8,r7 |
| 15689 | + .text |
| 15690 | + .global cp_h |
| 15691 | +cp_h: |
| 15692 | + cp.h pc,r0 |
| 15693 | + cp.h r0,pc |
| 15694 | + cp.h r7,r8 |
| 15695 | + cp.h r8,r7 |
| 15696 | + .text |
| 15697 | + .global ldm |
| 15698 | +ldm: |
| 15699 | + ldm pc,r1-r6 |
| 15700 | + ldm r12,r0-r15 |
| 15701 | + ldm r5,r15 |
| 15702 | + ldm r4,r0-r14 |
| 15703 | + ldm lr,r0 |
| 15704 | + ldm r9,r1,r5,r14 |
| 15705 | + ldm r11,r2-r3,r5-r8,r15 |
| 15706 | + ldm r6,r0,r3,r9,r13,r15 |
| 15707 | + .text |
| 15708 | + .global ldm_pu |
| 15709 | +ldm_pu: |
| 15710 | + ldm pc++,r6-r9 |
| 15711 | + ldm r12++,r0-r15 |
| 15712 | + ldm r5++,r15 |
| 15713 | + ldm r4++,r0-r14 |
| 15714 | + ldm lr++,r0 |
| 15715 | + ldm r12++,r3-r5,r8,r10,r12,r14-r15 |
| 15716 | + ldm r10++,r2,r4-r6,r14-r15 |
| 15717 | + ldm r6++,r1,r3-r4,r9-r14 |
| 15718 | + .text |
| 15719 | + .global ldmts |
| 15720 | +ldmts: |
| 15721 | + ldmts pc,r7-r8 |
| 15722 | + ldmts r12,r0-r15 |
| 15723 | + ldmts r5,r15 |
| 15724 | + ldmts r4,r0-r14 |
| 15725 | + ldmts lr,r0 |
| 15726 | + ldmts r0,r1-r2,r11-r12 |
| 15727 | + ldmts lr,r0-r2,r4,r7-r8,r13-r14 |
| 15728 | + ldmts r12,r0-r1,r3-r5,r9,r14-r15 |
| 15729 | + .text |
| 15730 | + .global ldmts_pu |
| 15731 | +ldmts_pu: |
| 15732 | + ldmts pc++,r9 |
| 15733 | + ldmts r12++,r0-r15 |
| 15734 | + ldmts r5++,r15 |
| 15735 | + ldmts r4++,r0-r14 |
| 15736 | + ldmts lr++,r0 |
| 15737 | + ldmts sp++,r0,r2-r5,r7,r9,r11 |
| 15738 | + ldmts r5++,r1-r3,r7,r10-r11 |
| 15739 | + ldmts r8++,r2-r4,r7-r8,r13,r15 |
| 15740 | + .text |
| 15741 | + .global stm |
| 15742 | +stm: |
| 15743 | + stm pc,r7 |
| 15744 | + stm r12,r0-r15 |
| 15745 | + stm r5,r15 |
| 15746 | + stm r4,r0-r14 |
| 15747 | + stm lr,r0 |
| 15748 | + stm sp,r2-r3,r5,r8,r11,r14 |
| 15749 | + stm r4,r0-r4,r6,r10-r11,r14 |
| 15750 | + stm r9,r1,r5,r9,r12-r15 |
| 15751 | + .text |
| 15752 | + .global stm_pu |
| 15753 | +stm_pu: |
| 15754 | + stm --pc,r4-r6 |
| 15755 | + stm --r12,r0-r15 |
| 15756 | + stm --r5,r15 |
| 15757 | + stm --r4,r0-r14 |
| 15758 | + stm --lr,r0 |
| 15759 | + stm --r11,r0,r4-r9,r11-r15 |
| 15760 | + stm --r11,r0,r3,r9-r10,r12,r14 |
| 15761 | + stm --r6,r2,r8-r9,r13-r14 |
| 15762 | + .text |
| 15763 | + .global stmts |
| 15764 | +stmts: |
| 15765 | + stmts pc,r8 |
| 15766 | + stmts r12,r0-r15 |
| 15767 | + stmts r5,r15 |
| 15768 | + stmts r4,r0-r14 |
| 15769 | + stmts lr,r0 |
| 15770 | + stmts r1,r0-r1,r3-r4,r6,r9-r10,r14-r15 |
| 15771 | + stmts r3,r0,r6-r8,r10-r12 |
| 15772 | + stmts r11,r0,r4,r6-r7,r9-r10,r12,r14-r15 |
| 15773 | + .text |
| 15774 | + .global stmts_pu |
| 15775 | +stmts_pu: |
| 15776 | + stmts --pc,r6-r8 |
| 15777 | + stmts --r12,r0-r15 |
| 15778 | + stmts --r5,r15 |
| 15779 | + stmts --r4,r0-r14 |
| 15780 | + stmts --lr,r0 |
| 15781 | + stmts --r2,r0,r3-r4,r9-r10,r12-r13 |
| 15782 | + stmts --r3,r0-r1,r14-r15 |
| 15783 | + stmts --r0,r0,r2-r6,r10,r14 |
| 15784 | + .text |
| 15785 | + .global ldins_h |
| 15786 | +ldins_h: |
| 15787 | + ldins.h pc:b,pc[0] |
| 15788 | + ldins.h r12:t,r12[-2] |
| 15789 | + ldins.h r5:t,r5[-4096] |
| 15790 | + ldins.h r4:b,r4[4094] |
| 15791 | + ldins.h lr:t,lr[2] |
| 15792 | + ldins.h r0:t,lr[1930] |
| 15793 | + ldins.h r3:b,r7[-534] |
| 15794 | + ldins.h r2:b,r12[-2252] |
| 15795 | + .text |
| 15796 | + .global ldins_b |
| 15797 | +ldins_b: |
| 15798 | + ldins.b pc:b,pc[0] |
| 15799 | + ldins.b r12:t,r12[-1] |
| 15800 | + ldins.b r5:u,r5[-2048] |
| 15801 | + ldins.b r4:l,r4[2047] |
| 15802 | + ldins.b lr:l,lr[1] |
| 15803 | + ldins.b r6:t,r4[-662] |
| 15804 | + ldins.b r5:b,r1[-151] |
| 15805 | + ldins.b r10:t,r11[-1923] |
| 15806 | + .text |
| 15807 | + .global ldswp_sh |
| 15808 | +ldswp_sh: |
| 15809 | + ldswp.sh pc,pc[0] |
| 15810 | + ldswp.sh r12,r12[-2] |
| 15811 | + ldswp.sh r5,r5[-4096] |
| 15812 | + ldswp.sh r4,r4[4094] |
| 15813 | + ldswp.sh lr,lr[2] |
| 15814 | + ldswp.sh r9,r10[3848] |
| 15815 | + ldswp.sh r4,r12[-2040] |
| 15816 | + ldswp.sh r10,r2[3088] |
| 15817 | + .text |
| 15818 | + .global ldswp_uh |
| 15819 | +ldswp_uh: |
| 15820 | + ldswp.uh pc,pc[0] |
| 15821 | + ldswp.uh r12,r12[-2] |
| 15822 | + ldswp.uh r5,r5[-4096] |
| 15823 | + ldswp.uh r4,r4[4094] |
| 15824 | + ldswp.uh lr,lr[2] |
| 15825 | + ldswp.uh r4,r9[3724] |
| 15826 | + ldswp.uh lr,sp[-1672] |
| 15827 | + ldswp.uh r8,r12[-3846] |
| 15828 | + .text |
| 15829 | + .global ldswp_w |
| 15830 | +ldswp_w: |
| 15831 | + ldswp.w pc,pc[0] |
| 15832 | + ldswp.w r12,r12[-4] |
| 15833 | + ldswp.w r5,r5[-8192] |
| 15834 | + ldswp.w r4,r4[8188] |
| 15835 | + ldswp.w lr,lr[4] |
| 15836 | + ldswp.w sp,r7[1860] |
| 15837 | + ldswp.w pc,r5[-3324] |
| 15838 | + ldswp.w r12,r10[-3296] |
| 15839 | + .text |
| 15840 | + .global stswp_h |
| 15841 | +stswp_h: |
| 15842 | + stswp.h pc[0],pc |
| 15843 | + stswp.h r12[-2],r12 |
| 15844 | + stswp.h r5[-4096],r5 |
| 15845 | + stswp.h r4[4094],r4 |
| 15846 | + stswp.h lr[2],lr |
| 15847 | + stswp.h r7[64],r10 |
| 15848 | + stswp.h r10[3024],r2 |
| 15849 | + stswp.h r0[-2328],r10 |
| 15850 | + .text |
| 15851 | + .global stswp_w |
| 15852 | +stswp_w: |
| 15853 | + stswp.w pc[0],pc |
| 15854 | + stswp.w r12[-4],r12 |
| 15855 | + stswp.w r5[-8192],r5 |
| 15856 | + stswp.w r4[8188],r4 |
| 15857 | + stswp.w lr[4],lr |
| 15858 | + stswp.w pc[1156],r8 |
| 15859 | + stswp.w sp[7992],r10 |
| 15860 | + stswp.w r8[-1172],r5 |
| 15861 | + .text |
| 15862 | + .global and2 |
| 15863 | +and2: |
| 15864 | + and pc,pc,pc<<0 |
| 15865 | + and r12,r12,r12<<31 |
| 15866 | + and r5,r5,r5<<16 |
| 15867 | + and r4,r4,r4<<15 |
| 15868 | + and lr,lr,lr<<1 |
| 15869 | + and r10,r2,r1<<1 |
| 15870 | + and r12,r8,r11<<27 |
| 15871 | + and r10,r7,r0<<3 |
| 15872 | + .text |
| 15873 | + .global and3 |
| 15874 | +and3: |
| 15875 | + and pc,pc,pc>>0 |
| 15876 | + and r12,r12,r12>>31 |
| 15877 | + and r5,r5,r5>>16 |
| 15878 | + and r4,r4,r4>>15 |
| 15879 | + and lr,lr,lr>>1 |
| 15880 | + and r12,r8,r7>>17 |
| 15881 | + and pc,r4,r9>>20 |
| 15882 | + and r10,r9,r10>>12 |
| 15883 | + .text |
| 15884 | + .global or2 |
| 15885 | +or2: |
| 15886 | + or pc,pc,pc<<0 |
| 15887 | + or r12,r12,r12<<31 |
| 15888 | + or r5,r5,r5<<16 |
| 15889 | + or r4,r4,r4<<15 |
| 15890 | + or lr,lr,lr<<1 |
| 15891 | + or r8,sp,r11<<29 |
| 15892 | + or pc,r9,r2<<28 |
| 15893 | + or r5,r1,r2<<3 |
| 15894 | + .text |
| 15895 | + .global or3 |
| 15896 | +or3: |
| 15897 | + or pc,pc,pc>>0 |
| 15898 | + or r12,r12,r12>>31 |
| 15899 | + or r5,r5,r5>>16 |
| 15900 | + or r4,r4,r4>>15 |
| 15901 | + or lr,lr,lr>>1 |
| 15902 | + or r1,sp,sp>>2 |
| 15903 | + or r0,r1,r1>>29 |
| 15904 | + or r4,r12,r8>>8 |
| 15905 | + .text |
| 15906 | + .global eor2 |
| 15907 | +eor2: |
| 15908 | + eor pc,pc,pc<<0 |
| 15909 | + eor r12,r12,r12<<31 |
| 15910 | + eor r5,r5,r5<<16 |
| 15911 | + eor r4,r4,r4<<15 |
| 15912 | + eor lr,lr,lr<<1 |
| 15913 | + eor r10,r9,r4<<11 |
| 15914 | + eor r4,r0,r1<<31 |
| 15915 | + eor r6,r2,r12<<13 |
| 15916 | + .text |
| 15917 | + .global eor3 |
| 15918 | +eor3: |
| 15919 | + eor pc,pc,pc>>0 |
| 15920 | + eor r12,r12,r12>>31 |
| 15921 | + eor r5,r5,r5>>16 |
| 15922 | + eor r4,r4,r4>>15 |
| 15923 | + eor lr,lr,lr>>1 |
| 15924 | + eor r5,r5,r5>>22 |
| 15925 | + eor r10,r1,lr>>3 |
| 15926 | + eor r7,lr,sp>>26 |
| 15927 | + .text |
| 15928 | + .global sthh_w2 |
| 15929 | +sthh_w2: |
| 15930 | + sthh.w pc[pc<<0],pc:b,pc:b |
| 15931 | + sthh.w r12[r12<<3],r12:t,r12:t |
| 15932 | + sthh.w r5[r5<<2],r5:t,r5:t |
| 15933 | + sthh.w r4[r4<<1],r4:b,r4:b |
| 15934 | + sthh.w lr[lr<<1],lr:t,lr:t |
| 15935 | + sthh.w sp[r6<<3],r1:t,r12:t |
| 15936 | + sthh.w r6[r6<<0],r9:t,r9:t |
| 15937 | + sthh.w r10[r3<<0],r0:b,r11:t |
| 15938 | + .text |
| 15939 | + .global sthh_w1 |
| 15940 | +sthh_w1: |
| 15941 | + sthh.w pc[0],pc:b,pc:b |
| 15942 | + sthh.w r12[1020],r12:t,r12:t |
| 15943 | + sthh.w r5[512],r5:t,r5:t |
| 15944 | + sthh.w r4[508],r4:b,r4:b |
| 15945 | + sthh.w lr[4],lr:t,lr:t |
| 15946 | + sthh.w r4[404],r9:t,r0:b |
| 15947 | + sthh.w r8[348],r2:t,r10:b |
| 15948 | + sthh.w sp[172],r9:b,r2:b |
| 15949 | + .text |
| 15950 | + .global cop |
| 15951 | +cop: |
| 15952 | + cop cp0,cr0,cr0,cr0,0 |
| 15953 | + cop cp7,cr15,cr15,cr15,0x7f |
| 15954 | + cop cp3,cr5,cr5,cr5,0x31 |
| 15955 | + cop cp2,cr4,cr4,cr4,0x30 |
| 15956 | + cop cp5,cr8,cr3,cr7,0x5a |
| 15957 | + .text |
| 15958 | + .global ldc_w1 |
| 15959 | +ldc_w1: |
| 15960 | + ldc.w cp0,cr0,r0[0] |
| 15961 | + ldc.w cp7,cr15,pc[255<<2] |
| 15962 | + ldc.w cp3,cr5,r5[128<<2] |
| 15963 | + ldc.w cp2,cr4,r4[127<<2] |
| 15964 | + ldc.w cp4,cr9,r13[36<<2] |
| 15965 | + .text |
| 15966 | + .global ldc_w2 |
| 15967 | +ldc_w2: |
| 15968 | + ldc.w cp0,cr0,--r0 |
| 15969 | + ldc.w cp7,cr15,--pc |
| 15970 | + ldc.w cp3,cr5,--r5 |
| 15971 | + ldc.w cp2,cr4,--r4 |
| 15972 | + ldc.w cp4,cr9,--r13 |
| 15973 | + .text |
| 15974 | + .global ldc_w3 |
| 15975 | +ldc_w3: |
| 15976 | + ldc.w cp0,cr0,r0[r0] |
| 15977 | + ldc.w cp7,cr15,pc[pc<<3] |
| 15978 | + ldc.w cp3,cr5,r5[r4<<2] |
| 15979 | + ldc.w cp2,cr4,r4[r3<<1] |
| 15980 | + ldc.w cp4,cr9,r13[r12<<0] |
| 15981 | + .text |
| 15982 | + .global ldc_d1 |
| 15983 | +ldc_d1: |
| 15984 | + ldc.d cp0,cr0,r0[0] |
| 15985 | + ldc.d cp7,cr14,pc[255<<2] |
| 15986 | + ldc.d cp3,cr6,r5[128<<2] |
| 15987 | + ldc.d cp2,cr4,r4[127<<2] |
| 15988 | + ldc.d cp4,cr8,r13[36<<2] |
| 15989 | + .text |
| 15990 | + .global ldc_d2 |
| 15991 | +ldc_d2: |
| 15992 | + ldc.d cp0,cr0,--r0 |
| 15993 | + ldc.d cp7,cr14,--pc |
| 15994 | + ldc.d cp3,cr6,--r5 |
| 15995 | + ldc.d cp2,cr4,--r4 |
| 15996 | + ldc.d cp4,cr8,--r13 |
| 15997 | + .text |
| 15998 | + .global ldc_d3 |
| 15999 | +ldc_d3: |
| 16000 | + ldc.d cp0,cr0,r0[r0] |
| 16001 | + ldc.d cp7,cr14,pc[pc<<3] |
| 16002 | + ldc.d cp3,cr6,r5[r4<<2] |
| 16003 | + ldc.d cp2,cr4,r4[r3<<1] |
| 16004 | + ldc.d cp4,cr8,r13[r12<<0] |
| 16005 | + .text |
| 16006 | + .global stc_w1 |
| 16007 | +stc_w1: |
| 16008 | + stc.w cp0,r0[0],cr0 |
| 16009 | + stc.w cp7,pc[255<<2],cr15 |
| 16010 | + stc.w cp3,r5[128<<2],cr5 |
| 16011 | + stc.w cp2,r4[127<<2],cr4 |
| 16012 | + stc.w cp4,r13[36<<2],cr9 |
| 16013 | + .text |
| 16014 | + .global stc_w2 |
| 16015 | +stc_w2: |
| 16016 | + stc.w cp0,r0++,cr0 |
| 16017 | + stc.w cp7,pc++,cr15 |
| 16018 | + stc.w cp3,r5++,cr5 |
| 16019 | + stc.w cp2,r4++,cr4 |
| 16020 | + stc.w cp4,r13++,cr9 |
| 16021 | + .text |
| 16022 | + .global stc_w3 |
| 16023 | +stc_w3: |
| 16024 | + stc.w cp0,r0[r0],cr0 |
| 16025 | + stc.w cp7,pc[pc<<3],cr15 |
| 16026 | + stc.w cp3,r5[r4<<2],cr5 |
| 16027 | + stc.w cp2,r4[r3<<1],cr4 |
| 16028 | + stc.w cp4,r13[r12<<0],cr9 |
| 16029 | + .text |
| 16030 | + .global stc_d1 |
| 16031 | +stc_d1: |
| 16032 | + stc.d cp0,r0[0],cr0 |
| 16033 | + stc.d cp7,pc[255<<2],cr14 |
| 16034 | + stc.d cp3,r5[128<<2],cr6 |
| 16035 | + stc.d cp2,r4[127<<2],cr4 |
| 16036 | + stc.d cp4,r13[36<<2],cr8 |
| 16037 | + .text |
| 16038 | + .global stc_d2 |
| 16039 | +stc_d2: |
| 16040 | + stc.d cp0,r0++,cr0 |
| 16041 | + stc.d cp7,pc++,cr14 |
| 16042 | + stc.d cp3,r5++,cr6 |
| 16043 | + stc.d cp2,r4++,cr4 |
| 16044 | + stc.d cp4,r13++,cr8 |
| 16045 | + .text |
| 16046 | + .global stc_d3 |
| 16047 | +stc_d3: |
| 16048 | + stc.d cp0,r0[r0],cr0 |
| 16049 | + stc.d cp7,pc[pc<<3],cr14 |
| 16050 | + stc.d cp3,r5[r4<<2],cr6 |
| 16051 | + stc.d cp2,r4[r3<<1],cr4 |
| 16052 | + stc.d cp4,r13[r12<<0],cr8 |
| 16053 | + .text |
| 16054 | + .global ldc0_w |
| 16055 | +ldc0_w: |
| 16056 | + ldc0.w cr0,r0[0] |
| 16057 | + ldc0.w cr15,pc[4095<<2] |
| 16058 | + ldc0.w cr5,r5[2048<<2] |
| 16059 | + ldc0.w cr4,r4[2047<<2] |
| 16060 | + ldc0.w cr9,r13[147<<2] |
| 16061 | + .text |
| 16062 | + .global ldc0_d |
| 16063 | +ldc0_d: |
| 16064 | + ldc0.d cr0,r0[0] |
| 16065 | + ldc0.d cr14,pc[4095<<2] |
| 16066 | + ldc0.d cr6,r5[2048<<2] |
| 16067 | + ldc0.d cr4,r4[2047<<2] |
| 16068 | + ldc0.d cr8,r13[147<<2] |
| 16069 | + .text |
| 16070 | + .global stc0_w |
| 16071 | +stc0_w: |
| 16072 | + stc0.w r0[0],cr0 |
| 16073 | + stc0.w pc[4095<<2],cr15 |
| 16074 | + stc0.w r5[2048<<2],cr5 |
| 16075 | + stc0.w r4[2047<<2],cr4 |
| 16076 | + stc0.w r13[147<<2],cr9 |
| 16077 | + .text |
| 16078 | + .global stc0_d |
| 16079 | +stc0_d: |
| 16080 | + stc0.d r0[0],cr0 |
| 16081 | + stc0.d pc[4095<<2],cr14 |
| 16082 | + stc0.d r5[2048<<2],cr6 |
| 16083 | + stc0.d r4[2047<<2],cr4 |
| 16084 | + stc0.d r13[147<<2],cr8 |
| 16085 | + .text |
| 16086 | + .global memc |
| 16087 | +memc: |
| 16088 | + memc 0, 0 |
| 16089 | + memc -4, 31 |
| 16090 | + memc -65536, 16 |
| 16091 | + memc 65532, 15 |
| 16092 | + .text |
| 16093 | + .global mems |
| 16094 | +mems: |
| 16095 | + mems 0, 0 |
| 16096 | + mems -4, 31 |
| 16097 | + mems -65536, 16 |
| 16098 | + mems 65532, 15 |
| 16099 | + .text |
| 16100 | + .global memt |
| 16101 | +memt: |
| 16102 | + memt 0, 0 |
| 16103 | + memt -4, 31 |
| 16104 | + memt -65536, 16 |
| 16105 | + memt 65532, 15 |
| 16106 | + |
| 16107 | + .text |
| 16108 | + .global stcond |
| 16109 | +stcond: |
| 16110 | + stcond r0[0], r0 |
| 16111 | + stcond pc[-1], pc |
| 16112 | + stcond r8[-32768], r7 |
| 16113 | + stcond r7[32767], r8 |
| 16114 | + stcond r5[0x1234], r10 |
| 16115 | + |
| 16116 | +ldcm_w: |
| 16117 | + ldcm.w cp0,pc,cr0-cr7 |
| 16118 | + ldcm.w cp7,r0,cr0 |
| 16119 | + ldcm.w cp4,r4++,cr0-cr6 |
| 16120 | + ldcm.w cp3,r7,cr7 |
| 16121 | + ldcm.w cp1,r12++,cr1,cr4-cr6 |
| 16122 | + ldcm.w cp0,pc,cr8-cr15 |
| 16123 | + ldcm.w cp7,r0,cr8 |
| 16124 | + ldcm.w cp4,r4++,cr8-cr14 |
| 16125 | + ldcm.w cp3,r7,cr15 |
| 16126 | + ldcm.w cp1,r12++,cr9,cr12-cr14 |
| 16127 | + |
| 16128 | +ldcm_d: |
| 16129 | + ldcm.d cp0,pc,cr0-cr15 |
| 16130 | + ldcm.d cp7,r0,cr0,cr1 |
| 16131 | + ldcm.d cp4,r4++,cr0-cr13 |
| 16132 | + ldcm.d cp3,r7,cr14-cr15 |
| 16133 | + ldcm.d cp2,r12++,cr0-cr3,cr8-cr9,cr14-cr15 |
| 16134 | + |
| 16135 | +stcm_w: |
| 16136 | + stcm.w cp0,pc,cr0-cr7 |
| 16137 | + stcm.w cp7,r0,cr0 |
| 16138 | + stcm.w cp4,--r4,cr0-cr6 |
| 16139 | + stcm.w cp3,r7,cr7 |
| 16140 | + stcm.w cp1,--r12,cr1,cr4-cr6 |
| 16141 | + stcm.w cp0,pc,cr8-cr15 |
| 16142 | + stcm.w cp7,r0,cr8 |
| 16143 | + stcm.w cp4,--r4,cr8-cr14 |
| 16144 | + stcm.w cp3,r7,cr15 |
| 16145 | + stcm.w cp1,--r12,cr9,cr12-cr14 |
| 16146 | + |
| 16147 | +stcm_d: |
| 16148 | + stcm.d cp0,pc,cr0-cr15 |
| 16149 | + stcm.d cp7,r0,cr0,cr1 |
| 16150 | + stcm.d cp4,--r4,cr0-cr13 |
| 16151 | + stcm.d cp3,r7,cr14-cr15 |
| 16152 | + stcm.d cp2,--r12,cr0-cr3,cr8-cr9,cr14-cr15 |
| 16153 | + |
| 16154 | +mvcr_w: |
| 16155 | + mvcr.w cp7,pc,cr15 |
| 16156 | + mvcr.w cp0,r0,cr0 |
| 16157 | + mvcr.w cp0,pc,cr15 |
| 16158 | + mvcr.w cp7,r0,cr15 |
| 16159 | + mvcr.w cp7,pc,cr0 |
| 16160 | + mvcr.w cp4,r7,cr8 |
| 16161 | + mvcr.w cp3,r8,cr7 |
| 16162 | + |
| 16163 | +mvcr_d: |
| 16164 | + mvcr.d cp7,lr,cr14 |
| 16165 | + mvcr.d cp0,r0,cr0 |
| 16166 | + mvcr.d cp0,lr,cr14 |
| 16167 | + mvcr.d cp7,r0,cr14 |
| 16168 | + mvcr.d cp7,lr,cr0 |
| 16169 | + mvcr.d cp4,r6,cr8 |
| 16170 | + mvcr.d cp3,r8,cr6 |
| 16171 | + |
| 16172 | +mvrc_w: |
| 16173 | + mvrc.w cp7,cr15,pc |
| 16174 | + mvrc.w cp0,cr0,r0 |
| 16175 | + mvrc.w cp0,cr15,pc |
| 16176 | + mvrc.w cp7,cr15,r0 |
| 16177 | + mvrc.w cp7,cr0,pc |
| 16178 | + mvrc.w cp4,cr8,r7 |
| 16179 | + mvrc.w cp3,cr7,r8 |
| 16180 | + |
| 16181 | +mvrc_d: |
| 16182 | + mvrc.d cp7,cr14,lr |
| 16183 | + mvrc.d cp0,cr0,r0 |
| 16184 | + mvrc.d cp0,cr14,lr |
| 16185 | + mvrc.d cp7,cr14,r0 |
| 16186 | + mvrc.d cp7,cr0,lr |
| 16187 | + mvrc.d cp4,cr8,r6 |
| 16188 | + mvrc.d cp3,cr6,r8 |
| 16189 | + |
| 16190 | +bfexts: |
| 16191 | + bfexts pc,pc,31,31 |
| 16192 | + bfexts r0,r0,0,0 |
| 16193 | + bfexts r0,pc,31,31 |
| 16194 | + bfexts pc,r0,31,31 |
| 16195 | + bfexts pc,pc,0,31 |
| 16196 | + bfexts pc,pc,31,0 |
| 16197 | + bfexts r7,r8,15,16 |
| 16198 | + bfexts r8,r7,16,15 |
| 16199 | + |
| 16200 | +bfextu: |
| 16201 | + bfextu pc,pc,31,31 |
| 16202 | + bfextu r0,r0,0,0 |
| 16203 | + bfextu r0,pc,31,31 |
| 16204 | + bfextu pc,r0,31,31 |
| 16205 | + bfextu pc,pc,0,31 |
| 16206 | + bfextu pc,pc,31,0 |
| 16207 | + bfextu r7,r8,15,16 |
| 16208 | + bfextu r8,r7,16,15 |
| 16209 | + |
| 16210 | +bfins: |
| 16211 | + bfins pc,pc,31,31 |
| 16212 | + bfins r0,r0,0,0 |
| 16213 | + bfins r0,pc,31,31 |
| 16214 | + bfins pc,r0,31,31 |
| 16215 | + bfins pc,pc,0,31 |
| 16216 | + bfins pc,pc,31,0 |
| 16217 | + bfins r7,r8,15,16 |
| 16218 | + bfins r8,r7,16,15 |
| 16219 | + |
| 16220 | +rsubc: |
| 16221 | + rsubeq pc,0 |
| 16222 | + rsubal r12,-1 |
| 16223 | + rsubls r5,-128 |
| 16224 | + rsubpl r4,127 |
| 16225 | + rsubne lr,1 |
| 16226 | + rsubls r12,118 |
| 16227 | + rsubvc lr,-12 |
| 16228 | + rsubmi r4,-13 |
| 16229 | + |
| 16230 | +addc: |
| 16231 | + addeq pc,pc,pc |
| 16232 | + addal r12,r12,r12 |
| 16233 | + addls r5,r5,r5 |
| 16234 | + addpl r4,r4,r4 |
| 16235 | + addne lr,lr,lr |
| 16236 | + addls r10,r2,r1 |
| 16237 | + addvc r12,r8,r11 |
| 16238 | + addmi r10,r7,r0 |
| 16239 | + |
| 16240 | +subc2: |
| 16241 | + subeq pc,pc,pc |
| 16242 | + subal r12,r12,r12 |
| 16243 | + subls r5,r5,r5 |
| 16244 | + subpl r4,r4,r4 |
| 16245 | + subne lr,lr,lr |
| 16246 | + subls r10,r2,r1 |
| 16247 | + subvc r12,r8,r11 |
| 16248 | + submi r10,r7,r0 |
| 16249 | + |
| 16250 | +andc: |
| 16251 | + andeq pc,pc,pc |
| 16252 | + andal r12,r12,r12 |
| 16253 | + andls r5,r5,r5 |
| 16254 | + andpl r4,r4,r4 |
| 16255 | + andne lr,lr,lr |
| 16256 | + andls r10,r2,r1 |
| 16257 | + andvc r12,r8,r11 |
| 16258 | + andmi r10,r7,r0 |
| 16259 | + |
| 16260 | +orc: |
| 16261 | + oreq pc,pc,pc |
| 16262 | + oral r12,r12,r12 |
| 16263 | + orls r5,r5,r5 |
| 16264 | + orpl r4,r4,r4 |
| 16265 | + orne lr,lr,lr |
| 16266 | + orls r10,r2,r1 |
| 16267 | + orvc r12,r8,r11 |
| 16268 | + ormi r10,r7,r0 |
| 16269 | + |
| 16270 | +eorc: |
| 16271 | + eoreq pc,pc,pc |
| 16272 | + eoral r12,r12,r12 |
| 16273 | + eorls r5,r5,r5 |
| 16274 | + eorpl r4,r4,r4 |
| 16275 | + eorne lr,lr,lr |
| 16276 | + eorls r10,r2,r1 |
| 16277 | + eorvc r12,r8,r11 |
| 16278 | + eormi r10,r7,r0 |
| 16279 | + |
| 16280 | +ldcond: |
| 16281 | + ld.weq pc,pc[2044] |
| 16282 | + ld.shal r12,r12[1022] |
| 16283 | + ld.uhls r5,r5[0] |
| 16284 | + ld.ubpl r4,r4[511] |
| 16285 | + ld.sbne lr,lr[0] |
| 16286 | + ld.wls r10,r2[0] |
| 16287 | + ld.shvc r12,r8[0x3fe] |
| 16288 | + ld.ubmi r10,r7[1] |
| 16289 | + |
| 16290 | +stcond2: |
| 16291 | + st.weq pc[2044],pc |
| 16292 | + st.hal r12[1022],r12 |
| 16293 | + st.hls r5[0],r5 |
| 16294 | + st.bpl r4[511],r4 |
| 16295 | + st.bne lr[0],lr |
| 16296 | + st.wls r2[0],r10 |
| 16297 | + st.hvc r8[0x3fe],r12 |
| 16298 | + st.bmi r7[1],r10 |
| 16299 | + |
| 16300 | +movh: |
| 16301 | + movh pc, 65535 |
| 16302 | + movh r0, 0 |
| 16303 | + movh r5, 1 |
| 16304 | + movh r12, 32767 |
| 16305 | + |
| 16306 | + |
| 16307 | --- /dev/null |
| 16308 | +++ b/gas/testsuite/gas/avr32/avr32.exp |
| 16309 | @@ -0,0 +1,23 @@ |
| 16310 | +# AVR32 assembler testsuite. -*- Tcl -*- |
| 16311 | + |
| 16312 | +if [istarget avr32-*-*] { |
| 16313 | + run_dump_test "hwrd-lwrd" |
| 16314 | + run_dump_test "pcrel" |
| 16315 | + run_dump_test "aliases" |
| 16316 | + run_dump_test "dwarf2" |
| 16317 | + run_dump_test "pic_reloc" |
| 16318 | + run_dump_test "fpinsn" |
| 16319 | + run_dump_test "pico" |
| 16320 | + run_dump_test "lda_pic" |
| 16321 | + run_dump_test "lda_pic_linkrelax" |
| 16322 | + run_dump_test "lda_nopic" |
| 16323 | + run_dump_test "lda_nopic_linkrelax" |
| 16324 | + run_dump_test "call_pic" |
| 16325 | + run_dump_test "call_pic_linkrelax" |
| 16326 | + run_dump_test "call_nopic" |
| 16327 | + run_dump_test "call_nopic_linkrelax" |
| 16328 | + run_dump_test "jmptable" |
| 16329 | + run_dump_test "jmptable_linkrelax" |
| 16330 | + run_dump_test "symdiff" |
| 16331 | + run_dump_test "symdiff_linkrelax" |
| 16332 | +} |
| 16333 | --- /dev/null |
| 16334 | +++ b/gas/testsuite/gas/avr32/call_nopic.d |
| 16335 | @@ -0,0 +1,36 @@ |
| 16336 | +#source: call.s |
| 16337 | +#as: |
| 16338 | +#objdump: -dr |
| 16339 | +#name: call_nopic |
| 16340 | + |
| 16341 | +.*: +file format .* |
| 16342 | + |
| 16343 | +Disassembly of section \.text: |
| 16344 | + |
| 16345 | +00000000 <call_test>: |
| 16346 | + 0: d7 03 nop |
| 16347 | + |
| 16348 | +00000002 <toofar_negative>: |
| 16349 | + \.\.\. |
| 16350 | + 1ffffe: 00 00 add r0,r0 |
| 16351 | + 200000: f0 a0 00 00 rcall 0 <call_test> |
| 16352 | + 200004: f0 1f 00 0c mcall 200034 <toofar_negative\+0x200032> |
| 16353 | + 200008: f0 1f 00 0c mcall 200038 <toofar_negative\+0x200036> |
| 16354 | + 20000c: f0 1f 00 0c mcall 20003c <toofar_negative\+0x20003a> |
| 16355 | + 200010: f0 1f 00 0c mcall 200040 <toofar_negative\+0x20003e> |
| 16356 | + \.\.\. |
| 16357 | + 200030: ee b0 ff ff rcall 40002e <far_positive> |
| 16358 | + \.\.\. |
| 16359 | + 200034: R_AVR32_32_CPENT \.text\+0x2 |
| 16360 | + 200038: R_AVR32_32_CPENT \.text\.init |
| 16361 | + 20003c: R_AVR32_32_CPENT undefined |
| 16362 | + 200040: R_AVR32_32_CPENT \.text\+0x40002c |
| 16363 | + |
| 16364 | +0040002c <toofar_positive>: |
| 16365 | + 40002c: d7 03 nop |
| 16366 | +0040002e <far_positive>: |
| 16367 | + 40002e: d7 03 nop |
| 16368 | +Disassembly of section \.text\.init: |
| 16369 | + |
| 16370 | +00000000 <different_section>: |
| 16371 | + 0: e2 c0 00 00 sub r0,r1,0 |
| 16372 | --- /dev/null |
| 16373 | +++ b/gas/testsuite/gas/avr32/call_nopic_linkrelax.d |
| 16374 | @@ -0,0 +1,43 @@ |
| 16375 | +#source: call.s |
| 16376 | +#as: --linkrelax |
| 16377 | +#objdump: -dr |
| 16378 | +#name: call_nopic_linkrelax |
| 16379 | + |
| 16380 | +.*: +file format .* |
| 16381 | + |
| 16382 | +Disassembly of section \.text: |
| 16383 | + |
| 16384 | +00000000 <call_test>: |
| 16385 | + 0: d7 03 nop |
| 16386 | + |
| 16387 | +00000002 <toofar_negative>: |
| 16388 | + \.\.\. |
| 16389 | + 1ffffe: 00 00 add r0,r0 |
| 16390 | + 200000: e0 a0 00 00 rcall 200000 <toofar_negative\+0x1ffffe> |
| 16391 | + 200000: R_AVR32_22H_PCREL \.text |
| 16392 | + 200004: f0 1f 00 00 mcall 200004 <toofar_negative\+0x200002> |
| 16393 | + 200004: R_AVR32_CPCALL \.text\+0x200034 |
| 16394 | + 200008: f0 1f 00 00 mcall 200008 <toofar_negative\+0x200006> |
| 16395 | + 200008: R_AVR32_CPCALL \.text\+0x200038 |
| 16396 | + 20000c: f0 1f 00 00 mcall 20000c <toofar_negative\+0x20000a> |
| 16397 | + 20000c: R_AVR32_CPCALL \.text\+0x20003c |
| 16398 | + 200010: f0 1f 00 00 mcall 200010 <toofar_negative\+0x20000e> |
| 16399 | + 200010: R_AVR32_CPCALL \.text\+0x200040 |
| 16400 | + \.\.\. |
| 16401 | + 200030: e0 a0 00 00 rcall 200030 <toofar_negative\+0x20002e> |
| 16402 | + 200030: R_AVR32_22H_PCREL \.text\+0x40002e |
| 16403 | + \.\.\. |
| 16404 | + 200034: R_AVR32_ALIGN \*ABS\*\+0x2 |
| 16405 | + 200034: R_AVR32_32_CPENT \.text\+0x2 |
| 16406 | + 200038: R_AVR32_32_CPENT \.text\.init |
| 16407 | + 20003c: R_AVR32_32_CPENT undefined |
| 16408 | + 200040: R_AVR32_32_CPENT \.text\+0x40002c |
| 16409 | + |
| 16410 | +0040002c <toofar_positive>: |
| 16411 | + 40002c: d7 03 nop |
| 16412 | +0040002e <far_positive>: |
| 16413 | + 40002e: d7 03 nop |
| 16414 | +Disassembly of section \.text\.init: |
| 16415 | + |
| 16416 | +00000000 <different_section>: |
| 16417 | + 0: e2 c0 00 00 sub r0,r1,0 |
| 16418 | --- /dev/null |
| 16419 | +++ b/gas/testsuite/gas/avr32/call_pic.d |
| 16420 | @@ -0,0 +1,36 @@ |
| 16421 | +#source: call.s |
| 16422 | +#as: --pic |
| 16423 | +#objdump: -dr |
| 16424 | +#name: call_pic |
| 16425 | + |
| 16426 | +.*: +file format .* |
| 16427 | + |
| 16428 | +Disassembly of section \.text: |
| 16429 | + |
| 16430 | +00000000 <call_test>: |
| 16431 | + 0: d7 03 nop |
| 16432 | + |
| 16433 | +00000002 <toofar_negative>: |
| 16434 | + \.\.\. |
| 16435 | + 1ffffe: 00 00 add r0,r0 |
| 16436 | + 200000: f0 a0 00 00 rcall 0 <call_test> |
| 16437 | + 200004: f0 16 00 00 mcall r6\[0\] |
| 16438 | + 200004: R_AVR32_GOT18SW toofar_negative |
| 16439 | + 200008: f0 16 00 00 mcall r6\[0\] |
| 16440 | + 200008: R_AVR32_GOT18SW different_section |
| 16441 | + 20000c: f0 16 00 00 mcall r6\[0\] |
| 16442 | + 20000c: R_AVR32_GOT18SW undefined |
| 16443 | + 200010: f0 16 00 00 mcall r6\[0\] |
| 16444 | + 200010: R_AVR32_GOT18SW toofar_positive |
| 16445 | + \.\.\. |
| 16446 | + 200030: ee b0 ff ff rcall 40002e <far_positive> |
| 16447 | + \.\.\. |
| 16448 | + |
| 16449 | +0040002c <toofar_positive>: |
| 16450 | + 40002c: d7 03 nop |
| 16451 | +0040002e <far_positive>: |
| 16452 | + 40002e: d7 03 nop |
| 16453 | +Disassembly of section \.text\.init: |
| 16454 | + |
| 16455 | +00000000 <different_section>: |
| 16456 | + 0: e2 c0 00 00 sub r0,r1,0 |
| 16457 | --- /dev/null |
| 16458 | +++ b/gas/testsuite/gas/avr32/call_pic_linkrelax.d |
| 16459 | @@ -0,0 +1,47 @@ |
| 16460 | +#source: call.s |
| 16461 | +#as: --pic --linkrelax |
| 16462 | +#objdump: -dr |
| 16463 | +#name: call_pic_linkrelax |
| 16464 | + |
| 16465 | +.*: +file format .* |
| 16466 | + |
| 16467 | +Disassembly of section \.text: |
| 16468 | + |
| 16469 | +00000000 <call_test>: |
| 16470 | + 0: d7 03 nop |
| 16471 | + |
| 16472 | +00000002 <toofar_negative>: |
| 16473 | + \.\.\. |
| 16474 | + 1ffffe: 00 00 add r0,r0 |
| 16475 | + 200000: e0 a0 00 00 rcall 200000 <toofar_negative\+0x1ffffe> |
| 16476 | + 200000: R_AVR32_22H_PCREL \.text |
| 16477 | + 200004: e0 6e 00 00 mov lr,0 |
| 16478 | + 200004: R_AVR32_GOTCALL toofar_negative |
| 16479 | + 200008: ec 0e 03 2e ld\.w lr,r6\[lr<<0x2\] |
| 16480 | + 20000c: 5d 1e icall lr |
| 16481 | + 20000e: e0 6e 00 00 mov lr,0 |
| 16482 | + 20000e: R_AVR32_GOTCALL different_section |
| 16483 | + 200012: ec 0e 03 2e ld\.w lr,r6\[lr<<0x2\] |
| 16484 | + 200016: 5d 1e icall lr |
| 16485 | + 200018: e0 6e 00 00 mov lr,0 |
| 16486 | + 200018: R_AVR32_GOTCALL undefined |
| 16487 | + 20001c: ec 0e 03 2e ld\.w lr,r6\[lr<<0x2\] |
| 16488 | + 200020: 5d 1e icall lr |
| 16489 | + 200022: e0 6e 00 00 mov lr,0 |
| 16490 | + 200022: R_AVR32_GOTCALL toofar_positive |
| 16491 | + 200026: ec 0e 03 2e ld\.w lr,r6\[lr<<0x2\] |
| 16492 | + 20002a: 5d 1e icall lr |
| 16493 | + 20002c: 00 00 add r0,r0 |
| 16494 | + 20002e: 00 00 add r0,r0 |
| 16495 | + 200030: e0 a0 00 00 rcall 200030 <toofar_negative\+0x20002e> |
| 16496 | + 200030: R_AVR32_22H_PCREL \.text\+0x40002e |
| 16497 | + \.\.\. |
| 16498 | + |
| 16499 | +0040002c <toofar_positive>: |
| 16500 | + 40002c: d7 03 nop |
| 16501 | +0040002e <far_positive>: |
| 16502 | + 40002e: d7 03 nop |
| 16503 | +Disassembly of section \.text\.init: |
| 16504 | + |
| 16505 | +00000000 <different_section>: |
| 16506 | + 0: e2 c0 00 00 sub r0,r1,0 |
| 16507 | --- /dev/null |
| 16508 | +++ b/gas/testsuite/gas/avr32/call.s |
| 16509 | @@ -0,0 +1,30 @@ |
| 16510 | + |
| 16511 | + .text |
| 16512 | + .global call_test |
| 16513 | +call_test: |
| 16514 | +far_negative: |
| 16515 | + nop |
| 16516 | +toofar_negative: |
| 16517 | + |
| 16518 | + .org 0x200000 |
| 16519 | + |
| 16520 | + call far_negative |
| 16521 | + call toofar_negative |
| 16522 | + call different_section |
| 16523 | + call undefined |
| 16524 | + call toofar_positive |
| 16525 | + .org 0x200030 |
| 16526 | + call far_positive |
| 16527 | + |
| 16528 | + .cpool |
| 16529 | + |
| 16530 | + .org 0x40002c |
| 16531 | + |
| 16532 | +toofar_positive: |
| 16533 | + nop |
| 16534 | +far_positive: |
| 16535 | + nop |
| 16536 | + |
| 16537 | + .section .text.init,"ax",@progbits |
| 16538 | +different_section: |
| 16539 | + sub r0, r1, 0 |
| 16540 | --- /dev/null |
| 16541 | +++ b/gas/testsuite/gas/avr32/dwarf2.d |
| 16542 | @@ -0,0 +1,42 @@ |
| 16543 | +#readelf: -wl |
| 16544 | +#name: dwarf2 |
| 16545 | +#source: dwarf2.s |
| 16546 | + |
| 16547 | +Dump of debug contents of section \.debug_line: |
| 16548 | + |
| 16549 | + Length: 53 |
| 16550 | + DWARF Version: 2 |
| 16551 | + Prologue Length: 26 |
| 16552 | + Minimum Instruction Length: 1 |
| 16553 | + Initial value of 'is_stmt': 1 |
| 16554 | + Line Base: -5 |
| 16555 | + Line Range: 14 |
| 16556 | + Opcode Base: 10 |
| 16557 | + \(Pointer size: 4\) |
| 16558 | + |
| 16559 | + Opcodes: |
| 16560 | + Opcode 1 has 0 args |
| 16561 | + Opcode 2 has 1 args |
| 16562 | + Opcode 3 has 1 args |
| 16563 | + Opcode 4 has 1 args |
| 16564 | + Opcode 5 has 1 args |
| 16565 | + Opcode 6 has 0 args |
| 16566 | + Opcode 7 has 0 args |
| 16567 | + Opcode 8 has 0 args |
| 16568 | + Opcode 9 has 1 args |
| 16569 | + |
| 16570 | + The Directory Table is empty\. |
| 16571 | + |
| 16572 | + The File Name Table: |
| 16573 | + Entry Dir Time Size Name |
| 16574 | + 1 0 0 0 main\.c |
| 16575 | + |
| 16576 | + Line Number Statements: |
| 16577 | + Extended opcode 2: set Address to 0x0 |
| 16578 | + Advance Line by 87 to 88 |
| 16579 | + Copy |
| 16580 | + Advance Line by 23 to 111 |
| 16581 | + Special opcode .*: advance Address by 4 to 0x4 and Line by 0 to 111 |
| 16582 | + Special opcode .*: advance Address by 10 to 0xe and Line by 1 to 112 |
| 16583 | + Advance PC by 530 to 220 |
| 16584 | + Extended opcode 1: End of Sequence |
| 16585 | --- /dev/null |
| 16586 | +++ b/gas/testsuite/gas/avr32/dwarf2.s |
| 16587 | @@ -0,0 +1,67 @@ |
| 16588 | +# Source file used to test DWARF2 information for AVR32. |
| 16589 | + |
| 16590 | + .file "main.c" |
| 16591 | + |
| 16592 | + .section .debug_abbrev,"",@progbits |
| 16593 | +.Ldebug_abbrev0: |
| 16594 | + .section .debug_info,"",@progbits |
| 16595 | +.Ldebug_info0: |
| 16596 | + .section .debug_line,"",@progbits |
| 16597 | +.Ldebug_line0: |
| 16598 | + |
| 16599 | + .text |
| 16600 | + .align 1 |
| 16601 | + .globl main |
| 16602 | + .type main, @function |
| 16603 | +.Ltext0: |
| 16604 | +main: |
| 16605 | + .file 1 "main.c" |
| 16606 | + .loc 1 88 0 |
| 16607 | + pushm r0-r7,lr |
| 16608 | + sub sp, 4 |
| 16609 | + .loc 1 111 0 |
| 16610 | + lddpc r12, .LC1 |
| 16611 | + lddpc r7, .LC1 |
| 16612 | + icall r7 |
| 16613 | + .loc 1 112 0 |
| 16614 | + lddpc r6, .LC4 |
| 16615 | + |
| 16616 | + .align 2 |
| 16617 | +.LC4: .int 0 |
| 16618 | + |
| 16619 | + .fill 256, 2, 0 |
| 16620 | + |
| 16621 | + .align 2 |
| 16622 | +.LC1: |
| 16623 | + .int 0 |
| 16624 | +.LC2: |
| 16625 | + .int 0 |
| 16626 | +.LC3: |
| 16627 | + .int 0 |
| 16628 | + .size main, . - main |
| 16629 | + |
| 16630 | +.Letext0: |
| 16631 | + |
| 16632 | + .section .debug_info |
| 16633 | + .int .Ledebug_info0 - .Ldebug_info0 // size |
| 16634 | + .short 2 // version |
| 16635 | + .int .Ldebug_abbrev0 // abbrev offset |
| 16636 | + .byte 4 // bytes per addr |
| 16637 | + |
| 16638 | + .uleb128 1 // abbrev 1 |
| 16639 | + .int .Ldebug_line0 // DW_AT_stmt_list |
| 16640 | + .int .Letext0 // DW_AT_high_pc |
| 16641 | + .int .Ltext0 // DW_AT_low_pc |
| 16642 | + |
| 16643 | +.Ledebug_info0: |
| 16644 | + |
| 16645 | + .section .debug_abbrev |
| 16646 | + .uleb128 0x01 |
| 16647 | + .uleb128 0x11 // DW_TAG_compile_unit |
| 16648 | + .byte 0 // DW_CHILDREN_no |
| 16649 | + .uleb128 0x10, 0x6 // DW_AT_stmt_list |
| 16650 | + .uleb128 0x12, 0x1 // DW_AT_high_pc |
| 16651 | + .uleb128 0x11, 0x1 // DW_AT_low_pc |
| 16652 | + .uleb128 0, 0 |
| 16653 | + |
| 16654 | + .byte 0 |
| 16655 | --- /dev/null |
| 16656 | +++ b/gas/testsuite/gas/avr32/fpinsn.d |
| 16657 | @@ -0,0 +1,271 @@ |
| 16658 | +#as: |
| 16659 | +#objdump: -dr |
| 16660 | +#name: fpinsn |
| 16661 | + |
| 16662 | +.*: +file format .* |
| 16663 | + |
| 16664 | +Disassembly of section \.text: |
| 16665 | + |
| 16666 | +[0-9a-f]* <fadd_s>: |
| 16667 | + *[0-9a-f]*: e1 a2 0f ff cop cp0,cr15,cr15,cr15,0x4 |
| 16668 | + *[0-9a-f]*: e1 a2 00 00 cop cp0,cr0,cr0,cr0,0x4 |
| 16669 | + *[0-9a-f]*: e1 a2 00 ff cop cp0,cr0,cr15,cr15,0x4 |
| 16670 | + *[0-9a-f]*: e1 a2 0f 0f cop cp0,cr15,cr0,cr15,0x4 |
| 16671 | + *[0-9a-f]*: e1 a2 0f f0 cop cp0,cr15,cr15,cr0,0x4 |
| 16672 | + *[0-9a-f]*: e1 a2 07 88 cop cp0,cr7,cr8,cr8,0x4 |
| 16673 | + *[0-9a-f]*: e1 a2 08 78 cop cp0,cr8,cr7,cr8,0x4 |
| 16674 | + *[0-9a-f]*: e1 a2 08 87 cop cp0,cr8,cr8,cr7,0x4 |
| 16675 | + |
| 16676 | +[0-9a-f]* <fsub_s>: |
| 16677 | + *[0-9a-f]*: e1 a2 1f ff cop cp0,cr15,cr15,cr15,0x5 |
| 16678 | + *[0-9a-f]*: e1 a2 10 00 cop cp0,cr0,cr0,cr0,0x5 |
| 16679 | + *[0-9a-f]*: e1 a2 10 ff cop cp0,cr0,cr15,cr15,0x5 |
| 16680 | + *[0-9a-f]*: e1 a2 1f 0f cop cp0,cr15,cr0,cr15,0x5 |
| 16681 | + *[0-9a-f]*: e1 a2 1f f0 cop cp0,cr15,cr15,cr0,0x5 |
| 16682 | + *[0-9a-f]*: e1 a2 17 88 cop cp0,cr7,cr8,cr8,0x5 |
| 16683 | + *[0-9a-f]*: e1 a2 18 78 cop cp0,cr8,cr7,cr8,0x5 |
| 16684 | + *[0-9a-f]*: e1 a2 18 87 cop cp0,cr8,cr8,cr7,0x5 |
| 16685 | + |
| 16686 | +[0-9a-f]* <fmac_s>: |
| 16687 | + *[0-9a-f]*: e1 a0 0f ff cop cp0,cr15,cr15,cr15,0x0 |
| 16688 | + *[0-9a-f]*: e1 a0 00 00 cop cp0,cr0,cr0,cr0,0x0 |
| 16689 | + *[0-9a-f]*: e1 a0 00 ff cop cp0,cr0,cr15,cr15,0x0 |
| 16690 | + *[0-9a-f]*: e1 a0 0f 0f cop cp0,cr15,cr0,cr15,0x0 |
| 16691 | + *[0-9a-f]*: e1 a0 0f f0 cop cp0,cr15,cr15,cr0,0x0 |
| 16692 | + *[0-9a-f]*: e1 a0 07 88 cop cp0,cr7,cr8,cr8,0x0 |
| 16693 | + *[0-9a-f]*: e1 a0 08 78 cop cp0,cr8,cr7,cr8,0x0 |
| 16694 | + *[0-9a-f]*: e1 a0 08 87 cop cp0,cr8,cr8,cr7,0x0 |
| 16695 | + |
| 16696 | +[0-9a-f]* <fnmac_s>: |
| 16697 | + *[0-9a-f]*: e1 a0 1f ff cop cp0,cr15,cr15,cr15,0x1 |
| 16698 | + *[0-9a-f]*: e1 a0 10 00 cop cp0,cr0,cr0,cr0,0x1 |
| 16699 | + *[0-9a-f]*: e1 a0 10 ff cop cp0,cr0,cr15,cr15,0x1 |
| 16700 | + *[0-9a-f]*: e1 a0 1f 0f cop cp0,cr15,cr0,cr15,0x1 |
| 16701 | + *[0-9a-f]*: e1 a0 1f f0 cop cp0,cr15,cr15,cr0,0x1 |
| 16702 | + *[0-9a-f]*: e1 a0 17 88 cop cp0,cr7,cr8,cr8,0x1 |
| 16703 | + *[0-9a-f]*: e1 a0 18 78 cop cp0,cr8,cr7,cr8,0x1 |
| 16704 | + *[0-9a-f]*: e1 a0 18 87 cop cp0,cr8,cr8,cr7,0x1 |
| 16705 | + |
| 16706 | +[0-9a-f]* <fmsc_s>: |
| 16707 | + *[0-9a-f]*: e1 a1 0f ff cop cp0,cr15,cr15,cr15,0x2 |
| 16708 | + *[0-9a-f]*: e1 a1 00 00 cop cp0,cr0,cr0,cr0,0x2 |
| 16709 | + *[0-9a-f]*: e1 a1 00 ff cop cp0,cr0,cr15,cr15,0x2 |
| 16710 | + *[0-9a-f]*: e1 a1 0f 0f cop cp0,cr15,cr0,cr15,0x2 |
| 16711 | + *[0-9a-f]*: e1 a1 0f f0 cop cp0,cr15,cr15,cr0,0x2 |
| 16712 | + *[0-9a-f]*: e1 a1 07 88 cop cp0,cr7,cr8,cr8,0x2 |
| 16713 | + *[0-9a-f]*: e1 a1 08 78 cop cp0,cr8,cr7,cr8,0x2 |
| 16714 | + *[0-9a-f]*: e1 a1 08 87 cop cp0,cr8,cr8,cr7,0x2 |
| 16715 | + |
| 16716 | +[0-9a-f]* <fnmsc_s>: |
| 16717 | + *[0-9a-f]*: e1 a1 1f ff cop cp0,cr15,cr15,cr15,0x3 |
| 16718 | + *[0-9a-f]*: e1 a1 10 00 cop cp0,cr0,cr0,cr0,0x3 |
| 16719 | + *[0-9a-f]*: e1 a1 10 ff cop cp0,cr0,cr15,cr15,0x3 |
| 16720 | + *[0-9a-f]*: e1 a1 1f 0f cop cp0,cr15,cr0,cr15,0x3 |
| 16721 | + *[0-9a-f]*: e1 a1 1f f0 cop cp0,cr15,cr15,cr0,0x3 |
| 16722 | + *[0-9a-f]*: e1 a1 17 88 cop cp0,cr7,cr8,cr8,0x3 |
| 16723 | + *[0-9a-f]*: e1 a1 18 78 cop cp0,cr8,cr7,cr8,0x3 |
| 16724 | + *[0-9a-f]*: e1 a1 18 87 cop cp0,cr8,cr8,cr7,0x3 |
| 16725 | + |
| 16726 | +[0-9a-f]* <fmul_s>: |
| 16727 | + *[0-9a-f]*: e1 a3 0f ff cop cp0,cr15,cr15,cr15,0x6 |
| 16728 | + *[0-9a-f]*: e1 a3 00 00 cop cp0,cr0,cr0,cr0,0x6 |
| 16729 | + *[0-9a-f]*: e1 a3 00 ff cop cp0,cr0,cr15,cr15,0x6 |
| 16730 | + *[0-9a-f]*: e1 a3 0f 0f cop cp0,cr15,cr0,cr15,0x6 |
| 16731 | + *[0-9a-f]*: e1 a3 0f f0 cop cp0,cr15,cr15,cr0,0x6 |
| 16732 | + *[0-9a-f]*: e1 a3 07 88 cop cp0,cr7,cr8,cr8,0x6 |
| 16733 | + *[0-9a-f]*: e1 a3 08 78 cop cp0,cr8,cr7,cr8,0x6 |
| 16734 | + *[0-9a-f]*: e1 a3 08 87 cop cp0,cr8,cr8,cr7,0x6 |
| 16735 | + |
| 16736 | +[0-9a-f]* <fnmul_s>: |
| 16737 | + *[0-9a-f]*: e1 a3 1f ff cop cp0,cr15,cr15,cr15,0x7 |
| 16738 | + *[0-9a-f]*: e1 a3 10 00 cop cp0,cr0,cr0,cr0,0x7 |
| 16739 | + *[0-9a-f]*: e1 a3 10 ff cop cp0,cr0,cr15,cr15,0x7 |
| 16740 | + *[0-9a-f]*: e1 a3 1f 0f cop cp0,cr15,cr0,cr15,0x7 |
| 16741 | + *[0-9a-f]*: e1 a3 1f f0 cop cp0,cr15,cr15,cr0,0x7 |
| 16742 | + *[0-9a-f]*: e1 a3 17 88 cop cp0,cr7,cr8,cr8,0x7 |
| 16743 | + *[0-9a-f]*: e1 a3 18 78 cop cp0,cr8,cr7,cr8,0x7 |
| 16744 | + *[0-9a-f]*: e1 a3 18 87 cop cp0,cr8,cr8,cr7,0x7 |
| 16745 | + |
| 16746 | +[0-9a-f]* <fneg_s>: |
| 16747 | + *[0-9a-f]*: e1 a4 0f f0 cop cp0,cr15,cr15,cr0,0x8 |
| 16748 | + *[0-9a-f]*: e1 a4 00 00 cop cp0,cr0,cr0,cr0,0x8 |
| 16749 | + *[0-9a-f]*: e1 a4 00 f0 cop cp0,cr0,cr15,cr0,0x8 |
| 16750 | + *[0-9a-f]*: e1 a4 0f 00 cop cp0,cr15,cr0,cr0,0x8 |
| 16751 | + *[0-9a-f]*: e1 a4 07 80 cop cp0,cr7,cr8,cr0,0x8 |
| 16752 | + *[0-9a-f]*: e1 a4 08 70 cop cp0,cr8,cr7,cr0,0x8 |
| 16753 | + |
| 16754 | +[0-9a-f]* <fabs_s>: |
| 16755 | + *[0-9a-f]*: e1 a4 1f f0 cop cp0,cr15,cr15,cr0,0x9 |
| 16756 | + *[0-9a-f]*: e1 a4 10 00 cop cp0,cr0,cr0,cr0,0x9 |
| 16757 | + *[0-9a-f]*: e1 a4 10 f0 cop cp0,cr0,cr15,cr0,0x9 |
| 16758 | + *[0-9a-f]*: e1 a4 1f 00 cop cp0,cr15,cr0,cr0,0x9 |
| 16759 | + *[0-9a-f]*: e1 a4 17 80 cop cp0,cr7,cr8,cr0,0x9 |
| 16760 | + *[0-9a-f]*: e1 a4 18 70 cop cp0,cr8,cr7,cr0,0x9 |
| 16761 | + |
| 16762 | +[0-9a-f]* <fcmp_s>: |
| 16763 | + *[0-9a-f]*: e1 a6 10 ff cop cp0,cr0,cr15,cr15,0xd |
| 16764 | + *[0-9a-f]*: e1 a6 10 00 cop cp0,cr0,cr0,cr0,0xd |
| 16765 | + *[0-9a-f]*: e1 a6 10 0f cop cp0,cr0,cr0,cr15,0xd |
| 16766 | + *[0-9a-f]*: e1 a6 10 f0 cop cp0,cr0,cr15,cr0,0xd |
| 16767 | + *[0-9a-f]*: e1 a6 10 78 cop cp0,cr0,cr7,cr8,0xd |
| 16768 | + *[0-9a-f]*: e1 a6 10 87 cop cp0,cr0,cr8,cr7,0xd |
| 16769 | + |
| 16770 | +[0-9a-f]* <fadd_d>: |
| 16771 | + *[0-9a-f]*: e5 a2 0e ee cop cp0,cr14,cr14,cr14,0x44 |
| 16772 | + *[0-9a-f]*: e5 a2 00 00 cop cp0,cr0,cr0,cr0,0x44 |
| 16773 | + *[0-9a-f]*: e5 a2 00 ee cop cp0,cr0,cr14,cr14,0x44 |
| 16774 | + *[0-9a-f]*: e5 a2 0e 0e cop cp0,cr14,cr0,cr14,0x44 |
| 16775 | + *[0-9a-f]*: e5 a2 0e e0 cop cp0,cr14,cr14,cr0,0x44 |
| 16776 | + *[0-9a-f]*: e5 a2 06 88 cop cp0,cr6,cr8,cr8,0x44 |
| 16777 | + *[0-9a-f]*: e5 a2 08 68 cop cp0,cr8,cr6,cr8,0x44 |
| 16778 | + *[0-9a-f]*: e5 a2 08 86 cop cp0,cr8,cr8,cr6,0x44 |
| 16779 | + |
| 16780 | +[0-9a-f]* <fsub_d>: |
| 16781 | + *[0-9a-f]*: e5 a2 1e ee cop cp0,cr14,cr14,cr14,0x45 |
| 16782 | + *[0-9a-f]*: e5 a2 10 00 cop cp0,cr0,cr0,cr0,0x45 |
| 16783 | + *[0-9a-f]*: e5 a2 10 ee cop cp0,cr0,cr14,cr14,0x45 |
| 16784 | + *[0-9a-f]*: e5 a2 1e 0e cop cp0,cr14,cr0,cr14,0x45 |
| 16785 | + *[0-9a-f]*: e5 a2 1e e0 cop cp0,cr14,cr14,cr0,0x45 |
| 16786 | + *[0-9a-f]*: e5 a2 16 88 cop cp0,cr6,cr8,cr8,0x45 |
| 16787 | + *[0-9a-f]*: e5 a2 18 68 cop cp0,cr8,cr6,cr8,0x45 |
| 16788 | + *[0-9a-f]*: e5 a2 18 86 cop cp0,cr8,cr8,cr6,0x45 |
| 16789 | + |
| 16790 | +[0-9a-f]* <fmac_d>: |
| 16791 | + *[0-9a-f]*: e5 a0 0e ee cop cp0,cr14,cr14,cr14,0x40 |
| 16792 | + *[0-9a-f]*: e5 a0 00 00 cop cp0,cr0,cr0,cr0,0x40 |
| 16793 | + *[0-9a-f]*: e5 a0 00 ee cop cp0,cr0,cr14,cr14,0x40 |
| 16794 | + *[0-9a-f]*: e5 a0 0e 0e cop cp0,cr14,cr0,cr14,0x40 |
| 16795 | + *[0-9a-f]*: e5 a0 0e e0 cop cp0,cr14,cr14,cr0,0x40 |
| 16796 | + *[0-9a-f]*: e5 a0 06 88 cop cp0,cr6,cr8,cr8,0x40 |
| 16797 | + *[0-9a-f]*: e5 a0 08 68 cop cp0,cr8,cr6,cr8,0x40 |
| 16798 | + *[0-9a-f]*: e5 a0 08 86 cop cp0,cr8,cr8,cr6,0x40 |
| 16799 | + |
| 16800 | +[0-9a-f]* <fnmac_d>: |
| 16801 | + *[0-9a-f]*: e5 a0 1e ee cop cp0,cr14,cr14,cr14,0x41 |
| 16802 | + *[0-9a-f]*: e5 a0 10 00 cop cp0,cr0,cr0,cr0,0x41 |
| 16803 | + *[0-9a-f]*: e5 a0 10 ee cop cp0,cr0,cr14,cr14,0x41 |
| 16804 | + *[0-9a-f]*: e5 a0 1e 0e cop cp0,cr14,cr0,cr14,0x41 |
| 16805 | + *[0-9a-f]*: e5 a0 1e e0 cop cp0,cr14,cr14,cr0,0x41 |
| 16806 | + *[0-9a-f]*: e5 a0 16 88 cop cp0,cr6,cr8,cr8,0x41 |
| 16807 | + *[0-9a-f]*: e5 a0 18 68 cop cp0,cr8,cr6,cr8,0x41 |
| 16808 | + *[0-9a-f]*: e5 a0 18 86 cop cp0,cr8,cr8,cr6,0x41 |
| 16809 | + |
| 16810 | +[0-9a-f]* <fmsc_d>: |
| 16811 | + *[0-9a-f]*: e5 a1 0e ee cop cp0,cr14,cr14,cr14,0x42 |
| 16812 | + *[0-9a-f]*: e5 a1 00 00 cop cp0,cr0,cr0,cr0,0x42 |
| 16813 | + *[0-9a-f]*: e5 a1 00 ee cop cp0,cr0,cr14,cr14,0x42 |
| 16814 | + *[0-9a-f]*: e5 a1 0e 0e cop cp0,cr14,cr0,cr14,0x42 |
| 16815 | + *[0-9a-f]*: e5 a1 0e e0 cop cp0,cr14,cr14,cr0,0x42 |
| 16816 | + *[0-9a-f]*: e5 a1 06 88 cop cp0,cr6,cr8,cr8,0x42 |
| 16817 | + *[0-9a-f]*: e5 a1 08 68 cop cp0,cr8,cr6,cr8,0x42 |
| 16818 | + *[0-9a-f]*: e5 a1 08 86 cop cp0,cr8,cr8,cr6,0x42 |
| 16819 | + |
| 16820 | +[0-9a-f]* <fnmsc_d>: |
| 16821 | + *[0-9a-f]*: e5 a1 1e ee cop cp0,cr14,cr14,cr14,0x43 |
| 16822 | + *[0-9a-f]*: e5 a1 10 00 cop cp0,cr0,cr0,cr0,0x43 |
| 16823 | + *[0-9a-f]*: e5 a1 10 ee cop cp0,cr0,cr14,cr14,0x43 |
| 16824 | + *[0-9a-f]*: e5 a1 1e 0e cop cp0,cr14,cr0,cr14,0x43 |
| 16825 | + *[0-9a-f]*: e5 a1 1e e0 cop cp0,cr14,cr14,cr0,0x43 |
| 16826 | + *[0-9a-f]*: e5 a1 16 88 cop cp0,cr6,cr8,cr8,0x43 |
| 16827 | + *[0-9a-f]*: e5 a1 18 68 cop cp0,cr8,cr6,cr8,0x43 |
| 16828 | + *[0-9a-f]*: e5 a1 18 86 cop cp0,cr8,cr8,cr6,0x43 |
| 16829 | + |
| 16830 | +[0-9a-f]* <fmul_d>: |
| 16831 | + *[0-9a-f]*: e5 a3 0e ee cop cp0,cr14,cr14,cr14,0x46 |
| 16832 | + *[0-9a-f]*: e5 a3 00 00 cop cp0,cr0,cr0,cr0,0x46 |
| 16833 | + *[0-9a-f]*: e5 a3 00 ee cop cp0,cr0,cr14,cr14,0x46 |
| 16834 | + *[0-9a-f]*: e5 a3 0e 0e cop cp0,cr14,cr0,cr14,0x46 |
| 16835 | + *[0-9a-f]*: e5 a3 0e e0 cop cp0,cr14,cr14,cr0,0x46 |
| 16836 | + *[0-9a-f]*: e5 a3 06 88 cop cp0,cr6,cr8,cr8,0x46 |
| 16837 | + *[0-9a-f]*: e5 a3 08 68 cop cp0,cr8,cr6,cr8,0x46 |
| 16838 | + *[0-9a-f]*: e5 a3 08 86 cop cp0,cr8,cr8,cr6,0x46 |
| 16839 | + |
| 16840 | +[0-9a-f]* <fnmul_d>: |
| 16841 | + *[0-9a-f]*: e5 a3 1e ee cop cp0,cr14,cr14,cr14,0x47 |
| 16842 | + *[0-9a-f]*: e5 a3 10 00 cop cp0,cr0,cr0,cr0,0x47 |
| 16843 | + *[0-9a-f]*: e5 a3 10 ee cop cp0,cr0,cr14,cr14,0x47 |
| 16844 | + *[0-9a-f]*: e5 a3 1e 0e cop cp0,cr14,cr0,cr14,0x47 |
| 16845 | + *[0-9a-f]*: e5 a3 1e e0 cop cp0,cr14,cr14,cr0,0x47 |
| 16846 | + *[0-9a-f]*: e5 a3 16 88 cop cp0,cr6,cr8,cr8,0x47 |
| 16847 | + *[0-9a-f]*: e5 a3 18 68 cop cp0,cr8,cr6,cr8,0x47 |
| 16848 | + *[0-9a-f]*: e5 a3 18 86 cop cp0,cr8,cr8,cr6,0x47 |
| 16849 | + |
| 16850 | +[0-9a-f]* <fneg_d>: |
| 16851 | + *[0-9a-f]*: e5 a4 0e e0 cop cp0,cr14,cr14,cr0,0x48 |
| 16852 | + *[0-9a-f]*: e5 a4 00 00 cop cp0,cr0,cr0,cr0,0x48 |
| 16853 | + *[0-9a-f]*: e5 a4 00 e0 cop cp0,cr0,cr14,cr0,0x48 |
| 16854 | + *[0-9a-f]*: e5 a4 0e 00 cop cp0,cr14,cr0,cr0,0x48 |
| 16855 | + *[0-9a-f]*: e5 a4 06 80 cop cp0,cr6,cr8,cr0,0x48 |
| 16856 | + *[0-9a-f]*: e5 a4 08 60 cop cp0,cr8,cr6,cr0,0x48 |
| 16857 | + |
| 16858 | +[0-9a-f]* <fabs_d>: |
| 16859 | + *[0-9a-f]*: e5 a4 1e e0 cop cp0,cr14,cr14,cr0,0x49 |
| 16860 | + *[0-9a-f]*: e5 a4 10 00 cop cp0,cr0,cr0,cr0,0x49 |
| 16861 | + *[0-9a-f]*: e5 a4 10 e0 cop cp0,cr0,cr14,cr0,0x49 |
| 16862 | + *[0-9a-f]*: e5 a4 1e 00 cop cp0,cr14,cr0,cr0,0x49 |
| 16863 | + *[0-9a-f]*: e5 a4 16 80 cop cp0,cr6,cr8,cr0,0x49 |
| 16864 | + *[0-9a-f]*: e5 a4 18 60 cop cp0,cr8,cr6,cr0,0x49 |
| 16865 | + |
| 16866 | +[0-9a-f]* <fcmp_d>: |
| 16867 | + *[0-9a-f]*: e5 a6 10 ee cop cp0,cr0,cr14,cr14,0x4d |
| 16868 | + *[0-9a-f]*: e5 a6 10 00 cop cp0,cr0,cr0,cr0,0x4d |
| 16869 | + *[0-9a-f]*: e5 a6 10 0e cop cp0,cr0,cr0,cr14,0x4d |
| 16870 | + *[0-9a-f]*: e5 a6 10 e0 cop cp0,cr0,cr14,cr0,0x4d |
| 16871 | + *[0-9a-f]*: e5 a6 10 68 cop cp0,cr0,cr6,cr8,0x4d |
| 16872 | + *[0-9a-f]*: e5 a6 10 86 cop cp0,cr0,cr8,cr6,0x4d |
| 16873 | + |
| 16874 | +[0-9a-f]* <fmov_s>: |
| 16875 | + *[0-9a-f]*: e1 a5 0f f0 cop cp0,cr15,cr15,cr0,0xa |
| 16876 | + *[0-9a-f]*: e1 a5 00 00 cop cp0,cr0,cr0,cr0,0xa |
| 16877 | + *[0-9a-f]*: e1 a5 0f 00 cop cp0,cr15,cr0,cr0,0xa |
| 16878 | + *[0-9a-f]*: e1 a5 00 f0 cop cp0,cr0,cr15,cr0,0xa |
| 16879 | + *[0-9a-f]*: e1 a5 08 70 cop cp0,cr8,cr7,cr0,0xa |
| 16880 | + *[0-9a-f]*: e1 a5 07 80 cop cp0,cr7,cr8,cr0,0xa |
| 16881 | + *[0-9a-f]*: ef af 0f 00 mvcr.w cp0,pc,cr15 |
| 16882 | + *[0-9a-f]*: ef a0 00 00 mvcr.w cp0,r0,cr0 |
| 16883 | + *[0-9a-f]*: ef af 00 00 mvcr.w cp0,pc,cr0 |
| 16884 | + *[0-9a-f]*: ef a0 0f 00 mvcr.w cp0,r0,cr15 |
| 16885 | + *[0-9a-f]*: ef a8 07 00 mvcr.w cp0,r8,cr7 |
| 16886 | + *[0-9a-f]*: ef a7 08 00 mvcr.w cp0,r7,cr8 |
| 16887 | + *[0-9a-f]*: ef af 0f 20 mvrc.w cp0,cr15,pc |
| 16888 | + *[0-9a-f]*: ef a0 00 20 mvrc.w cp0,cr0,r0 |
| 16889 | + *[0-9a-f]*: ef a0 0f 20 mvrc.w cp0,cr15,r0 |
| 16890 | + *[0-9a-f]*: ef af 00 20 mvrc.w cp0,cr0,pc |
| 16891 | + *[0-9a-f]*: ef a7 08 20 mvrc.w cp0,cr8,r7 |
| 16892 | + *[0-9a-f]*: ef a8 07 20 mvrc.w cp0,cr7,r8 |
| 16893 | + |
| 16894 | +[0-9a-f]* <fmov_d>: |
| 16895 | + *[0-9a-f]*: e5 a5 0e e0 cop cp0,cr14,cr14,cr0,0x4a |
| 16896 | + *[0-9a-f]*: e5 a5 00 00 cop cp0,cr0,cr0,cr0,0x4a |
| 16897 | + *[0-9a-f]*: e5 a5 0e 00 cop cp0,cr14,cr0,cr0,0x4a |
| 16898 | + *[0-9a-f]*: e5 a5 00 e0 cop cp0,cr0,cr14,cr0,0x4a |
| 16899 | + *[0-9a-f]*: e5 a5 08 60 cop cp0,cr8,cr6,cr0,0x4a |
| 16900 | + *[0-9a-f]*: e5 a5 06 80 cop cp0,cr6,cr8,cr0,0x4a |
| 16901 | + *[0-9a-f]*: ef ae 0e 10 mvcr.d cp0,lr,cr14 |
| 16902 | + *[0-9a-f]*: ef a0 00 10 mvcr.d cp0,r0,cr0 |
| 16903 | + *[0-9a-f]*: ef ae 00 10 mvcr.d cp0,lr,cr0 |
| 16904 | + *[0-9a-f]*: ef a0 0e 10 mvcr.d cp0,r0,cr14 |
| 16905 | + *[0-9a-f]*: ef a8 06 10 mvcr.d cp0,r8,cr6 |
| 16906 | + *[0-9a-f]*: ef a6 08 10 mvcr.d cp0,r6,cr8 |
| 16907 | + *[0-9a-f]*: ef ae 0e 30 mvrc.d cp0,cr14,lr |
| 16908 | + *[0-9a-f]*: ef a0 00 30 mvrc.d cp0,cr0,r0 |
| 16909 | + *[0-9a-f]*: ef a0 0e 30 mvrc.d cp0,cr14,r0 |
| 16910 | + *[0-9a-f]*: ef ae 00 30 mvrc.d cp0,cr0,lr |
| 16911 | + *[0-9a-f]*: ef a6 08 30 mvrc.d cp0,cr8,r6 |
| 16912 | + *[0-9a-f]*: ef a8 06 30 mvrc.d cp0,cr6,r8 |
| 16913 | + |
| 16914 | +[0-9a-f]* <fcasts_d>: |
| 16915 | + *[0-9a-f]*: e1 a7 1f e0 cop cp0,cr15,cr14,cr0,0xf |
| 16916 | + *[0-9a-f]*: e1 a7 10 00 cop cp0,cr0,cr0,cr0,0xf |
| 16917 | + *[0-9a-f]*: e1 a7 1f 00 cop cp0,cr15,cr0,cr0,0xf |
| 16918 | + *[0-9a-f]*: e1 a7 10 e0 cop cp0,cr0,cr14,cr0,0xf |
| 16919 | + *[0-9a-f]*: e1 a7 18 60 cop cp0,cr8,cr6,cr0,0xf |
| 16920 | + *[0-9a-f]*: e1 a7 17 80 cop cp0,cr7,cr8,cr0,0xf |
| 16921 | + |
| 16922 | +[0-9a-f]* <fcastd_s>: |
| 16923 | + *[0-9a-f]*: e1 a8 0e f0 cop cp0,cr14,cr15,cr0,0x10 |
| 16924 | + *[0-9a-f]*: e1 a8 00 00 cop cp0,cr0,cr0,cr0,0x10 |
| 16925 | + *[0-9a-f]*: e1 a8 0e 00 cop cp0,cr14,cr0,cr0,0x10 |
| 16926 | + *[0-9a-f]*: e1 a8 00 f0 cop cp0,cr0,cr15,cr0,0x10 |
| 16927 | + *[0-9a-f]*: e1 a8 08 70 cop cp0,cr8,cr7,cr0,0x10 |
| 16928 | + *[0-9a-f]*: e1 a8 06 80 cop cp0,cr6,cr8,cr0,0x10 |
| 16929 | --- /dev/null |
| 16930 | +++ b/gas/testsuite/gas/avr32/fpinsn.s |
| 16931 | @@ -0,0 +1,266 @@ |
| 16932 | + |
| 16933 | + .text |
| 16934 | + .global fadd_s |
| 16935 | +fadd_s: |
| 16936 | + fadd.s fr15, fr15, fr15 |
| 16937 | + fadd.s fr0, fr0, fr0 |
| 16938 | + fadd.s fr0, fr15, fr15 |
| 16939 | + fadd.s fr15, fr0, fr15 |
| 16940 | + fadd.s fr15, fr15, fr0 |
| 16941 | + fadd.s fr7, fr8, fr8 |
| 16942 | + fadd.s fr8, fr7, fr8 |
| 16943 | + fadd.s fr8, fr8, fr7 |
| 16944 | + .global fsub_s |
| 16945 | +fsub_s: |
| 16946 | + fsub.s fr15, fr15, fr15 |
| 16947 | + fsub.s fr0, fr0, fr0 |
| 16948 | + fsub.s fr0, fr15, fr15 |
| 16949 | + fsub.s fr15, fr0, fr15 |
| 16950 | + fsub.s fr15, fr15, fr0 |
| 16951 | + fsub.s fr7, fr8, fr8 |
| 16952 | + fsub.s fr8, fr7, fr8 |
| 16953 | + fsub.s fr8, fr8, fr7 |
| 16954 | + .global fmac_s |
| 16955 | +fmac_s: |
| 16956 | + fmac.s fr15, fr15, fr15 |
| 16957 | + fmac.s fr0, fr0, fr0 |
| 16958 | + fmac.s fr0, fr15, fr15 |
| 16959 | + fmac.s fr15, fr0, fr15 |
| 16960 | + fmac.s fr15, fr15, fr0 |
| 16961 | + fmac.s fr7, fr8, fr8 |
| 16962 | + fmac.s fr8, fr7, fr8 |
| 16963 | + fmac.s fr8, fr8, fr7 |
| 16964 | + .global fnmac_s |
| 16965 | +fnmac_s: |
| 16966 | + fnmac.s fr15, fr15, fr15 |
| 16967 | + fnmac.s fr0, fr0, fr0 |
| 16968 | + fnmac.s fr0, fr15, fr15 |
| 16969 | + fnmac.s fr15, fr0, fr15 |
| 16970 | + fnmac.s fr15, fr15, fr0 |
| 16971 | + fnmac.s fr7, fr8, fr8 |
| 16972 | + fnmac.s fr8, fr7, fr8 |
| 16973 | + fnmac.s fr8, fr8, fr7 |
| 16974 | + .global fmsc_s |
| 16975 | +fmsc_s: |
| 16976 | + fmsc.s fr15, fr15, fr15 |
| 16977 | + fmsc.s fr0, fr0, fr0 |
| 16978 | + fmsc.s fr0, fr15, fr15 |
| 16979 | + fmsc.s fr15, fr0, fr15 |
| 16980 | + fmsc.s fr15, fr15, fr0 |
| 16981 | + fmsc.s fr7, fr8, fr8 |
| 16982 | + fmsc.s fr8, fr7, fr8 |
| 16983 | + fmsc.s fr8, fr8, fr7 |
| 16984 | + .global fnmsc_s |
| 16985 | +fnmsc_s: |
| 16986 | + fnmsc.s fr15, fr15, fr15 |
| 16987 | + fnmsc.s fr0, fr0, fr0 |
| 16988 | + fnmsc.s fr0, fr15, fr15 |
| 16989 | + fnmsc.s fr15, fr0, fr15 |
| 16990 | + fnmsc.s fr15, fr15, fr0 |
| 16991 | + fnmsc.s fr7, fr8, fr8 |
| 16992 | + fnmsc.s fr8, fr7, fr8 |
| 16993 | + fnmsc.s fr8, fr8, fr7 |
| 16994 | + .global fmul_s |
| 16995 | +fmul_s: |
| 16996 | + fmul.s fr15, fr15, fr15 |
| 16997 | + fmul.s fr0, fr0, fr0 |
| 16998 | + fmul.s fr0, fr15, fr15 |
| 16999 | + fmul.s fr15, fr0, fr15 |
| 17000 | + fmul.s fr15, fr15, fr0 |
| 17001 | + fmul.s fr7, fr8, fr8 |
| 17002 | + fmul.s fr8, fr7, fr8 |
| 17003 | + fmul.s fr8, fr8, fr7 |
| 17004 | + .global fnmul_s |
| 17005 | +fnmul_s: |
| 17006 | + fnmul.s fr15, fr15, fr15 |
| 17007 | + fnmul.s fr0, fr0, fr0 |
| 17008 | + fnmul.s fr0, fr15, fr15 |
| 17009 | + fnmul.s fr15, fr0, fr15 |
| 17010 | + fnmul.s fr15, fr15, fr0 |
| 17011 | + fnmul.s fr7, fr8, fr8 |
| 17012 | + fnmul.s fr8, fr7, fr8 |
| 17013 | + fnmul.s fr8, fr8, fr7 |
| 17014 | + .global fneg_s |
| 17015 | +fneg_s: |
| 17016 | + fneg.s fr15, fr15 |
| 17017 | + fneg.s fr0, fr0 |
| 17018 | + fneg.s fr0, fr15 |
| 17019 | + fneg.s fr15, fr0 |
| 17020 | + fneg.s fr7, fr8 |
| 17021 | + fneg.s fr8, fr7 |
| 17022 | + .global fabs_s |
| 17023 | +fabs_s: |
| 17024 | + fabs.s fr15, fr15 |
| 17025 | + fabs.s fr0, fr0 |
| 17026 | + fabs.s fr0, fr15 |
| 17027 | + fabs.s fr15, fr0 |
| 17028 | + fabs.s fr7, fr8 |
| 17029 | + fabs.s fr8, fr7 |
| 17030 | + .global fcmp_s |
| 17031 | +fcmp_s: |
| 17032 | + fcmp.s fr15, fr15 |
| 17033 | + fcmp.s fr0, fr0 |
| 17034 | + fcmp.s fr0, fr15 |
| 17035 | + fcmp.s fr15, fr0 |
| 17036 | + fcmp.s fr7, fr8 |
| 17037 | + fcmp.s fr8, fr7 |
| 17038 | + .global fadd_d |
| 17039 | +fadd_d: |
| 17040 | + fadd.d fr14, fr14, fr14 |
| 17041 | + fadd.d fr0, fr0, fr0 |
| 17042 | + fadd.d fr0, fr14, fr14 |
| 17043 | + fadd.d fr14, fr0, fr14 |
| 17044 | + fadd.d fr14, fr14, fr0 |
| 17045 | + fadd.d fr6, fr8, fr8 |
| 17046 | + fadd.d fr8, fr6, fr8 |
| 17047 | + fadd.d fr8, fr8, fr6 |
| 17048 | + .global fsub_d |
| 17049 | +fsub_d: |
| 17050 | + fsub.d fr14, fr14, fr14 |
| 17051 | + fsub.d fr0, fr0, fr0 |
| 17052 | + fsub.d fr0, fr14, fr14 |
| 17053 | + fsub.d fr14, fr0, fr14 |
| 17054 | + fsub.d fr14, fr14, fr0 |
| 17055 | + fsub.d fr6, fr8, fr8 |
| 17056 | + fsub.d fr8, fr6, fr8 |
| 17057 | + fsub.d fr8, fr8, fr6 |
| 17058 | + .global fmac_d |
| 17059 | +fmac_d: |
| 17060 | + fmac.d fr14, fr14, fr14 |
| 17061 | + fmac.d fr0, fr0, fr0 |
| 17062 | + fmac.d fr0, fr14, fr14 |
| 17063 | + fmac.d fr14, fr0, fr14 |
| 17064 | + fmac.d fr14, fr14, fr0 |
| 17065 | + fmac.d fr6, fr8, fr8 |
| 17066 | + fmac.d fr8, fr6, fr8 |
| 17067 | + fmac.d fr8, fr8, fr6 |
| 17068 | + .global fnmac_d |
| 17069 | +fnmac_d: |
| 17070 | + fnmac.d fr14, fr14, fr14 |
| 17071 | + fnmac.d fr0, fr0, fr0 |
| 17072 | + fnmac.d fr0, fr14, fr14 |
| 17073 | + fnmac.d fr14, fr0, fr14 |
| 17074 | + fnmac.d fr14, fr14, fr0 |
| 17075 | + fnmac.d fr6, fr8, fr8 |
| 17076 | + fnmac.d fr8, fr6, fr8 |
| 17077 | + fnmac.d fr8, fr8, fr6 |
| 17078 | + .global fmsc_d |
| 17079 | +fmsc_d: |
| 17080 | + fmsc.d fr14, fr14, fr14 |
| 17081 | + fmsc.d fr0, fr0, fr0 |
| 17082 | + fmsc.d fr0, fr14, fr14 |
| 17083 | + fmsc.d fr14, fr0, fr14 |
| 17084 | + fmsc.d fr14, fr14, fr0 |
| 17085 | + fmsc.d fr6, fr8, fr8 |
| 17086 | + fmsc.d fr8, fr6, fr8 |
| 17087 | + fmsc.d fr8, fr8, fr6 |
| 17088 | + .global fnmsc_d |
| 17089 | +fnmsc_d: |
| 17090 | + fnmsc.d fr14, fr14, fr14 |
| 17091 | + fnmsc.d fr0, fr0, fr0 |
| 17092 | + fnmsc.d fr0, fr14, fr14 |
| 17093 | + fnmsc.d fr14, fr0, fr14 |
| 17094 | + fnmsc.d fr14, fr14, fr0 |
| 17095 | + fnmsc.d fr6, fr8, fr8 |
| 17096 | + fnmsc.d fr8, fr6, fr8 |
| 17097 | + fnmsc.d fr8, fr8, fr6 |
| 17098 | + .global fmul_d |
| 17099 | +fmul_d: |
| 17100 | + fmul.d fr14, fr14, fr14 |
| 17101 | + fmul.d fr0, fr0, fr0 |
| 17102 | + fmul.d fr0, fr14, fr14 |
| 17103 | + fmul.d fr14, fr0, fr14 |
| 17104 | + fmul.d fr14, fr14, fr0 |
| 17105 | + fmul.d fr6, fr8, fr8 |
| 17106 | + fmul.d fr8, fr6, fr8 |
| 17107 | + fmul.d fr8, fr8, fr6 |
| 17108 | + .global fnmul_d |
| 17109 | +fnmul_d: |
| 17110 | + fnmul.d fr14, fr14, fr14 |
| 17111 | + fnmul.d fr0, fr0, fr0 |
| 17112 | + fnmul.d fr0, fr14, fr14 |
| 17113 | + fnmul.d fr14, fr0, fr14 |
| 17114 | + fnmul.d fr14, fr14, fr0 |
| 17115 | + fnmul.d fr6, fr8, fr8 |
| 17116 | + fnmul.d fr8, fr6, fr8 |
| 17117 | + fnmul.d fr8, fr8, fr6 |
| 17118 | + .global fneg_d |
| 17119 | +fneg_d: |
| 17120 | + fneg.d fr14, fr14 |
| 17121 | + fneg.d fr0, fr0 |
| 17122 | + fneg.d fr0, fr14 |
| 17123 | + fneg.d fr14, fr0 |
| 17124 | + fneg.d fr6, fr8 |
| 17125 | + fneg.d fr8, fr6 |
| 17126 | + .global fabs_d |
| 17127 | +fabs_d: |
| 17128 | + fabs.d fr14, fr14 |
| 17129 | + fabs.d fr0, fr0 |
| 17130 | + fabs.d fr0, fr14 |
| 17131 | + fabs.d fr14, fr0 |
| 17132 | + fabs.d fr6, fr8 |
| 17133 | + fabs.d fr8, fr6 |
| 17134 | + .global fcmp_d |
| 17135 | +fcmp_d: |
| 17136 | + fcmp.d fr14, fr14 |
| 17137 | + fcmp.d fr0, fr0 |
| 17138 | + fcmp.d fr0, fr14 |
| 17139 | + fcmp.d fr14, fr0 |
| 17140 | + fcmp.d fr6, fr8 |
| 17141 | + fcmp.d fr8, fr6 |
| 17142 | + .global fmov_s |
| 17143 | +fmov_s: |
| 17144 | + fmov.s fr15, fr15 |
| 17145 | + fmov.s fr0, fr0 |
| 17146 | + fmov.s fr15, fr0 |
| 17147 | + fmov.s fr0, fr15 |
| 17148 | + fmov.s fr8, fr7 |
| 17149 | + fmov.s fr7, fr8 |
| 17150 | + fmov.s pc, fr15 |
| 17151 | + fmov.s r0, fr0 |
| 17152 | + fmov.s pc, fr0 |
| 17153 | + fmov.s r0, fr15 |
| 17154 | + fmov.s r8, fr7 |
| 17155 | + fmov.s r7, fr8 |
| 17156 | + fmov.s fr15, pc |
| 17157 | + fmov.s fr0, r0 |
| 17158 | + fmov.s fr15, r0 |
| 17159 | + fmov.s fr0, pc |
| 17160 | + fmov.s fr8, r7 |
| 17161 | + fmov.s fr7, r8 |
| 17162 | + .global fmov_d |
| 17163 | +fmov_d: |
| 17164 | + fmov.d fr14, fr14 |
| 17165 | + fmov.d fr0, fr0 |
| 17166 | + fmov.d fr14, fr0 |
| 17167 | + fmov.d fr0, fr14 |
| 17168 | + fmov.d fr8, fr6 |
| 17169 | + fmov.d fr6, fr8 |
| 17170 | + fmov.d lr, fr14 |
| 17171 | + fmov.d r0, fr0 |
| 17172 | + fmov.d lr, fr0 |
| 17173 | + fmov.d r0, fr14 |
| 17174 | + fmov.d r8, fr6 |
| 17175 | + fmov.d r6, fr8 |
| 17176 | + fmov.d fr14, lr |
| 17177 | + fmov.d fr0, r0 |
| 17178 | + fmov.d fr14, r0 |
| 17179 | + fmov.d fr0, lr |
| 17180 | + fmov.d fr8, r6 |
| 17181 | + fmov.d fr6, r8 |
| 17182 | + .global fcasts_d |
| 17183 | +fcasts_d: |
| 17184 | + fcasts.d fr15, fr14 |
| 17185 | + fcasts.d fr0, fr0 |
| 17186 | + fcasts.d fr15, fr0 |
| 17187 | + fcasts.d fr0, fr14 |
| 17188 | + fcasts.d fr8, fr6 |
| 17189 | + fcasts.d fr7, fr8 |
| 17190 | + .global fcastd_s |
| 17191 | +fcastd_s: |
| 17192 | + fcastd.s fr14, fr15 |
| 17193 | + fcastd.s fr0, fr0 |
| 17194 | + fcastd.s fr14, fr0 |
| 17195 | + fcastd.s fr0, fr15 |
| 17196 | + fcastd.s fr8, fr7 |
| 17197 | + fcastd.s fr6, fr8 |
| 17198 | --- /dev/null |
| 17199 | +++ b/gas/testsuite/gas/avr32/hwrd-lwrd.d |
| 17200 | @@ -0,0 +1,47 @@ |
| 17201 | +#as: |
| 17202 | +#objdump: -dr |
| 17203 | +#name: hwrd-lwrd |
| 17204 | + |
| 17205 | +.*: +file format .* |
| 17206 | + |
| 17207 | +Disassembly of section \.text: |
| 17208 | + |
| 17209 | +00000000 <test_hwrd>: |
| 17210 | + 0: e0 60 87 65 mov r0,34661 |
| 17211 | + 4: e0 60 12 34 mov r0,4660 |
| 17212 | + 8: e0 60 00 00 mov r0,0 |
| 17213 | + 8: R_AVR32_HI16 \.text\+0x60 |
| 17214 | + c: e0 60 00 00 mov r0,0 |
| 17215 | + c: R_AVR32_HI16 extsym1 |
| 17216 | + 10: ea 10 87 65 orh r0,0x8765 |
| 17217 | + 14: ea 10 12 34 orh r0,0x1234 |
| 17218 | + 18: ea 10 00 00 orh r0,0x0 |
| 17219 | + 18: R_AVR32_HI16 \.text\+0x60 |
| 17220 | + 1c: ea 10 00 00 orh r0,0x0 |
| 17221 | + 1c: R_AVR32_HI16 extsym1 |
| 17222 | + 20: e4 10 87 65 andh r0,0x8765 |
| 17223 | + 24: e4 10 12 34 andh r0,0x1234 |
| 17224 | + 28: e4 10 00 00 andh r0,0x0 |
| 17225 | + 28: R_AVR32_HI16 \.text\+0x60 |
| 17226 | + 2c: e4 10 00 00 andh r0,0x0 |
| 17227 | + 2c: R_AVR32_HI16 extsym1 |
| 17228 | + |
| 17229 | +00000030 <test_lwrd>: |
| 17230 | + 30: e0 60 43 21 mov r0,17185 |
| 17231 | + 34: e0 60 56 78 mov r0,22136 |
| 17232 | + 38: e0 60 00 00 mov r0,0 |
| 17233 | + 38: R_AVR32_LO16 \.text\+0x60 |
| 17234 | + 3c: e0 60 00 00 mov r0,0 |
| 17235 | + 3c: R_AVR32_LO16 extsym1 |
| 17236 | + 40: e8 10 43 21 orl r0,0x4321 |
| 17237 | + 44: e8 10 56 78 orl r0,0x5678 |
| 17238 | + 48: e8 10 00 00 orl r0,0x0 |
| 17239 | + 48: R_AVR32_LO16 \.text\+0x60 |
| 17240 | + 4c: e8 10 00 00 orl r0,0x0 |
| 17241 | + 4c: R_AVR32_LO16 extsym1 |
| 17242 | + 50: e0 10 43 21 andl r0,0x4321 |
| 17243 | + 54: e0 10 56 78 andl r0,0x5678 |
| 17244 | + 58: e0 10 00 00 andl r0,0x0 |
| 17245 | + 58: R_AVR32_LO16 \.text\+0x60 |
| 17246 | + 5c: e0 10 00 00 andl r0,0x0 |
| 17247 | + 5c: R_AVR32_LO16 extsym1 |
| 17248 | --- /dev/null |
| 17249 | +++ b/gas/testsuite/gas/avr32/hwrd-lwrd.s |
| 17250 | @@ -0,0 +1,39 @@ |
| 17251 | + |
| 17252 | + .equ sym1, 0x12345678 |
| 17253 | + |
| 17254 | + .text |
| 17255 | + .global test_hwrd |
| 17256 | +test_hwrd: |
| 17257 | + mov r0, hi(0x87654321) |
| 17258 | + mov r0, hi(sym1) |
| 17259 | + mov r0, hi(sym2) |
| 17260 | + mov r0, hi(extsym1) |
| 17261 | + |
| 17262 | + orh r0, hi(0x87654321) |
| 17263 | + orh r0, hi(sym1) |
| 17264 | + orh r0, hi(sym2) |
| 17265 | + orh r0, hi(extsym1) |
| 17266 | + |
| 17267 | + andh r0, hi(0x87654321) |
| 17268 | + andh r0, hi(sym1) |
| 17269 | + andh r0, hi(sym2) |
| 17270 | + andh r0, hi(extsym1) |
| 17271 | + |
| 17272 | + .global test_lwrd |
| 17273 | +test_lwrd: |
| 17274 | + mov r0, lo(0x87654321) |
| 17275 | + mov r0, lo(sym1) |
| 17276 | + mov r0, lo(sym2) |
| 17277 | + mov r0, lo(extsym1) |
| 17278 | + |
| 17279 | + orl r0, lo(0x87654321) |
| 17280 | + orl r0, lo(sym1) |
| 17281 | + orl r0, lo(sym2) |
| 17282 | + orl r0, lo(extsym1) |
| 17283 | + |
| 17284 | + andl r0, lo(0x87654321) |
| 17285 | + andl r0, lo(sym1) |
| 17286 | + andl r0, lo(sym2) |
| 17287 | + andl r0, lo(extsym1) |
| 17288 | + |
| 17289 | +sym2: |
| 17290 | --- /dev/null |
| 17291 | +++ b/gas/testsuite/gas/avr32/jmptable.d |
| 17292 | @@ -0,0 +1,20 @@ |
| 17293 | +#source: jmptable.s |
| 17294 | +#as: |
| 17295 | +#objdump: -dr |
| 17296 | +#name: jmptable |
| 17297 | + |
| 17298 | +.*: +file format .* |
| 17299 | + |
| 17300 | +Disassembly of section \.text: |
| 17301 | + |
| 17302 | +00000000 <jmptable_test>: |
| 17303 | + 0: fe c8 ff f4 sub r8,pc,-12 |
| 17304 | + 4: f0 00 00 2f add pc,r8,r0<<0x2 |
| 17305 | + 8: d7 03 nop |
| 17306 | + a: 00 00 add r0,r0 |
| 17307 | + c: c0 38 rjmp 12 <jmptable_test\+0x12> |
| 17308 | + e: c0 38 rjmp 14 <jmptable_test\+0x14> |
| 17309 | + 10: c0 38 rjmp 16 <jmptable_test\+0x16> |
| 17310 | + 12: d7 03 nop |
| 17311 | + 14: d7 03 nop |
| 17312 | + 16: d7 03 nop |
| 17313 | --- /dev/null |
| 17314 | +++ b/gas/testsuite/gas/avr32/jmptable_linkrelax.d |
| 17315 | @@ -0,0 +1,25 @@ |
| 17316 | +#source: jmptable.s |
| 17317 | +#as: --linkrelax |
| 17318 | +#objdump: -dr |
| 17319 | +#name: jmptable_linkrelax |
| 17320 | + |
| 17321 | +.*: +file format .* |
| 17322 | + |
| 17323 | +Disassembly of section \.text: |
| 17324 | + |
| 17325 | +00000000 <jmptable_test>: |
| 17326 | + 0: fe c8 00 00 sub r8,pc,0 |
| 17327 | + 0: R_AVR32_16N_PCREL \.text\+0xc |
| 17328 | + 4: f0 00 00 2f add pc,r8,r0<<0x2 |
| 17329 | + 8: d7 03 nop |
| 17330 | + a: 00 00 add r0,r0 |
| 17331 | + a: R_AVR32_ALIGN \*ABS\*\+0x2 |
| 17332 | + c: c0 08 rjmp c <jmptable_test\+0xc> |
| 17333 | + c: R_AVR32_11H_PCREL \.text\+0x12 |
| 17334 | + e: c0 08 rjmp e <jmptable_test\+0xe> |
| 17335 | + e: R_AVR32_11H_PCREL \.text\+0x14 |
| 17336 | + 10: c0 08 rjmp 10 <jmptable_test\+0x10> |
| 17337 | + 10: R_AVR32_11H_PCREL \.text\+0x16 |
| 17338 | + 12: d7 03 nop |
| 17339 | + 14: d7 03 nop |
| 17340 | + 16: d7 03 nop |
| 17341 | --- /dev/null |
| 17342 | +++ b/gas/testsuite/gas/avr32/jmptable.s |
| 17343 | @@ -0,0 +1,14 @@ |
| 17344 | + |
| 17345 | + .text |
| 17346 | + .global jmptable_test |
| 17347 | +jmptable_test: |
| 17348 | + sub r8, pc, -(.L1 - .) |
| 17349 | + add pc, r8, r0 << 2 |
| 17350 | + nop |
| 17351 | + .align 2 |
| 17352 | +.L1: rjmp 1f |
| 17353 | + rjmp 2f |
| 17354 | + rjmp 3f |
| 17355 | +1: nop |
| 17356 | +2: nop |
| 17357 | +3: nop |
| 17358 | --- /dev/null |
| 17359 | +++ b/gas/testsuite/gas/avr32/lda_nopic.d |
| 17360 | @@ -0,0 +1,32 @@ |
| 17361 | +#source: lda.s |
| 17362 | +#as: |
| 17363 | +#objdump: -dr |
| 17364 | +#name: lda_nopic |
| 17365 | + |
| 17366 | +.*: +file format .* |
| 17367 | + |
| 17368 | +Disassembly of section \.text: |
| 17369 | + |
| 17370 | +00000000 <lda_test>: |
| 17371 | + 0: f2 c8 00 00 sub r8,r9,0 |
| 17372 | + |
| 17373 | +00000004 <far_negative>: |
| 17374 | + 4: f6 ca 00 00 sub r10,r11,0 |
| 17375 | + ... |
| 17376 | + 8000: fe c0 7f fc sub r0,pc,32764 |
| 17377 | + 8004: 48 31 lddpc r1,8010 <far_negative\+0x800c> |
| 17378 | + 8006: 48 42 lddpc r2,8014 <far_negative\+0x8010> |
| 17379 | + 8008: 48 43 lddpc r3,8018 <far_negative\+0x8014> |
| 17380 | + 800a: 48 54 lddpc r4,801c <far_negative\+0x8018> |
| 17381 | + 800c: fe c5 80 04 sub r5,pc,-32764 |
| 17382 | + ... |
| 17383 | + 8010: R_AVR32_32_CPENT \.text |
| 17384 | + 8014: R_AVR32_32_CPENT \.data |
| 17385 | + 8018: R_AVR32_32_CPENT undefined |
| 17386 | + 801c: R_AVR32_32_CPENT \.text\+0x1001c |
| 17387 | + |
| 17388 | +00010008 <far_positive>: |
| 17389 | + 10008: fa cc 00 00 sub r12,sp,0 |
| 17390 | + ... |
| 17391 | +0001001c <toofar_positive>: |
| 17392 | + 1001c: fe ce 00 00 sub lr,pc,0 |
| 17393 | --- /dev/null |
| 17394 | +++ b/gas/testsuite/gas/avr32/lda_nopic_linkrelax.d |
| 17395 | @@ -0,0 +1,41 @@ |
| 17396 | +#source: lda.s |
| 17397 | +#as: --linkrelax |
| 17398 | +#objdump: -dr |
| 17399 | +#name: lda_nopic_linkrelax |
| 17400 | + |
| 17401 | +.*: +file format .* |
| 17402 | + |
| 17403 | +Disassembly of section \.text: |
| 17404 | + |
| 17405 | +00000000 <lda_test>: |
| 17406 | + 0: f2 c8 00 00 sub r8,r9,0 |
| 17407 | + |
| 17408 | +00000004 <far_negative>: |
| 17409 | + 4: f6 ca 00 00 sub r10,r11,0 |
| 17410 | + \.\.\. |
| 17411 | + 8000: 48 00 lddpc r0,8000 <far_negative\+0x7ffc> |
| 17412 | + 8000: R_AVR32_9W_CP \.text\+0x800c |
| 17413 | + 8002: 48 01 lddpc r1,8000 <far_negative\+0x7ffc> |
| 17414 | + 8002: R_AVR32_9W_CP \.text\+0x8010 |
| 17415 | + 8004: 48 02 lddpc r2,8004 <far_negative\+0x8000> |
| 17416 | + 8004: R_AVR32_9W_CP \.text\+0x8014 |
| 17417 | + 8006: 48 03 lddpc r3,8004 <far_negative\+0x8000> |
| 17418 | + 8006: R_AVR32_9W_CP \.text\+0x8018 |
| 17419 | + 8008: 48 04 lddpc r4,8008 <far_negative\+0x8004> |
| 17420 | + 8008: R_AVR32_9W_CP \.text\+0x801c |
| 17421 | + 800a: 48 05 lddpc r5,8008 <far_negative\+0x8004> |
| 17422 | + 800a: R_AVR32_9W_CP \.text\+0x8020 |
| 17423 | + \.\.\. |
| 17424 | + 800c: R_AVR32_ALIGN \*ABS\*\+0x2 |
| 17425 | + 800c: R_AVR32_32_CPENT \.text\+0x4 |
| 17426 | + 8010: R_AVR32_32_CPENT \.text |
| 17427 | + 8014: R_AVR32_32_CPENT \.data |
| 17428 | + 8018: R_AVR32_32_CPENT undefined |
| 17429 | + 801c: R_AVR32_32_CPENT \.text\+0x10020 |
| 17430 | + 8020: R_AVR32_32_CPENT \.text\+0x1000c |
| 17431 | + |
| 17432 | +0001000c <far_positive>: |
| 17433 | + 1000c: fa cc 00 00 sub r12,sp,0 |
| 17434 | + \.\.\. |
| 17435 | +00010020 <toofar_positive>: |
| 17436 | + 10020: fe ce 00 00 sub lr,pc,0 |
| 17437 | --- /dev/null |
| 17438 | +++ b/gas/testsuite/gas/avr32/lda_pic.d |
| 17439 | @@ -0,0 +1,32 @@ |
| 17440 | +#source: lda.s |
| 17441 | +#as: --pic |
| 17442 | +#objdump: -dr |
| 17443 | +#name: lda_pic |
| 17444 | + |
| 17445 | +.*: +file format .* |
| 17446 | + |
| 17447 | +Disassembly of section \.text: |
| 17448 | + |
| 17449 | +00000000 <lda_test>: |
| 17450 | + 0: f2 c8 00 00 sub r8,r9,0 |
| 17451 | + |
| 17452 | +00000004 <far_negative>: |
| 17453 | + 4: f6 ca 00 00 sub r10,r11,0 |
| 17454 | + ... |
| 17455 | + 8000: fe c0 7f fc sub r0,pc,32764 |
| 17456 | + 8004: ec f1 00 00 ld.w r1,r6\[0\] |
| 17457 | + 8004: R_AVR32_GOT16S toofar_negative |
| 17458 | + 8008: ec f2 00 00 ld.w r2,r6\[0\] |
| 17459 | + 8008: R_AVR32_GOT16S different_section |
| 17460 | + 800c: ec f3 00 00 ld.w r3,r6\[0\] |
| 17461 | + 800c: R_AVR32_GOT16S undefined |
| 17462 | + 8010: ec f4 00 00 ld.w r4,r6\[0\] |
| 17463 | + 8010: R_AVR32_GOT16S toofar_positive |
| 17464 | + 8014: fe c5 80 14 sub r5,pc,-32748 |
| 17465 | + ... |
| 17466 | + |
| 17467 | +00010000 <far_positive>: |
| 17468 | + 10000: fa cc 00 00 sub r12,sp,0 |
| 17469 | + ... |
| 17470 | +00010014 <toofar_positive>: |
| 17471 | + 10014: fe ce 00 00 sub lr,pc,0 |
| 17472 | --- /dev/null |
| 17473 | +++ b/gas/testsuite/gas/avr32/lda_pic_linkrelax.d |
| 17474 | @@ -0,0 +1,40 @@ |
| 17475 | +#source: lda.s |
| 17476 | +#as: --pic --linkrelax |
| 17477 | +#objdump: -dr |
| 17478 | +#name: lda_pic_linkrelax |
| 17479 | + |
| 17480 | +.*: +file format .* |
| 17481 | + |
| 17482 | +Disassembly of section \.text: |
| 17483 | + |
| 17484 | +00000000 <lda_test>: |
| 17485 | + 0: f2 c8 00 00 sub r8,r9,0 |
| 17486 | + |
| 17487 | +00000004 <far_negative>: |
| 17488 | + 4: f6 ca 00 00 sub r10,r11,0 |
| 17489 | + ... |
| 17490 | + 8000: e0 60 00 00 mov r0,0 |
| 17491 | + 8000: R_AVR32_LDA_GOT far_negative |
| 17492 | + 8004: ec 00 03 20 ld\.w r0,r6\[r0<<0x2\] |
| 17493 | + 8008: e0 61 00 00 mov r1,0 |
| 17494 | + 8008: R_AVR32_LDA_GOT toofar_negative |
| 17495 | + 800c: ec 01 03 21 ld\.w r1,r6\[r1<<0x2\] |
| 17496 | + 8010: e0 62 00 00 mov r2,0 |
| 17497 | + 8010: R_AVR32_LDA_GOT different_section |
| 17498 | + 8014: ec 02 03 22 ld\.w r2,r6\[r2<<0x2\] |
| 17499 | + 8018: e0 63 00 00 mov r3,0 |
| 17500 | + 8018: R_AVR32_LDA_GOT undefined |
| 17501 | + 801c: ec 03 03 23 ld\.w r3,r6\[r3<<0x2\] |
| 17502 | + 8020: e0 64 00 00 mov r4,0 |
| 17503 | + 8020: R_AVR32_LDA_GOT toofar_positive |
| 17504 | + 8024: ec 04 03 24 ld\.w r4,r6\[r4<<0x2\] |
| 17505 | + 8028: e0 65 00 00 mov r5,0 |
| 17506 | + 8028: R_AVR32_LDA_GOT far_positive |
| 17507 | + 802c: ec 05 03 25 ld\.w r5,r6\[r5<<0x2\] |
| 17508 | + ... |
| 17509 | + |
| 17510 | +00010018 <far_positive>: |
| 17511 | + 10018: fa cc 00 00 sub r12,sp,0 |
| 17512 | + ... |
| 17513 | +0001002c <toofar_positive>: |
| 17514 | + 1002c: fe ce 00 00 sub lr,pc,0 |
| 17515 | --- /dev/null |
| 17516 | +++ b/gas/testsuite/gas/avr32/lda.s |
| 17517 | @@ -0,0 +1,30 @@ |
| 17518 | + |
| 17519 | + .text |
| 17520 | + .global lda_test |
| 17521 | +lda_test: |
| 17522 | +toofar_negative: |
| 17523 | + sub r8, r9, 0 |
| 17524 | +far_negative: |
| 17525 | + sub r10, r11, 0 |
| 17526 | + |
| 17527 | + .fill 32760, 1, 0x00 |
| 17528 | + |
| 17529 | + lda.w r0, far_negative |
| 17530 | + lda.w r1, toofar_negative |
| 17531 | + lda.w r2, different_section |
| 17532 | + lda.w r3, undefined |
| 17533 | + lda.w r4, toofar_positive |
| 17534 | + lda.w r5, far_positive |
| 17535 | + |
| 17536 | + .cpool |
| 17537 | + |
| 17538 | + .fill 32744, 1, 0x00 |
| 17539 | +far_positive: |
| 17540 | + sub r12, sp, 0 |
| 17541 | + .fill 16, 1, 0x00 |
| 17542 | +toofar_positive: |
| 17543 | + sub lr, pc, 0 |
| 17544 | + |
| 17545 | + .data |
| 17546 | +different_section: |
| 17547 | + .long 0x12345678 |
| 17548 | --- /dev/null |
| 17549 | +++ b/gas/testsuite/gas/avr32/pcrel.d |
| 17550 | @@ -0,0 +1,64 @@ |
| 17551 | +#as: |
| 17552 | +#objdump: -dr |
| 17553 | +#name: pcrel |
| 17554 | + |
| 17555 | +.*: +file format .* |
| 17556 | + |
| 17557 | +Disassembly of section \.text: |
| 17558 | + |
| 17559 | +00000000 <test_rjmp>: |
| 17560 | + 0: d7 03 nop |
| 17561 | + 2: c0 28 rjmp 6 <test_rjmp\+0x6> |
| 17562 | + 4: d7 03 nop |
| 17563 | + 6: e0 8f 00 00 bral 6 <test_rjmp\+0x6> |
| 17564 | + 6: R_AVR32_22H_PCREL extsym10 |
| 17565 | + |
| 17566 | +0000000a <test_rcall>: |
| 17567 | + a: d7 03 nop |
| 17568 | +0000000c <test_rcall2>: |
| 17569 | + c: c0 2c rcall 10 <test_rcall2\+0x4> |
| 17570 | + e: d7 03 nop |
| 17571 | + 10: e0 a0 00 00 rcall 10 <test_rcall2\+0x4> |
| 17572 | + 10: R_AVR32_22H_PCREL extsym21 |
| 17573 | + |
| 17574 | +00000014 <test_branch>: |
| 17575 | + 14: c0 31 brne 1a <test_branch\+0x6> |
| 17576 | + 16: e0 8f 00 00 bral 16 <test_branch\+0x2> |
| 17577 | + 16: R_AVR32_22H_PCREL test_branch |
| 17578 | + 1a: e0 80 00 00 breq 1a <test_branch\+0x6> |
| 17579 | + 1a: R_AVR32_22H_PCREL extsym21 |
| 17580 | + |
| 17581 | +0000001e <test_lddpc>: |
| 17582 | + 1e: 48 30 lddpc r0,28 <sym1> |
| 17583 | + 20: 48 20 lddpc r0,28 <sym1> |
| 17584 | + 22: fe f0 00 00 ld.w r0,pc\[0\] |
| 17585 | + 22: R_AVR32_16B_PCREL extsym16 |
| 17586 | + \.\.\. |
| 17587 | + |
| 17588 | +00000028 <sym1>: |
| 17589 | + 28: d7 03 nop |
| 17590 | + 2a: d7 03 nop |
| 17591 | + |
| 17592 | +0000002c <test_local>: |
| 17593 | + 2c: 48 20 lddpc r0,34 <test_local\+0x8> |
| 17594 | + 2e: 48 30 lddpc r0,38 <test_local\+0xc> |
| 17595 | + 30: 48 20 lddpc r0,38 <test_local\+0xc> |
| 17596 | + 32: 00 00 add r0,r0 |
| 17597 | + 34: d7 03 nop |
| 17598 | + 36: d7 03 nop |
| 17599 | + 38: d7 03 nop |
| 17600 | + 3a: d7 03 nop |
| 17601 | + |
| 17602 | +Disassembly of section \.text\.init: |
| 17603 | + |
| 17604 | +00000000 <test_inter_section>: |
| 17605 | + 0: e0 a0 .. .. rcall [0-9a-f]+ <.*> |
| 17606 | + 0: R_AVR32_22H_PCREL test_rcall |
| 17607 | + 4: d7 03 nop |
| 17608 | + 6: e0 a0 .. .. rcall [0-9a-f]+ <.*> |
| 17609 | + 6: R_AVR32_22H_PCREL test_rcall |
| 17610 | + a: e0 a0 .. .. rcall [0-9a-z]+ <.*> |
| 17611 | + a: R_AVR32_22H_PCREL \.text\+0xc |
| 17612 | + e: d7 03 nop |
| 17613 | + 10: e0 a0 .. .. rcall [0-9a-f]+ <.*> |
| 17614 | + 10: R_AVR32_22H_PCREL \.text\+0xc |
| 17615 | --- /dev/null |
| 17616 | +++ b/gas/testsuite/gas/avr32/pcrel.s |
| 17617 | @@ -0,0 +1,57 @@ |
| 17618 | + |
| 17619 | + .text |
| 17620 | + .global test_rjmp |
| 17621 | +test_rjmp: |
| 17622 | + nop |
| 17623 | + rjmp 0f |
| 17624 | + nop |
| 17625 | +0: rjmp extsym10 |
| 17626 | + |
| 17627 | + .global test_rcall |
| 17628 | +test_rcall: |
| 17629 | + nop |
| 17630 | +test_rcall2: |
| 17631 | + rcall 0f |
| 17632 | + nop |
| 17633 | +0: rcall extsym21 |
| 17634 | + |
| 17635 | + .global test_branch |
| 17636 | +test_branch: |
| 17637 | + brne 0f |
| 17638 | + /* This will generate a reloc since test_branch is global */ |
| 17639 | + bral test_branch |
| 17640 | +0: breq extsym21 |
| 17641 | + |
| 17642 | + .global test_lddpc |
| 17643 | +test_lddpc: |
| 17644 | + lddpc r0,sym1 |
| 17645 | + lddpc r0,sym1 |
| 17646 | + lddpc r0,extsym16 |
| 17647 | + |
| 17648 | + .align 2 |
| 17649 | +sym1: nop |
| 17650 | + nop |
| 17651 | + |
| 17652 | + .global test_local |
| 17653 | +test_local: |
| 17654 | + lddpc r0, .LC1 |
| 17655 | + lddpc r0, .LC2 |
| 17656 | + lddpc r0, .LC1 + 0x4 |
| 17657 | + |
| 17658 | + .align 2 |
| 17659 | +.LC1: |
| 17660 | + nop |
| 17661 | + nop |
| 17662 | +.LC2: |
| 17663 | + nop |
| 17664 | + nop |
| 17665 | + |
| 17666 | + .section .text.init,"ax" |
| 17667 | + .global test_inter_section |
| 17668 | +test_inter_section: |
| 17669 | + rcall test_rcall |
| 17670 | + nop |
| 17671 | + rcall test_rcall |
| 17672 | + rcall test_rcall2 |
| 17673 | + nop |
| 17674 | + rcall test_rcall2 |
| 17675 | --- /dev/null |
| 17676 | +++ b/gas/testsuite/gas/avr32/pico.d |
| 17677 | @@ -0,0 +1,149 @@ |
| 17678 | +#as: |
| 17679 | +#objdump: -dr |
| 17680 | +#name: pico |
| 17681 | + |
| 17682 | +.*: +file format .* |
| 17683 | + |
| 17684 | +Disassembly of section \.text: |
| 17685 | + |
| 17686 | +[0-9a-f]* <picosvmac>: |
| 17687 | + *[0-9a-f]*: e1 a6 20 00 cop cp1,cr0,cr0,cr0,0xc |
| 17688 | + *[0-9a-f]*: e1 a7 2b bb cop cp1,cr11,cr11,cr11,0xe |
| 17689 | + *[0-9a-f]*: e1 a6 3a 05 cop cp1,cr10,cr0,cr5,0xd |
| 17690 | + *[0-9a-f]*: e1 a7 36 90 cop cp1,cr6,cr9,cr0,0xf |
| 17691 | + |
| 17692 | +[0-9a-f]* <picosvmul>: |
| 17693 | + *[0-9a-f]*: e1 a4 20 00 cop cp1,cr0,cr0,cr0,0x8 |
| 17694 | + *[0-9a-f]*: e1 a5 2b bb cop cp1,cr11,cr11,cr11,0xa |
| 17695 | + *[0-9a-f]*: e1 a4 3a 05 cop cp1,cr10,cr0,cr5,0x9 |
| 17696 | + *[0-9a-f]*: e1 a5 36 90 cop cp1,cr6,cr9,cr0,0xb |
| 17697 | + |
| 17698 | +[0-9a-f]* <picovmac>: |
| 17699 | + *[0-9a-f]*: e1 a2 20 00 cop cp1,cr0,cr0,cr0,0x4 |
| 17700 | + *[0-9a-f]*: e1 a3 2b bb cop cp1,cr11,cr11,cr11,0x6 |
| 17701 | + *[0-9a-f]*: e1 a2 3a 05 cop cp1,cr10,cr0,cr5,0x5 |
| 17702 | + *[0-9a-f]*: e1 a3 36 90 cop cp1,cr6,cr9,cr0,0x7 |
| 17703 | + |
| 17704 | +[0-9a-f]* <picovmul>: |
| 17705 | + *[0-9a-f]*: e1 a0 20 00 cop cp1,cr0,cr0,cr0,0x0 |
| 17706 | + *[0-9a-f]*: e1 a1 2b bb cop cp1,cr11,cr11,cr11,0x2 |
| 17707 | + *[0-9a-f]*: e1 a0 3a 05 cop cp1,cr10,cr0,cr5,0x1 |
| 17708 | + *[0-9a-f]*: e1 a1 36 90 cop cp1,cr6,cr9,cr0,0x3 |
| 17709 | + |
| 17710 | +[0-9a-f]* <picold_d>: |
| 17711 | + *[0-9a-f]*: e9 af 3e ff ldc\.d cp1,cr14,pc\[0x3fc\] |
| 17712 | + *[0-9a-f]*: e9 a0 30 ff ldc\.d cp1,cr0,r0\[0x3fc\] |
| 17713 | + *[0-9a-f]*: e9 a0 30 00 ldc\.d cp1,cr0,r0\[0x0\] |
| 17714 | + *[0-9a-f]*: ef a8 26 50 ldc\.d cp1,cr6,--r8 |
| 17715 | + *[0-9a-f]*: ef a7 28 50 ldc\.d cp1,cr8,--r7 |
| 17716 | + *[0-9a-f]*: ef aa 32 65 ldc\.d cp1,cr2,r10\[r5<<0x2\] |
| 17717 | + *[0-9a-f]*: ef a3 3c 46 ldc\.d cp1,cr12,r3\[r6\] |
| 17718 | + |
| 17719 | +[0-9a-f]* <picold_w>: |
| 17720 | + *[0-9a-f]*: e9 af 2f ff ldc\.w cp1,cr15,pc\[0x3fc\] |
| 17721 | + *[0-9a-f]*: e9 a0 20 ff ldc\.w cp1,cr0,r0\[0x3fc\] |
| 17722 | + *[0-9a-f]*: e9 a0 20 00 ldc\.w cp1,cr0,r0\[0x0\] |
| 17723 | + *[0-9a-f]*: ef a8 27 40 ldc\.w cp1,cr7,--r8 |
| 17724 | + *[0-9a-f]*: ef a7 28 40 ldc\.w cp1,cr8,--r7 |
| 17725 | + *[0-9a-f]*: ef aa 31 25 ldc\.w cp1,cr1,r10\[r5<<0x2\] |
| 17726 | + *[0-9a-f]*: ef a3 3d 06 ldc\.w cp1,cr13,r3\[r6\] |
| 17727 | + |
| 17728 | +[0-9a-f]* <picoldm_d>: |
| 17729 | + *[0-9a-f]*: ed af 24 ff ldcm\.d cp1,pc,cr0-cr15 |
| 17730 | + *[0-9a-f]*: ed a0 24 01 ldcm\.d cp1,r0,cr0-cr1 |
| 17731 | + *[0-9a-f]*: ed a7 24 80 ldcm\.d cp1,r7,cr14-cr15 |
| 17732 | + *[0-9a-f]*: ed a8 24 7f ldcm\.d cp1,r8,cr0-cr13 |
| 17733 | + |
| 17734 | +[0-9a-f]* <picoldm_d_pu>: |
| 17735 | + *[0-9a-f]*: ed af 34 ff ldcm\.d cp1,pc\+\+,cr0-cr15 |
| 17736 | + *[0-9a-f]*: ed a0 34 01 ldcm\.d cp1,r0\+\+,cr0-cr1 |
| 17737 | + *[0-9a-f]*: ed a7 34 80 ldcm\.d cp1,r7\+\+,cr14-cr15 |
| 17738 | + *[0-9a-f]*: ed a8 34 7f ldcm\.d cp1,r8\+\+,cr0-cr13 |
| 17739 | + |
| 17740 | +[0-9a-f]* <picoldm_w>: |
| 17741 | + *[0-9a-f]*: ed af 20 ff ldcm\.w cp1,pc,cr0-cr7 |
| 17742 | + *[0-9a-f]*: ed a0 20 01 ldcm\.w cp1,r0,cr0 |
| 17743 | + *[0-9a-f]*: ed a7 20 80 ldcm\.w cp1,r7,cr7 |
| 17744 | + *[0-9a-f]*: ed a8 20 7f ldcm\.w cp1,r8,cr0-cr6 |
| 17745 | + *[0-9a-f]*: ed af 21 ff ldcm\.w cp1,pc,cr8-cr15 |
| 17746 | + *[0-9a-f]*: ed a0 21 01 ldcm\.w cp1,r0,cr8 |
| 17747 | + *[0-9a-f]*: ed a7 21 80 ldcm\.w cp1,r7,cr15 |
| 17748 | + *[0-9a-f]*: ed a8 21 7f ldcm\.w cp1,r8,cr8-cr14 |
| 17749 | + |
| 17750 | +[0-9a-f]* <picoldm_w_pu>: |
| 17751 | + *[0-9a-f]*: ed af 30 ff ldcm\.w cp1,pc\+\+,cr0-cr7 |
| 17752 | + *[0-9a-f]*: ed a0 30 01 ldcm\.w cp1,r0\+\+,cr0 |
| 17753 | + *[0-9a-f]*: ed a7 30 80 ldcm\.w cp1,r7\+\+,cr7 |
| 17754 | + *[0-9a-f]*: ed a8 30 7f ldcm\.w cp1,r8\+\+,cr0-cr6 |
| 17755 | + *[0-9a-f]*: ed af 31 ff ldcm\.w cp1,pc\+\+,cr8-cr15 |
| 17756 | + *[0-9a-f]*: ed a0 31 01 ldcm\.w cp1,r0\+\+,cr8 |
| 17757 | + *[0-9a-f]*: ed a7 31 80 ldcm\.w cp1,r7\+\+,cr15 |
| 17758 | + *[0-9a-f]*: ed a8 31 7f ldcm\.w cp1,r8\+\+,cr8-cr14 |
| 17759 | + |
| 17760 | +[0-9a-f]* <picomv_d>: |
| 17761 | + *[0-9a-f]*: ef ae 2e 30 mvrc\.d cp1,cr14,lr |
| 17762 | + *[0-9a-f]*: ef a0 20 30 mvrc\.d cp1,cr0,r0 |
| 17763 | + *[0-9a-f]*: ef a8 26 30 mvrc\.d cp1,cr6,r8 |
| 17764 | + *[0-9a-f]*: ef a6 28 30 mvrc\.d cp1,cr8,r6 |
| 17765 | + *[0-9a-f]*: ef ae 2e 10 mvcr\.d cp1,lr,cr14 |
| 17766 | + *[0-9a-f]*: ef a0 20 10 mvcr\.d cp1,r0,cr0 |
| 17767 | + *[0-9a-f]*: ef a8 26 10 mvcr\.d cp1,r8,cr6 |
| 17768 | + *[0-9a-f]*: ef a6 28 10 mvcr\.d cp1,r6,cr8 |
| 17769 | + |
| 17770 | +[0-9a-f]* <picomv_w>: |
| 17771 | + *[0-9a-f]*: ef af 2f 20 mvrc\.w cp1,cr15,pc |
| 17772 | + *[0-9a-f]*: ef a0 20 20 mvrc\.w cp1,cr0,r0 |
| 17773 | + *[0-9a-f]*: ef a8 27 20 mvrc\.w cp1,cr7,r8 |
| 17774 | + *[0-9a-f]*: ef a7 28 20 mvrc\.w cp1,cr8,r7 |
| 17775 | + *[0-9a-f]*: ef af 2f 00 mvcr\.w cp1,pc,cr15 |
| 17776 | + *[0-9a-f]*: ef a0 20 00 mvcr\.w cp1,r0,cr0 |
| 17777 | + *[0-9a-f]*: ef a8 27 00 mvcr\.w cp1,r8,cr7 |
| 17778 | + *[0-9a-f]*: ef a7 28 00 mvcr\.w cp1,r7,cr8 |
| 17779 | + |
| 17780 | +[0-9a-f]* <picost_d>: |
| 17781 | + *[0-9a-f]*: eb af 3e ff stc\.d cp1,pc\[0x3fc\],cr14 |
| 17782 | + *[0-9a-f]*: eb a0 30 00 stc\.d cp1,r0\[0x0\],cr0 |
| 17783 | + *[0-9a-f]*: ef a8 26 70 stc\.d cp1,r8\+\+,cr6 |
| 17784 | + *[0-9a-f]*: ef a7 28 70 stc\.d cp1,r7\+\+,cr8 |
| 17785 | + *[0-9a-f]*: ef aa 32 e5 stc\.d cp1,r10\[r5<<0x2\],cr2 |
| 17786 | + *[0-9a-f]*: ef a3 3c c6 stc\.d cp1,r3\[r6\],cr12 |
| 17787 | + |
| 17788 | +[0-9a-f]* <picost_w>: |
| 17789 | + *[0-9a-f]*: eb af 2f ff stc\.w cp1,pc\[0x3fc\],cr15 |
| 17790 | + *[0-9a-f]*: eb a0 20 00 stc\.w cp1,r0\[0x0\],cr0 |
| 17791 | + *[0-9a-f]*: ef a8 27 60 stc\.w cp1,r8\+\+,cr7 |
| 17792 | + *[0-9a-f]*: ef a7 28 60 stc\.w cp1,r7\+\+,cr8 |
| 17793 | + *[0-9a-f]*: ef aa 31 a5 stc\.w cp1,r10\[r5<<0x2\],cr1 |
| 17794 | + *[0-9a-f]*: ef a3 3d 86 stc\.w cp1,r3\[r6\],cr13 |
| 17795 | + |
| 17796 | +[0-9a-f]* <picostm_d>: |
| 17797 | + *[0-9a-f]*: ed af 25 ff stcm\.d cp1,pc,cr0-cr15 |
| 17798 | + *[0-9a-f]*: ed a0 25 01 stcm\.d cp1,r0,cr0-cr1 |
| 17799 | + *[0-9a-f]*: ed a7 25 80 stcm\.d cp1,r7,cr14-cr15 |
| 17800 | + *[0-9a-f]*: ed a8 25 7f stcm\.d cp1,r8,cr0-cr13 |
| 17801 | + |
| 17802 | +[0-9a-f]* <picostm_d_pu>: |
| 17803 | + *[0-9a-f]*: ed af 35 ff stcm\.d cp1,--pc,cr0-cr15 |
| 17804 | + *[0-9a-f]*: ed a0 35 01 stcm\.d cp1,--r0,cr0-cr1 |
| 17805 | + *[0-9a-f]*: ed a7 35 80 stcm\.d cp1,--r7,cr14-cr15 |
| 17806 | + *[0-9a-f]*: ed a8 35 7f stcm\.d cp1,--r8,cr0-cr13 |
| 17807 | + |
| 17808 | +[0-9a-f]* <picostm_w>: |
| 17809 | + *[0-9a-f]*: ed af 22 ff stcm\.w cp1,pc,cr0-cr7 |
| 17810 | + *[0-9a-f]*: ed a0 22 01 stcm\.w cp1,r0,cr0 |
| 17811 | + *[0-9a-f]*: ed a7 22 80 stcm\.w cp1,r7,cr7 |
| 17812 | + *[0-9a-f]*: ed a8 22 7f stcm\.w cp1,r8,cr0-cr6 |
| 17813 | + *[0-9a-f]*: ed af 23 ff stcm\.w cp1,pc,cr8-cr15 |
| 17814 | + *[0-9a-f]*: ed a0 23 01 stcm\.w cp1,r0,cr8 |
| 17815 | + *[0-9a-f]*: ed a7 23 80 stcm\.w cp1,r7,cr15 |
| 17816 | + *[0-9a-f]*: ed a8 23 7f stcm\.w cp1,r8,cr8-cr14 |
| 17817 | + |
| 17818 | +[0-9a-f]* <picostm_w_pu>: |
| 17819 | + *[0-9a-f]*: ed af 32 ff stcm\.w cp1,--pc,cr0-cr7 |
| 17820 | + *[0-9a-f]*: ed a0 32 01 stcm\.w cp1,--r0,cr0 |
| 17821 | + *[0-9a-f]*: ed a7 32 80 stcm\.w cp1,--r7,cr7 |
| 17822 | + *[0-9a-f]*: ed a8 32 7f stcm\.w cp1,--r8,cr0-cr6 |
| 17823 | + *[0-9a-f]*: ed af 33 ff stcm\.w cp1,--pc,cr8-cr15 |
| 17824 | + *[0-9a-f]*: ed a0 33 01 stcm\.w cp1,--r0,cr8 |
| 17825 | + *[0-9a-f]*: ed a7 33 80 stcm\.w cp1,--r7,cr15 |
| 17826 | + *[0-9a-f]*: ed a8 33 7f stcm\.w cp1,--r8,cr8-cr14 |
| 17827 | --- /dev/null |
| 17828 | +++ b/gas/testsuite/gas/avr32/pico.s |
| 17829 | @@ -0,0 +1,144 @@ |
| 17830 | + |
| 17831 | + .text |
| 17832 | + .global picosvmac |
| 17833 | +picosvmac: |
| 17834 | + picosvmac out0, in0, in0, in0 |
| 17835 | + picosvmac out2, in11, in11, in11 |
| 17836 | + picosvmac out1, in10, in0, in5 |
| 17837 | + picosvmac out3, in6, in9, in0 |
| 17838 | + .global picosvmul |
| 17839 | +picosvmul: |
| 17840 | + picosvmul out0, in0, in0, in0 |
| 17841 | + picosvmul out2, in11, in11, in11 |
| 17842 | + picosvmul out1, in10, in0, in5 |
| 17843 | + picosvmul out3, in6, in9, in0 |
| 17844 | + .global picovmac |
| 17845 | +picovmac: |
| 17846 | + picovmac out0, in0, in0, in0 |
| 17847 | + picovmac out2, in11, in11, in11 |
| 17848 | + picovmac out1, in10, in0, in5 |
| 17849 | + picovmac out3, in6, in9, in0 |
| 17850 | + .global picovmul |
| 17851 | +picovmul: |
| 17852 | + picovmul out0, in0, in0, in0 |
| 17853 | + picovmul out2, in11, in11, in11 |
| 17854 | + picovmul out1, in10, in0, in5 |
| 17855 | + picovmul out3, in6, in9, in0 |
| 17856 | + .global picold_d |
| 17857 | +picold_d: |
| 17858 | + picold.d vmu2_out, pc[1020] |
| 17859 | + picold.d inpix2, r0[1020] |
| 17860 | + picold.d inpix2, r0[0] |
| 17861 | + picold.d coeff0_a, --r8 |
| 17862 | + picold.d coeff1_a, --r7 |
| 17863 | + picold.d inpix0, r10[r5 << 2] |
| 17864 | + picold.d vmu0_out, r3[r6 << 0] |
| 17865 | + .global picold_w |
| 17866 | +picold_w: |
| 17867 | + picold.w config, pc[1020] |
| 17868 | + picold.w inpix2, r0[1020] |
| 17869 | + picold.w inpix2, r0[0] |
| 17870 | + picold.w coeff0_b, --r8 |
| 17871 | + picold.w coeff1_a, --r7 |
| 17872 | + picold.w inpix1, r10[r5 << 2] |
| 17873 | + picold.w vmu1_out, r3[r6 << 0] |
| 17874 | + .global picoldm_d |
| 17875 | +picoldm_d: |
| 17876 | + picoldm.d pc, inpix2-config |
| 17877 | + picoldm.d r0, inpix2, inpix1 |
| 17878 | + picoldm.d r7, vmu2_out, config |
| 17879 | + picoldm.d r8, inpix2-vmu1_out |
| 17880 | + .global picoldm_d_pu |
| 17881 | +picoldm_d_pu: |
| 17882 | + picoldm.d pc++, inpix2, inpix1, inpix0, outpix2, outpix1, outpix0, coeff0_a, coeff0_b, coeff1_a, coeff1_b, coeff2_a, coeff2_b, vmu0_out, vmu1_out, vmu2_out, config |
| 17883 | + picoldm.d r0++, inpix2, inpix1 |
| 17884 | + picoldm.d r7++, vmu2_out, config |
| 17885 | + picoldm.d r8++, inpix2, inpix1, inpix0, outpix2, outpix1, outpix0, coeff0_a, coeff0_b, coeff1_a, coeff1_b, coeff2_a, coeff2_b, vmu0_out, vmu1_out |
| 17886 | + .global picoldm_w |
| 17887 | +picoldm_w: |
| 17888 | + picoldm.w pc, inpix2-coeff0_b |
| 17889 | + picoldm.w r0, inpix2 |
| 17890 | + picoldm.w r7, coeff0_b |
| 17891 | + picoldm.w r8, inpix2-coeff0_a |
| 17892 | + picoldm.w pc, coeff1_a-config |
| 17893 | + picoldm.w r0, coeff1_a |
| 17894 | + picoldm.w r7, config |
| 17895 | + picoldm.w r8, coeff1_a-vmu2_out |
| 17896 | + .global picoldm_w_pu |
| 17897 | +picoldm_w_pu: |
| 17898 | + picoldm.w pc++, inpix2-coeff0_b |
| 17899 | + picoldm.w r0++, inpix2 |
| 17900 | + picoldm.w r7++, coeff0_b |
| 17901 | + picoldm.w r8++, inpix2-coeff0_a |
| 17902 | + picoldm.w pc++, coeff1_a-config |
| 17903 | + picoldm.w r0++, coeff1_a |
| 17904 | + picoldm.w r7++, config |
| 17905 | + picoldm.w r8++, coeff1_a-vmu2_out |
| 17906 | + .global picomv_d |
| 17907 | +picomv_d: |
| 17908 | + picomv.d vmu2_out, lr |
| 17909 | + picomv.d inpix2, r0 |
| 17910 | + picomv.d coeff0_a, r8 |
| 17911 | + picomv.d coeff1_a, r6 |
| 17912 | + picomv.d pc, vmu2_out |
| 17913 | + picomv.d r0, inpix2 |
| 17914 | + picomv.d r8, coeff0_a |
| 17915 | + picomv.d r6, coeff1_a |
| 17916 | + .global picomv_w |
| 17917 | +picomv_w: |
| 17918 | + picomv.w config, pc |
| 17919 | + picomv.w inpix2, r0 |
| 17920 | + picomv.w coeff0_b, r8 |
| 17921 | + picomv.w coeff1_a, r7 |
| 17922 | + picomv.w pc, config |
| 17923 | + picomv.w r0, inpix2 |
| 17924 | + picomv.w r8, coeff0_b |
| 17925 | + picomv.w r7, coeff1_a |
| 17926 | + .global picost_d |
| 17927 | +picost_d: |
| 17928 | + picost.d pc[1020], vmu2_out |
| 17929 | + picost.d r0[0], inpix2 |
| 17930 | + picost.d r8++, coeff0_a |
| 17931 | + picost.d r7++, coeff1_a |
| 17932 | + picost.d r10[r5 << 2], inpix0 |
| 17933 | + picost.d r3[r6 << 0], vmu0_out |
| 17934 | + .global picost_w |
| 17935 | +picost_w: |
| 17936 | + picost.w pc[1020], config |
| 17937 | + picost.w r0[0], inpix2 |
| 17938 | + picost.w r8++, coeff0_b |
| 17939 | + picost.w r7++, coeff1_a |
| 17940 | + picost.w r10[r5 << 2], inpix1 |
| 17941 | + picost.w r3[r6 << 0], vmu1_out |
| 17942 | + .global picostm_d |
| 17943 | +picostm_d: |
| 17944 | + picostm.d pc, inpix2-config |
| 17945 | + picostm.d r0, inpix2, inpix1 |
| 17946 | + picostm.d r7, vmu2_out, config |
| 17947 | + picostm.d r8, inpix2-vmu1_out |
| 17948 | + .global picostm_d_pu |
| 17949 | +picostm_d_pu: |
| 17950 | + picostm.d --pc, inpix2, inpix1, inpix0, outpix2, outpix1, outpix0, coeff0_a, coeff0_b, coeff1_a, coeff1_b, coeff2_a, coeff2_b, vmu0_out, vmu1_out, vmu2_out, config |
| 17951 | + picostm.d --r0, inpix2, inpix1 |
| 17952 | + picostm.d --r7, vmu2_out, config |
| 17953 | + picostm.d --r8, inpix2, inpix1, inpix0, outpix2, outpix1, outpix0, coeff0_a, coeff0_b, coeff1_a, coeff1_b, coeff2_a, coeff2_b, vmu0_out, vmu1_out |
| 17954 | + .global picostm_w |
| 17955 | +picostm_w: |
| 17956 | + picostm.w pc, inpix2-coeff0_b |
| 17957 | + picostm.w r0, inpix2 |
| 17958 | + picostm.w r7, coeff0_b |
| 17959 | + picostm.w r8, inpix2-coeff0_a |
| 17960 | + picostm.w pc, coeff1_a-config |
| 17961 | + picostm.w r0, coeff1_a |
| 17962 | + picostm.w r7, config |
| 17963 | + picostm.w r8, coeff1_a-vmu2_out |
| 17964 | + .global picostm_w_pu |
| 17965 | +picostm_w_pu: |
| 17966 | + picostm.w --pc, inpix2-coeff0_b |
| 17967 | + picostm.w --r0, inpix2 |
| 17968 | + picostm.w --r7, coeff0_b |
| 17969 | + picostm.w --r8, inpix2-coeff0_a |
| 17970 | + picostm.w --pc, coeff1_a-config |
| 17971 | + picostm.w --r0, coeff1_a |
| 17972 | + picostm.w --r7, config |
| 17973 | + picostm.w --r8, coeff1_a-vmu2_out |
| 17974 | --- /dev/null |
| 17975 | +++ b/gas/testsuite/gas/avr32/pic_reloc.d |
| 17976 | @@ -0,0 +1,27 @@ |
| 17977 | +#as: |
| 17978 | +#objdump: -dr |
| 17979 | +#name: pic_reloc |
| 17980 | + |
| 17981 | +.*: +file format .* |
| 17982 | + |
| 17983 | +Disassembly of section \.text: |
| 17984 | + |
| 17985 | +00000000 <mcall_got>: |
| 17986 | + 0: f0 16 00 00 mcall r6\[0\] |
| 17987 | + 0: R_AVR32_GOT18SW extfunc |
| 17988 | + 4: f0 16 00 00 mcall r6\[0\] |
| 17989 | + 4: R_AVR32_GOT18SW \.L1 |
| 17990 | + 8: f0 16 00 00 mcall r6\[0\] |
| 17991 | + 8: R_AVR32_GOT18SW \.L2 |
| 17992 | + c: f0 16 00 00 mcall r6\[0\] |
| 17993 | + c: R_AVR32_GOT18SW mcall_got |
| 17994 | + |
| 17995 | +00000010 <ldw_got>: |
| 17996 | + 10: ec f0 00 00 ld.w r0,r6\[0\] |
| 17997 | + 10: R_AVR32_GOT16S extvar |
| 17998 | + 14: ec f0 00 00 ld.w r0,r6\[0\] |
| 17999 | + 14: R_AVR32_GOT16S \.L3 |
| 18000 | + 18: ec f0 00 00 ld.w r0,r6\[0\] |
| 18001 | + 18: R_AVR32_GOT16S \.L4 |
| 18002 | + 1c: ec f0 00 00 ld.w r0,r6\[0\] |
| 18003 | + 1c: R_AVR32_GOT16S ldw_got |
| 18004 | --- /dev/null |
| 18005 | +++ b/gas/testsuite/gas/avr32/pic_reloc.s |
| 18006 | @@ -0,0 +1,18 @@ |
| 18007 | + |
| 18008 | + .text |
| 18009 | + .global mcall_got |
| 18010 | +mcall_got: |
| 18011 | +.L1: |
| 18012 | + mcall r6[extfunc@got] |
| 18013 | + mcall r6[.L1@got] |
| 18014 | + mcall r6[.L2@got] |
| 18015 | + mcall r6[mcall_got@got] |
| 18016 | +.L2: |
| 18017 | + |
| 18018 | + .global ldw_got |
| 18019 | +ldw_got: |
| 18020 | +.L3: ld.w r0,r6[extvar@got] |
| 18021 | + ld.w r0,r6[.L3@got] |
| 18022 | + ld.w r0,r6[.L4@got] |
| 18023 | + ld.w r0,r6[ldw_got@got] |
| 18024 | +.L4: |
| 18025 | --- /dev/null |
| 18026 | +++ b/gas/testsuite/gas/avr32/symdiff.d |
| 18027 | @@ -0,0 +1,24 @@ |
| 18028 | +#source: symdiff.s |
| 18029 | +#as: |
| 18030 | +#objdump: -dr |
| 18031 | +#name: symdiff |
| 18032 | + |
| 18033 | +.*: +file format .* |
| 18034 | + |
| 18035 | +Disassembly of section \.text: |
| 18036 | + |
| 18037 | +00000000 <diff32>: |
| 18038 | + 0: 00 00 add r0,r0 |
| 18039 | + 2: 00 04 add r4,r0 |
| 18040 | + |
| 18041 | +00000004 <diff16>: |
| 18042 | + 4: 00 04 add r4,r0 |
| 18043 | + |
| 18044 | +00000006 <diff8>: |
| 18045 | + 6: 04 00 add r0,r2 |
| 18046 | + |
| 18047 | +00000008 <symdiff_test>: |
| 18048 | + 8: d7 03 nop |
| 18049 | + a: d7 03 nop |
| 18050 | + c: d7 03 nop |
| 18051 | + e: d7 03 nop |
| 18052 | --- /dev/null |
| 18053 | +++ b/gas/testsuite/gas/avr32/symdiff_linkrelax.d |
| 18054 | @@ -0,0 +1,28 @@ |
| 18055 | +#source: symdiff.s |
| 18056 | +#as: --linkrelax |
| 18057 | +#objdump: -dr |
| 18058 | +#name: symdiff_linkrelax |
| 18059 | + |
| 18060 | +.*: +file format .* |
| 18061 | + |
| 18062 | +Disassembly of section \.text: |
| 18063 | + |
| 18064 | +00000000 <diff32>: |
| 18065 | + 0: 00 00 add r0,r0 |
| 18066 | + 0: R_AVR32_DIFF32 \.text\+0xa |
| 18067 | + 2: 00 04 add r4,r0 |
| 18068 | + |
| 18069 | +00000004 <diff16>: |
| 18070 | + 4: 00 04 add r4,r0 |
| 18071 | + 4: R_AVR32_DIFF16 \.text\+0xa |
| 18072 | + |
| 18073 | +00000006 <diff8>: |
| 18074 | + 6: 04 00 add r0,r2 |
| 18075 | + 6: R_AVR32_DIFF8 \.text\+0xa |
| 18076 | + 7: R_AVR32_ALIGN \*ABS\*\+0x1 |
| 18077 | + |
| 18078 | +00000008 <symdiff_test>: |
| 18079 | + 8: d7 03 nop |
| 18080 | + a: d7 03 nop |
| 18081 | + c: d7 03 nop |
| 18082 | + e: d7 03 nop |
| 18083 | --- /dev/null |
| 18084 | +++ b/gas/testsuite/gas/avr32/symdiff.s |
| 18085 | @@ -0,0 +1,19 @@ |
| 18086 | + |
| 18087 | + .text |
| 18088 | + .global diff32 |
| 18089 | +diff32: |
| 18090 | + .long .L2 - .L1 |
| 18091 | + .global diff16 |
| 18092 | +diff16: |
| 18093 | + .short .L2 - .L1 |
| 18094 | + .global diff8 |
| 18095 | +diff8: |
| 18096 | + .byte .L2 - .L1 |
| 18097 | + |
| 18098 | + .global symdiff_test |
| 18099 | + .align 1 |
| 18100 | +symdiff_test: |
| 18101 | + nop |
| 18102 | +.L1: nop |
| 18103 | + nop |
| 18104 | +.L2: nop |
| 18105 | --- a/gas/write.c |
| 18106 | +++ b/gas/write.c |
| 18107 | @@ -2011,6 +2011,10 @@ relax_frag (segT segment, fragS *fragP, |
| 18108 | |
| 18109 | #endif /* defined (TC_GENERIC_RELAX_TABLE) */ |
| 18110 | |
| 18111 | +#ifdef TC_RELAX_ALIGN |
| 18112 | +#define RELAX_ALIGN(SEG, FRAG, ADDR) TC_RELAX_ALIGN(SEG, FRAG, ADDR) |
| 18113 | +#else |
| 18114 | +#define RELAX_ALIGN(SEG, FRAG, ADDR) relax_align(ADDR, (FRAG)->fr_offset) |
| 18115 | /* Relax_align. Advance location counter to next address that has 'alignment' |
| 18116 | lowest order bits all 0s, return size of adjustment made. */ |
| 18117 | static relax_addressT |
| 18118 | @@ -2030,6 +2034,7 @@ relax_align (register relax_addressT add |
| 18119 | #endif |
| 18120 | return (new_address - address); |
| 18121 | } |
| 18122 | +#endif |
| 18123 | |
| 18124 | /* Now we have a segment, not a crowd of sub-segments, we can make |
| 18125 | fr_address values. |
| 18126 | @@ -2073,7 +2078,7 @@ relax_segment (struct frag *segment_frag |
| 18127 | case rs_align_code: |
| 18128 | case rs_align_test: |
| 18129 | { |
| 18130 | - addressT offset = relax_align (address, (int) fragP->fr_offset); |
| 18131 | + addressT offset = RELAX_ALIGN(segment, fragP, address); |
| 18132 | |
| 18133 | if (fragP->fr_subtype != 0 && offset > fragP->fr_subtype) |
| 18134 | offset = 0; |
| 18135 | @@ -2280,10 +2285,10 @@ relax_segment (struct frag *segment_frag |
| 18136 | { |
| 18137 | addressT oldoff, newoff; |
| 18138 | |
| 18139 | - oldoff = relax_align (was_address + fragP->fr_fix, |
| 18140 | - (int) offset); |
| 18141 | - newoff = relax_align (address + fragP->fr_fix, |
| 18142 | - (int) offset); |
| 18143 | + oldoff = RELAX_ALIGN (segment, fragP, |
| 18144 | + was_address + fragP->fr_fix); |
| 18145 | + newoff = RELAX_ALIGN (segment, fragP, |
| 18146 | + address + fragP->fr_fix); |
| 18147 | |
| 18148 | if (fragP->fr_subtype != 0) |
| 18149 | { |
| 18150 | --- a/include/dis-asm.h |
| 18151 | +++ b/include/dis-asm.h |
| 18152 | @@ -222,6 +222,7 @@ typedef int (*disassembler_ftype) (bfd_v |
| 18153 | |
| 18154 | extern int print_insn_alpha (bfd_vma, disassemble_info *); |
| 18155 | extern int print_insn_avr (bfd_vma, disassemble_info *); |
| 18156 | +extern int print_insn_avr32 (bfd_vma, disassemble_info *); |
| 18157 | extern int print_insn_bfin (bfd_vma, disassemble_info *); |
| 18158 | extern int print_insn_big_arm (bfd_vma, disassemble_info *); |
| 18159 | extern int print_insn_big_mips (bfd_vma, disassemble_info *); |
| 18160 | @@ -304,7 +305,9 @@ extern void print_i386_disassembler_opti |
| 18161 | extern void print_mips_disassembler_options (FILE *); |
| 18162 | extern void print_ppc_disassembler_options (FILE *); |
| 18163 | extern void print_arm_disassembler_options (FILE *); |
| 18164 | +extern void print_avr32_disassembler_options (FILE *); |
| 18165 | extern void parse_arm_disassembler_option (char *); |
| 18166 | +extern void parse_avr32_disassembler_option (char *); |
| 18167 | extern void print_s390_disassembler_options (FILE *); |
| 18168 | extern int get_arm_regname_num_options (void); |
| 18169 | extern int set_arm_regname_option (int); |
| 18170 | --- /dev/null |
| 18171 | +++ b/include/elf/avr32.h |
| 18172 | @@ -0,0 +1,98 @@ |
| 18173 | +/* AVR32 ELF support for BFD. |
| 18174 | + Copyright 2003,2004,2005,2006,2007,2008,2009 Atmel Corporation. |
| 18175 | + |
| 18176 | + Written by Haavard Skinnemoen, Atmel Norway, <hskinnemoen@atmel.com> |
| 18177 | + |
| 18178 | + This file is part of BFD, the Binary File Descriptor library. |
| 18179 | + |
| 18180 | + This program is free software; you can redistribute it and/or |
| 18181 | + modify it under the terms of the GNU General Public License as |
| 18182 | + published by the Free Software Foundation; either version 2 of the |
| 18183 | + License, or (at your option) any later version. |
| 18184 | + |
| 18185 | + This program is distributed in the hope that it will be useful, but |
| 18186 | + WITHOUT ANY WARRANTY; without even the implied warranty of |
| 18187 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 18188 | + General Public License for more details. |
| 18189 | + |
| 18190 | + You should have received a copy of the GNU General Public License |
| 18191 | + along with this program; if not, write to the Free Software |
| 18192 | + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA |
| 18193 | + 02111-1307, USA. */ |
| 18194 | + |
| 18195 | +#include "elf/reloc-macros.h" |
| 18196 | + |
| 18197 | +/* CPU-specific flags for the ELF header e_flags field */ |
| 18198 | +#define EF_AVR32_LINKRELAX 0x01 |
| 18199 | +#define EF_AVR32_PIC 0x02 |
| 18200 | + |
| 18201 | +START_RELOC_NUMBERS (elf_avr32_reloc_type) |
| 18202 | + RELOC_NUMBER (R_AVR32_NONE, 0) |
| 18203 | + |
| 18204 | + /* Data Relocations */ |
| 18205 | + RELOC_NUMBER (R_AVR32_32, 1) |
| 18206 | + RELOC_NUMBER (R_AVR32_16, 2) |
| 18207 | + RELOC_NUMBER (R_AVR32_8, 3) |
| 18208 | + RELOC_NUMBER (R_AVR32_32_PCREL, 4) |
| 18209 | + RELOC_NUMBER (R_AVR32_16_PCREL, 5) |
| 18210 | + RELOC_NUMBER (R_AVR32_8_PCREL, 6) |
| 18211 | + RELOC_NUMBER (R_AVR32_DIFF32, 7) |
| 18212 | + RELOC_NUMBER (R_AVR32_DIFF16, 8) |
| 18213 | + RELOC_NUMBER (R_AVR32_DIFF8, 9) |
| 18214 | + RELOC_NUMBER (R_AVR32_GOT32, 10) |
| 18215 | + RELOC_NUMBER (R_AVR32_GOT16, 11) |
| 18216 | + RELOC_NUMBER (R_AVR32_GOT8, 12) |
| 18217 | + |
| 18218 | + /* Normal Code Relocations */ |
| 18219 | + RELOC_NUMBER (R_AVR32_21S, 13) |
| 18220 | + RELOC_NUMBER (R_AVR32_16U, 14) |
| 18221 | + RELOC_NUMBER (R_AVR32_16S, 15) |
| 18222 | + RELOC_NUMBER (R_AVR32_8S, 16) |
| 18223 | + RELOC_NUMBER (R_AVR32_8S_EXT, 17) |
| 18224 | + |
| 18225 | + /* PC-Relative Code Relocations */ |
| 18226 | + RELOC_NUMBER (R_AVR32_22H_PCREL, 18) |
| 18227 | + RELOC_NUMBER (R_AVR32_18W_PCREL, 19) |
| 18228 | + RELOC_NUMBER (R_AVR32_16B_PCREL, 20) |
| 18229 | + RELOC_NUMBER (R_AVR32_16N_PCREL, 21) |
| 18230 | + RELOC_NUMBER (R_AVR32_14UW_PCREL, 22) |
| 18231 | + RELOC_NUMBER (R_AVR32_11H_PCREL, 23) |
| 18232 | + RELOC_NUMBER (R_AVR32_10UW_PCREL, 24) |
| 18233 | + RELOC_NUMBER (R_AVR32_9H_PCREL, 25) |
| 18234 | + RELOC_NUMBER (R_AVR32_9UW_PCREL, 26) |
| 18235 | + |
| 18236 | + /* Special Code Relocations */ |
| 18237 | + RELOC_NUMBER (R_AVR32_HI16, 27) |
| 18238 | + RELOC_NUMBER (R_AVR32_LO16, 28) |
| 18239 | + |
| 18240 | + /* PIC Relocations */ |
| 18241 | + RELOC_NUMBER (R_AVR32_GOTPC, 29) |
| 18242 | + RELOC_NUMBER (R_AVR32_GOTCALL, 30) |
| 18243 | + RELOC_NUMBER (R_AVR32_LDA_GOT, 31) |
| 18244 | + RELOC_NUMBER (R_AVR32_GOT21S, 32) |
| 18245 | + RELOC_NUMBER (R_AVR32_GOT18SW, 33) |
| 18246 | + RELOC_NUMBER (R_AVR32_GOT16S, 34) |
| 18247 | + RELOC_NUMBER (R_AVR32_GOT7UW, 35) |
| 18248 | + |
| 18249 | + /* Constant Pool Relocations */ |
| 18250 | + RELOC_NUMBER (R_AVR32_32_CPENT, 36) |
| 18251 | + RELOC_NUMBER (R_AVR32_CPCALL, 37) |
| 18252 | + RELOC_NUMBER (R_AVR32_16_CP, 38) |
| 18253 | + RELOC_NUMBER (R_AVR32_9W_CP, 39) |
| 18254 | + |
| 18255 | + /* Dynamic Relocations */ |
| 18256 | + RELOC_NUMBER (R_AVR32_RELATIVE, 40) |
| 18257 | + RELOC_NUMBER (R_AVR32_GLOB_DAT, 41) |
| 18258 | + RELOC_NUMBER (R_AVR32_JMP_SLOT, 42) |
| 18259 | + |
| 18260 | + /* Linkrelax Information */ |
| 18261 | + RELOC_NUMBER (R_AVR32_ALIGN, 43) |
| 18262 | + |
| 18263 | + RELOC_NUMBER (R_AVR32_15S, 44) |
| 18264 | + |
| 18265 | +END_RELOC_NUMBERS (R_AVR32_max) |
| 18266 | + |
| 18267 | +/* Processor specific dynamic array tags. */ |
| 18268 | + |
| 18269 | +/* The total size in bytes of the Global Offset Table */ |
| 18270 | +#define DT_AVR32_GOTSZ 0x70000001 |
| 18271 | --- a/include/elf/common.h |
| 18272 | +++ b/include/elf/common.h |
| 18273 | @@ -286,7 +286,7 @@ |
| 18274 | #define EM_INTEL182 182 /* Reserved by Intel */ |
| 18275 | #define EM_res183 183 /* Reserved by ARM */ |
| 18276 | #define EM_res184 184 /* Reserved by ARM */ |
| 18277 | -#define EM_AVR32 185 /* Atmel Corporation 32-bit microprocessor family */ |
| 18278 | +#define EM_AVR32_OLD 185 /* Atmel Corporation 32-bit microprocessor family */ |
| 18279 | #define EM_STM8 186 /* STMicroeletronics STM8 8-bit microcontroller */ |
| 18280 | #define EM_TILE64 187 /* Tilera TILE64 multicore architecture family */ |
| 18281 | #define EM_TILEPRO 188 /* Tilera TILEPro multicore architecture family */ |
| 18282 | @@ -365,6 +365,9 @@ |
| 18283 | /* V850 backend magic number. Written in the absense of an ABI. */ |
| 18284 | #define EM_CYGNUS_V850 0x9080 |
| 18285 | |
| 18286 | +/* AVR32 magic number, picked by IAR Systems. */ |
| 18287 | +#define EM_AVR32 0x18ad |
| 18288 | + |
| 18289 | /* old S/390 backend magic number. Written in the absence of an ABI. */ |
| 18290 | #define EM_S390_OLD 0xa390 |
| 18291 | |
| 18292 | --- a/ld/configdoc.texi |
| 18293 | +++ b/ld/configdoc.texi |
| 18294 | @@ -7,6 +7,7 @@ |
| 18295 | @set H8300 |
| 18296 | @set HPPA |
| 18297 | @set I960 |
| 18298 | +@set AVR32 |
| 18299 | @set M68HC11 |
| 18300 | @set M68K |
| 18301 | @set MMIX |
| 18302 | --- a/ld/configure.tgt |
| 18303 | +++ b/ld/configure.tgt |
| 18304 | @@ -112,6 +112,9 @@ xscale-*-elf) targ_emul=armelf |
| 18305 | avr-*-*) targ_emul=avr2 |
| 18306 | targ_extra_emuls="avr1 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6" |
| 18307 | ;; |
| 18308 | +avr32-*-none) targ_emul=avr32elf_ap7000 |
| 18309 | + targ_extra_emuls="avr32elf_ap7001 avr32elf_ap7002 avr32elf_ap7200 avr32elf_uc3a0128 avr32elf_uc3a0256 avr32elf_uc3a0512 avr32elf_uc3a0512es avr32elf_uc3a1128 avr32elf_uc3a1256 avr32elf_uc3a1512es avr32elf_uc3a1512 avr32elf_uc3a364 avr32elf_uc3a364s avr32elf_uc3a3128 avr32elf_uc3a3128s avr32elf_uc3a3256 avr32elf_uc3a3256s avr32elf_uc3b064 avr32elf_uc3b0128 avr32elf_uc3b0256es avr32elf_uc3b0256 avr32elf_uc3b0512 avr32elf_uc3b0512revc avr32elf_uc3b164 avr32elf_uc3b1128 avr32elf_uc3b1256es avr32elf_uc3b1256 avr32elf_uc3b1512 avr32elf_uc3b1512revc avr32elf_uc3c0512crevc avr32elf_uc3c1512crevc avr32elf_uc3c2512crevc avr32elf_atuc3l0256 avr32elf_mxt768e avr32elf_uc3l064 avr32elf_uc3l032 avr32elf_uc3l016 avr32elf_uc3l064revb avr32elf_uc3c064c avr32elf_uc3c0128c avr32elf_uc3c0256c avr32elf_uc3c0512c avr32elf_uc3c164c avr32elf_uc3c1128c avr32elf_uc3c1256c avr32elf_uc3c1512c avr32elf_uc3c264c avr32elf_uc3c2128c avr32elf_uc3c2256c avr32elf_uc3c2512c" ;; |
| 18310 | +avr32-*-linux*) targ_emul=avr32linux ;; |
| 18311 | bfin-*-elf) targ_emul=elf32bfin; |
| 18312 | targ_extra_emuls="elf32bfinfd" |
| 18313 | targ_extra_libpath=$targ_extra_emuls |
| 18314 | --- /dev/null |
| 18315 | +++ b/ld/emulparams/avr32elf.sh |
| 18316 | @@ -0,0 +1,402 @@ |
| 18317 | +# This script is called from ld/genscript.sh |
| 18318 | +# There is a difference on how 'bash' and POSIX handles |
| 18319 | +# the '.' (source) command in a script. |
| 18320 | +# genscript.sh calls this script with argument ${EMULATION_NAME} |
| 18321 | +# but that will fail on POSIX compilant shells like 'sh' or 'dash' |
| 18322 | +# therefor I use the variable directly instead of $1 |
| 18323 | +EMULATION=${EMULATION_NAME} |
| 18324 | +SCRIPT_NAME=avr32 |
| 18325 | +TEMPLATE_NAME=elf32 |
| 18326 | +EXTRA_EM_FILE=avr32elf |
| 18327 | +OUTPUT_FORMAT="elf32-avr32" |
| 18328 | +ARCH=avr32 |
| 18329 | +MAXPAGESIZE=4096 |
| 18330 | +ENTRY=_start |
| 18331 | +EMBEDDED=yes |
| 18332 | +NO_SMALL_DATA=yes |
| 18333 | +NOP=0xd703d703 |
| 18334 | + |
| 18335 | +DATA_SEGMENT_ALIGN=8 |
| 18336 | +BSS_ALIGNMENT=8 |
| 18337 | + |
| 18338 | +RO_LMA_REGION="FLASH" |
| 18339 | +RO_VMA_REGION="FLASH" |
| 18340 | +RW_LMA_REGION="FLASH" |
| 18341 | +RW_VMA_REGION="CPUSRAM" |
| 18342 | + |
| 18343 | +STACK_SIZE=_stack_size |
| 18344 | +STACK_ADDR="ORIGIN(CPUSRAM) + LENGTH(CPUSRAM) - ${STACK_SIZE}" |
| 18345 | + |
| 18346 | +DATA_SEGMENT_END=" |
| 18347 | + __heap_start__ = ALIGN(8); |
| 18348 | + . = ${STACK_ADDR}; |
| 18349 | + __heap_end__ = .; |
| 18350 | +" |
| 18351 | + |
| 18352 | +case "$EMULATION" in |
| 18353 | +avr32elf_ap*) |
| 18354 | + MACHINE=ap |
| 18355 | + INITIAL_READONLY_SECTIONS=" |
| 18356 | + .reset : { *(.reset) } >FLASH AT>FLASH |
| 18357 | + . = . & 0x9fffffff; |
| 18358 | +" |
| 18359 | + TEXT_START_ADDR=0xa0000000 |
| 18360 | + case "$EMULATION" in |
| 18361 | + avr32elf_ap700[0-2]) |
| 18362 | + MEMORY=" |
| 18363 | +MEMORY |
| 18364 | +{ |
| 18365 | + FLASH (rxai) : ORIGIN = 0x00000000, LENGTH = 64M |
| 18366 | + CPUSRAM (rwxa) : ORIGIN = 0x24000000, LENGTH = 32K |
| 18367 | +} |
| 18368 | +" |
| 18369 | + ;; |
| 18370 | + avr32elf_ap7200) |
| 18371 | + MEMORY=" |
| 18372 | +MEMORY |
| 18373 | +{ |
| 18374 | + FLASH (rxai) : ORIGIN = 0x00000000, LENGTH = 64M |
| 18375 | + CPUSRAM (rwxa) : ORIGIN = 0x08000000, LENGTH = 64K |
| 18376 | +} |
| 18377 | +" |
| 18378 | + ;; |
| 18379 | + esac |
| 18380 | + ;; |
| 18381 | + |
| 18382 | +avr32elf_mxt768e) |
| 18383 | + MACHINE=uc |
| 18384 | + INITIAL_READONLY_SECTIONS=".reset : { *(.reset) } >FLASH AT>FLASH" |
| 18385 | + TEXT_START_ADDR=0x80000000 |
| 18386 | + OTHER_SECTIONS=" |
| 18387 | + .userpage : { *(.userpage .userpage.*) } >USERPAGE AT>USERPAGE |
| 18388 | + .factorypage : { *(.factorypage .factorypage.*) } >FACTORYPAGE AT>FACTORYPAGE |
| 18389 | +" |
| 18390 | + MEMORY=" |
| 18391 | +MEMORY |
| 18392 | +{ |
| 18393 | + FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 64K |
| 18394 | + CPUSRAM (wxa!ri) : ORIGIN = 0x00000004, LENGTH = 0x3FFC |
| 18395 | + USERPAGE : ORIGIN = 0x80800000, LENGTH = 512 |
| 18396 | + FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 512 |
| 18397 | + FLASHVAULT_FLASH_SIZE (r) : ORIGIN = 0x80800400, LENGTH = 8 |
| 18398 | + FLASHVAULT_RAM_SIZE (r) : ORIGIN = 0x80800408, LENGTH = 8 |
| 18399 | +} |
| 18400 | +" |
| 18401 | + OTHER_SECTIONS="${OTHER_SECTIONS} |
| 18402 | + .flashvault_flash_size : { KEEP(*(.flashvault_flash_size .flashvault_flash_size.*)) } > FLASHVAULT_FLASH_SIZE |
| 18403 | + .flashvault_ram_size : { KEEP(*(.flashvault_ram_size .flashvault_ram_size.*)) } > FLASHVAULT_RAM_SIZE |
| 18404 | +" |
| 18405 | + ;; |
| 18406 | + |
| 18407 | +avr32elf_atuc3*) |
| 18408 | + MACHINE=uc |
| 18409 | + INITIAL_READONLY_SECTIONS=".reset : { *(.reset) } >FLASH AT>FLASH" |
| 18410 | + TEXT_START_ADDR=0x80000000 |
| 18411 | + OTHER_SECTIONS=" |
| 18412 | + .userpage : { *(.userpage .userpage.*) } >USERPAGE AT>USERPAGE |
| 18413 | + .factorypage : { *(.factorypage .factorypage.*) } >FACTORYPAGE AT>FACTORYPAGE |
| 18414 | +" |
| 18415 | + case "$EMULATION" in |
| 18416 | + avr32elf_atuc3l0256) |
| 18417 | + MEMORY=" |
| 18418 | +MEMORY |
| 18419 | +{ |
| 18420 | + FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 256K |
| 18421 | + CPUSRAM (wxa!ri) : ORIGIN = 0x00000004, LENGTH = 0x3FFC |
| 18422 | + USERPAGE : ORIGIN = 0x80800000, LENGTH = 512 |
| 18423 | + FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 512 |
| 18424 | + FLASHVAULT_FLASH_SIZE (r) : ORIGIN = 0x80800400, LENGTH = 8 |
| 18425 | + FLASHVAULT_RAM_SIZE (r) : ORIGIN = 0x80800408, LENGTH = 8 |
| 18426 | +} |
| 18427 | +" |
| 18428 | + OTHER_SECTIONS="${OTHER_SECTIONS} |
| 18429 | + .flashvault_flash_size : { KEEP(*(.flashvault_flash_size .flashvault_flash_size.*)) } > FLASHVAULT_FLASH_SIZE |
| 18430 | + .flashvault_ram_size : { KEEP(*(.flashvault_ram_size .flashvault_ram_size.*)) } > FLASHVAULT_RAM_SIZE |
| 18431 | +" |
| 18432 | + ;; |
| 18433 | + esac |
| 18434 | + ;; |
| 18435 | + |
| 18436 | +avr32elf_uc3*) |
| 18437 | + MACHINE=uc |
| 18438 | + INITIAL_READONLY_SECTIONS=".reset : { *(.reset) } >FLASH AT>FLASH" |
| 18439 | + TEXT_START_ADDR=0x80000000 |
| 18440 | + OTHER_SECTIONS=" |
| 18441 | + .userpage : { *(.userpage .userpage.*) } >USERPAGE AT>USERPAGE |
| 18442 | + .factorypage : { *(.factorypage .factorypage.*) } >FACTORYPAGE AT>FACTORYPAGE |
| 18443 | +" |
| 18444 | + |
| 18445 | + case "$EMULATION" in |
| 18446 | + avr32elf_uc3c[012]512c) |
| 18447 | + MEMORY=" |
| 18448 | +MEMORY |
| 18449 | +{ |
| 18450 | + FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 512K |
| 18451 | + CPUSRAM (wxa!ri) : ORIGIN = 0x00000004, LENGTH = 0xFFFC |
| 18452 | + USERPAGE : ORIGIN = 0x80800000, LENGTH = 512 |
| 18453 | + FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 512 |
| 18454 | + FLASHVAULT_FLASH_SIZE (r) : ORIGIN = 0x80800400, LENGTH = 8 |
| 18455 | + FLASHVAULT_RAM_SIZE (r) : ORIGIN = 0x80800408, LENGTH = 8 |
| 18456 | +} |
| 18457 | +" |
| 18458 | + OTHER_SECTIONS="${OTHER_SECTIONS} |
| 18459 | + .flashvault_flash_size : { KEEP(*(.flashvault_flash_size .flashvault_flash_size.*)) } > FLASHVAULT_FLASH_SIZE |
| 18460 | + .flashvault_ram_size : { KEEP(*(.flashvault_ram_size .flashvault_ram_size.*)) } > FLASHVAULT_RAM_SIZE |
| 18461 | +" |
| 18462 | + ;; |
| 18463 | + |
| 18464 | + avr32elf_uc3c[012]256c) |
| 18465 | + MEMORY=" |
| 18466 | +MEMORY |
| 18467 | +{ |
| 18468 | + FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 256K |
| 18469 | + CPUSRAM (wxa!ri) : ORIGIN = 0x00000004, LENGTH = 0xFFFC |
| 18470 | + USERPAGE : ORIGIN = 0x80800000, LENGTH = 512 |
| 18471 | + FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 512 |
| 18472 | + FLASHVAULT_FLASH_SIZE (r) : ORIGIN = 0x80800400, LENGTH = 8 |
| 18473 | + FLASHVAULT_RAM_SIZE (r) : ORIGIN = 0x80800408, LENGTH = 8 |
| 18474 | +} |
| 18475 | +" |
| 18476 | + OTHER_SECTIONS="${OTHER_SECTIONS} |
| 18477 | + .flashvault_flash_size : { KEEP(*(.flashvault_flash_size .flashvault_flash_size.*)) } > FLASHVAULT_FLASH_SIZE |
| 18478 | + .flashvault_ram_size : { KEEP(*(.flashvault_ram_size .flashvault_ram_size.*)) } > FLASHVAULT_RAM_SIZE |
| 18479 | +" |
| 18480 | + ;; |
| 18481 | + |
| 18482 | + avr32elf_uc3c[012]128c) |
| 18483 | + MEMORY=" |
| 18484 | +MEMORY |
| 18485 | +{ |
| 18486 | + FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 128K |
| 18487 | + CPUSRAM (wxa!ri) : ORIGIN = 0x00000004, LENGTH = 0x7FFC |
| 18488 | + USERPAGE : ORIGIN = 0x80800000, LENGTH = 512 |
| 18489 | + FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 512 |
| 18490 | + FLASHVAULT_FLASH_SIZE (r) : ORIGIN = 0x80800400, LENGTH = 8 |
| 18491 | + FLASHVAULT_RAM_SIZE (r) : ORIGIN = 0x80800408, LENGTH = 8 |
| 18492 | +} |
| 18493 | +" |
| 18494 | + OTHER_SECTIONS="${OTHER_SECTIONS} |
| 18495 | + .flashvault_flash_size : { KEEP(*(.flashvault_flash_size .flashvault_flash_size.*)) } > FLASHVAULT_FLASH_SIZE |
| 18496 | + .flashvault_ram_size : { KEEP(*(.flashvault_ram_size .flashvault_ram_size.*)) } > FLASHVAULT_RAM_SIZE |
| 18497 | +" |
| 18498 | + ;; |
| 18499 | + |
| 18500 | + avr32elf_uc3c[012]64c) |
| 18501 | + MEMORY=" |
| 18502 | +MEMORY |
| 18503 | +{ |
| 18504 | + FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 64K |
| 18505 | + CPUSRAM (wxa!ri) : ORIGIN = 0x00000004, LENGTH = 0x3FFC |
| 18506 | + USERPAGE : ORIGIN = 0x80800000, LENGTH = 512 |
| 18507 | + FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 512 |
| 18508 | + FLASHVAULT_FLASH_SIZE (r) : ORIGIN = 0x80800400, LENGTH = 8 |
| 18509 | + FLASHVAULT_RAM_SIZE (r) : ORIGIN = 0x80800408, LENGTH = 8 |
| 18510 | +} |
| 18511 | +" |
| 18512 | + OTHER_SECTIONS="${OTHER_SECTIONS} |
| 18513 | + .flashvault_flash_size : { KEEP(*(.flashvault_flash_size .flashvault_flash_size.*)) } > FLASHVAULT_FLASH_SIZE |
| 18514 | + .flashvault_ram_size : { KEEP(*(.flashvault_ram_size .flashvault_ram_size.*)) } > FLASHVAULT_RAM_SIZE |
| 18515 | +" |
| 18516 | + ;; |
| 18517 | + |
| 18518 | + avr32elf_uc3[ac][012]512*) |
| 18519 | + MEMORY=" |
| 18520 | +MEMORY |
| 18521 | +{ |
| 18522 | + FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 512K |
| 18523 | + CPUSRAM (wxa!ri) : ORIGIN = 0x00000004, LENGTH = 0xFFFC |
| 18524 | + USERPAGE : ORIGIN = 0x80800000, LENGTH = 512 |
| 18525 | + FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 512 |
| 18526 | +} |
| 18527 | +" |
| 18528 | + ;; |
| 18529 | + |
| 18530 | + avr32elf_uc3a[012]256*) |
| 18531 | + MEMORY=" |
| 18532 | +MEMORY |
| 18533 | +{ |
| 18534 | + FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 256K |
| 18535 | + CPUSRAM (wxa!ri) : ORIGIN = 0x00000004, LENGTH = 0xFFFC |
| 18536 | + USERPAGE : ORIGIN = 0x80800000, LENGTH = 512 |
| 18537 | + FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 512 |
| 18538 | +} |
| 18539 | +" |
| 18540 | + ;; |
| 18541 | + |
| 18542 | + avr32elf_uc3b[01]512revc) |
| 18543 | + MEMORY=" |
| 18544 | +MEMORY |
| 18545 | +{ |
| 18546 | + FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 512K |
| 18547 | + CPUSRAM (wxa!ri) : ORIGIN = 0x00000004, LENGTH = 0x17FFC |
| 18548 | + USERPAGE : ORIGIN = 0x80800000, LENGTH = 512 |
| 18549 | + FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 512 |
| 18550 | +} |
| 18551 | +" |
| 18552 | + PADDING=" |
| 18553 | + .padding : { |
| 18554 | + QUAD(0) |
| 18555 | + QUAD(0) |
| 18556 | + QUAD(0) |
| 18557 | + QUAD(0) |
| 18558 | + } >FLASH AT>FLASH |
| 18559 | +" |
| 18560 | + ;; |
| 18561 | + |
| 18562 | + avr32elf_uc3b[01]512) |
| 18563 | + MEMORY=" |
| 18564 | +MEMORY |
| 18565 | +{ |
| 18566 | + FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 512K |
| 18567 | + CPUSRAM (wxa!ri) : ORIGIN = 0x00000004, LENGTH = 0x17FFC |
| 18568 | + USERPAGE : ORIGIN = 0x80800000, LENGTH = 512 |
| 18569 | + FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 512 |
| 18570 | +} |
| 18571 | +" |
| 18572 | + ;; |
| 18573 | + |
| 18574 | + avr32elf_uc3b[01]256*) |
| 18575 | + MEMORY=" |
| 18576 | +MEMORY |
| 18577 | +{ |
| 18578 | + FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 256K |
| 18579 | + CPUSRAM (wxa!ri) : ORIGIN = 0x00000004, LENGTH = 0x7FFC |
| 18580 | + USERPAGE : ORIGIN = 0x80800000, LENGTH = 512 |
| 18581 | + FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 512 |
| 18582 | +} |
| 18583 | +" |
| 18584 | + ;; |
| 18585 | + |
| 18586 | + avr32elf_uc3[ab][012]128*) |
| 18587 | + MEMORY=" |
| 18588 | +MEMORY |
| 18589 | +{ |
| 18590 | + FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 128K |
| 18591 | + CPUSRAM (wxa!ri) : ORIGIN = 0x00000004, LENGTH = 0x7FFC |
| 18592 | + USERPAGE : ORIGIN = 0x80800000, LENGTH = 512 |
| 18593 | + FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 512 |
| 18594 | +} |
| 18595 | +" |
| 18596 | + ;; |
| 18597 | + |
| 18598 | + avr32elf_uc3b[0123]64*) |
| 18599 | + MEMORY=" |
| 18600 | +MEMORY |
| 18601 | +{ |
| 18602 | + FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 64K |
| 18603 | + CPUSRAM (wxa!ri) : ORIGIN = 0x00000004, LENGTH = 0x3FFC |
| 18604 | + USERPAGE : ORIGIN = 0x80800000, LENGTH = 512 |
| 18605 | + FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 512 |
| 18606 | +} |
| 18607 | +" |
| 18608 | + ;; |
| 18609 | + |
| 18610 | + avr32elf_uc3a3256*) |
| 18611 | + MEMORY=" |
| 18612 | +MEMORY |
| 18613 | +{ |
| 18614 | + FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 256K |
| 18615 | + CPUSRAM (wxa!ri) : ORIGIN = 0x00000004, LENGTH = 0xFFFC |
| 18616 | + HSBSRAM (wxa!ri) : ORIGIN = 0xFF000000, LENGTH = 64K |
| 18617 | + USERPAGE : ORIGIN = 0x80800000, LENGTH = 512 |
| 18618 | + FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 512 |
| 18619 | +} |
| 18620 | +" |
| 18621 | + OTHER_SECTIONS="${OTHER_SECTIONS} |
| 18622 | + .hsbsram : { *(.hsbsram .hsbsram.*) } >HSBSRAM AT>FLASH :FLASH |
| 18623 | +" |
| 18624 | + |
| 18625 | + ;; |
| 18626 | + |
| 18627 | + avr32elf_uc3a3128*) |
| 18628 | + MEMORY=" |
| 18629 | +MEMORY |
| 18630 | +{ |
| 18631 | + FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 128K |
| 18632 | + CPUSRAM (wxa!ri) : ORIGIN = 0x00000004, LENGTH = 0xFFFC |
| 18633 | + HSBSRAM (wxa!ri) : ORIGIN = 0xFF000000, LENGTH = 64K |
| 18634 | + USERPAGE : ORIGIN = 0x80800000, LENGTH = 512 |
| 18635 | + FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 512 |
| 18636 | +} |
| 18637 | +" |
| 18638 | + OTHER_SECTIONS="${OTHER_SECTIONS} |
| 18639 | + .hsbsram : { *(.hsbsram .hsbsram.*) } >HSBSRAM AT>FLASH :FLASH |
| 18640 | +" |
| 18641 | + ;; |
| 18642 | + |
| 18643 | + avr32elf_uc3a364*) |
| 18644 | + MEMORY=" |
| 18645 | +MEMORY |
| 18646 | +{ |
| 18647 | + FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 64K |
| 18648 | + CPUSRAM (wxa!ri) : ORIGIN = 0x00000004, LENGTH = 0xFFFC |
| 18649 | + HSBSRAM (wxa!ri) : ORIGIN = 0xFF000000, LENGTH = 64K |
| 18650 | + USERPAGE : ORIGIN = 0x80800000, LENGTH = 512 |
| 18651 | + FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 512 |
| 18652 | +} |
| 18653 | +" |
| 18654 | + OTHER_SECTIONS="${OTHER_SECTIONS} |
| 18655 | + .hsbsram : { *(.hsbsram .hsbsram.*) } >HSBSRAM AT>FLASH :FLASH |
| 18656 | +" |
| 18657 | + ;; |
| 18658 | + |
| 18659 | + |
| 18660 | + avr32elf_uc3l[0123]64*) |
| 18661 | + MEMORY=" |
| 18662 | +MEMORY |
| 18663 | +{ |
| 18664 | + FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 64K |
| 18665 | + CPUSRAM (wxa!ri) : ORIGIN = 0x00000004, LENGTH = 0x3FFC |
| 18666 | + USERPAGE : ORIGIN = 0x80800000, LENGTH = 512 |
| 18667 | + FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 512 |
| 18668 | + FLASHVAULT_FLASH_SIZE (r) : ORIGIN = 0x80800400, LENGTH = 8 |
| 18669 | + FLASHVAULT_RAM_SIZE (r) : ORIGIN = 0x80800408, LENGTH = 8 |
| 18670 | +} |
| 18671 | +" |
| 18672 | + OTHER_SECTIONS="${OTHER_SECTIONS} |
| 18673 | + .flashvault_flash_size : { KEEP(*(.flashvault_flash_size .flashvault_flash_size.*)) } > FLASHVAULT_FLASH_SIZE |
| 18674 | + .flashvault_ram_size : { KEEP(*(.flashvault_ram_size .flashvault_ram_size.*)) } > FLASHVAULT_RAM_SIZE |
| 18675 | +" |
| 18676 | + ;; |
| 18677 | + |
| 18678 | + avr32elf_uc3l[0123]32*) |
| 18679 | + MEMORY=" |
| 18680 | +MEMORY |
| 18681 | +{ |
| 18682 | + FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 32K |
| 18683 | + CPUSRAM (wxa!ri) : ORIGIN = 0x00000004, LENGTH = 0x3FFC |
| 18684 | + USERPAGE : ORIGIN = 0x80800000, LENGTH = 512 |
| 18685 | + FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 512 |
| 18686 | + FLASHVAULT_FLASH_SIZE (r) : ORIGIN = 0x80800400, LENGTH = 8 |
| 18687 | + FLASHVAULT_RAM_SIZE (r) : ORIGIN = 0x80800408, LENGTH = 8 |
| 18688 | +} |
| 18689 | +" |
| 18690 | + OTHER_SECTIONS="${OTHER_SECTIONS} |
| 18691 | + .flashvault_flash_size : { KEEP(*(.flashvault_flash_size .flashvault_flash_size.*)) } > FLASHVAULT_FLASH_SIZE |
| 18692 | + .flashvault_ram_size : { KEEP(*(.flashvault_ram_size .flashvault_ram_size.*)) } > FLASHVAULT_RAM_SIZE |
| 18693 | +" |
| 18694 | + ;; |
| 18695 | + |
| 18696 | + avr32elf_uc3l[0123]16*) |
| 18697 | + MEMORY=" |
| 18698 | +MEMORY |
| 18699 | +{ |
| 18700 | + FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 16K |
| 18701 | + CPUSRAM (wxa!ri) : ORIGIN = 0x00000004, LENGTH = 0x1FFC |
| 18702 | + USERPAGE : ORIGIN = 0x80800000, LENGTH = 512 |
| 18703 | + FACTORYPAGE : ORIGIN = 0x80800200, LENGTH = 512 |
| 18704 | + FLASHVAULT_FLASH_SIZE (r) : ORIGIN = 0x80800400, LENGTH = 8 |
| 18705 | + FLASHVAULT_RAM_SIZE (r) : ORIGIN = 0x80800408, LENGTH = 8 |
| 18706 | +} |
| 18707 | +" |
| 18708 | + OTHER_SECTIONS="${OTHER_SECTIONS} |
| 18709 | + .flashvault_flash_size : { KEEP(*(.flashvault_flash_size .flashvault_flash_size.*)) } > FLASHVAULT_FLASH_SIZE |
| 18710 | + .flashvault_ram_size : { KEEP(*(.flashvault_ram_size .flashvault_ram_size.*)) } > FLASHVAULT_RAM_SIZE |
| 18711 | +" |
| 18712 | + ;; |
| 18713 | + |
| 18714 | + |
| 18715 | + esac |
| 18716 | + ;; |
| 18717 | + |
| 18718 | +esac |
| 18719 | --- /dev/null |
| 18720 | +++ b/ld/emulparams/avr32linux.sh |
| 18721 | @@ -0,0 +1,14 @@ |
| 18722 | +ARCH=avr32 |
| 18723 | +SCRIPT_NAME=elf |
| 18724 | +TEMPLATE_NAME=elf32 |
| 18725 | +EXTRA_EM_FILE=avr32elf |
| 18726 | +OUTPUT_FORMAT="elf32-avr32" |
| 18727 | +GENERATE_SHLIB_SCRIPT=yes |
| 18728 | +MAXPAGESIZE=0x1000 |
| 18729 | +TEXT_START_ADDR=0x00001000 |
| 18730 | +NOP=0xd703d703 |
| 18731 | + |
| 18732 | +# This appears to place the GOT before the data section, which is |
| 18733 | +# essential for uClinux. We don't use those .s* sections on AVR32 |
| 18734 | +# anyway, so it shouldn't hurt for regular Linux either... |
| 18735 | +NO_SMALL_DATA=yes |
| 18736 | --- /dev/null |
| 18737 | +++ b/ld/emultempl/avr32elf.em |
| 18738 | @@ -0,0 +1,162 @@ |
| 18739 | +# This shell script emits a C file. -*- C -*- |
| 18740 | +# Copyright (C) 2007,2008,2009 Atmel Corporation |
| 18741 | +# |
| 18742 | +# This file is part of GLD, the Gnu Linker. |
| 18743 | +# |
| 18744 | +# This program is free software; you can redistribute it and/or modify |
| 18745 | +# it under the terms of the GNU General Public License as published by |
| 18746 | +# the Free Software Foundation; either version 2 of the License, or |
| 18747 | +# (at your option) any later version. |
| 18748 | +# |
| 18749 | +# This program is distributed in the hope that it will be useful, |
| 18750 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 18751 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 18752 | +# GNU General Public License for more details. |
| 18753 | +# |
| 18754 | +# You should have received a copy of the GNU General Public License |
| 18755 | +# along with this program; if not, write to the Free Software |
| 18756 | +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. |
| 18757 | +# |
| 18758 | + |
| 18759 | +# This file is sourced from elf32.em, and defines extra avr32-elf |
| 18760 | +# specific routines. |
| 18761 | +# |
| 18762 | + |
| 18763 | +# Generate linker script for writable rodata |
| 18764 | +LD_FLAG=rodata-writable |
| 18765 | +DATA_ALIGNMENT=${DATA_ALIGNMENT_} |
| 18766 | +RELOCATING=" " |
| 18767 | +WRITABLE_RODATA=" " |
| 18768 | +( echo "/* Linker script for writable rodata */" |
| 18769 | + . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} |
| 18770 | + . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc |
| 18771 | +) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xwr |
| 18772 | + |
| 18773 | + |
| 18774 | +cat >> e${EMULATION_NAME}.c <<EOF |
| 18775 | + |
| 18776 | +#include "libbfd.h" |
| 18777 | +#include "elf32-avr32.h" |
| 18778 | + |
| 18779 | +/* Whether to allow direct references (sub or mov) to SEC_DATA and |
| 18780 | + !SEC_CONTENTS sections when optimizing. Not enabled by default |
| 18781 | + since it might cause link errors. */ |
| 18782 | +static int direct_data_refs = 0; |
| 18783 | + |
| 18784 | +static void avr32_elf_after_open (void) |
| 18785 | +{ |
| 18786 | + bfd_elf32_avr32_set_options (&link_info, direct_data_refs); |
| 18787 | + gld${EMULATION_NAME}_after_open (); |
| 18788 | +} |
| 18789 | + |
| 18790 | +static int rodata_writable = 0; |
| 18791 | + |
| 18792 | +static int stack_size = 0x1000; |
| 18793 | + |
| 18794 | +static void avr32_elf_set_symbols (void) |
| 18795 | +{ |
| 18796 | + /* Glue the assignments into the abs section. */ |
| 18797 | + lang_statement_list_type *save = stat_ptr; |
| 18798 | + |
| 18799 | + |
| 18800 | + stat_ptr = &(abs_output_section->children); |
| 18801 | + |
| 18802 | + lang_add_assignment (exp_assop ('=', "_stack_size", |
| 18803 | + exp_intop (stack_size))); |
| 18804 | + |
| 18805 | + stat_ptr = save; |
| 18806 | +} |
| 18807 | + |
| 18808 | +static char * gld${EMULATION_NAME}_get_script (int *isfile); |
| 18809 | + |
| 18810 | +static char * avr32_elf_get_script (int *isfile) |
| 18811 | +{ |
| 18812 | + if ( rodata_writable ) |
| 18813 | + { |
| 18814 | +EOF |
| 18815 | +if test -n "$COMPILE_IN" |
| 18816 | +then |
| 18817 | +# Scripts compiled in. |
| 18818 | + |
| 18819 | +# sed commands to quote an ld script as a C string. |
| 18820 | +sc="-f stringify.sed" |
| 18821 | + |
| 18822 | +cat >>e${EMULATION_NAME}.c <<EOF |
| 18823 | + *isfile = 0; |
| 18824 | + return |
| 18825 | +EOF |
| 18826 | +sed $sc ldscripts/${EMULATION_NAME}.xwr >> e${EMULATION_NAME}.c |
| 18827 | +echo ';' >> e${EMULATION_NAME}.c |
| 18828 | +else |
| 18829 | +# Scripts read from the filesystem. |
| 18830 | + |
| 18831 | +cat >>e${EMULATION_NAME}.c <<EOF |
| 18832 | + *isfile = 1; |
| 18833 | + return "ldscripts/${EMULATION_NAME}.xwr"; |
| 18834 | +EOF |
| 18835 | +fi |
| 18836 | + |
| 18837 | +cat >>e${EMULATION_NAME}.c <<EOF |
| 18838 | + } |
| 18839 | + return gld${EMULATION_NAME}_get_script (isfile); |
| 18840 | +} |
| 18841 | + |
| 18842 | + |
| 18843 | +EOF |
| 18844 | + |
| 18845 | +# Define some shell vars to insert bits of code into the standard elf |
| 18846 | +# parse_args and list_options functions. |
| 18847 | +# |
| 18848 | +PARSE_AND_LIST_PROLOGUE=' |
| 18849 | +#define OPTION_DIRECT_DATA 300 |
| 18850 | +#define OPTION_NO_DIRECT_DATA 301 |
| 18851 | +#define OPTION_RODATA_WRITABLE 302 |
| 18852 | +#define OPTION_NO_RODATA_WRITABLE 303 |
| 18853 | +#define OPTION_STACK 304 |
| 18854 | +' |
| 18855 | + |
| 18856 | +PARSE_AND_LIST_LONGOPTS=' |
| 18857 | + { "direct-data", no_argument, NULL, OPTION_DIRECT_DATA }, |
| 18858 | + { "no-direct-data", no_argument, NULL, OPTION_NO_DIRECT_DATA }, |
| 18859 | + { "rodata-writable", no_argument, NULL, OPTION_RODATA_WRITABLE }, |
| 18860 | + { "no-rodata-writable", no_argument, NULL, OPTION_NO_RODATA_WRITABLE }, |
| 18861 | + { "stack", required_argument, NULL, OPTION_STACK }, |
| 18862 | +' |
| 18863 | + |
| 18864 | +PARSE_AND_LIST_OPTIONS=' |
| 18865 | + fprintf (file, _(" --direct-data\t\tAllow direct data references when optimizing\n")); |
| 18866 | + fprintf (file, _(" --no-direct-data\tDo not allow direct data references when optimizing\n")); |
| 18867 | + fprintf (file, _(" --rodata-writable\tPut read-only data in writable data section\n")); |
| 18868 | + fprintf (file, _(" --no-rodata-writable\tDo not put read-only data in writable data section\n")); |
| 18869 | + fprintf (file, _(" --stack <size>\tSet the initial size of the stack\n")); |
| 18870 | +' |
| 18871 | + |
| 18872 | +PARSE_AND_LIST_ARGS_CASES=' |
| 18873 | + case OPTION_DIRECT_DATA: |
| 18874 | + direct_data_refs = 1; |
| 18875 | + break; |
| 18876 | + case OPTION_NO_DIRECT_DATA: |
| 18877 | + direct_data_refs = 0; |
| 18878 | + break; |
| 18879 | + case OPTION_RODATA_WRITABLE: |
| 18880 | + rodata_writable = 1; |
| 18881 | + break; |
| 18882 | + case OPTION_NO_RODATA_WRITABLE: |
| 18883 | + rodata_writable = 0; |
| 18884 | + break; |
| 18885 | + case OPTION_STACK: |
| 18886 | + { |
| 18887 | + char *end; |
| 18888 | + stack_size = strtoul (optarg, &end, 0); |
| 18889 | + if (end == optarg) |
| 18890 | + einfo (_("%P%F: invalid hex number for parameter '%s'\n"), optarg); |
| 18891 | + optarg = end; |
| 18892 | + break; |
| 18893 | + } |
| 18894 | +' |
| 18895 | + |
| 18896 | +# Replace some of the standard ELF functions with our own versions. |
| 18897 | +# |
| 18898 | +LDEMUL_AFTER_OPEN=avr32_elf_after_open |
| 18899 | +LDEMUL_GET_SCRIPT=avr32_elf_get_script |
| 18900 | +LDEMUL_SET_SYMBOLS=avr32_elf_set_symbols |
| 18901 | --- a/ld/Makefile.am |
| 18902 | +++ b/ld/Makefile.am |
| 18903 | @@ -148,6 +148,58 @@ ALL_EMULATIONS = \ |
| 18904 | eavr5.o \ |
| 18905 | eavr51.o \ |
| 18906 | eavr6.o \ |
| 18907 | + eavr32elf_ap7000.o \ |
| 18908 | + eavr32elf_ap7001.o \ |
| 18909 | + eavr32elf_ap7002.o \ |
| 18910 | + eavr32elf_ap7200.o \ |
| 18911 | + eavr32elf_uc3a0128.o \ |
| 18912 | + eavr32elf_uc3a0256.o \ |
| 18913 | + eavr32elf_uc3a0512.o \ |
| 18914 | + eavr32elf_uc3a0512es.o \ |
| 18915 | + eavr32elf_uc3a1128.o \ |
| 18916 | + eavr32elf_uc3a1256.o \ |
| 18917 | + eavr32elf_uc3a1512es.o \ |
| 18918 | + eavr32elf_uc3a1512.o \ |
| 18919 | + eavr32elf_uc3a364.o \ |
| 18920 | + eavr32elf_uc3a364s.o \ |
| 18921 | + eavr32elf_uc3a3128.o \ |
| 18922 | + eavr32elf_uc3a3128s.o \ |
| 18923 | + eavr32elf_uc3a3256.o \ |
| 18924 | + eavr32elf_uc3a3256s.o \ |
| 18925 | + eavr32elf_uc3b064.o \ |
| 18926 | + eavr32elf_uc3b0128.o \ |
| 18927 | + eavr32elf_uc3b0256es.o \ |
| 18928 | + eavr32elf_uc3b0256.o \ |
| 18929 | + eavr32elf_uc3b0512.o \ |
| 18930 | + eavr32elf_uc3b0512revc.o \ |
| 18931 | + eavr32elf_uc3b164.o \ |
| 18932 | + eavr32elf_uc3b1128.o \ |
| 18933 | + eavr32elf_uc3b1256es.o \ |
| 18934 | + eavr32elf_uc3b1256.o \ |
| 18935 | + eavr32elf_uc3b1512.o \ |
| 18936 | + eavr32elf_uc3b1512revc.o \ |
| 18937 | + eavr32elf_uc3c0512crevc.o \ |
| 18938 | + eavr32elf_uc3c1512crevc.o \ |
| 18939 | + eavr32elf_uc3c2512crevc.o \ |
| 18940 | + eavr32elf_atuc3l0256.o \ |
| 18941 | + eavr32elf_mxt768e.o \ |
| 18942 | + eavr32elf_uc3l064.o \ |
| 18943 | + eavr32elf_uc3l032.o \ |
| 18944 | + eavr32elf_uc3l016.o \ |
| 18945 | + eavr32elf_uc3l064revb.o \ |
| 18946 | + eavr32elf_uc3c064c.o \ |
| 18947 | + eavr32elf_uc3c0128c.o \ |
| 18948 | + eavr32elf_uc3c0256c.o \ |
| 18949 | + eavr32elf_uc3c0512c.o \ |
| 18950 | + eavr32elf_uc3c164c.o \ |
| 18951 | + eavr32elf_uc3c1128c.o \ |
| 18952 | + eavr32elf_uc3c1256c.o \ |
| 18953 | + eavr32elf_uc3c1512c.o \ |
| 18954 | + eavr32elf_uc3c264c.o \ |
| 18955 | + eavr32elf_uc3c2128c.o \ |
| 18956 | + eavr32elf_uc3c2256c.o \ |
| 18957 | + eavr32elf_uc3c2512c.o \ |
| 18958 | + eavr32linux.o \ |
| 18959 | ecoff_i860.o \ |
| 18960 | ecoff_sparc.o \ |
| 18961 | eelf32_spu.o \ |
| 18962 | @@ -727,6 +779,214 @@ eavr6.c: $(srcdir)/emulparams/avr6.sh $( |
| 18963 | $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \ |
| 18964 | ${GEN_DEPENDS} |
| 18965 | ${GENSCRIPTS} avr6 "$(tdir_avr2)" |
| 18966 | +eavr32elf_ap7000.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 18967 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 18968 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 18969 | + ${GENSCRIPTS} avr32elf_ap7000 "$(tdir_avr32)" avr32elf |
| 18970 | +eavr32elf_ap7001.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 18971 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 18972 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 18973 | + ${GENSCRIPTS} avr32elf_ap7001 "$(tdir_avr32)" avr32elf |
| 18974 | +eavr32elf_ap7002.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 18975 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 18976 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 18977 | + ${GENSCRIPTS} avr32elf_ap7002 "$(tdir_avr32)" avr32elf |
| 18978 | +eavr32elf_ap7200.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 18979 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 18980 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 18981 | + ${GENSCRIPTS} avr32elf_ap7200 "$(tdir_avr32)" avr32elf |
| 18982 | +eavr32elf_uc3a0128.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 18983 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 18984 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 18985 | + ${GENSCRIPTS} avr32elf_uc3a0128 "$(tdir_avr32)" avr32elf |
| 18986 | +eavr32elf_uc3a0256.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 18987 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 18988 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 18989 | + ${GENSCRIPTS} avr32elf_uc3a0256 "$(tdir_avr32)" avr32elf |
| 18990 | +eavr32elf_uc3a0512.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 18991 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 18992 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 18993 | + ${GENSCRIPTS} avr32elf_uc3a0512 "$(tdir_avr32)" avr32elf |
| 18994 | +eavr32elf_uc3a0512es.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 18995 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 18996 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 18997 | + ${GENSCRIPTS} avr32elf_uc3a0512es "$(tdir_avr32)" avr32elf |
| 18998 | +eavr32elf_uc3a1128.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 18999 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19000 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19001 | + ${GENSCRIPTS} avr32elf_uc3a1128 "$(tdir_avr32)" avr32elf |
| 19002 | +eavr32elf_uc3a1256.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19003 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19004 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19005 | + ${GENSCRIPTS} avr32elf_uc3a1256 "$(tdir_avr32)" avr32elf |
| 19006 | +eavr32elf_uc3a1512.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19007 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19008 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19009 | + ${GENSCRIPTS} avr32elf_uc3a1512 "$(tdir_avr32)" avr32elf |
| 19010 | +eavr32elf_uc3a1512es.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19011 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19012 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19013 | + ${GENSCRIPTS} avr32elf_uc3a1512es "$(tdir_avr32)" avr32elf |
| 19014 | +eavr32elf_uc3a364.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19015 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19016 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19017 | + ${GENSCRIPTS} avr32elf_uc3a364 "$(tdir_avr32)" avr32elf |
| 19018 | +eavr32elf_uc3a364s.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19019 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19020 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19021 | + ${GENSCRIPTS} avr32elf_uc3a364s "$(tdir_avr32)" avr32elf |
| 19022 | +eavr32elf_uc3a3128.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19023 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19024 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19025 | + ${GENSCRIPTS} avr32elf_uc3a3128 "$(tdir_avr32)" avr32elf |
| 19026 | +eavr32elf_uc3a3128s.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19027 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19028 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19029 | + ${GENSCRIPTS} avr32elf_uc3a3128s "$(tdir_avr32)" avr32elf |
| 19030 | +eavr32elf_uc3a3256.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19031 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19032 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19033 | + ${GENSCRIPTS} avr32elf_uc3a3256 "$(tdir_avr32)" avr32elf |
| 19034 | +eavr32elf_uc3a3256s.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19035 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19036 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19037 | + ${GENSCRIPTS} avr32elf_uc3a3256s "$(tdir_avr32)" avr32elf |
| 19038 | +eavr32elf_uc3b064.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19039 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19040 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19041 | + ${GENSCRIPTS} avr32elf_uc3b064 "$(tdir_avr32)" avr32elf |
| 19042 | +eavr32elf_uc3b0128.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19043 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19044 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19045 | + ${GENSCRIPTS} avr32elf_uc3b0128 "$(tdir_avr32)" avr32elf |
| 19046 | +eavr32elf_uc3b0256.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19047 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19048 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19049 | + ${GENSCRIPTS} avr32elf_uc3b0256 "$(tdir_avr32)" avr32elf |
| 19050 | +eavr32elf_uc3b0256es.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19051 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19052 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19053 | + ${GENSCRIPTS} avr32elf_uc3b0256es "$(tdir_avr32)" avr32elf |
| 19054 | +eavr32elf_uc3b0512.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19055 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19056 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19057 | + ${GENSCRIPTS} avr32elf_uc3b0512 "$(tdir_avr32)" avr32elf |
| 19058 | +eavr32elf_uc3b0512revc.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19059 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19060 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19061 | + ${GENSCRIPTS} avr32elf_uc3b0512revc "$(tdir_avr32)" avr32elf |
| 19062 | +eavr32elf_uc3b164.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19063 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19064 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19065 | + ${GENSCRIPTS} avr32elf_uc3b164 "$(tdir_avr32)" avr32elf |
| 19066 | +eavr32elf_uc3b1128.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19067 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19068 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19069 | + ${GENSCRIPTS} avr32elf_uc3b1128 "$(tdir_avr32)" avr32elf |
| 19070 | +eavr32elf_uc3b1256.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19071 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19072 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19073 | + ${GENSCRIPTS} avr32elf_uc3b1256 "$(tdir_avr32)" avr32elf |
| 19074 | +eavr32elf_uc3b1256es.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19075 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19076 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19077 | + ${GENSCRIPTS} avr32elf_uc3b1256es "$(tdir_avr32)" avr32elf |
| 19078 | +eavr32elf_uc3b1512.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19079 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19080 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19081 | + ${GENSCRIPTS} avr32elf_uc3b1512 "$(tdir_avr32)" avr32elf |
| 19082 | +eavr32elf_uc3b1512revc.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19083 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19084 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19085 | + ${GENSCRIPTS} avr32elf_uc3b1512revc "$(tdir_avr32)" avr32elf |
| 19086 | +eavr32elf_uc3c0512crevc.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19087 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19088 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19089 | + ${GENSCRIPTS} avr32elf_uc3c0512crevc "$(tdir_avr32)" avr32elf |
| 19090 | +eavr32elf_uc3c1512crevc.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19091 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19092 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19093 | + ${GENSCRIPTS} avr32elf_uc3c1512crevc "$(tdir_avr32)" avr32elf |
| 19094 | +eavr32elf_uc3c2512crevc.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19095 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19096 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19097 | + ${GENSCRIPTS} avr32elf_uc3c2512crevc "$(tdir_avr32)" avr32elf |
| 19098 | +eavr32elf_atuc3l0256.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19099 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19100 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19101 | + ${GENSCRIPTS} avr32elf_atuc3l0256 "$(tdir_avr32)" avr32elf |
| 19102 | +eavr32elf_mxt768e.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19103 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19104 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19105 | + ${GENSCRIPTS} avr32elf_mxt768e "$(tdir_avr32)" avr32elf |
| 19106 | +eavr32elf_uc3l064.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19107 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19108 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19109 | + ${GENSCRIPTS} avr32elf_uc3l064 "$(tdir_avr32)" avr32elf |
| 19110 | +eavr32elf_uc3l032.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19111 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19112 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19113 | + ${GENSCRIPTS} avr32elf_uc3l032 "$(tdir_avr32)" avr32elf |
| 19114 | +eavr32elf_uc3l016.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19115 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19116 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19117 | + ${GENSCRIPTS} avr32elf_uc3l016 "$(tdir_avr32)" avr32elf |
| 19118 | +eavr32elf_uc3l064revb.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19119 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19120 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19121 | + ${GENSCRIPTS} avr32elf_uc3l064revb "$(tdir_avr32)" avr32elf |
| 19122 | +eavr32elf_uc3c064c.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19123 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19124 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19125 | + ${GENSCRIPTS} avr32elf_uc3c064c "$(tdir_avr32)" avr32elf |
| 19126 | +eavr32elf_uc3c0128c.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19127 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19128 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19129 | + ${GENSCRIPTS} avr32elf_uc3c0128c "$(tdir_avr32)" avr32elf |
| 19130 | +eavr32elf_uc3c0256c.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19131 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19132 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19133 | + ${GENSCRIPTS} avr32elf_uc3c0256c "$(tdir_avr32)" avr32elf |
| 19134 | +eavr32elf_uc3c0512c.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19135 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19136 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19137 | + ${GENSCRIPTS} avr32elf_uc3c0512c "$(tdir_avr32)" avr32elf |
| 19138 | +eavr32elf_uc3c164c.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19139 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19140 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19141 | + ${GENSCRIPTS} avr32elf_uc3c164c "$(tdir_avr32)" avr32elf |
| 19142 | +eavr32elf_uc3c1128c.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19143 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19144 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19145 | + ${GENSCRIPTS} avr32elf_uc3c1128c "$(tdir_avr32)" avr32elf |
| 19146 | +eavr32elf_uc3c1256c.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19147 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19148 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19149 | + ${GENSCRIPTS} avr32elf_uc3c1256c "$(tdir_avr32)" avr32elf |
| 19150 | +eavr32elf_uc3c1512c.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19151 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19152 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19153 | + ${GENSCRIPTS} avr32elf_uc3c1512c "$(tdir_avr32)" avr32elf |
| 19154 | +eavr32elf_uc3c264c.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19155 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19156 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19157 | + ${GENSCRIPTS} avr32elf_uc3c264c "$(tdir_avr32)" avr32elf |
| 19158 | +eavr32elf_uc3c2128c.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19159 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19160 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19161 | + ${GENSCRIPTS} avr32elf_uc3c2128c "$(tdir_avr32)" avr32elf |
| 19162 | +eavr32elf_uc3c2256c.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19163 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19164 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19165 | + ${GENSCRIPTS} avr32elf_uc3c2256c "$(tdir_avr32)" avr32elf |
| 19166 | +eavr32elf_uc3c2512c.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 19167 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19168 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 19169 | + ${GENSCRIPTS} avr32elf_uc3c2512c "$(tdir_avr32)" avr32elf |
| 19170 | +eavr32linux.c: $(srcdir)/emulparams/avr32linux.sh \ |
| 19171 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 19172 | + $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} |
| 19173 | + ${GENSCRIPTS} avr32linux "$(tdir_avr32)" |
| 19174 | ecoff_i860.c: $(srcdir)/emulparams/coff_i860.sh \ |
| 19175 | $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/i860coff.sc ${GEN_DEPENDS} |
| 19176 | ${GENSCRIPTS} coff_i860 "$(tdir_coff_i860)" |
| 19177 | @@ -1964,7 +2224,9 @@ install-exec-local: ld-new$(EXEEXT) |
| 19178 | || $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) ld-new$(EXEEXT) $(DESTDIR)$(tooldir)/bin/ld$(EXEEXT); \ |
| 19179 | fi |
| 19180 | |
| 19181 | -install-data-local: |
| 19182 | +# We want install to imply install-info as per GNU standards, despite the |
| 19183 | +# cygnus option. |
| 19184 | +install-data-local: install-info |
| 19185 | $(mkinstalldirs) $(DESTDIR)$(scriptdir)/ldscripts |
| 19186 | for f in ldscripts/*; do \ |
| 19187 | $(INSTALL_DATA) $$f $(DESTDIR)$(scriptdir)/$$f ; \ |
| 19188 | --- /dev/null |
| 19189 | +++ b/ld/scripttempl/avr32.sc |
| 19190 | @@ -0,0 +1,459 @@ |
| 19191 | +# |
| 19192 | +# Unusual variables checked by this code: |
| 19193 | +# NOP - four byte opcode for no-op (defaults to 0) |
| 19194 | +# NO_SMALL_DATA - no .sbss/.sbss2/.sdata/.sdata2 sections if not |
| 19195 | +# empty. |
| 19196 | +# SMALL_DATA_CTOR - .ctors contains small data. |
| 19197 | +# SMALL_DATA_DTOR - .dtors contains small data. |
| 19198 | +# DATA_ADDR - if end-of-text-plus-one-page isn't right for data start |
| 19199 | +# INITIAL_READONLY_SECTIONS - at start of text segment |
| 19200 | +# OTHER_READONLY_SECTIONS - other than .text .init .rodata ... |
| 19201 | +# (e.g., .PARISC.milli) |
| 19202 | +# OTHER_TEXT_SECTIONS - these get put in .text when relocating |
| 19203 | +# OTHER_READWRITE_SECTIONS - other than .data .bss .ctors .sdata ... |
| 19204 | +# (e.g., .PARISC.global) |
| 19205 | +# OTHER_RELRO_SECTIONS - other than .data.rel.ro ... |
| 19206 | +# (e.g. PPC32 .fixup, .got[12]) |
| 19207 | +# OTHER_BSS_SECTIONS - other than .bss .sbss ... |
| 19208 | +# OTHER_SECTIONS - at the end |
| 19209 | +# EXECUTABLE_SYMBOLS - symbols that must be defined for an |
| 19210 | +# executable (e.g., _DYNAMIC_LINK) |
| 19211 | +# TEXT_START_ADDR - the first byte of the text segment, after any |
| 19212 | +# headers. |
| 19213 | +# TEXT_BASE_ADDRESS - the first byte of the text segment. |
| 19214 | +# TEXT_START_SYMBOLS - symbols that appear at the start of the |
| 19215 | +# .text section. |
| 19216 | +# DATA_START_SYMBOLS - symbols that appear at the start of the |
| 19217 | +# .data section. |
| 19218 | +# OTHER_GOT_SYMBOLS - symbols defined just before .got. |
| 19219 | +# OTHER_GOT_SECTIONS - sections just after .got. |
| 19220 | +# OTHER_SDATA_SECTIONS - sections just after .sdata. |
| 19221 | +# OTHER_BSS_SYMBOLS - symbols that appear at the start of the |
| 19222 | +# .bss section besides __bss_start. |
| 19223 | +# DATA_PLT - .plt should be in data segment, not text segment. |
| 19224 | +# PLT_BEFORE_GOT - .plt just before .got when .plt is in data segement. |
| 19225 | +# BSS_PLT - .plt should be in bss segment |
| 19226 | +# TEXT_DYNAMIC - .dynamic in text segment, not data segment. |
| 19227 | +# EMBEDDED - whether this is for an embedded system. |
| 19228 | +# SHLIB_TEXT_START_ADDR - if set, add to SIZEOF_HEADERS to set |
| 19229 | +# start address of shared library. |
| 19230 | +# INPUT_FILES - INPUT command of files to always include |
| 19231 | +# WRITABLE_RODATA - if set, the .rodata section should be writable |
| 19232 | +# INIT_START, INIT_END - statements just before and just after |
| 19233 | +# combination of .init sections. |
| 19234 | +# FINI_START, FINI_END - statements just before and just after |
| 19235 | +# combination of .fini sections. |
| 19236 | +# STACK_ADDR - start of a .stack section. |
| 19237 | +# OTHER_END_SYMBOLS - symbols to place right at the end of the script. |
| 19238 | +# SEPARATE_GOTPLT - if set, .got.plt should be separate output section, |
| 19239 | +# so that .got can be in the RELRO area. It should be set to |
| 19240 | +# the number of bytes in the beginning of .got.plt which can be |
| 19241 | +# in the RELRO area as well. |
| 19242 | +# |
| 19243 | +# When adding sections, do note that the names of some sections are used |
| 19244 | +# when specifying the start address of the next. |
| 19245 | +# |
| 19246 | + |
| 19247 | +# Many sections come in three flavours. There is the 'real' section, |
| 19248 | +# like ".data". Then there are the per-procedure or per-variable |
| 19249 | +# sections, generated by -ffunction-sections and -fdata-sections in GCC, |
| 19250 | +# and useful for --gc-sections, which for a variable "foo" might be |
| 19251 | +# ".data.foo". Then there are the linkonce sections, for which the linker |
| 19252 | +# eliminates duplicates, which are named like ".gnu.linkonce.d.foo". |
| 19253 | +# The exact correspondences are: |
| 19254 | +# |
| 19255 | +# Section Linkonce section |
| 19256 | +# .text .gnu.linkonce.t.foo |
| 19257 | +# .rodata .gnu.linkonce.r.foo |
| 19258 | +# .data .gnu.linkonce.d.foo |
| 19259 | +# .bss .gnu.linkonce.b.foo |
| 19260 | +# .sdata .gnu.linkonce.s.foo |
| 19261 | +# .sbss .gnu.linkonce.sb.foo |
| 19262 | +# .sdata2 .gnu.linkonce.s2.foo |
| 19263 | +# .sbss2 .gnu.linkonce.sb2.foo |
| 19264 | +# .debug_info .gnu.linkonce.wi.foo |
| 19265 | +# .tdata .gnu.linkonce.td.foo |
| 19266 | +# .tbss .gnu.linkonce.tb.foo |
| 19267 | +# |
| 19268 | +# Each of these can also have corresponding .rel.* and .rela.* sections. |
| 19269 | + |
| 19270 | +test -z "$ENTRY" && ENTRY=_start |
| 19271 | +test -z "${BIG_OUTPUT_FORMAT}" && BIG_OUTPUT_FORMAT=${OUTPUT_FORMAT} |
| 19272 | +test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT} |
| 19273 | +if [ -z "$MACHINE" ]; then OUTPUT_ARCH=${ARCH}; else OUTPUT_ARCH=${ARCH}:${MACHINE}; fi |
| 19274 | +test -z "${ELFSIZE}" && ELFSIZE=32 |
| 19275 | +test -z "${ALIGNMENT}" && ALIGNMENT="${ELFSIZE} / 8" |
| 19276 | +test "$LD_FLAG" = "N" && DATA_ADDR=. |
| 19277 | +test -n "$CREATE_SHLIB$CREATE_PIE" && test -n "$SHLIB_DATA_ADDR" && COMMONPAGESIZE="" |
| 19278 | +test -z "$CREATE_SHLIB$CREATE_PIE" && test -n "$DATA_ADDR" && COMMONPAGESIZE="" |
| 19279 | +test -n "$RELRO_NOW" && unset SEPARATE_GOTPLT |
| 19280 | +if test -n "$RELOCATING"; then |
| 19281 | + RO_REGION="${RO_VMA_REGION+ >}${RO_VMA_REGION}${RO_LMA_REGION+ AT>}${RO_LMA_REGION}" |
| 19282 | + RW_REGION="${RW_VMA_REGION+ >}${RW_VMA_REGION}${RW_LMA_REGION+ AT>}${RW_LMA_REGION}" |
| 19283 | + RW_BSS_REGION="${RW_VMA_REGION+ >}${RW_VMA_REGION}" |
| 19284 | +else |
| 19285 | + RO_REGION="" |
| 19286 | + RW_REGION="" |
| 19287 | + RW_BSS_REGION="" |
| 19288 | +fi |
| 19289 | +INTERP=".interp ${RELOCATING-0} : { *(.interp) }${RO_REGION}" |
| 19290 | +PLT=".plt ${RELOCATING-0} : { *(.plt) }" |
| 19291 | +if test -z "$GOT"; then |
| 19292 | + if test -z "$SEPARATE_GOTPLT"; then |
| 19293 | + GOT=".got ${RELOCATING-0} : { *(.got.plt) *(.got) }" |
| 19294 | + else |
| 19295 | + GOT=".got ${RELOCATING-0} : { *(.got) }" |
| 19296 | + GOTPLT="${RELOCATING+${DATA_SEGMENT_RELRO_GOTPLT_END}} |
| 19297 | + .got.plt ${RELOCATING-0} : { *(.got.plt) }" |
| 19298 | + fi |
| 19299 | +fi |
| 19300 | +DALIGN=".dalign : { . = ALIGN(${DATA_SEGMENT_ALIGN}); PROVIDE(_data_lma = .); }${RO_REGION}" |
| 19301 | +BALIGN=".balign : { . = ALIGN(${BSS_ALIGNMENT}); _edata = .; }${RW_REGION}" |
| 19302 | +DYNAMIC=".dynamic ${RELOCATING-0} : { *(.dynamic) }" |
| 19303 | +RODATA=".rodata ${RELOCATING-0} : { *(.rodata${RELOCATING+ .rodata.* .gnu.linkonce.r.*}) }" |
| 19304 | +DATARELRO=".data.rel.ro : { *(.data.rel.ro.local) *(.data.rel.ro*) }${RW_REGION}" |
| 19305 | +STACKNOTE="/DISCARD/ : { *(.note.GNU-stack) }" |
| 19306 | +if test -z "${NO_SMALL_DATA}"; then |
| 19307 | + SBSS=".sbss ${RELOCATING-0} : |
| 19308 | + { |
| 19309 | + ${RELOCATING+PROVIDE (__sbss_start = .);} |
| 19310 | + ${RELOCATING+PROVIDE (___sbss_start = .);} |
| 19311 | + ${CREATE_SHLIB+*(.sbss2 .sbss2.* .gnu.linkonce.sb2.*)} |
| 19312 | + *(.dynsbss) |
| 19313 | + *(.sbss${RELOCATING+ .sbss.* .gnu.linkonce.sb.*}) |
| 19314 | + *(.scommon) |
| 19315 | + ${RELOCATING+PROVIDE (__sbss_end = .);} |
| 19316 | + ${RELOCATING+PROVIDE (___sbss_end = .);} |
| 19317 | + }${RW_BSS_REGION}" |
| 19318 | + SBSS2=".sbss2 ${RELOCATING-0} : { *(.sbss2${RELOCATING+ .sbss2.* .gnu.linkonce.sb2.*}) }${RW_REGION}" |
| 19319 | + SDATA="/* We want the small data sections together, so single-instruction offsets |
| 19320 | + can access them all, and initialized data all before uninitialized, so |
| 19321 | + we can shorten the on-disk segment size. */ |
| 19322 | + .sdata ${RELOCATING-0} : |
| 19323 | + { |
| 19324 | + ${RELOCATING+${SDATA_START_SYMBOLS}} |
| 19325 | + ${CREATE_SHLIB+*(.sdata2 .sdata2.* .gnu.linkonce.s2.*)} |
| 19326 | + *(.sdata${RELOCATING+ .sdata.* .gnu.linkonce.s.*}) |
| 19327 | + }${RW_REGION}" |
| 19328 | + SDATA2=".sdata2 ${RELOCATING-0} : { *(.sdata2${RELOCATING+ .sdata2.* .gnu.linkonce.s2.*}) }${RW_REGION}" |
| 19329 | + REL_SDATA=".rel.sdata ${RELOCATING-0} : { *(.rel.sdata${RELOCATING+ .rel.sdata.* .rel.gnu.linkonce.s.*}) }${RO_REGION} |
| 19330 | + .rela.sdata ${RELOCATING-0} : { *(.rela.sdata${RELOCATING+ .rela.sdata.* .rela.gnu.linkonce.s.*}) }" |
| 19331 | + REL_SBSS=".rel.sbss ${RELOCATING-0} : { *(.rel.sbss${RELOCATING+ .rel.sbss.* .rel.gnu.linkonce.sb.*}) }${RO_REGION} |
| 19332 | + .rela.sbss ${RELOCATING-0} : { *(.rela.sbss${RELOCATING+ .rela.sbss.* .rela.gnu.linkonce.sb.*}) }${RO_REGION}" |
| 19333 | + REL_SDATA2=".rel.sdata2 ${RELOCATING-0} : { *(.rel.sdata2${RELOCATING+ .rel.sdata2.* .rel.gnu.linkonce.s2.*}) }${RO_REGION} |
| 19334 | + .rela.sdata2 ${RELOCATING-0} : { *(.rela.sdata2${RELOCATING+ .rela.sdata2.* .rela.gnu.linkonce.s2.*}) }${RO_REGION}" |
| 19335 | + REL_SBSS2=".rel.sbss2 ${RELOCATING-0} : { *(.rel.sbss2${RELOCATING+ .rel.sbss2.* .rel.gnu.linkonce.sb2.*}) }${RO_REGION} |
| 19336 | + .rela.sbss2 ${RELOCATING-0} : { *(.rela.sbss2${RELOCATING+ .rela.sbss2.* .rela.gnu.linkonce.sb2.*}) }${RO_REGION}" |
| 19337 | +else |
| 19338 | + NO_SMALL_DATA=" " |
| 19339 | +fi |
| 19340 | +test -n "$SEPARATE_GOTPLT" && SEPARATE_GOTPLT=" " |
| 19341 | +CTOR=".ctors ${CONSTRUCTING-0} : |
| 19342 | + { |
| 19343 | + ${CONSTRUCTING+${CTOR_START}} |
| 19344 | + /* gcc uses crtbegin.o to find the start of |
| 19345 | + the constructors, so we make sure it is |
| 19346 | + first. Because this is a wildcard, it |
| 19347 | + doesn't matter if the user does not |
| 19348 | + actually link against crtbegin.o; the |
| 19349 | + linker won't look for a file to match a |
| 19350 | + wildcard. The wildcard also means that it |
| 19351 | + doesn't matter which directory crtbegin.o |
| 19352 | + is in. */ |
| 19353 | + |
| 19354 | + KEEP (*crtbegin*.o(.ctors)) |
| 19355 | + |
| 19356 | + /* We don't want to include the .ctor section from |
| 19357 | + from the crtend.o file until after the sorted ctors. |
| 19358 | + The .ctor section from the crtend file contains the |
| 19359 | + end of ctors marker and it must be last */ |
| 19360 | + |
| 19361 | + KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .ctors)) |
| 19362 | + KEEP (*(SORT(.ctors.*))) |
| 19363 | + KEEP (*(.ctors)) |
| 19364 | + ${CONSTRUCTING+${CTOR_END}} |
| 19365 | + }" |
| 19366 | +DTOR=".dtors ${CONSTRUCTING-0} : |
| 19367 | + { |
| 19368 | + ${CONSTRUCTING+${DTOR_START}} |
| 19369 | + KEEP (*crtbegin*.o(.dtors)) |
| 19370 | + KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .dtors)) |
| 19371 | + KEEP (*(SORT(.dtors.*))) |
| 19372 | + KEEP (*(.dtors)) |
| 19373 | + ${CONSTRUCTING+${DTOR_END}} |
| 19374 | + }" |
| 19375 | +STACK=".stack ${RELOCATING-0}${RELOCATING+${STACK_ADDR}} : |
| 19376 | + { |
| 19377 | + ${RELOCATING+_stack = .;} |
| 19378 | + *(.stack) |
| 19379 | + ${RELOCATING+${STACK_SIZE+. = ${STACK_SIZE};}} |
| 19380 | + ${RELOCATING+_estack = .;} |
| 19381 | + }${RW_BSS_REGION}" |
| 19382 | + |
| 19383 | +# if this is for an embedded system, don't add SIZEOF_HEADERS. |
| 19384 | +if [ -z "$EMBEDDED" ]; then |
| 19385 | + test -z "${TEXT_BASE_ADDRESS}" && TEXT_BASE_ADDRESS="${TEXT_START_ADDR} + SIZEOF_HEADERS" |
| 19386 | +else |
| 19387 | + test -z "${TEXT_BASE_ADDRESS}" && TEXT_BASE_ADDRESS="${TEXT_START_ADDR}" |
| 19388 | +fi |
| 19389 | + |
| 19390 | +cat <<EOF |
| 19391 | +OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}", |
| 19392 | + "${LITTLE_OUTPUT_FORMAT}") |
| 19393 | +OUTPUT_ARCH(${OUTPUT_ARCH}) |
| 19394 | +ENTRY(${ENTRY}) |
| 19395 | + |
| 19396 | +${RELOCATING+${LIB_SEARCH_DIRS}} |
| 19397 | +${RELOCATING+/* Do we need any of these for elf? |
| 19398 | + __DYNAMIC = 0; ${STACKZERO+${STACKZERO}} ${SHLIB_PATH+${SHLIB_PATH}} */} |
| 19399 | +${RELOCATING+${EXECUTABLE_SYMBOLS}} |
| 19400 | +${RELOCATING+${INPUT_FILES}} |
| 19401 | +${RELOCATING- /* For some reason, the Solaris linker makes bad executables |
| 19402 | + if gld -r is used and the intermediate file has sections starting |
| 19403 | + at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld |
| 19404 | + bug. But for now assigning the zero vmas works. */} |
| 19405 | + |
| 19406 | +${RELOCATING+${MEMORY}} |
| 19407 | + |
| 19408 | +SECTIONS |
| 19409 | +{ |
| 19410 | + /* Read-only sections, merged into text segment: */ |
| 19411 | + ${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+PROVIDE (__executable_start = ${TEXT_START_ADDR}); . = ${TEXT_BASE_ADDRESS};}}} |
| 19412 | + ${PADDING} |
| 19413 | + ${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_TEXT_START_ADDR:-0} + SIZEOF_HEADERS;}} |
| 19414 | + ${CREATE_PIE+${RELOCATING+. = ${SHLIB_TEXT_START_ADDR:-0} + SIZEOF_HEADERS;}} |
| 19415 | + ${CREATE_SHLIB-${INTERP}} |
| 19416 | + ${INITIAL_READONLY_SECTIONS} |
| 19417 | + ${TEXT_DYNAMIC+${DYNAMIC}${RO_REGION}} |
| 19418 | + .hash ${RELOCATING-0} : { *(.hash) }${RO_REGION} |
| 19419 | + .dynsym ${RELOCATING-0} : { *(.dynsym) }${RO_REGION} |
| 19420 | + .dynstr ${RELOCATING-0} : { *(.dynstr) }${RO_REGION} |
| 19421 | + .gnu.version ${RELOCATING-0} : { *(.gnu.version) }${RO_REGION} |
| 19422 | + .gnu.version_d ${RELOCATING-0}: { *(.gnu.version_d) }${RO_REGION} |
| 19423 | + .gnu.version_r ${RELOCATING-0}: { *(.gnu.version_r) }${RO_REGION} |
| 19424 | + |
| 19425 | +EOF |
| 19426 | +if [ "x$COMBRELOC" = x ]; then |
| 19427 | + COMBRELOCCAT=cat |
| 19428 | +else |
| 19429 | + COMBRELOCCAT="cat > $COMBRELOC" |
| 19430 | +fi |
| 19431 | +eval $COMBRELOCCAT <<EOF |
| 19432 | + .rel.init ${RELOCATING-0} : { *(.rel.init) }${RO_REGION} |
| 19433 | + .rela.init ${RELOCATING-0} : { *(.rela.init) }${RO_REGION} |
| 19434 | + .rel.text ${RELOCATING-0} : { *(.rel.text${RELOCATING+ .rel.text.* .rel.gnu.linkonce.t.*}) }${RO_REGION} |
| 19435 | + .rela.text ${RELOCATING-0} : { *(.rela.text${RELOCATING+ .rela.text.* .rela.gnu.linkonce.t.*}) }${RO_REGION} |
| 19436 | + .rel.fini ${RELOCATING-0} : { *(.rel.fini) }${RO_REGION} |
| 19437 | + .rela.fini ${RELOCATING-0} : { *(.rela.fini) }${RO_REGION} |
| 19438 | + .rel.rodata ${RELOCATING-0} : { *(.rel.rodata${RELOCATING+ .rel.rodata.* .rel.gnu.linkonce.r.*}) }${RO_REGION} |
| 19439 | + .rela.rodata ${RELOCATING-0} : { *(.rela.rodata${RELOCATING+ .rela.rodata.* .rela.gnu.linkonce.r.*}) }${RO_REGION} |
| 19440 | + ${OTHER_READONLY_RELOC_SECTIONS} |
| 19441 | + .rel.data.rel.ro ${RELOCATING-0} : { *(.rel.data.rel.ro${RELOCATING+*}) }${RO_REGION} |
| 19442 | + .rela.data.rel.ro ${RELOCATING-0} : { *(.rel.data.rel.ro${RELOCATING+*}) }${RO_REGION} |
| 19443 | + .rel.data ${RELOCATING-0} : { *(.rel.data${RELOCATING+ .rel.data.* .rel.gnu.linkonce.d.*}) }${RO_REGION} |
| 19444 | + .rela.data ${RELOCATING-0} : { *(.rela.data${RELOCATING+ .rela.data.* .rela.gnu.linkonce.d.*}) }${RO_REGION} |
| 19445 | + .rel.tdata ${RELOCATING-0} : { *(.rel.tdata${RELOCATING+ .rel.tdata.* .rel.gnu.linkonce.td.*}) }${RO_REGION} |
| 19446 | + .rela.tdata ${RELOCATING-0} : { *(.rela.tdata${RELOCATING+ .rela.tdata.* .rela.gnu.linkonce.td.*}) }${RO_REGION} |
| 19447 | + .rel.tbss ${RELOCATING-0} : { *(.rel.tbss${RELOCATING+ .rel.tbss.* .rel.gnu.linkonce.tb.*}) }${RO_REGION} |
| 19448 | + .rela.tbss ${RELOCATING-0} : { *(.rela.tbss${RELOCATING+ .rela.tbss.* .rela.gnu.linkonce.tb.*}) }${RO_REGION} |
| 19449 | + .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) }${RO_REGION} |
| 19450 | + .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) }${RO_REGION} |
| 19451 | + .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) }${RO_REGION} |
| 19452 | + .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) }${RO_REGION} |
| 19453 | + .rel.got ${RELOCATING-0} : { *(.rel.got) }${RO_REGION} |
| 19454 | + .rela.got ${RELOCATING-0} : { *(.rela.got) }${RO_REGION} |
| 19455 | + ${OTHER_GOT_RELOC_SECTIONS} |
| 19456 | + ${REL_SDATA} |
| 19457 | + ${REL_SBSS} |
| 19458 | + ${REL_SDATA2} |
| 19459 | + ${REL_SBSS2} |
| 19460 | + .rel.bss ${RELOCATING-0} : { *(.rel.bss${RELOCATING+ .rel.bss.* .rel.gnu.linkonce.b.*}) }${RO_REGION} |
| 19461 | + .rela.bss ${RELOCATING-0} : { *(.rela.bss${RELOCATING+ .rela.bss.* .rela.gnu.linkonce.b.*}) }${RO_REGION} |
| 19462 | +EOF |
| 19463 | +if [ -n "$COMBRELOC" ]; then |
| 19464 | +cat <<EOF |
| 19465 | + .rel.dyn ${RELOCATING-0} : |
| 19466 | + { |
| 19467 | +EOF |
| 19468 | +sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rela\./d;s/^.*: { *\(.*\)}$/ \1/' $COMBRELOC |
| 19469 | +cat <<EOF |
| 19470 | + }${RO_REGION} |
| 19471 | + .rela.dyn ${RELOCATING-0} : |
| 19472 | + { |
| 19473 | +EOF |
| 19474 | +sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rel\./d;s/^.*: { *\(.*\)}/ \1/' $COMBRELOC |
| 19475 | +cat <<EOF |
| 19476 | + }${RO_REGION} |
| 19477 | +EOF |
| 19478 | +fi |
| 19479 | +cat <<EOF |
| 19480 | + .rel.plt ${RELOCATING-0} : { *(.rel.plt) }${RO_REGION} |
| 19481 | + .rela.plt ${RELOCATING-0} : { *(.rela.plt) }${RO_REGION} |
| 19482 | + ${OTHER_PLT_RELOC_SECTIONS} |
| 19483 | + |
| 19484 | + .init ${RELOCATING-0} : |
| 19485 | + { |
| 19486 | + ${RELOCATING+${INIT_START}} |
| 19487 | + KEEP (*(.init)) |
| 19488 | + ${RELOCATING+${INIT_END}} |
| 19489 | + }${RO_REGION} =${NOP-0} |
| 19490 | + |
| 19491 | + ${DATA_PLT-${BSS_PLT-${PLT}${RO_REGION}}} |
| 19492 | + .text ${RELOCATING-0} : |
| 19493 | + { |
| 19494 | + ${RELOCATING+${TEXT_START_SYMBOLS}} |
| 19495 | + *(.text .stub${RELOCATING+ .text.* .gnu.linkonce.t.*}) |
| 19496 | + KEEP (*(.text.*personality*)) |
| 19497 | + /* .gnu.warning sections are handled specially by elf32.em. */ |
| 19498 | + *(.gnu.warning) |
| 19499 | + ${RELOCATING+${OTHER_TEXT_SECTIONS}} |
| 19500 | + }${RO_REGION} =${NOP-0} |
| 19501 | + .fini ${RELOCATING-0} : |
| 19502 | + { |
| 19503 | + ${RELOCATING+${FINI_START}} |
| 19504 | + KEEP (*(.fini)) |
| 19505 | + ${RELOCATING+${FINI_END}} |
| 19506 | + }${RO_REGION} =${NOP-0} |
| 19507 | + ${RELOCATING+PROVIDE (__etext = .);} |
| 19508 | + ${RELOCATING+PROVIDE (_etext = .);} |
| 19509 | + ${RELOCATING+PROVIDE (etext = .);} |
| 19510 | + ${WRITABLE_RODATA-${RODATA}${RO_REGION}} |
| 19511 | + .rodata1 ${RELOCATING-0} : { *(.rodata1) }${RO_REGION} |
| 19512 | + ${CREATE_SHLIB-${SDATA2}} |
| 19513 | + ${CREATE_SHLIB-${SBSS2}} |
| 19514 | + ${OTHER_READONLY_SECTIONS} |
| 19515 | + .eh_frame_hdr : { *(.eh_frame_hdr) }${RO_REGION} |
| 19516 | + .eh_frame ${RELOCATING-0} : ONLY_IF_RO { KEEP (*(.eh_frame)) }${RO_REGION} |
| 19517 | + .gcc_except_table ${RELOCATING-0} : ONLY_IF_RO { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) }${RO_REGION} |
| 19518 | + |
| 19519 | + ${RELOCATING+${DALIGN}} |
| 19520 | + ${RELOCATING+PROVIDE (_data = ORIGIN(${RW_VMA_REGION}));} |
| 19521 | + . = ORIGIN(${RW_VMA_REGION}); |
| 19522 | + /* Exception handling */ |
| 19523 | + .eh_frame ${RELOCATING-0} : ONLY_IF_RW { KEEP (*(.eh_frame)) }${RW_REGION} |
| 19524 | + .gcc_except_table ${RELOCATING-0} : ONLY_IF_RW { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) }${RW_REGION} |
| 19525 | + |
| 19526 | + /* Thread Local Storage sections */ |
| 19527 | + .tdata ${RELOCATING-0} : { *(.tdata${RELOCATING+ .tdata.* .gnu.linkonce.td.*}) }${RW_REGION} |
| 19528 | + .tbss ${RELOCATING-0} : { *(.tbss${RELOCATING+ .tbss.* .gnu.linkonce.tb.*})${RELOCATING+ *(.tcommon)} }${RW_BSS_REGION} |
| 19529 | + |
| 19530 | + /* Ensure the __preinit_array_start label is properly aligned. We |
| 19531 | + could instead move the label definition inside the section, but |
| 19532 | + the linker would then create the section even if it turns out to |
| 19533 | + be empty, which isn't pretty. */ |
| 19534 | + ${RELOCATING+${CREATE_SHLIB-PROVIDE (__preinit_array_start = ALIGN(${ALIGNMENT}));}} |
| 19535 | + .preinit_array ${RELOCATING-0} : { KEEP (*(.preinit_array)) }${RW_REGION} |
| 19536 | + ${RELOCATING+${CREATE_SHLIB-PROVIDE (__preinit_array_end = .);}} |
| 19537 | + |
| 19538 | + ${RELOCATING+${CREATE_SHLIB-PROVIDE (__init_array_start = .);}} |
| 19539 | + .init_array ${RELOCATING-0} : { KEEP (*(.init_array)) }${RW_REGION} |
| 19540 | + ${RELOCATING+${CREATE_SHLIB-PROVIDE (__init_array_end = .);}} |
| 19541 | + |
| 19542 | + ${RELOCATING+${CREATE_SHLIB-PROVIDE (__fini_array_start = .);}} |
| 19543 | + .fini_array ${RELOCATING-0} : { KEEP (*(.fini_array)) }${RW_REGION} |
| 19544 | + ${RELOCATING+${CREATE_SHLIB-PROVIDE (__fini_array_end = .);}} |
| 19545 | + |
| 19546 | + ${SMALL_DATA_CTOR-${RELOCATING+${CTOR}${RW_REGION}}} |
| 19547 | + ${SMALL_DATA_DTOR-${RELOCATING+${DTOR}${RW_REGION}}} |
| 19548 | + .jcr ${RELOCATING-0} : { KEEP (*(.jcr)) }${RW_REGION} |
| 19549 | + |
| 19550 | + ${RELOCATING+${DATARELRO}} |
| 19551 | + ${OTHER_RELRO_SECTIONS} |
| 19552 | + ${TEXT_DYNAMIC-${DYNAMIC}${RW_REGION}} |
| 19553 | + ${NO_SMALL_DATA+${RELRO_NOW+${GOT}${RW_REGION}}} |
| 19554 | + ${NO_SMALL_DATA+${RELRO_NOW-${SEPARATE_GOTPLT+${GOT}${RW_REGION}}}} |
| 19555 | + ${NO_SMALL_DATA+${RELRO_NOW-${SEPARATE_GOTPLT+${GOTPLT}${RW_REGION}}}} |
| 19556 | + ${RELOCATING+${DATA_SEGMENT_RELRO_END}} |
| 19557 | + ${NO_SMALL_DATA+${RELRO_NOW-${SEPARATE_GOTPLT-${GOT}${RW_REGION}}}} |
| 19558 | + |
| 19559 | + ${DATA_PLT+${PLT_BEFORE_GOT-${PLT}${RW_REGION}}} |
| 19560 | + |
| 19561 | + .data ${RELOCATING-0} : |
| 19562 | + { |
| 19563 | + ${RELOCATING+${DATA_START_SYMBOLS}} |
| 19564 | + *(.data${RELOCATING+ .data.* .gnu.linkonce.d.*}) |
| 19565 | + KEEP (*(.gnu.linkonce.d.*personality*)) |
| 19566 | + ${CONSTRUCTING+SORT(CONSTRUCTORS)} |
| 19567 | + }${RW_REGION} |
| 19568 | + .data1 ${RELOCATING-0} : { *(.data1) }${RW_REGION} |
| 19569 | + ${WRITABLE_RODATA+${RODATA}${RW_REGION}} |
| 19570 | + ${OTHER_READWRITE_SECTIONS} |
| 19571 | + ${SMALL_DATA_CTOR+${RELOCATING+${CTOR}${RW_REGION}}} |
| 19572 | + ${SMALL_DATA_DTOR+${RELOCATING+${DTOR}${RW_REGION}}} |
| 19573 | + ${DATA_PLT+${PLT_BEFORE_GOT+${PLT}${RW_REGION}}} |
| 19574 | + ${RELOCATING+${OTHER_GOT_SYMBOLS}} |
| 19575 | + ${NO_SMALL_DATA-${GOT}${RW_REGION}} |
| 19576 | + ${OTHER_GOT_SECTIONS} |
| 19577 | + ${SDATA} |
| 19578 | + ${OTHER_SDATA_SECTIONS} |
| 19579 | + ${RELOCATING+${BALIGN}} |
| 19580 | + ${RELOCATING+_edata = .;} |
| 19581 | + ${RELOCATING+PROVIDE (edata = .);} |
| 19582 | + ${RELOCATING+__bss_start = .;} |
| 19583 | + ${RELOCATING+${OTHER_BSS_SYMBOLS}} |
| 19584 | + ${SBSS} |
| 19585 | + ${BSS_PLT+${PLT}${RW_REGION}} |
| 19586 | + .bss ${RELOCATING-0} : |
| 19587 | + { |
| 19588 | + *(.dynbss) |
| 19589 | + *(.bss${RELOCATING+ .bss.* .gnu.linkonce.b.*}) |
| 19590 | + *(COMMON) |
| 19591 | + /* Align here to ensure that the .bss section occupies space up to |
| 19592 | + _end. Align after .bss to ensure correct alignment even if the |
| 19593 | + .bss section disappears because there are no input sections. */ |
| 19594 | + ${RELOCATING+. = ALIGN(${BSS_ALIGNMENT});} |
| 19595 | + }${RW_BSS_REGION} |
| 19596 | + ${OTHER_BSS_SECTIONS} |
| 19597 | + ${RELOCATING+. = ALIGN(${BSS_ALIGNMENT});} |
| 19598 | + ${RELOCATING+_end = .;} |
| 19599 | + ${RELOCATING+${OTHER_BSS_END_SYMBOLS}} |
| 19600 | + ${RELOCATING+PROVIDE (end = .);} |
| 19601 | + ${RELOCATING+${DATA_SEGMENT_END}} |
| 19602 | + |
| 19603 | + /* Stabs debugging sections. */ |
| 19604 | + .stab 0 : { *(.stab) } |
| 19605 | + .stabstr 0 : { *(.stabstr) } |
| 19606 | + .stab.excl 0 : { *(.stab.excl) } |
| 19607 | + .stab.exclstr 0 : { *(.stab.exclstr) } |
| 19608 | + .stab.index 0 : { *(.stab.index) } |
| 19609 | + .stab.indexstr 0 : { *(.stab.indexstr) } |
| 19610 | + |
| 19611 | + .comment 0 : { *(.comment) } |
| 19612 | + |
| 19613 | + /* DWARF debug sections. |
| 19614 | + Symbols in the DWARF debugging sections are relative to the beginning |
| 19615 | + of the section so we begin them at 0. */ |
| 19616 | + |
| 19617 | + /* DWARF 1 */ |
| 19618 | + .debug 0 : { *(.debug) } |
| 19619 | + .line 0 : { *(.line) } |
| 19620 | + |
| 19621 | + /* GNU DWARF 1 extensions */ |
| 19622 | + .debug_srcinfo 0 : { *(.debug_srcinfo) } |
| 19623 | + .debug_sfnames 0 : { *(.debug_sfnames) } |
| 19624 | + |
| 19625 | + /* DWARF 1.1 and DWARF 2 */ |
| 19626 | + .debug_aranges 0 : { *(.debug_aranges) } |
| 19627 | + .debug_pubnames 0 : { *(.debug_pubnames) } |
| 19628 | + |
| 19629 | + /* DWARF 2 */ |
| 19630 | + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } |
| 19631 | + .debug_abbrev 0 : { *(.debug_abbrev) } |
| 19632 | + .debug_line 0 : { *(.debug_line) } |
| 19633 | + .debug_frame 0 : { *(.debug_frame) } |
| 19634 | + .debug_str 0 : { *(.debug_str) } |
| 19635 | + .debug_loc 0 : { *(.debug_loc) } |
| 19636 | + .debug_macinfo 0 : { *(.debug_macinfo) } |
| 19637 | + |
| 19638 | + /* SGI/MIPS DWARF 2 extensions */ |
| 19639 | + .debug_weaknames 0 : { *(.debug_weaknames) } |
| 19640 | + .debug_funcnames 0 : { *(.debug_funcnames) } |
| 19641 | + .debug_typenames 0 : { *(.debug_typenames) } |
| 19642 | + .debug_varnames 0 : { *(.debug_varnames) } |
| 19643 | + |
| 19644 | + ${STACK_ADDR+${STACK}} |
| 19645 | + ${OTHER_SECTIONS} |
| 19646 | + ${RELOCATING+${OTHER_END_SYMBOLS}} |
| 19647 | + ${RELOCATING+${STACKNOTE}} |
| 19648 | +} |
| 19649 | +EOF |
| 19650 | --- /dev/null |
| 19651 | +++ b/ld/testsuite/ld-avr32/avr32.exp |
| 19652 | @@ -0,0 +1,25 @@ |
| 19653 | +# Expect script for AVR32 ELF linker tests. |
| 19654 | +# Copyright 2004-2006 Atmel Corporation. |
| 19655 | +# |
| 19656 | +# This file is free software; you can redistribute it and/or modify |
| 19657 | +# it under the terms of the GNU General Public License as published by |
| 19658 | +# the Free Software Foundation; either version 2 of the License, or |
| 19659 | +# (at your option) any later version. |
| 19660 | +# |
| 19661 | +# This program is distributed in the hope that it will be useful, |
| 19662 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 19663 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 19664 | +# GNU General Public License for more details. |
| 19665 | +# |
| 19666 | +# You should have received a copy of the GNU General Public License |
| 19667 | +# along with this program; if not, write to the Free Software |
| 19668 | +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
| 19669 | +# |
| 19670 | +# Written by Haavard Skinnemoen (hskinnemoen@atmel.com) |
| 19671 | +# |
| 19672 | + |
| 19673 | +if ![istarget avr32-*-*] { |
| 19674 | + return |
| 19675 | +} |
| 19676 | + |
| 19677 | +run_dump_test "pcrel" |
| 19678 | --- /dev/null |
| 19679 | +++ b/ld/testsuite/ld-avr32/pcrel.d |
| 19680 | @@ -0,0 +1,74 @@ |
| 19681 | +#name: AVR32 ELF PC-relative external relocs |
| 19682 | +#source: symbols.s |
| 19683 | +#source: ../../../gas/testsuite/gas/avr32/pcrel.s |
| 19684 | +#ld: -T $srcdir/$subdir/pcrel.ld |
| 19685 | +#objdump: -d |
| 19686 | + |
| 19687 | +.*: file format elf.*avr32.* |
| 19688 | + |
| 19689 | +Disassembly of section .text: |
| 19690 | + |
| 19691 | +a0000000 <_start>: |
| 19692 | +a0000000: d7 03 nop |
| 19693 | +a0000002: d7 03 nop |
| 19694 | + |
| 19695 | +a0000004 <test_rjmp>: |
| 19696 | +a0000004: d7 03 nop |
| 19697 | +a0000006: c0 28 rjmp a000000a <test_rjmp\+0x6> |
| 19698 | +a0000008: d7 03 nop |
| 19699 | +a000000a: e0 8f 01 fb bral a0000400 <extsym10> |
| 19700 | + |
| 19701 | +a000000e <test_rcall>: |
| 19702 | +a000000e: d7 03 nop |
| 19703 | +a0000010 <test_rcall2>: |
| 19704 | +a0000010: c0 2c rcall a0000014 <test_rcall2\+0x4> |
| 19705 | +a0000012: d7 03 nop |
| 19706 | +a0000014: ee b0 ff f6 rcall a0200000 <extsym21> |
| 19707 | + |
| 19708 | +a0000018 <test_branch>: |
| 19709 | +a0000018: c0 31 brne a000001e <test_branch\+0x6> |
| 19710 | +a000001a: fe 9f ff ff bral a0000018 <test_branch> |
| 19711 | +a000001e: ee 90 ff f1 breq a0200000 <extsym21> |
| 19712 | + |
| 19713 | +a0000022 <test_lddpc>: |
| 19714 | +a0000022: 48 30 lddpc r0,a000002c <sym1> |
| 19715 | +a0000024: 48 20 lddpc r0,a000002c <sym1> |
| 19716 | +a0000026: fe f0 7f da ld.w r0,pc\[32730\] |
| 19717 | + ... |
| 19718 | + |
| 19719 | +a000002c <sym1>: |
| 19720 | +a000002c: d7 03 nop |
| 19721 | +a000002e: d7 03 nop |
| 19722 | + |
| 19723 | +a0000030 <test_local>: |
| 19724 | +a0000030: 48 20 lddpc r0,a0000038 <test_local\+0x8> |
| 19725 | +a0000032: 48 30 lddpc r0,a000003c <test_local\+0xc> |
| 19726 | +a0000034: 48 20 lddpc r0,a000003c <test_local\+0xc> |
| 19727 | +a0000036: 00 00 add r0,r0 |
| 19728 | +a0000038: d7 03 nop |
| 19729 | +a000003a: d7 03 nop |
| 19730 | +a000003c: d7 03 nop |
| 19731 | +a000003e: d7 03 nop |
| 19732 | + |
| 19733 | +Disassembly of section \.text\.init: |
| 19734 | +a0000040 <test_inter_section>: |
| 19735 | +a0000040: fe b0 ff e7 rcall a000000e <test_rcall> |
| 19736 | +a0000044: d7 03 nop |
| 19737 | +a0000046: fe b0 ff e4 rcall a000000e <test_rcall> |
| 19738 | +a000004a: fe b0 ff e3 rcall a0000010 <test_rcall2> |
| 19739 | +a000004e: d7 03 nop |
| 19740 | +a0000050: fe b0 ff e0 rcall a0000010 <test_rcall2> |
| 19741 | + |
| 19742 | +Disassembly of section \.text\.pcrel10: |
| 19743 | + |
| 19744 | +a0000400 <extsym10>: |
| 19745 | +a0000400: d7 03 nop |
| 19746 | + |
| 19747 | +Disassembly of section \.text\.pcrel16: |
| 19748 | + |
| 19749 | +a0008000 <extsym16>: |
| 19750 | +a0008000: d7 03 nop |
| 19751 | + |
| 19752 | +Disassembly of section \.text\.pcrel21: |
| 19753 | +a0200000 <extsym21>: |
| 19754 | +a0200000: d7 03 nop |
| 19755 | --- /dev/null |
| 19756 | +++ b/ld/testsuite/ld-avr32/pcrel.ld |
| 19757 | @@ -0,0 +1,23 @@ |
| 19758 | +ENTRY(_start) |
| 19759 | +SECTIONS |
| 19760 | +{ |
| 19761 | + .text 0xa0000000: |
| 19762 | + { |
| 19763 | + *(.text) |
| 19764 | + } |
| 19765 | + |
| 19766 | + .text.pcrel10 0xa0000400: |
| 19767 | + { |
| 19768 | + *(.text.pcrel10) |
| 19769 | + } |
| 19770 | + |
| 19771 | + .text.pcrel16 0xa0008000: |
| 19772 | + { |
| 19773 | + *(.text.pcrel16) |
| 19774 | + } |
| 19775 | + |
| 19776 | + .text.pcrel21 0xa0200000: |
| 19777 | + { |
| 19778 | + *(.text.pcrel21) |
| 19779 | + } |
| 19780 | +} |
| 19781 | --- /dev/null |
| 19782 | +++ b/ld/testsuite/ld-avr32/symbols.s |
| 19783 | @@ -0,0 +1,20 @@ |
| 19784 | + .text |
| 19785 | + .global _start |
| 19786 | +_start: |
| 19787 | + nop |
| 19788 | + nop |
| 19789 | + |
| 19790 | + .section .text.pcrel10,"ax" |
| 19791 | + .global extsym10 |
| 19792 | +extsym10: |
| 19793 | + nop |
| 19794 | + |
| 19795 | + .section .text.pcrel16,"ax" |
| 19796 | + .global extsym16 |
| 19797 | +extsym16: |
| 19798 | + nop |
| 19799 | + |
| 19800 | + .section .text.pcrel21,"ax" |
| 19801 | + .global extsym21 |
| 19802 | +extsym21: |
| 19803 | + nop |
| 19804 | --- /dev/null |
| 19805 | +++ b/opcodes/avr32-asm.c |
| 19806 | @@ -0,0 +1,244 @@ |
| 19807 | +/* Assembler interface for AVR32. |
| 19808 | + Copyright 2005,2006,2007,2008,2009 Atmel Corporation. |
| 19809 | + |
| 19810 | + Written by Haavard Skinnemoen, Atmel Norway, <hskinnemoen@atmel.com> |
| 19811 | + |
| 19812 | + This file is part of libopcodes. |
| 19813 | + |
| 19814 | + This program is free software; you can redistribute it and/or |
| 19815 | + modify it under the terms of the GNU General Public License as |
| 19816 | + published by the Free Software Foundation; either version 2 of the |
| 19817 | + License, or (at your option) any later version. |
| 19818 | + |
| 19819 | + This program is distributed in the hope that it will be useful, but |
| 19820 | + WITHOUT ANY WARRANTY; without even the implied warranty of |
| 19821 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 19822 | + General Public License for more details. |
| 19823 | + |
| 19824 | + You should have received a copy of the GNU General Public License |
| 19825 | + along with this program; if not, write to the Free Software |
| 19826 | + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA |
| 19827 | + 02111-1307, USA. */ |
| 19828 | + |
| 19829 | +#include <string.h> |
| 19830 | + |
| 19831 | +#include "avr32-opc.h" |
| 19832 | +#include "avr32-asm.h" |
| 19833 | + |
| 19834 | +/* Structure for a register hash table entry. */ |
| 19835 | +struct reg_entry |
| 19836 | +{ |
| 19837 | + const char *name; |
| 19838 | + int number; |
| 19839 | +}; |
| 19840 | + |
| 19841 | +/* Integer Registers. */ |
| 19842 | +static const struct reg_entry reg_table[] = |
| 19843 | + { |
| 19844 | + /* Primary names (used by the disassembler) */ |
| 19845 | + { "r0", 0 }, { "r1", 1 }, { "r2", 2 }, { "r3", 3 }, |
| 19846 | + { "r4", 4 }, { "r5", 5 }, { "r6", 6 }, { "r7", 7 }, |
| 19847 | + { "r8", 8 }, { "r9", 9 }, { "r10", 10 }, { "r11", 11 }, |
| 19848 | + { "r12", 12 }, { "sp", 13 }, { "lr", 14 }, { "pc", 15 }, |
| 19849 | + /* Alternatives to sp, lr and pc. */ |
| 19850 | + { "r13", 13 }, { "r14", 14 }, { "r15", 15 }, |
| 19851 | + }; |
| 19852 | +#define AVR32_NR_INTREGS (sizeof(reg_table)/sizeof(reg_table[0])) |
| 19853 | + |
| 19854 | +/* Coprocessor Registers. */ |
| 19855 | +static const struct reg_entry cr_table[] = |
| 19856 | + { |
| 19857 | + { "cr0", 0 }, { "cr1", 1 }, { "cr2", 2 }, { "cr3", 3 }, |
| 19858 | + { "cr4", 4 }, { "cr5", 5 }, { "cr6", 6 }, { "cr7", 7 }, |
| 19859 | + { "cr8", 8 }, { "cr9", 9 }, { "cr10", 10 }, { "cr11", 11 }, |
| 19860 | + { "cr12", 12 }, { "cr13", 13 }, { "cr14", 14 }, { "cr15", 15 }, |
| 19861 | + }; |
| 19862 | +#define AVR32_NR_CPREGS (sizeof(cr_table)/sizeof(cr_table[0])) |
| 19863 | + |
| 19864 | +#define AVR32_NR_FPREGS (sizeof(fr_table)/sizeof(fr_table[0])) |
| 19865 | + |
| 19866 | +/* PiCo Registers. */ |
| 19867 | +static const struct reg_entry pico_table[] = |
| 19868 | + { |
| 19869 | + { "inpix2", 0 }, { "inpix1", 1 }, { "inpix0", 2 }, |
| 19870 | + { "outpix2", 3 }, { "outpix1", 4 }, { "outpix0", 5 }, |
| 19871 | + { "coeff0_a", 6 }, { "coeff0_b", 7 }, { "coeff1_a", 8 }, |
| 19872 | + { "coeff1_b", 9 }, { "coeff2_a", 10 }, { "coeff2_b", 11 }, |
| 19873 | + { "vmu0_out", 12 }, { "vmu1_out", 13 }, { "vmu2_out", 14 }, |
| 19874 | + { "config", 15 }, |
| 19875 | + }; |
| 19876 | +#define AVR32_NR_PICOREGS (sizeof(pico_table)/sizeof(pico_table[0])) |
| 19877 | + |
| 19878 | +int |
| 19879 | +avr32_parse_intreg(const char *str) |
| 19880 | +{ |
| 19881 | + unsigned int i; |
| 19882 | + |
| 19883 | + for (i = 0; i < AVR32_NR_INTREGS; i++) |
| 19884 | + { |
| 19885 | + if (strcasecmp(reg_table[i].name, str) == 0) |
| 19886 | + return reg_table[i].number; |
| 19887 | + } |
| 19888 | + |
| 19889 | + return -1; |
| 19890 | +} |
| 19891 | + |
| 19892 | +int |
| 19893 | +avr32_parse_cpreg(const char *str) |
| 19894 | +{ |
| 19895 | + unsigned int i; |
| 19896 | + |
| 19897 | + for (i = 0; i < AVR32_NR_CPREGS; i++) |
| 19898 | + { |
| 19899 | + if (strcasecmp(cr_table[i].name, str) == 0) |
| 19900 | + return cr_table[i].number; |
| 19901 | + } |
| 19902 | + |
| 19903 | + return -1; |
| 19904 | +} |
| 19905 | + |
| 19906 | + |
| 19907 | +int avr32_parse_picoreg(const char *str) |
| 19908 | +{ |
| 19909 | + unsigned int i; |
| 19910 | + |
| 19911 | + for (i = 0; i < AVR32_NR_PICOREGS; i++) |
| 19912 | + { |
| 19913 | + if (strcasecmp(pico_table[i].name, str) == 0) |
| 19914 | + return pico_table[i].number; |
| 19915 | + } |
| 19916 | + |
| 19917 | + return -1; |
| 19918 | +} |
| 19919 | + |
| 19920 | +static unsigned long |
| 19921 | +parse_reglist(char *str, char **endptr, int (*parse_reg)(const char *)) |
| 19922 | +{ |
| 19923 | + int reg_from, reg_to; |
| 19924 | + unsigned long result = 0; |
| 19925 | + char *p1, *p2, c; |
| 19926 | + |
| 19927 | + while (*str) |
| 19928 | + { |
| 19929 | + for (p1 = str; *p1; p1++) |
| 19930 | + if (*p1 == ',' || *p1 == '-') |
| 19931 | + break; |
| 19932 | + |
| 19933 | + c = *p1, *p1 = 0; |
| 19934 | + reg_from = parse_reg(str); |
| 19935 | + *p1 = c; |
| 19936 | + |
| 19937 | + if (reg_from < 0) |
| 19938 | + break; |
| 19939 | + |
| 19940 | + if (*p1 == '-') |
| 19941 | + { |
| 19942 | + for (p2 = ++p1; *p2; p2++) |
| 19943 | + if (*p2 == ',') |
| 19944 | + break; |
| 19945 | + |
| 19946 | + c = *p2, *p2 = 0; |
| 19947 | + /* printf("going to parse reg_to from `%s'\n", p1); */ |
| 19948 | + reg_to = parse_reg(p1); |
| 19949 | + *p2 = c; |
| 19950 | + |
| 19951 | + if (reg_to < 0) |
| 19952 | + break; |
| 19953 | + |
| 19954 | + while (reg_from <= reg_to) |
| 19955 | + result |= (1 << reg_from++); |
| 19956 | + p1 = p2; |
| 19957 | + } |
| 19958 | + else |
| 19959 | + result |= (1 << reg_from); |
| 19960 | + |
| 19961 | + str = p1; |
| 19962 | + if (*str) ++str; |
| 19963 | + } |
| 19964 | + |
| 19965 | + if (endptr) |
| 19966 | + *endptr = str; |
| 19967 | + |
| 19968 | + return result; |
| 19969 | +} |
| 19970 | + |
| 19971 | +unsigned long |
| 19972 | +avr32_parse_reglist(char *str, char **endptr) |
| 19973 | +{ |
| 19974 | + return parse_reglist(str, endptr, avr32_parse_intreg); |
| 19975 | +} |
| 19976 | + |
| 19977 | +unsigned long |
| 19978 | +avr32_parse_cpreglist(char *str, char **endptr) |
| 19979 | +{ |
| 19980 | + return parse_reglist(str, endptr, avr32_parse_cpreg); |
| 19981 | +} |
| 19982 | + |
| 19983 | +unsigned long |
| 19984 | +avr32_parse_pico_reglist(char *str, char **endptr) |
| 19985 | +{ |
| 19986 | + return parse_reglist(str, endptr, avr32_parse_picoreg); |
| 19987 | +} |
| 19988 | + |
| 19989 | +int |
| 19990 | +avr32_make_regmask8(unsigned long regmask16, unsigned long *regmask8) |
| 19991 | +{ |
| 19992 | + unsigned long result = 0; |
| 19993 | + |
| 19994 | + /* printf("convert regmask16 0x%04lx\n", regmask16); */ |
| 19995 | + |
| 19996 | + if (regmask16 & 0xf) |
| 19997 | + { |
| 19998 | + if ((regmask16 & 0xf) == 0xf) |
| 19999 | + result |= 1 << 0; |
| 20000 | + else |
| 20001 | + return -1; |
| 20002 | + } |
| 20003 | + if (regmask16 & 0xf0) |
| 20004 | + { |
| 20005 | + if ((regmask16 & 0xf0) == 0xf0) |
| 20006 | + result |= 1 << 1; |
| 20007 | + else |
| 20008 | + return -1; |
| 20009 | + } |
| 20010 | + if (regmask16 & 0x300) |
| 20011 | + { |
| 20012 | + if ((regmask16 & 0x300) == 0x300) |
| 20013 | + result |= 1 << 2; |
| 20014 | + else |
| 20015 | + return -1; |
| 20016 | + } |
| 20017 | + if (regmask16 & (1 << 13)) |
| 20018 | + return -1; |
| 20019 | + |
| 20020 | + if (regmask16 & (1 << 10)) |
| 20021 | + result |= 1 << 3; |
| 20022 | + if (regmask16 & (1 << 11)) |
| 20023 | + result |= 1 << 4; |
| 20024 | + if (regmask16 & (1 << 12)) |
| 20025 | + result |= 1 << 5; |
| 20026 | + if (regmask16 & (1 << 14)) |
| 20027 | + result |= 1 << 6; |
| 20028 | + if (regmask16 & (1 << 15)) |
| 20029 | + result |= 1 << 7; |
| 20030 | + |
| 20031 | + *regmask8 = result; |
| 20032 | + |
| 20033 | + return 0; |
| 20034 | +} |
| 20035 | + |
| 20036 | +#if 0 |
| 20037 | +struct reg_map |
| 20038 | +{ |
| 20039 | + const struct reg_entry *names; |
| 20040 | + int nr_regs; |
| 20041 | + struct hash_control *htab; |
| 20042 | + const char *errmsg; |
| 20043 | +}; |
| 20044 | + |
| 20045 | +struct reg_map all_reg_maps[] = |
| 20046 | + { |
| 20047 | + { reg_table, AVR32_NR_INTREGS, NULL, N_("integral register expected") }, |
| 20048 | + { cr_table, AVR32_NR_CPREGS, NULL, N_("coprocessor register expected") }, |
| 20049 | + }; |
| 20050 | +#endif |
| 20051 | --- /dev/null |
| 20052 | +++ b/opcodes/avr32-asm.h |
| 20053 | @@ -0,0 +1,40 @@ |
| 20054 | +/* Assembler interface for AVR32. |
| 20055 | + Copyright 2005,2006,2007,2008,2009 Atmel Corporation. |
| 20056 | + |
| 20057 | + Written by Haavard Skinnemoen, Atmel Norway, <hskinnemoen@atmel.com> |
| 20058 | + |
| 20059 | + This file is part of libopcodes. |
| 20060 | + |
| 20061 | + This program is free software; you can redistribute it and/or |
| 20062 | + modify it under the terms of the GNU General Public License as |
| 20063 | + published by the Free Software Foundation; either version 2 of the |
| 20064 | + License, or (at your option) any later version. |
| 20065 | + |
| 20066 | + This program is distributed in the hope that it will be useful, but |
| 20067 | + WITHOUT ANY WARRANTY; without even the implied warranty of |
| 20068 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 20069 | + General Public License for more details. |
| 20070 | + |
| 20071 | + You should have received a copy of the GNU General Public License |
| 20072 | + along with this program; if not, write to the Free Software |
| 20073 | + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA |
| 20074 | + 02111-1307, USA. */ |
| 20075 | +#ifndef __OPCODES_AVR32_ASM_H |
| 20076 | +#define __OPCODES_AVR32_ASM_H |
| 20077 | + |
| 20078 | +extern int |
| 20079 | +avr32_parse_intreg(const char *str); |
| 20080 | +extern int |
| 20081 | +avr32_parse_cpreg(const char *str); |
| 20082 | +extern int |
| 20083 | +avr32_parse_picoreg(const char *str); |
| 20084 | +extern unsigned long |
| 20085 | +avr32_parse_reglist(char *str, char **endptr); |
| 20086 | +extern unsigned long |
| 20087 | +avr32_parse_cpreglist(char *str, char **endptr); |
| 20088 | +extern unsigned long |
| 20089 | +avr32_parse_pico_reglist(char *str, char **endptr); |
| 20090 | +extern int |
| 20091 | +avr32_make_regmask8(unsigned long regmask16, unsigned long *regmask8); |
| 20092 | + |
| 20093 | +#endif /* __OPCODES_AVR32_ASM_H */ |
| 20094 | --- /dev/null |
| 20095 | +++ b/opcodes/avr32-dis.c |
| 20096 | @@ -0,0 +1,916 @@ |
| 20097 | +/* Print AVR32 instructions for GDB and objdump. |
| 20098 | + Copyright 2005,2006,2007,2008,2009 Atmel Corporation. |
| 20099 | + |
| 20100 | + Written by Haavard Skinnemoen, Atmel Norway, <hskinnemoen@atmel.com> |
| 20101 | + |
| 20102 | + This file is part of libopcodes. |
| 20103 | + |
| 20104 | + This program is free software; you can redistribute it and/or |
| 20105 | + modify it under the terms of the GNU General Public License as |
| 20106 | + published by the Free Software Foundation; either version 2 of the |
| 20107 | + License, or (at your option) any later version. |
| 20108 | + |
| 20109 | + This program is distributed in the hope that it will be useful, but |
| 20110 | + WITHOUT ANY WARRANTY; without even the implied warranty of |
| 20111 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 20112 | + General Public License for more details. |
| 20113 | + |
| 20114 | + You should have received a copy of the GNU General Public License |
| 20115 | + along with this program; if not, write to the Free Software |
| 20116 | + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA |
| 20117 | + 02111-1307, USA. */ |
| 20118 | + |
| 20119 | +#include "sysdep.h" |
| 20120 | +#include "dis-asm.h" |
| 20121 | +#include "avr32-opc.h" |
| 20122 | +#include "opintl.h" |
| 20123 | +#include "safe-ctype.h" |
| 20124 | + |
| 20125 | +/* TODO: Share this with -asm */ |
| 20126 | + |
| 20127 | +/* Structure for a register hash table entry. */ |
| 20128 | +struct reg_entry |
| 20129 | +{ |
| 20130 | + const char *name; |
| 20131 | + int number; |
| 20132 | +}; |
| 20133 | + |
| 20134 | +#ifndef strneq |
| 20135 | +#define strneq(a,b,n) (strncmp ((a), (b), (n)) == 0) |
| 20136 | +#endif |
| 20137 | + |
| 20138 | +static char avr32_opt_decode_fpu = 0; |
| 20139 | + |
| 20140 | +static const struct reg_entry reg_table[] = |
| 20141 | + { |
| 20142 | + /* Primary names (used by the disassembler) */ |
| 20143 | + { "r0", 0 }, { "r1", 1 }, { "r2", 2 }, { "r3", 3 }, |
| 20144 | + { "r4", 4 }, { "r5", 5 }, { "r6", 6 }, { "r7", 7 }, |
| 20145 | + { "r8", 8 }, { "r9", 9 }, { "r10", 10 }, { "r11", 11 }, |
| 20146 | + { "r12", 12 }, { "sp", 13 }, { "lr", 14 }, { "pc", 15 }, |
| 20147 | + /* Alternatives to sp, lr and pc. */ |
| 20148 | + { "r13", 13 }, { "r14", 14 }, { "r15", 15 }, |
| 20149 | + }; |
| 20150 | +#define AVR32_NR_INTREGS (sizeof(reg_table)/sizeof(reg_table[0])) |
| 20151 | + |
| 20152 | +/* Coprocessor Registers. */ |
| 20153 | +static const struct reg_entry cr_table[] = |
| 20154 | + { |
| 20155 | + { "cr0", 0 }, { "cr1", 1 }, { "cr2", 2 }, { "cr3", 3 }, |
| 20156 | + { "cr4", 4 }, { "cr5", 5 }, { "cr6", 6 }, { "cr7", 7 }, |
| 20157 | + { "cr8", 8 }, { "cr9", 9 }, { "cr10", 10 }, { "cr11", 11 }, |
| 20158 | + { "cr12", 12 }, { "cr13", 13 }, { "cr14", 14 }, { "cr15", 15 }, |
| 20159 | + }; |
| 20160 | +#define AVR32_NR_CPREGS (sizeof(cr_table)/sizeof(cr_table[0])) |
| 20161 | + |
| 20162 | +static const char bparts[4] = { 'b', 'l', 'u', 't' }; |
| 20163 | +static bfd_vma current_pc; |
| 20164 | + |
| 20165 | +struct avr32_field_value |
| 20166 | +{ |
| 20167 | + const struct avr32_ifield *ifield; |
| 20168 | + unsigned long value; |
| 20169 | +}; |
| 20170 | + |
| 20171 | +struct avr32_operand |
| 20172 | +{ |
| 20173 | + int id; |
| 20174 | + int is_pcrel; |
| 20175 | + int align_order; |
| 20176 | + int (*print)(struct avr32_operand *op, struct disassemble_info *info, |
| 20177 | + struct avr32_field_value *ifields); |
| 20178 | +}; |
| 20179 | + |
| 20180 | +static signed long |
| 20181 | +get_signed_value(const struct avr32_field_value *fv) |
| 20182 | +{ |
| 20183 | + signed long value = fv->value; |
| 20184 | + |
| 20185 | + if (fv->value & (1 << (fv->ifield->bitsize - 1))) |
| 20186 | + value |= (~0UL << fv->ifield->bitsize); |
| 20187 | + |
| 20188 | + return value; |
| 20189 | +} |
| 20190 | + |
| 20191 | +static void |
| 20192 | +print_reglist_range(unsigned int first, unsigned int last, |
| 20193 | + const struct reg_entry *reg_names, |
| 20194 | + int need_comma, |
| 20195 | + struct disassemble_info *info) |
| 20196 | +{ |
| 20197 | + if (need_comma) |
| 20198 | + info->fprintf_func(info->stream, ","); |
| 20199 | + |
| 20200 | + if (first == last) |
| 20201 | + info->fprintf_func(info->stream, "%s", |
| 20202 | + reg_names[first].name); |
| 20203 | + else |
| 20204 | + info->fprintf_func(info->stream, "%s-%s", |
| 20205 | + reg_names[first].name, reg_names[last].name); |
| 20206 | +} |
| 20207 | + |
| 20208 | +static int |
| 20209 | +print_intreg(struct avr32_operand *op, |
| 20210 | + struct disassemble_info *info, |
| 20211 | + struct avr32_field_value *ifields) |
| 20212 | +{ |
| 20213 | + unsigned long regid = ifields[0].value << op->align_order; |
| 20214 | + |
| 20215 | + info->fprintf_func(info->stream, "%s", |
| 20216 | + reg_table[regid].name); |
| 20217 | + return 1; |
| 20218 | +} |
| 20219 | + |
| 20220 | +static int |
| 20221 | +print_intreg_predec(struct avr32_operand *op ATTRIBUTE_UNUSED, |
| 20222 | + struct disassemble_info *info, |
| 20223 | + struct avr32_field_value *ifields) |
| 20224 | +{ |
| 20225 | + info->fprintf_func(info->stream, "--%s", |
| 20226 | + reg_table[ifields[0].value].name); |
| 20227 | + return 1; |
| 20228 | +} |
| 20229 | + |
| 20230 | +static int |
| 20231 | +print_intreg_postinc(struct avr32_operand *op ATTRIBUTE_UNUSED, |
| 20232 | + struct disassemble_info *info, |
| 20233 | + struct avr32_field_value *ifields) |
| 20234 | +{ |
| 20235 | + info->fprintf_func(info->stream, "%s++", |
| 20236 | + reg_table[ifields[0].value].name); |
| 20237 | + return 1; |
| 20238 | +} |
| 20239 | + |
| 20240 | +static int |
| 20241 | +print_intreg_lsl(struct avr32_operand *op ATTRIBUTE_UNUSED, |
| 20242 | + struct disassemble_info *info, |
| 20243 | + struct avr32_field_value *ifields) |
| 20244 | +{ |
| 20245 | + const char *rp = reg_table[ifields[0].value].name; |
| 20246 | + unsigned long sa = ifields[1].value; |
| 20247 | + |
| 20248 | + if (sa) |
| 20249 | + info->fprintf_func(info->stream, "%s<<0x%lx", rp, sa); |
| 20250 | + else |
| 20251 | + info->fprintf_func(info->stream, "%s", rp); |
| 20252 | + |
| 20253 | + return 2; |
| 20254 | +} |
| 20255 | + |
| 20256 | +static int |
| 20257 | +print_intreg_lsr(struct avr32_operand *op ATTRIBUTE_UNUSED, |
| 20258 | + struct disassemble_info *info, |
| 20259 | + struct avr32_field_value *ifields) |
| 20260 | +{ |
| 20261 | + const char *rp = reg_table[ifields[0].value].name; |
| 20262 | + unsigned long sa = ifields[1].value; |
| 20263 | + |
| 20264 | + if (sa) |
| 20265 | + info->fprintf_func(info->stream, "%s>>0x%lx", rp, sa); |
| 20266 | + else |
| 20267 | + info->fprintf_func(info->stream, "%s", rp); |
| 20268 | + |
| 20269 | + return 2; |
| 20270 | +} |
| 20271 | + |
| 20272 | +static int |
| 20273 | +print_intreg_bpart(struct avr32_operand *op ATTRIBUTE_UNUSED, |
| 20274 | + struct disassemble_info *info, |
| 20275 | + struct avr32_field_value *ifields) |
| 20276 | +{ |
| 20277 | + info->fprintf_func(info->stream, "%s:%c", |
| 20278 | + reg_table[ifields[0].value].name, |
| 20279 | + bparts[ifields[1].value]); |
| 20280 | + return 2; |
| 20281 | +} |
| 20282 | + |
| 20283 | +static int |
| 20284 | +print_intreg_hpart(struct avr32_operand *op ATTRIBUTE_UNUSED, |
| 20285 | + struct disassemble_info *info, |
| 20286 | + struct avr32_field_value *ifields) |
| 20287 | +{ |
| 20288 | + info->fprintf_func(info->stream, "%s:%c", |
| 20289 | + reg_table[ifields[0].value].name, |
| 20290 | + ifields[1].value ? 't' : 'b'); |
| 20291 | + return 2; |
| 20292 | +} |
| 20293 | + |
| 20294 | +static int |
| 20295 | +print_intreg_sdisp(struct avr32_operand *op, |
| 20296 | + struct disassemble_info *info, |
| 20297 | + struct avr32_field_value *ifields) |
| 20298 | +{ |
| 20299 | + signed long disp; |
| 20300 | + |
| 20301 | + disp = get_signed_value(&ifields[1]) << op->align_order; |
| 20302 | + |
| 20303 | + info->fprintf_func(info->stream, "%s[%ld]", |
| 20304 | + reg_table[ifields[0].value].name, disp); |
| 20305 | + return 2; |
| 20306 | +} |
| 20307 | + |
| 20308 | +static int |
| 20309 | +print_intreg_udisp(struct avr32_operand *op, |
| 20310 | + struct disassemble_info *info, |
| 20311 | + struct avr32_field_value *ifields) |
| 20312 | +{ |
| 20313 | + info->fprintf_func(info->stream, "%s[0x%lx]", |
| 20314 | + reg_table[ifields[0].value].name, |
| 20315 | + ifields[1].value << op->align_order); |
| 20316 | + return 2; |
| 20317 | +} |
| 20318 | + |
| 20319 | +static int |
| 20320 | +print_intreg_index(struct avr32_operand *op ATTRIBUTE_UNUSED, |
| 20321 | + struct disassemble_info *info, |
| 20322 | + struct avr32_field_value *ifields) |
| 20323 | +{ |
| 20324 | + const char *rb, *ri; |
| 20325 | + unsigned long sa = ifields[2].value; |
| 20326 | + |
| 20327 | + rb = reg_table[ifields[0].value].name; |
| 20328 | + ri = reg_table[ifields[1].value].name; |
| 20329 | + |
| 20330 | + if (sa) |
| 20331 | + info->fprintf_func(info->stream, "%s[%s<<0x%lx]", rb, ri, sa); |
| 20332 | + else |
| 20333 | + info->fprintf_func(info->stream, "%s[%s]", rb, ri); |
| 20334 | + |
| 20335 | + return 3; |
| 20336 | +} |
| 20337 | + |
| 20338 | +static int |
| 20339 | +print_intreg_xindex(struct avr32_operand *op ATTRIBUTE_UNUSED, |
| 20340 | + struct disassemble_info *info, |
| 20341 | + struct avr32_field_value *ifields) |
| 20342 | +{ |
| 20343 | + info->fprintf_func(info->stream, "%s[%s:%c<<2]", |
| 20344 | + reg_table[ifields[0].value].name, |
| 20345 | + reg_table[ifields[1].value].name, |
| 20346 | + bparts[ifields[2].value]); |
| 20347 | + return 3; |
| 20348 | +} |
| 20349 | + |
| 20350 | +static int |
| 20351 | +print_jmplabel(struct avr32_operand *op, |
| 20352 | + struct disassemble_info *info, |
| 20353 | + struct avr32_field_value *ifields) |
| 20354 | +{ |
| 20355 | + bfd_vma address, offset; |
| 20356 | + |
| 20357 | + offset = get_signed_value(ifields) << op->align_order; |
| 20358 | + address = (current_pc & (~0UL << op->align_order)) + offset; |
| 20359 | + |
| 20360 | + info->print_address_func(address, info); |
| 20361 | + |
| 20362 | + return 1; |
| 20363 | +} |
| 20364 | + |
| 20365 | +static int |
| 20366 | +print_pc_disp(struct avr32_operand *op, |
| 20367 | + struct disassemble_info *info, |
| 20368 | + struct avr32_field_value *ifields) |
| 20369 | +{ |
| 20370 | + bfd_vma address, offset; |
| 20371 | + |
| 20372 | + offset = ifields[0].value << op->align_order; |
| 20373 | + address = (current_pc & (~0UL << op->align_order)) + offset; |
| 20374 | + |
| 20375 | + info->print_address_func(address, info); |
| 20376 | + |
| 20377 | + return 1; |
| 20378 | +} |
| 20379 | + |
| 20380 | +static int |
| 20381 | +print_sp(struct avr32_operand *op ATTRIBUTE_UNUSED, |
| 20382 | + struct disassemble_info *info, |
| 20383 | + struct avr32_field_value *ifields ATTRIBUTE_UNUSED) |
| 20384 | +{ |
| 20385 | + info->fprintf_func(info->stream, "sp"); |
| 20386 | + return 1; |
| 20387 | +} |
| 20388 | + |
| 20389 | +static int |
| 20390 | +print_sp_disp(struct avr32_operand *op, |
| 20391 | + struct disassemble_info *info, |
| 20392 | + struct avr32_field_value *ifields) |
| 20393 | +{ |
| 20394 | + info->fprintf_func(info->stream, "sp[0x%lx]", |
| 20395 | + ifields[0].value << op->align_order); |
| 20396 | + return 1; |
| 20397 | +} |
| 20398 | + |
| 20399 | +static int |
| 20400 | +print_cpno(struct avr32_operand *op ATTRIBUTE_UNUSED, |
| 20401 | + struct disassemble_info *info, |
| 20402 | + struct avr32_field_value *ifields) |
| 20403 | +{ |
| 20404 | + info->fprintf_func(info->stream, "cp%lu", ifields[0].value); |
| 20405 | + return 1; |
| 20406 | +} |
| 20407 | + |
| 20408 | +static int |
| 20409 | +print_cpreg(struct avr32_operand *op, |
| 20410 | + struct disassemble_info *info, |
| 20411 | + struct avr32_field_value *ifields) |
| 20412 | +{ |
| 20413 | + info->fprintf_func(info->stream, "cr%lu", |
| 20414 | + ifields[0].value << op->align_order); |
| 20415 | + return 1; |
| 20416 | +} |
| 20417 | + |
| 20418 | +static int |
| 20419 | +print_uconst(struct avr32_operand *op, |
| 20420 | + struct disassemble_info *info, |
| 20421 | + struct avr32_field_value *ifields) |
| 20422 | +{ |
| 20423 | + info->fprintf_func(info->stream, "0x%lx", |
| 20424 | + ifields[0].value << op->align_order); |
| 20425 | + return 1; |
| 20426 | +} |
| 20427 | + |
| 20428 | +static int |
| 20429 | +print_sconst(struct avr32_operand *op, |
| 20430 | + struct disassemble_info *info, |
| 20431 | + struct avr32_field_value *ifields) |
| 20432 | +{ |
| 20433 | + info->fprintf_func(info->stream, "%ld", |
| 20434 | + get_signed_value(ifields) << op->align_order); |
| 20435 | + return 1; |
| 20436 | +} |
| 20437 | + |
| 20438 | +static int |
| 20439 | +print_reglist8_head(unsigned long regmask, int *commap, |
| 20440 | + struct disassemble_info *info) |
| 20441 | +{ |
| 20442 | + int first = -1, last, i = 0; |
| 20443 | + int need_comma = 0; |
| 20444 | + |
| 20445 | + while (i < 12) |
| 20446 | + { |
| 20447 | + if (first == -1 && (regmask & 1)) |
| 20448 | + { |
| 20449 | + first = i; |
| 20450 | + } |
| 20451 | + else if (first != -1 && !(regmask & 1)) |
| 20452 | + { |
| 20453 | + last = i - 1; |
| 20454 | + |
| 20455 | + print_reglist_range(first, last, reg_table, need_comma, info); |
| 20456 | + need_comma = 1; |
| 20457 | + first = -1; |
| 20458 | + } |
| 20459 | + |
| 20460 | + if (i < 8) |
| 20461 | + i += 4; |
| 20462 | + else if (i < 10) |
| 20463 | + i += 2; |
| 20464 | + else |
| 20465 | + i++; |
| 20466 | + regmask >>= 1; |
| 20467 | + } |
| 20468 | + |
| 20469 | + *commap = need_comma; |
| 20470 | + return first; |
| 20471 | +} |
| 20472 | + |
| 20473 | +static void |
| 20474 | +print_reglist8_tail(unsigned long regmask, int first, int need_comma, |
| 20475 | + struct disassemble_info *info) |
| 20476 | +{ |
| 20477 | + int last = 11; |
| 20478 | + |
| 20479 | + if (regmask & 0x20) |
| 20480 | + { |
| 20481 | + if (first == -1) |
| 20482 | + first = 12; |
| 20483 | + last = 12; |
| 20484 | + } |
| 20485 | + |
| 20486 | + if (first != -1) |
| 20487 | + { |
| 20488 | + print_reglist_range(first, last, reg_table, need_comma, info); |
| 20489 | + need_comma = 1; |
| 20490 | + first = -1; |
| 20491 | + } |
| 20492 | + |
| 20493 | + if (regmask & 0x40) |
| 20494 | + { |
| 20495 | + if (first == -1) |
| 20496 | + first = 14; |
| 20497 | + last = 14; |
| 20498 | + } |
| 20499 | + |
| 20500 | + if (regmask & 0x80) |
| 20501 | + { |
| 20502 | + if (first == -1) |
| 20503 | + first = 15; |
| 20504 | + last = 15; |
| 20505 | + } |
| 20506 | + |
| 20507 | + if (first != -1) |
| 20508 | + print_reglist_range(first, last, reg_table, need_comma, info); |
| 20509 | +} |
| 20510 | + |
| 20511 | +static int |
| 20512 | +print_reglist8(struct avr32_operand *op ATTRIBUTE_UNUSED, |
| 20513 | + struct disassemble_info *info, |
| 20514 | + struct avr32_field_value *ifields) |
| 20515 | +{ |
| 20516 | + unsigned long regmask = ifields[0].value; |
| 20517 | + int first, need_comma; |
| 20518 | + |
| 20519 | + first = print_reglist8_head(regmask, &need_comma, info); |
| 20520 | + print_reglist8_tail(regmask, first, need_comma, info); |
| 20521 | + |
| 20522 | + return 1; |
| 20523 | +} |
| 20524 | + |
| 20525 | +static int |
| 20526 | +print_reglist9(struct avr32_operand *op ATTRIBUTE_UNUSED, |
| 20527 | + struct disassemble_info *info, |
| 20528 | + struct avr32_field_value *ifields) |
| 20529 | +{ |
| 20530 | + unsigned long regmask = ifields[0].value >> 1; |
| 20531 | + int first, last, need_comma; |
| 20532 | + |
| 20533 | + first = print_reglist8_head(regmask, &need_comma, info); |
| 20534 | + |
| 20535 | + if ((ifields[0].value & 0x101) == 0x101) |
| 20536 | + { |
| 20537 | + if (first != -1) |
| 20538 | + { |
| 20539 | + last = 11; |
| 20540 | + |
| 20541 | + print_reglist_range(first, last, reg_table, need_comma, info); |
| 20542 | + need_comma = 1; |
| 20543 | + first = -1; |
| 20544 | + } |
| 20545 | + |
| 20546 | + print_reglist_range(15, 15, reg_table, need_comma, info); |
| 20547 | + |
| 20548 | + regmask >>= 5; |
| 20549 | + |
| 20550 | + if ((regmask & 3) == 0) |
| 20551 | + info->fprintf_func(info->stream, ",r12=0"); |
| 20552 | + else if ((regmask & 3) == 1) |
| 20553 | + info->fprintf_func(info->stream, ",r12=1"); |
| 20554 | + else |
| 20555 | + info->fprintf_func(info->stream, ",r12=-1"); |
| 20556 | + } |
| 20557 | + else |
| 20558 | + print_reglist8_tail(regmask, first, need_comma, info); |
| 20559 | + |
| 20560 | + return 1; |
| 20561 | +} |
| 20562 | + |
| 20563 | +static int |
| 20564 | +print_reglist16(struct avr32_operand *op ATTRIBUTE_UNUSED, |
| 20565 | + struct disassemble_info *info, |
| 20566 | + struct avr32_field_value *ifields) |
| 20567 | +{ |
| 20568 | + unsigned long regmask = ifields[0].value; |
| 20569 | + unsigned int i = 0, first, last; |
| 20570 | + int need_comma = 0; |
| 20571 | + |
| 20572 | + while (i < 16) |
| 20573 | + { |
| 20574 | + if (regmask & 1) |
| 20575 | + { |
| 20576 | + first = i; |
| 20577 | + while (i < 16) |
| 20578 | + { |
| 20579 | + i++; |
| 20580 | + regmask >>= 1; |
| 20581 | + if (!(regmask & 1)) |
| 20582 | + break; |
| 20583 | + } |
| 20584 | + last = i - 1; |
| 20585 | + print_reglist_range(first, last, reg_table, need_comma, info); |
| 20586 | + need_comma = 1; |
| 20587 | + } |
| 20588 | + else |
| 20589 | + { |
| 20590 | + i++; |
| 20591 | + regmask >>= 1; |
| 20592 | + } |
| 20593 | + } |
| 20594 | + |
| 20595 | + return 1; |
| 20596 | +} |
| 20597 | + |
| 20598 | +static int |
| 20599 | +print_reglist_ldm(struct avr32_operand *op, |
| 20600 | + struct disassemble_info *info, |
| 20601 | + struct avr32_field_value *ifields) |
| 20602 | +{ |
| 20603 | + int rp, w_bit; |
| 20604 | + int i, first, last; |
| 20605 | + unsigned long regmask; |
| 20606 | + |
| 20607 | + rp = ifields[0].value; |
| 20608 | + w_bit = ifields[1].value; |
| 20609 | + regmask = ifields[2].value; |
| 20610 | + |
| 20611 | + if (regmask & (1 << AVR32_REG_PC) && rp == AVR32_REG_PC) |
| 20612 | + { |
| 20613 | + if (w_bit) |
| 20614 | + info->fprintf_func(info->stream, "sp++"); |
| 20615 | + else |
| 20616 | + info->fprintf_func(info->stream, "sp"); |
| 20617 | + |
| 20618 | + for (i = 0; i < 12; ) |
| 20619 | + { |
| 20620 | + if (regmask & (1 << i)) |
| 20621 | + { |
| 20622 | + first = i; |
| 20623 | + while (i < 12) |
| 20624 | + { |
| 20625 | + i++; |
| 20626 | + if (!(regmask & (1 << i))) |
| 20627 | + break; |
| 20628 | + } |
| 20629 | + last = i - 1; |
| 20630 | + print_reglist_range(first, last, reg_table, 1, info); |
| 20631 | + } |
| 20632 | + else |
| 20633 | + i++; |
| 20634 | + } |
| 20635 | + |
| 20636 | + info->fprintf_func(info->stream, ",pc"); |
| 20637 | + if (regmask & (1 << AVR32_REG_LR)) |
| 20638 | + info->fprintf_func(info->stream, ",r12=-1"); |
| 20639 | + else if (regmask & (1 << AVR32_REG_R12)) |
| 20640 | + info->fprintf_func(info->stream, ",r12=1"); |
| 20641 | + else |
| 20642 | + info->fprintf_func(info->stream, ",r12=0"); |
| 20643 | + } |
| 20644 | + else |
| 20645 | + { |
| 20646 | + if (w_bit) |
| 20647 | + info->fprintf_func(info->stream, "%s++,", reg_table[rp].name); |
| 20648 | + else |
| 20649 | + info->fprintf_func(info->stream, "%s,", reg_table[rp].name); |
| 20650 | + |
| 20651 | + print_reglist16(op, info, ifields + 2); |
| 20652 | + } |
| 20653 | + |
| 20654 | + return 3; |
| 20655 | +} |
| 20656 | + |
| 20657 | +static int |
| 20658 | +print_reglist_cp8(struct avr32_operand *op ATTRIBUTE_UNUSED, |
| 20659 | + struct disassemble_info *info, |
| 20660 | + struct avr32_field_value *ifields) |
| 20661 | +{ |
| 20662 | + unsigned long regmask = ifields[0].value; |
| 20663 | + unsigned int i = 0, first, last, offset = 0; |
| 20664 | + int need_comma = 0; |
| 20665 | + |
| 20666 | + if (ifields[1].value) |
| 20667 | + offset = 8; |
| 20668 | + |
| 20669 | + while (i < 8) |
| 20670 | + { |
| 20671 | + if (regmask & 1) |
| 20672 | + { |
| 20673 | + first = i; |
| 20674 | + while (i < 8) |
| 20675 | + { |
| 20676 | + i++; |
| 20677 | + regmask >>= 1; |
| 20678 | + if (!(regmask & 1)) |
| 20679 | + break; |
| 20680 | + } |
| 20681 | + last = i - 1; |
| 20682 | + print_reglist_range(offset + first, offset + last, |
| 20683 | + cr_table, need_comma, info); |
| 20684 | + need_comma = 1; |
| 20685 | + } |
| 20686 | + else |
| 20687 | + { |
| 20688 | + i++; |
| 20689 | + regmask >>= 1; |
| 20690 | + } |
| 20691 | + } |
| 20692 | + |
| 20693 | + return 2; |
| 20694 | +} |
| 20695 | + |
| 20696 | +static int |
| 20697 | +print_reglist_cpd8(struct avr32_operand *op ATTRIBUTE_UNUSED, |
| 20698 | + struct disassemble_info *info, |
| 20699 | + struct avr32_field_value *ifields) |
| 20700 | +{ |
| 20701 | + unsigned long regmask = ifields[0].value; |
| 20702 | + unsigned int i = 0, first, last; |
| 20703 | + int need_comma = 0; |
| 20704 | + |
| 20705 | + while (i < 8) |
| 20706 | + { |
| 20707 | + if (regmask & 1) |
| 20708 | + { |
| 20709 | + first = 2 * i; |
| 20710 | + while (i < 8) |
| 20711 | + { |
| 20712 | + i++; |
| 20713 | + regmask >>= 1; |
| 20714 | + if (!(regmask & 1)) |
| 20715 | + break; |
| 20716 | + } |
| 20717 | + last = 2 * (i - 1) + 1; |
| 20718 | + print_reglist_range(first, last, cr_table, need_comma, info); |
| 20719 | + need_comma = 1; |
| 20720 | + } |
| 20721 | + else |
| 20722 | + { |
| 20723 | + i++; |
| 20724 | + regmask >>= 1; |
| 20725 | + } |
| 20726 | + } |
| 20727 | + |
| 20728 | + return 1; |
| 20729 | +} |
| 20730 | + |
| 20731 | +static int |
| 20732 | +print_retval(struct avr32_operand *op ATTRIBUTE_UNUSED, |
| 20733 | + struct disassemble_info *info, |
| 20734 | + struct avr32_field_value *ifields) |
| 20735 | +{ |
| 20736 | + unsigned long regid = ifields[0].value; |
| 20737 | + const char *retval; |
| 20738 | + |
| 20739 | + if (regid < AVR32_REG_SP) |
| 20740 | + retval = reg_table[regid].name; |
| 20741 | + else if (regid == AVR32_REG_SP) |
| 20742 | + retval = "0"; |
| 20743 | + else if (regid == AVR32_REG_LR) |
| 20744 | + retval = "-1"; |
| 20745 | + else |
| 20746 | + retval = "1"; |
| 20747 | + |
| 20748 | + info->fprintf_func(info->stream, "%s", retval); |
| 20749 | + |
| 20750 | + return 1; |
| 20751 | +} |
| 20752 | + |
| 20753 | +static int |
| 20754 | +print_mcall(struct avr32_operand *op, |
| 20755 | + struct disassemble_info *info, |
| 20756 | + struct avr32_field_value *ifields) |
| 20757 | +{ |
| 20758 | + unsigned long regid = ifields[0].value; |
| 20759 | + |
| 20760 | + if (regid == AVR32_REG_PC) |
| 20761 | + print_jmplabel(op, info, ifields + 1); |
| 20762 | + else |
| 20763 | + print_intreg_sdisp(op, info, ifields); |
| 20764 | + |
| 20765 | + return 2; |
| 20766 | +} |
| 20767 | + |
| 20768 | +static int |
| 20769 | +print_jospinc(struct avr32_operand *op ATTRIBUTE_UNUSED, |
| 20770 | + struct disassemble_info *info, |
| 20771 | + struct avr32_field_value *ifields) |
| 20772 | +{ |
| 20773 | + signed long value = ifields[0].value; |
| 20774 | + |
| 20775 | + if (value >= 4) |
| 20776 | + value -= 8; |
| 20777 | + else |
| 20778 | + value += 1; |
| 20779 | + |
| 20780 | + info->fprintf_func(info->stream, "%ld", value); |
| 20781 | + |
| 20782 | + return 1; |
| 20783 | +} |
| 20784 | + |
| 20785 | +static int |
| 20786 | +print_coh(struct avr32_operand *op ATTRIBUTE_UNUSED, |
| 20787 | + struct disassemble_info *info, |
| 20788 | + struct avr32_field_value *ifields ATTRIBUTE_UNUSED) |
| 20789 | +{ |
| 20790 | + info->fprintf_func(info->stream, "COH"); |
| 20791 | + return 0; |
| 20792 | +} |
| 20793 | + |
| 20794 | +#define OP(name, sgn, pcrel, align, func) \ |
| 20795 | + { AVR32_OPERAND_##name, pcrel, align, print_##func } |
| 20796 | + |
| 20797 | +struct avr32_operand operand[AVR32_NR_OPERANDS] = |
| 20798 | + { |
| 20799 | + OP(INTREG, 0, 0, 0, intreg), |
| 20800 | + OP(INTREG_PREDEC, 0, 0, 0, intreg_predec), |
| 20801 | + OP(INTREG_POSTINC, 0, 0, 0, intreg_postinc), |
| 20802 | + OP(INTREG_LSL, 0, 0, 0, intreg_lsl), |
| 20803 | + OP(INTREG_LSR, 0, 0, 0, intreg_lsr), |
| 20804 | + OP(INTREG_BSEL, 0, 0, 0, intreg_bpart), |
| 20805 | + OP(INTREG_HSEL, 0, 0, 1, intreg_hpart), |
| 20806 | + OP(INTREG_SDISP, 1, 0, 0, intreg_sdisp), |
| 20807 | + OP(INTREG_SDISP_H, 1, 0, 1, intreg_sdisp), |
| 20808 | + OP(INTREG_SDISP_W, 1, 0, 2, intreg_sdisp), |
| 20809 | + OP(INTREG_UDISP, 0, 0, 0, intreg_udisp), |
| 20810 | + OP(INTREG_UDISP_H, 0, 0, 1, intreg_udisp), |
| 20811 | + OP(INTREG_UDISP_W, 0, 0, 2, intreg_udisp), |
| 20812 | + OP(INTREG_INDEX, 0, 0, 0, intreg_index), |
| 20813 | + OP(INTREG_XINDEX, 0, 0, 0, intreg_xindex), |
| 20814 | + OP(DWREG, 0, 0, 1, intreg), |
| 20815 | + OP(PC_UDISP_W, 0, 1, 2, pc_disp), |
| 20816 | + OP(SP, 0, 0, 0, sp), |
| 20817 | + OP(SP_UDISP_W, 0, 0, 2, sp_disp), |
| 20818 | + OP(CPNO, 0, 0, 0, cpno), |
| 20819 | + OP(CPREG, 0, 0, 0, cpreg), |
| 20820 | + OP(CPREG_D, 0, 0, 1, cpreg), |
| 20821 | + OP(UNSIGNED_CONST, 0, 0, 0, uconst), |
| 20822 | + OP(UNSIGNED_CONST_W, 0, 0, 2, uconst), |
| 20823 | + OP(SIGNED_CONST, 1, 0, 0, sconst), |
| 20824 | + OP(SIGNED_CONST_W, 1, 0, 2, sconst), |
| 20825 | + OP(JMPLABEL, 1, 1, 1, jmplabel), |
| 20826 | + OP(UNSIGNED_NUMBER, 0, 0, 0, uconst), |
| 20827 | + OP(UNSIGNED_NUMBER_W, 0, 0, 2, uconst), |
| 20828 | + OP(REGLIST8, 0, 0, 0, reglist8), |
| 20829 | + OP(REGLIST9, 0, 0, 0, reglist9), |
| 20830 | + OP(REGLIST16, 0, 0, 0, reglist16), |
| 20831 | + OP(REGLIST_LDM, 0, 0, 0, reglist_ldm), |
| 20832 | + OP(REGLIST_CP8, 0, 0, 0, reglist_cp8), |
| 20833 | + OP(REGLIST_CPD8, 0, 0, 0, reglist_cpd8), |
| 20834 | + OP(RETVAL, 0, 0, 0, retval), |
| 20835 | + OP(MCALL, 1, 0, 2, mcall), |
| 20836 | + OP(JOSPINC, 0, 0, 0, jospinc), |
| 20837 | + OP(COH, 0, 0, 0, coh), |
| 20838 | + }; |
| 20839 | + |
| 20840 | +static void |
| 20841 | +print_opcode(bfd_vma insn_word, const struct avr32_opcode *opc, |
| 20842 | + bfd_vma pc, struct disassemble_info *info) |
| 20843 | +{ |
| 20844 | + const struct avr32_syntax *syntax = opc->syntax; |
| 20845 | + struct avr32_field_value fields[AVR32_MAX_FIELDS]; |
| 20846 | + unsigned int i, next_field = 0, nr_operands; |
| 20847 | + |
| 20848 | + for (i = 0; i < opc->nr_fields; i++) |
| 20849 | + { |
| 20850 | + opc->fields[i]->extract(opc->fields[i], &insn_word, &fields[i].value); |
| 20851 | + fields[i].ifield = opc->fields[i]; |
| 20852 | + } |
| 20853 | + |
| 20854 | + current_pc = pc; |
| 20855 | + info->fprintf_func(info->stream, "%s", syntax->mnemonic->name); |
| 20856 | + |
| 20857 | + if (syntax->nr_operands < 0) |
| 20858 | + nr_operands = (unsigned int) -syntax->nr_operands; |
| 20859 | + else |
| 20860 | + nr_operands = (unsigned int) syntax->nr_operands; |
| 20861 | + |
| 20862 | + for (i = 0; i < nr_operands; i++) |
| 20863 | + { |
| 20864 | + struct avr32_operand *op = &operand[syntax->operand[i]]; |
| 20865 | + |
| 20866 | + if (i) |
| 20867 | + info->fprintf_func(info->stream, ","); |
| 20868 | + else |
| 20869 | + info->fprintf_func(info->stream, "\t"); |
| 20870 | + next_field += op->print(op, info, &fields[next_field]); |
| 20871 | + } |
| 20872 | +} |
| 20873 | + |
| 20874 | +#define is_fpu_insn(iw) ((iw&0xf9f0e000)==0xe1a00000) |
| 20875 | + |
| 20876 | +static const struct avr32_opcode * |
| 20877 | +find_opcode(bfd_vma insn_word) |
| 20878 | +{ |
| 20879 | + int i; |
| 20880 | + |
| 20881 | + for (i = 0; i < AVR32_NR_OPCODES; i++) |
| 20882 | + { |
| 20883 | + const struct avr32_opcode *opc = &avr32_opc_table[i]; |
| 20884 | + |
| 20885 | + if ((insn_word & opc->mask) == opc->value) |
| 20886 | + { |
| 20887 | + if (avr32_opt_decode_fpu) |
| 20888 | + { |
| 20889 | + if (is_fpu_insn(insn_word)) |
| 20890 | + { |
| 20891 | + if (opc->id != AVR32_OPC_COP) |
| 20892 | + return opc; |
| 20893 | + } |
| 20894 | + else |
| 20895 | + return opc; |
| 20896 | + } |
| 20897 | + else |
| 20898 | + return opc; |
| 20899 | + } |
| 20900 | + } |
| 20901 | + |
| 20902 | + return NULL; |
| 20903 | +} |
| 20904 | + |
| 20905 | +static int |
| 20906 | +read_insn_word(bfd_vma pc, bfd_vma *valuep, |
| 20907 | + struct disassemble_info *info) |
| 20908 | +{ |
| 20909 | + bfd_byte b[4]; |
| 20910 | + int status; |
| 20911 | + |
| 20912 | + status = info->read_memory_func(pc, b, 4, info); |
| 20913 | + if (status) |
| 20914 | + { |
| 20915 | + status = info->read_memory_func(pc, b, 2, info); |
| 20916 | + if (status) |
| 20917 | + { |
| 20918 | + info->memory_error_func(status, pc, info); |
| 20919 | + return -1; |
| 20920 | + } |
| 20921 | + b[3] = b[2] = 0; |
| 20922 | + } |
| 20923 | + |
| 20924 | + *valuep = (b[0] << 24) | (b[1] << 16) | (b[2] << 8) | b[3]; |
| 20925 | + return 0; |
| 20926 | +} |
| 20927 | + |
| 20928 | +/* Parse an individual disassembler option. */ |
| 20929 | + |
| 20930 | +void |
| 20931 | +parse_avr32_disassembler_option (option) |
| 20932 | + char * option; |
| 20933 | +{ |
| 20934 | + if (option == NULL) |
| 20935 | + return; |
| 20936 | + |
| 20937 | + if (!strcmp(option,"decode-fpu")) |
| 20938 | + { |
| 20939 | + avr32_opt_decode_fpu = 1; |
| 20940 | + return; |
| 20941 | + } |
| 20942 | + |
| 20943 | + printf("\n%s--",option); |
| 20944 | + /* XXX - should break 'option' at following delimiter. */ |
| 20945 | + fprintf (stderr, _("Unrecognised disassembler option: %s\n"), option); |
| 20946 | + |
| 20947 | + return; |
| 20948 | +} |
| 20949 | + |
| 20950 | +/* Parse the string of disassembler options, spliting it at whitespaces |
| 20951 | + or commas. (Whitespace separators supported for backwards compatibility). */ |
| 20952 | + |
| 20953 | +static void |
| 20954 | +parse_disassembler_options (char *options) |
| 20955 | +{ |
| 20956 | + if (options == NULL) |
| 20957 | + return; |
| 20958 | + |
| 20959 | + while (*options) |
| 20960 | + { |
| 20961 | + parse_avr32_disassembler_option (options); |
| 20962 | + |
| 20963 | + /* Skip forward to next seperator. */ |
| 20964 | + while ((*options) && (! ISSPACE (*options)) && (*options != ',')) |
| 20965 | + ++ options; |
| 20966 | + /* Skip forward past seperators. */ |
| 20967 | + while (ISSPACE (*options) || (*options == ',')) |
| 20968 | + ++ options; |
| 20969 | + } |
| 20970 | +} |
| 20971 | + |
| 20972 | +int |
| 20973 | +print_insn_avr32(bfd_vma pc, struct disassemble_info *info) |
| 20974 | +{ |
| 20975 | + bfd_vma insn_word; |
| 20976 | + const struct avr32_opcode *opc; |
| 20977 | + |
| 20978 | + if (info->disassembler_options) |
| 20979 | + { |
| 20980 | + parse_disassembler_options (info->disassembler_options); |
| 20981 | + |
| 20982 | + /* To avoid repeated parsing of these options, we remove them here. */ |
| 20983 | + info->disassembler_options = NULL; |
| 20984 | + } |
| 20985 | + |
| 20986 | + info->bytes_per_chunk = 1; |
| 20987 | + info->display_endian = BFD_ENDIAN_BIG; |
| 20988 | + |
| 20989 | + if (read_insn_word(pc, &insn_word, info)) |
| 20990 | + return -1; |
| 20991 | + |
| 20992 | + opc = find_opcode(insn_word); |
| 20993 | + if (opc) |
| 20994 | + { |
| 20995 | + print_opcode(insn_word, opc, pc, info); |
| 20996 | + return opc->size; |
| 20997 | + } |
| 20998 | + else |
| 20999 | + { |
| 21000 | + info->fprintf_func(info->stream, _("*unknown*")); |
| 21001 | + return 2; |
| 21002 | + } |
| 21003 | + |
| 21004 | +} |
| 21005 | + |
| 21006 | +void |
| 21007 | +print_avr32_disassembler_options (FILE *stream ATTRIBUTE_UNUSED) |
| 21008 | +{ |
| 21009 | + fprintf(stream, "\n AVR32 Specific Disassembler Options:\n"); |
| 21010 | + fprintf(stream, " -M decode-fpu Print FPU instructions instead of 'cop' \n"); |
| 21011 | +} |
| 21012 | + |
| 21013 | --- /dev/null |
| 21014 | +++ b/opcodes/avr32-opc.c |
| 21015 | @@ -0,0 +1,6906 @@ |
| 21016 | +/* Opcode tables for AVR32. |
| 21017 | + Copyright 2005,2006,2007,2008,2009 Atmel Corporation. |
| 21018 | + |
| 21019 | + Written by Haavard Skinnemoen, Atmel Norway, <hskinnemoen@atmel.com> |
| 21020 | + |
| 21021 | + This file is part of libopcodes. |
| 21022 | + |
| 21023 | + This program is free software; you can redistribute it and/or |
| 21024 | + modify it under the terms of the GNU General Public License as |
| 21025 | + published by the Free Software Foundation; either version 2 of the |
| 21026 | + License, or (at your option) any later version. |
| 21027 | + |
| 21028 | + This program is distributed in the hope that it will be useful, but |
| 21029 | + WITHOUT ANY WARRANTY; without even the implied warranty of |
| 21030 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 21031 | + General Public License for more details. |
| 21032 | + |
| 21033 | + You should have received a copy of the GNU General Public License |
| 21034 | + along with this program; if not, write to the Free Software |
| 21035 | + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA |
| 21036 | + 02111-1307, USA. */ |
| 21037 | + |
| 21038 | +#include <stdlib.h> |
| 21039 | +#include <assert.h> |
| 21040 | + |
| 21041 | +#include "avr32-opc.h" |
| 21042 | + |
| 21043 | +#define PICO_CPNO 1 |
| 21044 | + |
| 21045 | +void |
| 21046 | +avr32_insert_simple(const struct avr32_ifield *field, |
| 21047 | + void *buf, unsigned long value) |
| 21048 | +{ |
| 21049 | + bfd_vma word; |
| 21050 | + |
| 21051 | + word = bfd_getb32(buf); |
| 21052 | + word &= ~field->mask; |
| 21053 | + word |= (value << field->shift) & field->mask; |
| 21054 | + bfd_putb32(word, buf); |
| 21055 | +} |
| 21056 | + |
| 21057 | +void |
| 21058 | +avr32_insert_bit5c(const struct avr32_ifield *field ATTRIBUTE_UNUSED, |
| 21059 | + void *buf, unsigned long value) |
| 21060 | +{ |
| 21061 | + char *opcode = buf; |
| 21062 | + |
| 21063 | + opcode[0] = (opcode[0] & 0xe1) | (value & 0x1e); |
| 21064 | + opcode[1] = (opcode[1] & 0xef) | ((value & 1) << 4); |
| 21065 | +} |
| 21066 | + |
| 21067 | +void |
| 21068 | +avr32_insert_k10(const struct avr32_ifield *field ATTRIBUTE_UNUSED, |
| 21069 | + void *buf, unsigned long value) |
| 21070 | +{ |
| 21071 | + char *opcode = buf; |
| 21072 | + |
| 21073 | + opcode[0] = (opcode[0] & 0xf0) | ((value & 0xf0) >> 4); |
| 21074 | + opcode[1] = ((opcode[1] & 0x0c) | ((value & 0x0f) << 4) |
| 21075 | + | ((value & 0x300) >> 8)); |
| 21076 | +} |
| 21077 | + |
| 21078 | + |
| 21079 | +void |
| 21080 | +avr32_insert_k21(const struct avr32_ifield *field, |
| 21081 | + void *buf, unsigned long value) |
| 21082 | +{ |
| 21083 | + bfd_vma word; |
| 21084 | + bfd_vma k21; |
| 21085 | + |
| 21086 | + word = bfd_getb32(buf); |
| 21087 | + word &= ~field->mask; |
| 21088 | + k21 = ((value & 0xffff) | ((value & 0x10000) << 4) |
| 21089 | + | ((value & 0x1e0000) << 8)); |
| 21090 | + assert(!(k21 & ~field->mask)); |
| 21091 | + word |= k21; |
| 21092 | + bfd_putb32(word, buf); |
| 21093 | +} |
| 21094 | + |
| 21095 | +void |
| 21096 | +avr32_insert_cpop(const struct avr32_ifield *field, |
| 21097 | + void *buf, unsigned long value) |
| 21098 | +{ |
| 21099 | + bfd_vma word; |
| 21100 | + |
| 21101 | + word = bfd_getb32(buf); |
| 21102 | + word &= ~field->mask; |
| 21103 | + word |= (((value & 0x1e) << 15) | ((value & 0x60) << 20) |
| 21104 | + | ((value & 0x01) << 12)); |
| 21105 | + bfd_putb32(word, buf); |
| 21106 | +} |
| 21107 | + |
| 21108 | +void |
| 21109 | +avr32_insert_k12cp(const struct avr32_ifield *field, |
| 21110 | + void *buf, unsigned long value) |
| 21111 | +{ |
| 21112 | + bfd_vma word; |
| 21113 | + |
| 21114 | + word = bfd_getb32(buf); |
| 21115 | + word &= ~field->mask; |
| 21116 | + word |= ((value & 0xf00) << 4) | (value & 0xff); |
| 21117 | + bfd_putb32(word, buf); |
| 21118 | +} |
| 21119 | + |
| 21120 | +void avr32_extract_simple(const struct avr32_ifield *field, |
| 21121 | + void *buf, unsigned long *value) |
| 21122 | +{ |
| 21123 | + /* XXX: The disassembler has done any necessary byteswapping already */ |
| 21124 | + bfd_vma word = *(bfd_vma *)buf; |
| 21125 | + |
| 21126 | + *value = (word & field->mask) >> field->shift; |
| 21127 | +} |
| 21128 | + |
| 21129 | +void avr32_extract_bit5c(const struct avr32_ifield *field ATTRIBUTE_UNUSED, |
| 21130 | + void *buf, unsigned long *value) |
| 21131 | +{ |
| 21132 | + bfd_vma word = *(bfd_vma *)buf; |
| 21133 | + |
| 21134 | + *value = ((word >> 20) & 1) | ((word >> 24) & 0x1e); |
| 21135 | +} |
| 21136 | + |
| 21137 | +void avr32_extract_k10(const struct avr32_ifield *field ATTRIBUTE_UNUSED, |
| 21138 | + void *buf, unsigned long *value) |
| 21139 | +{ |
| 21140 | + bfd_vma word = *(bfd_vma *)buf; |
| 21141 | + |
| 21142 | + *value = ((word >> 8) & 0x300) | ((word >> 20) & 0xff); |
| 21143 | +} |
| 21144 | + |
| 21145 | +void avr32_extract_k21(const struct avr32_ifield *field ATTRIBUTE_UNUSED, |
| 21146 | + void *buf, unsigned long *value) |
| 21147 | +{ |
| 21148 | + bfd_vma word = *(bfd_vma *)buf; |
| 21149 | + |
| 21150 | + *value = ((word & 0xffff) | ((word >> 4) & 0x10000) |
| 21151 | + | ((word >> 8) & 0x1e0000)); |
| 21152 | +} |
| 21153 | + |
| 21154 | +void avr32_extract_cpop(const struct avr32_ifield *field ATTRIBUTE_UNUSED, |
| 21155 | + void *buf, unsigned long *value) |
| 21156 | +{ |
| 21157 | + bfd_vma word = *(bfd_vma *)buf; |
| 21158 | + |
| 21159 | + *value = (((word >> 12) & 1) | ((word >> 15) & 0x1e) |
| 21160 | + | ((word >> 20) & 0x60)); |
| 21161 | +} |
| 21162 | + |
| 21163 | +void avr32_extract_k12cp(const struct avr32_ifield *field ATTRIBUTE_UNUSED, |
| 21164 | + void *buf, unsigned long *value) |
| 21165 | +{ |
| 21166 | + bfd_vma word = *(bfd_vma *)buf; |
| 21167 | + |
| 21168 | + *value = ((word >> 4) & 0xf00) | (word & 0xff); |
| 21169 | +} |
| 21170 | + |
| 21171 | + |
| 21172 | +#define IFLD(id, bitsz, shift, mask, func) \ |
| 21173 | + { AVR32_IFIELD_##id, bitsz, shift, mask, \ |
| 21174 | + avr32_insert_##func, avr32_extract_##func } |
| 21175 | + |
| 21176 | +const struct avr32_ifield avr32_ifield_table[] = |
| 21177 | + { |
| 21178 | + IFLD(RX, 4, 25, 0x1e000000, simple), |
| 21179 | + IFLD(RY, 4, 16, 0x000f0000, simple), |
| 21180 | + IFLD(COND4C, 4, 20, 0x00f00000, simple), |
| 21181 | + IFLD(K8C, 8, 20, 0x0ff00000, simple), |
| 21182 | + IFLD(K7C, 7, 20, 0x07f00000, simple), |
| 21183 | + IFLD(K5C, 5, 20, 0x01f00000, simple), |
| 21184 | + IFLD(K3, 3, 20, 0x00700000, simple), |
| 21185 | + IFLD(RY_DW, 3, 17, 0x000e0000, simple), |
| 21186 | + IFLD(COND4E, 4, 8, 0x00000f00, simple), |
| 21187 | + IFLD(K8E, 8, 0, 0x000000ff, simple), |
| 21188 | + IFLD(BIT5C, 5, 20, 0x1e100000, bit5c), |
| 21189 | + IFLD(COND3, 3, 16, 0x00070000, simple), |
| 21190 | + IFLD(K10, 10, 16, 0x0ff30000, k10), |
| 21191 | + IFLD(POPM, 9, 19, 0x0ff80000, simple), |
| 21192 | + IFLD(K2, 2, 4, 0x00000030, simple), |
| 21193 | + IFLD(RD_E, 4, 0, 0x0000000f, simple), |
| 21194 | + IFLD(RD_DW, 3, 1, 0x0000000e, simple), |
| 21195 | + IFLD(X, 1, 5, 0x00000020, simple), |
| 21196 | + IFLD(Y, 1, 4, 0x00000010, simple), |
| 21197 | + IFLD(X2, 1, 13, 0x00002000, simple), |
| 21198 | + IFLD(Y2, 1, 12, 0x00001000, simple), |
| 21199 | + IFLD(K5E, 5, 0, 0x0000001f, simple), |
| 21200 | + IFLD(PART2, 2, 0, 0x00000003, simple), |
| 21201 | + IFLD(PART1, 1, 0, 0x00000001, simple), |
| 21202 | + IFLD(K16, 16, 0, 0x0000ffff, simple), |
| 21203 | + IFLD(CACHEOP, 5, 11, 0x0000f800, simple), |
| 21204 | + IFLD(K11, 11, 0, 0x000007ff, simple), |
| 21205 | + IFLD(K21, 21, 0, 0x1e10ffff, k21), |
| 21206 | + IFLD(CPOP, 7, 12, 0x060f1000, cpop), |
| 21207 | + IFLD(CPNO, 3, 13, 0x0000e000, simple), |
| 21208 | + IFLD(CRD_RI, 4, 8, 0x00000f00, simple), |
| 21209 | + IFLD(CRX, 4, 4, 0x000000f0, simple), |
| 21210 | + IFLD(CRY, 4, 0, 0x0000000f, simple), |
| 21211 | + IFLD(K7E, 7, 0, 0x0000007f, simple), |
| 21212 | + IFLD(CRD_DW, 3, 9, 0x00000e00, simple), |
| 21213 | + IFLD(PART1_K12, 1, 12, 0x00001000, simple), |
| 21214 | + IFLD(PART2_K12, 2, 12, 0x00003000, simple), |
| 21215 | + IFLD(K12, 12, 0, 0x00000fff, simple), |
| 21216 | + IFLD(S5, 5, 5, 0x000003e0, simple), |
| 21217 | + IFLD(K5E2, 5, 4, 0x000001f0, simple), |
| 21218 | + IFLD(K4, 4, 20, 0x00f00000, simple), |
| 21219 | + IFLD(COND4E2, 4, 4, 0x000000f0, simple), |
| 21220 | + IFLD(K8E2, 8, 4, 0x00000ff0, simple), |
| 21221 | + IFLD(K6, 6, 20, 0x03f00000, simple), |
| 21222 | + IFLD(MEM15, 15, 0, 0x00007fff, simple), |
| 21223 | + IFLD(MEMB5, 5, 15, 0x000f8000, simple), |
| 21224 | + IFLD(W, 1, 25, 0x02000000, simple), |
| 21225 | + /* Coprocessor Multiple High/Low */ |
| 21226 | + IFLD(CM_HL, 1, 8, 0x00000100, simple), |
| 21227 | + IFLD(K12CP, 12 ,0, 0x0000f0ff, k12cp), |
| 21228 | + IFLD(K9E, 9 ,0, 0x000001ff, simple), |
| 21229 | + IFLD (FP_RX, 4, 4, 0x000000F0, simple), |
| 21230 | + IFLD (FP_RY, 4, 0, 0x0000000F, simple), |
| 21231 | + IFLD (FP_RD, 4, 8, 0x00000F00, simple), |
| 21232 | + IFLD (FP_RA, 4, 16, 0x000F0000, simple) |
| 21233 | + }; |
| 21234 | +#undef IFLD |
| 21235 | + |
| 21236 | + |
| 21237 | +struct avr32_opcode avr32_opc_table[] = |
| 21238 | + { |
| 21239 | + { |
| 21240 | + AVR32_OPC_ABS, 2, 0x5c400000, 0xfff00000, |
| 21241 | + &avr32_syntax_table[AVR32_SYNTAX_ABS], |
| 21242 | + BFD_RELOC_UNUSED, 1, -1, |
| 21243 | + { |
| 21244 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21245 | + } |
| 21246 | + }, |
| 21247 | + { |
| 21248 | + AVR32_OPC_ACALL, 2, 0xd0000000, 0xf00f0000, |
| 21249 | + &avr32_syntax_table[AVR32_SYNTAX_ACALL], |
| 21250 | + BFD_RELOC_UNUSED, 1, -1, |
| 21251 | + { |
| 21252 | + &avr32_ifield_table[AVR32_IFIELD_K8C], |
| 21253 | + }, |
| 21254 | + }, |
| 21255 | + { |
| 21256 | + AVR32_OPC_ACR, 2, 0x5c000000, 0xfff00000, |
| 21257 | + &avr32_syntax_table[AVR32_SYNTAX_ACR], |
| 21258 | + BFD_RELOC_UNUSED, 1, -1, |
| 21259 | + { |
| 21260 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21261 | + }, |
| 21262 | + }, |
| 21263 | + { |
| 21264 | + AVR32_OPC_ADC, 4, 0xe0000040, 0xe1f0fff0, |
| 21265 | + &avr32_syntax_table[AVR32_SYNTAX_ADC], |
| 21266 | + BFD_RELOC_UNUSED, 3, -1, |
| 21267 | + { |
| 21268 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 21269 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 21270 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21271 | + }, |
| 21272 | + }, |
| 21273 | + { |
| 21274 | + AVR32_OPC_ADD1, 2, 0x00000000, 0xe1f00000, |
| 21275 | + &avr32_syntax_table[AVR32_SYNTAX_ADD1], |
| 21276 | + BFD_RELOC_UNUSED, 2, -1, |
| 21277 | + { |
| 21278 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21279 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 21280 | + }, |
| 21281 | + }, |
| 21282 | + { |
| 21283 | + AVR32_OPC_ADD2, 4, 0xe0000000, 0xe1f0ffc0, |
| 21284 | + &avr32_syntax_table[AVR32_SYNTAX_ADD2], |
| 21285 | + BFD_RELOC_UNUSED, 4, -1, |
| 21286 | + { |
| 21287 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 21288 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 21289 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21290 | + &avr32_ifield_table[AVR32_IFIELD_K2], |
| 21291 | + }, |
| 21292 | + }, |
| 21293 | + { |
| 21294 | + AVR32_OPC_ADDABS, 4, 0xe0000e40, 0xe1f0fff0, |
| 21295 | + &avr32_syntax_table[AVR32_SYNTAX_ADDABS], |
| 21296 | + BFD_RELOC_UNUSED, 3, -1, |
| 21297 | + { |
| 21298 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 21299 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 21300 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21301 | + }, |
| 21302 | + }, |
| 21303 | + { |
| 21304 | + AVR32_OPC_ADDHH_W, 4, 0xe0000e00, 0xe1f0ffc0, |
| 21305 | + &avr32_syntax_table[AVR32_SYNTAX_ADDHH_W], |
| 21306 | + BFD_RELOC_UNUSED, 5, -1, |
| 21307 | + { |
| 21308 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 21309 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 21310 | + &avr32_ifield_table[AVR32_IFIELD_X], |
| 21311 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21312 | + &avr32_ifield_table[AVR32_IFIELD_Y], |
| 21313 | + }, |
| 21314 | + }, |
| 21315 | + { |
| 21316 | + AVR32_OPC_AND1, 2, 0x00600000, 0xe1f00000, |
| 21317 | + &avr32_syntax_table[AVR32_SYNTAX_AND1], |
| 21318 | + BFD_RELOC_UNUSED, 2, -1, |
| 21319 | + { |
| 21320 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21321 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 21322 | + }, |
| 21323 | + }, |
| 21324 | + { |
| 21325 | + AVR32_OPC_AND2, 4, 0xe1e00000, 0xe1f0fe00, |
| 21326 | + &avr32_syntax_table[AVR32_SYNTAX_AND2], |
| 21327 | + BFD_RELOC_UNUSED, 4, -1, |
| 21328 | + { |
| 21329 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 21330 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 21331 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21332 | + &avr32_ifield_table[AVR32_IFIELD_K5E2], |
| 21333 | + }, |
| 21334 | + }, |
| 21335 | + { |
| 21336 | + AVR32_OPC_AND3, 4, 0xe1e00200, 0xe1f0fe00, |
| 21337 | + &avr32_syntax_table[AVR32_SYNTAX_AND3], |
| 21338 | + BFD_RELOC_UNUSED, 4, -1, |
| 21339 | + { |
| 21340 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 21341 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 21342 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21343 | + &avr32_ifield_table[AVR32_IFIELD_K5E2], |
| 21344 | + }, |
| 21345 | + }, |
| 21346 | + { |
| 21347 | + AVR32_OPC_ANDH, 4, 0xe4100000, 0xfff00000, |
| 21348 | + &avr32_syntax_table[AVR32_SYNTAX_ANDH], |
| 21349 | + BFD_RELOC_AVR32_16U, 2, 1, |
| 21350 | + { |
| 21351 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21352 | + &avr32_ifield_table[AVR32_IFIELD_K16], |
| 21353 | + }, |
| 21354 | + }, |
| 21355 | + { |
| 21356 | + AVR32_OPC_ANDH_COH, 4, 0xe6100000, 0xfff00000, |
| 21357 | + &avr32_syntax_table[AVR32_SYNTAX_ANDH_COH], |
| 21358 | + BFD_RELOC_AVR32_16U, 2, 1, |
| 21359 | + { |
| 21360 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21361 | + &avr32_ifield_table[AVR32_IFIELD_K16], |
| 21362 | + }, |
| 21363 | + }, |
| 21364 | + { |
| 21365 | + AVR32_OPC_ANDL, 4, 0xe0100000, 0xfff00000, |
| 21366 | + &avr32_syntax_table[AVR32_SYNTAX_ANDL], |
| 21367 | + BFD_RELOC_AVR32_16U, 2, 1, |
| 21368 | + { |
| 21369 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21370 | + &avr32_ifield_table[AVR32_IFIELD_K16], |
| 21371 | + }, |
| 21372 | + }, |
| 21373 | + { |
| 21374 | + AVR32_OPC_ANDL_COH, 4, 0xe2100000, 0xfff00000, |
| 21375 | + &avr32_syntax_table[AVR32_SYNTAX_ANDL_COH], |
| 21376 | + BFD_RELOC_AVR32_16U, 2, 1, |
| 21377 | + { |
| 21378 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21379 | + &avr32_ifield_table[AVR32_IFIELD_K16], |
| 21380 | + }, |
| 21381 | + }, |
| 21382 | + { |
| 21383 | + AVR32_OPC_ANDN, 2, 0x00800000, 0xe1f00000, |
| 21384 | + &avr32_syntax_table[AVR32_SYNTAX_ANDN], |
| 21385 | + BFD_RELOC_UNUSED, 2, -1, |
| 21386 | + { |
| 21387 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21388 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 21389 | + }, |
| 21390 | + }, |
| 21391 | + { |
| 21392 | + AVR32_OPC_ASR1, 4, 0xe0000840, 0xe1f0fff0, |
| 21393 | + &avr32_syntax_table[AVR32_SYNTAX_ASR1], |
| 21394 | + BFD_RELOC_UNUSED, 3, -1, |
| 21395 | + { |
| 21396 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 21397 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 21398 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21399 | + }, |
| 21400 | + }, |
| 21401 | + { |
| 21402 | + AVR32_OPC_ASR3, 4, 0xe0001400, 0xe1f0ffe0, |
| 21403 | + &avr32_syntax_table[AVR32_SYNTAX_ASR3], |
| 21404 | + BFD_RELOC_UNUSED, 3, -1, |
| 21405 | + { |
| 21406 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21407 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 21408 | + &avr32_ifield_table[AVR32_IFIELD_K5E], |
| 21409 | + }, |
| 21410 | + }, |
| 21411 | + { |
| 21412 | + AVR32_OPC_ASR2, 2, 0xa1400000, 0xe1e00000, |
| 21413 | + &avr32_syntax_table[AVR32_SYNTAX_ASR2], |
| 21414 | + BFD_RELOC_UNUSED, 2, -1, |
| 21415 | + { |
| 21416 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21417 | + &avr32_ifield_table[AVR32_IFIELD_BIT5C], |
| 21418 | + }, |
| 21419 | + }, |
| 21420 | + { |
| 21421 | + AVR32_OPC_BLD, 4, 0xedb00000, 0xfff0ffe0, |
| 21422 | + &avr32_syntax_table[AVR32_SYNTAX_BLD], |
| 21423 | + BFD_RELOC_UNUSED, 2, -1, |
| 21424 | + { |
| 21425 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21426 | + &avr32_ifield_table[AVR32_IFIELD_K5E], |
| 21427 | + }, |
| 21428 | + }, |
| 21429 | + { |
| 21430 | + AVR32_OPC_BREQ1, 2, 0xc0000000, 0xf00f0000, |
| 21431 | + &avr32_syntax_table[AVR32_SYNTAX_BREQ1], |
| 21432 | + BFD_RELOC_AVR32_9H_PCREL, 1, 0, |
| 21433 | + { |
| 21434 | + &avr32_ifield_table[AVR32_IFIELD_K8C], |
| 21435 | + }, |
| 21436 | + }, |
| 21437 | + { |
| 21438 | + AVR32_OPC_BRNE1, 2, 0xc0010000, 0xf00f0000, |
| 21439 | + &avr32_syntax_table[AVR32_SYNTAX_BRNE1], |
| 21440 | + BFD_RELOC_AVR32_9H_PCREL, 1, 0, |
| 21441 | + { |
| 21442 | + &avr32_ifield_table[AVR32_IFIELD_K8C], |
| 21443 | + }, |
| 21444 | + }, |
| 21445 | + { |
| 21446 | + AVR32_OPC_BRCC1, 2, 0xc0020000, 0xf00f0000, |
| 21447 | + &avr32_syntax_table[AVR32_SYNTAX_BRCC1], |
| 21448 | + BFD_RELOC_AVR32_9H_PCREL, 1, 0, |
| 21449 | + { |
| 21450 | + &avr32_ifield_table[AVR32_IFIELD_K8C], |
| 21451 | + }, |
| 21452 | + }, |
| 21453 | + { |
| 21454 | + AVR32_OPC_BRCS1, 2, 0xc0030000, 0xf00f0000, |
| 21455 | + &avr32_syntax_table[AVR32_SYNTAX_BRCS1], |
| 21456 | + BFD_RELOC_AVR32_9H_PCREL, 1, 0, |
| 21457 | + { |
| 21458 | + &avr32_ifield_table[AVR32_IFIELD_K8C], |
| 21459 | + }, |
| 21460 | + }, |
| 21461 | + { |
| 21462 | + AVR32_OPC_BRGE1, 2, 0xc0040000, 0xf00f0000, |
| 21463 | + &avr32_syntax_table[AVR32_SYNTAX_BRGE1], |
| 21464 | + BFD_RELOC_AVR32_9H_PCREL, 1, 0, |
| 21465 | + { |
| 21466 | + &avr32_ifield_table[AVR32_IFIELD_K8C], |
| 21467 | + }, |
| 21468 | + }, |
| 21469 | + { |
| 21470 | + AVR32_OPC_BRLT1, 2, 0xc0050000, 0xf00f0000, |
| 21471 | + &avr32_syntax_table[AVR32_SYNTAX_BRLT1], |
| 21472 | + BFD_RELOC_AVR32_9H_PCREL, 1, 0, |
| 21473 | + { |
| 21474 | + &avr32_ifield_table[AVR32_IFIELD_K8C], |
| 21475 | + }, |
| 21476 | + }, |
| 21477 | + { |
| 21478 | + AVR32_OPC_BRMI1, 2, 0xc0060000, 0xf00f0000, |
| 21479 | + &avr32_syntax_table[AVR32_SYNTAX_BRMI1], |
| 21480 | + BFD_RELOC_AVR32_9H_PCREL, 1, 0, |
| 21481 | + { |
| 21482 | + &avr32_ifield_table[AVR32_IFIELD_K8C], |
| 21483 | + }, |
| 21484 | + }, |
| 21485 | + { |
| 21486 | + AVR32_OPC_BRPL1, 2, 0xc0070000, 0xf00f0000, |
| 21487 | + &avr32_syntax_table[AVR32_SYNTAX_BRPL1], |
| 21488 | + BFD_RELOC_AVR32_9H_PCREL, 1, 0, |
| 21489 | + { |
| 21490 | + &avr32_ifield_table[AVR32_IFIELD_K8C], |
| 21491 | + }, |
| 21492 | + }, |
| 21493 | + { |
| 21494 | + AVR32_OPC_BREQ2, 4, 0xe0800000, 0xe1ef0000, |
| 21495 | + &avr32_syntax_table[AVR32_SYNTAX_BREQ2], |
| 21496 | + BFD_RELOC_AVR32_22H_PCREL, 1, 0, |
| 21497 | + { |
| 21498 | + &avr32_ifield_table[AVR32_IFIELD_K21], |
| 21499 | + }, |
| 21500 | + }, |
| 21501 | + { |
| 21502 | + AVR32_OPC_BRNE2, 4, 0xe0810000, 0xe1ef0000, |
| 21503 | + &avr32_syntax_table[AVR32_SYNTAX_BRNE2], |
| 21504 | + BFD_RELOC_AVR32_22H_PCREL, 1, 0, |
| 21505 | + { |
| 21506 | + &avr32_ifield_table[AVR32_IFIELD_K21], |
| 21507 | + }, |
| 21508 | + }, |
| 21509 | + { |
| 21510 | + AVR32_OPC_BRCC2, 4, 0xe0820000, 0xe1ef0000, |
| 21511 | + &avr32_syntax_table[AVR32_SYNTAX_BRHS2], |
| 21512 | + BFD_RELOC_AVR32_22H_PCREL, 1, 0, |
| 21513 | + { |
| 21514 | + &avr32_ifield_table[AVR32_IFIELD_K21], |
| 21515 | + }, |
| 21516 | + }, |
| 21517 | + { |
| 21518 | + AVR32_OPC_BRCS2, 4, 0xe0830000, 0xe1ef0000, |
| 21519 | + &avr32_syntax_table[AVR32_SYNTAX_BRLO2], |
| 21520 | + BFD_RELOC_AVR32_22H_PCREL, 1, 0, |
| 21521 | + { |
| 21522 | + &avr32_ifield_table[AVR32_IFIELD_K21], |
| 21523 | + }, |
| 21524 | + }, |
| 21525 | + { |
| 21526 | + AVR32_OPC_BRGE2, 4, 0xe0840000, 0xe1ef0000, |
| 21527 | + &avr32_syntax_table[AVR32_SYNTAX_BRGE2], |
| 21528 | + BFD_RELOC_AVR32_22H_PCREL, 1, 0, |
| 21529 | + { |
| 21530 | + &avr32_ifield_table[AVR32_IFIELD_K21], |
| 21531 | + }, |
| 21532 | + }, |
| 21533 | + { |
| 21534 | + AVR32_OPC_BRLT2, 4, 0xe0850000, 0xe1ef0000, |
| 21535 | + &avr32_syntax_table[AVR32_SYNTAX_BRLT2], |
| 21536 | + BFD_RELOC_AVR32_22H_PCREL, 1, 0, |
| 21537 | + { |
| 21538 | + &avr32_ifield_table[AVR32_IFIELD_K21], |
| 21539 | + }, |
| 21540 | + }, |
| 21541 | + { |
| 21542 | + AVR32_OPC_BRMI2, 4, 0xe0860000, 0xe1ef0000, |
| 21543 | + &avr32_syntax_table[AVR32_SYNTAX_BRMI2], |
| 21544 | + BFD_RELOC_AVR32_22H_PCREL, 1, 0, |
| 21545 | + { |
| 21546 | + &avr32_ifield_table[AVR32_IFIELD_K21], |
| 21547 | + }, |
| 21548 | + }, |
| 21549 | + { |
| 21550 | + AVR32_OPC_BRPL2, 4, 0xe0870000, 0xe1ef0000, |
| 21551 | + &avr32_syntax_table[AVR32_SYNTAX_BRPL2], |
| 21552 | + BFD_RELOC_AVR32_22H_PCREL, 1, 0, |
| 21553 | + { |
| 21554 | + &avr32_ifield_table[AVR32_IFIELD_K21], |
| 21555 | + }, |
| 21556 | + }, |
| 21557 | + { |
| 21558 | + AVR32_OPC_BRLS, 4, 0xe0880000, 0xe1ef0000, |
| 21559 | + &avr32_syntax_table[AVR32_SYNTAX_BRLS], |
| 21560 | + BFD_RELOC_AVR32_22H_PCREL, 1, 0, |
| 21561 | + { |
| 21562 | + &avr32_ifield_table[AVR32_IFIELD_K21], |
| 21563 | + }, |
| 21564 | + }, |
| 21565 | + { |
| 21566 | + AVR32_OPC_BRGT, 4, 0xe0890000, 0xe1ef0000, |
| 21567 | + &avr32_syntax_table[AVR32_SYNTAX_BRGT], |
| 21568 | + BFD_RELOC_AVR32_22H_PCREL, 1, 0, |
| 21569 | + { |
| 21570 | + &avr32_ifield_table[AVR32_IFIELD_K21], |
| 21571 | + }, |
| 21572 | + }, |
| 21573 | + { |
| 21574 | + AVR32_OPC_BRLE, 4, 0xe08a0000, 0xe1ef0000, |
| 21575 | + &avr32_syntax_table[AVR32_SYNTAX_BRLE], |
| 21576 | + BFD_RELOC_AVR32_22H_PCREL, 1, 0, |
| 21577 | + { |
| 21578 | + &avr32_ifield_table[AVR32_IFIELD_K21], |
| 21579 | + }, |
| 21580 | + }, |
| 21581 | + { |
| 21582 | + AVR32_OPC_BRHI, 4, 0xe08b0000, 0xe1ef0000, |
| 21583 | + &avr32_syntax_table[AVR32_SYNTAX_BRHI], |
| 21584 | + BFD_RELOC_AVR32_22H_PCREL, 1, 0, |
| 21585 | + { |
| 21586 | + &avr32_ifield_table[AVR32_IFIELD_K21], |
| 21587 | + }, |
| 21588 | + }, |
| 21589 | + { |
| 21590 | + AVR32_OPC_BRVS, 4, 0xe08c0000, 0xe1ef0000, |
| 21591 | + &avr32_syntax_table[AVR32_SYNTAX_BRVS], |
| 21592 | + BFD_RELOC_AVR32_22H_PCREL, 1, 0, |
| 21593 | + { |
| 21594 | + &avr32_ifield_table[AVR32_IFIELD_K21], |
| 21595 | + }, |
| 21596 | + }, |
| 21597 | + { |
| 21598 | + AVR32_OPC_BRVC, 4, 0xe08d0000, 0xe1ef0000, |
| 21599 | + &avr32_syntax_table[AVR32_SYNTAX_BRVC], |
| 21600 | + BFD_RELOC_AVR32_22H_PCREL, 1, 0, |
| 21601 | + { |
| 21602 | + &avr32_ifield_table[AVR32_IFIELD_K21], |
| 21603 | + }, |
| 21604 | + }, |
| 21605 | + { |
| 21606 | + AVR32_OPC_BRQS, 4, 0xe08e0000, 0xe1ef0000, |
| 21607 | + &avr32_syntax_table[AVR32_SYNTAX_BRQS], |
| 21608 | + BFD_RELOC_AVR32_22H_PCREL, 1, 0, |
| 21609 | + { |
| 21610 | + &avr32_ifield_table[AVR32_IFIELD_K21], |
| 21611 | + }, |
| 21612 | + }, |
| 21613 | + { |
| 21614 | + AVR32_OPC_BRAL, 4, 0xe08f0000, 0xe1ef0000, |
| 21615 | + &avr32_syntax_table[AVR32_SYNTAX_BRAL], |
| 21616 | + BFD_RELOC_AVR32_22H_PCREL, 1, 0, |
| 21617 | + { |
| 21618 | + &avr32_ifield_table[AVR32_IFIELD_K21], |
| 21619 | + }, |
| 21620 | + }, |
| 21621 | + { |
| 21622 | + AVR32_OPC_BREAKPOINT, 2, 0xd6730000, 0xffff0000, |
| 21623 | + &avr32_syntax_table[AVR32_SYNTAX_BREAKPOINT], |
| 21624 | + BFD_RELOC_UNUSED, 0, -1, { NULL }, |
| 21625 | + }, |
| 21626 | + { |
| 21627 | + AVR32_OPC_BREV, 2, 0x5c900000, 0xfff00000, |
| 21628 | + &avr32_syntax_table[AVR32_SYNTAX_BREV], |
| 21629 | + BFD_RELOC_UNUSED, 1, -1, |
| 21630 | + { |
| 21631 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21632 | + }, |
| 21633 | + }, |
| 21634 | + { |
| 21635 | + AVR32_OPC_BST, 4, 0xefb00000, 0xfff0ffe0, |
| 21636 | + &avr32_syntax_table[AVR32_SYNTAX_BST], |
| 21637 | + BFD_RELOC_UNUSED, 2, -1, |
| 21638 | + { |
| 21639 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21640 | + &avr32_ifield_table[AVR32_IFIELD_K5E], |
| 21641 | + }, |
| 21642 | + }, |
| 21643 | + { |
| 21644 | + AVR32_OPC_CACHE, 4, 0xf4100000, 0xfff00000, |
| 21645 | + &avr32_syntax_table[AVR32_SYNTAX_CACHE], |
| 21646 | + BFD_RELOC_UNUSED, 3, -1, |
| 21647 | + { |
| 21648 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21649 | + &avr32_ifield_table[AVR32_IFIELD_K11], |
| 21650 | + &avr32_ifield_table[AVR32_IFIELD_CACHEOP], |
| 21651 | + }, |
| 21652 | + }, |
| 21653 | + { |
| 21654 | + AVR32_OPC_CASTS_B, 2, 0x5c600000, 0xfff00000, |
| 21655 | + &avr32_syntax_table[AVR32_SYNTAX_CASTS_B], |
| 21656 | + BFD_RELOC_UNUSED, 1, -1, |
| 21657 | + { |
| 21658 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21659 | + }, |
| 21660 | + }, |
| 21661 | + { |
| 21662 | + AVR32_OPC_CASTS_H, 2, 0x5c800000, 0xfff00000, |
| 21663 | + &avr32_syntax_table[AVR32_SYNTAX_CASTS_H], |
| 21664 | + BFD_RELOC_UNUSED, 1, -1, |
| 21665 | + { |
| 21666 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21667 | + }, |
| 21668 | + }, |
| 21669 | + { |
| 21670 | + AVR32_OPC_CASTU_B, 2, 0x5c500000, 0xfff00000, |
| 21671 | + &avr32_syntax_table[AVR32_SYNTAX_CASTU_B], |
| 21672 | + BFD_RELOC_UNUSED, 1, -1, |
| 21673 | + { |
| 21674 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21675 | + }, |
| 21676 | + }, |
| 21677 | + { |
| 21678 | + AVR32_OPC_CASTU_H, 2, 0x5c700000, 0xfff00000, |
| 21679 | + &avr32_syntax_table[AVR32_SYNTAX_CASTU_H], |
| 21680 | + BFD_RELOC_UNUSED, 1, -1, |
| 21681 | + { |
| 21682 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21683 | + }, |
| 21684 | + }, |
| 21685 | + { |
| 21686 | + AVR32_OPC_CBR, 2, 0xa1c00000, 0xe1e00000, |
| 21687 | + &avr32_syntax_table[AVR32_SYNTAX_CBR], |
| 21688 | + BFD_RELOC_UNUSED, 2, -1, |
| 21689 | + { |
| 21690 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21691 | + &avr32_ifield_table[AVR32_IFIELD_BIT5C], |
| 21692 | + }, |
| 21693 | + }, |
| 21694 | + { |
| 21695 | + AVR32_OPC_CLZ, 4, 0xe0001200, 0xe1f0ffff, |
| 21696 | + &avr32_syntax_table[AVR32_SYNTAX_CLZ], |
| 21697 | + BFD_RELOC_UNUSED, 2, -1, |
| 21698 | + { |
| 21699 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21700 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 21701 | + }, |
| 21702 | + }, |
| 21703 | + { |
| 21704 | + AVR32_OPC_COM, 2, 0x5cd00000, 0xfff00000, |
| 21705 | + &avr32_syntax_table[AVR32_SYNTAX_COM], |
| 21706 | + BFD_RELOC_UNUSED, 1, -1, |
| 21707 | + { |
| 21708 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21709 | + }, |
| 21710 | + }, |
| 21711 | + { |
| 21712 | + AVR32_OPC_COP, 4, 0xe1a00000, 0xf9f00000, |
| 21713 | + &avr32_syntax_table[AVR32_SYNTAX_COP], |
| 21714 | + BFD_RELOC_UNUSED, 5, -1, |
| 21715 | + { |
| 21716 | + &avr32_ifield_table[AVR32_IFIELD_CPNO], |
| 21717 | + &avr32_ifield_table[AVR32_IFIELD_CRD_RI], |
| 21718 | + &avr32_ifield_table[AVR32_IFIELD_CRX], |
| 21719 | + &avr32_ifield_table[AVR32_IFIELD_CRY], |
| 21720 | + &avr32_ifield_table[AVR32_IFIELD_CPOP], |
| 21721 | + }, |
| 21722 | + }, |
| 21723 | + { |
| 21724 | + AVR32_OPC_CP_B, 4, 0xe0001800, 0xe1f0ffff, |
| 21725 | + &avr32_syntax_table[AVR32_SYNTAX_CP_B], |
| 21726 | + BFD_RELOC_UNUSED, 2, -1, |
| 21727 | + { |
| 21728 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21729 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 21730 | + }, |
| 21731 | + }, |
| 21732 | + { |
| 21733 | + AVR32_OPC_CP_H, 4, 0xe0001900, 0xe1f0ffff, |
| 21734 | + &avr32_syntax_table[AVR32_SYNTAX_CP_H], |
| 21735 | + BFD_RELOC_UNUSED, 2, -1, |
| 21736 | + { |
| 21737 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21738 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 21739 | + }, |
| 21740 | + }, |
| 21741 | + { |
| 21742 | + AVR32_OPC_CP_W1, 2, 0x00300000, 0xe1f00000, |
| 21743 | + &avr32_syntax_table[AVR32_SYNTAX_CP_W1], |
| 21744 | + BFD_RELOC_UNUSED, 2, -1, |
| 21745 | + { |
| 21746 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21747 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 21748 | + }, |
| 21749 | + }, |
| 21750 | + { |
| 21751 | + AVR32_OPC_CP_W2, 2, 0x58000000, 0xfc000000, |
| 21752 | + &avr32_syntax_table[AVR32_SYNTAX_CP_W2], |
| 21753 | + BFD_RELOC_AVR32_6S, 2, 1, |
| 21754 | + { |
| 21755 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21756 | + &avr32_ifield_table[AVR32_IFIELD_K6], |
| 21757 | + }, |
| 21758 | + }, |
| 21759 | + { |
| 21760 | + AVR32_OPC_CP_W3, 4, 0xe0400000, 0xe1e00000, |
| 21761 | + &avr32_syntax_table[AVR32_SYNTAX_CP_W3], |
| 21762 | + BFD_RELOC_AVR32_21S, 2, 1, |
| 21763 | + { |
| 21764 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21765 | + &avr32_ifield_table[AVR32_IFIELD_K21], |
| 21766 | + }, |
| 21767 | + }, |
| 21768 | + { |
| 21769 | + AVR32_OPC_CPC1, 4, 0xe0001300, 0xe1f0ffff, |
| 21770 | + &avr32_syntax_table[AVR32_SYNTAX_CPC1], |
| 21771 | + BFD_RELOC_UNUSED, 2, -1, |
| 21772 | + { |
| 21773 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21774 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 21775 | + }, |
| 21776 | + }, |
| 21777 | + { |
| 21778 | + AVR32_OPC_CPC2, 2, 0x5c200000, 0xfff00000, |
| 21779 | + &avr32_syntax_table[AVR32_SYNTAX_CPC2], |
| 21780 | + BFD_RELOC_UNUSED, 1, -1, |
| 21781 | + { |
| 21782 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21783 | + }, |
| 21784 | + }, |
| 21785 | + { |
| 21786 | + AVR32_OPC_CSRF, 2, 0xd4030000, 0xfe0f0000, |
| 21787 | + &avr32_syntax_table[AVR32_SYNTAX_CSRF], |
| 21788 | + BFD_RELOC_UNUSED, 1, -1, |
| 21789 | + { |
| 21790 | + &avr32_ifield_table[AVR32_IFIELD_K5C], |
| 21791 | + }, |
| 21792 | + }, |
| 21793 | + { |
| 21794 | + AVR32_OPC_CSRFCZ, 2, 0xd0030000, 0xfe0f0000, |
| 21795 | + &avr32_syntax_table[AVR32_SYNTAX_CSRFCZ], |
| 21796 | + BFD_RELOC_UNUSED, 1, -1, |
| 21797 | + { |
| 21798 | + &avr32_ifield_table[AVR32_IFIELD_K5C], |
| 21799 | + }, |
| 21800 | + }, |
| 21801 | + { |
| 21802 | + AVR32_OPC_DIVS, 4, 0xe0000c00, 0xe1f0ffc0, |
| 21803 | + &avr32_syntax_table[AVR32_SYNTAX_DIVS], |
| 21804 | + BFD_RELOC_UNUSED, 3, -1, |
| 21805 | + { |
| 21806 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 21807 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 21808 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21809 | + }, |
| 21810 | + }, |
| 21811 | + { |
| 21812 | + AVR32_OPC_DIVU, 4, 0xe0000d00, 0xe1f0ffc0, |
| 21813 | + &avr32_syntax_table[AVR32_SYNTAX_DIVU], |
| 21814 | + BFD_RELOC_UNUSED, 3, -1, |
| 21815 | + { |
| 21816 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 21817 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 21818 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21819 | + }, |
| 21820 | + }, |
| 21821 | + { |
| 21822 | + AVR32_OPC_EOR1, 2, 0x00500000, 0xe1f00000, |
| 21823 | + &avr32_syntax_table[AVR32_SYNTAX_EOR1], |
| 21824 | + BFD_RELOC_UNUSED, 2, -1, |
| 21825 | + { |
| 21826 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21827 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 21828 | + }, |
| 21829 | + }, |
| 21830 | + { |
| 21831 | + AVR32_OPC_EOR2, 4, 0xe1e02000, 0xe1f0fe00, |
| 21832 | + &avr32_syntax_table[AVR32_SYNTAX_EOR2], |
| 21833 | + BFD_RELOC_UNUSED, 4, -1, |
| 21834 | + { |
| 21835 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 21836 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 21837 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21838 | + &avr32_ifield_table[AVR32_IFIELD_K5E2], |
| 21839 | + } |
| 21840 | + }, |
| 21841 | + { |
| 21842 | + AVR32_OPC_EOR3, 4, 0xe1e02200, 0xe1f0fe00, |
| 21843 | + &avr32_syntax_table[AVR32_SYNTAX_EOR3], |
| 21844 | + BFD_RELOC_UNUSED, 4, -1, |
| 21845 | + { |
| 21846 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 21847 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 21848 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21849 | + &avr32_ifield_table[AVR32_IFIELD_K5E2], |
| 21850 | + } |
| 21851 | + }, |
| 21852 | + { |
| 21853 | + AVR32_OPC_EORL, 4, 0xec100000, 0xfff00000, |
| 21854 | + &avr32_syntax_table[AVR32_SYNTAX_EORL], |
| 21855 | + BFD_RELOC_AVR32_16U, 2, 1, |
| 21856 | + { |
| 21857 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21858 | + &avr32_ifield_table[AVR32_IFIELD_K16], |
| 21859 | + }, |
| 21860 | + }, |
| 21861 | + { |
| 21862 | + AVR32_OPC_EORH, 4, 0xee100000, 0xfff00000, |
| 21863 | + &avr32_syntax_table[AVR32_SYNTAX_EORH], |
| 21864 | + BFD_RELOC_AVR32_16U, 2, 1, |
| 21865 | + { |
| 21866 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21867 | + &avr32_ifield_table[AVR32_IFIELD_K16], |
| 21868 | + }, |
| 21869 | + }, |
| 21870 | + { |
| 21871 | + AVR32_OPC_FRS, 2, 0xd7430000, 0xffff0000, |
| 21872 | + &avr32_syntax_table[AVR32_SYNTAX_FRS], |
| 21873 | + BFD_RELOC_UNUSED, 0, -1, { NULL }, |
| 21874 | + }, |
| 21875 | + { |
| 21876 | + AVR32_OPC_ICALL, 2, 0x5d100000, 0xfff00000, |
| 21877 | + &avr32_syntax_table[AVR32_SYNTAX_ICALL], |
| 21878 | + BFD_RELOC_UNUSED, 1, -1, |
| 21879 | + { |
| 21880 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21881 | + }, |
| 21882 | + }, |
| 21883 | + { |
| 21884 | + AVR32_OPC_INCJOSP, 2, 0xd6830000, 0xff8f0000, |
| 21885 | + &avr32_syntax_table[AVR32_SYNTAX_INCJOSP], |
| 21886 | + BFD_RELOC_UNUSED, 1, -1, |
| 21887 | + { |
| 21888 | + &avr32_ifield_table[AVR32_IFIELD_K3], |
| 21889 | + }, |
| 21890 | + }, |
| 21891 | + { |
| 21892 | + AVR32_OPC_LD_D1, 2, 0xa1010000, 0xe1f10000, |
| 21893 | + &avr32_syntax_table[AVR32_SYNTAX_LD_D1], |
| 21894 | + BFD_RELOC_UNUSED, 2, -1, |
| 21895 | + { |
| 21896 | + &avr32_ifield_table[AVR32_IFIELD_RY_DW], |
| 21897 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 21898 | + }, |
| 21899 | + }, |
| 21900 | + { |
| 21901 | + AVR32_OPC_LD_D2, 2, 0xa1100000, 0xe1f10000, |
| 21902 | + &avr32_syntax_table[AVR32_SYNTAX_LD_D2], |
| 21903 | + BFD_RELOC_UNUSED, 2, -1, |
| 21904 | + { |
| 21905 | + &avr32_ifield_table[AVR32_IFIELD_RY_DW], |
| 21906 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 21907 | + }, |
| 21908 | + }, |
| 21909 | + { |
| 21910 | + AVR32_OPC_LD_D3, 2, 0xa1000000, 0xe1f10000, |
| 21911 | + &avr32_syntax_table[AVR32_SYNTAX_LD_D3], |
| 21912 | + BFD_RELOC_UNUSED, 2, -1, |
| 21913 | + { |
| 21914 | + &avr32_ifield_table[AVR32_IFIELD_RY_DW], |
| 21915 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 21916 | + }, |
| 21917 | + }, |
| 21918 | + { |
| 21919 | + AVR32_OPC_LD_D5, 4, 0xe0000200, 0xe1f0ffc1, |
| 21920 | + &avr32_syntax_table[AVR32_SYNTAX_LD_D5], |
| 21921 | + BFD_RELOC_UNUSED, 4, -1, |
| 21922 | + { |
| 21923 | + &avr32_ifield_table[AVR32_IFIELD_RD_DW], |
| 21924 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 21925 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21926 | + &avr32_ifield_table[AVR32_IFIELD_K2], |
| 21927 | + }, |
| 21928 | + }, |
| 21929 | + { |
| 21930 | + AVR32_OPC_LD_D4, 4, 0xe0e00000, 0xe1f10000, |
| 21931 | + &avr32_syntax_table[AVR32_SYNTAX_LD_D4], |
| 21932 | + BFD_RELOC_AVR32_16S, 3, 2, |
| 21933 | + { |
| 21934 | + &avr32_ifield_table[AVR32_IFIELD_RY_DW], |
| 21935 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 21936 | + &avr32_ifield_table[AVR32_IFIELD_K16], |
| 21937 | + }, |
| 21938 | + }, |
| 21939 | + { |
| 21940 | + AVR32_OPC_LD_SB2, 4, 0xe0000600, 0xe1f0ffc0, |
| 21941 | + &avr32_syntax_table[AVR32_SYNTAX_LD_SB2], |
| 21942 | + BFD_RELOC_UNUSED, 4, -1, |
| 21943 | + { |
| 21944 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 21945 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 21946 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21947 | + &avr32_ifield_table[AVR32_IFIELD_K2], |
| 21948 | + }, |
| 21949 | + }, |
| 21950 | + { |
| 21951 | + AVR32_OPC_LD_SB1, 4, 0xe1200000, 0xe1f00000, |
| 21952 | + &avr32_syntax_table[AVR32_SYNTAX_LD_SB1], |
| 21953 | + BFD_RELOC_AVR32_16S, 3, -1, |
| 21954 | + { |
| 21955 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21956 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 21957 | + &avr32_ifield_table[AVR32_IFIELD_K16], |
| 21958 | + }, |
| 21959 | + }, |
| 21960 | + { |
| 21961 | + AVR32_OPC_LD_UB1, 2, 0x01300000, 0xe1f00000, |
| 21962 | + &avr32_syntax_table[AVR32_SYNTAX_LD_UB1], |
| 21963 | + BFD_RELOC_UNUSED, 2, -1, |
| 21964 | + { |
| 21965 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21966 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 21967 | + }, |
| 21968 | + }, |
| 21969 | + { |
| 21970 | + AVR32_OPC_LD_UB2, 2, 0x01700000, 0xe1f00000, |
| 21971 | + &avr32_syntax_table[AVR32_SYNTAX_LD_UB2], |
| 21972 | + BFD_RELOC_UNUSED, 2, -1, |
| 21973 | + { |
| 21974 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21975 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 21976 | + }, |
| 21977 | + }, |
| 21978 | + { |
| 21979 | + AVR32_OPC_LD_UB5, 4, 0xe0000700, 0xe1f0ffc0, |
| 21980 | + &avr32_syntax_table[AVR32_SYNTAX_LD_UB5], |
| 21981 | + BFD_RELOC_UNUSED, 4, -1, |
| 21982 | + { |
| 21983 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 21984 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 21985 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21986 | + &avr32_ifield_table[AVR32_IFIELD_K2], |
| 21987 | + }, |
| 21988 | + }, |
| 21989 | + { |
| 21990 | + AVR32_OPC_LD_UB3, 2, 0x01800000, 0xe1800000, |
| 21991 | + &avr32_syntax_table[AVR32_SYNTAX_LD_UB3], |
| 21992 | + BFD_RELOC_AVR32_3U, 3, 2, |
| 21993 | + { |
| 21994 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 21995 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 21996 | + &avr32_ifield_table[AVR32_IFIELD_K3], |
| 21997 | + }, |
| 21998 | + }, |
| 21999 | + { |
| 22000 | + AVR32_OPC_LD_UB4, 4, 0xe1300000, 0xe1f00000, |
| 22001 | + &avr32_syntax_table[AVR32_SYNTAX_LD_UB4], |
| 22002 | + BFD_RELOC_AVR32_16S, 3, 2, |
| 22003 | + { |
| 22004 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22005 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22006 | + &avr32_ifield_table[AVR32_IFIELD_K16], |
| 22007 | + }, |
| 22008 | + }, |
| 22009 | + { |
| 22010 | + AVR32_OPC_LD_SH1, 2, 0x01100000, 0xe1f00000, |
| 22011 | + &avr32_syntax_table[AVR32_SYNTAX_LD_SH1], |
| 22012 | + BFD_RELOC_UNUSED, 2, -1, |
| 22013 | + { |
| 22014 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22015 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22016 | + }, |
| 22017 | + }, |
| 22018 | + { |
| 22019 | + AVR32_OPC_LD_SH2, 2, 0x01500000, 0xe1f00000, |
| 22020 | + &avr32_syntax_table[AVR32_SYNTAX_LD_SH2], |
| 22021 | + BFD_RELOC_UNUSED, 2, -1, |
| 22022 | + { |
| 22023 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22024 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22025 | + }, |
| 22026 | + }, |
| 22027 | + { |
| 22028 | + AVR32_OPC_LD_SH5, 4, 0xe0000400, 0xe1f0ffc0, |
| 22029 | + &avr32_syntax_table[AVR32_SYNTAX_LD_SH5], |
| 22030 | + BFD_RELOC_UNUSED, 4, -1, |
| 22031 | + { |
| 22032 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 22033 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22034 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22035 | + &avr32_ifield_table[AVR32_IFIELD_K2], |
| 22036 | + }, |
| 22037 | + }, |
| 22038 | + { |
| 22039 | + AVR32_OPC_LD_SH3, 2, 0x80000000, 0xe1800000, |
| 22040 | + &avr32_syntax_table[AVR32_SYNTAX_LD_SH3], |
| 22041 | + BFD_RELOC_AVR32_4UH, 3, 2, |
| 22042 | + { |
| 22043 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22044 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22045 | + &avr32_ifield_table[AVR32_IFIELD_K3], |
| 22046 | + }, |
| 22047 | + }, |
| 22048 | + { |
| 22049 | + AVR32_OPC_LD_SH4, 4, 0xe1000000, 0xe1f00000, |
| 22050 | + &avr32_syntax_table[AVR32_SYNTAX_LD_SH4], |
| 22051 | + BFD_RELOC_AVR32_16S, 3, 2, |
| 22052 | + { |
| 22053 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22054 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22055 | + &avr32_ifield_table[AVR32_IFIELD_K16], |
| 22056 | + }, |
| 22057 | + }, |
| 22058 | + { |
| 22059 | + AVR32_OPC_LD_UH1, 2, 0x01200000, 0xe1f00000, |
| 22060 | + &avr32_syntax_table[AVR32_SYNTAX_LD_UH1], |
| 22061 | + BFD_RELOC_UNUSED, 2, -1, |
| 22062 | + { |
| 22063 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22064 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22065 | + }, |
| 22066 | + }, |
| 22067 | + { |
| 22068 | + AVR32_OPC_LD_UH2, 2, 0x01600000, 0xe1f00000, |
| 22069 | + &avr32_syntax_table[AVR32_SYNTAX_LD_UH2], |
| 22070 | + BFD_RELOC_UNUSED, 2, -1, |
| 22071 | + { |
| 22072 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22073 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22074 | + }, |
| 22075 | + }, |
| 22076 | + { |
| 22077 | + AVR32_OPC_LD_UH5, 4, 0xe0000500, 0xe1f0ffc0, |
| 22078 | + &avr32_syntax_table[AVR32_SYNTAX_LD_UH5], |
| 22079 | + BFD_RELOC_UNUSED, 4, -1, |
| 22080 | + { |
| 22081 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 22082 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22083 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22084 | + &avr32_ifield_table[AVR32_IFIELD_K2], |
| 22085 | + }, |
| 22086 | + }, |
| 22087 | + { |
| 22088 | + AVR32_OPC_LD_UH3, 2, 0x80800000, 0xe1800000, |
| 22089 | + &avr32_syntax_table[AVR32_SYNTAX_LD_UH3], |
| 22090 | + BFD_RELOC_AVR32_4UH, 3, 2, |
| 22091 | + { |
| 22092 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22093 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22094 | + &avr32_ifield_table[AVR32_IFIELD_K3], |
| 22095 | + }, |
| 22096 | + }, |
| 22097 | + { |
| 22098 | + AVR32_OPC_LD_UH4, 4, 0xe1100000, 0xe1f00000, |
| 22099 | + &avr32_syntax_table[AVR32_SYNTAX_LD_UH4], |
| 22100 | + BFD_RELOC_AVR32_16S, 3, 2, |
| 22101 | + { |
| 22102 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22103 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22104 | + &avr32_ifield_table[AVR32_IFIELD_K16], |
| 22105 | + }, |
| 22106 | + }, |
| 22107 | + { |
| 22108 | + AVR32_OPC_LD_W1, 2, 0x01000000, 0xe1f00000, |
| 22109 | + &avr32_syntax_table[AVR32_SYNTAX_LD_W1], |
| 22110 | + BFD_RELOC_UNUSED, 2, -1, |
| 22111 | + { |
| 22112 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22113 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22114 | + }, |
| 22115 | + }, |
| 22116 | + { |
| 22117 | + AVR32_OPC_LD_W2, 2, 0x01400000, 0xe1f00000, |
| 22118 | + &avr32_syntax_table[AVR32_SYNTAX_LD_W2], |
| 22119 | + BFD_RELOC_UNUSED, 2, -1, |
| 22120 | + { |
| 22121 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22122 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22123 | + }, |
| 22124 | + }, |
| 22125 | + { |
| 22126 | + AVR32_OPC_LD_W5, 4, 0xe0000300, 0xe1f0ffc0, |
| 22127 | + &avr32_syntax_table[AVR32_SYNTAX_LD_W5], |
| 22128 | + BFD_RELOC_UNUSED, 4, -1, |
| 22129 | + { |
| 22130 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 22131 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22132 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22133 | + &avr32_ifield_table[AVR32_IFIELD_K2], |
| 22134 | + }, |
| 22135 | + }, |
| 22136 | + { |
| 22137 | + AVR32_OPC_LD_W6, 4, 0xe0000f80, 0xe1f0ffc0, |
| 22138 | + &avr32_syntax_table[AVR32_SYNTAX_LD_W6], |
| 22139 | + BFD_RELOC_UNUSED, 4, -1, |
| 22140 | + { |
| 22141 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 22142 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22143 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22144 | + &avr32_ifield_table[AVR32_IFIELD_K2], |
| 22145 | + }, |
| 22146 | + }, |
| 22147 | + { |
| 22148 | + AVR32_OPC_LD_W3, 2, 0x60000000, 0xe0000000, |
| 22149 | + &avr32_syntax_table[AVR32_SYNTAX_LD_W3], |
| 22150 | + BFD_RELOC_AVR32_7UW, 3, 2, |
| 22151 | + { |
| 22152 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22153 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22154 | + &avr32_ifield_table[AVR32_IFIELD_K5C], |
| 22155 | + }, |
| 22156 | + }, |
| 22157 | + { |
| 22158 | + AVR32_OPC_LD_W4, 4, 0xe0f00000, 0xe1f00000, |
| 22159 | + &avr32_syntax_table[AVR32_SYNTAX_LD_W4], |
| 22160 | + BFD_RELOC_AVR32_16S, 3, 2, |
| 22161 | + { |
| 22162 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22163 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22164 | + &avr32_ifield_table[AVR32_IFIELD_K16], |
| 22165 | + }, |
| 22166 | + }, |
| 22167 | + { |
| 22168 | + AVR32_OPC_LDC_D1, 4, 0xe9a01000, 0xfff01100, |
| 22169 | + &avr32_syntax_table[AVR32_SYNTAX_LDC_D1], |
| 22170 | + BFD_RELOC_AVR32_10UW, 4, 3, |
| 22171 | + { |
| 22172 | + &avr32_ifield_table[AVR32_IFIELD_CPNO], |
| 22173 | + &avr32_ifield_table[AVR32_IFIELD_CRD_DW], |
| 22174 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22175 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 22176 | + }, |
| 22177 | + }, |
| 22178 | + { |
| 22179 | + AVR32_OPC_LDC_D2, 4, 0xefa00050, 0xfff011ff, |
| 22180 | + &avr32_syntax_table[AVR32_SYNTAX_LDC_D2], |
| 22181 | + BFD_RELOC_UNUSED, 3, -1, |
| 22182 | + { |
| 22183 | + &avr32_ifield_table[AVR32_IFIELD_CPNO], |
| 22184 | + &avr32_ifield_table[AVR32_IFIELD_CRD_DW], |
| 22185 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22186 | + }, |
| 22187 | + }, |
| 22188 | + { |
| 22189 | + AVR32_OPC_LDC_D3, 4, 0xefa01040, 0xfff011c0, |
| 22190 | + &avr32_syntax_table[AVR32_SYNTAX_LDC_D3], |
| 22191 | + BFD_RELOC_UNUSED, 5, -1, |
| 22192 | + { |
| 22193 | + &avr32_ifield_table[AVR32_IFIELD_CPNO], |
| 22194 | + &avr32_ifield_table[AVR32_IFIELD_CRD_DW], |
| 22195 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22196 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 22197 | + &avr32_ifield_table[AVR32_IFIELD_K2], |
| 22198 | + }, |
| 22199 | + }, |
| 22200 | + { |
| 22201 | + AVR32_OPC_LDC_W1, 4, 0xe9a00000, 0xfff01000, |
| 22202 | + &avr32_syntax_table[AVR32_SYNTAX_LDC_W1], |
| 22203 | + BFD_RELOC_AVR32_10UW, 4, 3, |
| 22204 | + { |
| 22205 | + &avr32_ifield_table[AVR32_IFIELD_CPNO], |
| 22206 | + &avr32_ifield_table[AVR32_IFIELD_CRD_RI], |
| 22207 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22208 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 22209 | + }, |
| 22210 | + }, |
| 22211 | + { |
| 22212 | + AVR32_OPC_LDC_W2, 4, 0xefa00040, 0xfff010ff, |
| 22213 | + &avr32_syntax_table[AVR32_SYNTAX_LDC_W2], |
| 22214 | + BFD_RELOC_UNUSED, 3, -1, |
| 22215 | + { |
| 22216 | + &avr32_ifield_table[AVR32_IFIELD_CPNO], |
| 22217 | + &avr32_ifield_table[AVR32_IFIELD_CRD_RI], |
| 22218 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22219 | + }, |
| 22220 | + }, |
| 22221 | + { |
| 22222 | + AVR32_OPC_LDC_W3, 4, 0xefa01000, 0xfff010c0, |
| 22223 | + &avr32_syntax_table[AVR32_SYNTAX_LDC_W3], |
| 22224 | + BFD_RELOC_UNUSED, 5, -1, |
| 22225 | + { |
| 22226 | + &avr32_ifield_table[AVR32_IFIELD_CPNO], |
| 22227 | + &avr32_ifield_table[AVR32_IFIELD_CRD_RI], |
| 22228 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22229 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 22230 | + &avr32_ifield_table[AVR32_IFIELD_K2], |
| 22231 | + }, |
| 22232 | + }, |
| 22233 | + { |
| 22234 | + AVR32_OPC_LDC0_D, 4, 0xf3a00000, 0xfff00100, |
| 22235 | + &avr32_syntax_table[AVR32_SYNTAX_LDC0_D], |
| 22236 | + BFD_RELOC_AVR32_14UW, 3, 2, |
| 22237 | + { |
| 22238 | + &avr32_ifield_table[AVR32_IFIELD_CRD_DW], |
| 22239 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22240 | + &avr32_ifield_table[AVR32_IFIELD_K12CP], |
| 22241 | + }, |
| 22242 | + }, |
| 22243 | + { |
| 22244 | + AVR32_OPC_LDC0_W, 4, 0xf1a00000, 0xfff00000, |
| 22245 | + &avr32_syntax_table[AVR32_SYNTAX_LDC0_W], |
| 22246 | + BFD_RELOC_AVR32_14UW, 3, 2, |
| 22247 | + { |
| 22248 | + &avr32_ifield_table[AVR32_IFIELD_CRD_RI], |
| 22249 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22250 | + &avr32_ifield_table[AVR32_IFIELD_K12CP], |
| 22251 | + }, |
| 22252 | + }, |
| 22253 | + { |
| 22254 | + AVR32_OPC_LDCM_D, 4, 0xeda00400, 0xfff01f00, |
| 22255 | + &avr32_syntax_table[AVR32_SYNTAX_LDCM_D], |
| 22256 | + BFD_RELOC_UNUSED, 3, -1, |
| 22257 | + { |
| 22258 | + &avr32_ifield_table[AVR32_IFIELD_CPNO], |
| 22259 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22260 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 22261 | + }, |
| 22262 | + }, |
| 22263 | + { |
| 22264 | + AVR32_OPC_LDCM_D_PU, 4, 0xeda01400, 0xfff01f00, |
| 22265 | + &avr32_syntax_table[AVR32_SYNTAX_LDCM_D_PU], |
| 22266 | + BFD_RELOC_UNUSED, 3, -1, |
| 22267 | + { |
| 22268 | + &avr32_ifield_table[AVR32_IFIELD_CPNO], |
| 22269 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22270 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 22271 | + }, |
| 22272 | + }, |
| 22273 | + { |
| 22274 | + AVR32_OPC_LDCM_W, 4, 0xeda00000, 0xfff01e00, |
| 22275 | + &avr32_syntax_table[AVR32_SYNTAX_LDCM_W], |
| 22276 | + BFD_RELOC_UNUSED, 4, -1, |
| 22277 | + { |
| 22278 | + &avr32_ifield_table[AVR32_IFIELD_CPNO], |
| 22279 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22280 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 22281 | + &avr32_ifield_table[AVR32_IFIELD_CM_HL], |
| 22282 | + }, |
| 22283 | + }, |
| 22284 | + { |
| 22285 | + AVR32_OPC_LDCM_W_PU, 4, 0xeda01000, 0xfff01e00, |
| 22286 | + &avr32_syntax_table[AVR32_SYNTAX_LDCM_W_PU], |
| 22287 | + BFD_RELOC_UNUSED, 4, -1, |
| 22288 | + { |
| 22289 | + &avr32_ifield_table[AVR32_IFIELD_CPNO], |
| 22290 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22291 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 22292 | + &avr32_ifield_table[AVR32_IFIELD_CM_HL], |
| 22293 | + }, |
| 22294 | + }, |
| 22295 | + { |
| 22296 | + AVR32_OPC_LDDPC, 2, 0x48000000, 0xf8000000, |
| 22297 | + &avr32_syntax_table[AVR32_SYNTAX_LDDPC], |
| 22298 | + BFD_RELOC_AVR32_9UW_PCREL, 2, 1, |
| 22299 | + { |
| 22300 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22301 | + &avr32_ifield_table[AVR32_IFIELD_K7C], |
| 22302 | + }, |
| 22303 | + }, |
| 22304 | + { |
| 22305 | + AVR32_OPC_LDDPC_EXT, 4, 0xfef00000, 0xfff00000, |
| 22306 | + &avr32_syntax_table[AVR32_SYNTAX_LDDPC_EXT], |
| 22307 | + BFD_RELOC_AVR32_16B_PCREL, 2, 1, |
| 22308 | + { |
| 22309 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22310 | + &avr32_ifield_table[AVR32_IFIELD_K16], |
| 22311 | + }, |
| 22312 | + }, |
| 22313 | + { |
| 22314 | + AVR32_OPC_LDDSP, 2, 0x40000000, 0xf8000000, |
| 22315 | + &avr32_syntax_table[AVR32_SYNTAX_LDDSP], |
| 22316 | + BFD_RELOC_UNUSED, 2, -1, |
| 22317 | + { |
| 22318 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22319 | + &avr32_ifield_table[AVR32_IFIELD_K7C], |
| 22320 | + }, |
| 22321 | + }, |
| 22322 | + { |
| 22323 | + AVR32_OPC_LDINS_B, 4, 0xe1d04000, 0xe1f0c000, |
| 22324 | + &avr32_syntax_table[AVR32_SYNTAX_LDINS_B], |
| 22325 | + BFD_RELOC_UNUSED, 4, -1, |
| 22326 | + { |
| 22327 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22328 | + &avr32_ifield_table[AVR32_IFIELD_PART2_K12], |
| 22329 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22330 | + &avr32_ifield_table[AVR32_IFIELD_K12], |
| 22331 | + }, |
| 22332 | + }, |
| 22333 | + { |
| 22334 | + AVR32_OPC_LDINS_H, 4, 0xe1d00000, 0xe1f0e000, |
| 22335 | + &avr32_syntax_table[AVR32_SYNTAX_LDINS_H], |
| 22336 | + BFD_RELOC_UNUSED, 4, -1, |
| 22337 | + { |
| 22338 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22339 | + &avr32_ifield_table[AVR32_IFIELD_PART1_K12], |
| 22340 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22341 | + &avr32_ifield_table[AVR32_IFIELD_K12], |
| 22342 | + }, |
| 22343 | + }, |
| 22344 | + { |
| 22345 | + AVR32_OPC_LDM, 4, 0xe1c00000, 0xfdf00000, |
| 22346 | + &avr32_syntax_table[AVR32_SYNTAX_LDM], |
| 22347 | + BFD_RELOC_UNUSED, 3, -1, |
| 22348 | + { |
| 22349 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22350 | + &avr32_ifield_table[AVR32_IFIELD_W], |
| 22351 | + &avr32_ifield_table[AVR32_IFIELD_K16], |
| 22352 | + }, |
| 22353 | + }, |
| 22354 | + { |
| 22355 | + AVR32_OPC_LDMTS, 4, 0xe5c00000, 0xfff00000, |
| 22356 | + &avr32_syntax_table[AVR32_SYNTAX_LDMTS], |
| 22357 | + BFD_RELOC_UNUSED, 2, -1, |
| 22358 | + { |
| 22359 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22360 | + &avr32_ifield_table[AVR32_IFIELD_K16], |
| 22361 | + }, |
| 22362 | + }, |
| 22363 | + { |
| 22364 | + AVR32_OPC_LDMTS_PU, 4, 0xe7c00000, 0xfff00000, |
| 22365 | + &avr32_syntax_table[AVR32_SYNTAX_LDMTS_PU], |
| 22366 | + BFD_RELOC_UNUSED, 2, -1, |
| 22367 | + { |
| 22368 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22369 | + &avr32_ifield_table[AVR32_IFIELD_K16], |
| 22370 | + }, |
| 22371 | + }, |
| 22372 | + { |
| 22373 | + AVR32_OPC_LDSWP_SH, 4, 0xe1d02000, 0xe1f0f000, |
| 22374 | + &avr32_syntax_table[AVR32_SYNTAX_LDSWP_SH], |
| 22375 | + BFD_RELOC_UNUSED, 3, -1, |
| 22376 | + { |
| 22377 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22378 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22379 | + &avr32_ifield_table[AVR32_IFIELD_K12], |
| 22380 | + }, |
| 22381 | + }, |
| 22382 | + { |
| 22383 | + AVR32_OPC_LDSWP_UH, 4, 0xe1d03000, 0xe1f0f000, |
| 22384 | + &avr32_syntax_table[AVR32_SYNTAX_LDSWP_UH], |
| 22385 | + BFD_RELOC_UNUSED, 3, -1, |
| 22386 | + { |
| 22387 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22388 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22389 | + &avr32_ifield_table[AVR32_IFIELD_K12], |
| 22390 | + }, |
| 22391 | + }, |
| 22392 | + { |
| 22393 | + AVR32_OPC_LDSWP_W, 4, 0xe1d08000, 0xe1f0f000, |
| 22394 | + &avr32_syntax_table[AVR32_SYNTAX_LDSWP_W], |
| 22395 | + BFD_RELOC_UNUSED, 3, -1, |
| 22396 | + { |
| 22397 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22398 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22399 | + &avr32_ifield_table[AVR32_IFIELD_K12], |
| 22400 | + }, |
| 22401 | + }, |
| 22402 | + { |
| 22403 | + AVR32_OPC_LSL1, 4, 0xe0000940, 0xe1f0fff0, |
| 22404 | + &avr32_syntax_table[AVR32_SYNTAX_LSL1], |
| 22405 | + BFD_RELOC_UNUSED, 3, -1, |
| 22406 | + { |
| 22407 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 22408 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22409 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22410 | + }, |
| 22411 | + }, |
| 22412 | + { |
| 22413 | + AVR32_OPC_LSL3, 4, 0xe0001500, 0xe1f0ffe0, |
| 22414 | + &avr32_syntax_table[AVR32_SYNTAX_LSL3], |
| 22415 | + BFD_RELOC_UNUSED, 3, -1, |
| 22416 | + { |
| 22417 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22418 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22419 | + &avr32_ifield_table[AVR32_IFIELD_K5E], |
| 22420 | + }, |
| 22421 | + }, |
| 22422 | + { |
| 22423 | + AVR32_OPC_LSL2, 2, 0xa1600000, 0xe1e00000, |
| 22424 | + &avr32_syntax_table[AVR32_SYNTAX_LSL2], |
| 22425 | + BFD_RELOC_UNUSED, 2, -1, |
| 22426 | + { |
| 22427 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22428 | + &avr32_ifield_table[AVR32_IFIELD_BIT5C], |
| 22429 | + }, |
| 22430 | + }, |
| 22431 | + { |
| 22432 | + AVR32_OPC_LSR1, 4, 0xe0000a40, 0xe1f0fff0, |
| 22433 | + &avr32_syntax_table[AVR32_SYNTAX_LSR1], |
| 22434 | + BFD_RELOC_UNUSED, 3, -1, |
| 22435 | + { |
| 22436 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 22437 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22438 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22439 | + }, |
| 22440 | + }, |
| 22441 | + { |
| 22442 | + AVR32_OPC_LSR3, 4, 0xe0001600, 0xe1f0ffe0, |
| 22443 | + &avr32_syntax_table[AVR32_SYNTAX_LSR3], |
| 22444 | + BFD_RELOC_UNUSED, 3, -1, |
| 22445 | + { |
| 22446 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22447 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22448 | + &avr32_ifield_table[AVR32_IFIELD_K5E], |
| 22449 | + }, |
| 22450 | + }, |
| 22451 | + { |
| 22452 | + AVR32_OPC_LSR2, 2, 0xa1800000, 0xe1e00000, |
| 22453 | + &avr32_syntax_table[AVR32_SYNTAX_LSR2], |
| 22454 | + BFD_RELOC_UNUSED, 2, -1, |
| 22455 | + { |
| 22456 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22457 | + &avr32_ifield_table[AVR32_IFIELD_BIT5C], |
| 22458 | + }, |
| 22459 | + }, |
| 22460 | + { |
| 22461 | + AVR32_OPC_MAC, 4, 0xe0000340, 0xe1f0fff0, |
| 22462 | + &avr32_syntax_table[AVR32_SYNTAX_MAC], |
| 22463 | + BFD_RELOC_UNUSED, 3, -1, |
| 22464 | + { |
| 22465 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 22466 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22467 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22468 | + }, |
| 22469 | + }, |
| 22470 | + { |
| 22471 | + AVR32_OPC_MACHH_D, 4, 0xe0000580, 0xe1f0ffc1, |
| 22472 | + &avr32_syntax_table[AVR32_SYNTAX_MACHH_D], |
| 22473 | + BFD_RELOC_UNUSED, 5, -1, |
| 22474 | + { |
| 22475 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 22476 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22477 | + &avr32_ifield_table[AVR32_IFIELD_X], |
| 22478 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22479 | + &avr32_ifield_table[AVR32_IFIELD_Y], |
| 22480 | + }, |
| 22481 | + }, |
| 22482 | + { |
| 22483 | + AVR32_OPC_MACHH_W, 4, 0xe0000480, 0xe1f0ffc0, |
| 22484 | + &avr32_syntax_table[AVR32_SYNTAX_MACHH_W], |
| 22485 | + BFD_RELOC_UNUSED, 5, -1, |
| 22486 | + { |
| 22487 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 22488 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22489 | + &avr32_ifield_table[AVR32_IFIELD_X], |
| 22490 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22491 | + &avr32_ifield_table[AVR32_IFIELD_Y], |
| 22492 | + }, |
| 22493 | + }, |
| 22494 | + { |
| 22495 | + AVR32_OPC_MACS_D, 4, 0xe0000540, 0xe1f0fff1, |
| 22496 | + &avr32_syntax_table[AVR32_SYNTAX_MACS_D], |
| 22497 | + BFD_RELOC_UNUSED, 3, -1, |
| 22498 | + { |
| 22499 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 22500 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22501 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22502 | + }, |
| 22503 | + }, |
| 22504 | + { |
| 22505 | + AVR32_OPC_MACSATHH_W, 4, 0xe0000680, 0xe1f0ffc0, |
| 22506 | + &avr32_syntax_table[AVR32_SYNTAX_MACSATHH_W], |
| 22507 | + BFD_RELOC_UNUSED, 5, -1, |
| 22508 | + { |
| 22509 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 22510 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22511 | + &avr32_ifield_table[AVR32_IFIELD_X], |
| 22512 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22513 | + &avr32_ifield_table[AVR32_IFIELD_Y], |
| 22514 | + }, |
| 22515 | + }, |
| 22516 | + { |
| 22517 | + AVR32_OPC_MACUD, 4, 0xe0000740, 0xe1f0fff1, |
| 22518 | + &avr32_syntax_table[AVR32_SYNTAX_MACUD], |
| 22519 | + BFD_RELOC_UNUSED, 3, -1, |
| 22520 | + { |
| 22521 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 22522 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22523 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22524 | + }, |
| 22525 | + }, |
| 22526 | + { |
| 22527 | + AVR32_OPC_MACWH_D, 4, 0xe0000c80, 0xe1f0ffe1, |
| 22528 | + &avr32_syntax_table[AVR32_SYNTAX_MACWH_D], |
| 22529 | + BFD_RELOC_UNUSED, 4, -1, |
| 22530 | + { |
| 22531 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 22532 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22533 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22534 | + &avr32_ifield_table[AVR32_IFIELD_Y], |
| 22535 | + }, |
| 22536 | + }, |
| 22537 | + { |
| 22538 | + AVR32_OPC_MAX, 4, 0xe0000c40, 0xe1f0fff0, |
| 22539 | + &avr32_syntax_table[AVR32_SYNTAX_MAX], |
| 22540 | + BFD_RELOC_UNUSED, 3, -1, |
| 22541 | + { |
| 22542 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 22543 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22544 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22545 | + }, |
| 22546 | + }, |
| 22547 | + { |
| 22548 | + AVR32_OPC_MCALL, 4, 0xf0100000, 0xfff00000, |
| 22549 | + &avr32_syntax_table[AVR32_SYNTAX_MCALL], |
| 22550 | + BFD_RELOC_AVR32_18W_PCREL, 2, 1, |
| 22551 | + { |
| 22552 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22553 | + &avr32_ifield_table[AVR32_IFIELD_K16], |
| 22554 | + }, |
| 22555 | + }, |
| 22556 | + { |
| 22557 | + AVR32_OPC_MFDR, 4, 0xe5b00000, 0xfff0ff00, |
| 22558 | + &avr32_syntax_table[AVR32_SYNTAX_MFDR], |
| 22559 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 22560 | + { |
| 22561 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22562 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 22563 | + }, |
| 22564 | + }, |
| 22565 | + { |
| 22566 | + AVR32_OPC_MFSR, 4, 0xe1b00000, 0xfff0ff00, |
| 22567 | + &avr32_syntax_table[AVR32_SYNTAX_MFSR], |
| 22568 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 22569 | + { |
| 22570 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22571 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 22572 | + }, |
| 22573 | + }, |
| 22574 | + { |
| 22575 | + AVR32_OPC_MIN, 4, 0xe0000d40, 0xe1f0fff0, |
| 22576 | + &avr32_syntax_table[AVR32_SYNTAX_MIN], |
| 22577 | + BFD_RELOC_UNUSED, 3, -1, |
| 22578 | + { |
| 22579 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 22580 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22581 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22582 | + }, |
| 22583 | + }, |
| 22584 | + { |
| 22585 | + AVR32_OPC_MOV3, 2, 0x00900000, 0xe1f00000, |
| 22586 | + &avr32_syntax_table[AVR32_SYNTAX_MOV3], |
| 22587 | + BFD_RELOC_NONE, 2, -1, |
| 22588 | + { |
| 22589 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22590 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22591 | + }, |
| 22592 | + }, |
| 22593 | + { |
| 22594 | + AVR32_OPC_MOV1, 2, 0x30000000, 0xf0000000, |
| 22595 | + &avr32_syntax_table[AVR32_SYNTAX_MOV1], |
| 22596 | + BFD_RELOC_AVR32_8S, 2, 1, |
| 22597 | + { |
| 22598 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22599 | + &avr32_ifield_table[AVR32_IFIELD_K8C], |
| 22600 | + }, |
| 22601 | + }, |
| 22602 | + { |
| 22603 | + AVR32_OPC_MOV2, 4, 0xe0600000, 0xe1e00000, |
| 22604 | + &avr32_syntax_table[AVR32_SYNTAX_MOV2], |
| 22605 | + BFD_RELOC_AVR32_21S, 2, 1, |
| 22606 | + { |
| 22607 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22608 | + &avr32_ifield_table[AVR32_IFIELD_K21], |
| 22609 | + }, |
| 22610 | + }, |
| 22611 | + { |
| 22612 | + AVR32_OPC_MOVEQ1, 4, 0xe0001700, 0xe1f0ffff, |
| 22613 | + &avr32_syntax_table[AVR32_SYNTAX_MOVEQ1], |
| 22614 | + BFD_RELOC_UNUSED, 2, -1, |
| 22615 | + { |
| 22616 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22617 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22618 | + }, |
| 22619 | + }, |
| 22620 | + { |
| 22621 | + AVR32_OPC_MOVNE1, 4, 0xe0001710, 0xe1f0ffff, |
| 22622 | + &avr32_syntax_table[AVR32_SYNTAX_MOVNE1], |
| 22623 | + BFD_RELOC_UNUSED, 2, -1, |
| 22624 | + { |
| 22625 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22626 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22627 | + }, |
| 22628 | + }, |
| 22629 | + { |
| 22630 | + AVR32_OPC_MOVCC1, 4, 0xe0001720, 0xe1f0ffff, |
| 22631 | + &avr32_syntax_table[AVR32_SYNTAX_MOVHS1], |
| 22632 | + BFD_RELOC_UNUSED, 2, -1, |
| 22633 | + { |
| 22634 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22635 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22636 | + }, |
| 22637 | + }, |
| 22638 | + { |
| 22639 | + AVR32_OPC_MOVCS1, 4, 0xe0001730, 0xe1f0ffff, |
| 22640 | + &avr32_syntax_table[AVR32_SYNTAX_MOVLO1], |
| 22641 | + BFD_RELOC_UNUSED, 2, -1, |
| 22642 | + { |
| 22643 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22644 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22645 | + }, |
| 22646 | + }, |
| 22647 | + { |
| 22648 | + AVR32_OPC_MOVGE1, 4, 0xe0001740, 0xe1f0ffff, |
| 22649 | + &avr32_syntax_table[AVR32_SYNTAX_MOVGE1], |
| 22650 | + BFD_RELOC_UNUSED, 2, -1, |
| 22651 | + { |
| 22652 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22653 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22654 | + }, |
| 22655 | + }, |
| 22656 | + { |
| 22657 | + AVR32_OPC_MOVLT1, 4, 0xe0001750, 0xe1f0ffff, |
| 22658 | + &avr32_syntax_table[AVR32_SYNTAX_MOVLT1], |
| 22659 | + BFD_RELOC_UNUSED, 2, -1, |
| 22660 | + { |
| 22661 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22662 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22663 | + }, |
| 22664 | + }, |
| 22665 | + { |
| 22666 | + AVR32_OPC_MOVMI1, 4, 0xe0001760, 0xe1f0ffff, |
| 22667 | + &avr32_syntax_table[AVR32_SYNTAX_MOVMI1], |
| 22668 | + BFD_RELOC_UNUSED, 2, -1, |
| 22669 | + { |
| 22670 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22671 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22672 | + }, |
| 22673 | + }, |
| 22674 | + { |
| 22675 | + AVR32_OPC_MOVPL1, 4, 0xe0001770, 0xe1f0ffff, |
| 22676 | + &avr32_syntax_table[AVR32_SYNTAX_MOVPL1], |
| 22677 | + BFD_RELOC_UNUSED, 2, -1, |
| 22678 | + { |
| 22679 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22680 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22681 | + }, |
| 22682 | + }, |
| 22683 | + { |
| 22684 | + AVR32_OPC_MOVLS1, 4, 0xe0001780, 0xe1f0ffff, |
| 22685 | + &avr32_syntax_table[AVR32_SYNTAX_MOVLS1], |
| 22686 | + BFD_RELOC_UNUSED, 2, -1, |
| 22687 | + { |
| 22688 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22689 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22690 | + }, |
| 22691 | + }, |
| 22692 | + { |
| 22693 | + AVR32_OPC_MOVGT1, 4, 0xe0001790, 0xe1f0ffff, |
| 22694 | + &avr32_syntax_table[AVR32_SYNTAX_MOVGT1], |
| 22695 | + BFD_RELOC_UNUSED, 2, -1, |
| 22696 | + { |
| 22697 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22698 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22699 | + }, |
| 22700 | + }, |
| 22701 | + { |
| 22702 | + AVR32_OPC_MOVLE1, 4, 0xe00017a0, 0xe1f0ffff, |
| 22703 | + &avr32_syntax_table[AVR32_SYNTAX_MOVLE1], |
| 22704 | + BFD_RELOC_UNUSED, 2, -1, |
| 22705 | + { |
| 22706 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22707 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22708 | + }, |
| 22709 | + }, |
| 22710 | + { |
| 22711 | + AVR32_OPC_MOVHI1, 4, 0xe00017b0, 0xe1f0ffff, |
| 22712 | + &avr32_syntax_table[AVR32_SYNTAX_MOVHI1], |
| 22713 | + BFD_RELOC_UNUSED, 2, -1, |
| 22714 | + { |
| 22715 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22716 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22717 | + }, |
| 22718 | + }, |
| 22719 | + { |
| 22720 | + AVR32_OPC_MOVVS1, 4, 0xe00017c0, 0xe1f0ffff, |
| 22721 | + &avr32_syntax_table[AVR32_SYNTAX_MOVVS1], |
| 22722 | + BFD_RELOC_UNUSED, 2, -1, |
| 22723 | + { |
| 22724 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22725 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22726 | + }, |
| 22727 | + }, |
| 22728 | + { |
| 22729 | + AVR32_OPC_MOVVC1, 4, 0xe00017d0, 0xe1f0ffff, |
| 22730 | + &avr32_syntax_table[AVR32_SYNTAX_MOVVC1], |
| 22731 | + BFD_RELOC_UNUSED, 2, -1, |
| 22732 | + { |
| 22733 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22734 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22735 | + }, |
| 22736 | + }, |
| 22737 | + { |
| 22738 | + AVR32_OPC_MOVQS1, 4, 0xe00017e0, 0xe1f0ffff, |
| 22739 | + &avr32_syntax_table[AVR32_SYNTAX_MOVQS1], |
| 22740 | + BFD_RELOC_UNUSED, 2, -1, |
| 22741 | + { |
| 22742 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22743 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22744 | + }, |
| 22745 | + }, |
| 22746 | + { |
| 22747 | + AVR32_OPC_MOVAL1, 4, 0xe00017f0, 0xe1f0ffff, |
| 22748 | + &avr32_syntax_table[AVR32_SYNTAX_MOVAL1], |
| 22749 | + BFD_RELOC_UNUSED, 2, -1, |
| 22750 | + { |
| 22751 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22752 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22753 | + }, |
| 22754 | + }, |
| 22755 | + { |
| 22756 | + AVR32_OPC_MOVEQ2, 4, 0xf9b00000, 0xfff0ff00, |
| 22757 | + &avr32_syntax_table[AVR32_SYNTAX_MOVEQ2], |
| 22758 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 22759 | + { |
| 22760 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22761 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 22762 | + }, |
| 22763 | + }, |
| 22764 | + { |
| 22765 | + AVR32_OPC_MOVNE2, 4, 0xf9b00100, 0xfff0ff00, |
| 22766 | + &avr32_syntax_table[AVR32_SYNTAX_MOVNE2], |
| 22767 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 22768 | + { |
| 22769 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22770 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 22771 | + }, |
| 22772 | + }, |
| 22773 | + { |
| 22774 | + AVR32_OPC_MOVCC2, 4, 0xf9b00200, 0xfff0ff00, |
| 22775 | + &avr32_syntax_table[AVR32_SYNTAX_MOVHS2], |
| 22776 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 22777 | + { |
| 22778 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22779 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 22780 | + }, |
| 22781 | + }, |
| 22782 | + { |
| 22783 | + AVR32_OPC_MOVCS2, 4, 0xf9b00300, 0xfff0ff00, |
| 22784 | + &avr32_syntax_table[AVR32_SYNTAX_MOVLO2], |
| 22785 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 22786 | + { |
| 22787 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22788 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 22789 | + }, |
| 22790 | + }, |
| 22791 | + { |
| 22792 | + AVR32_OPC_MOVGE2, 4, 0xf9b00400, 0xfff0ff00, |
| 22793 | + &avr32_syntax_table[AVR32_SYNTAX_MOVGE2], |
| 22794 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 22795 | + { |
| 22796 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22797 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 22798 | + }, |
| 22799 | + }, |
| 22800 | + { |
| 22801 | + AVR32_OPC_MOVLT2, 4, 0xf9b00500, 0xfff0ff00, |
| 22802 | + &avr32_syntax_table[AVR32_SYNTAX_MOVLT2], |
| 22803 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 22804 | + { |
| 22805 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22806 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 22807 | + }, |
| 22808 | + }, |
| 22809 | + { |
| 22810 | + AVR32_OPC_MOVMI2, 4, 0xf9b00600, 0xfff0ff00, |
| 22811 | + &avr32_syntax_table[AVR32_SYNTAX_MOVMI2], |
| 22812 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 22813 | + { |
| 22814 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22815 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 22816 | + }, |
| 22817 | + }, |
| 22818 | + { |
| 22819 | + AVR32_OPC_MOVPL2, 4, 0xf9b00700, 0xfff0ff00, |
| 22820 | + &avr32_syntax_table[AVR32_SYNTAX_MOVPL2], |
| 22821 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 22822 | + { |
| 22823 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22824 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 22825 | + }, |
| 22826 | + }, |
| 22827 | + { |
| 22828 | + AVR32_OPC_MOVLS2, 4, 0xf9b00800, 0xfff0ff00, |
| 22829 | + &avr32_syntax_table[AVR32_SYNTAX_MOVLS2], |
| 22830 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 22831 | + { |
| 22832 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22833 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 22834 | + }, |
| 22835 | + }, |
| 22836 | + { |
| 22837 | + AVR32_OPC_MOVGT2, 4, 0xf9b00900, 0xfff0ff00, |
| 22838 | + &avr32_syntax_table[AVR32_SYNTAX_MOVGT2], |
| 22839 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 22840 | + { |
| 22841 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22842 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 22843 | + }, |
| 22844 | + }, |
| 22845 | + { |
| 22846 | + AVR32_OPC_MOVLE2, 4, 0xf9b00a00, 0xfff0ff00, |
| 22847 | + &avr32_syntax_table[AVR32_SYNTAX_MOVLE2], |
| 22848 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 22849 | + { |
| 22850 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22851 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 22852 | + }, |
| 22853 | + }, |
| 22854 | + { |
| 22855 | + AVR32_OPC_MOVHI2, 4, 0xf9b00b00, 0xfff0ff00, |
| 22856 | + &avr32_syntax_table[AVR32_SYNTAX_MOVHI2], |
| 22857 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 22858 | + { |
| 22859 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22860 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 22861 | + }, |
| 22862 | + }, |
| 22863 | + { |
| 22864 | + AVR32_OPC_MOVVS2, 4, 0xf9b00c00, 0xfff0ff00, |
| 22865 | + &avr32_syntax_table[AVR32_SYNTAX_MOVVS2], |
| 22866 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 22867 | + { |
| 22868 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22869 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 22870 | + }, |
| 22871 | + }, |
| 22872 | + { |
| 22873 | + AVR32_OPC_MOVVC2, 4, 0xf9b00d00, 0xfff0ff00, |
| 22874 | + &avr32_syntax_table[AVR32_SYNTAX_MOVVC2], |
| 22875 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 22876 | + { |
| 22877 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22878 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 22879 | + }, |
| 22880 | + }, |
| 22881 | + { |
| 22882 | + AVR32_OPC_MOVQS2, 4, 0xf9b00e00, 0xfff0ff00, |
| 22883 | + &avr32_syntax_table[AVR32_SYNTAX_MOVQS2], |
| 22884 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 22885 | + { |
| 22886 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22887 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 22888 | + }, |
| 22889 | + }, |
| 22890 | + { |
| 22891 | + AVR32_OPC_MOVAL2, 4, 0xf9b00f00, 0xfff0ff00, |
| 22892 | + &avr32_syntax_table[AVR32_SYNTAX_MOVAL2], |
| 22893 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 22894 | + { |
| 22895 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22896 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 22897 | + }, |
| 22898 | + }, |
| 22899 | + { |
| 22900 | + AVR32_OPC_MTDR, 4, 0xe7b00000, 0xfff0ff00, |
| 22901 | + &avr32_syntax_table[AVR32_SYNTAX_MTDR], |
| 22902 | + BFD_RELOC_AVR32_8S_EXT, 2, 0, |
| 22903 | + { |
| 22904 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 22905 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22906 | + }, |
| 22907 | + }, |
| 22908 | + { |
| 22909 | + AVR32_OPC_MTSR, 4, 0xe3b00000, 0xfff0ff00, |
| 22910 | + &avr32_syntax_table[AVR32_SYNTAX_MTSR], |
| 22911 | + BFD_RELOC_AVR32_8S_EXT, 2, 0, |
| 22912 | + { |
| 22913 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 22914 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22915 | + }, |
| 22916 | + }, |
| 22917 | + { |
| 22918 | + AVR32_OPC_MUL1, 2, 0xa1300000, 0xe1f00000, |
| 22919 | + &avr32_syntax_table[AVR32_SYNTAX_MUL1], |
| 22920 | + BFD_RELOC_UNUSED, 2, -1, |
| 22921 | + { |
| 22922 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22923 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22924 | + }, |
| 22925 | + }, |
| 22926 | + { |
| 22927 | + AVR32_OPC_MUL2, 4, 0xe0000240, 0xe1f0fff0, |
| 22928 | + &avr32_syntax_table[AVR32_SYNTAX_MUL2], |
| 22929 | + BFD_RELOC_UNUSED, 3, -1, |
| 22930 | + { |
| 22931 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 22932 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22933 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22934 | + }, |
| 22935 | + }, |
| 22936 | + { |
| 22937 | + AVR32_OPC_MUL3, 4, 0xe0001000, 0xe1f0ff00, |
| 22938 | + &avr32_syntax_table[AVR32_SYNTAX_MUL3], |
| 22939 | + BFD_RELOC_AVR32_8S_EXT, 3, 2, |
| 22940 | + { |
| 22941 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22942 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22943 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 22944 | + }, |
| 22945 | + }, |
| 22946 | + { |
| 22947 | + AVR32_OPC_MULHH_W, 4, 0xe0000780, 0xe1f0ffc0, |
| 22948 | + &avr32_syntax_table[AVR32_SYNTAX_MULHH_W], |
| 22949 | + BFD_RELOC_UNUSED, 5, -1, |
| 22950 | + { |
| 22951 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 22952 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22953 | + &avr32_ifield_table[AVR32_IFIELD_X], |
| 22954 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22955 | + &avr32_ifield_table[AVR32_IFIELD_Y], |
| 22956 | + }, |
| 22957 | + }, |
| 22958 | + { |
| 22959 | + AVR32_OPC_MULNHH_W, 4, 0xe0000180, 0xe1f0ffc0, |
| 22960 | + &avr32_syntax_table[AVR32_SYNTAX_MULNHH_W], |
| 22961 | + BFD_RELOC_UNUSED, 5, -1, |
| 22962 | + { |
| 22963 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 22964 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22965 | + &avr32_ifield_table[AVR32_IFIELD_X], |
| 22966 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22967 | + &avr32_ifield_table[AVR32_IFIELD_Y], |
| 22968 | + }, |
| 22969 | + }, |
| 22970 | + { |
| 22971 | + AVR32_OPC_MULNWH_D, 4, 0xe0000280, 0xe1f0ffe1, |
| 22972 | + &avr32_syntax_table[AVR32_SYNTAX_MULNWH_D], |
| 22973 | + BFD_RELOC_UNUSED, 4, -1, |
| 22974 | + { |
| 22975 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 22976 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22977 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22978 | + &avr32_ifield_table[AVR32_IFIELD_Y], |
| 22979 | + }, |
| 22980 | + }, |
| 22981 | + { |
| 22982 | + AVR32_OPC_MULSD, 4, 0xe0000440, 0xe1f0fff0, |
| 22983 | + &avr32_syntax_table[AVR32_SYNTAX_MULSD], |
| 22984 | + BFD_RELOC_UNUSED, 3, -1, |
| 22985 | + { |
| 22986 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 22987 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22988 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 22989 | + }, |
| 22990 | + }, |
| 22991 | + { |
| 22992 | + AVR32_OPC_MULSATHH_H, 4, 0xe0000880, 0xe1f0ffc0, |
| 22993 | + &avr32_syntax_table[AVR32_SYNTAX_MULSATHH_H], |
| 22994 | + BFD_RELOC_UNUSED, 5, -1, |
| 22995 | + { |
| 22996 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 22997 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 22998 | + &avr32_ifield_table[AVR32_IFIELD_X], |
| 22999 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23000 | + &avr32_ifield_table[AVR32_IFIELD_Y], |
| 23001 | + }, |
| 23002 | + }, |
| 23003 | + { |
| 23004 | + AVR32_OPC_MULSATHH_W, 4, 0xe0000980, 0xe1f0ffc0, |
| 23005 | + &avr32_syntax_table[AVR32_SYNTAX_MULSATHH_W], |
| 23006 | + BFD_RELOC_UNUSED, 5, -1, |
| 23007 | + { |
| 23008 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23009 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23010 | + &avr32_ifield_table[AVR32_IFIELD_X], |
| 23011 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23012 | + &avr32_ifield_table[AVR32_IFIELD_Y], |
| 23013 | + }, |
| 23014 | + }, |
| 23015 | + { |
| 23016 | + AVR32_OPC_MULSATRNDHH_H, 4, 0xe0000a80, 0xe1f0ffc0, |
| 23017 | + &avr32_syntax_table[AVR32_SYNTAX_MULSATRNDHH_H], |
| 23018 | + BFD_RELOC_UNUSED, 5, -1, |
| 23019 | + { |
| 23020 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23021 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23022 | + &avr32_ifield_table[AVR32_IFIELD_X], |
| 23023 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23024 | + &avr32_ifield_table[AVR32_IFIELD_Y], |
| 23025 | + }, |
| 23026 | + }, |
| 23027 | + { |
| 23028 | + AVR32_OPC_MULSATRNDWH_W, 4, 0xe0000b80, 0xe1f0ffe0, |
| 23029 | + &avr32_syntax_table[AVR32_SYNTAX_MULSATRNDWH_W], |
| 23030 | + BFD_RELOC_UNUSED, 4, -1, |
| 23031 | + { |
| 23032 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23033 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23034 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23035 | + &avr32_ifield_table[AVR32_IFIELD_Y], |
| 23036 | + }, |
| 23037 | + }, |
| 23038 | + { |
| 23039 | + AVR32_OPC_MULSATWH_W, 4, 0xe0000e80, 0xe1f0ffe0, |
| 23040 | + &avr32_syntax_table[AVR32_SYNTAX_MULSATWH_W], |
| 23041 | + BFD_RELOC_UNUSED, 4, -1, |
| 23042 | + { |
| 23043 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23044 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23045 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23046 | + &avr32_ifield_table[AVR32_IFIELD_Y], |
| 23047 | + }, |
| 23048 | + }, |
| 23049 | + { |
| 23050 | + AVR32_OPC_MULU_D, 4, 0xe0000640, 0xe1f0fff1, |
| 23051 | + &avr32_syntax_table[AVR32_SYNTAX_MULU_D], |
| 23052 | + BFD_RELOC_UNUSED, 3, -1, |
| 23053 | + { |
| 23054 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23055 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23056 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23057 | + }, |
| 23058 | + }, |
| 23059 | + { |
| 23060 | + AVR32_OPC_MULWH_D, 4, 0xe0000d80, 0xe1f0ffe1, |
| 23061 | + &avr32_syntax_table[AVR32_SYNTAX_MULWH_D], |
| 23062 | + BFD_RELOC_UNUSED, 4, -1, |
| 23063 | + { |
| 23064 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23065 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23066 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23067 | + &avr32_ifield_table[AVR32_IFIELD_Y], |
| 23068 | + }, |
| 23069 | + }, |
| 23070 | + { |
| 23071 | + AVR32_OPC_MUSFR, 2, 0x5d300000, 0xfff00000, |
| 23072 | + &avr32_syntax_table[AVR32_SYNTAX_MUSFR], |
| 23073 | + BFD_RELOC_UNUSED, 1, -1, |
| 23074 | + { |
| 23075 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23076 | + } |
| 23077 | + }, |
| 23078 | + { |
| 23079 | + AVR32_OPC_MUSTR, 2, 0x5d200000, 0xfff00000, |
| 23080 | + &avr32_syntax_table[AVR32_SYNTAX_MUSTR], |
| 23081 | + BFD_RELOC_UNUSED, 1, -1, |
| 23082 | + { |
| 23083 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23084 | + } |
| 23085 | + }, |
| 23086 | + { |
| 23087 | + AVR32_OPC_MVCR_D, 4, 0xefa00010, 0xfff111ff, |
| 23088 | + &avr32_syntax_table[AVR32_SYNTAX_MVCR_D], |
| 23089 | + BFD_RELOC_UNUSED, 3, -1, |
| 23090 | + { |
| 23091 | + &avr32_ifield_table[AVR32_IFIELD_CPNO], |
| 23092 | + &avr32_ifield_table[AVR32_IFIELD_RY_DW], |
| 23093 | + &avr32_ifield_table[AVR32_IFIELD_CRD_DW], |
| 23094 | + }, |
| 23095 | + }, |
| 23096 | + { |
| 23097 | + AVR32_OPC_MVCR_W, 4, 0xefa00000, 0xfff010ff, |
| 23098 | + &avr32_syntax_table[AVR32_SYNTAX_MVCR_W], |
| 23099 | + BFD_RELOC_UNUSED, 3, -1, |
| 23100 | + { |
| 23101 | + &avr32_ifield_table[AVR32_IFIELD_CPNO], |
| 23102 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23103 | + &avr32_ifield_table[AVR32_IFIELD_CRD_RI], |
| 23104 | + }, |
| 23105 | + }, |
| 23106 | + { |
| 23107 | + AVR32_OPC_MVRC_D, 4, 0xefa00030, 0xfff111ff, |
| 23108 | + &avr32_syntax_table[AVR32_SYNTAX_MVRC_D], |
| 23109 | + BFD_RELOC_UNUSED, 3, -1, |
| 23110 | + { |
| 23111 | + &avr32_ifield_table[AVR32_IFIELD_CPNO], |
| 23112 | + &avr32_ifield_table[AVR32_IFIELD_CRD_DW], |
| 23113 | + &avr32_ifield_table[AVR32_IFIELD_RY_DW], |
| 23114 | + }, |
| 23115 | + }, |
| 23116 | + { |
| 23117 | + AVR32_OPC_MVRC_W, 4, 0xefa00020, 0xfff010ff, |
| 23118 | + &avr32_syntax_table[AVR32_SYNTAX_MVRC_W], |
| 23119 | + BFD_RELOC_UNUSED, 3, -1, |
| 23120 | + { |
| 23121 | + &avr32_ifield_table[AVR32_IFIELD_CPNO], |
| 23122 | + &avr32_ifield_table[AVR32_IFIELD_CRD_RI], |
| 23123 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23124 | + }, |
| 23125 | + }, |
| 23126 | + { |
| 23127 | + AVR32_OPC_NEG, 2, 0x5c300000, 0xfff00000, |
| 23128 | + &avr32_syntax_table[AVR32_SYNTAX_NEG], |
| 23129 | + BFD_RELOC_UNUSED, 1, -1, |
| 23130 | + { |
| 23131 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23132 | + } |
| 23133 | + }, |
| 23134 | + { |
| 23135 | + AVR32_OPC_NOP, 2, 0xd7030000, 0xffff0000, |
| 23136 | + &avr32_syntax_table[AVR32_SYNTAX_NOP], |
| 23137 | + BFD_RELOC_UNUSED, 0, -1, { NULL }, |
| 23138 | + }, |
| 23139 | + { |
| 23140 | + AVR32_OPC_OR1, 2, 0x00400000, 0xe1f00000, |
| 23141 | + &avr32_syntax_table[AVR32_SYNTAX_OR1], |
| 23142 | + BFD_RELOC_UNUSED, 2, -1, |
| 23143 | + { |
| 23144 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23145 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23146 | + }, |
| 23147 | + }, |
| 23148 | + { |
| 23149 | + AVR32_OPC_OR2, 4, 0xe1e01000, 0xe1f0fe00, |
| 23150 | + &avr32_syntax_table[AVR32_SYNTAX_OR2], |
| 23151 | + BFD_RELOC_UNUSED, 4, -1, |
| 23152 | + { |
| 23153 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23154 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23155 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23156 | + &avr32_ifield_table[AVR32_IFIELD_K5E2], |
| 23157 | + }, |
| 23158 | + }, |
| 23159 | + { |
| 23160 | + AVR32_OPC_OR3, 4, 0xe1e01200, 0xe1f0fe00, |
| 23161 | + &avr32_syntax_table[AVR32_SYNTAX_OR3], |
| 23162 | + BFD_RELOC_UNUSED, 4, -1, |
| 23163 | + { |
| 23164 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23165 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23166 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23167 | + &avr32_ifield_table[AVR32_IFIELD_K5E2], |
| 23168 | + }, |
| 23169 | + }, |
| 23170 | + { |
| 23171 | + AVR32_OPC_ORH, 4, 0xea100000, 0xfff00000, |
| 23172 | + &avr32_syntax_table[AVR32_SYNTAX_ORH], |
| 23173 | + BFD_RELOC_AVR32_16U, 2, 1, |
| 23174 | + { |
| 23175 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23176 | + &avr32_ifield_table[AVR32_IFIELD_K16], |
| 23177 | + }, |
| 23178 | + }, |
| 23179 | + { |
| 23180 | + AVR32_OPC_ORL, 4, 0xe8100000, 0xfff00000, |
| 23181 | + &avr32_syntax_table[AVR32_SYNTAX_ORL], |
| 23182 | + BFD_RELOC_AVR32_16U, 2, 1, |
| 23183 | + { |
| 23184 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23185 | + &avr32_ifield_table[AVR32_IFIELD_K16], |
| 23186 | + }, |
| 23187 | + }, |
| 23188 | + { |
| 23189 | + AVR32_OPC_PABS_SB, 4, 0xe00023e0, 0xfff0fff0, |
| 23190 | + &avr32_syntax_table[AVR32_SYNTAX_PABS_SB], |
| 23191 | + BFD_RELOC_UNUSED, 2, -1, |
| 23192 | + { |
| 23193 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23194 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23195 | + }, |
| 23196 | + }, |
| 23197 | + { |
| 23198 | + AVR32_OPC_PABS_SH, 4, 0xe00023f0, 0xfff0fff0, |
| 23199 | + &avr32_syntax_table[AVR32_SYNTAX_PABS_SH], |
| 23200 | + BFD_RELOC_UNUSED, 2, -1, |
| 23201 | + { |
| 23202 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23203 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23204 | + }, |
| 23205 | + }, |
| 23206 | + { |
| 23207 | + AVR32_OPC_PACKSH_SB, 4, 0xe00024d0, 0xe1f0fff0, |
| 23208 | + &avr32_syntax_table[AVR32_SYNTAX_PACKSH_SB], |
| 23209 | + BFD_RELOC_UNUSED, 3, -1, |
| 23210 | + { |
| 23211 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23212 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23213 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23214 | + }, |
| 23215 | + }, |
| 23216 | + { |
| 23217 | + AVR32_OPC_PACKSH_UB, 4, 0xe00024c0, 0xe1f0fff0, |
| 23218 | + &avr32_syntax_table[AVR32_SYNTAX_PACKSH_UB], |
| 23219 | + BFD_RELOC_UNUSED, 3, -1, |
| 23220 | + { |
| 23221 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23222 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23223 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23224 | + }, |
| 23225 | + }, |
| 23226 | + { |
| 23227 | + AVR32_OPC_PACKW_SH, 4, 0xe0002470, 0xe1f0fff0, |
| 23228 | + &avr32_syntax_table[AVR32_SYNTAX_PACKW_SH], |
| 23229 | + BFD_RELOC_UNUSED, 3, -1, |
| 23230 | + { |
| 23231 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23232 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23233 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23234 | + }, |
| 23235 | + }, |
| 23236 | + { |
| 23237 | + AVR32_OPC_PADD_B, 4, 0xe0002300, 0xe1f0fff0, |
| 23238 | + &avr32_syntax_table[AVR32_SYNTAX_PADD_B], |
| 23239 | + BFD_RELOC_UNUSED, 3, -1, |
| 23240 | + { |
| 23241 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23242 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23243 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23244 | + }, |
| 23245 | + }, |
| 23246 | + { |
| 23247 | + AVR32_OPC_PADD_H, 4, 0xe0002000, 0xe1f0fff0, |
| 23248 | + &avr32_syntax_table[AVR32_SYNTAX_PADD_H], |
| 23249 | + BFD_RELOC_UNUSED, 3, -1, |
| 23250 | + { |
| 23251 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23252 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23253 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23254 | + }, |
| 23255 | + }, |
| 23256 | + { |
| 23257 | + AVR32_OPC_PADDH_SH, 4, 0xe00020c0, 0xe1f0fff0, |
| 23258 | + &avr32_syntax_table[AVR32_SYNTAX_PADDH_SH], |
| 23259 | + BFD_RELOC_UNUSED, 3, -1, |
| 23260 | + { |
| 23261 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23262 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23263 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23264 | + }, |
| 23265 | + }, |
| 23266 | + { |
| 23267 | + AVR32_OPC_PADDH_UB, 4, 0xe0002360, 0xe1f0fff0, |
| 23268 | + &avr32_syntax_table[AVR32_SYNTAX_PADDH_UB], |
| 23269 | + BFD_RELOC_UNUSED, 3, -1, |
| 23270 | + { |
| 23271 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23272 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23273 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23274 | + }, |
| 23275 | + }, |
| 23276 | + { |
| 23277 | + AVR32_OPC_PADDS_SB, 4, 0xe0002320, 0xe1f0fff0, |
| 23278 | + &avr32_syntax_table[AVR32_SYNTAX_PADDS_SB], |
| 23279 | + BFD_RELOC_UNUSED, 3, -1, |
| 23280 | + { |
| 23281 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23282 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23283 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23284 | + }, |
| 23285 | + }, |
| 23286 | + { |
| 23287 | + AVR32_OPC_PADDS_SH, 4, 0xe0002040, 0xe1f0fff0, |
| 23288 | + &avr32_syntax_table[AVR32_SYNTAX_PADDS_SH], |
| 23289 | + BFD_RELOC_UNUSED, 3, -1, |
| 23290 | + { |
| 23291 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23292 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23293 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23294 | + }, |
| 23295 | + }, |
| 23296 | + { |
| 23297 | + AVR32_OPC_PADDS_UB, 4, 0xe0002340, 0xe1f0fff0, |
| 23298 | + &avr32_syntax_table[AVR32_SYNTAX_PADDS_UB], |
| 23299 | + BFD_RELOC_UNUSED, 3, -1, |
| 23300 | + { |
| 23301 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23302 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23303 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23304 | + }, |
| 23305 | + }, |
| 23306 | + { |
| 23307 | + AVR32_OPC_PADDS_UH, 4, 0xe0002080, 0xe1f0fff0, |
| 23308 | + &avr32_syntax_table[AVR32_SYNTAX_PADDS_UH], |
| 23309 | + BFD_RELOC_UNUSED, 3, -1, |
| 23310 | + { |
| 23311 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23312 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23313 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23314 | + }, |
| 23315 | + }, |
| 23316 | + { |
| 23317 | + AVR32_OPC_PADDSUB_H, 4, 0xe0002100, 0xe1f0ffc0, |
| 23318 | + &avr32_syntax_table[AVR32_SYNTAX_PADDSUB_H], |
| 23319 | + BFD_RELOC_UNUSED, 5, -1, |
| 23320 | + { |
| 23321 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23322 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23323 | + &avr32_ifield_table[AVR32_IFIELD_X], |
| 23324 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23325 | + &avr32_ifield_table[AVR32_IFIELD_Y], |
| 23326 | + }, |
| 23327 | + }, |
| 23328 | + { |
| 23329 | + AVR32_OPC_PADDSUBH_SH, 4, 0xe0002280, 0xe1f0ffc0, |
| 23330 | + &avr32_syntax_table[AVR32_SYNTAX_PADDSUBH_SH], |
| 23331 | + BFD_RELOC_UNUSED, 5, -1, |
| 23332 | + { |
| 23333 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23334 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23335 | + &avr32_ifield_table[AVR32_IFIELD_X], |
| 23336 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23337 | + &avr32_ifield_table[AVR32_IFIELD_Y], |
| 23338 | + }, |
| 23339 | + }, |
| 23340 | + { |
| 23341 | + AVR32_OPC_PADDSUBS_SH, 4, 0xe0002180, 0xe1f0ffc0, |
| 23342 | + &avr32_syntax_table[AVR32_SYNTAX_PADDSUBS_SH], |
| 23343 | + BFD_RELOC_UNUSED, 5, -1, |
| 23344 | + { |
| 23345 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23346 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23347 | + &avr32_ifield_table[AVR32_IFIELD_X], |
| 23348 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23349 | + &avr32_ifield_table[AVR32_IFIELD_Y], |
| 23350 | + }, |
| 23351 | + }, |
| 23352 | + { |
| 23353 | + AVR32_OPC_PADDSUBS_UH, 4, 0xe0002200, 0xe1f0ffc0, |
| 23354 | + &avr32_syntax_table[AVR32_SYNTAX_PADDSUBS_UH], |
| 23355 | + BFD_RELOC_UNUSED, 5, -1, |
| 23356 | + { |
| 23357 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23358 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23359 | + &avr32_ifield_table[AVR32_IFIELD_X], |
| 23360 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23361 | + &avr32_ifield_table[AVR32_IFIELD_Y], |
| 23362 | + }, |
| 23363 | + }, |
| 23364 | + { |
| 23365 | + AVR32_OPC_PADDX_H, 4, 0xe0002020, 0xe1f0fff0, |
| 23366 | + &avr32_syntax_table[AVR32_SYNTAX_PADDX_H], |
| 23367 | + BFD_RELOC_UNUSED, 3, -1, |
| 23368 | + { |
| 23369 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23370 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23371 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23372 | + }, |
| 23373 | + }, |
| 23374 | + { |
| 23375 | + AVR32_OPC_PADDXH_SH, 4, 0xe00020e0, 0xe1f0fff0, |
| 23376 | + &avr32_syntax_table[AVR32_SYNTAX_PADDXH_SH], |
| 23377 | + BFD_RELOC_UNUSED, 3, -1, |
| 23378 | + { |
| 23379 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23380 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23381 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23382 | + }, |
| 23383 | + }, |
| 23384 | + { |
| 23385 | + AVR32_OPC_PADDXS_SH, 4, 0xe0002060, 0xe1f0fff0, |
| 23386 | + &avr32_syntax_table[AVR32_SYNTAX_PADDXS_SH], |
| 23387 | + BFD_RELOC_UNUSED, 3, -1, |
| 23388 | + { |
| 23389 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23390 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23391 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23392 | + }, |
| 23393 | + }, |
| 23394 | + { |
| 23395 | + AVR32_OPC_PADDXS_UH, 4, 0xe00020a0, 0xe1f0fff0, |
| 23396 | + &avr32_syntax_table[AVR32_SYNTAX_PADDXS_UH], |
| 23397 | + BFD_RELOC_UNUSED, 3, -1, |
| 23398 | + { |
| 23399 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23400 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23401 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23402 | + }, |
| 23403 | + }, |
| 23404 | + { |
| 23405 | + AVR32_OPC_PASR_B, 4, 0xe0002410, 0xe1f8fff0, |
| 23406 | + &avr32_syntax_table[AVR32_SYNTAX_PASR_B], |
| 23407 | + BFD_RELOC_UNUSED, 3, -1, |
| 23408 | + { |
| 23409 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23410 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23411 | + &avr32_ifield_table[AVR32_IFIELD_COND3], |
| 23412 | + }, |
| 23413 | + }, |
| 23414 | + { |
| 23415 | + AVR32_OPC_PASR_H, 4, 0xe0002440, 0xe1f0fff0, |
| 23416 | + &avr32_syntax_table[AVR32_SYNTAX_PASR_H], |
| 23417 | + BFD_RELOC_UNUSED, 3, -1, |
| 23418 | + { |
| 23419 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23420 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23421 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23422 | + }, |
| 23423 | + }, |
| 23424 | + { |
| 23425 | + AVR32_OPC_PAVG_SH, 4, 0xe00023d0, 0xe1f0fff0, |
| 23426 | + &avr32_syntax_table[AVR32_SYNTAX_PAVG_SH], |
| 23427 | + BFD_RELOC_UNUSED, 3, -1, |
| 23428 | + { |
| 23429 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23430 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23431 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23432 | + }, |
| 23433 | + }, |
| 23434 | + { |
| 23435 | + AVR32_OPC_PAVG_UB, 4, 0xe00023c0, 0xe1f0fff0, |
| 23436 | + &avr32_syntax_table[AVR32_SYNTAX_PAVG_UB], |
| 23437 | + BFD_RELOC_UNUSED, 3, -1, |
| 23438 | + { |
| 23439 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23440 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23441 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23442 | + }, |
| 23443 | + }, |
| 23444 | + { |
| 23445 | + AVR32_OPC_PLSL_B, 4, 0xe0002420, 0xe1f8fff0, |
| 23446 | + &avr32_syntax_table[AVR32_SYNTAX_PLSL_B], |
| 23447 | + BFD_RELOC_UNUSED, 3, -1, |
| 23448 | + { |
| 23449 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23450 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23451 | + &avr32_ifield_table[AVR32_IFIELD_COND3], |
| 23452 | + }, |
| 23453 | + }, |
| 23454 | + { |
| 23455 | + AVR32_OPC_PLSL_H, 4, 0xe0002450, 0xe1f0fff0, |
| 23456 | + &avr32_syntax_table[AVR32_SYNTAX_PLSL_H], |
| 23457 | + BFD_RELOC_UNUSED, 3, -1, |
| 23458 | + { |
| 23459 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23460 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23461 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23462 | + }, |
| 23463 | + }, |
| 23464 | + { |
| 23465 | + AVR32_OPC_PLSR_B, 4, 0xe0002430, 0xe1f8fff0, |
| 23466 | + &avr32_syntax_table[AVR32_SYNTAX_PLSR_B], |
| 23467 | + BFD_RELOC_UNUSED, 3, -1, |
| 23468 | + { |
| 23469 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23470 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23471 | + &avr32_ifield_table[AVR32_IFIELD_COND3], |
| 23472 | + }, |
| 23473 | + }, |
| 23474 | + { |
| 23475 | + AVR32_OPC_PLSR_H, 4, 0xe0002460, 0xe1f0fff0, |
| 23476 | + &avr32_syntax_table[AVR32_SYNTAX_PLSR_H], |
| 23477 | + BFD_RELOC_UNUSED, 3, -1, |
| 23478 | + { |
| 23479 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23480 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23481 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23482 | + }, |
| 23483 | + }, |
| 23484 | + { |
| 23485 | + AVR32_OPC_PMAX_SH, 4, 0xe0002390, 0xe1f0fff0, |
| 23486 | + &avr32_syntax_table[AVR32_SYNTAX_PMAX_SH], |
| 23487 | + BFD_RELOC_UNUSED, 3, -1, |
| 23488 | + { |
| 23489 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23490 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23491 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23492 | + }, |
| 23493 | + }, |
| 23494 | + { |
| 23495 | + AVR32_OPC_PMAX_UB, 4, 0xe0002380, 0xe1f0fff0, |
| 23496 | + &avr32_syntax_table[AVR32_SYNTAX_PMAX_UB], |
| 23497 | + BFD_RELOC_UNUSED, 3, -1, |
| 23498 | + { |
| 23499 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23500 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23501 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23502 | + }, |
| 23503 | + }, |
| 23504 | + { |
| 23505 | + AVR32_OPC_PMIN_SH, 4, 0xe00023b0, 0xe1f0fff0, |
| 23506 | + &avr32_syntax_table[AVR32_SYNTAX_PMIN_SH], |
| 23507 | + BFD_RELOC_UNUSED, 3, -1, |
| 23508 | + { |
| 23509 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23510 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23511 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23512 | + }, |
| 23513 | + }, |
| 23514 | + { |
| 23515 | + AVR32_OPC_PMIN_UB, 4, 0xe00023a0, 0xe1f0fff0, |
| 23516 | + &avr32_syntax_table[AVR32_SYNTAX_PMIN_UB], |
| 23517 | + BFD_RELOC_UNUSED, 3, -1, |
| 23518 | + { |
| 23519 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23520 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23521 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23522 | + }, |
| 23523 | + }, |
| 23524 | + { |
| 23525 | + AVR32_OPC_POPJC, 2, 0xd7130000, 0xffff0000, |
| 23526 | + &avr32_syntax_table[AVR32_SYNTAX_POPJC], |
| 23527 | + BFD_RELOC_UNUSED, 0, -1, { NULL }, |
| 23528 | + }, |
| 23529 | + { |
| 23530 | + AVR32_OPC_POPM, 2, 0xd0020000, 0xf0070000, |
| 23531 | + &avr32_syntax_table[AVR32_SYNTAX_POPM], |
| 23532 | + BFD_RELOC_UNUSED, 1, -1, |
| 23533 | + { |
| 23534 | + &avr32_ifield_table[AVR32_IFIELD_POPM], |
| 23535 | + }, |
| 23536 | + }, |
| 23537 | + { |
| 23538 | + AVR32_OPC_POPM_E, 4, 0xe3cd0000, 0xffff0000, |
| 23539 | + &avr32_syntax_table[AVR32_SYNTAX_POPM_E], |
| 23540 | + BFD_RELOC_UNUSED, 1, -1, |
| 23541 | + { |
| 23542 | + &avr32_ifield_table[AVR32_IFIELD_K16], |
| 23543 | + }, |
| 23544 | + }, |
| 23545 | + { |
| 23546 | + AVR32_OPC_PREF, 4, 0xf2100000, 0xfff00000, |
| 23547 | + &avr32_syntax_table[AVR32_SYNTAX_PREF], |
| 23548 | + BFD_RELOC_AVR32_16S, 2, -1, |
| 23549 | + { |
| 23550 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23551 | + &avr32_ifield_table[AVR32_IFIELD_K16], |
| 23552 | + }, |
| 23553 | + }, |
| 23554 | + { |
| 23555 | + AVR32_OPC_PSAD, 4, 0xe0002400, 0xe1f0fff0, |
| 23556 | + &avr32_syntax_table[AVR32_SYNTAX_PSAD], |
| 23557 | + BFD_RELOC_UNUSED, 3, -1, |
| 23558 | + { |
| 23559 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23560 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23561 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23562 | + }, |
| 23563 | + }, |
| 23564 | + { |
| 23565 | + AVR32_OPC_PSUB_B, 4, 0xe0002310, 0xe1f0fff0, |
| 23566 | + &avr32_syntax_table[AVR32_SYNTAX_PSUB_B], |
| 23567 | + BFD_RELOC_UNUSED, 3, -1, |
| 23568 | + { |
| 23569 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23570 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23571 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23572 | + }, |
| 23573 | + }, |
| 23574 | + { |
| 23575 | + AVR32_OPC_PSUB_H, 4, 0xe0002010, 0xe1f0fff0, |
| 23576 | + &avr32_syntax_table[AVR32_SYNTAX_PSUB_H], |
| 23577 | + BFD_RELOC_UNUSED, 3, -1, |
| 23578 | + { |
| 23579 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23580 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23581 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23582 | + }, |
| 23583 | + }, |
| 23584 | + { |
| 23585 | + AVR32_OPC_PSUBADD_H, 4, 0xe0002140, 0xe1f0ffc0, |
| 23586 | + &avr32_syntax_table[AVR32_SYNTAX_PSUBADD_H], |
| 23587 | + BFD_RELOC_UNUSED, 5, -1, |
| 23588 | + { |
| 23589 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23590 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23591 | + &avr32_ifield_table[AVR32_IFIELD_X], |
| 23592 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23593 | + &avr32_ifield_table[AVR32_IFIELD_Y], |
| 23594 | + }, |
| 23595 | + }, |
| 23596 | + { |
| 23597 | + AVR32_OPC_PSUBADDH_SH, 4, 0xe00022c0, 0xe1f0ffc0, |
| 23598 | + &avr32_syntax_table[AVR32_SYNTAX_PSUBADDH_SH], |
| 23599 | + BFD_RELOC_UNUSED, 5, -1, |
| 23600 | + { |
| 23601 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23602 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23603 | + &avr32_ifield_table[AVR32_IFIELD_X], |
| 23604 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23605 | + &avr32_ifield_table[AVR32_IFIELD_Y], |
| 23606 | + }, |
| 23607 | + }, |
| 23608 | + { |
| 23609 | + AVR32_OPC_PSUBADDS_SH, 4, 0xe00021c0, 0xe1f0ffc0, |
| 23610 | + &avr32_syntax_table[AVR32_SYNTAX_PSUBADDS_SH], |
| 23611 | + BFD_RELOC_UNUSED, 5, -1, |
| 23612 | + { |
| 23613 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23614 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23615 | + &avr32_ifield_table[AVR32_IFIELD_X], |
| 23616 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23617 | + &avr32_ifield_table[AVR32_IFIELD_Y], |
| 23618 | + }, |
| 23619 | + }, |
| 23620 | + { |
| 23621 | + AVR32_OPC_PSUBADDS_UH, 4, 0xe0002240, 0xe1f0ffc0, |
| 23622 | + &avr32_syntax_table[AVR32_SYNTAX_PSUBADDS_UH], |
| 23623 | + BFD_RELOC_UNUSED, 5, -1, |
| 23624 | + { |
| 23625 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23626 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23627 | + &avr32_ifield_table[AVR32_IFIELD_X], |
| 23628 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23629 | + &avr32_ifield_table[AVR32_IFIELD_Y], |
| 23630 | + }, |
| 23631 | + }, |
| 23632 | + { |
| 23633 | + AVR32_OPC_PSUBH_SH, 4, 0xe00020d0, 0xe1f0fff0, |
| 23634 | + &avr32_syntax_table[AVR32_SYNTAX_PSUBH_SH], |
| 23635 | + BFD_RELOC_UNUSED, 3, -1, |
| 23636 | + { |
| 23637 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23638 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23639 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23640 | + }, |
| 23641 | + }, |
| 23642 | + { |
| 23643 | + AVR32_OPC_PSUBH_UB, 4, 0xe0002370, 0xe1f0fff0, |
| 23644 | + &avr32_syntax_table[AVR32_SYNTAX_PSUBH_UB], |
| 23645 | + BFD_RELOC_UNUSED, 3, -1, |
| 23646 | + { |
| 23647 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23648 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23649 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23650 | + }, |
| 23651 | + }, |
| 23652 | + { |
| 23653 | + AVR32_OPC_PSUBS_SB, 4, 0xe0002330, 0xe1f0fff0, |
| 23654 | + &avr32_syntax_table[AVR32_SYNTAX_PSUBS_SB], |
| 23655 | + BFD_RELOC_UNUSED, 3, -1, |
| 23656 | + { |
| 23657 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23658 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23659 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23660 | + }, |
| 23661 | + }, |
| 23662 | + { |
| 23663 | + AVR32_OPC_PSUBS_SH, 4, 0xe0002050, 0xe1f0fff0, |
| 23664 | + &avr32_syntax_table[AVR32_SYNTAX_PSUBS_SH], |
| 23665 | + BFD_RELOC_UNUSED, 3, -1, |
| 23666 | + { |
| 23667 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23668 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23669 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23670 | + }, |
| 23671 | + }, |
| 23672 | + { |
| 23673 | + AVR32_OPC_PSUBS_UB, 4, 0xe0002350, 0xe1f0fff0, |
| 23674 | + &avr32_syntax_table[AVR32_SYNTAX_PSUBS_UB], |
| 23675 | + BFD_RELOC_UNUSED, 3, -1, |
| 23676 | + { |
| 23677 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23678 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23679 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23680 | + }, |
| 23681 | + }, |
| 23682 | + { |
| 23683 | + AVR32_OPC_PSUBS_UH, 4, 0xe0002090, 0xe1f0fff0, |
| 23684 | + &avr32_syntax_table[AVR32_SYNTAX_PSUBS_UH], |
| 23685 | + BFD_RELOC_UNUSED, 3, -1, |
| 23686 | + { |
| 23687 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23688 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23689 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23690 | + }, |
| 23691 | + }, |
| 23692 | + { |
| 23693 | + AVR32_OPC_PSUBX_H, 4, 0xe0002030, 0xe1f0fff0, |
| 23694 | + &avr32_syntax_table[AVR32_SYNTAX_PSUBX_H], |
| 23695 | + BFD_RELOC_UNUSED, 3, -1, |
| 23696 | + { |
| 23697 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23698 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23699 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23700 | + }, |
| 23701 | + }, |
| 23702 | + { |
| 23703 | + AVR32_OPC_PSUBXH_SH, 4, 0xe00020f0, 0xe1f0fff0, |
| 23704 | + &avr32_syntax_table[AVR32_SYNTAX_PSUBXH_SH], |
| 23705 | + BFD_RELOC_UNUSED, 3, -1, |
| 23706 | + { |
| 23707 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23708 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23709 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23710 | + }, |
| 23711 | + }, |
| 23712 | + { |
| 23713 | + AVR32_OPC_PSUBXS_SH, 4, 0xe0002070, 0xe1f0fff0, |
| 23714 | + &avr32_syntax_table[AVR32_SYNTAX_PSUBXS_SH], |
| 23715 | + BFD_RELOC_UNUSED, 3, -1, |
| 23716 | + { |
| 23717 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23718 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23719 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23720 | + }, |
| 23721 | + }, |
| 23722 | + { |
| 23723 | + AVR32_OPC_PSUBXS_UH, 4, 0xe00020b0, 0xe1f0fff0, |
| 23724 | + &avr32_syntax_table[AVR32_SYNTAX_PSUBXS_UH], |
| 23725 | + BFD_RELOC_UNUSED, 3, -1, |
| 23726 | + { |
| 23727 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23728 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23729 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23730 | + }, |
| 23731 | + }, |
| 23732 | + { |
| 23733 | + AVR32_OPC_PUNPCKSB_H, 4, 0xe00024a0, 0xe1ffffe0, |
| 23734 | + &avr32_syntax_table[AVR32_SYNTAX_PUNPCKSB_H], |
| 23735 | + BFD_RELOC_UNUSED, 3, -1, |
| 23736 | + { |
| 23737 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23738 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23739 | + &avr32_ifield_table[AVR32_IFIELD_Y], |
| 23740 | + }, |
| 23741 | + }, |
| 23742 | + { |
| 23743 | + AVR32_OPC_PUNPCKUB_H, 4, 0xe0002480, 0xe1ffffe0, |
| 23744 | + &avr32_syntax_table[AVR32_SYNTAX_PUNPCKUB_H], |
| 23745 | + BFD_RELOC_UNUSED, 3, -1, |
| 23746 | + { |
| 23747 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23748 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23749 | + &avr32_ifield_table[AVR32_IFIELD_Y], |
| 23750 | + }, |
| 23751 | + }, |
| 23752 | + { |
| 23753 | + AVR32_OPC_PUSHJC, 2, 0xd7230000, 0xffff0000, |
| 23754 | + &avr32_syntax_table[AVR32_SYNTAX_PUSHJC], |
| 23755 | + BFD_RELOC_UNUSED, 0, -1, { NULL }, |
| 23756 | + }, |
| 23757 | + { |
| 23758 | + AVR32_OPC_PUSHM, 2, 0xd0010000, 0xf00f0000, |
| 23759 | + &avr32_syntax_table[AVR32_SYNTAX_PUSHM], |
| 23760 | + BFD_RELOC_UNUSED, 1, -1, |
| 23761 | + { |
| 23762 | + &avr32_ifield_table[AVR32_IFIELD_K8C], |
| 23763 | + }, |
| 23764 | + }, |
| 23765 | + { |
| 23766 | + AVR32_OPC_PUSHM_E, 4, 0xebcd0000, 0xffff0000, |
| 23767 | + &avr32_syntax_table[AVR32_SYNTAX_PUSHM_E], |
| 23768 | + BFD_RELOC_UNUSED, 1, -1, |
| 23769 | + { |
| 23770 | + &avr32_ifield_table[AVR32_IFIELD_K16], |
| 23771 | + }, |
| 23772 | + }, |
| 23773 | + { |
| 23774 | + AVR32_OPC_RCALL1, 2, 0xc00c0000, 0xf00c0000, |
| 23775 | + &avr32_syntax_table[AVR32_SYNTAX_RCALL1], |
| 23776 | + BFD_RELOC_AVR32_11H_PCREL, 1, 0, |
| 23777 | + { |
| 23778 | + &avr32_ifield_table[AVR32_IFIELD_K10], |
| 23779 | + }, |
| 23780 | + }, |
| 23781 | + { |
| 23782 | + AVR32_OPC_RCALL2, 4, 0xe0a00000, 0xe1ef0000, |
| 23783 | + &avr32_syntax_table[AVR32_SYNTAX_RCALL2], |
| 23784 | + BFD_RELOC_AVR32_22H_PCREL, 1, 0, |
| 23785 | + { |
| 23786 | + &avr32_ifield_table[AVR32_IFIELD_K21], |
| 23787 | + }, |
| 23788 | + }, |
| 23789 | + { |
| 23790 | + AVR32_OPC_RETEQ, 2, 0x5e000000, 0xfff00000, |
| 23791 | + &avr32_syntax_table[AVR32_SYNTAX_RETEQ], |
| 23792 | + BFD_RELOC_NONE, 1, -1, |
| 23793 | + { |
| 23794 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23795 | + }, |
| 23796 | + }, |
| 23797 | + { |
| 23798 | + AVR32_OPC_RETNE, 2, 0x5e100000, 0xfff00000, |
| 23799 | + &avr32_syntax_table[AVR32_SYNTAX_RETNE], |
| 23800 | + BFD_RELOC_NONE, 1, -1, |
| 23801 | + { |
| 23802 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23803 | + }, |
| 23804 | + }, |
| 23805 | + { |
| 23806 | + AVR32_OPC_RETCC, 2, 0x5e200000, 0xfff00000, |
| 23807 | + &avr32_syntax_table[AVR32_SYNTAX_RETHS], |
| 23808 | + BFD_RELOC_NONE, 1, -1, |
| 23809 | + { |
| 23810 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23811 | + }, |
| 23812 | + }, |
| 23813 | + { |
| 23814 | + AVR32_OPC_RETCS, 2, 0x5e300000, 0xfff00000, |
| 23815 | + &avr32_syntax_table[AVR32_SYNTAX_RETLO], |
| 23816 | + BFD_RELOC_NONE, 1, -1, |
| 23817 | + { |
| 23818 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23819 | + }, |
| 23820 | + }, |
| 23821 | + { |
| 23822 | + AVR32_OPC_RETGE, 2, 0x5e400000, 0xfff00000, |
| 23823 | + &avr32_syntax_table[AVR32_SYNTAX_RETGE], |
| 23824 | + BFD_RELOC_NONE, 1, -1, |
| 23825 | + { |
| 23826 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23827 | + }, |
| 23828 | + }, |
| 23829 | + { |
| 23830 | + AVR32_OPC_RETLT, 2, 0x5e500000, 0xfff00000, |
| 23831 | + &avr32_syntax_table[AVR32_SYNTAX_RETLT], |
| 23832 | + BFD_RELOC_NONE, 1, -1, |
| 23833 | + { |
| 23834 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23835 | + }, |
| 23836 | + }, |
| 23837 | + { |
| 23838 | + AVR32_OPC_RETMI, 2, 0x5e600000, 0xfff00000, |
| 23839 | + &avr32_syntax_table[AVR32_SYNTAX_RETMI], |
| 23840 | + BFD_RELOC_NONE, 1, -1, |
| 23841 | + { |
| 23842 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23843 | + }, |
| 23844 | + }, |
| 23845 | + { |
| 23846 | + AVR32_OPC_RETPL, 2, 0x5e700000, 0xfff00000, |
| 23847 | + &avr32_syntax_table[AVR32_SYNTAX_RETPL], |
| 23848 | + BFD_RELOC_NONE, 1, -1, |
| 23849 | + { |
| 23850 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23851 | + }, |
| 23852 | + }, |
| 23853 | + { |
| 23854 | + AVR32_OPC_RETLS, 2, 0x5e800000, 0xfff00000, |
| 23855 | + &avr32_syntax_table[AVR32_SYNTAX_RETLS], |
| 23856 | + BFD_RELOC_NONE, 1, -1, |
| 23857 | + { |
| 23858 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23859 | + }, |
| 23860 | + }, |
| 23861 | + { |
| 23862 | + AVR32_OPC_RETGT, 2, 0x5e900000, 0xfff00000, |
| 23863 | + &avr32_syntax_table[AVR32_SYNTAX_RETGT], |
| 23864 | + BFD_RELOC_NONE, 1, -1, |
| 23865 | + { |
| 23866 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23867 | + }, |
| 23868 | + }, |
| 23869 | + { |
| 23870 | + AVR32_OPC_RETLE, 2, 0x5ea00000, 0xfff00000, |
| 23871 | + &avr32_syntax_table[AVR32_SYNTAX_RETLE], |
| 23872 | + BFD_RELOC_NONE, 1, -1, |
| 23873 | + { |
| 23874 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23875 | + }, |
| 23876 | + }, |
| 23877 | + { |
| 23878 | + AVR32_OPC_RETHI, 2, 0x5eb00000, 0xfff00000, |
| 23879 | + &avr32_syntax_table[AVR32_SYNTAX_RETHI], |
| 23880 | + BFD_RELOC_NONE, 1, -1, |
| 23881 | + { |
| 23882 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23883 | + }, |
| 23884 | + }, |
| 23885 | + { |
| 23886 | + AVR32_OPC_RETVS, 2, 0x5ec00000, 0xfff00000, |
| 23887 | + &avr32_syntax_table[AVR32_SYNTAX_RETVS], |
| 23888 | + BFD_RELOC_NONE, 1, -1, |
| 23889 | + { |
| 23890 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23891 | + }, |
| 23892 | + }, |
| 23893 | + { |
| 23894 | + AVR32_OPC_RETVC, 2, 0x5ed00000, 0xfff00000, |
| 23895 | + &avr32_syntax_table[AVR32_SYNTAX_RETVC], |
| 23896 | + BFD_RELOC_NONE, 1, -1, |
| 23897 | + { |
| 23898 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23899 | + }, |
| 23900 | + }, |
| 23901 | + { |
| 23902 | + AVR32_OPC_RETQS, 2, 0x5ee00000, 0xfff00000, |
| 23903 | + &avr32_syntax_table[AVR32_SYNTAX_RETQS], |
| 23904 | + BFD_RELOC_NONE, 1, -1, |
| 23905 | + { |
| 23906 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23907 | + }, |
| 23908 | + }, |
| 23909 | + { |
| 23910 | + AVR32_OPC_RETAL, 2, 0x5ef00000, 0xfff00000, |
| 23911 | + &avr32_syntax_table[AVR32_SYNTAX_RETAL], |
| 23912 | + BFD_RELOC_NONE, 1, -1, |
| 23913 | + { |
| 23914 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23915 | + }, |
| 23916 | + }, |
| 23917 | + { |
| 23918 | + AVR32_OPC_RETD, 2, 0xd6230000, 0xffff0000, |
| 23919 | + &avr32_syntax_table[AVR32_SYNTAX_RETD], |
| 23920 | + BFD_RELOC_NONE, 0, -1, { NULL }, |
| 23921 | + }, |
| 23922 | + { |
| 23923 | + AVR32_OPC_RETE, 2, 0xd6030000, 0xffff0000, |
| 23924 | + &avr32_syntax_table[AVR32_SYNTAX_RETE], |
| 23925 | + BFD_RELOC_NONE, 0, -1, { NULL }, |
| 23926 | + }, |
| 23927 | + { |
| 23928 | + AVR32_OPC_RETJ, 2, 0xd6330000, 0xffff0000, |
| 23929 | + &avr32_syntax_table[AVR32_SYNTAX_RETJ], |
| 23930 | + BFD_RELOC_NONE, 0, -1, { NULL }, |
| 23931 | + }, |
| 23932 | + { |
| 23933 | + AVR32_OPC_RETS, 2, 0xd6130000, 0xffff0000, |
| 23934 | + &avr32_syntax_table[AVR32_SYNTAX_RETS], |
| 23935 | + BFD_RELOC_NONE, 0, -1, { NULL }, |
| 23936 | + }, |
| 23937 | + { |
| 23938 | + AVR32_OPC_RJMP, 2, 0xc0080000, 0xf00c0000, |
| 23939 | + &avr32_syntax_table[AVR32_SYNTAX_RJMP], |
| 23940 | + BFD_RELOC_AVR32_11H_PCREL, 1, 0, |
| 23941 | + { |
| 23942 | + &avr32_ifield_table[AVR32_IFIELD_K10], |
| 23943 | + }, |
| 23944 | + }, |
| 23945 | + { |
| 23946 | + AVR32_OPC_ROL, 2, 0x5cf00000, 0xfff00000, |
| 23947 | + &avr32_syntax_table[AVR32_SYNTAX_ROL], |
| 23948 | + BFD_RELOC_UNUSED, 1, -1, |
| 23949 | + { |
| 23950 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23951 | + } |
| 23952 | + }, |
| 23953 | + { |
| 23954 | + AVR32_OPC_ROR, 2, 0x5d000000, 0xfff00000, |
| 23955 | + &avr32_syntax_table[AVR32_SYNTAX_ROR], |
| 23956 | + BFD_RELOC_UNUSED, 1, -1, |
| 23957 | + { |
| 23958 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23959 | + } |
| 23960 | + }, |
| 23961 | + { |
| 23962 | + AVR32_OPC_RSUB1, 2, 0x00200000, 0xe1f00000, |
| 23963 | + &avr32_syntax_table[AVR32_SYNTAX_RSUB1], |
| 23964 | + BFD_RELOC_UNUSED, 2, -1, |
| 23965 | + { |
| 23966 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23967 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23968 | + }, |
| 23969 | + }, |
| 23970 | + { |
| 23971 | + AVR32_OPC_RSUB2, 4, 0xe0001100, 0xe1f0ff00, |
| 23972 | + &avr32_syntax_table[AVR32_SYNTAX_RSUB2], |
| 23973 | + BFD_RELOC_AVR32_8S_EXT, 3, 2, |
| 23974 | + { |
| 23975 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23976 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23977 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 23978 | + }, |
| 23979 | + }, |
| 23980 | + { |
| 23981 | + AVR32_OPC_SATADD_H, 4, 0xe00002c0, 0xe1f0fff0, |
| 23982 | + &avr32_syntax_table[AVR32_SYNTAX_SATADD_H], |
| 23983 | + BFD_RELOC_UNUSED, 3, -1, |
| 23984 | + { |
| 23985 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23986 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23987 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23988 | + }, |
| 23989 | + }, |
| 23990 | + { |
| 23991 | + AVR32_OPC_SATADD_W, 4, 0xe00000c0, 0xe1f0fff0, |
| 23992 | + &avr32_syntax_table[AVR32_SYNTAX_SATADD_W], |
| 23993 | + BFD_RELOC_UNUSED, 3, -1, |
| 23994 | + { |
| 23995 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 23996 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 23997 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 23998 | + }, |
| 23999 | + }, |
| 24000 | + { |
| 24001 | + AVR32_OPC_SATRNDS, 4, 0xf3b00000, 0xfff0fc00, |
| 24002 | + &avr32_syntax_table[AVR32_SYNTAX_SATRNDS], |
| 24003 | + BFD_RELOC_UNUSED, 3, -1, |
| 24004 | + { |
| 24005 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24006 | + &avr32_ifield_table[AVR32_IFIELD_K5E], |
| 24007 | + &avr32_ifield_table[AVR32_IFIELD_S5], |
| 24008 | + }, |
| 24009 | + }, |
| 24010 | + { |
| 24011 | + AVR32_OPC_SATRNDU, 4, 0xf3b00400, 0xfff0fc00, |
| 24012 | + &avr32_syntax_table[AVR32_SYNTAX_SATRNDU], |
| 24013 | + BFD_RELOC_UNUSED, 3, -1, |
| 24014 | + { |
| 24015 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24016 | + &avr32_ifield_table[AVR32_IFIELD_K5E], |
| 24017 | + &avr32_ifield_table[AVR32_IFIELD_S5], |
| 24018 | + }, |
| 24019 | + }, |
| 24020 | + { |
| 24021 | + AVR32_OPC_SATS, 4, 0xf1b00000, 0xfff0fc00, |
| 24022 | + &avr32_syntax_table[AVR32_SYNTAX_SATS], |
| 24023 | + BFD_RELOC_UNUSED, 3, -1, |
| 24024 | + { |
| 24025 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24026 | + &avr32_ifield_table[AVR32_IFIELD_K5E], |
| 24027 | + &avr32_ifield_table[AVR32_IFIELD_S5], |
| 24028 | + }, |
| 24029 | + }, |
| 24030 | + { |
| 24031 | + AVR32_OPC_SATSUB_H, 4, 0xe00003c0, 0xe1f0fff0, |
| 24032 | + &avr32_syntax_table[AVR32_SYNTAX_SATSUB_H], |
| 24033 | + BFD_RELOC_UNUSED, 3, -1, |
| 24034 | + { |
| 24035 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 24036 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 24037 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24038 | + }, |
| 24039 | + }, |
| 24040 | + { |
| 24041 | + AVR32_OPC_SATSUB_W1, 4, 0xe00001c0, 0xe1f0fff0, |
| 24042 | + &avr32_syntax_table[AVR32_SYNTAX_SATSUB_W1], |
| 24043 | + BFD_RELOC_UNUSED, 3, -1, |
| 24044 | + { |
| 24045 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 24046 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 24047 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24048 | + }, |
| 24049 | + }, |
| 24050 | + { |
| 24051 | + AVR32_OPC_SATSUB_W2, 4, 0xe0d00000, 0xe1f00000, |
| 24052 | + &avr32_syntax_table[AVR32_SYNTAX_SATSUB_W2], |
| 24053 | + BFD_RELOC_UNUSED, 3, -1, |
| 24054 | + { |
| 24055 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24056 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 24057 | + &avr32_ifield_table[AVR32_IFIELD_K16], |
| 24058 | + }, |
| 24059 | + }, |
| 24060 | + { |
| 24061 | + AVR32_OPC_SATU, 4, 0xf1b00400, 0xfff0fc00, |
| 24062 | + &avr32_syntax_table[AVR32_SYNTAX_SATU], |
| 24063 | + BFD_RELOC_UNUSED, 3, -1, |
| 24064 | + { |
| 24065 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24066 | + &avr32_ifield_table[AVR32_IFIELD_K5E], |
| 24067 | + &avr32_ifield_table[AVR32_IFIELD_S5], |
| 24068 | + }, |
| 24069 | + }, |
| 24070 | + { |
| 24071 | + AVR32_OPC_SBC, 4, 0xe0000140, 0xe1f0fff0, |
| 24072 | + &avr32_syntax_table[AVR32_SYNTAX_SBC], |
| 24073 | + BFD_RELOC_UNUSED, 3, -1, |
| 24074 | + { |
| 24075 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 24076 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 24077 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24078 | + }, |
| 24079 | + }, |
| 24080 | + { |
| 24081 | + AVR32_OPC_SBR, 2, 0xa1a00000, 0xe1e00000, |
| 24082 | + &avr32_syntax_table[AVR32_SYNTAX_SBR], |
| 24083 | + BFD_RELOC_UNUSED, 2, -1, |
| 24084 | + { |
| 24085 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24086 | + &avr32_ifield_table[AVR32_IFIELD_BIT5C], |
| 24087 | + }, |
| 24088 | + }, |
| 24089 | + { |
| 24090 | + AVR32_OPC_SCALL, 2, 0xd7330000, 0xffff0000, |
| 24091 | + &avr32_syntax_table[AVR32_SYNTAX_SCALL], |
| 24092 | + BFD_RELOC_UNUSED, 0, -1, { NULL }, |
| 24093 | + }, |
| 24094 | + { |
| 24095 | + AVR32_OPC_SCR, 2, 0x5c100000, 0xfff00000, |
| 24096 | + &avr32_syntax_table[AVR32_SYNTAX_SCR], |
| 24097 | + BFD_RELOC_UNUSED, 1, -1, |
| 24098 | + { |
| 24099 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24100 | + }, |
| 24101 | + }, |
| 24102 | + { |
| 24103 | + AVR32_OPC_SLEEP, 4, 0xe9b00000, 0xffffff00, |
| 24104 | + &avr32_syntax_table[AVR32_SYNTAX_SLEEP], |
| 24105 | + BFD_RELOC_AVR32_8S_EXT, 1, 0, |
| 24106 | + { |
| 24107 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24108 | + }, |
| 24109 | + }, |
| 24110 | + { |
| 24111 | + AVR32_OPC_SREQ, 2, 0x5f000000, 0xfff00000, |
| 24112 | + &avr32_syntax_table[AVR32_SYNTAX_SREQ], |
| 24113 | + BFD_RELOC_UNUSED, 1, -1, |
| 24114 | + { |
| 24115 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24116 | + }, |
| 24117 | + }, |
| 24118 | + { |
| 24119 | + AVR32_OPC_SRNE, 2, 0x5f100000, 0xfff00000, |
| 24120 | + &avr32_syntax_table[AVR32_SYNTAX_SRNE], |
| 24121 | + BFD_RELOC_UNUSED, 1, -1, |
| 24122 | + { |
| 24123 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24124 | + }, |
| 24125 | + }, |
| 24126 | + { |
| 24127 | + AVR32_OPC_SRCC, 2, 0x5f200000, 0xfff00000, |
| 24128 | + &avr32_syntax_table[AVR32_SYNTAX_SRHS], |
| 24129 | + BFD_RELOC_UNUSED, 1, -1, |
| 24130 | + { |
| 24131 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24132 | + }, |
| 24133 | + }, |
| 24134 | + { |
| 24135 | + AVR32_OPC_SRCS, 2, 0x5f300000, 0xfff00000, |
| 24136 | + &avr32_syntax_table[AVR32_SYNTAX_SRLO], |
| 24137 | + BFD_RELOC_UNUSED, 1, -1, |
| 24138 | + { |
| 24139 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24140 | + }, |
| 24141 | + }, |
| 24142 | + { |
| 24143 | + AVR32_OPC_SRGE, 2, 0x5f400000, 0xfff00000, |
| 24144 | + &avr32_syntax_table[AVR32_SYNTAX_SRGE], |
| 24145 | + BFD_RELOC_UNUSED, 1, -1, |
| 24146 | + { |
| 24147 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24148 | + }, |
| 24149 | + }, |
| 24150 | + { |
| 24151 | + AVR32_OPC_SRLT, 2, 0x5f500000, 0xfff00000, |
| 24152 | + &avr32_syntax_table[AVR32_SYNTAX_SRLT], |
| 24153 | + BFD_RELOC_UNUSED, 1, -1, |
| 24154 | + { |
| 24155 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24156 | + }, |
| 24157 | + }, |
| 24158 | + { |
| 24159 | + AVR32_OPC_SRMI, 2, 0x5f600000, 0xfff00000, |
| 24160 | + &avr32_syntax_table[AVR32_SYNTAX_SRMI], |
| 24161 | + BFD_RELOC_UNUSED, 1, -1, |
| 24162 | + { |
| 24163 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24164 | + }, |
| 24165 | + }, |
| 24166 | + { |
| 24167 | + AVR32_OPC_SRPL, 2, 0x5f700000, 0xfff00000, |
| 24168 | + &avr32_syntax_table[AVR32_SYNTAX_SRPL], |
| 24169 | + BFD_RELOC_UNUSED, 1, -1, |
| 24170 | + { |
| 24171 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24172 | + }, |
| 24173 | + }, |
| 24174 | + { |
| 24175 | + AVR32_OPC_SRLS, 2, 0x5f800000, 0xfff00000, |
| 24176 | + &avr32_syntax_table[AVR32_SYNTAX_SRLS], |
| 24177 | + BFD_RELOC_UNUSED, 1, -1, |
| 24178 | + { |
| 24179 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24180 | + }, |
| 24181 | + }, |
| 24182 | + { |
| 24183 | + AVR32_OPC_SRGT, 2, 0x5f900000, 0xfff00000, |
| 24184 | + &avr32_syntax_table[AVR32_SYNTAX_SRGT], |
| 24185 | + BFD_RELOC_UNUSED, 1, -1, |
| 24186 | + { |
| 24187 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24188 | + }, |
| 24189 | + }, |
| 24190 | + { |
| 24191 | + AVR32_OPC_SRLE, 2, 0x5fa00000, 0xfff00000, |
| 24192 | + &avr32_syntax_table[AVR32_SYNTAX_SRLE], |
| 24193 | + BFD_RELOC_UNUSED, 1, -1, |
| 24194 | + { |
| 24195 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24196 | + }, |
| 24197 | + }, |
| 24198 | + { |
| 24199 | + AVR32_OPC_SRHI, 2, 0x5fb00000, 0xfff00000, |
| 24200 | + &avr32_syntax_table[AVR32_SYNTAX_SRHI], |
| 24201 | + BFD_RELOC_UNUSED, 1, -1, |
| 24202 | + { |
| 24203 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24204 | + }, |
| 24205 | + }, |
| 24206 | + { |
| 24207 | + AVR32_OPC_SRVS, 2, 0x5fc00000, 0xfff00000, |
| 24208 | + &avr32_syntax_table[AVR32_SYNTAX_SRVS], |
| 24209 | + BFD_RELOC_UNUSED, 1, -1, |
| 24210 | + { |
| 24211 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24212 | + }, |
| 24213 | + }, |
| 24214 | + { |
| 24215 | + AVR32_OPC_SRVC, 2, 0x5fd00000, 0xfff00000, |
| 24216 | + &avr32_syntax_table[AVR32_SYNTAX_SRVC], |
| 24217 | + BFD_RELOC_UNUSED, 1, -1, |
| 24218 | + { |
| 24219 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24220 | + }, |
| 24221 | + }, |
| 24222 | + { |
| 24223 | + AVR32_OPC_SRQS, 2, 0x5fe00000, 0xfff00000, |
| 24224 | + &avr32_syntax_table[AVR32_SYNTAX_SRQS], |
| 24225 | + BFD_RELOC_UNUSED, 1, -1, |
| 24226 | + { |
| 24227 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24228 | + }, |
| 24229 | + }, |
| 24230 | + { |
| 24231 | + AVR32_OPC_SRAL, 2, 0x5ff00000, 0xfff00000, |
| 24232 | + &avr32_syntax_table[AVR32_SYNTAX_SRAL], |
| 24233 | + BFD_RELOC_UNUSED, 1, -1, |
| 24234 | + { |
| 24235 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24236 | + }, |
| 24237 | + }, |
| 24238 | + { |
| 24239 | + AVR32_OPC_SSRF, 2, 0xd2030000, 0xfe0f0000, |
| 24240 | + &avr32_syntax_table[AVR32_SYNTAX_SSRF], |
| 24241 | + BFD_RELOC_UNUSED, 1, -1, |
| 24242 | + { |
| 24243 | + &avr32_ifield_table[AVR32_IFIELD_K5C], |
| 24244 | + }, |
| 24245 | + }, |
| 24246 | + { |
| 24247 | + AVR32_OPC_ST_B1, 2, 0x00c00000, 0xe1f00000, |
| 24248 | + &avr32_syntax_table[AVR32_SYNTAX_ST_B1], |
| 24249 | + BFD_RELOC_UNUSED, 2, -1, |
| 24250 | + { |
| 24251 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 24252 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24253 | + }, |
| 24254 | + }, |
| 24255 | + { |
| 24256 | + AVR32_OPC_ST_B2, 2, 0x00f00000, 0xe1f00000, |
| 24257 | + &avr32_syntax_table[AVR32_SYNTAX_ST_B2], |
| 24258 | + BFD_RELOC_UNUSED, 2, -1, |
| 24259 | + { |
| 24260 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 24261 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24262 | + }, |
| 24263 | + }, |
| 24264 | + { |
| 24265 | + AVR32_OPC_ST_B5, 4, 0xe0000b00, 0xe1f0ffc0, |
| 24266 | + &avr32_syntax_table[AVR32_SYNTAX_ST_B5], |
| 24267 | + BFD_RELOC_UNUSED, 4, -1, |
| 24268 | + { |
| 24269 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 24270 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24271 | + &avr32_ifield_table[AVR32_IFIELD_K2], |
| 24272 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 24273 | + }, |
| 24274 | + }, |
| 24275 | + { |
| 24276 | + AVR32_OPC_ST_B3, 2, 0xa0800000, 0xe1800000, |
| 24277 | + &avr32_syntax_table[AVR32_SYNTAX_ST_B3], |
| 24278 | + BFD_RELOC_AVR32_3U, 3, 1, |
| 24279 | + { |
| 24280 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 24281 | + &avr32_ifield_table[AVR32_IFIELD_K3], |
| 24282 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24283 | + }, |
| 24284 | + }, |
| 24285 | + { |
| 24286 | + AVR32_OPC_ST_B4, 4, 0xe1600000, 0xe1f00000, |
| 24287 | + &avr32_syntax_table[AVR32_SYNTAX_ST_B4], |
| 24288 | + BFD_RELOC_AVR32_16S, 3, 1, |
| 24289 | + { |
| 24290 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 24291 | + &avr32_ifield_table[AVR32_IFIELD_K16], |
| 24292 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24293 | + }, |
| 24294 | + }, |
| 24295 | + { |
| 24296 | + AVR32_OPC_ST_D1, 2, 0xa1200000, 0xe1f10000, |
| 24297 | + &avr32_syntax_table[AVR32_SYNTAX_ST_D1], |
| 24298 | + BFD_RELOC_UNUSED, 2, -1, |
| 24299 | + { |
| 24300 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 24301 | + &avr32_ifield_table[AVR32_IFIELD_RY_DW], |
| 24302 | + }, |
| 24303 | + }, |
| 24304 | + { |
| 24305 | + AVR32_OPC_ST_D2, 2, 0xa1210000, 0xe1f10000, |
| 24306 | + &avr32_syntax_table[AVR32_SYNTAX_ST_D2], |
| 24307 | + BFD_RELOC_UNUSED, 2, -1, |
| 24308 | + { |
| 24309 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 24310 | + &avr32_ifield_table[AVR32_IFIELD_RY_DW], |
| 24311 | + }, |
| 24312 | + }, |
| 24313 | + { |
| 24314 | + AVR32_OPC_ST_D3, 2, 0xa1110000, 0xe1f10000, |
| 24315 | + &avr32_syntax_table[AVR32_SYNTAX_ST_D3], |
| 24316 | + BFD_RELOC_UNUSED, 2, -1, |
| 24317 | + { |
| 24318 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 24319 | + &avr32_ifield_table[AVR32_IFIELD_RY_DW], |
| 24320 | + }, |
| 24321 | + }, |
| 24322 | + { |
| 24323 | + AVR32_OPC_ST_D5, 4, 0xe0000800, 0xe1f0ffc1, |
| 24324 | + &avr32_syntax_table[AVR32_SYNTAX_ST_D5], |
| 24325 | + BFD_RELOC_UNUSED, 4, -1, |
| 24326 | + { |
| 24327 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 24328 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24329 | + &avr32_ifield_table[AVR32_IFIELD_K2], |
| 24330 | + &avr32_ifield_table[AVR32_IFIELD_RD_DW], |
| 24331 | + }, |
| 24332 | + }, |
| 24333 | + { |
| 24334 | + AVR32_OPC_ST_D4, 4, 0xe0e10000, 0xe1f10000, |
| 24335 | + &avr32_syntax_table[AVR32_SYNTAX_ST_D4], |
| 24336 | + BFD_RELOC_AVR32_16S, 3, 1, |
| 24337 | + { |
| 24338 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 24339 | + &avr32_ifield_table[AVR32_IFIELD_K16], |
| 24340 | + &avr32_ifield_table[AVR32_IFIELD_RY_DW], |
| 24341 | + }, |
| 24342 | + }, |
| 24343 | + { |
| 24344 | + AVR32_OPC_ST_H1, 2, 0x00b00000, 0xe1f00000, |
| 24345 | + &avr32_syntax_table[AVR32_SYNTAX_ST_H1], |
| 24346 | + BFD_RELOC_UNUSED, 2, -1, |
| 24347 | + { |
| 24348 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 24349 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24350 | + }, |
| 24351 | + }, |
| 24352 | + { |
| 24353 | + AVR32_OPC_ST_H2, 2, 0x00e00000, 0xe1f00000, |
| 24354 | + &avr32_syntax_table[AVR32_SYNTAX_ST_H2], |
| 24355 | + BFD_RELOC_UNUSED, 2, -1, |
| 24356 | + { |
| 24357 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 24358 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24359 | + }, |
| 24360 | + }, |
| 24361 | + { |
| 24362 | + AVR32_OPC_ST_H5, 4, 0xe0000a00, 0xe1f0ffc0, |
| 24363 | + &avr32_syntax_table[AVR32_SYNTAX_ST_H5], |
| 24364 | + BFD_RELOC_UNUSED, 4, -1, |
| 24365 | + { |
| 24366 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 24367 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24368 | + &avr32_ifield_table[AVR32_IFIELD_K2], |
| 24369 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 24370 | + }, |
| 24371 | + }, |
| 24372 | + { |
| 24373 | + AVR32_OPC_ST_H3, 2, 0xa0000000, 0xe1800000, |
| 24374 | + &avr32_syntax_table[AVR32_SYNTAX_ST_H3], |
| 24375 | + BFD_RELOC_AVR32_4UH, 3, 1, |
| 24376 | + { |
| 24377 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 24378 | + &avr32_ifield_table[AVR32_IFIELD_K3], |
| 24379 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24380 | + }, |
| 24381 | + }, |
| 24382 | + { |
| 24383 | + AVR32_OPC_ST_H4, 4, 0xe1500000, 0xe1f00000, |
| 24384 | + &avr32_syntax_table[AVR32_SYNTAX_ST_H4], |
| 24385 | + BFD_RELOC_AVR32_16S, 3, 1, |
| 24386 | + { |
| 24387 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 24388 | + &avr32_ifield_table[AVR32_IFIELD_K16], |
| 24389 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24390 | + }, |
| 24391 | + }, |
| 24392 | + { |
| 24393 | + AVR32_OPC_ST_W1, 2, 0x00a00000, 0xe1f00000, |
| 24394 | + &avr32_syntax_table[AVR32_SYNTAX_ST_W1], |
| 24395 | + BFD_RELOC_UNUSED, 2, -1, |
| 24396 | + { |
| 24397 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 24398 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24399 | + }, |
| 24400 | + }, |
| 24401 | + { |
| 24402 | + AVR32_OPC_ST_W2, 2, 0x00d00000, 0xe1f00000, |
| 24403 | + &avr32_syntax_table[AVR32_SYNTAX_ST_W2], |
| 24404 | + BFD_RELOC_UNUSED, 2, -1, |
| 24405 | + { |
| 24406 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 24407 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24408 | + }, |
| 24409 | + }, |
| 24410 | + { |
| 24411 | + AVR32_OPC_ST_W5, 4, 0xe0000900, 0xe1f0ffc0, |
| 24412 | + &avr32_syntax_table[AVR32_SYNTAX_ST_W5], |
| 24413 | + BFD_RELOC_UNUSED, 4, -1, |
| 24414 | + { |
| 24415 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 24416 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24417 | + &avr32_ifield_table[AVR32_IFIELD_K2], |
| 24418 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 24419 | + }, |
| 24420 | + }, |
| 24421 | + { |
| 24422 | + AVR32_OPC_ST_W3, 2, 0x81000000, 0xe1000000, |
| 24423 | + &avr32_syntax_table[AVR32_SYNTAX_ST_W3], |
| 24424 | + BFD_RELOC_AVR32_6UW, 3, 1, |
| 24425 | + { |
| 24426 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 24427 | + &avr32_ifield_table[AVR32_IFIELD_K4], |
| 24428 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24429 | + }, |
| 24430 | + }, |
| 24431 | + { |
| 24432 | + AVR32_OPC_ST_W4, 4, 0xe1400000, 0xe1f00000, |
| 24433 | + &avr32_syntax_table[AVR32_SYNTAX_ST_W4], |
| 24434 | + BFD_RELOC_AVR32_16S, 3, 1, |
| 24435 | + { |
| 24436 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 24437 | + &avr32_ifield_table[AVR32_IFIELD_K16], |
| 24438 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24439 | + }, |
| 24440 | + }, |
| 24441 | + { |
| 24442 | + AVR32_OPC_STC_D1, 4, 0xeba01000, 0xfff01100, |
| 24443 | + &avr32_syntax_table[AVR32_SYNTAX_STC_D1], |
| 24444 | + BFD_RELOC_AVR32_10UW, 4, 2, |
| 24445 | + { |
| 24446 | + &avr32_ifield_table[AVR32_IFIELD_CPNO], |
| 24447 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24448 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24449 | + &avr32_ifield_table[AVR32_IFIELD_CRD_DW], |
| 24450 | + }, |
| 24451 | + }, |
| 24452 | + { |
| 24453 | + AVR32_OPC_STC_D2, 4, 0xefa00070, 0xfff011f0, |
| 24454 | + &avr32_syntax_table[AVR32_SYNTAX_STC_D2], |
| 24455 | + BFD_RELOC_UNUSED, 3, -1, |
| 24456 | + { |
| 24457 | + &avr32_ifield_table[AVR32_IFIELD_CPNO], |
| 24458 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24459 | + &avr32_ifield_table[AVR32_IFIELD_CRD_DW], |
| 24460 | + }, |
| 24461 | + }, |
| 24462 | + { |
| 24463 | + AVR32_OPC_STC_D3, 4, 0xefa010c0, 0xfff011c0, |
| 24464 | + &avr32_syntax_table[AVR32_SYNTAX_STC_D3], |
| 24465 | + BFD_RELOC_UNUSED, 5, -1, |
| 24466 | + { |
| 24467 | + &avr32_ifield_table[AVR32_IFIELD_CPNO], |
| 24468 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24469 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 24470 | + &avr32_ifield_table[AVR32_IFIELD_K2], |
| 24471 | + &avr32_ifield_table[AVR32_IFIELD_CRD_DW], |
| 24472 | + }, |
| 24473 | + }, |
| 24474 | + { |
| 24475 | + AVR32_OPC_STC_W1, 4, 0xeba00000, 0xfff01000, |
| 24476 | + &avr32_syntax_table[AVR32_SYNTAX_STC_W1], |
| 24477 | + BFD_RELOC_AVR32_10UW, 4, 2, |
| 24478 | + { |
| 24479 | + &avr32_ifield_table[AVR32_IFIELD_CPNO], |
| 24480 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24481 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24482 | + &avr32_ifield_table[AVR32_IFIELD_CRD_RI], |
| 24483 | + }, |
| 24484 | + }, |
| 24485 | + { |
| 24486 | + AVR32_OPC_STC_W2, 4, 0xefa00060, 0xfff010ff, |
| 24487 | + &avr32_syntax_table[AVR32_SYNTAX_STC_W2], |
| 24488 | + BFD_RELOC_UNUSED, 3, -1, |
| 24489 | + { |
| 24490 | + &avr32_ifield_table[AVR32_IFIELD_CPNO], |
| 24491 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24492 | + &avr32_ifield_table[AVR32_IFIELD_CRD_RI], |
| 24493 | + }, |
| 24494 | + }, |
| 24495 | + { |
| 24496 | + AVR32_OPC_STC_W3, 4, 0xefa01080, 0xfff010c0, |
| 24497 | + &avr32_syntax_table[AVR32_SYNTAX_STC_W3], |
| 24498 | + BFD_RELOC_UNUSED, 5, -1, |
| 24499 | + { |
| 24500 | + &avr32_ifield_table[AVR32_IFIELD_CPNO], |
| 24501 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24502 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 24503 | + &avr32_ifield_table[AVR32_IFIELD_K2], |
| 24504 | + &avr32_ifield_table[AVR32_IFIELD_CRD_RI], |
| 24505 | + }, |
| 24506 | + }, |
| 24507 | + { |
| 24508 | + AVR32_OPC_STC0_D, 4, 0xf7a00000, 0xfff00100, |
| 24509 | + &avr32_syntax_table[AVR32_SYNTAX_STC0_D], |
| 24510 | + BFD_RELOC_AVR32_14UW, 3, 1, |
| 24511 | + { |
| 24512 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24513 | + &avr32_ifield_table[AVR32_IFIELD_K12CP], |
| 24514 | + &avr32_ifield_table[AVR32_IFIELD_CRD_DW], |
| 24515 | + }, |
| 24516 | + }, |
| 24517 | + { |
| 24518 | + AVR32_OPC_STC0_W, 4, 0xf5a00000, 0xfff00000, |
| 24519 | + &avr32_syntax_table[AVR32_SYNTAX_STC0_W], |
| 24520 | + BFD_RELOC_AVR32_14UW, 3, 1, |
| 24521 | + { |
| 24522 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24523 | + &avr32_ifield_table[AVR32_IFIELD_K12CP], |
| 24524 | + &avr32_ifield_table[AVR32_IFIELD_CRD_RI], |
| 24525 | + }, |
| 24526 | + }, |
| 24527 | + { |
| 24528 | + AVR32_OPC_STCM_D, 4, 0xeda00500, 0xfff01f00, |
| 24529 | + &avr32_syntax_table[AVR32_SYNTAX_STCM_D], |
| 24530 | + BFD_RELOC_UNUSED, 3, -1, |
| 24531 | + { |
| 24532 | + &avr32_ifield_table[AVR32_IFIELD_CPNO], |
| 24533 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24534 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24535 | + }, |
| 24536 | + }, |
| 24537 | + { |
| 24538 | + AVR32_OPC_STCM_D_PU, 4, 0xeda01500, 0xfff01f00, |
| 24539 | + &avr32_syntax_table[AVR32_SYNTAX_STCM_D_PU], |
| 24540 | + BFD_RELOC_UNUSED, 3, -1, |
| 24541 | + { |
| 24542 | + &avr32_ifield_table[AVR32_IFIELD_CPNO], |
| 24543 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24544 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24545 | + }, |
| 24546 | + }, |
| 24547 | + { |
| 24548 | + AVR32_OPC_STCM_W, 4, 0xeda00200, 0xfff01e00, |
| 24549 | + &avr32_syntax_table[AVR32_SYNTAX_STCM_W], |
| 24550 | + BFD_RELOC_UNUSED, 4, -1, |
| 24551 | + { |
| 24552 | + &avr32_ifield_table[AVR32_IFIELD_CPNO], |
| 24553 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24554 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24555 | + &avr32_ifield_table[AVR32_IFIELD_CM_HL], |
| 24556 | + }, |
| 24557 | + }, |
| 24558 | + { |
| 24559 | + AVR32_OPC_STCM_W_PU, 4, 0xeda01200, 0xfff01e00, |
| 24560 | + &avr32_syntax_table[AVR32_SYNTAX_STCM_W_PU], |
| 24561 | + BFD_RELOC_UNUSED, 4, -1, |
| 24562 | + { |
| 24563 | + &avr32_ifield_table[AVR32_IFIELD_CPNO], |
| 24564 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24565 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24566 | + &avr32_ifield_table[AVR32_IFIELD_CM_HL], |
| 24567 | + }, |
| 24568 | + }, |
| 24569 | + { |
| 24570 | + AVR32_OPC_STCOND, 4, 0xe1700000, 0xe1f00000, |
| 24571 | + &avr32_syntax_table[AVR32_SYNTAX_STCOND], |
| 24572 | + BFD_RELOC_UNUSED, 3, -1, |
| 24573 | + { |
| 24574 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 24575 | + &avr32_ifield_table[AVR32_IFIELD_K16], |
| 24576 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24577 | + }, |
| 24578 | + }, |
| 24579 | + { |
| 24580 | + AVR32_OPC_STDSP, 2, 0x50000000, 0xf8000000, |
| 24581 | + &avr32_syntax_table[AVR32_SYNTAX_STDSP], |
| 24582 | + BFD_RELOC_UNUSED, 2, -1, |
| 24583 | + { |
| 24584 | + &avr32_ifield_table[AVR32_IFIELD_K7C], |
| 24585 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24586 | + }, |
| 24587 | + }, |
| 24588 | + { |
| 24589 | + AVR32_OPC_STHH_W2, 4, 0xe1e08000, 0xe1f0c0c0, |
| 24590 | + &avr32_syntax_table[AVR32_SYNTAX_STHH_W2], |
| 24591 | + BFD_RELOC_UNUSED, 7, -1, |
| 24592 | + { |
| 24593 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 24594 | + &avr32_ifield_table[AVR32_IFIELD_CRD_RI], |
| 24595 | + &avr32_ifield_table[AVR32_IFIELD_K2], |
| 24596 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 24597 | + &avr32_ifield_table[AVR32_IFIELD_X2], |
| 24598 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24599 | + &avr32_ifield_table[AVR32_IFIELD_Y2], |
| 24600 | + }, |
| 24601 | + }, |
| 24602 | + { |
| 24603 | + AVR32_OPC_STHH_W1, 4, 0xe1e0c000, 0xe1f0c000, |
| 24604 | + &avr32_syntax_table[AVR32_SYNTAX_STHH_W1], |
| 24605 | + BFD_RELOC_AVR32_STHH_W, 6, 1, |
| 24606 | + { |
| 24607 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 24608 | + &avr32_ifield_table[AVR32_IFIELD_K8E2], |
| 24609 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 24610 | + &avr32_ifield_table[AVR32_IFIELD_X2], |
| 24611 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24612 | + &avr32_ifield_table[AVR32_IFIELD_Y2], |
| 24613 | + }, |
| 24614 | + }, |
| 24615 | + { |
| 24616 | + AVR32_OPC_STM, 4, 0xe9c00000, 0xfff00000, |
| 24617 | + &avr32_syntax_table[AVR32_SYNTAX_STM], |
| 24618 | + BFD_RELOC_UNUSED, 2, -1, |
| 24619 | + { |
| 24620 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24621 | + &avr32_ifield_table[AVR32_IFIELD_K16], |
| 24622 | + }, |
| 24623 | + }, |
| 24624 | + { |
| 24625 | + AVR32_OPC_STM_PU, 4, 0xebc00000, 0xfff00000, |
| 24626 | + &avr32_syntax_table[AVR32_SYNTAX_STM_PU], |
| 24627 | + BFD_RELOC_UNUSED, 2, -1, |
| 24628 | + { |
| 24629 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24630 | + &avr32_ifield_table[AVR32_IFIELD_K16], |
| 24631 | + }, |
| 24632 | + }, |
| 24633 | + { |
| 24634 | + AVR32_OPC_STMTS, 4, 0xedc00000, 0xfff00000, |
| 24635 | + &avr32_syntax_table[AVR32_SYNTAX_STMTS], |
| 24636 | + BFD_RELOC_UNUSED, 2, -1, |
| 24637 | + { |
| 24638 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24639 | + &avr32_ifield_table[AVR32_IFIELD_K16], |
| 24640 | + }, |
| 24641 | + }, |
| 24642 | + { |
| 24643 | + AVR32_OPC_STMTS_PU, 4, 0xefc00000, 0xfff00000, |
| 24644 | + &avr32_syntax_table[AVR32_SYNTAX_STMTS_PU], |
| 24645 | + BFD_RELOC_UNUSED, 2, -1, |
| 24646 | + { |
| 24647 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24648 | + &avr32_ifield_table[AVR32_IFIELD_K16], |
| 24649 | + }, |
| 24650 | + }, |
| 24651 | + { |
| 24652 | + AVR32_OPC_STSWP_H, 4, 0xe1d09000, 0xe1f0f000, |
| 24653 | + &avr32_syntax_table[AVR32_SYNTAX_STSWP_H], |
| 24654 | + BFD_RELOC_UNUSED, 3, -1, |
| 24655 | + { |
| 24656 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 24657 | + &avr32_ifield_table[AVR32_IFIELD_K12], |
| 24658 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24659 | + }, |
| 24660 | + }, |
| 24661 | + { |
| 24662 | + AVR32_OPC_STSWP_W, 4, 0xe1d0a000, 0xe1f0f000, |
| 24663 | + &avr32_syntax_table[AVR32_SYNTAX_STSWP_W], |
| 24664 | + BFD_RELOC_UNUSED, 3, -1, |
| 24665 | + { |
| 24666 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 24667 | + &avr32_ifield_table[AVR32_IFIELD_K12], |
| 24668 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24669 | + }, |
| 24670 | + }, |
| 24671 | + { |
| 24672 | + AVR32_OPC_SUB1, 2, 0x00100000, 0xe1f00000, |
| 24673 | + &avr32_syntax_table[AVR32_SYNTAX_SUB1], |
| 24674 | + BFD_RELOC_UNUSED, 2, -1, |
| 24675 | + { |
| 24676 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24677 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 24678 | + }, |
| 24679 | + }, |
| 24680 | + { |
| 24681 | + AVR32_OPC_SUB2, 4, 0xe0000100, 0xe1f0ffc0, |
| 24682 | + &avr32_syntax_table[AVR32_SYNTAX_SUB2], |
| 24683 | + BFD_RELOC_UNUSED, 4, -1, |
| 24684 | + { |
| 24685 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 24686 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 24687 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24688 | + &avr32_ifield_table[AVR32_IFIELD_K2], |
| 24689 | + }, |
| 24690 | + }, |
| 24691 | + { |
| 24692 | + AVR32_OPC_SUB5, 4, 0xe0c00000, 0xe1f00000, |
| 24693 | + &avr32_syntax_table[AVR32_SYNTAX_SUB5], |
| 24694 | + BFD_RELOC_AVR32_SUB5, 3, 2, |
| 24695 | + { |
| 24696 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24697 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 24698 | + &avr32_ifield_table[AVR32_IFIELD_K16], |
| 24699 | + }, |
| 24700 | + }, |
| 24701 | + { |
| 24702 | + AVR32_OPC_SUB3_SP, 2, 0x200d0000, 0xf00f0000, |
| 24703 | + &avr32_syntax_table[AVR32_SYNTAX_SUB3_SP], |
| 24704 | + BFD_RELOC_AVR32_10SW, 2, 1, |
| 24705 | + { |
| 24706 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24707 | + &avr32_ifield_table[AVR32_IFIELD_K8C], |
| 24708 | + }, |
| 24709 | + }, |
| 24710 | + { |
| 24711 | + AVR32_OPC_SUB3, 2, 0x20000000, 0xf0000000, |
| 24712 | + &avr32_syntax_table[AVR32_SYNTAX_SUB3], |
| 24713 | + BFD_RELOC_AVR32_8S, 2, 1, |
| 24714 | + { |
| 24715 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24716 | + &avr32_ifield_table[AVR32_IFIELD_K8C], |
| 24717 | + }, |
| 24718 | + }, |
| 24719 | + { |
| 24720 | + AVR32_OPC_SUB4, 4, 0xe0200000, 0xe1e00000, |
| 24721 | + &avr32_syntax_table[AVR32_SYNTAX_SUB4], |
| 24722 | + BFD_RELOC_AVR32_21S, 2, 1, |
| 24723 | + { |
| 24724 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24725 | + &avr32_ifield_table[AVR32_IFIELD_K21], |
| 24726 | + }, |
| 24727 | + }, |
| 24728 | + { |
| 24729 | + AVR32_OPC_SUBEQ, 4, 0xf7b00000, 0xfff0ff00, |
| 24730 | + &avr32_syntax_table[AVR32_SYNTAX_SUBEQ], |
| 24731 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 24732 | + { |
| 24733 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24734 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24735 | + }, |
| 24736 | + }, |
| 24737 | + { |
| 24738 | + AVR32_OPC_SUBNE, 4, 0xf7b00100, 0xfff0ff00, |
| 24739 | + &avr32_syntax_table[AVR32_SYNTAX_SUBNE], |
| 24740 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 24741 | + { |
| 24742 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24743 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24744 | + }, |
| 24745 | + }, |
| 24746 | + { |
| 24747 | + AVR32_OPC_SUBCC, 4, 0xf7b00200, 0xfff0ff00, |
| 24748 | + &avr32_syntax_table[AVR32_SYNTAX_SUBHS], |
| 24749 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 24750 | + { |
| 24751 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24752 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24753 | + }, |
| 24754 | + }, |
| 24755 | + { |
| 24756 | + AVR32_OPC_SUBCS, 4, 0xf7b00300, 0xfff0ff00, |
| 24757 | + &avr32_syntax_table[AVR32_SYNTAX_SUBLO], |
| 24758 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 24759 | + { |
| 24760 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24761 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24762 | + }, |
| 24763 | + }, |
| 24764 | + { |
| 24765 | + AVR32_OPC_SUBGE, 4, 0xf7b00400, 0xfff0ff00, |
| 24766 | + &avr32_syntax_table[AVR32_SYNTAX_SUBGE], |
| 24767 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 24768 | + { |
| 24769 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24770 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24771 | + }, |
| 24772 | + }, |
| 24773 | + { |
| 24774 | + AVR32_OPC_SUBLT, 4, 0xf7b00500, 0xfff0ff00, |
| 24775 | + &avr32_syntax_table[AVR32_SYNTAX_SUBLT], |
| 24776 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 24777 | + { |
| 24778 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24779 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24780 | + }, |
| 24781 | + }, |
| 24782 | + { |
| 24783 | + AVR32_OPC_SUBMI, 4, 0xf7b00600, 0xfff0ff00, |
| 24784 | + &avr32_syntax_table[AVR32_SYNTAX_SUBMI], |
| 24785 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 24786 | + { |
| 24787 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24788 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24789 | + }, |
| 24790 | + }, |
| 24791 | + { |
| 24792 | + AVR32_OPC_SUBPL, 4, 0xf7b00700, 0xfff0ff00, |
| 24793 | + &avr32_syntax_table[AVR32_SYNTAX_SUBPL], |
| 24794 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 24795 | + { |
| 24796 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24797 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24798 | + }, |
| 24799 | + }, |
| 24800 | + { |
| 24801 | + AVR32_OPC_SUBLS, 4, 0xf7b00800, 0xfff0ff00, |
| 24802 | + &avr32_syntax_table[AVR32_SYNTAX_SUBLS], |
| 24803 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 24804 | + { |
| 24805 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24806 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24807 | + }, |
| 24808 | + }, |
| 24809 | + { |
| 24810 | + AVR32_OPC_SUBGT, 4, 0xf7b00900, 0xfff0ff00, |
| 24811 | + &avr32_syntax_table[AVR32_SYNTAX_SUBGT], |
| 24812 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 24813 | + { |
| 24814 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24815 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24816 | + }, |
| 24817 | + }, |
| 24818 | + { |
| 24819 | + AVR32_OPC_SUBLE, 4, 0xf7b00a00, 0xfff0ff00, |
| 24820 | + &avr32_syntax_table[AVR32_SYNTAX_SUBLE], |
| 24821 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 24822 | + { |
| 24823 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24824 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24825 | + }, |
| 24826 | + }, |
| 24827 | + { |
| 24828 | + AVR32_OPC_SUBHI, 4, 0xf7b00b00, 0xfff0ff00, |
| 24829 | + &avr32_syntax_table[AVR32_SYNTAX_SUBHI], |
| 24830 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 24831 | + { |
| 24832 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24833 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24834 | + }, |
| 24835 | + }, |
| 24836 | + { |
| 24837 | + AVR32_OPC_SUBVS, 4, 0xf7b00c00, 0xfff0ff00, |
| 24838 | + &avr32_syntax_table[AVR32_SYNTAX_SUBVS], |
| 24839 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 24840 | + { |
| 24841 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24842 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24843 | + }, |
| 24844 | + }, |
| 24845 | + { |
| 24846 | + AVR32_OPC_SUBVC, 4, 0xf7b00d00, 0xfff0ff00, |
| 24847 | + &avr32_syntax_table[AVR32_SYNTAX_SUBVC], |
| 24848 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 24849 | + { |
| 24850 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24851 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24852 | + }, |
| 24853 | + }, |
| 24854 | + { |
| 24855 | + AVR32_OPC_SUBQS, 4, 0xf7b00e00, 0xfff0ff00, |
| 24856 | + &avr32_syntax_table[AVR32_SYNTAX_SUBQS], |
| 24857 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 24858 | + { |
| 24859 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24860 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24861 | + }, |
| 24862 | + }, |
| 24863 | + { |
| 24864 | + AVR32_OPC_SUBAL, 4, 0xf7b00f00, 0xfff0ff00, |
| 24865 | + &avr32_syntax_table[AVR32_SYNTAX_SUBAL], |
| 24866 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 24867 | + { |
| 24868 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24869 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24870 | + }, |
| 24871 | + }, |
| 24872 | + { |
| 24873 | + AVR32_OPC_SUBFEQ, 4, 0xf5b00000, 0xfff0ff00, |
| 24874 | + &avr32_syntax_table[AVR32_SYNTAX_SUBFEQ], |
| 24875 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 24876 | + { |
| 24877 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24878 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24879 | + }, |
| 24880 | + }, |
| 24881 | + { |
| 24882 | + AVR32_OPC_SUBFNE, 4, 0xf5b00100, 0xfff0ff00, |
| 24883 | + &avr32_syntax_table[AVR32_SYNTAX_SUBFNE], |
| 24884 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 24885 | + { |
| 24886 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24887 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24888 | + }, |
| 24889 | + }, |
| 24890 | + { |
| 24891 | + AVR32_OPC_SUBFCC, 4, 0xf5b00200, 0xfff0ff00, |
| 24892 | + &avr32_syntax_table[AVR32_SYNTAX_SUBFHS], |
| 24893 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 24894 | + { |
| 24895 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24896 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24897 | + }, |
| 24898 | + }, |
| 24899 | + { |
| 24900 | + AVR32_OPC_SUBFCS, 4, 0xf5b00300, 0xfff0ff00, |
| 24901 | + &avr32_syntax_table[AVR32_SYNTAX_SUBFLO], |
| 24902 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 24903 | + { |
| 24904 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24905 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24906 | + }, |
| 24907 | + }, |
| 24908 | + { |
| 24909 | + AVR32_OPC_SUBFGE, 4, 0xf5b00400, 0xfff0ff00, |
| 24910 | + &avr32_syntax_table[AVR32_SYNTAX_SUBFGE], |
| 24911 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 24912 | + { |
| 24913 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24914 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24915 | + }, |
| 24916 | + }, |
| 24917 | + { |
| 24918 | + AVR32_OPC_SUBFLT, 4, 0xf5b00500, 0xfff0ff00, |
| 24919 | + &avr32_syntax_table[AVR32_SYNTAX_SUBFLT], |
| 24920 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 24921 | + { |
| 24922 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24923 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24924 | + }, |
| 24925 | + }, |
| 24926 | + { |
| 24927 | + AVR32_OPC_SUBFMI, 4, 0xf5b00600, 0xfff0ff00, |
| 24928 | + &avr32_syntax_table[AVR32_SYNTAX_SUBFMI], |
| 24929 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 24930 | + { |
| 24931 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24932 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24933 | + }, |
| 24934 | + }, |
| 24935 | + { |
| 24936 | + AVR32_OPC_SUBFPL, 4, 0xf5b00700, 0xfff0ff00, |
| 24937 | + &avr32_syntax_table[AVR32_SYNTAX_SUBFPL], |
| 24938 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 24939 | + { |
| 24940 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24941 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24942 | + }, |
| 24943 | + }, |
| 24944 | + { |
| 24945 | + AVR32_OPC_SUBFLS, 4, 0xf5b00800, 0xfff0ff00, |
| 24946 | + &avr32_syntax_table[AVR32_SYNTAX_SUBFLS], |
| 24947 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 24948 | + { |
| 24949 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24950 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24951 | + }, |
| 24952 | + }, |
| 24953 | + { |
| 24954 | + AVR32_OPC_SUBFGT, 4, 0xf5b00900, 0xfff0ff00, |
| 24955 | + &avr32_syntax_table[AVR32_SYNTAX_SUBFGT], |
| 24956 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 24957 | + { |
| 24958 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24959 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24960 | + }, |
| 24961 | + }, |
| 24962 | + { |
| 24963 | + AVR32_OPC_SUBFLE, 4, 0xf5b00a00, 0xfff0ff00, |
| 24964 | + &avr32_syntax_table[AVR32_SYNTAX_SUBFLE], |
| 24965 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 24966 | + { |
| 24967 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24968 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24969 | + }, |
| 24970 | + }, |
| 24971 | + { |
| 24972 | + AVR32_OPC_SUBFHI, 4, 0xf5b00b00, 0xfff0ff00, |
| 24973 | + &avr32_syntax_table[AVR32_SYNTAX_SUBFHI], |
| 24974 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 24975 | + { |
| 24976 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24977 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24978 | + }, |
| 24979 | + }, |
| 24980 | + { |
| 24981 | + AVR32_OPC_SUBFVS, 4, 0xf5b00c00, 0xfff0ff00, |
| 24982 | + &avr32_syntax_table[AVR32_SYNTAX_SUBFVS], |
| 24983 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 24984 | + { |
| 24985 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24986 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24987 | + }, |
| 24988 | + }, |
| 24989 | + { |
| 24990 | + AVR32_OPC_SUBFVC, 4, 0xf5b00d00, 0xfff0ff00, |
| 24991 | + &avr32_syntax_table[AVR32_SYNTAX_SUBFVC], |
| 24992 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 24993 | + { |
| 24994 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 24995 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 24996 | + }, |
| 24997 | + }, |
| 24998 | + { |
| 24999 | + AVR32_OPC_SUBFQS, 4, 0xf5b00e00, 0xfff0ff00, |
| 25000 | + &avr32_syntax_table[AVR32_SYNTAX_SUBFQS], |
| 25001 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 25002 | + { |
| 25003 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 25004 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 25005 | + }, |
| 25006 | + }, |
| 25007 | + { |
| 25008 | + AVR32_OPC_SUBFAL, 4, 0xf5b00f00, 0xfff0ff00, |
| 25009 | + &avr32_syntax_table[AVR32_SYNTAX_SUBFAL], |
| 25010 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, |
| 25011 | + { |
| 25012 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 25013 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 25014 | + }, |
| 25015 | + }, |
| 25016 | + { |
| 25017 | + AVR32_OPC_SUBHH_W, 4, 0xe0000f00, 0xe1f0ffc0, |
| 25018 | + &avr32_syntax_table[AVR32_SYNTAX_SUBHH_W], |
| 25019 | + BFD_RELOC_UNUSED, 5, -1, |
| 25020 | + { |
| 25021 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 25022 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 25023 | + &avr32_ifield_table[AVR32_IFIELD_X], |
| 25024 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 25025 | + &avr32_ifield_table[AVR32_IFIELD_Y], |
| 25026 | + }, |
| 25027 | + }, |
| 25028 | + { |
| 25029 | + AVR32_OPC_SWAP_B, 2, 0x5cb00000, 0xfff00000, |
| 25030 | + &avr32_syntax_table[AVR32_SYNTAX_SWAP_B], |
| 25031 | + BFD_RELOC_UNUSED, 1, -1, |
| 25032 | + { |
| 25033 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 25034 | + } |
| 25035 | + }, |
| 25036 | + { |
| 25037 | + AVR32_OPC_SWAP_BH, 2, 0x5cc00000, 0xfff00000, |
| 25038 | + &avr32_syntax_table[AVR32_SYNTAX_SWAP_BH], |
| 25039 | + BFD_RELOC_UNUSED, 1, -1, |
| 25040 | + { |
| 25041 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 25042 | + } |
| 25043 | + }, |
| 25044 | + { |
| 25045 | + AVR32_OPC_SWAP_H, 2, 0x5ca00000, 0xfff00000, |
| 25046 | + &avr32_syntax_table[AVR32_SYNTAX_SWAP_H], |
| 25047 | + BFD_RELOC_UNUSED, 1, -1, |
| 25048 | + { |
| 25049 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 25050 | + } |
| 25051 | + }, |
| 25052 | + { |
| 25053 | + AVR32_OPC_SYNC, 4, 0xebb00000, 0xffffff00, |
| 25054 | + &avr32_syntax_table[AVR32_SYNTAX_SYNC], |
| 25055 | + BFD_RELOC_AVR32_8S_EXT, 1, 0, |
| 25056 | + { |
| 25057 | + &avr32_ifield_table[AVR32_IFIELD_K8E], |
| 25058 | + } |
| 25059 | + }, |
| 25060 | + { |
| 25061 | + AVR32_OPC_TLBR, 2, 0xd6430000, 0xffff0000, |
| 25062 | + &avr32_syntax_table[AVR32_SYNTAX_TLBR], |
| 25063 | + BFD_RELOC_UNUSED, 0, -1, { NULL }, |
| 25064 | + }, |
| 25065 | + { |
| 25066 | + AVR32_OPC_TLBS, 2, 0xd6530000, 0xffff0000, |
| 25067 | + &avr32_syntax_table[AVR32_SYNTAX_TLBS], |
| 25068 | + BFD_RELOC_UNUSED, 0, -1, { NULL }, |
| 25069 | + }, |
| 25070 | + { |
| 25071 | + AVR32_OPC_TLBW, 2, 0xd6630000, 0xffff0000, |
| 25072 | + &avr32_syntax_table[AVR32_SYNTAX_TLBW], |
| 25073 | + BFD_RELOC_UNUSED, 0, -1, { NULL }, |
| 25074 | + }, |
| 25075 | + { |
| 25076 | + AVR32_OPC_TNBZ, 2, 0x5ce00000, 0xfff00000, |
| 25077 | + &avr32_syntax_table[AVR32_SYNTAX_TNBZ], |
| 25078 | + BFD_RELOC_UNUSED, 1, -1, |
| 25079 | + { |
| 25080 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 25081 | + } |
| 25082 | + }, |
| 25083 | + { |
| 25084 | + AVR32_OPC_TST, 2, 0x00700000, 0xe1f00000, |
| 25085 | + &avr32_syntax_table[AVR32_SYNTAX_TST], |
| 25086 | + BFD_RELOC_UNUSED, 2, -1, |
| 25087 | + { |
| 25088 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 25089 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 25090 | + }, |
| 25091 | + }, |
| 25092 | + { |
| 25093 | + AVR32_OPC_XCHG, 4, 0xe0000b40, 0xe1f0fff0, |
| 25094 | + &avr32_syntax_table[AVR32_SYNTAX_XCHG], |
| 25095 | + BFD_RELOC_UNUSED, 3, -1, |
| 25096 | + { |
| 25097 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], |
| 25098 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 25099 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 25100 | + }, |
| 25101 | + }, |
| 25102 | + { |
| 25103 | + AVR32_OPC_MEMC, 4, 0xf6100000, 0xfff00000, |
| 25104 | + &avr32_syntax_table[AVR32_SYNTAX_MEMC], |
| 25105 | + BFD_RELOC_AVR32_15S, 2, 0, |
| 25106 | + { |
| 25107 | + &avr32_ifield_table[AVR32_IFIELD_MEM15], |
| 25108 | + &avr32_ifield_table[AVR32_IFIELD_MEMB5], |
| 25109 | + }, |
| 25110 | + }, |
| 25111 | + { |
| 25112 | + AVR32_OPC_MEMS, 4, 0xf8100000, 0xfff00000, |
| 25113 | + &avr32_syntax_table[AVR32_SYNTAX_MEMS], |
| 25114 | + BFD_RELOC_AVR32_15S, 2, 0, |
| 25115 | + { |
| 25116 | + &avr32_ifield_table[AVR32_IFIELD_MEM15], |
| 25117 | + &avr32_ifield_table[AVR32_IFIELD_MEMB5], |
| 25118 | + }, |
| 25119 | + }, |
| 25120 | + { |
| 25121 | + AVR32_OPC_MEMT, 4, 0xfa100000, 0xfff00000, |
| 25122 | + &avr32_syntax_table[AVR32_SYNTAX_MEMT], |
| 25123 | + BFD_RELOC_AVR32_15S, 2, 0, |
| 25124 | + { |
| 25125 | + &avr32_ifield_table[AVR32_IFIELD_MEM15], |
| 25126 | + &avr32_ifield_table[AVR32_IFIELD_MEMB5], |
| 25127 | + }, |
| 25128 | + }, |
| 25129 | + { |
| 25130 | + AVR32_OPC_BFEXTS, 4, 0xe1d0b000, 0xe1f0fc00, |
| 25131 | + &avr32_syntax_table[AVR32_SYNTAX_BFEXTS], |
| 25132 | + BFD_RELOC_UNUSED, 4, -1, |
| 25133 | + { |
| 25134 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 25135 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 25136 | + &avr32_ifield_table[AVR32_IFIELD_S5], |
| 25137 | + &avr32_ifield_table[AVR32_IFIELD_K5E], |
| 25138 | + }, |
| 25139 | + }, |
| 25140 | + { |
| 25141 | + AVR32_OPC_BFEXTU, 4, 0xe1d0c000, 0xe1f0fc00, |
| 25142 | + &avr32_syntax_table[AVR32_SYNTAX_BFEXTU], |
| 25143 | + BFD_RELOC_UNUSED, 4, -1, |
| 25144 | + { |
| 25145 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 25146 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 25147 | + &avr32_ifield_table[AVR32_IFIELD_S5], |
| 25148 | + &avr32_ifield_table[AVR32_IFIELD_K5E], |
| 25149 | + }, |
| 25150 | + }, |
| 25151 | + { |
| 25152 | + AVR32_OPC_BFINS, 4, 0xe1d0d000, 0xe1f0fc00, |
| 25153 | + &avr32_syntax_table[AVR32_SYNTAX_BFINS], |
| 25154 | + BFD_RELOC_UNUSED, 4, -1, |
| 25155 | + { |
| 25156 | + &avr32_ifield_table[AVR32_IFIELD_RX], |
| 25157 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 25158 | + &avr32_ifield_table[AVR32_IFIELD_S5], |
| 25159 | + &avr32_ifield_table[AVR32_IFIELD_K5E], |
| 25160 | + }, |
| 25161 | + }, |
| 25162 | +#define AVR32_OPCODE_RSUBCOND(cond_name, cond_field) \ |
| 25163 | + { \ |
| 25164 | + AVR32_OPC_RSUB ## cond_name , 4, \ |
| 25165 | + 0xfbb00000 | (cond_field << 8), 0xfff0ff00, \ |
| 25166 | + &avr32_syntax_table[AVR32_SYNTAX_RSUB ## cond_name ], \ |
| 25167 | + BFD_RELOC_AVR32_8S_EXT, 2, 1, \ |
| 25168 | + { \ |
| 25169 | + &avr32_ifield_table[AVR32_IFIELD_RY], \ |
| 25170 | + &avr32_ifield_table[AVR32_IFIELD_K8E], \ |
| 25171 | + }, \ |
| 25172 | + }, |
| 25173 | + |
| 25174 | + AVR32_OPCODE_RSUBCOND (EQ, 0) |
| 25175 | + AVR32_OPCODE_RSUBCOND (NE, 1) |
| 25176 | + AVR32_OPCODE_RSUBCOND (CC, 2) |
| 25177 | + AVR32_OPCODE_RSUBCOND (CS, 3) |
| 25178 | + AVR32_OPCODE_RSUBCOND (GE, 4) |
| 25179 | + AVR32_OPCODE_RSUBCOND (LT, 5) |
| 25180 | + AVR32_OPCODE_RSUBCOND (MI, 6) |
| 25181 | + AVR32_OPCODE_RSUBCOND (PL, 7) |
| 25182 | + AVR32_OPCODE_RSUBCOND (LS, 8) |
| 25183 | + AVR32_OPCODE_RSUBCOND (GT, 9) |
| 25184 | + AVR32_OPCODE_RSUBCOND (LE, 10) |
| 25185 | + AVR32_OPCODE_RSUBCOND (HI, 11) |
| 25186 | + AVR32_OPCODE_RSUBCOND (VS, 12) |
| 25187 | + AVR32_OPCODE_RSUBCOND (VC, 13) |
| 25188 | + AVR32_OPCODE_RSUBCOND (QS, 14) |
| 25189 | + AVR32_OPCODE_RSUBCOND (AL, 15) |
| 25190 | + |
| 25191 | +#define AVR32_OPCODE_OP3_COND(op_name, op_field, cond_name, cond_field) \ |
| 25192 | + { \ |
| 25193 | + AVR32_OPC_ ## op_name ## cond_name , 4, \ |
| 25194 | + 0xe1d0e000 | (cond_field << 8) | (op_field << 4), 0xe1f0fff0, \ |
| 25195 | + &avr32_syntax_table[AVR32_SYNTAX_ ## op_name ## cond_name ], \ |
| 25196 | + BFD_RELOC_UNUSED, 3, -1, \ |
| 25197 | + { \ |
| 25198 | + &avr32_ifield_table[AVR32_IFIELD_RD_E], \ |
| 25199 | + &avr32_ifield_table[AVR32_IFIELD_RX], \ |
| 25200 | + &avr32_ifield_table[AVR32_IFIELD_RY], \ |
| 25201 | + }, \ |
| 25202 | + }, |
| 25203 | + |
| 25204 | + AVR32_OPCODE_OP3_COND (ADD, 0, EQ, 0) |
| 25205 | + AVR32_OPCODE_OP3_COND (ADD, 0, NE, 1) |
| 25206 | + AVR32_OPCODE_OP3_COND (ADD, 0, CC, 2) |
| 25207 | + AVR32_OPCODE_OP3_COND (ADD, 0, CS, 3) |
| 25208 | + AVR32_OPCODE_OP3_COND (ADD, 0, GE, 4) |
| 25209 | + AVR32_OPCODE_OP3_COND (ADD, 0, LT, 5) |
| 25210 | + AVR32_OPCODE_OP3_COND (ADD, 0, MI, 6) |
| 25211 | + AVR32_OPCODE_OP3_COND (ADD, 0, PL, 7) |
| 25212 | + AVR32_OPCODE_OP3_COND (ADD, 0, LS, 8) |
| 25213 | + AVR32_OPCODE_OP3_COND (ADD, 0, GT, 9) |
| 25214 | + AVR32_OPCODE_OP3_COND (ADD, 0, LE, 10) |
| 25215 | + AVR32_OPCODE_OP3_COND (ADD, 0, HI, 11) |
| 25216 | + AVR32_OPCODE_OP3_COND (ADD, 0, VS, 12) |
| 25217 | + AVR32_OPCODE_OP3_COND (ADD, 0, VC, 13) |
| 25218 | + AVR32_OPCODE_OP3_COND (ADD, 0, QS, 14) |
| 25219 | + AVR32_OPCODE_OP3_COND (ADD, 0, AL, 15) |
| 25220 | + |
| 25221 | + AVR32_OPCODE_OP3_COND (SUB2, 1, EQ, 0) |
| 25222 | + AVR32_OPCODE_OP3_COND (SUB2, 1, NE, 1) |
| 25223 | + AVR32_OPCODE_OP3_COND (SUB2, 1, CC, 2) |
| 25224 | + AVR32_OPCODE_OP3_COND (SUB2, 1, CS, 3) |
| 25225 | + AVR32_OPCODE_OP3_COND (SUB2, 1, GE, 4) |
| 25226 | + AVR32_OPCODE_OP3_COND (SUB2, 1, LT, 5) |
| 25227 | + AVR32_OPCODE_OP3_COND (SUB2, 1, MI, 6) |
| 25228 | + AVR32_OPCODE_OP3_COND (SUB2, 1, PL, 7) |
| 25229 | + AVR32_OPCODE_OP3_COND (SUB2, 1, LS, 8) |
| 25230 | + AVR32_OPCODE_OP3_COND (SUB2, 1, GT, 9) |
| 25231 | + AVR32_OPCODE_OP3_COND (SUB2, 1, LE, 10) |
| 25232 | + AVR32_OPCODE_OP3_COND (SUB2, 1, HI, 11) |
| 25233 | + AVR32_OPCODE_OP3_COND (SUB2, 1, VS, 12) |
| 25234 | + AVR32_OPCODE_OP3_COND (SUB2, 1, VC, 13) |
| 25235 | + AVR32_OPCODE_OP3_COND (SUB2, 1, QS, 14) |
| 25236 | + AVR32_OPCODE_OP3_COND (SUB2, 1, AL, 15) |
| 25237 | + |
| 25238 | + AVR32_OPCODE_OP3_COND (AND, 2, EQ, 0) |
| 25239 | + AVR32_OPCODE_OP3_COND (AND, 2, NE, 1) |
| 25240 | + AVR32_OPCODE_OP3_COND (AND, 2, CC, 2) |
| 25241 | + AVR32_OPCODE_OP3_COND (AND, 2, CS, 3) |
| 25242 | + AVR32_OPCODE_OP3_COND (AND, 2, GE, 4) |
| 25243 | + AVR32_OPCODE_OP3_COND (AND, 2, LT, 5) |
| 25244 | + AVR32_OPCODE_OP3_COND (AND, 2, MI, 6) |
| 25245 | + AVR32_OPCODE_OP3_COND (AND, 2, PL, 7) |
| 25246 | + AVR32_OPCODE_OP3_COND (AND, 2, LS, 8) |
| 25247 | + AVR32_OPCODE_OP3_COND (AND, 2, GT, 9) |
| 25248 | + AVR32_OPCODE_OP3_COND (AND, 2, LE, 10) |
| 25249 | + AVR32_OPCODE_OP3_COND (AND, 2, HI, 11) |
| 25250 | + AVR32_OPCODE_OP3_COND (AND, 2, VS, 12) |
| 25251 | + AVR32_OPCODE_OP3_COND (AND, 2, VC, 13) |
| 25252 | + AVR32_OPCODE_OP3_COND (AND, 2, QS, 14) |
| 25253 | + AVR32_OPCODE_OP3_COND (AND, 2, AL, 15) |
| 25254 | + |
| 25255 | + AVR32_OPCODE_OP3_COND (OR, 3, EQ, 0) |
| 25256 | + AVR32_OPCODE_OP3_COND (OR, 3, NE, 1) |
| 25257 | + AVR32_OPCODE_OP3_COND (OR, 3, CC, 2) |
| 25258 | + AVR32_OPCODE_OP3_COND (OR, 3, CS, 3) |
| 25259 | + AVR32_OPCODE_OP3_COND (OR, 3, GE, 4) |
| 25260 | + AVR32_OPCODE_OP3_COND (OR, 3, LT, 5) |
| 25261 | + AVR32_OPCODE_OP3_COND (OR, 3, MI, 6) |
| 25262 | + AVR32_OPCODE_OP3_COND (OR, 3, PL, 7) |
| 25263 | + AVR32_OPCODE_OP3_COND (OR, 3, LS, 8) |
| 25264 | + AVR32_OPCODE_OP3_COND (OR, 3, GT, 9) |
| 25265 | + AVR32_OPCODE_OP3_COND (OR, 3, LE, 10) |
| 25266 | + AVR32_OPCODE_OP3_COND (OR, 3, HI, 11) |
| 25267 | + AVR32_OPCODE_OP3_COND (OR, 3, VS, 12) |
| 25268 | + AVR32_OPCODE_OP3_COND (OR, 3, VC, 13) |
| 25269 | + AVR32_OPCODE_OP3_COND (OR, 3, QS, 14) |
| 25270 | + AVR32_OPCODE_OP3_COND (OR, 3, AL, 15) |
| 25271 | + |
| 25272 | + AVR32_OPCODE_OP3_COND (EOR, 4, EQ, 0) |
| 25273 | + AVR32_OPCODE_OP3_COND (EOR, 4, NE, 1) |
| 25274 | + AVR32_OPCODE_OP3_COND (EOR, 4, CC, 2) |
| 25275 | + AVR32_OPCODE_OP3_COND (EOR, 4, CS, 3) |
| 25276 | + AVR32_OPCODE_OP3_COND (EOR, 4, GE, 4) |
| 25277 | + AVR32_OPCODE_OP3_COND (EOR, 4, LT, 5) |
| 25278 | + AVR32_OPCODE_OP3_COND (EOR, 4, MI, 6) |
| 25279 | + AVR32_OPCODE_OP3_COND (EOR, 4, PL, 7) |
| 25280 | + AVR32_OPCODE_OP3_COND (EOR, 4, LS, 8) |
| 25281 | + AVR32_OPCODE_OP3_COND (EOR, 4, GT, 9) |
| 25282 | + AVR32_OPCODE_OP3_COND (EOR, 4, LE, 10) |
| 25283 | + AVR32_OPCODE_OP3_COND (EOR, 4, HI, 11) |
| 25284 | + AVR32_OPCODE_OP3_COND (EOR, 4, VS, 12) |
| 25285 | + AVR32_OPCODE_OP3_COND (EOR, 4, VC, 13) |
| 25286 | + AVR32_OPCODE_OP3_COND (EOR, 4, QS, 14) |
| 25287 | + AVR32_OPCODE_OP3_COND (EOR, 4, AL, 15) |
| 25288 | + |
| 25289 | +#define AVR32_OPCODE_LD_COND(op_name, op_field, cond_name, cond_field) \ |
| 25290 | + { \ |
| 25291 | + AVR32_OPC_ ## op_name ## cond_name , 4, \ |
| 25292 | + 0xe1f00000 | (cond_field << 12) | (op_field << 9), 0xe1f0fe00, \ |
| 25293 | + &avr32_syntax_table[AVR32_SYNTAX_ ## op_name ## cond_name ], \ |
| 25294 | + BFD_RELOC_UNUSED, 3, -1, \ |
| 25295 | + { \ |
| 25296 | + &avr32_ifield_table[AVR32_IFIELD_RY], \ |
| 25297 | + &avr32_ifield_table[AVR32_IFIELD_RX], \ |
| 25298 | + &avr32_ifield_table[AVR32_IFIELD_K9E], \ |
| 25299 | + }, \ |
| 25300 | + }, |
| 25301 | + |
| 25302 | +#define AVR32_OPCODE_ST_COND(op_name, op_field, cond_name, cond_field) \ |
| 25303 | + { \ |
| 25304 | + AVR32_OPC_ ## op_name ## cond_name , 4, \ |
| 25305 | + 0xe1f00000 | (cond_field << 12) | (op_field << 9), 0xe1f0fe00, \ |
| 25306 | + &avr32_syntax_table[AVR32_SYNTAX_ ## op_name ## cond_name ], \ |
| 25307 | + BFD_RELOC_UNUSED, 3, -1, \ |
| 25308 | + { \ |
| 25309 | + &avr32_ifield_table[AVR32_IFIELD_RX], \ |
| 25310 | + &avr32_ifield_table[AVR32_IFIELD_K9E], \ |
| 25311 | + &avr32_ifield_table[AVR32_IFIELD_RY], \ |
| 25312 | + }, \ |
| 25313 | + }, |
| 25314 | + |
| 25315 | + AVR32_OPCODE_LD_COND (LD_W, 0, EQ, 0) |
| 25316 | + AVR32_OPCODE_LD_COND (LD_W, 0, NE, 1) |
| 25317 | + AVR32_OPCODE_LD_COND (LD_W, 0, CC, 2) |
| 25318 | + AVR32_OPCODE_LD_COND (LD_W, 0, CS, 3) |
| 25319 | + AVR32_OPCODE_LD_COND (LD_W, 0, GE, 4) |
| 25320 | + AVR32_OPCODE_LD_COND (LD_W, 0, LT, 5) |
| 25321 | + AVR32_OPCODE_LD_COND (LD_W, 0, MI, 6) |
| 25322 | + AVR32_OPCODE_LD_COND (LD_W, 0, PL, 7) |
| 25323 | + AVR32_OPCODE_LD_COND (LD_W, 0, LS, 8) |
| 25324 | + AVR32_OPCODE_LD_COND (LD_W, 0, GT, 9) |
| 25325 | + AVR32_OPCODE_LD_COND (LD_W, 0, LE, 10) |
| 25326 | + AVR32_OPCODE_LD_COND (LD_W, 0, HI, 11) |
| 25327 | + AVR32_OPCODE_LD_COND (LD_W, 0, VS, 12) |
| 25328 | + AVR32_OPCODE_LD_COND (LD_W, 0, VC, 13) |
| 25329 | + AVR32_OPCODE_LD_COND (LD_W, 0, QS, 14) |
| 25330 | + AVR32_OPCODE_LD_COND (LD_W, 0, AL, 15) |
| 25331 | + |
| 25332 | + AVR32_OPCODE_LD_COND (LD_SH, 1, EQ, 0) |
| 25333 | + AVR32_OPCODE_LD_COND (LD_SH, 1, NE, 1) |
| 25334 | + AVR32_OPCODE_LD_COND (LD_SH, 1, CC, 2) |
| 25335 | + AVR32_OPCODE_LD_COND (LD_SH, 1, CS, 3) |
| 25336 | + AVR32_OPCODE_LD_COND (LD_SH, 1, GE, 4) |
| 25337 | + AVR32_OPCODE_LD_COND (LD_SH, 1, LT, 5) |
| 25338 | + AVR32_OPCODE_LD_COND (LD_SH, 1, MI, 6) |
| 25339 | + AVR32_OPCODE_LD_COND (LD_SH, 1, PL, 7) |
| 25340 | + AVR32_OPCODE_LD_COND (LD_SH, 1, LS, 8) |
| 25341 | + AVR32_OPCODE_LD_COND (LD_SH, 1, GT, 9) |
| 25342 | + AVR32_OPCODE_LD_COND (LD_SH, 1, LE, 10) |
| 25343 | + AVR32_OPCODE_LD_COND (LD_SH, 1, HI, 11) |
| 25344 | + AVR32_OPCODE_LD_COND (LD_SH, 1, VS, 12) |
| 25345 | + AVR32_OPCODE_LD_COND (LD_SH, 1, VC, 13) |
| 25346 | + AVR32_OPCODE_LD_COND (LD_SH, 1, QS, 14) |
| 25347 | + AVR32_OPCODE_LD_COND (LD_SH, 1, AL, 15) |
| 25348 | + |
| 25349 | + AVR32_OPCODE_LD_COND (LD_UH, 2, EQ, 0) |
| 25350 | + AVR32_OPCODE_LD_COND (LD_UH, 2, NE, 1) |
| 25351 | + AVR32_OPCODE_LD_COND (LD_UH, 2, CC, 2) |
| 25352 | + AVR32_OPCODE_LD_COND (LD_UH, 2, CS, 3) |
| 25353 | + AVR32_OPCODE_LD_COND (LD_UH, 2, GE, 4) |
| 25354 | + AVR32_OPCODE_LD_COND (LD_UH, 2, LT, 5) |
| 25355 | + AVR32_OPCODE_LD_COND (LD_UH, 2, MI, 6) |
| 25356 | + AVR32_OPCODE_LD_COND (LD_UH, 2, PL, 7) |
| 25357 | + AVR32_OPCODE_LD_COND (LD_SH, 2, LS, 8) |
| 25358 | + AVR32_OPCODE_LD_COND (LD_SH, 2, GT, 9) |
| 25359 | + AVR32_OPCODE_LD_COND (LD_SH, 2, LE, 10) |
| 25360 | + AVR32_OPCODE_LD_COND (LD_SH, 2, HI, 11) |
| 25361 | + AVR32_OPCODE_LD_COND (LD_SH, 2, VS, 12) |
| 25362 | + AVR32_OPCODE_LD_COND (LD_SH, 2, VC, 13) |
| 25363 | + AVR32_OPCODE_LD_COND (LD_SH, 2, QS, 14) |
| 25364 | + AVR32_OPCODE_LD_COND (LD_SH, 2, AL, 15) |
| 25365 | + |
| 25366 | + AVR32_OPCODE_LD_COND (LD_SB, 3, EQ, 0) |
| 25367 | + AVR32_OPCODE_LD_COND (LD_SB, 3, NE, 1) |
| 25368 | + AVR32_OPCODE_LD_COND (LD_SB, 3, CC, 2) |
| 25369 | + AVR32_OPCODE_LD_COND (LD_SB, 3, CS, 3) |
| 25370 | + AVR32_OPCODE_LD_COND (LD_SB, 3, GE, 4) |
| 25371 | + AVR32_OPCODE_LD_COND (LD_SB, 3, LT, 5) |
| 25372 | + AVR32_OPCODE_LD_COND (LD_SB, 3, MI, 6) |
| 25373 | + AVR32_OPCODE_LD_COND (LD_SB, 3, PL, 7) |
| 25374 | + AVR32_OPCODE_LD_COND (LD_SB, 3, LS, 8) |
| 25375 | + AVR32_OPCODE_LD_COND (LD_SB, 3, GT, 9) |
| 25376 | + AVR32_OPCODE_LD_COND (LD_SB, 3, LE, 10) |
| 25377 | + AVR32_OPCODE_LD_COND (LD_SB, 3, HI, 11) |
| 25378 | + AVR32_OPCODE_LD_COND (LD_SB, 3, VS, 12) |
| 25379 | + AVR32_OPCODE_LD_COND (LD_SB, 3, VC, 13) |
| 25380 | + AVR32_OPCODE_LD_COND (LD_SB, 3, QS, 14) |
| 25381 | + AVR32_OPCODE_LD_COND (LD_SB, 3, AL, 15) |
| 25382 | + |
| 25383 | + AVR32_OPCODE_LD_COND (LD_UB, 4, EQ, 0) |
| 25384 | + AVR32_OPCODE_LD_COND (LD_UB, 4, NE, 1) |
| 25385 | + AVR32_OPCODE_LD_COND (LD_UB, 4, CC, 2) |
| 25386 | + AVR32_OPCODE_LD_COND (LD_UB, 4, CS, 3) |
| 25387 | + AVR32_OPCODE_LD_COND (LD_UB, 4, GE, 4) |
| 25388 | + AVR32_OPCODE_LD_COND (LD_UB, 4, LT, 5) |
| 25389 | + AVR32_OPCODE_LD_COND (LD_UB, 4, MI, 6) |
| 25390 | + AVR32_OPCODE_LD_COND (LD_UB, 4, PL, 7) |
| 25391 | + AVR32_OPCODE_LD_COND (LD_UB, 4, LS, 8) |
| 25392 | + AVR32_OPCODE_LD_COND (LD_UB, 4, GT, 9) |
| 25393 | + AVR32_OPCODE_LD_COND (LD_UB, 4, LE, 10) |
| 25394 | + AVR32_OPCODE_LD_COND (LD_UB, 4, HI, 11) |
| 25395 | + AVR32_OPCODE_LD_COND (LD_UB, 4, VS, 12) |
| 25396 | + AVR32_OPCODE_LD_COND (LD_UB, 4, VC, 13) |
| 25397 | + AVR32_OPCODE_LD_COND (LD_UB, 4, QS, 14) |
| 25398 | + AVR32_OPCODE_LD_COND (LD_UB, 4, AL, 15) |
| 25399 | + |
| 25400 | + AVR32_OPCODE_ST_COND (ST_W, 5, EQ, 0) |
| 25401 | + AVR32_OPCODE_ST_COND (ST_W, 5, NE, 1) |
| 25402 | + AVR32_OPCODE_ST_COND (ST_W, 5, CC, 2) |
| 25403 | + AVR32_OPCODE_ST_COND (ST_W, 5, CS, 3) |
| 25404 | + AVR32_OPCODE_ST_COND (ST_W, 5, GE, 4) |
| 25405 | + AVR32_OPCODE_ST_COND (ST_W, 5, LT, 5) |
| 25406 | + AVR32_OPCODE_ST_COND (ST_W, 5, MI, 6) |
| 25407 | + AVR32_OPCODE_ST_COND (ST_W, 5, PL, 7) |
| 25408 | + AVR32_OPCODE_ST_COND (ST_W, 5, LS, 8) |
| 25409 | + AVR32_OPCODE_ST_COND (ST_W, 5, GT, 9) |
| 25410 | + AVR32_OPCODE_ST_COND (ST_W, 5, LE, 10) |
| 25411 | + AVR32_OPCODE_ST_COND (ST_W, 5, HI, 11) |
| 25412 | + AVR32_OPCODE_ST_COND (ST_W, 5, VS, 12) |
| 25413 | + AVR32_OPCODE_ST_COND (ST_W, 5, VC, 13) |
| 25414 | + AVR32_OPCODE_ST_COND (ST_W, 5, QS, 14) |
| 25415 | + AVR32_OPCODE_ST_COND (ST_W, 5, AL, 15) |
| 25416 | + |
| 25417 | + AVR32_OPCODE_ST_COND (ST_H, 6, EQ, 0) |
| 25418 | + AVR32_OPCODE_ST_COND (ST_H, 6, NE, 1) |
| 25419 | + AVR32_OPCODE_ST_COND (ST_H, 6, CC, 2) |
| 25420 | + AVR32_OPCODE_ST_COND (ST_H, 6, CS, 3) |
| 25421 | + AVR32_OPCODE_ST_COND (ST_H, 6, GE, 4) |
| 25422 | + AVR32_OPCODE_ST_COND (ST_H, 6, LT, 5) |
| 25423 | + AVR32_OPCODE_ST_COND (ST_H, 6, MI, 6) |
| 25424 | + AVR32_OPCODE_ST_COND (ST_H, 6, PL, 7) |
| 25425 | + AVR32_OPCODE_ST_COND (ST_H, 6, LS, 8) |
| 25426 | + AVR32_OPCODE_ST_COND (ST_H, 6, GT, 9) |
| 25427 | + AVR32_OPCODE_ST_COND (ST_H, 6, LE, 10) |
| 25428 | + AVR32_OPCODE_ST_COND (ST_H, 6, HI, 11) |
| 25429 | + AVR32_OPCODE_ST_COND (ST_H, 6, VS, 12) |
| 25430 | + AVR32_OPCODE_ST_COND (ST_H, 6, VC, 13) |
| 25431 | + AVR32_OPCODE_ST_COND (ST_H, 6, QS, 14) |
| 25432 | + AVR32_OPCODE_ST_COND (ST_H, 6, AL, 15) |
| 25433 | + |
| 25434 | + AVR32_OPCODE_ST_COND (ST_B, 7, EQ, 0) |
| 25435 | + AVR32_OPCODE_ST_COND (ST_B, 7, NE, 1) |
| 25436 | + AVR32_OPCODE_ST_COND (ST_B, 7, CC, 2) |
| 25437 | + AVR32_OPCODE_ST_COND (ST_B, 7, CS, 3) |
| 25438 | + AVR32_OPCODE_ST_COND (ST_B, 7, GE, 4) |
| 25439 | + AVR32_OPCODE_ST_COND (ST_B, 7, LT, 5) |
| 25440 | + AVR32_OPCODE_ST_COND (ST_B, 7, MI, 6) |
| 25441 | + AVR32_OPCODE_ST_COND (ST_B, 7, PL, 7) |
| 25442 | + AVR32_OPCODE_ST_COND (ST_B, 7, LS, 8) |
| 25443 | + AVR32_OPCODE_ST_COND (ST_B, 7, GT, 9) |
| 25444 | + AVR32_OPCODE_ST_COND (ST_B, 7, LE, 10) |
| 25445 | + AVR32_OPCODE_ST_COND (ST_B, 7, HI, 11) |
| 25446 | + AVR32_OPCODE_ST_COND (ST_B, 7, VS, 12) |
| 25447 | + AVR32_OPCODE_ST_COND (ST_B, 7, VC, 13) |
| 25448 | + AVR32_OPCODE_ST_COND (ST_B, 7, QS, 14) |
| 25449 | + AVR32_OPCODE_ST_COND (ST_B, 7, AL, 15) |
| 25450 | + |
| 25451 | + { |
| 25452 | + AVR32_OPC_MOVH, 4, 0xfc100000, 0xfff00000, |
| 25453 | + &avr32_syntax_table[AVR32_SYNTAX_MOVH], |
| 25454 | + BFD_RELOC_AVR32_16U, 2, 1, |
| 25455 | + { |
| 25456 | + &avr32_ifield_table[AVR32_IFIELD_RY], |
| 25457 | + &avr32_ifield_table[AVR32_IFIELD_K16], |
| 25458 | + }, |
| 25459 | + }, |
| 25460 | + { |
| 25461 | + AVR32_OPC_SSCALL, 2, 0xd7530000, 0xffff0000, |
| 25462 | + &avr32_syntax_table[AVR32_SYNTAX_SSCALL], |
| 25463 | + BFD_RELOC_UNUSED, 0, -1, { NULL }, |
| 25464 | + }, |
| 25465 | + { |
| 25466 | + AVR32_OPC_RETSS, 2, 0xd7630000, 0xffff0000, |
| 25467 | + &avr32_syntax_table[AVR32_SYNTAX_RETSS], |
| 25468 | + BFD_RELOC_UNUSED, 0, -1, { NULL }, |
| 25469 | + }, |
| 25470 | + |
| 25471 | + { |
| 25472 | + AVR32_OPC_FMAC_S, 4, 0xE1A00000, 0xFFF0F000, |
| 25473 | + &avr32_syntax_table[AVR32_SYNTAX_FMAC_S], |
| 25474 | + BFD_RELOC_UNUSED, 4, -1, |
| 25475 | + { |
| 25476 | + &avr32_ifield_table[AVR32_IFIELD_FP_RD], |
| 25477 | + &avr32_ifield_table[AVR32_IFIELD_FP_RA], |
| 25478 | + &avr32_ifield_table[AVR32_IFIELD_FP_RX], |
| 25479 | + &avr32_ifield_table[AVR32_IFIELD_FP_RY] |
| 25480 | + } |
| 25481 | + }, |
| 25482 | + { |
| 25483 | + AVR32_OPC_FNMAC_S, 4, 0xE1A01000, 0xFFF0F000, |
| 25484 | + &avr32_syntax_table[AVR32_SYNTAX_FNMAC_S], |
| 25485 | + BFD_RELOC_UNUSED, 4, -1, |
| 25486 | + { |
| 25487 | + &avr32_ifield_table[AVR32_IFIELD_FP_RD], |
| 25488 | + &avr32_ifield_table[AVR32_IFIELD_FP_RA], |
| 25489 | + &avr32_ifield_table[AVR32_IFIELD_FP_RX], |
| 25490 | + &avr32_ifield_table[AVR32_IFIELD_FP_RY] |
| 25491 | + } |
| 25492 | + }, |
| 25493 | + { |
| 25494 | + AVR32_OPC_FMSC_S, 4, 0xE3A00000, 0xFFF0F000, |
| 25495 | + &avr32_syntax_table[AVR32_SYNTAX_FMSC_S], |
| 25496 | + BFD_RELOC_UNUSED, 4, -1, |
| 25497 | + { |
| 25498 | + &avr32_ifield_table[AVR32_IFIELD_FP_RD], |
| 25499 | + &avr32_ifield_table[AVR32_IFIELD_FP_RA], |
| 25500 | + &avr32_ifield_table[AVR32_IFIELD_FP_RX], |
| 25501 | + &avr32_ifield_table[AVR32_IFIELD_FP_RY] |
| 25502 | + } |
| 25503 | + }, |
| 25504 | + { |
| 25505 | + AVR32_OPC_FNMSC_S, 4, 0xE3A01000, 0xFFF0F000, |
| 25506 | + &avr32_syntax_table[AVR32_SYNTAX_FNMSC_S], |
| 25507 | + BFD_RELOC_UNUSED, 4, -1, |
| 25508 | + { |
| 25509 | + &avr32_ifield_table[AVR32_IFIELD_FP_RD], |
| 25510 | + &avr32_ifield_table[AVR32_IFIELD_FP_RA], |
| 25511 | + &avr32_ifield_table[AVR32_IFIELD_FP_RX], |
| 25512 | + &avr32_ifield_table[AVR32_IFIELD_FP_RY] |
| 25513 | + } |
| 25514 | + }, |
| 25515 | + { |
| 25516 | + AVR32_OPC_FMUL_S, 4, 0xE5A20000, 0xFFFFF000, |
| 25517 | + &avr32_syntax_table[AVR32_SYNTAX_FMUL_S], |
| 25518 | + BFD_RELOC_UNUSED, 3, -1, |
| 25519 | + { |
| 25520 | + &avr32_ifield_table[AVR32_IFIELD_FP_RD], |
| 25521 | + &avr32_ifield_table[AVR32_IFIELD_FP_RX], |
| 25522 | + &avr32_ifield_table[AVR32_IFIELD_FP_RY] |
| 25523 | + } |
| 25524 | + }, |
| 25525 | + { |
| 25526 | + AVR32_OPC_FNMUL_S, 4, 0xE5A30000, 0xFFFFF000, |
| 25527 | + &avr32_syntax_table[AVR32_SYNTAX_FNMUL_S], |
| 25528 | + BFD_RELOC_UNUSED, 3, -1, |
| 25529 | + { |
| 25530 | + &avr32_ifield_table[AVR32_IFIELD_FP_RD], |
| 25531 | + &avr32_ifield_table[AVR32_IFIELD_FP_RX], |
| 25532 | + &avr32_ifield_table[AVR32_IFIELD_FP_RY] |
| 25533 | + } |
| 25534 | + }, |
| 25535 | + { |
| 25536 | + AVR32_OPC_FADD_S, 4, 0xE5A00000, 0xFFFFF000, |
| 25537 | + &avr32_syntax_table[AVR32_SYNTAX_FADD_S], |
| 25538 | + BFD_RELOC_UNUSED, 3, -1, |
| 25539 | + { |
| 25540 | + &avr32_ifield_table[AVR32_IFIELD_FP_RD], |
| 25541 | + &avr32_ifield_table[AVR32_IFIELD_FP_RX], |
| 25542 | + &avr32_ifield_table[AVR32_IFIELD_FP_RY] |
| 25543 | + } |
| 25544 | + }, |
| 25545 | + { |
| 25546 | + AVR32_OPC_FSUB_S, 4, 0xE5A10000, 0xFFFFF000, |
| 25547 | + &avr32_syntax_table[AVR32_SYNTAX_FSUB_S], |
| 25548 | + BFD_RELOC_UNUSED, 3, -1, |
| 25549 | + { |
| 25550 | + &avr32_ifield_table[AVR32_IFIELD_FP_RD], |
| 25551 | + &avr32_ifield_table[AVR32_IFIELD_FP_RX], |
| 25552 | + &avr32_ifield_table[AVR32_IFIELD_FP_RY] |
| 25553 | + } |
| 25554 | + }, |
| 25555 | + { |
| 25556 | + AVR32_OPC_FCASTRS_SW, 4, 0xE5AB0000, 0xFFFFF0F0, |
| 25557 | + &avr32_syntax_table[AVR32_SYNTAX_FCASTRS_SW], |
| 25558 | + BFD_RELOC_UNUSED, 2, -1, |
| 25559 | + { |
| 25560 | + &avr32_ifield_table[AVR32_IFIELD_FP_RD], |
| 25561 | + &avr32_ifield_table[AVR32_IFIELD_FP_RY] |
| 25562 | + } |
| 25563 | + }, |
| 25564 | + { |
| 25565 | + AVR32_OPC_FCASTRS_UW, 4, 0xE5A90000, 0xFFFFF0F0, |
| 25566 | + &avr32_syntax_table[AVR32_SYNTAX_FCASTRS_UW], |
| 25567 | + BFD_RELOC_UNUSED, 2, -1, |
| 25568 | + { |
| 25569 | + &avr32_ifield_table[AVR32_IFIELD_FP_RD], |
| 25570 | + &avr32_ifield_table[AVR32_IFIELD_FP_RY] |
| 25571 | + } |
| 25572 | + }, |
| 25573 | + { |
| 25574 | + AVR32_OPC_FCASTSW_S, 4, 0xE5A60000, 0xFFFFF0F0, |
| 25575 | + &avr32_syntax_table[AVR32_SYNTAX_FCASTSW_S], |
| 25576 | + BFD_RELOC_UNUSED, 2, -1, |
| 25577 | + { |
| 25578 | + &avr32_ifield_table[AVR32_IFIELD_FP_RD], |
| 25579 | + &avr32_ifield_table[AVR32_IFIELD_FP_RY] |
| 25580 | + } |
| 25581 | + }, |
| 25582 | + { |
| 25583 | + AVR32_OPC_FCASTUW_S, 4, 0xE5A40000, 0xFFFFF0F0, |
| 25584 | + &avr32_syntax_table[AVR32_SYNTAX_FCASTUW_S], |
| 25585 | + BFD_RELOC_UNUSED, 2, -1, |
| 25586 | + { |
| 25587 | + &avr32_ifield_table[AVR32_IFIELD_FP_RD], |
| 25588 | + &avr32_ifield_table[AVR32_IFIELD_FP_RY] |
| 25589 | + } |
| 25590 | + }, |
| 25591 | + { |
| 25592 | + AVR32_OPC_FCMP_S, 4, 0xE5AC0000, 0xFFFFFF00, |
| 25593 | + &avr32_syntax_table[AVR32_SYNTAX_FCMP_S], |
| 25594 | + BFD_RELOC_UNUSED, 2, -1, |
| 25595 | + { |
| 25596 | + &avr32_ifield_table[AVR32_IFIELD_FP_RX], |
| 25597 | + &avr32_ifield_table[AVR32_IFIELD_FP_RY] |
| 25598 | + } |
| 25599 | + }, |
| 25600 | + { |
| 25601 | + AVR32_OPC_FCHK_S, 4, 0xE5AD0000, 0xFFFFFFF0, |
| 25602 | + &avr32_syntax_table[AVR32_SYNTAX_FCHK_S], |
| 25603 | + BFD_RELOC_UNUSED, 1, -1, |
| 25604 | + { |
| 25605 | + &avr32_ifield_table[AVR32_IFIELD_FP_RY] |
| 25606 | + } |
| 25607 | + }, |
| 25608 | + { |
| 25609 | + AVR32_OPC_FRCPA_S, 4, 0xE5AE0000, 0xFFFFF0F0, |
| 25610 | + &avr32_syntax_table[AVR32_SYNTAX_FRCPA_S], |
| 25611 | + BFD_RELOC_UNUSED, 2, -1, |
| 25612 | + { |
| 25613 | + &avr32_ifield_table[AVR32_IFIELD_FP_RD], |
| 25614 | + &avr32_ifield_table[AVR32_IFIELD_FP_RY] |
| 25615 | + } |
| 25616 | + }, |
| 25617 | + { |
| 25618 | + AVR32_OPC_FRSQRTA_S, 4, 0xE5AF0000, 0xFFFFF0F0, |
| 25619 | + &avr32_syntax_table[AVR32_SYNTAX_FRSQRTA_S], |
| 25620 | + BFD_RELOC_UNUSED, 2, -1, |
| 25621 | + { |
| 25622 | + &avr32_ifield_table[AVR32_IFIELD_FP_RD], |
| 25623 | + &avr32_ifield_table[AVR32_IFIELD_FP_RY] |
| 25624 | + } |
| 25625 | + } |
| 25626 | + |
| 25627 | +}; |
| 25628 | + |
| 25629 | + |
| 25630 | +const struct avr32_alias avr32_alias_table[] = |
| 25631 | + { |
| 25632 | + { |
| 25633 | + AVR32_ALIAS_PICOSVMAC0, |
| 25634 | + &avr32_opc_table[AVR32_OPC_COP], |
| 25635 | + { |
| 25636 | + { 0, PICO_CPNO }, |
| 25637 | + { 1, 0 }, { 1, 1 }, { 1, 2 }, |
| 25638 | + { 0, 0x0c }, |
| 25639 | + }, |
| 25640 | + }, |
| 25641 | + { |
| 25642 | + AVR32_ALIAS_PICOSVMAC1, |
| 25643 | + &avr32_opc_table[AVR32_OPC_COP], |
| 25644 | + { |
| 25645 | + { 0, PICO_CPNO }, |
| 25646 | + { 1, 0 }, { 1, 1 }, { 1, 2 }, |
| 25647 | + { 0, 0x0d }, |
| 25648 | + }, |
| 25649 | + }, |
| 25650 | + { |
| 25651 | + AVR32_ALIAS_PICOSVMAC2, |
| 25652 | + &avr32_opc_table[AVR32_OPC_COP], |
| 25653 | + { |
| 25654 | + { 0, PICO_CPNO }, |
| 25655 | + { 1, 0 }, { 1, 1 }, { 1, 2 }, |
| 25656 | + { 0, 0x0e }, |
| 25657 | + }, |
| 25658 | + }, |
| 25659 | + { |
| 25660 | + AVR32_ALIAS_PICOSVMAC3, |
| 25661 | + &avr32_opc_table[AVR32_OPC_COP], |
| 25662 | + { |
| 25663 | + { 0, PICO_CPNO }, |
| 25664 | + { 1, 0 }, { 1, 1 }, { 1, 2 }, |
| 25665 | + { 0, 0x0f }, |
| 25666 | + }, |
| 25667 | + }, |
| 25668 | + { |
| 25669 | + AVR32_ALIAS_PICOSVMUL0, |
| 25670 | + &avr32_opc_table[AVR32_OPC_COP], |
| 25671 | + { |
| 25672 | + { 0, PICO_CPNO }, |
| 25673 | + { 1, 0 }, { 1, 1 }, { 1, 2 }, |
| 25674 | + { 0, 0x08 }, |
| 25675 | + }, |
| 25676 | + }, |
| 25677 | + { |
| 25678 | + AVR32_ALIAS_PICOSVMUL1, |
| 25679 | + &avr32_opc_table[AVR32_OPC_COP], |
| 25680 | + { |
| 25681 | + { 0, PICO_CPNO }, |
| 25682 | + { 1, 0 }, { 1, 1 }, { 1, 2 }, |
| 25683 | + { 0, 0x09 }, |
| 25684 | + }, |
| 25685 | + }, |
| 25686 | + { |
| 25687 | + AVR32_ALIAS_PICOSVMUL2, |
| 25688 | + &avr32_opc_table[AVR32_OPC_COP], |
| 25689 | + { |
| 25690 | + { 0, PICO_CPNO }, |
| 25691 | + { 1, 0 }, { 1, 1 }, { 1, 2 }, |
| 25692 | + { 0, 0x0a }, |
| 25693 | + }, |
| 25694 | + }, |
| 25695 | + { |
| 25696 | + AVR32_ALIAS_PICOSVMUL3, |
| 25697 | + &avr32_opc_table[AVR32_OPC_COP], |
| 25698 | + { |
| 25699 | + { 0, PICO_CPNO }, |
| 25700 | + { 1, 0 }, { 1, 1 }, { 1, 2 }, |
| 25701 | + { 0, 0x0b }, |
| 25702 | + }, |
| 25703 | + }, |
| 25704 | + { |
| 25705 | + AVR32_ALIAS_PICOVMAC0, |
| 25706 | + &avr32_opc_table[AVR32_OPC_COP], |
| 25707 | + { |
| 25708 | + { 0, PICO_CPNO }, |
| 25709 | + { 1, 0 }, { 1, 1 }, { 1, 2 }, |
| 25710 | + { 0, 0x04 }, |
| 25711 | + }, |
| 25712 | + }, |
| 25713 | + { |
| 25714 | + AVR32_ALIAS_PICOVMAC1, |
| 25715 | + &avr32_opc_table[AVR32_OPC_COP], |
| 25716 | + { |
| 25717 | + { 0, PICO_CPNO }, |
| 25718 | + { 1, 0 }, { 1, 1 }, { 1, 2 }, |
| 25719 | + { 0, 0x05 }, |
| 25720 | + }, |
| 25721 | + }, |
| 25722 | + { |
| 25723 | + AVR32_ALIAS_PICOVMAC2, |
| 25724 | + &avr32_opc_table[AVR32_OPC_COP], |
| 25725 | + { |
| 25726 | + { 0, PICO_CPNO }, |
| 25727 | + { 1, 0 }, { 1, 1 }, { 1, 2 }, |
| 25728 | + { 0, 0x06 }, |
| 25729 | + }, |
| 25730 | + }, |
| 25731 | + { |
| 25732 | + AVR32_ALIAS_PICOVMAC3, |
| 25733 | + &avr32_opc_table[AVR32_OPC_COP], |
| 25734 | + { |
| 25735 | + { 0, PICO_CPNO }, |
| 25736 | + { 1, 0 }, { 1, 1 }, { 1, 2 }, |
| 25737 | + { 0, 0x07 }, |
| 25738 | + }, |
| 25739 | + }, |
| 25740 | + { |
| 25741 | + AVR32_ALIAS_PICOVMUL0, |
| 25742 | + &avr32_opc_table[AVR32_OPC_COP], |
| 25743 | + { |
| 25744 | + { 0, PICO_CPNO }, |
| 25745 | + { 1, 0 }, { 1, 1 }, { 1, 2 }, |
| 25746 | + { 0, 0x00 }, |
| 25747 | + }, |
| 25748 | + }, |
| 25749 | + { |
| 25750 | + AVR32_ALIAS_PICOVMUL1, |
| 25751 | + &avr32_opc_table[AVR32_OPC_COP], |
| 25752 | + { |
| 25753 | + { 0, PICO_CPNO }, |
| 25754 | + { 1, 0 }, { 1, 1 }, { 1, 2 }, |
| 25755 | + { 0, 0x01 }, |
| 25756 | + }, |
| 25757 | + }, |
| 25758 | + { |
| 25759 | + AVR32_ALIAS_PICOVMUL2, |
| 25760 | + &avr32_opc_table[AVR32_OPC_COP], |
| 25761 | + { |
| 25762 | + { 0, PICO_CPNO }, |
| 25763 | + { 1, 0 }, { 1, 1 }, { 1, 2 }, |
| 25764 | + { 0, 0x02 }, |
| 25765 | + }, |
| 25766 | + }, |
| 25767 | + { |
| 25768 | + AVR32_ALIAS_PICOVMUL3, |
| 25769 | + &avr32_opc_table[AVR32_OPC_COP], |
| 25770 | + { |
| 25771 | + { 0, PICO_CPNO }, |
| 25772 | + { 1, 0 }, { 1, 1 }, { 1, 2 }, |
| 25773 | + { 0, 0x03 }, |
| 25774 | + }, |
| 25775 | + }, |
| 25776 | + { |
| 25777 | + AVR32_ALIAS_PICOLD_D1, |
| 25778 | + &avr32_opc_table[AVR32_OPC_LDC_D1], |
| 25779 | + { |
| 25780 | + { 0, PICO_CPNO }, |
| 25781 | + { 1, 0 }, { 1, 1 }, |
| 25782 | + }, |
| 25783 | + }, |
| 25784 | + { |
| 25785 | + AVR32_ALIAS_PICOLD_D2, |
| 25786 | + &avr32_opc_table[AVR32_OPC_LDC_D2], |
| 25787 | + { |
| 25788 | + { 0, PICO_CPNO }, |
| 25789 | + { 1, 0 }, { 1, 1 }, |
| 25790 | + }, |
| 25791 | + }, |
| 25792 | + { |
| 25793 | + AVR32_ALIAS_PICOLD_D3, |
| 25794 | + &avr32_opc_table[AVR32_OPC_LDC_D3], |
| 25795 | + { |
| 25796 | + { 0, PICO_CPNO }, |
| 25797 | + { 1, 0 }, { 1, 1 }, { 1, 2 }, { 1, 3 }, |
| 25798 | + }, |
| 25799 | + }, |
| 25800 | + { |
| 25801 | + AVR32_ALIAS_PICOLD_W1, |
| 25802 | + &avr32_opc_table[AVR32_OPC_LDC_W1], |
| 25803 | + { |
| 25804 | + { 0, PICO_CPNO }, |
| 25805 | + { 1, 0 }, { 1, 1 }, |
| 25806 | + }, |
| 25807 | + }, |
| 25808 | + { |
| 25809 | + AVR32_ALIAS_PICOLD_W2, |
| 25810 | + &avr32_opc_table[AVR32_OPC_LDC_W2], |
| 25811 | + { |
| 25812 | + { 0, PICO_CPNO }, |
| 25813 | + { 1, 0 }, { 1, 1 }, |
| 25814 | + }, |
| 25815 | + }, |
| 25816 | + { |
| 25817 | + AVR32_ALIAS_PICOLD_W3, |
| 25818 | + &avr32_opc_table[AVR32_OPC_LDC_W3], |
| 25819 | + { |
| 25820 | + { 0, PICO_CPNO }, |
| 25821 | + { 1, 0 }, { 1, 1 }, { 1, 2 }, { 1, 3 }, |
| 25822 | + }, |
| 25823 | + }, |
| 25824 | + { |
| 25825 | + AVR32_ALIAS_PICOLDM_D, |
| 25826 | + &avr32_opc_table[AVR32_OPC_LDCM_D], |
| 25827 | + { |
| 25828 | + { 0, PICO_CPNO }, |
| 25829 | + { 1, 0 }, { 1, 1 }, |
| 25830 | + }, |
| 25831 | + }, |
| 25832 | + { |
| 25833 | + AVR32_ALIAS_PICOLDM_D_PU, |
| 25834 | + &avr32_opc_table[AVR32_OPC_LDCM_D_PU], |
| 25835 | + { |
| 25836 | + { 0, PICO_CPNO }, |
| 25837 | + { 1, 0 }, { 1, 1 }, |
| 25838 | + }, |
| 25839 | + }, |
| 25840 | + { |
| 25841 | + AVR32_ALIAS_PICOLDM_W, |
| 25842 | + &avr32_opc_table[AVR32_OPC_LDCM_W], |
| 25843 | + { |
| 25844 | + { 0, PICO_CPNO }, |
| 25845 | + { 1, 0 }, { 1, 1 }, { 1, 2 }, |
| 25846 | + }, |
| 25847 | + }, |
| 25848 | + { |
| 25849 | + AVR32_ALIAS_PICOLDM_W_PU, |
| 25850 | + &avr32_opc_table[AVR32_OPC_LDCM_W_PU], |
| 25851 | + { |
| 25852 | + { 0, PICO_CPNO }, |
| 25853 | + { 1, 0 }, { 1, 1 }, { 1, 2 }, |
| 25854 | + }, |
| 25855 | + }, |
| 25856 | + { |
| 25857 | + AVR32_ALIAS_PICOMV_D1, |
| 25858 | + &avr32_opc_table[AVR32_OPC_MVCR_D], |
| 25859 | + { |
| 25860 | + { 0, PICO_CPNO }, |
| 25861 | + { 1, 0 }, { 1, 1 }, |
| 25862 | + }, |
| 25863 | + }, |
| 25864 | + { |
| 25865 | + AVR32_ALIAS_PICOMV_D2, |
| 25866 | + &avr32_opc_table[AVR32_OPC_MVRC_D], |
| 25867 | + { |
| 25868 | + { 0, PICO_CPNO }, |
| 25869 | + { 1, 0 }, { 1, 1 }, |
| 25870 | + }, |
| 25871 | + }, |
| 25872 | + { |
| 25873 | + AVR32_ALIAS_PICOMV_W1, |
| 25874 | + &avr32_opc_table[AVR32_OPC_MVCR_W], |
| 25875 | + { |
| 25876 | + { 0, PICO_CPNO }, |
| 25877 | + { 1, 0 }, { 1, 1 }, |
| 25878 | + }, |
| 25879 | + }, |
| 25880 | + { |
| 25881 | + AVR32_ALIAS_PICOMV_W2, |
| 25882 | + &avr32_opc_table[AVR32_OPC_MVRC_W], |
| 25883 | + { |
| 25884 | + { 0, PICO_CPNO }, |
| 25885 | + { 1, 0 }, { 1, 1 }, |
| 25886 | + }, |
| 25887 | + }, |
| 25888 | + { |
| 25889 | + AVR32_ALIAS_PICOST_D1, |
| 25890 | + &avr32_opc_table[AVR32_OPC_STC_D1], |
| 25891 | + { |
| 25892 | + { 0, PICO_CPNO }, |
| 25893 | + { 1, 0 }, { 1, 1 }, { 1, 2 }, |
| 25894 | + }, |
| 25895 | + }, |
| 25896 | + { |
| 25897 | + AVR32_ALIAS_PICOST_D2, |
| 25898 | + &avr32_opc_table[AVR32_OPC_STC_D2], |
| 25899 | + { |
| 25900 | + { 0, PICO_CPNO }, |
| 25901 | + { 1, 0 }, { 1, 1 }, |
| 25902 | + }, |
| 25903 | + }, |
| 25904 | + { |
| 25905 | + AVR32_ALIAS_PICOST_D3, |
| 25906 | + &avr32_opc_table[AVR32_OPC_STC_D3], |
| 25907 | + { |
| 25908 | + { 0, PICO_CPNO }, |
| 25909 | + { 1, 0 }, { 1, 1 }, { 1, 2 }, { 1, 3 }, |
| 25910 | + }, |
| 25911 | + }, |
| 25912 | + { |
| 25913 | + AVR32_ALIAS_PICOST_W1, |
| 25914 | + &avr32_opc_table[AVR32_OPC_STC_W1], |
| 25915 | + { |
| 25916 | + { 0, PICO_CPNO }, |
| 25917 | + { 1, 0 }, { 1, 1 }, { 1, 2 }, |
| 25918 | + }, |
| 25919 | + }, |
| 25920 | + { |
| 25921 | + AVR32_ALIAS_PICOST_W2, |
| 25922 | + &avr32_opc_table[AVR32_OPC_STC_W2], |
| 25923 | + { |
| 25924 | + { 0, PICO_CPNO }, |
| 25925 | + { 1, 0 }, { 1, 1 }, |
| 25926 | + }, |
| 25927 | + }, |
| 25928 | + { |
| 25929 | + AVR32_ALIAS_PICOST_W3, |
| 25930 | + &avr32_opc_table[AVR32_OPC_STC_W3], |
| 25931 | + { |
| 25932 | + { 0, PICO_CPNO }, |
| 25933 | + { 1, 0 }, { 1, 1 }, { 1, 2 }, { 1, 3 }, |
| 25934 | + }, |
| 25935 | + }, |
| 25936 | + { |
| 25937 | + AVR32_ALIAS_PICOSTM_D, |
| 25938 | + &avr32_opc_table[AVR32_OPC_STCM_D], |
| 25939 | + { |
| 25940 | + { 0, PICO_CPNO }, |
| 25941 | + { 1, 0 }, { 1, 1 }, |
| 25942 | + }, |
| 25943 | + }, |
| 25944 | + { |
| 25945 | + AVR32_ALIAS_PICOSTM_D_PU, |
| 25946 | + &avr32_opc_table[AVR32_OPC_STCM_D_PU], |
| 25947 | + { |
| 25948 | + { 0, PICO_CPNO }, |
| 25949 | + { 1, 0 }, { 1, 1 }, |
| 25950 | + }, |
| 25951 | + }, |
| 25952 | + { |
| 25953 | + AVR32_ALIAS_PICOSTM_W, |
| 25954 | + &avr32_opc_table[AVR32_OPC_STCM_W], |
| 25955 | + { |
| 25956 | + { 0, PICO_CPNO }, |
| 25957 | + { 1, 0 }, { 1, 1 }, { 1, 2 }, |
| 25958 | + }, |
| 25959 | + }, |
| 25960 | + { |
| 25961 | + AVR32_ALIAS_PICOSTM_W_PU, |
| 25962 | + &avr32_opc_table[AVR32_OPC_STCM_W_PU], |
| 25963 | + { |
| 25964 | + { 0, PICO_CPNO }, |
| 25965 | + { 1, 0 }, { 1, 1 }, { 1, 2 }, |
| 25966 | + }, |
| 25967 | + }, |
| 25968 | + }; |
| 25969 | + |
| 25970 | + |
| 25971 | +#define SYNTAX_NORMAL0(id, mne, opc, arch) \ |
| 25972 | + { \ |
| 25973 | + AVR32_SYNTAX_##id, arch, \ |
| 25974 | + &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ |
| 25975 | + AVR32_PARSER_NORMAL, \ |
| 25976 | + { &avr32_opc_table[AVR32_OPC_##opc], }, \ |
| 25977 | + NULL, 0, { } \ |
| 25978 | + } |
| 25979 | +#define SYNTAX_NORMAL1(id, mne, opc, op0, arch) \ |
| 25980 | + { \ |
| 25981 | + AVR32_SYNTAX_##id, arch, \ |
| 25982 | + &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ |
| 25983 | + AVR32_PARSER_NORMAL, \ |
| 25984 | + { &avr32_opc_table[AVR32_OPC_##opc], }, \ |
| 25985 | + NULL, 1, \ |
| 25986 | + { \ |
| 25987 | + AVR32_OPERAND_##op0, \ |
| 25988 | + } \ |
| 25989 | + } |
| 25990 | +#define SYNTAX_NORMALM1(id, mne, opc, op0, arch) \ |
| 25991 | + { \ |
| 25992 | + AVR32_SYNTAX_##id, arch, \ |
| 25993 | + &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ |
| 25994 | + AVR32_PARSER_NORMAL, \ |
| 25995 | + { &avr32_opc_table[AVR32_OPC_##opc], }, \ |
| 25996 | + NULL, -1, \ |
| 25997 | + { \ |
| 25998 | + AVR32_OPERAND_##op0, \ |
| 25999 | + } \ |
| 26000 | + } |
| 26001 | +#define SYNTAX_NORMAL2(id, mne, opc, op0, op1, arch) \ |
| 26002 | + { \ |
| 26003 | + AVR32_SYNTAX_##id, arch, \ |
| 26004 | + &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ |
| 26005 | + AVR32_PARSER_NORMAL, \ |
| 26006 | + { &avr32_opc_table[AVR32_OPC_##opc], }, \ |
| 26007 | + NULL, 2, \ |
| 26008 | + { \ |
| 26009 | + AVR32_OPERAND_##op0, AVR32_OPERAND_##op1, \ |
| 26010 | + } \ |
| 26011 | + } |
| 26012 | +#define SYNTAX_NORMALM2(id, mne, opc, op0, op1, arch) \ |
| 26013 | + { \ |
| 26014 | + AVR32_SYNTAX_##id, arch, \ |
| 26015 | + &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ |
| 26016 | + AVR32_PARSER_NORMAL, \ |
| 26017 | + { &avr32_opc_table[AVR32_OPC_##opc], }, \ |
| 26018 | + NULL, -2, \ |
| 26019 | + { \ |
| 26020 | + AVR32_OPERAND_##op0, AVR32_OPERAND_##op1, \ |
| 26021 | + } \ |
| 26022 | + } |
| 26023 | +#define SYNTAX_NORMAL3(id, mne, opc, op0, op1, op2, arch) \ |
| 26024 | + { \ |
| 26025 | + AVR32_SYNTAX_##id, arch, \ |
| 26026 | + &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ |
| 26027 | + AVR32_PARSER_NORMAL, \ |
| 26028 | + { &avr32_opc_table[AVR32_OPC_##opc], }, \ |
| 26029 | + NULL, 3, \ |
| 26030 | + { \ |
| 26031 | + AVR32_OPERAND_##op0, AVR32_OPERAND_##op1, \ |
| 26032 | + AVR32_OPERAND_##op2, \ |
| 26033 | + } \ |
| 26034 | + } |
| 26035 | +#define SYNTAX_NORMALM3(id, mne, opc, op0, op1, op2, arch) \ |
| 26036 | + { \ |
| 26037 | + AVR32_SYNTAX_##id, arch, \ |
| 26038 | + &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ |
| 26039 | + AVR32_PARSER_NORMAL, \ |
| 26040 | + { &avr32_opc_table[AVR32_OPC_##opc], }, \ |
| 26041 | + NULL, -3, \ |
| 26042 | + { \ |
| 26043 | + AVR32_OPERAND_##op0, AVR32_OPERAND_##op1, \ |
| 26044 | + AVR32_OPERAND_##op2, \ |
| 26045 | + } \ |
| 26046 | + } |
| 26047 | +#define SYNTAX_NORMAL4(id, mne, opc, op0, op1, op2, op3, arch)\ |
| 26048 | + { \ |
| 26049 | + AVR32_SYNTAX_##id, arch, \ |
| 26050 | + &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ |
| 26051 | + AVR32_PARSER_NORMAL, \ |
| 26052 | + { &avr32_opc_table[AVR32_OPC_##opc], }, \ |
| 26053 | + NULL, 4, \ |
| 26054 | + { \ |
| 26055 | + AVR32_OPERAND_##op0, AVR32_OPERAND_##op1, \ |
| 26056 | + AVR32_OPERAND_##op2, AVR32_OPERAND_##op3, \ |
| 26057 | + } \ |
| 26058 | + } |
| 26059 | +#define SYNTAX_NORMAL5(id, mne, opc, op0, op1, op2, op3, op4, arch) \ |
| 26060 | + { \ |
| 26061 | + AVR32_SYNTAX_##id, arch, \ |
| 26062 | + &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ |
| 26063 | + AVR32_PARSER_NORMAL, \ |
| 26064 | + { &avr32_opc_table[AVR32_OPC_##opc], }, \ |
| 26065 | + NULL, 5, \ |
| 26066 | + { \ |
| 26067 | + AVR32_OPERAND_##op0, AVR32_OPERAND_##op1, \ |
| 26068 | + AVR32_OPERAND_##op2, AVR32_OPERAND_##op3, \ |
| 26069 | + AVR32_OPERAND_##op4, \ |
| 26070 | + } \ |
| 26071 | + } |
| 26072 | + |
| 26073 | +#define SYNTAX_NORMAL_C1(id, mne, opc, nxt, op0, arch) \ |
| 26074 | + { \ |
| 26075 | + AVR32_SYNTAX_##id, arch, \ |
| 26076 | + &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ |
| 26077 | + AVR32_PARSER_NORMAL, \ |
| 26078 | + { &avr32_opc_table[AVR32_OPC_##opc], }, \ |
| 26079 | + &avr32_syntax_table[AVR32_SYNTAX_##nxt], 1, \ |
| 26080 | + { \ |
| 26081 | + AVR32_OPERAND_##op0, \ |
| 26082 | + } \ |
| 26083 | + } |
| 26084 | +#define SYNTAX_NORMAL_CM1(id, mne, opc, nxt, op0, arch) \ |
| 26085 | + { \ |
| 26086 | + AVR32_SYNTAX_##id, arch, \ |
| 26087 | + &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ |
| 26088 | + AVR32_PARSER_NORMAL, \ |
| 26089 | + { &avr32_opc_table[AVR32_OPC_##opc], }, \ |
| 26090 | + &avr32_syntax_table[AVR32_SYNTAX_##nxt], -1, \ |
| 26091 | + { \ |
| 26092 | + AVR32_OPERAND_##op0, \ |
| 26093 | + } \ |
| 26094 | + } |
| 26095 | +#define SYNTAX_NORMAL_C2(id, mne, opc, nxt, op0, op1, arch) \ |
| 26096 | + { \ |
| 26097 | + AVR32_SYNTAX_##id, arch, \ |
| 26098 | + &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ |
| 26099 | + AVR32_PARSER_NORMAL, \ |
| 26100 | + { &avr32_opc_table[AVR32_OPC_##opc], }, \ |
| 26101 | + &avr32_syntax_table[AVR32_SYNTAX_##nxt], 2, \ |
| 26102 | + { \ |
| 26103 | + AVR32_OPERAND_##op0, AVR32_OPERAND_##op1, \ |
| 26104 | + } \ |
| 26105 | + } |
| 26106 | +#define SYNTAX_NORMAL_CM2(id, mne, opc, nxt, op0, op1, arch) \ |
| 26107 | + { \ |
| 26108 | + AVR32_SYNTAX_##id, arch, \ |
| 26109 | + &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ |
| 26110 | + AVR32_PARSER_NORMAL, \ |
| 26111 | + { &avr32_opc_table[AVR32_OPC_##opc], }, \ |
| 26112 | + &avr32_syntax_table[AVR32_SYNTAX_##nxt], -2, \ |
| 26113 | + { \ |
| 26114 | + AVR32_OPERAND_##op0, AVR32_OPERAND_##op1, \ |
| 26115 | + } \ |
| 26116 | + } |
| 26117 | +#define SYNTAX_NORMAL_C3(id, mne, opc, nxt, op0, op1, op2, arch) \ |
| 26118 | + { \ |
| 26119 | + AVR32_SYNTAX_##id, arch, \ |
| 26120 | + &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ |
| 26121 | + AVR32_PARSER_NORMAL, \ |
| 26122 | + { &avr32_opc_table[AVR32_OPC_##opc], }, \ |
| 26123 | + &avr32_syntax_table[AVR32_SYNTAX_##nxt], 3, \ |
| 26124 | + { \ |
| 26125 | + AVR32_OPERAND_##op0, AVR32_OPERAND_##op1, \ |
| 26126 | + AVR32_OPERAND_##op2, \ |
| 26127 | + } \ |
| 26128 | + } |
| 26129 | +#define SYNTAX_NORMAL_CM3(id, mne, opc, nxt, op0, op1, op2, arch) \ |
| 26130 | + { \ |
| 26131 | + AVR32_SYNTAX_##id, arch, \ |
| 26132 | + &avr32_mnemonic_table[AVR32_MNEMONIC_##mne], \ |
| 26133 | + AVR32_PARSER_NORMAL, \ |
| 26134 | + { &avr32_opc_table[AVR32_OPC_##opc], }, \ |
| 26135 | + &avr32_syntax_table[AVR32_SYNTAX_##nxt], -3, \ |
| 26136 | + { \ |
| 26137 | + AVR32_OPERAND_##op0, AVR32_OPERAND_##op1, \ |
| 26138 | + AVR32_OPERAND_##op2, \ |
| 26139 | + } \ |
| 26140 | + } |
| 26141 | + |
| 26142 | + |
| 26143 | +const struct avr32_syntax avr32_syntax_table[] = |
| 26144 | + { |
| 26145 | + SYNTAX_NORMAL1(ABS, ABS, ABS, INTREG, AVR32_V1), |
| 26146 | + SYNTAX_NORMAL1(ACALL, ACALL, ACALL, UNSIGNED_CONST_W, AVR32_V1), |
| 26147 | + SYNTAX_NORMAL1(ACR, ACR, ACR, INTREG,AVR32_V1), |
| 26148 | + SYNTAX_NORMAL3(ADC, ADC, ADC, INTREG, INTREG, INTREG, AVR32_V1), |
| 26149 | + SYNTAX_NORMAL_C2(ADD1, ADD, ADD1, ADD2, INTREG, INTREG, AVR32_V1), |
| 26150 | + SYNTAX_NORMAL3(ADD2, ADD, ADD2, INTREG, INTREG, INTREG_LSL, AVR32_V1), |
| 26151 | + SYNTAX_NORMAL3(ADDABS, ADDABS, ADDABS, INTREG, INTREG, INTREG, AVR32_V1), |
| 26152 | + SYNTAX_NORMAL3(ADDHH_W, ADDHH_W, ADDHH_W, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_DSP), |
| 26153 | + SYNTAX_NORMAL_C2(AND1, AND, AND1, AND2, INTREG, INTREG, AVR32_V1), |
| 26154 | + SYNTAX_NORMAL_C3(AND2, AND, AND2, AND3, INTREG, INTREG, INTREG_LSL, AVR32_V1), |
| 26155 | + SYNTAX_NORMAL3(AND3, AND, AND3, INTREG, INTREG, INTREG_LSR, AVR32_V1), |
| 26156 | + SYNTAX_NORMAL_C2(ANDH, ANDH, ANDH, ANDH_COH, INTREG, UNSIGNED_CONST, AVR32_V1), |
| 26157 | + SYNTAX_NORMAL3(ANDH_COH, ANDH, ANDH_COH, INTREG, UNSIGNED_CONST, COH, AVR32_V1), |
| 26158 | + SYNTAX_NORMAL_C2(ANDL, ANDL, ANDL, ANDL_COH, INTREG, UNSIGNED_CONST, AVR32_V1), |
| 26159 | + SYNTAX_NORMAL3(ANDL_COH, ANDL, ANDL_COH, INTREG, UNSIGNED_CONST, COH, AVR32_V1), |
| 26160 | + SYNTAX_NORMAL2(ANDN, ANDN, ANDN, INTREG, INTREG, AVR32_V1), |
| 26161 | + SYNTAX_NORMAL_C3(ASR1, ASR, ASR1, ASR3, INTREG, INTREG, INTREG, AVR32_V1), |
| 26162 | + SYNTAX_NORMAL_C3(ASR3, ASR, ASR3, ASR2, INTREG, INTREG, UNSIGNED_NUMBER, AVR32_V1), |
| 26163 | + SYNTAX_NORMAL2(ASR2, ASR, ASR2, INTREG, UNSIGNED_NUMBER, AVR32_V1), |
| 26164 | + SYNTAX_NORMAL4(BFEXTS, BFEXTS, BFEXTS, INTREG, INTREG, UNSIGNED_NUMBER, UNSIGNED_NUMBER, AVR32_V1), |
| 26165 | + SYNTAX_NORMAL4(BFEXTU, BFEXTU, BFEXTU, INTREG, INTREG, UNSIGNED_NUMBER, UNSIGNED_NUMBER, AVR32_V1), |
| 26166 | + SYNTAX_NORMAL4(BFINS, BFINS, BFINS, INTREG, INTREG, UNSIGNED_NUMBER, UNSIGNED_NUMBER, AVR32_V1), |
| 26167 | + SYNTAX_NORMAL2(BLD, BLD, BLD, INTREG, UNSIGNED_NUMBER, AVR32_V1), |
| 26168 | + SYNTAX_NORMAL_C1(BREQ1, BREQ, BREQ1, BREQ2, JMPLABEL, AVR32_V1), |
| 26169 | + SYNTAX_NORMAL_C1(BRNE1, BRNE, BRNE1, BRNE2, JMPLABEL, AVR32_V1), |
| 26170 | + SYNTAX_NORMAL_C1(BRCC1, BRCC, BRCC1, BRCC2, JMPLABEL, AVR32_V1), |
| 26171 | + SYNTAX_NORMAL_C1(BRCS1, BRCS, BRCS1, BRCS2, JMPLABEL, AVR32_V1), |
| 26172 | + SYNTAX_NORMAL_C1(BRGE1, BRGE, BRGE1, BRGE2, JMPLABEL, AVR32_V1), |
| 26173 | + SYNTAX_NORMAL_C1(BRLT1, BRLT, BRLT1, BRLT2, JMPLABEL, AVR32_V1), |
| 26174 | + SYNTAX_NORMAL_C1(BRMI1, BRMI, BRMI1, BRMI2, JMPLABEL, AVR32_V1), |
| 26175 | + SYNTAX_NORMAL_C1(BRPL1, BRPL, BRPL1, BRPL2, JMPLABEL, AVR32_V1), |
| 26176 | + SYNTAX_NORMAL_C1(BRHS1, BRHS, BRCC1, BRHS2, JMPLABEL, AVR32_V1), |
| 26177 | + SYNTAX_NORMAL_C1(BRLO1, BRLO, BRCS1, BRLO2, JMPLABEL, AVR32_V1), |
| 26178 | + SYNTAX_NORMAL1(BREQ2, BREQ, BREQ2, JMPLABEL, AVR32_V1), |
| 26179 | + SYNTAX_NORMAL1(BRNE2, BRNE, BRNE2, JMPLABEL, AVR32_V1), |
| 26180 | + SYNTAX_NORMAL1(BRCC2, BRCC, BRCC2, JMPLABEL, AVR32_V1), |
| 26181 | + SYNTAX_NORMAL1(BRCS2, BRCS, BRCS2, JMPLABEL, AVR32_V1), |
| 26182 | + SYNTAX_NORMAL1(BRGE2, BRGE, BRGE2, JMPLABEL, AVR32_V1), |
| 26183 | + SYNTAX_NORMAL1(BRLT2, BRLT, BRLT2, JMPLABEL, AVR32_V1), |
| 26184 | + SYNTAX_NORMAL1(BRMI2, BRMI, BRMI2, JMPLABEL, AVR32_V1), |
| 26185 | + SYNTAX_NORMAL1(BRPL2, BRPL, BRPL2, JMPLABEL, AVR32_V1), |
| 26186 | + SYNTAX_NORMAL1(BRLS, BRLS, BRLS, JMPLABEL, AVR32_V1), |
| 26187 | + SYNTAX_NORMAL1(BRGT, BRGT, BRGT, JMPLABEL, AVR32_V1), |
| 26188 | + SYNTAX_NORMAL1(BRLE, BRLE, BRLE, JMPLABEL, AVR32_V1), |
| 26189 | + SYNTAX_NORMAL1(BRHI, BRHI, BRHI, JMPLABEL, AVR32_V1), |
| 26190 | + SYNTAX_NORMAL1(BRVS, BRVS, BRVS, JMPLABEL, AVR32_V1), |
| 26191 | + SYNTAX_NORMAL1(BRVC, BRVC, BRVC, JMPLABEL, AVR32_V1), |
| 26192 | + SYNTAX_NORMAL1(BRQS, BRQS, BRQS, JMPLABEL, AVR32_V1), |
| 26193 | + SYNTAX_NORMAL1(BRAL, BRAL, BRAL, JMPLABEL, AVR32_V1), |
| 26194 | + SYNTAX_NORMAL1(BRHS2, BRHS, BRCC2, JMPLABEL, AVR32_V1), |
| 26195 | + SYNTAX_NORMAL1(BRLO2, BRLO, BRCS2, JMPLABEL, AVR32_V1), |
| 26196 | + SYNTAX_NORMAL0(BREAKPOINT, BREAKPOINT, BREAKPOINT, AVR32_V1), |
| 26197 | + SYNTAX_NORMAL1(BREV, BREV, BREV, INTREG, AVR32_V1), |
| 26198 | + SYNTAX_NORMAL2(BST, BST, BST, INTREG, UNSIGNED_NUMBER, AVR32_V1), |
| 26199 | + SYNTAX_NORMAL2(CACHE, CACHE, CACHE, INTREG_SDISP, UNSIGNED_NUMBER, AVR32_V1), |
| 26200 | + SYNTAX_NORMAL1(CASTS_B, CASTS_B, CASTS_B, INTREG, AVR32_V1), |
| 26201 | + SYNTAX_NORMAL1(CASTS_H, CASTS_H, CASTS_H, INTREG, AVR32_V1), |
| 26202 | + SYNTAX_NORMAL1(CASTU_B, CASTU_B, CASTU_B, INTREG, AVR32_V1), |
| 26203 | + SYNTAX_NORMAL1(CASTU_H, CASTU_H, CASTU_H, INTREG, AVR32_V1), |
| 26204 | + SYNTAX_NORMAL2(CBR, CBR, CBR, INTREG, UNSIGNED_NUMBER, AVR32_V1), |
| 26205 | + SYNTAX_NORMAL2(CLZ, CLZ, CLZ, INTREG, INTREG, AVR32_V1), |
| 26206 | + SYNTAX_NORMAL1(COM, COM, COM, INTREG, AVR32_V1), |
| 26207 | + SYNTAX_NORMAL5(COP, COP, COP, CPNO, CPREG, CPREG, CPREG, UNSIGNED_NUMBER, AVR32_V1), |
| 26208 | + SYNTAX_NORMAL2(CP_B, CP_B, CP_B, INTREG, INTREG, AVR32_V1), |
| 26209 | + SYNTAX_NORMAL2(CP_H, CP_H, CP_H, INTREG, INTREG, AVR32_V1), |
| 26210 | + SYNTAX_NORMAL_C2(CP_W1, CP_W, CP_W1, CP_W2, INTREG, INTREG, AVR32_V1), |
| 26211 | + SYNTAX_NORMAL_C2(CP_W2, CP_W, CP_W2, CP_W3, INTREG, SIGNED_CONST, AVR32_V1), |
| 26212 | + SYNTAX_NORMAL2(CP_W3, CP_W, CP_W3, INTREG, SIGNED_CONST, AVR32_V1), |
| 26213 | + SYNTAX_NORMAL_C2(CPC1, CPC, CPC1, CPC2, INTREG, INTREG, AVR32_V1), |
| 26214 | + SYNTAX_NORMAL1(CPC2, CPC, CPC2, INTREG, AVR32_V1), |
| 26215 | + SYNTAX_NORMAL1(CSRF, CSRF, CSRF, UNSIGNED_NUMBER, AVR32_V1), |
| 26216 | + SYNTAX_NORMAL1(CSRFCZ, CSRFCZ, CSRFCZ, UNSIGNED_NUMBER, AVR32_V1), |
| 26217 | + SYNTAX_NORMAL3(DIVS, DIVS, DIVS, INTREG, INTREG, INTREG, AVR32_V1), |
| 26218 | + SYNTAX_NORMAL3(DIVU, DIVU, DIVU, INTREG, INTREG, INTREG, AVR32_V1), |
| 26219 | + SYNTAX_NORMAL_C2(EOR1, EOR, EOR1, EOR2, INTREG, INTREG, AVR32_V1), |
| 26220 | + SYNTAX_NORMAL_C3(EOR2, EOR, EOR2, EOR3, INTREG, INTREG, INTREG_LSL, AVR32_V1), |
| 26221 | + SYNTAX_NORMAL3(EOR3, EOR, EOR3, INTREG, INTREG, INTREG_LSR, AVR32_V1), |
| 26222 | + SYNTAX_NORMAL2(EORL, EORL, EORL, INTREG, UNSIGNED_CONST, AVR32_V1), |
| 26223 | + SYNTAX_NORMAL2(EORH, EORH, EORH, INTREG, UNSIGNED_CONST, AVR32_V1), |
| 26224 | + SYNTAX_NORMAL0(FRS, FRS, FRS, AVR32_V1), |
| 26225 | + SYNTAX_NORMAL0(SSCALL, SSCALL, SSCALL, AVR32_V3), |
| 26226 | + SYNTAX_NORMAL0(RETSS, RETSS, RETSS, AVR32_V3), |
| 26227 | + SYNTAX_NORMAL1(ICALL, ICALL, ICALL, INTREG, AVR32_V1), |
| 26228 | + SYNTAX_NORMAL1(INCJOSP, INCJOSP, INCJOSP, JOSPINC, AVR32_V1), |
| 26229 | + SYNTAX_NORMAL_C2(LD_D1, LD_D, LD_D1, LD_D2, DWREG, INTREG_POSTINC, AVR32_V1), |
| 26230 | + SYNTAX_NORMAL_C2(LD_D2, LD_D, LD_D2, LD_D3, DWREG, INTREG_PREDEC, AVR32_V1), |
| 26231 | + SYNTAX_NORMAL_C2(LD_D3, LD_D, LD_D3, LD_D5, DWREG, INTREG, AVR32_V1), |
| 26232 | + SYNTAX_NORMAL_C2(LD_D5, LD_D, LD_D5, LD_D4, DWREG, INTREG_INDEX, AVR32_V1), |
| 26233 | + SYNTAX_NORMAL2(LD_D4, LD_D, LD_D4, DWREG, INTREG_SDISP, AVR32_V1), |
| 26234 | + SYNTAX_NORMAL_C2(LD_SB2, LD_SB, LD_SB2, LD_SB1, INTREG, INTREG_INDEX, AVR32_V1), |
| 26235 | + SYNTAX_NORMAL2(LD_SB1, LD_SB, LD_SB1, INTREG, INTREG_SDISP, AVR32_V1), |
| 26236 | + SYNTAX_NORMAL_C2(LD_UB1, LD_UB, LD_UB1, LD_UB2, INTREG, INTREG_POSTINC, AVR32_V1), |
| 26237 | + SYNTAX_NORMAL_C2(LD_UB2, LD_UB, LD_UB2, LD_UB5, INTREG, INTREG_PREDEC, AVR32_V1), |
| 26238 | + SYNTAX_NORMAL_C2(LD_UB5, LD_UB, LD_UB5, LD_UB3, INTREG, INTREG_INDEX, AVR32_V1), |
| 26239 | + SYNTAX_NORMAL_C2(LD_UB3, LD_UB, LD_UB3, LD_UB4, INTREG, INTREG_UDISP, AVR32_V1), |
| 26240 | + SYNTAX_NORMAL2(LD_UB4, LD_UB, LD_UB4, INTREG, INTREG_SDISP, AVR32_V1), |
| 26241 | + SYNTAX_NORMAL_C2(LD_SH1, LD_SH, LD_SH1, LD_SH2, INTREG, INTREG_POSTINC, AVR32_V1), |
| 26242 | + SYNTAX_NORMAL_C2(LD_SH2, LD_SH, LD_SH2, LD_SH5, INTREG, INTREG_PREDEC, AVR32_V1), |
| 26243 | + SYNTAX_NORMAL_C2(LD_SH5, LD_SH, LD_SH5, LD_SH3, INTREG, INTREG_INDEX, AVR32_V1), |
| 26244 | + SYNTAX_NORMAL_C2(LD_SH3, LD_SH, LD_SH3, LD_SH4, INTREG, INTREG_UDISP_H, AVR32_V1), |
| 26245 | + SYNTAX_NORMAL2(LD_SH4, LD_SH, LD_SH4, INTREG, INTREG_SDISP, AVR32_V1), |
| 26246 | + SYNTAX_NORMAL_C2(LD_UH1, LD_UH, LD_UH1, LD_UH2, INTREG, INTREG_POSTINC, AVR32_V1), |
| 26247 | + SYNTAX_NORMAL_C2(LD_UH2, LD_UH, LD_UH2, LD_UH5, INTREG, INTREG_PREDEC, AVR32_V1), |
| 26248 | + SYNTAX_NORMAL_C2(LD_UH5, LD_UH, LD_UH5, LD_UH3, INTREG, INTREG_INDEX, AVR32_V1), |
| 26249 | + SYNTAX_NORMAL_C2(LD_UH3, LD_UH, LD_UH3, LD_UH4, INTREG, INTREG_UDISP_H, AVR32_V1), |
| 26250 | + SYNTAX_NORMAL2(LD_UH4, LD_UH, LD_UH4, INTREG, INTREG_SDISP, AVR32_V1), |
| 26251 | + SYNTAX_NORMAL_C2(LD_W1, LD_W, LD_W1, LD_W2, INTREG, INTREG_POSTINC, AVR32_V1), |
| 26252 | + SYNTAX_NORMAL_C2(LD_W2, LD_W, LD_W2, LD_W5, INTREG, INTREG_PREDEC, AVR32_V1), |
| 26253 | + SYNTAX_NORMAL_C2(LD_W5, LD_W, LD_W5, LD_W6, INTREG, INTREG_INDEX, AVR32_V1), |
| 26254 | + SYNTAX_NORMAL_C2(LD_W6, LD_W, LD_W6, LD_W3, INTREG, INTREG_XINDEX, AVR32_V1), |
| 26255 | + SYNTAX_NORMAL_C2(LD_W3, LD_W, LD_W3, LD_W4, INTREG, INTREG_UDISP_W, AVR32_V1), |
| 26256 | + SYNTAX_NORMAL2(LD_W4, LD_W, LD_W4, INTREG, INTREG_SDISP, AVR32_V1), |
| 26257 | + SYNTAX_NORMAL3(LDC_D1, LDC_D, LDC_D1, CPNO, CPREG_D, INTREG_UDISP_W, AVR32_V1), |
| 26258 | + SYNTAX_NORMAL_C3(LDC_D2, LDC_D, LDC_D2, LDC_D1, CPNO, CPREG_D, INTREG_PREDEC, AVR32_V1), |
| 26259 | + SYNTAX_NORMAL_C3(LDC_D3, LDC_D, LDC_D3, LDC_D2, CPNO, CPREG_D, INTREG_INDEX, AVR32_V1), |
| 26260 | + SYNTAX_NORMAL3(LDC_W1, LDC_W, LDC_W1, CPNO, CPREG, INTREG_UDISP_W, AVR32_V1), |
| 26261 | + SYNTAX_NORMAL_C3(LDC_W2, LDC_W, LDC_W2, LDC_W1, CPNO, CPREG, INTREG_PREDEC, AVR32_V1), |
| 26262 | + SYNTAX_NORMAL_C3(LDC_W3, LDC_W, LDC_W3, LDC_W2, CPNO, CPREG, INTREG_INDEX, AVR32_V1), |
| 26263 | + SYNTAX_NORMAL2(LDC0_D, LDC0_D, LDC0_D, CPREG_D, INTREG_UDISP_W, AVR32_V1), |
| 26264 | + SYNTAX_NORMAL2(LDC0_W, LDC0_W, LDC0_W, CPREG, INTREG_UDISP_W, AVR32_V1), |
| 26265 | + SYNTAX_NORMAL_CM3(LDCM_D, LDCM_D, LDCM_D, LDCM_D_PU, CPNO, INTREG, REGLIST_CPD8, AVR32_V1), |
| 26266 | + SYNTAX_NORMALM3(LDCM_D_PU, LDCM_D, LDCM_D_PU, CPNO, INTREG_POSTINC, REGLIST_CPD8, AVR32_V1), |
| 26267 | + SYNTAX_NORMAL_CM3(LDCM_W, LDCM_W, LDCM_W, LDCM_W_PU, CPNO, INTREG, REGLIST_CP8, AVR32_V1), |
| 26268 | + SYNTAX_NORMALM3(LDCM_W_PU, LDCM_W, LDCM_W_PU, CPNO, INTREG_POSTINC, REGLIST_CP8, AVR32_V1), |
| 26269 | + SYNTAX_NORMAL2(LDDPC, LDDPC, LDDPC, INTREG, PC_UDISP_W, AVR32_V1), |
| 26270 | + SYNTAX_NORMAL2(LDDPC_EXT, LDDPC, LDDPC_EXT, INTREG, SIGNED_CONST, AVR32_V1), |
| 26271 | + SYNTAX_NORMAL2(LDDSP, LDDSP, LDDSP, INTREG, SP_UDISP_W, AVR32_V1), |
| 26272 | + SYNTAX_NORMAL2(LDINS_B, LDINS_B, LDINS_B, INTREG_BSEL, INTREG_SDISP, AVR32_V1), |
| 26273 | + SYNTAX_NORMAL2(LDINS_H, LDINS_H, LDINS_H, INTREG_HSEL, INTREG_SDISP_H, AVR32_V1), |
| 26274 | + SYNTAX_NORMALM1(LDM, LDM, LDM, REGLIST_LDM, AVR32_V1), |
| 26275 | + SYNTAX_NORMAL_CM2(LDMTS, LDMTS, LDMTS, LDMTS_PU, INTREG, REGLIST16, AVR32_V1), |
| 26276 | + SYNTAX_NORMALM2(LDMTS_PU, LDMTS, LDMTS_PU, INTREG_POSTINC, REGLIST16, AVR32_V1), |
| 26277 | + SYNTAX_NORMAL2(LDSWP_SH, LDSWP_SH, LDSWP_SH, INTREG, INTREG_SDISP_H, AVR32_V1), |
| 26278 | + SYNTAX_NORMAL2(LDSWP_UH, LDSWP_UH, LDSWP_UH, INTREG, INTREG_SDISP_H, AVR32_V1), |
| 26279 | + SYNTAX_NORMAL2(LDSWP_W, LDSWP_W, LDSWP_W, INTREG, INTREG_SDISP_W, AVR32_V1), |
| 26280 | + SYNTAX_NORMAL_C3(LSL1, LSL, LSL1, LSL3, INTREG, INTREG, INTREG, AVR32_V1), |
| 26281 | + SYNTAX_NORMAL_C3(LSL3, LSL, LSL3, LSL2, INTREG, INTREG, UNSIGNED_NUMBER, AVR32_V1), |
| 26282 | + SYNTAX_NORMAL2(LSL2, LSL, LSL2, INTREG, UNSIGNED_NUMBER, AVR32_V1), |
| 26283 | + SYNTAX_NORMAL_C3(LSR1, LSR, LSR1, LSR3, INTREG, INTREG, INTREG, AVR32_V1), |
| 26284 | + SYNTAX_NORMAL_C3(LSR3, LSR, LSR3, LSR2, INTREG, INTREG, UNSIGNED_NUMBER, AVR32_V1), |
| 26285 | + SYNTAX_NORMAL2(LSR2, LSR, LSR2, INTREG, UNSIGNED_NUMBER, AVR32_V1), |
| 26286 | + SYNTAX_NORMAL3(MAC, MAC, MAC, INTREG, INTREG, INTREG, AVR32_V1), |
| 26287 | + SYNTAX_NORMAL3(MACHH_D, MACHH_D, MACHH_D, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_DSP), |
| 26288 | + SYNTAX_NORMAL3(MACHH_W, MACHH_W, MACHH_W, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_DSP), |
| 26289 | + SYNTAX_NORMAL3(MACS_D, MACS_D, MACS_D, INTREG, INTREG, INTREG, AVR32_V1), |
| 26290 | + SYNTAX_NORMAL3(MACSATHH_W, MACSATHH_W, MACSATHH_W, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_DSP), |
| 26291 | + SYNTAX_NORMAL3(MACUD, MACU_D, MACUD, INTREG, INTREG, INTREG, AVR32_V1), |
| 26292 | + SYNTAX_NORMAL3(MACWH_D, MACWH_D, MACWH_D, INTREG, INTREG, INTREG_HSEL, AVR32_DSP), |
| 26293 | + SYNTAX_NORMAL3(MAX, MAX, MAX, INTREG, INTREG, INTREG, AVR32_V1), |
| 26294 | + SYNTAX_NORMAL1(MCALL, MCALL, MCALL, MCALL, AVR32_V1), |
| 26295 | + SYNTAX_NORMAL2(MFDR, MFDR, MFDR, INTREG, UNSIGNED_CONST_W, AVR32_V1), |
| 26296 | + SYNTAX_NORMAL2(MFSR, MFSR, MFSR, INTREG, UNSIGNED_CONST_W, AVR32_V1), |
| 26297 | + SYNTAX_NORMAL3(MIN, MIN, MIN, INTREG, INTREG, INTREG, AVR32_V1), |
| 26298 | + SYNTAX_NORMAL_C2(MOV3, MOV, MOV3, MOV1, INTREG, INTREG, AVR32_V1), |
| 26299 | + SYNTAX_NORMAL_C2(MOV1, MOV, MOV1, MOV2, INTREG, SIGNED_CONST, AVR32_V1), |
| 26300 | + SYNTAX_NORMAL2(MOV2, MOV, MOV2,INTREG, SIGNED_CONST, AVR32_V1), |
| 26301 | + SYNTAX_NORMAL_C2(MOVEQ1, MOVEQ, MOVEQ1, MOVEQ2, INTREG, INTREG, AVR32_V1), |
| 26302 | + SYNTAX_NORMAL_C2(MOVNE1, MOVNE, MOVNE1, MOVNE2, INTREG, INTREG, AVR32_V1), |
| 26303 | + SYNTAX_NORMAL_C2(MOVCC1, MOVCC, MOVCC1, MOVCC2, INTREG, INTREG, AVR32_V1), |
| 26304 | + SYNTAX_NORMAL_C2(MOVCS1, MOVCS, MOVCS1, MOVCS2, INTREG, INTREG, AVR32_V1), |
| 26305 | + SYNTAX_NORMAL_C2(MOVGE1, MOVGE, MOVGE1, MOVGE2, INTREG, INTREG, AVR32_V1), |
| 26306 | + SYNTAX_NORMAL_C2(MOVLT1, MOVLT, MOVLT1, MOVLT2, INTREG, INTREG, AVR32_V1), |
| 26307 | + SYNTAX_NORMAL_C2(MOVMI1, MOVMI, MOVMI1, MOVMI2, INTREG, INTREG, AVR32_V1), |
| 26308 | + SYNTAX_NORMAL_C2(MOVPL1, MOVPL, MOVPL1, MOVPL2, INTREG, INTREG, AVR32_V1), |
| 26309 | + SYNTAX_NORMAL_C2(MOVLS1, MOVLS, MOVLS1, MOVLS2, INTREG, INTREG, AVR32_V1), |
| 26310 | + SYNTAX_NORMAL_C2(MOVGT1, MOVGT, MOVGT1, MOVGT2, INTREG, INTREG, AVR32_V1), |
| 26311 | + SYNTAX_NORMAL_C2(MOVLE1, MOVLE, MOVLE1, MOVLE2, INTREG, INTREG, AVR32_V1), |
| 26312 | + SYNTAX_NORMAL_C2(MOVHI1, MOVHI, MOVHI1, MOVHI2, INTREG, INTREG, AVR32_V1), |
| 26313 | + SYNTAX_NORMAL_C2(MOVVS1, MOVVS, MOVVS1, MOVVS2, INTREG, INTREG, AVR32_V1), |
| 26314 | + SYNTAX_NORMAL_C2(MOVVC1, MOVVC, MOVVC1, MOVVC2, INTREG, INTREG, AVR32_V1), |
| 26315 | + SYNTAX_NORMAL_C2(MOVQS1, MOVQS, MOVQS1, MOVQS2, INTREG, INTREG, AVR32_V1), |
| 26316 | + SYNTAX_NORMAL_C2(MOVAL1, MOVAL, MOVAL1, MOVAL2, INTREG, INTREG, AVR32_V1), |
| 26317 | + SYNTAX_NORMAL_C2(MOVHS1, MOVHS, MOVCC1, MOVHS2, INTREG, INTREG, AVR32_V1), |
| 26318 | + SYNTAX_NORMAL_C2(MOVLO1, MOVLO, MOVCS1, MOVLO2, INTREG, INTREG, AVR32_V1), |
| 26319 | + SYNTAX_NORMAL2(MOVEQ2, MOVEQ, MOVEQ2, INTREG, SIGNED_CONST, AVR32_V1), |
| 26320 | + SYNTAX_NORMAL2(MOVNE2, MOVNE, MOVNE2, INTREG, SIGNED_CONST, AVR32_V1), |
| 26321 | + SYNTAX_NORMAL2(MOVCC2, MOVCC, MOVCC2, INTREG, SIGNED_CONST, AVR32_V1), |
| 26322 | + SYNTAX_NORMAL2(MOVCS2, MOVCS, MOVCS2, INTREG, SIGNED_CONST, AVR32_V1), |
| 26323 | + SYNTAX_NORMAL2(MOVGE2, MOVGE, MOVGE2, INTREG, SIGNED_CONST, AVR32_V1), |
| 26324 | + SYNTAX_NORMAL2(MOVLT2, MOVLT, MOVLT2, INTREG, SIGNED_CONST, AVR32_V1), |
| 26325 | + SYNTAX_NORMAL2(MOVMI2, MOVMI, MOVMI2, INTREG, SIGNED_CONST, AVR32_V1), |
| 26326 | + SYNTAX_NORMAL2(MOVPL2, MOVPL, MOVPL2, INTREG, SIGNED_CONST, AVR32_V1), |
| 26327 | + SYNTAX_NORMAL2(MOVLS2, MOVLS, MOVLS2, INTREG, SIGNED_CONST, AVR32_V1), |
| 26328 | + SYNTAX_NORMAL2(MOVGT2, MOVGT, MOVGT2, INTREG, SIGNED_CONST, AVR32_V1), |
| 26329 | + SYNTAX_NORMAL2(MOVLE2, MOVLE, MOVLE2, INTREG, SIGNED_CONST, AVR32_V1), |
| 26330 | + SYNTAX_NORMAL2(MOVHI2, MOVHI, MOVHI2, INTREG, SIGNED_CONST, AVR32_V1), |
| 26331 | + SYNTAX_NORMAL2(MOVVS2, MOVVS, MOVVS2, INTREG, SIGNED_CONST, AVR32_V1), |
| 26332 | + SYNTAX_NORMAL2(MOVVC2, MOVVC, MOVVC2, INTREG, SIGNED_CONST, AVR32_V1), |
| 26333 | + SYNTAX_NORMAL2(MOVQS2, MOVQS, MOVQS2, INTREG, SIGNED_CONST, AVR32_V1), |
| 26334 | + SYNTAX_NORMAL2(MOVAL2, MOVAL, MOVAL2, INTREG, SIGNED_CONST, AVR32_V1), |
| 26335 | + SYNTAX_NORMAL2(MOVHS2, MOVHS, MOVCC2, INTREG, SIGNED_CONST, AVR32_V1), |
| 26336 | + SYNTAX_NORMAL2(MOVLO2, MOVLO, MOVCS2, INTREG, SIGNED_CONST, AVR32_V1), |
| 26337 | + SYNTAX_NORMAL2(MTDR, MTDR, MTDR, UNSIGNED_CONST_W, INTREG, AVR32_V1), |
| 26338 | + SYNTAX_NORMAL2(MTSR, MTSR, MTSR, UNSIGNED_CONST_W, INTREG, AVR32_V1), |
| 26339 | + SYNTAX_NORMAL_C2(MUL1, MUL, MUL1, MUL2, INTREG, INTREG, AVR32_V1), |
| 26340 | + SYNTAX_NORMAL_C3(MUL2, MUL, MUL2, MUL3, INTREG, INTREG, INTREG, AVR32_V1), |
| 26341 | + SYNTAX_NORMAL3(MUL3, MUL, MUL3, INTREG, INTREG, SIGNED_CONST, AVR32_V1), |
| 26342 | + SYNTAX_NORMAL3(MULHH_W, MULHH_W, MULHH_W, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_DSP), |
| 26343 | + SYNTAX_NORMAL3(MULNHH_W, MULNHH_W, MULNHH_W, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_DSP), |
| 26344 | + SYNTAX_NORMAL3(MULNWH_D, MULNWH_D, MULNWH_D, INTREG, INTREG, INTREG_HSEL, AVR32_DSP), |
| 26345 | + SYNTAX_NORMAL3(MULSD, MULS_D, MULSD, INTREG, INTREG, INTREG, AVR32_V1), |
| 26346 | + SYNTAX_NORMAL3(MULSATHH_H, MULSATHH_H, MULSATHH_H, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_DSP), |
| 26347 | + SYNTAX_NORMAL3(MULSATHH_W, MULSATHH_W, MULSATHH_W, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_DSP), |
| 26348 | + SYNTAX_NORMAL3(MULSATRNDHH_H, MULSATRNDHH_H, MULSATRNDHH_H, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_DSP), |
| 26349 | + SYNTAX_NORMAL3(MULSATRNDWH_W, MULSATRNDWH_W, MULSATRNDWH_W, INTREG, INTREG, INTREG_HSEL, AVR32_DSP), |
| 26350 | + SYNTAX_NORMAL3(MULSATWH_W, MULSATWH_W, MULSATWH_W, INTREG, INTREG, INTREG_HSEL, AVR32_DSP), |
| 26351 | + SYNTAX_NORMAL3(MULU_D, MULU_D, MULU_D, INTREG, INTREG, INTREG, AVR32_V1), |
| 26352 | + SYNTAX_NORMAL3(MULWH_D, MULWH_D, MULWH_D, INTREG, INTREG, INTREG_HSEL, AVR32_DSP), |
| 26353 | + SYNTAX_NORMAL1(MUSFR, MUSFR, MUSFR, INTREG, AVR32_V1), |
| 26354 | + SYNTAX_NORMAL1(MUSTR, MUSTR, MUSTR, INTREG, AVR32_V1), |
| 26355 | + SYNTAX_NORMAL3(MVCR_D, MVCR_D, MVCR_D, CPNO, DWREG, CPREG_D, AVR32_V1), |
| 26356 | + SYNTAX_NORMAL3(MVCR_W, MVCR_W, MVCR_W, CPNO, INTREG, CPREG, AVR32_V1), |
| 26357 | + SYNTAX_NORMAL3(MVRC_D, MVRC_D, MVRC_D, CPNO, CPREG_D, DWREG, AVR32_V1), |
| 26358 | + SYNTAX_NORMAL3(MVRC_W, MVRC_W, MVRC_W, CPNO, CPREG, INTREG, AVR32_V1), |
| 26359 | + SYNTAX_NORMAL1(NEG, NEG, NEG, INTREG, AVR32_V1), |
| 26360 | + SYNTAX_NORMAL0(NOP, NOP, NOP, AVR32_V1), |
| 26361 | + SYNTAX_NORMAL_C2(OR1, OR, OR1, OR2, INTREG, INTREG, AVR32_V1), |
| 26362 | + SYNTAX_NORMAL_C3(OR2, OR, OR2, OR3, INTREG, INTREG, INTREG_LSL, AVR32_V1), |
| 26363 | + SYNTAX_NORMAL3(OR3, OR, OR3, INTREG, INTREG, INTREG_LSR, AVR32_V1), |
| 26364 | + SYNTAX_NORMAL2(ORH, ORH, ORH, INTREG, UNSIGNED_CONST, AVR32_V1), |
| 26365 | + SYNTAX_NORMAL2(ORL, ORL, ORL, INTREG, UNSIGNED_CONST, AVR32_V1), |
| 26366 | + SYNTAX_NORMAL2(PABS_SB, PABS_SB, PABS_SB, INTREG, INTREG, AVR32_SIMD), |
| 26367 | + SYNTAX_NORMAL2(PABS_SH, PABS_SH, PABS_SH, INTREG, INTREG, AVR32_SIMD), |
| 26368 | + SYNTAX_NORMAL3(PACKSH_SB, PACKSH_SB, PACKSH_SB, INTREG, INTREG, INTREG, AVR32_SIMD), |
| 26369 | + SYNTAX_NORMAL3(PACKSH_UB, PACKSH_UB, PACKSH_UB, INTREG, INTREG, INTREG, AVR32_SIMD), |
| 26370 | + SYNTAX_NORMAL3(PACKW_SH, PACKW_SH, PACKW_SH, INTREG, INTREG, INTREG, AVR32_SIMD), |
| 26371 | + SYNTAX_NORMAL3(PADD_B, PADD_B, PADD_B, INTREG, INTREG, INTREG, AVR32_SIMD), |
| 26372 | + SYNTAX_NORMAL3(PADD_H, PADD_H, PADD_H, INTREG, INTREG, INTREG, AVR32_SIMD), |
| 26373 | + SYNTAX_NORMAL3(PADDH_SH, PADDH_SH, PADDH_SH, INTREG, INTREG, INTREG, AVR32_SIMD), |
| 26374 | + SYNTAX_NORMAL3(PADDH_UB, PADDH_UB, PADDH_UB, INTREG, INTREG, INTREG, AVR32_SIMD), |
| 26375 | + SYNTAX_NORMAL3(PADDS_SB, PADDS_SB, PADDS_SB, INTREG, INTREG, INTREG, AVR32_SIMD), |
| 26376 | + SYNTAX_NORMAL3(PADDS_SH, PADDS_SH, PADDS_SH, INTREG, INTREG, INTREG, AVR32_SIMD), |
| 26377 | + SYNTAX_NORMAL3(PADDS_UB, PADDS_UB, PADDS_UB, INTREG, INTREG, INTREG, AVR32_SIMD), |
| 26378 | + SYNTAX_NORMAL3(PADDS_UH, PADDS_UH, PADDS_UH, INTREG, INTREG, INTREG, AVR32_SIMD), |
| 26379 | + SYNTAX_NORMAL3(PADDSUB_H, PADDSUB_H, PADDSUB_H, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_SIMD), |
| 26380 | + SYNTAX_NORMAL3(PADDSUBH_SH, PADDSUBH_SH, PADDSUBH_SH, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_SIMD), |
| 26381 | + SYNTAX_NORMAL3(PADDSUBS_SH, PADDSUBS_SH, PADDSUBS_SH, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_SIMD), |
| 26382 | + SYNTAX_NORMAL3(PADDSUBS_UH, PADDSUBS_UH, PADDSUBS_UH, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_SIMD), |
| 26383 | + SYNTAX_NORMAL3(PADDX_H, PADDX_H, PADDX_H, INTREG, INTREG, INTREG, AVR32_SIMD), |
| 26384 | + SYNTAX_NORMAL3(PADDXH_SH, PADDXH_SH, PADDXH_SH, INTREG, INTREG, INTREG, AVR32_SIMD), |
| 26385 | + SYNTAX_NORMAL3(PADDXS_SH, PADDXS_SH, PADDXS_SH, INTREG, INTREG, INTREG, AVR32_SIMD), |
| 26386 | + SYNTAX_NORMAL3(PADDXS_UH, PADDXS_UH, PADDXS_UH, INTREG, INTREG, INTREG, AVR32_SIMD), |
| 26387 | + SYNTAX_NORMAL3(PASR_B, PASR_B, PASR_B, INTREG, INTREG, UNSIGNED_NUMBER, AVR32_SIMD), |
| 26388 | + SYNTAX_NORMAL3(PASR_H, PASR_H, PASR_H, INTREG, INTREG, UNSIGNED_NUMBER, AVR32_SIMD), |
| 26389 | + SYNTAX_NORMAL3(PAVG_SH, PAVG_SH, PAVG_SH, INTREG, INTREG, INTREG, AVR32_SIMD), |
| 26390 | + SYNTAX_NORMAL3(PAVG_UB, PAVG_UB, PAVG_UB, INTREG, INTREG, INTREG, AVR32_SIMD), |
| 26391 | + SYNTAX_NORMAL3(PLSL_B, PLSL_B, PLSL_B, INTREG, INTREG, UNSIGNED_NUMBER, AVR32_SIMD), |
| 26392 | + SYNTAX_NORMAL3(PLSL_H, PLSL_H, PLSL_H, INTREG, INTREG, UNSIGNED_NUMBER, AVR32_SIMD), |
| 26393 | + SYNTAX_NORMAL3(PLSR_B, PLSR_B, PLSR_B, INTREG, INTREG, UNSIGNED_NUMBER, AVR32_SIMD), |
| 26394 | + SYNTAX_NORMAL3(PLSR_H, PLSR_H, PLSR_H, INTREG, INTREG, UNSIGNED_NUMBER, AVR32_SIMD), |
| 26395 | + SYNTAX_NORMAL3(PMAX_SH, PMAX_SH, PMAX_SH, INTREG, INTREG, INTREG, AVR32_SIMD), |
| 26396 | + SYNTAX_NORMAL3(PMAX_UB, PMAX_UB, PMAX_UB, INTREG, INTREG, INTREG, AVR32_SIMD), |
| 26397 | + SYNTAX_NORMAL3(PMIN_SH, PMIN_SH, PMIN_SH, INTREG, INTREG, INTREG, AVR32_SIMD), |
| 26398 | + SYNTAX_NORMAL3(PMIN_UB, PMIN_UB, PMIN_UB, INTREG, INTREG, INTREG, AVR32_SIMD), |
| 26399 | + SYNTAX_NORMAL0(POPJC, POPJC, POPJC, AVR32_V1), |
| 26400 | + SYNTAX_NORMAL_CM1(POPM, POPM, POPM, POPM_E, REGLIST9, AVR32_V1), |
| 26401 | + SYNTAX_NORMALM1(POPM_E, POPM, POPM_E, REGLIST16, AVR32_V1), |
| 26402 | + SYNTAX_NORMAL1(PREF, PREF, PREF, INTREG_SDISP, AVR32_V1), |
| 26403 | + SYNTAX_NORMAL3(PSAD, PSAD, PSAD, INTREG, INTREG, INTREG, AVR32_SIMD), |
| 26404 | + SYNTAX_NORMAL3(PSUB_B, PSUB_B, PSUB_B, INTREG, INTREG, INTREG, AVR32_SIMD), |
| 26405 | + SYNTAX_NORMAL3(PSUB_H, PSUB_H, PSUB_H, INTREG, INTREG, INTREG, AVR32_SIMD), |
| 26406 | + SYNTAX_NORMAL3(PSUBADD_H, PSUBADD_H, PSUBADD_H, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_SIMD), |
| 26407 | + SYNTAX_NORMAL3(PSUBADDH_SH, PSUBADDH_SH, PSUBADDH_SH, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_SIMD), |
| 26408 | + SYNTAX_NORMAL3(PSUBADDS_SH, PSUBADDS_SH, PSUBADDS_SH, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_SIMD), |
| 26409 | + SYNTAX_NORMAL3(PSUBADDS_UH, PSUBADDS_UH, PSUBADDS_UH, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_SIMD), |
| 26410 | + SYNTAX_NORMAL3(PSUBH_SH, PSUBH_SH, PSUBH_SH, INTREG, INTREG, INTREG, AVR32_SIMD), |
| 26411 | + SYNTAX_NORMAL3(PSUBH_UB, PSUBH_UB, PSUBH_UB, INTREG, INTREG, INTREG, AVR32_SIMD), |
| 26412 | + SYNTAX_NORMAL3(PSUBS_SB, PSUBS_SB, PSUBS_SB, INTREG, INTREG, INTREG, AVR32_SIMD), |
| 26413 | + SYNTAX_NORMAL3(PSUBS_SH, PSUBS_SH, PSUBS_SH, INTREG, INTREG, INTREG, AVR32_SIMD), |
| 26414 | + SYNTAX_NORMAL3(PSUBS_UB, PSUBS_UB, PSUBS_UB, INTREG, INTREG, INTREG, AVR32_SIMD), |
| 26415 | + SYNTAX_NORMAL3(PSUBS_UH, PSUBS_UH, PSUBS_UH, INTREG, INTREG, INTREG, AVR32_SIMD), |
| 26416 | + SYNTAX_NORMAL3(PSUBX_H, PSUBX_H, PSUBX_H, INTREG, INTREG, INTREG, AVR32_SIMD), |
| 26417 | + SYNTAX_NORMAL3(PSUBXH_SH, PSUBXH_SH, PSUBXH_SH, INTREG, INTREG, INTREG, AVR32_SIMD), |
| 26418 | + SYNTAX_NORMAL3(PSUBXS_SH, PSUBXS_SH, PSUBXS_SH, INTREG, INTREG, INTREG, AVR32_SIMD), |
| 26419 | + SYNTAX_NORMAL3(PSUBXS_UH, PSUBXS_UH, PSUBXS_UH, INTREG, INTREG, INTREG, AVR32_SIMD), |
| 26420 | + SYNTAX_NORMAL2(PUNPCKSB_H, PUNPCKSB_H, PUNPCKSB_H, INTREG, INTREG_HSEL, AVR32_SIMD), |
| 26421 | + SYNTAX_NORMAL2(PUNPCKUB_H, PUNPCKUB_H, PUNPCKUB_H, INTREG, INTREG_HSEL, AVR32_SIMD), |
| 26422 | + SYNTAX_NORMAL0(PUSHJC, PUSHJC, PUSHJC, AVR32_V1), |
| 26423 | + SYNTAX_NORMAL_CM1(PUSHM, PUSHM, PUSHM, PUSHM_E, REGLIST8, AVR32_V1), |
| 26424 | + SYNTAX_NORMALM1(PUSHM_E, PUSHM, PUSHM_E, REGLIST16, AVR32_V1), |
| 26425 | + SYNTAX_NORMAL_C1(RCALL1, RCALL, RCALL1, RCALL2, JMPLABEL, AVR32_V1), |
| 26426 | + SYNTAX_NORMAL1(RCALL2, RCALL, RCALL2, JMPLABEL, AVR32_V1), |
| 26427 | + SYNTAX_NORMAL1(RETEQ, RETEQ, RETEQ, RETVAL, AVR32_V1), |
| 26428 | + SYNTAX_NORMAL1(RETNE, RETNE, RETNE, RETVAL, AVR32_V1), |
| 26429 | + SYNTAX_NORMAL1(RETCC, RETCC, RETCC, RETVAL, AVR32_V1), |
| 26430 | + SYNTAX_NORMAL1(RETCS, RETCS, RETCS, RETVAL, AVR32_V1), |
| 26431 | + SYNTAX_NORMAL1(RETGE, RETGE, RETGE, RETVAL, AVR32_V1), |
| 26432 | + SYNTAX_NORMAL1(RETLT, RETLT, RETLT, RETVAL, AVR32_V1), |
| 26433 | + SYNTAX_NORMAL1(RETMI, RETMI, RETMI, RETVAL, AVR32_V1), |
| 26434 | + SYNTAX_NORMAL1(RETPL, RETPL, RETPL, RETVAL, AVR32_V1), |
| 26435 | + SYNTAX_NORMAL1(RETLS, RETLS, RETLS, RETVAL, AVR32_V1), |
| 26436 | + SYNTAX_NORMAL1(RETGT, RETGT, RETGT, RETVAL, AVR32_V1), |
| 26437 | + SYNTAX_NORMAL1(RETLE, RETLE, RETLE, RETVAL, AVR32_V1), |
| 26438 | + SYNTAX_NORMAL1(RETHI, RETHI, RETHI, RETVAL, AVR32_V1), |
| 26439 | + SYNTAX_NORMAL1(RETVS, RETVS, RETVS, RETVAL, AVR32_V1), |
| 26440 | + SYNTAX_NORMAL1(RETVC, RETVC, RETVC, RETVAL, AVR32_V1), |
| 26441 | + SYNTAX_NORMAL1(RETQS, RETQS, RETQS, RETVAL, AVR32_V1), |
| 26442 | + SYNTAX_NORMAL1(RETAL, RETAL, RETAL, RETVAL, AVR32_V1), |
| 26443 | + SYNTAX_NORMAL1(RETHS, RETHS, RETCC, RETVAL, AVR32_V1), |
| 26444 | + SYNTAX_NORMAL1(RETLO, RETLO, RETCS, RETVAL, AVR32_V1), |
| 26445 | + SYNTAX_NORMAL0(RETD, RETD, RETD, AVR32_V1), |
| 26446 | + SYNTAX_NORMAL0(RETE, RETE, RETE, AVR32_V1), |
| 26447 | + SYNTAX_NORMAL0(RETJ, RETJ, RETJ, AVR32_V1), |
| 26448 | + SYNTAX_NORMAL0(RETS, RETS, RETS, AVR32_V1), |
| 26449 | + SYNTAX_NORMAL1(RJMP, RJMP, RJMP, JMPLABEL, AVR32_V1), |
| 26450 | + SYNTAX_NORMAL1(ROL, ROL, ROL, INTREG, AVR32_V1), |
| 26451 | + SYNTAX_NORMAL1(ROR, ROR, ROR, INTREG, AVR32_V1), |
| 26452 | + SYNTAX_NORMAL_C2(RSUB1, RSUB, RSUB1, RSUB2, INTREG, INTREG, AVR32_V1), |
| 26453 | + SYNTAX_NORMAL3(RSUB2, RSUB, RSUB2, INTREG, INTREG, SIGNED_CONST, AVR32_V1), |
| 26454 | + SYNTAX_NORMAL3(SATADD_H, SATADD_H, SATADD_H, INTREG, INTREG, INTREG, AVR32_DSP), |
| 26455 | + SYNTAX_NORMAL3(SATADD_W, SATADD_W, SATADD_W, INTREG, INTREG, INTREG, AVR32_DSP), |
| 26456 | + SYNTAX_NORMAL2(SATRNDS, SATRNDS, SATRNDS, INTREG_LSR, UNSIGNED_NUMBER, AVR32_DSP), |
| 26457 | + SYNTAX_NORMAL2(SATRNDU, SATRNDU, SATRNDU, INTREG_LSR, UNSIGNED_NUMBER, AVR32_DSP), |
| 26458 | + SYNTAX_NORMAL2(SATS, SATS, SATS, INTREG_LSR, UNSIGNED_NUMBER, AVR32_DSP), |
| 26459 | + SYNTAX_NORMAL3(SATSUB_H, SATSUB_H, SATSUB_H, INTREG, INTREG, INTREG, AVR32_DSP), |
| 26460 | + SYNTAX_NORMAL_C3(SATSUB_W1, SATSUB_W, SATSUB_W1, SATSUB_W2, INTREG, INTREG, INTREG, AVR32_DSP), |
| 26461 | + SYNTAX_NORMAL3(SATSUB_W2, SATSUB_W, SATSUB_W2, INTREG, INTREG, SIGNED_CONST, AVR32_DSP), |
| 26462 | + SYNTAX_NORMAL2(SATU, SATU, SATU, INTREG_LSR, UNSIGNED_NUMBER, AVR32_V1), |
| 26463 | + SYNTAX_NORMAL3(SBC, SBC, SBC, INTREG, INTREG, INTREG, AVR32_V1), |
| 26464 | + SYNTAX_NORMAL2(SBR, SBR, SBR, INTREG, UNSIGNED_NUMBER, AVR32_V1), |
| 26465 | + SYNTAX_NORMAL0(SCALL, SCALL, SCALL, AVR32_V1), |
| 26466 | + SYNTAX_NORMAL1(SCR, SCR, SCR, INTREG, AVR32_V1), |
| 26467 | + SYNTAX_NORMAL1(SLEEP, SLEEP, SLEEP, UNSIGNED_CONST, AVR32_V1), |
| 26468 | + SYNTAX_NORMAL1(SREQ, SREQ, SREQ, INTREG, AVR32_V1), |
| 26469 | + SYNTAX_NORMAL1(SRNE, SRNE, SRNE, INTREG, AVR32_V1), |
| 26470 | + SYNTAX_NORMAL1(SRCC, SRCC, SRCC, INTREG, AVR32_V1), |
| 26471 | + SYNTAX_NORMAL1(SRCS, SRCS, SRCS, INTREG, AVR32_V1), |
| 26472 | + SYNTAX_NORMAL1(SRGE, SRGE, SRGE, INTREG, AVR32_V1), |
| 26473 | + SYNTAX_NORMAL1(SRLT, SRLT, SRLT, INTREG, AVR32_V1), |
| 26474 | + SYNTAX_NORMAL1(SRMI, SRMI, SRMI, INTREG, AVR32_V1), |
| 26475 | + SYNTAX_NORMAL1(SRPL, SRPL, SRPL, INTREG, AVR32_V1), |
| 26476 | + SYNTAX_NORMAL1(SRLS, SRLS, SRLS, INTREG, AVR32_V1), |
| 26477 | + SYNTAX_NORMAL1(SRGT, SRGT, SRGT, INTREG, AVR32_V1), |
| 26478 | + SYNTAX_NORMAL1(SRLE, SRLE, SRLE, INTREG, AVR32_V1), |
| 26479 | + SYNTAX_NORMAL1(SRHI, SRHI, SRHI, INTREG, AVR32_V1), |
| 26480 | + SYNTAX_NORMAL1(SRVS, SRVS, SRVS, INTREG, AVR32_V1), |
| 26481 | + SYNTAX_NORMAL1(SRVC, SRVC, SRVC, INTREG, AVR32_V1), |
| 26482 | + SYNTAX_NORMAL1(SRQS, SRQS, SRQS, INTREG, AVR32_V1), |
| 26483 | + SYNTAX_NORMAL1(SRAL, SRAL, SRAL, INTREG, AVR32_V1), |
| 26484 | + SYNTAX_NORMAL1(SRHS, SRHS, SRCC, INTREG, AVR32_V1), |
| 26485 | + SYNTAX_NORMAL1(SRLO, SRLO, SRCS, INTREG, AVR32_V1), |
| 26486 | + SYNTAX_NORMAL1(SSRF, SSRF, SSRF, UNSIGNED_NUMBER, AVR32_V1), |
| 26487 | + SYNTAX_NORMAL_C2(ST_B1, ST_B, ST_B1, ST_B2, INTREG_POSTINC, INTREG, AVR32_V1), |
| 26488 | + SYNTAX_NORMAL_C2(ST_B2, ST_B, ST_B2, ST_B5, INTREG_PREDEC, INTREG, AVR32_V1), |
| 26489 | + SYNTAX_NORMAL_C2(ST_B5, ST_B, ST_B5, ST_B3, INTREG_INDEX, INTREG, AVR32_V1), |
| 26490 | + SYNTAX_NORMAL_C2(ST_B3, ST_B, ST_B3, ST_B4, INTREG_UDISP, INTREG, AVR32_V1), |
| 26491 | + SYNTAX_NORMAL2(ST_B4, ST_B, ST_B4, INTREG_SDISP, INTREG, AVR32_V1), |
| 26492 | + SYNTAX_NORMAL_C2(ST_D1, ST_D, ST_D1, ST_D2, INTREG_POSTINC, DWREG, AVR32_V1), |
| 26493 | + SYNTAX_NORMAL_C2(ST_D2, ST_D, ST_D2, ST_D3, INTREG_PREDEC, DWREG, AVR32_V1), |
| 26494 | + SYNTAX_NORMAL_C2(ST_D3, ST_D, ST_D3, ST_D5, INTREG, DWREG, AVR32_V1), |
| 26495 | + SYNTAX_NORMAL_C2(ST_D5, ST_D, ST_D5, ST_D4, INTREG_INDEX, DWREG, AVR32_V1), |
| 26496 | + SYNTAX_NORMAL2(ST_D4, ST_D, ST_D4, INTREG_SDISP, DWREG, AVR32_V1), |
| 26497 | + SYNTAX_NORMAL_C2(ST_H1, ST_H, ST_H1, ST_H2, INTREG_POSTINC, INTREG, AVR32_V1), |
| 26498 | + SYNTAX_NORMAL_C2(ST_H2, ST_H, ST_H2, ST_H5, INTREG_PREDEC, INTREG, AVR32_V1), |
| 26499 | + SYNTAX_NORMAL_C2(ST_H5, ST_H, ST_H5, ST_H3, INTREG_INDEX, INTREG, AVR32_V1), |
| 26500 | + SYNTAX_NORMAL_C2(ST_H3, ST_H, ST_H3, ST_H4, INTREG_UDISP_H, INTREG, AVR32_V1), |
| 26501 | + SYNTAX_NORMAL2(ST_H4, ST_H, ST_H4, INTREG_SDISP, INTREG, AVR32_V1), |
| 26502 | + SYNTAX_NORMAL_C2(ST_W1, ST_W, ST_W1, ST_W2, INTREG_POSTINC, INTREG, AVR32_V1), |
| 26503 | + SYNTAX_NORMAL_C2(ST_W2, ST_W, ST_W2, ST_W5, INTREG_PREDEC, INTREG, AVR32_V1), |
| 26504 | + SYNTAX_NORMAL_C2(ST_W5, ST_W, ST_W5, ST_W3, INTREG_INDEX, INTREG, AVR32_V1), |
| 26505 | + SYNTAX_NORMAL_C2(ST_W3, ST_W, ST_W3, ST_W4, INTREG_UDISP_W, INTREG, AVR32_V1), |
| 26506 | + SYNTAX_NORMAL2(ST_W4, ST_W, ST_W4, INTREG_SDISP, INTREG, AVR32_V1), |
| 26507 | + SYNTAX_NORMAL3(STC_D1, STC_D, STC_D1, CPNO, INTREG_UDISP_W, CPREG_D, AVR32_V1), |
| 26508 | + SYNTAX_NORMAL_C3(STC_D2, STC_D, STC_D2, STC_D1, CPNO, INTREG_POSTINC, CPREG_D, AVR32_V1), |
| 26509 | + SYNTAX_NORMAL_C3(STC_D3, STC_D, STC_D3, STC_D2, CPNO, INTREG_INDEX, CPREG_D, AVR32_V1), |
| 26510 | + SYNTAX_NORMAL3(STC_W1, STC_W, STC_W1, CPNO, INTREG_UDISP_W, CPREG, AVR32_V1), |
| 26511 | + SYNTAX_NORMAL_C3(STC_W2, STC_W, STC_W2, STC_W1, CPNO, INTREG_POSTINC, CPREG, AVR32_V1), |
| 26512 | + SYNTAX_NORMAL_C3(STC_W3, STC_W, STC_W3, STC_W2, CPNO, INTREG_INDEX, CPREG, AVR32_V1), |
| 26513 | + SYNTAX_NORMAL2(STC0_D, STC0_D, STC0_D, INTREG_UDISP_W, CPREG_D, AVR32_V1), |
| 26514 | + SYNTAX_NORMAL2(STC0_W, STC0_W, STC0_W, INTREG_UDISP_W, CPREG, AVR32_V1), |
| 26515 | + SYNTAX_NORMAL_CM3(STCM_D, STCM_D, STCM_D, STCM_D_PU, CPNO, INTREG, REGLIST_CPD8, AVR32_V1), |
| 26516 | + SYNTAX_NORMALM3(STCM_D_PU, STCM_D, STCM_D_PU, CPNO, INTREG_PREDEC, REGLIST_CPD8, AVR32_V1), |
| 26517 | + SYNTAX_NORMAL_CM3(STCM_W, STCM_W, STCM_W, STCM_W_PU, CPNO, INTREG, REGLIST_CP8, AVR32_V1), |
| 26518 | + SYNTAX_NORMALM3(STCM_W_PU, STCM_W, STCM_W_PU, CPNO, INTREG_PREDEC, REGLIST_CP8, AVR32_V1), |
| 26519 | + SYNTAX_NORMAL2(STCOND, STCOND, STCOND, INTREG_SDISP, INTREG, AVR32_V1), |
| 26520 | + SYNTAX_NORMAL2(STDSP, STDSP, STDSP, SP_UDISP_W, INTREG, AVR32_V1), |
| 26521 | + SYNTAX_NORMAL_C3(STHH_W2, STHH_W, STHH_W2, STHH_W1, INTREG_INDEX, INTREG_HSEL, INTREG_HSEL, AVR32_V1), |
| 26522 | + SYNTAX_NORMAL3(STHH_W1, STHH_W, STHH_W1, INTREG_UDISP_W, INTREG_HSEL, INTREG_HSEL, AVR32_V1), |
| 26523 | + SYNTAX_NORMAL_CM2(STM, STM, STM, STM_PU, INTREG, REGLIST16, AVR32_V1), |
| 26524 | + SYNTAX_NORMALM2(STM_PU, STM, STM_PU, INTREG_PREDEC, REGLIST16, AVR32_V1), |
| 26525 | + SYNTAX_NORMAL_CM2(STMTS, STMTS, STMTS, STMTS_PU, INTREG, REGLIST16, AVR32_V1), |
| 26526 | + SYNTAX_NORMALM2(STMTS_PU, STMTS, STMTS_PU, INTREG_PREDEC, REGLIST16, AVR32_V1), |
| 26527 | + SYNTAX_NORMAL2(STSWP_H, STSWP_H, STSWP_H, INTREG_SDISP_H, INTREG, AVR32_V1), |
| 26528 | + SYNTAX_NORMAL2(STSWP_W, STSWP_W, STSWP_W, INTREG_SDISP_W, INTREG, AVR32_V1), |
| 26529 | + SYNTAX_NORMAL_C2(SUB1, SUB, SUB1, SUB2, INTREG, INTREG, AVR32_V1), |
| 26530 | + SYNTAX_NORMAL_C3(SUB2, SUB, SUB2, SUB5, INTREG, INTREG, INTREG_LSL, AVR32_V1), |
| 26531 | + SYNTAX_NORMAL_C3(SUB5, SUB, SUB5, SUB3_SP, INTREG, INTREG, SIGNED_CONST, AVR32_V1), |
| 26532 | + SYNTAX_NORMAL_C2(SUB3_SP, SUB, SUB3_SP, SUB3, SP, SIGNED_CONST_W, AVR32_V1), |
| 26533 | + SYNTAX_NORMAL_C2(SUB3, SUB, SUB3, SUB4, INTREG, SIGNED_CONST, AVR32_V1), |
| 26534 | + SYNTAX_NORMAL2(SUB4, SUB, SUB4, INTREG, SIGNED_CONST, AVR32_V1), |
| 26535 | + SYNTAX_NORMAL_C2(SUBEQ, SUBEQ, SUBEQ, SUB2EQ, INTREG, SIGNED_CONST, AVR32_V1), |
| 26536 | + SYNTAX_NORMAL_C2(SUBNE, SUBNE, SUBNE, SUB2NE, INTREG, SIGNED_CONST, AVR32_V1), |
| 26537 | + SYNTAX_NORMAL_C2(SUBCC, SUBCC, SUBCC, SUB2CC, INTREG, SIGNED_CONST, AVR32_V1), |
| 26538 | + SYNTAX_NORMAL_C2(SUBCS, SUBCS, SUBCS, SUB2CS, INTREG, SIGNED_CONST, AVR32_V1), |
| 26539 | + SYNTAX_NORMAL_C2(SUBGE, SUBGE, SUBGE, SUB2GE, INTREG, SIGNED_CONST, AVR32_V1), |
| 26540 | + SYNTAX_NORMAL_C2(SUBLT, SUBLT, SUBLT, SUB2LT, INTREG, SIGNED_CONST, AVR32_V1), |
| 26541 | + SYNTAX_NORMAL_C2(SUBMI, SUBMI, SUBMI, SUB2MI, INTREG, SIGNED_CONST, AVR32_V1), |
| 26542 | + SYNTAX_NORMAL_C2(SUBPL, SUBPL, SUBPL, SUB2PL, INTREG, SIGNED_CONST, AVR32_V1), |
| 26543 | + SYNTAX_NORMAL_C2(SUBLS, SUBLS, SUBLS, SUB2LS, INTREG, SIGNED_CONST, AVR32_V1), |
| 26544 | + SYNTAX_NORMAL_C2(SUBGT, SUBGT, SUBGT, SUB2GT, INTREG, SIGNED_CONST, AVR32_V1), |
| 26545 | + SYNTAX_NORMAL_C2(SUBLE, SUBLE, SUBLE, SUB2LE, INTREG, SIGNED_CONST, AVR32_V1), |
| 26546 | + SYNTAX_NORMAL_C2(SUBHI, SUBHI, SUBHI, SUB2HI, INTREG, SIGNED_CONST, AVR32_V1), |
| 26547 | + SYNTAX_NORMAL_C2(SUBVS, SUBVS, SUBVS, SUB2VS, INTREG, SIGNED_CONST, AVR32_V1), |
| 26548 | + SYNTAX_NORMAL_C2(SUBVC, SUBVC, SUBVC, SUB2VC, INTREG, SIGNED_CONST, AVR32_V1), |
| 26549 | + SYNTAX_NORMAL_C2(SUBQS, SUBQS, SUBQS, SUB2QS, INTREG, SIGNED_CONST, AVR32_V1), |
| 26550 | + SYNTAX_NORMAL_C2(SUBAL, SUBAL, SUBAL, SUB2AL, INTREG, SIGNED_CONST, AVR32_V1), |
| 26551 | + SYNTAX_NORMAL_C2(SUBHS, SUBHS, SUBCC, SUB2CC, INTREG, SIGNED_CONST, AVR32_V1), |
| 26552 | + SYNTAX_NORMAL_C2(SUBLO, SUBLO, SUBCS, SUB2CS, INTREG, SIGNED_CONST, AVR32_V1), |
| 26553 | + SYNTAX_NORMAL2(SUBFEQ, SUBFEQ, SUBFEQ, INTREG, SIGNED_CONST, AVR32_V1), |
| 26554 | + SYNTAX_NORMAL2(SUBFNE, SUBFNE, SUBFNE, INTREG, SIGNED_CONST, AVR32_V1), |
| 26555 | + SYNTAX_NORMAL2(SUBFCC, SUBFCC, SUBFCC, INTREG, SIGNED_CONST, AVR32_V1), |
| 26556 | + SYNTAX_NORMAL2(SUBFCS, SUBFCS, SUBFCS, INTREG, SIGNED_CONST, AVR32_V1), |
| 26557 | + SYNTAX_NORMAL2(SUBFGE, SUBFGE, SUBFGE, INTREG, SIGNED_CONST, AVR32_V1), |
| 26558 | + SYNTAX_NORMAL2(SUBFLT, SUBFLT, SUBFLT, INTREG, SIGNED_CONST, AVR32_V1), |
| 26559 | + SYNTAX_NORMAL2(SUBFMI, SUBFMI, SUBFMI, INTREG, SIGNED_CONST, AVR32_V1), |
| 26560 | + SYNTAX_NORMAL2(SUBFPL, SUBFPL, SUBFPL, INTREG, SIGNED_CONST, AVR32_V1), |
| 26561 | + SYNTAX_NORMAL2(SUBFLS, SUBFLS, SUBFLS, INTREG, SIGNED_CONST, AVR32_V1), |
| 26562 | + SYNTAX_NORMAL2(SUBFGT, SUBFGT, SUBFGT, INTREG, SIGNED_CONST, AVR32_V1), |
| 26563 | + SYNTAX_NORMAL2(SUBFLE, SUBFLE, SUBFLE, INTREG, SIGNED_CONST, AVR32_V1), |
| 26564 | + SYNTAX_NORMAL2(SUBFHI, SUBFHI, SUBFHI, INTREG, SIGNED_CONST, AVR32_V1), |
| 26565 | + SYNTAX_NORMAL2(SUBFVS, SUBFVS, SUBFVS, INTREG, SIGNED_CONST, AVR32_V1), |
| 26566 | + SYNTAX_NORMAL2(SUBFVC, SUBFVC, SUBFVC, INTREG, SIGNED_CONST, AVR32_V1), |
| 26567 | + SYNTAX_NORMAL2(SUBFQS, SUBFQS, SUBFQS, INTREG, SIGNED_CONST, AVR32_V1), |
| 26568 | + SYNTAX_NORMAL2(SUBFAL, SUBFAL, SUBFAL, INTREG, SIGNED_CONST, AVR32_V1), |
| 26569 | + SYNTAX_NORMAL2(SUBFHS, SUBFHS, SUBFCC, INTREG, SIGNED_CONST, AVR32_V1), |
| 26570 | + SYNTAX_NORMAL2(SUBFLO, SUBFLO, SUBFCS, INTREG, SIGNED_CONST, AVR32_V1), |
| 26571 | + SYNTAX_NORMAL3(SUBHH_W, SUBHH_W, SUBHH_W, INTREG, INTREG_HSEL, INTREG_HSEL, AVR32_DSP), |
| 26572 | + SYNTAX_NORMAL1(SWAP_B, SWAP_B, SWAP_B, INTREG, AVR32_V1), |
| 26573 | + SYNTAX_NORMAL1(SWAP_BH, SWAP_BH, SWAP_BH, INTREG, AVR32_V1), |
| 26574 | + SYNTAX_NORMAL1(SWAP_H, SWAP_H, SWAP_H, INTREG, AVR32_V1), |
| 26575 | + SYNTAX_NORMAL1(SYNC, SYNC, SYNC, UNSIGNED_CONST, AVR32_V1), |
| 26576 | + SYNTAX_NORMAL0(TLBR, TLBR, TLBR, AVR32_V1), |
| 26577 | + SYNTAX_NORMAL0(TLBS, TLBS, TLBS, AVR32_V1), |
| 26578 | + SYNTAX_NORMAL0(TLBW, TLBW, TLBW, AVR32_V1), |
| 26579 | + SYNTAX_NORMAL1(TNBZ, TNBZ, TNBZ, INTREG, AVR32_V1), |
| 26580 | + SYNTAX_NORMAL2(TST, TST, TST, INTREG, INTREG, AVR32_V1), |
| 26581 | + SYNTAX_NORMAL3(XCHG, XCHG, XCHG, INTREG, INTREG, INTREG, AVR32_V1), |
| 26582 | + SYNTAX_NORMAL2(MEMC, MEMC, MEMC, SIGNED_CONST_W, UNSIGNED_NUMBER, AVR32_RMW), |
| 26583 | + SYNTAX_NORMAL2(MEMS, MEMS, MEMS, SIGNED_CONST_W, UNSIGNED_NUMBER, AVR32_RMW), |
| 26584 | + SYNTAX_NORMAL2(MEMT, MEMT, MEMT, SIGNED_CONST_W, UNSIGNED_NUMBER, AVR32_RMW), |
| 26585 | + SYNTAX_NORMAL4 (FMAC_S, FMAC_S, FMAC_S, INTREG, INTREG, INTREG, INTREG, |
| 26586 | + AVR32_V3FP), |
| 26587 | + SYNTAX_NORMAL4 (FNMAC_S, FNMAC_S, FNMAC_S, INTREG, INTREG, INTREG, INTREG, |
| 26588 | + AVR32_V3FP), |
| 26589 | + SYNTAX_NORMAL4 (FMSC_S, FMSC_S, FMSC_S, INTREG, INTREG, INTREG, INTREG, |
| 26590 | + AVR32_V3FP), |
| 26591 | + SYNTAX_NORMAL4 (FNMSC_S, FNMSC_S, FNMSC_S, INTREG, INTREG, INTREG, INTREG, |
| 26592 | + AVR32_V3FP), |
| 26593 | + SYNTAX_NORMAL3 (FMUL_S, FMUL_S, FMUL_S, INTREG, INTREG, INTREG, AVR32_V3FP), |
| 26594 | + SYNTAX_NORMAL3 (FNMUL_S, FNMUL_S, FNMUL_S, INTREG, INTREG, INTREG, AVR32_V3FP), |
| 26595 | + SYNTAX_NORMAL3 (FADD_S, FADD_S, FADD_S, INTREG, INTREG, INTREG, AVR32_V3FP), |
| 26596 | + SYNTAX_NORMAL3 (FSUB_S, FSUB_S, FSUB_S, INTREG, INTREG, INTREG, AVR32_V3FP), |
| 26597 | + SYNTAX_NORMAL2 (FCASTRS_SW, FCASTRS_SW, FCASTRS_SW, INTREG, INTREG, AVR32_V3FP), |
| 26598 | + SYNTAX_NORMAL2 (FCASTRS_UW, FCASTRS_UW, FCASTRS_UW, INTREG, INTREG, AVR32_V3FP), |
| 26599 | + SYNTAX_NORMAL2 (FCASTSW_S, FCASTSW_S, FCASTSW_S, INTREG, INTREG, AVR32_V3FP), |
| 26600 | + SYNTAX_NORMAL2 (FCASTUW_S, FCASTUW_S, FCASTUW_S, INTREG, INTREG, AVR32_V3FP), |
| 26601 | + SYNTAX_NORMAL2 (FCMP_S, FCMP_S, FCMP_S, INTREG, INTREG, AVR32_V3FP), |
| 26602 | + SYNTAX_NORMAL1 (FCHK_S, FCHK_S, FCHK_S, INTREG, AVR32_V3FP), |
| 26603 | + SYNTAX_NORMAL2 (FRCPA_S, FRCPA_S, FRCPA_S, INTREG, INTREG, AVR32_V3FP), |
| 26604 | + SYNTAX_NORMAL2 (FRSQRTA_S, FRSQRTA_S, FRSQRTA_S, INTREG, INTREG, AVR32_V3FP), |
| 26605 | + { |
| 26606 | + AVR32_SYNTAX_LDA_W, |
| 26607 | + AVR32_V1, NULL, AVR32_PARSER_LDA, |
| 26608 | + { NULL }, NULL, |
| 26609 | + 2, |
| 26610 | + { |
| 26611 | + AVR32_OPERAND_INTREG, |
| 26612 | + AVR32_OPERAND_SIGNED_CONST, |
| 26613 | + }, |
| 26614 | + }, |
| 26615 | + { |
| 26616 | + AVR32_SYNTAX_CALL, |
| 26617 | + AVR32_V1, NULL, AVR32_PARSER_CALL, |
| 26618 | + { NULL }, NULL, |
| 26619 | + 1, |
| 26620 | + { |
| 26621 | + AVR32_OPERAND_JMPLABEL, |
| 26622 | + }, |
| 26623 | + }, |
| 26624 | + { |
| 26625 | + AVR32_SYNTAX_PICOSVMAC0, |
| 26626 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOSVMAC], AVR32_PARSER_ALIAS, |
| 26627 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOSVMAC0] }, |
| 26628 | + &avr32_syntax_table[AVR32_SYNTAX_PICOSVMAC1], 4, |
| 26629 | + { |
| 26630 | + AVR32_OPERAND_PICO_OUT0, |
| 26631 | + AVR32_OPERAND_PICO_IN, |
| 26632 | + AVR32_OPERAND_PICO_IN, |
| 26633 | + AVR32_OPERAND_PICO_IN, |
| 26634 | + }, |
| 26635 | + }, |
| 26636 | + { |
| 26637 | + AVR32_SYNTAX_PICOSVMAC1, |
| 26638 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOSVMAC], AVR32_PARSER_ALIAS, |
| 26639 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOSVMAC1] }, |
| 26640 | + &avr32_syntax_table[AVR32_SYNTAX_PICOSVMAC2], 4, |
| 26641 | + { |
| 26642 | + AVR32_OPERAND_PICO_OUT1, |
| 26643 | + AVR32_OPERAND_PICO_IN, |
| 26644 | + AVR32_OPERAND_PICO_IN, |
| 26645 | + AVR32_OPERAND_PICO_IN, |
| 26646 | + }, |
| 26647 | + }, |
| 26648 | + { |
| 26649 | + AVR32_SYNTAX_PICOSVMAC2, |
| 26650 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOSVMAC], AVR32_PARSER_ALIAS, |
| 26651 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOSVMAC2] }, |
| 26652 | + &avr32_syntax_table[AVR32_SYNTAX_PICOSVMAC3], 4, |
| 26653 | + { |
| 26654 | + AVR32_OPERAND_PICO_OUT2, |
| 26655 | + AVR32_OPERAND_PICO_IN, |
| 26656 | + AVR32_OPERAND_PICO_IN, |
| 26657 | + AVR32_OPERAND_PICO_IN, |
| 26658 | + }, |
| 26659 | + }, |
| 26660 | + { |
| 26661 | + AVR32_SYNTAX_PICOSVMAC3, |
| 26662 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOSVMAC], AVR32_PARSER_ALIAS, |
| 26663 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOSVMAC3] }, |
| 26664 | + NULL, 4, |
| 26665 | + { |
| 26666 | + AVR32_OPERAND_PICO_OUT3, |
| 26667 | + AVR32_OPERAND_PICO_IN, |
| 26668 | + AVR32_OPERAND_PICO_IN, |
| 26669 | + AVR32_OPERAND_PICO_IN, |
| 26670 | + }, |
| 26671 | + }, |
| 26672 | + { |
| 26673 | + AVR32_SYNTAX_PICOSVMUL0, |
| 26674 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOSVMUL], AVR32_PARSER_ALIAS, |
| 26675 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOSVMUL0] }, |
| 26676 | + &avr32_syntax_table[AVR32_SYNTAX_PICOSVMUL1], 4, |
| 26677 | + { |
| 26678 | + AVR32_OPERAND_PICO_OUT0, |
| 26679 | + AVR32_OPERAND_PICO_IN, |
| 26680 | + AVR32_OPERAND_PICO_IN, |
| 26681 | + AVR32_OPERAND_PICO_IN, |
| 26682 | + }, |
| 26683 | + }, |
| 26684 | + { |
| 26685 | + AVR32_SYNTAX_PICOSVMUL1, |
| 26686 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOSVMUL], AVR32_PARSER_ALIAS, |
| 26687 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOSVMUL1] }, |
| 26688 | + &avr32_syntax_table[AVR32_SYNTAX_PICOSVMUL2], 4, |
| 26689 | + { |
| 26690 | + AVR32_OPERAND_PICO_OUT1, |
| 26691 | + AVR32_OPERAND_PICO_IN, |
| 26692 | + AVR32_OPERAND_PICO_IN, |
| 26693 | + AVR32_OPERAND_PICO_IN, |
| 26694 | + }, |
| 26695 | + }, |
| 26696 | + { |
| 26697 | + AVR32_SYNTAX_PICOSVMUL2, |
| 26698 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOSVMUL], AVR32_PARSER_ALIAS, |
| 26699 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOSVMUL2] }, |
| 26700 | + &avr32_syntax_table[AVR32_SYNTAX_PICOSVMUL3], 4, |
| 26701 | + { |
| 26702 | + AVR32_OPERAND_PICO_OUT2, |
| 26703 | + AVR32_OPERAND_PICO_IN, |
| 26704 | + AVR32_OPERAND_PICO_IN, |
| 26705 | + AVR32_OPERAND_PICO_IN, |
| 26706 | + }, |
| 26707 | + }, |
| 26708 | + { |
| 26709 | + AVR32_SYNTAX_PICOSVMUL3, |
| 26710 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOSVMUL], AVR32_PARSER_ALIAS, |
| 26711 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOSVMUL3] }, |
| 26712 | + NULL, 4, |
| 26713 | + { |
| 26714 | + AVR32_OPERAND_PICO_OUT3, |
| 26715 | + AVR32_OPERAND_PICO_IN, |
| 26716 | + AVR32_OPERAND_PICO_IN, |
| 26717 | + AVR32_OPERAND_PICO_IN, |
| 26718 | + }, |
| 26719 | + }, |
| 26720 | + { |
| 26721 | + AVR32_SYNTAX_PICOVMAC0, |
| 26722 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOVMAC], AVR32_PARSER_ALIAS, |
| 26723 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOVMAC0] }, |
| 26724 | + &avr32_syntax_table[AVR32_SYNTAX_PICOVMAC1], 4, |
| 26725 | + { |
| 26726 | + AVR32_OPERAND_PICO_OUT0, |
| 26727 | + AVR32_OPERAND_PICO_IN, |
| 26728 | + AVR32_OPERAND_PICO_IN, |
| 26729 | + AVR32_OPERAND_PICO_IN, |
| 26730 | + }, |
| 26731 | + }, |
| 26732 | + { |
| 26733 | + AVR32_SYNTAX_PICOVMAC1, |
| 26734 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOVMAC], AVR32_PARSER_ALIAS, |
| 26735 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOVMAC1] }, |
| 26736 | + &avr32_syntax_table[AVR32_SYNTAX_PICOVMAC2], 4, |
| 26737 | + { |
| 26738 | + AVR32_OPERAND_PICO_OUT1, |
| 26739 | + AVR32_OPERAND_PICO_IN, |
| 26740 | + AVR32_OPERAND_PICO_IN, |
| 26741 | + AVR32_OPERAND_PICO_IN, |
| 26742 | + }, |
| 26743 | + }, |
| 26744 | + { |
| 26745 | + AVR32_SYNTAX_PICOVMAC2, |
| 26746 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOVMAC], AVR32_PARSER_ALIAS, |
| 26747 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOVMAC2] }, |
| 26748 | + &avr32_syntax_table[AVR32_SYNTAX_PICOVMAC3], 4, |
| 26749 | + { |
| 26750 | + AVR32_OPERAND_PICO_OUT2, |
| 26751 | + AVR32_OPERAND_PICO_IN, |
| 26752 | + AVR32_OPERAND_PICO_IN, |
| 26753 | + AVR32_OPERAND_PICO_IN, |
| 26754 | + }, |
| 26755 | + }, |
| 26756 | + { |
| 26757 | + AVR32_SYNTAX_PICOVMAC3, |
| 26758 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOVMAC], AVR32_PARSER_ALIAS, |
| 26759 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOVMAC3] }, |
| 26760 | + NULL, 4, |
| 26761 | + { |
| 26762 | + AVR32_OPERAND_PICO_OUT3, |
| 26763 | + AVR32_OPERAND_PICO_IN, |
| 26764 | + AVR32_OPERAND_PICO_IN, |
| 26765 | + AVR32_OPERAND_PICO_IN, |
| 26766 | + }, |
| 26767 | + }, |
| 26768 | + { |
| 26769 | + AVR32_SYNTAX_PICOVMUL0, |
| 26770 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOVMUL], AVR32_PARSER_ALIAS, |
| 26771 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOVMUL0] }, |
| 26772 | + &avr32_syntax_table[AVR32_SYNTAX_PICOVMUL1], 4, |
| 26773 | + { |
| 26774 | + AVR32_OPERAND_PICO_OUT0, |
| 26775 | + AVR32_OPERAND_PICO_IN, |
| 26776 | + AVR32_OPERAND_PICO_IN, |
| 26777 | + AVR32_OPERAND_PICO_IN, |
| 26778 | + }, |
| 26779 | + }, |
| 26780 | + { |
| 26781 | + AVR32_SYNTAX_PICOVMUL1, |
| 26782 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOVMUL], AVR32_PARSER_ALIAS, |
| 26783 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOVMUL1] }, |
| 26784 | + &avr32_syntax_table[AVR32_SYNTAX_PICOVMUL2], 4, |
| 26785 | + { |
| 26786 | + AVR32_OPERAND_PICO_OUT1, |
| 26787 | + AVR32_OPERAND_PICO_IN, |
| 26788 | + AVR32_OPERAND_PICO_IN, |
| 26789 | + AVR32_OPERAND_PICO_IN, |
| 26790 | + }, |
| 26791 | + }, |
| 26792 | + { |
| 26793 | + AVR32_SYNTAX_PICOVMUL2, |
| 26794 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOVMUL], AVR32_PARSER_ALIAS, |
| 26795 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOVMUL2] }, |
| 26796 | + &avr32_syntax_table[AVR32_SYNTAX_PICOVMUL3], 4, |
| 26797 | + { |
| 26798 | + AVR32_OPERAND_PICO_OUT2, |
| 26799 | + AVR32_OPERAND_PICO_IN, |
| 26800 | + AVR32_OPERAND_PICO_IN, |
| 26801 | + AVR32_OPERAND_PICO_IN, |
| 26802 | + }, |
| 26803 | + }, |
| 26804 | + { |
| 26805 | + AVR32_SYNTAX_PICOVMUL3, |
| 26806 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOVMUL], AVR32_PARSER_ALIAS, |
| 26807 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOVMUL3] }, |
| 26808 | + NULL, 4, |
| 26809 | + { |
| 26810 | + AVR32_OPERAND_PICO_OUT3, |
| 26811 | + AVR32_OPERAND_PICO_IN, |
| 26812 | + AVR32_OPERAND_PICO_IN, |
| 26813 | + AVR32_OPERAND_PICO_IN, |
| 26814 | + }, |
| 26815 | + }, |
| 26816 | + { |
| 26817 | + AVR32_SYNTAX_PICOLD_D2, |
| 26818 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOLD_D], AVR32_PARSER_ALIAS, |
| 26819 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOLD_D2] }, |
| 26820 | + &avr32_syntax_table[AVR32_SYNTAX_PICOLD_D3], 2, |
| 26821 | + { |
| 26822 | + AVR32_OPERAND_PICO_REG_D, |
| 26823 | + AVR32_OPERAND_INTREG_PREDEC, |
| 26824 | + }, |
| 26825 | + }, |
| 26826 | + { |
| 26827 | + AVR32_SYNTAX_PICOLD_D3, |
| 26828 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOLD_D], AVR32_PARSER_ALIAS, |
| 26829 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOLD_D3] }, |
| 26830 | + &avr32_syntax_table[AVR32_SYNTAX_PICOLD_D1], 2, |
| 26831 | + { |
| 26832 | + AVR32_OPERAND_PICO_REG_D, |
| 26833 | + AVR32_OPERAND_INTREG_INDEX, |
| 26834 | + }, |
| 26835 | + }, |
| 26836 | + { |
| 26837 | + AVR32_SYNTAX_PICOLD_D1, |
| 26838 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOLD_D], AVR32_PARSER_ALIAS, |
| 26839 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOLD_D1] }, |
| 26840 | + NULL, 2, |
| 26841 | + { |
| 26842 | + AVR32_OPERAND_PICO_REG_D, |
| 26843 | + AVR32_OPERAND_INTREG_UDISP_W, |
| 26844 | + }, |
| 26845 | + }, |
| 26846 | + { |
| 26847 | + AVR32_SYNTAX_PICOLD_W2, |
| 26848 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOLD_W], AVR32_PARSER_ALIAS, |
| 26849 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOLD_W2] }, |
| 26850 | + &avr32_syntax_table[AVR32_SYNTAX_PICOLD_W3], 2, |
| 26851 | + { |
| 26852 | + AVR32_OPERAND_PICO_REG_W, |
| 26853 | + AVR32_OPERAND_INTREG_PREDEC, |
| 26854 | + }, |
| 26855 | + }, |
| 26856 | + { |
| 26857 | + AVR32_SYNTAX_PICOLD_W3, |
| 26858 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOLD_W], AVR32_PARSER_ALIAS, |
| 26859 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOLD_W3] }, |
| 26860 | + &avr32_syntax_table[AVR32_SYNTAX_PICOLD_W1], 2, |
| 26861 | + { |
| 26862 | + AVR32_OPERAND_PICO_REG_W, |
| 26863 | + AVR32_OPERAND_INTREG_INDEX, |
| 26864 | + }, |
| 26865 | + }, |
| 26866 | + { |
| 26867 | + AVR32_SYNTAX_PICOLD_W1, |
| 26868 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOLD_W], AVR32_PARSER_ALIAS, |
| 26869 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOLD_W1] }, |
| 26870 | + NULL, 2, |
| 26871 | + { |
| 26872 | + AVR32_OPERAND_PICO_REG_W, |
| 26873 | + AVR32_OPERAND_INTREG_UDISP_W, |
| 26874 | + }, |
| 26875 | + }, |
| 26876 | + { |
| 26877 | + AVR32_SYNTAX_PICOLDM_D, |
| 26878 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOLDM_D], AVR32_PARSER_ALIAS, |
| 26879 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOLDM_D] }, |
| 26880 | + &avr32_syntax_table[AVR32_SYNTAX_PICOLDM_D_PU], -2, |
| 26881 | + { |
| 26882 | + AVR32_OPERAND_INTREG, |
| 26883 | + AVR32_OPERAND_PICO_REGLIST_D, |
| 26884 | + }, |
| 26885 | + }, |
| 26886 | + { |
| 26887 | + AVR32_SYNTAX_PICOLDM_D_PU, |
| 26888 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOLDM_D], AVR32_PARSER_ALIAS, |
| 26889 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOLDM_D_PU] }, |
| 26890 | + NULL, -2, |
| 26891 | + { |
| 26892 | + AVR32_OPERAND_INTREG_POSTINC, |
| 26893 | + AVR32_OPERAND_PICO_REGLIST_D, |
| 26894 | + }, |
| 26895 | + }, |
| 26896 | + { |
| 26897 | + AVR32_SYNTAX_PICOLDM_W, |
| 26898 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOLDM_W], AVR32_PARSER_ALIAS, |
| 26899 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOLDM_W] }, |
| 26900 | + &avr32_syntax_table[AVR32_SYNTAX_PICOLDM_W_PU], -2, |
| 26901 | + { |
| 26902 | + AVR32_OPERAND_INTREG, |
| 26903 | + AVR32_OPERAND_PICO_REGLIST_W, |
| 26904 | + }, |
| 26905 | + }, |
| 26906 | + { |
| 26907 | + AVR32_SYNTAX_PICOLDM_W_PU, |
| 26908 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOLDM_W], AVR32_PARSER_ALIAS, |
| 26909 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOLDM_W_PU] }, |
| 26910 | + NULL, -2, |
| 26911 | + { |
| 26912 | + AVR32_OPERAND_INTREG_POSTINC, |
| 26913 | + AVR32_OPERAND_PICO_REGLIST_W, |
| 26914 | + }, |
| 26915 | + }, |
| 26916 | + { |
| 26917 | + AVR32_SYNTAX_PICOMV_D1, |
| 26918 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOMV_D], AVR32_PARSER_ALIAS, |
| 26919 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOMV_D1] }, |
| 26920 | + &avr32_syntax_table[AVR32_SYNTAX_PICOMV_D2], 2, |
| 26921 | + { |
| 26922 | + AVR32_OPERAND_DWREG, |
| 26923 | + AVR32_OPERAND_PICO_REG_D, |
| 26924 | + }, |
| 26925 | + }, |
| 26926 | + { |
| 26927 | + AVR32_SYNTAX_PICOMV_D2, |
| 26928 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOMV_D], AVR32_PARSER_ALIAS, |
| 26929 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOMV_D2] }, |
| 26930 | + NULL, 2, |
| 26931 | + { |
| 26932 | + AVR32_OPERAND_PICO_REG_D, |
| 26933 | + AVR32_OPERAND_DWREG, |
| 26934 | + }, |
| 26935 | + }, |
| 26936 | + { |
| 26937 | + AVR32_SYNTAX_PICOMV_W1, |
| 26938 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOMV_W], AVR32_PARSER_ALIAS, |
| 26939 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOMV_W1] }, |
| 26940 | + &avr32_syntax_table[AVR32_SYNTAX_PICOMV_W2], 2, |
| 26941 | + { |
| 26942 | + AVR32_OPERAND_INTREG, |
| 26943 | + AVR32_OPERAND_PICO_REG_W, |
| 26944 | + }, |
| 26945 | + }, |
| 26946 | + { |
| 26947 | + AVR32_SYNTAX_PICOMV_W2, |
| 26948 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOMV_W], AVR32_PARSER_ALIAS, |
| 26949 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOMV_W2] }, |
| 26950 | + NULL, 2, |
| 26951 | + { |
| 26952 | + AVR32_OPERAND_PICO_REG_W, |
| 26953 | + AVR32_OPERAND_INTREG, |
| 26954 | + }, |
| 26955 | + }, |
| 26956 | + { |
| 26957 | + AVR32_SYNTAX_PICOST_D2, |
| 26958 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOST_D], AVR32_PARSER_ALIAS, |
| 26959 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOST_D2] }, |
| 26960 | + &avr32_syntax_table[AVR32_SYNTAX_PICOST_D3], 2, |
| 26961 | + { |
| 26962 | + AVR32_OPERAND_INTREG_POSTINC, |
| 26963 | + AVR32_OPERAND_PICO_REG_D, |
| 26964 | + }, |
| 26965 | + }, |
| 26966 | + { |
| 26967 | + AVR32_SYNTAX_PICOST_D3, |
| 26968 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOST_D], AVR32_PARSER_ALIAS, |
| 26969 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOST_D3] }, |
| 26970 | + &avr32_syntax_table[AVR32_SYNTAX_PICOST_D1], 2, |
| 26971 | + { |
| 26972 | + AVR32_OPERAND_INTREG_INDEX, |
| 26973 | + AVR32_OPERAND_PICO_REG_D, |
| 26974 | + }, |
| 26975 | + }, |
| 26976 | + { |
| 26977 | + AVR32_SYNTAX_PICOST_D1, |
| 26978 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOST_D], AVR32_PARSER_ALIAS, |
| 26979 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOST_D1] }, |
| 26980 | + NULL, 2, |
| 26981 | + { |
| 26982 | + AVR32_OPERAND_INTREG_UDISP_W, |
| 26983 | + AVR32_OPERAND_PICO_REG_D, |
| 26984 | + }, |
| 26985 | + }, |
| 26986 | + { |
| 26987 | + AVR32_SYNTAX_PICOST_W2, |
| 26988 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOST_W], AVR32_PARSER_ALIAS, |
| 26989 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOST_W2] }, |
| 26990 | + &avr32_syntax_table[AVR32_SYNTAX_PICOST_W3], 2, |
| 26991 | + { |
| 26992 | + AVR32_OPERAND_INTREG_POSTINC, |
| 26993 | + AVR32_OPERAND_PICO_REG_W, |
| 26994 | + }, |
| 26995 | + }, |
| 26996 | + { |
| 26997 | + AVR32_SYNTAX_PICOST_W3, |
| 26998 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOST_W], AVR32_PARSER_ALIAS, |
| 26999 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOST_W3] }, |
| 27000 | + &avr32_syntax_table[AVR32_SYNTAX_PICOST_W1], 2, |
| 27001 | + { |
| 27002 | + AVR32_OPERAND_INTREG_INDEX, |
| 27003 | + AVR32_OPERAND_PICO_REG_W, |
| 27004 | + }, |
| 27005 | + }, |
| 27006 | + { |
| 27007 | + AVR32_SYNTAX_PICOST_W1, |
| 27008 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOST_W], AVR32_PARSER_ALIAS, |
| 27009 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOST_W1] }, |
| 27010 | + NULL, 2, |
| 27011 | + { |
| 27012 | + AVR32_OPERAND_INTREG_UDISP_W, |
| 27013 | + AVR32_OPERAND_PICO_REG_W, |
| 27014 | + }, |
| 27015 | + }, |
| 27016 | + { |
| 27017 | + AVR32_SYNTAX_PICOSTM_D, |
| 27018 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOSTM_D], AVR32_PARSER_ALIAS, |
| 27019 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOSTM_D] }, |
| 27020 | + &avr32_syntax_table[AVR32_SYNTAX_PICOSTM_D_PU], -2, |
| 27021 | + { |
| 27022 | + AVR32_OPERAND_INTREG, |
| 27023 | + AVR32_OPERAND_PICO_REGLIST_D, |
| 27024 | + }, |
| 27025 | + }, |
| 27026 | + { |
| 27027 | + AVR32_SYNTAX_PICOSTM_D_PU, |
| 27028 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOSTM_D], AVR32_PARSER_ALIAS, |
| 27029 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOSTM_D_PU] }, |
| 27030 | + NULL, -2, |
| 27031 | + { |
| 27032 | + AVR32_OPERAND_INTREG_PREDEC, |
| 27033 | + AVR32_OPERAND_PICO_REGLIST_D, |
| 27034 | + }, |
| 27035 | + }, |
| 27036 | + { |
| 27037 | + AVR32_SYNTAX_PICOSTM_W, |
| 27038 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOSTM_W], AVR32_PARSER_ALIAS, |
| 27039 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOSTM_W] }, |
| 27040 | + &avr32_syntax_table[AVR32_SYNTAX_PICOSTM_W_PU], -2, |
| 27041 | + { |
| 27042 | + AVR32_OPERAND_INTREG, |
| 27043 | + AVR32_OPERAND_PICO_REGLIST_W, |
| 27044 | + }, |
| 27045 | + }, |
| 27046 | + { |
| 27047 | + AVR32_SYNTAX_PICOSTM_W_PU, |
| 27048 | + AVR32_PICO, &avr32_mnemonic_table[AVR32_MNEMONIC_PICOSTM_W], AVR32_PARSER_ALIAS, |
| 27049 | + { .alias = &avr32_alias_table[AVR32_ALIAS_PICOSTM_W_PU] }, |
| 27050 | + NULL, -2, |
| 27051 | + { |
| 27052 | + AVR32_OPERAND_INTREG_PREDEC, |
| 27053 | + AVR32_OPERAND_PICO_REGLIST_W, |
| 27054 | + }, |
| 27055 | + }, |
| 27056 | + SYNTAX_NORMAL2(RSUBEQ, RSUBEQ, RSUBEQ, INTREG, SIGNED_CONST, AVR32_V1), |
| 27057 | + SYNTAX_NORMAL2(RSUBNE, RSUBNE, RSUBNE, INTREG, SIGNED_CONST, AVR32_V2), |
| 27058 | + SYNTAX_NORMAL2(RSUBCC, RSUBCC, RSUBCC, INTREG, SIGNED_CONST, AVR32_V2), |
| 27059 | + SYNTAX_NORMAL2(RSUBCS, RSUBCS, RSUBCS, INTREG, SIGNED_CONST, AVR32_V2), |
| 27060 | + SYNTAX_NORMAL2(RSUBGE, RSUBGE, RSUBGE, INTREG, SIGNED_CONST, AVR32_V2), |
| 27061 | + SYNTAX_NORMAL2(RSUBLT, RSUBLT, RSUBLT, INTREG, SIGNED_CONST, AVR32_V2), |
| 27062 | + SYNTAX_NORMAL2(RSUBMI, RSUBMI, RSUBMI, INTREG, SIGNED_CONST, AVR32_V2), |
| 27063 | + SYNTAX_NORMAL2(RSUBPL, RSUBPL, RSUBPL, INTREG, SIGNED_CONST, AVR32_V2), |
| 27064 | + SYNTAX_NORMAL2(RSUBLS, RSUBLS, RSUBLS, INTREG, SIGNED_CONST, AVR32_V2), |
| 27065 | + SYNTAX_NORMAL2(RSUBGT, RSUBGT, RSUBGT, INTREG, SIGNED_CONST, AVR32_V2), |
| 27066 | + SYNTAX_NORMAL2(RSUBLE, RSUBLE, RSUBLE, INTREG, SIGNED_CONST, AVR32_V2), |
| 27067 | + SYNTAX_NORMAL2(RSUBHI, RSUBHI, RSUBHI, INTREG, SIGNED_CONST, AVR32_V2), |
| 27068 | + SYNTAX_NORMAL2(RSUBVS, RSUBVS, RSUBVS, INTREG, SIGNED_CONST, AVR32_V2), |
| 27069 | + SYNTAX_NORMAL2(RSUBVC, RSUBVC, RSUBVC, INTREG, SIGNED_CONST, AVR32_V2), |
| 27070 | + SYNTAX_NORMAL2(RSUBQS, RSUBQS, RSUBQS, INTREG, SIGNED_CONST, AVR32_V2), |
| 27071 | + SYNTAX_NORMAL2(RSUBAL, RSUBAL, RSUBAL, INTREG, SIGNED_CONST, AVR32_V2), |
| 27072 | + SYNTAX_NORMAL2(RSUBHS, RSUBHS, RSUBCC, INTREG, SIGNED_CONST, AVR32_V2), |
| 27073 | + SYNTAX_NORMAL2(RSUBLO, RSUBLO, RSUBCS, INTREG, SIGNED_CONST, AVR32_V2), |
| 27074 | + SYNTAX_NORMAL3(ADDEQ, ADDEQ, ADDEQ, INTREG, INTREG, INTREG, AVR32_V2), |
| 27075 | + SYNTAX_NORMAL3(ADDNE, ADDNE, ADDNE, INTREG, INTREG, INTREG, AVR32_V2), |
| 27076 | + SYNTAX_NORMAL3(ADDCC, ADDCC, ADDCC, INTREG, INTREG, INTREG, AVR32_V2), |
| 27077 | + SYNTAX_NORMAL3(ADDCS, ADDCS, ADDCS, INTREG, INTREG, INTREG, AVR32_V2), |
| 27078 | + SYNTAX_NORMAL3(ADDGE, ADDGE, ADDGE, INTREG, INTREG, INTREG, AVR32_V2), |
| 27079 | + SYNTAX_NORMAL3(ADDLT, ADDLT, ADDLT, INTREG, INTREG, INTREG, AVR32_V2), |
| 27080 | + SYNTAX_NORMAL3(ADDMI, ADDMI, ADDMI, INTREG, INTREG, INTREG, AVR32_V2), |
| 27081 | + SYNTAX_NORMAL3(ADDPL, ADDPL, ADDPL, INTREG, INTREG, INTREG, AVR32_V2), |
| 27082 | + SYNTAX_NORMAL3(ADDLS, ADDLS, ADDLS, INTREG, INTREG, INTREG, AVR32_V2), |
| 27083 | + SYNTAX_NORMAL3(ADDGT, ADDGT, ADDGT, INTREG, INTREG, INTREG, AVR32_V2), |
| 27084 | + SYNTAX_NORMAL3(ADDLE, ADDLE, ADDLE, INTREG, INTREG, INTREG, AVR32_V2), |
| 27085 | + SYNTAX_NORMAL3(ADDHI, ADDHI, ADDHI, INTREG, INTREG, INTREG, AVR32_V2), |
| 27086 | + SYNTAX_NORMAL3(ADDVS, ADDVS, ADDVS, INTREG, INTREG, INTREG, AVR32_V2), |
| 27087 | + SYNTAX_NORMAL3(ADDVC, ADDVC, ADDVC, INTREG, INTREG, INTREG, AVR32_V2), |
| 27088 | + SYNTAX_NORMAL3(ADDQS, ADDQS, ADDQS, INTREG, INTREG, INTREG, AVR32_V2), |
| 27089 | + SYNTAX_NORMAL3(ADDAL, ADDAL, ADDAL, INTREG, INTREG, INTREG, AVR32_V2), |
| 27090 | + SYNTAX_NORMAL3(ADDHS, ADDHS, ADDCC, INTREG, INTREG, INTREG, AVR32_V2), |
| 27091 | + SYNTAX_NORMAL3(ADDLO, ADDLO, ADDCS, INTREG, INTREG, INTREG, AVR32_V2), |
| 27092 | + SYNTAX_NORMAL3(SUB2EQ, SUBEQ, SUB2EQ, INTREG, INTREG, INTREG, AVR32_V2), |
| 27093 | + SYNTAX_NORMAL3(SUB2NE, SUBNE, SUB2NE, INTREG, INTREG, INTREG, AVR32_V2), |
| 27094 | + SYNTAX_NORMAL3(SUB2CC, SUBCC, SUB2CC, INTREG, INTREG, INTREG, AVR32_V2), |
| 27095 | + SYNTAX_NORMAL3(SUB2CS, SUBCS, SUB2CS, INTREG, INTREG, INTREG, AVR32_V2), |
| 27096 | + SYNTAX_NORMAL3(SUB2GE, SUBGE, SUB2GE, INTREG, INTREG, INTREG, AVR32_V2), |
| 27097 | + SYNTAX_NORMAL3(SUB2LT, SUBLT, SUB2LT, INTREG, INTREG, INTREG, AVR32_V2), |
| 27098 | + SYNTAX_NORMAL3(SUB2MI, SUBMI, SUB2MI, INTREG, INTREG, INTREG, AVR32_V2), |
| 27099 | + SYNTAX_NORMAL3(SUB2PL, SUBPL, SUB2PL, INTREG, INTREG, INTREG, AVR32_V2), |
| 27100 | + SYNTAX_NORMAL3(SUB2LS, SUBLS, SUB2LS, INTREG, INTREG, INTREG, AVR32_V2), |
| 27101 | + SYNTAX_NORMAL3(SUB2GT, SUBGT, SUB2GT, INTREG, INTREG, INTREG, AVR32_V2), |
| 27102 | + SYNTAX_NORMAL3(SUB2LE, SUBLE, SUB2LE, INTREG, INTREG, INTREG, AVR32_V2), |
| 27103 | + SYNTAX_NORMAL3(SUB2HI, SUBHI, SUB2HI, INTREG, INTREG, INTREG, AVR32_V2), |
| 27104 | + SYNTAX_NORMAL3(SUB2VS, SUBVS, SUB2VS, INTREG, INTREG, INTREG, AVR32_V2), |
| 27105 | + SYNTAX_NORMAL3(SUB2VC, SUBVC, SUB2VC, INTREG, INTREG, INTREG, AVR32_V2), |
| 27106 | + SYNTAX_NORMAL3(SUB2QS, SUBQS, SUB2QS, INTREG, INTREG, INTREG, AVR32_V2), |
| 27107 | + SYNTAX_NORMAL3(SUB2AL, SUBAL, SUB2AL, INTREG, INTREG, INTREG, AVR32_V2), |
| 27108 | + SYNTAX_NORMAL3(SUB2HS, SUBHS, SUB2CC, INTREG, INTREG, INTREG, AVR32_V2), |
| 27109 | + SYNTAX_NORMAL3(SUB2LO, SUBLO, SUB2CS, INTREG, INTREG, INTREG, AVR32_V2), |
| 27110 | + SYNTAX_NORMAL3(ANDEQ, ANDEQ, ANDEQ, INTREG, INTREG, INTREG, AVR32_V2), |
| 27111 | + SYNTAX_NORMAL3(ANDNE, ANDNE, ANDNE, INTREG, INTREG, INTREG, AVR32_V2), |
| 27112 | + SYNTAX_NORMAL3(ANDCC, ANDCC, ANDCC, INTREG, INTREG, INTREG, AVR32_V2), |
| 27113 | + SYNTAX_NORMAL3(ANDCS, ANDCS, ANDCS, INTREG, INTREG, INTREG, AVR32_V2), |
| 27114 | + SYNTAX_NORMAL3(ANDGE, ANDGE, ANDGE, INTREG, INTREG, INTREG, AVR32_V2), |
| 27115 | + SYNTAX_NORMAL3(ANDLT, ANDLT, ANDLT, INTREG, INTREG, INTREG, AVR32_V2), |
| 27116 | + SYNTAX_NORMAL3(ANDMI, ANDMI, ANDMI, INTREG, INTREG, INTREG, AVR32_V2), |
| 27117 | + SYNTAX_NORMAL3(ANDPL, ANDPL, ANDPL, INTREG, INTREG, INTREG, AVR32_V2), |
| 27118 | + SYNTAX_NORMAL3(ANDLS, ANDLS, ANDLS, INTREG, INTREG, INTREG, AVR32_V2), |
| 27119 | + SYNTAX_NORMAL3(ANDGT, ANDGT, ANDGT, INTREG, INTREG, INTREG, AVR32_V2), |
| 27120 | + SYNTAX_NORMAL3(ANDLE, ANDLE, ANDLE, INTREG, INTREG, INTREG, AVR32_V2), |
| 27121 | + SYNTAX_NORMAL3(ANDHI, ANDHI, ANDHI, INTREG, INTREG, INTREG, AVR32_V2), |
| 27122 | + SYNTAX_NORMAL3(ANDVS, ANDVS, ANDVS, INTREG, INTREG, INTREG, AVR32_V2), |
| 27123 | + SYNTAX_NORMAL3(ANDVC, ANDVC, ANDVC, INTREG, INTREG, INTREG, AVR32_V2), |
| 27124 | + SYNTAX_NORMAL3(ANDQS, ANDQS, ANDQS, INTREG, INTREG, INTREG, AVR32_V2), |
| 27125 | + SYNTAX_NORMAL3(ANDAL, ANDAL, ANDAL, INTREG, INTREG, INTREG, AVR32_V2), |
| 27126 | + SYNTAX_NORMAL3(ANDHS, ANDHS, ANDCC, INTREG, INTREG, INTREG, AVR32_V2), |
| 27127 | + SYNTAX_NORMAL3(ANDLO, ANDLO, ANDCS, INTREG, INTREG, INTREG, AVR32_V2), |
| 27128 | + SYNTAX_NORMAL3(OREQ, OREQ, OREQ, INTREG, INTREG, INTREG, AVR32_V2), |
| 27129 | + SYNTAX_NORMAL3(ORNE, ORNE, ORNE, INTREG, INTREG, INTREG, AVR32_V2), |
| 27130 | + SYNTAX_NORMAL3(ORCC, ORCC, ORCC, INTREG, INTREG, INTREG, AVR32_V2), |
| 27131 | + SYNTAX_NORMAL3(ORCS, ORCS, ORCS, INTREG, INTREG, INTREG, AVR32_V2), |
| 27132 | + SYNTAX_NORMAL3(ORGE, ORGE, ORGE, INTREG, INTREG, INTREG, AVR32_V2), |
| 27133 | + SYNTAX_NORMAL3(ORLT, ORLT, ORLT, INTREG, INTREG, INTREG, AVR32_V2), |
| 27134 | + SYNTAX_NORMAL3(ORMI, ORMI, ORMI, INTREG, INTREG, INTREG, AVR32_V2), |
| 27135 | + SYNTAX_NORMAL3(ORPL, ORPL, ORPL, INTREG, INTREG, INTREG, AVR32_V2), |
| 27136 | + SYNTAX_NORMAL3(ORLS, ORLS, ORLS, INTREG, INTREG, INTREG, AVR32_V2), |
| 27137 | + SYNTAX_NORMAL3(ORGT, ORGT, ORGT, INTREG, INTREG, INTREG, AVR32_V2), |
| 27138 | + SYNTAX_NORMAL3(ORLE, ORLE, ORLE, INTREG, INTREG, INTREG, AVR32_V2), |
| 27139 | + SYNTAX_NORMAL3(ORHI, ORHI, ORHI, INTREG, INTREG, INTREG, AVR32_V2), |
| 27140 | + SYNTAX_NORMAL3(ORVS, ORVS, ORVS, INTREG, INTREG, INTREG, AVR32_V2), |
| 27141 | + SYNTAX_NORMAL3(ORVC, ORVC, ORVC, INTREG, INTREG, INTREG, AVR32_V2), |
| 27142 | + SYNTAX_NORMAL3(ORQS, ORQS, ORQS, INTREG, INTREG, INTREG, AVR32_V2), |
| 27143 | + SYNTAX_NORMAL3(ORAL, ORAL, ORAL, INTREG, INTREG, INTREG, AVR32_V2), |
| 27144 | + SYNTAX_NORMAL3(ORHS, ORHS, ORCC, INTREG, INTREG, INTREG, AVR32_V2), |
| 27145 | + SYNTAX_NORMAL3(ORLO, ORLO, ORCS, INTREG, INTREG, INTREG, AVR32_V2), |
| 27146 | + SYNTAX_NORMAL3(EOREQ, EOREQ, EOREQ, INTREG, INTREG, INTREG, AVR32_V2), |
| 27147 | + SYNTAX_NORMAL3(EORNE, EORNE, EORNE, INTREG, INTREG, INTREG, AVR32_V2), |
| 27148 | + SYNTAX_NORMAL3(EORCC, EORCC, EORCC, INTREG, INTREG, INTREG, AVR32_V2), |
| 27149 | + SYNTAX_NORMAL3(EORCS, EORCS, EORCS, INTREG, INTREG, INTREG, AVR32_V2), |
| 27150 | + SYNTAX_NORMAL3(EORGE, EORGE, EORGE, INTREG, INTREG, INTREG, AVR32_V2), |
| 27151 | + SYNTAX_NORMAL3(EORLT, EORLT, EORLT, INTREG, INTREG, INTREG, AVR32_V2), |
| 27152 | + SYNTAX_NORMAL3(EORMI, EORMI, EORMI, INTREG, INTREG, INTREG, AVR32_V2), |
| 27153 | + SYNTAX_NORMAL3(EORPL, EORPL, EORPL, INTREG, INTREG, INTREG, AVR32_V2), |
| 27154 | + SYNTAX_NORMAL3(EORLS, EORLS, EORLS, INTREG, INTREG, INTREG, AVR32_V2), |
| 27155 | + SYNTAX_NORMAL3(EORGT, EORGT, EORGT, INTREG, INTREG, INTREG, AVR32_V2), |
| 27156 | + SYNTAX_NORMAL3(EORLE, EORLE, EORLE, INTREG, INTREG, INTREG, AVR32_V2), |
| 27157 | + SYNTAX_NORMAL3(EORHI, EORHI, EORHI, INTREG, INTREG, INTREG, AVR32_V2), |
| 27158 | + SYNTAX_NORMAL3(EORVS, EORVS, EORVS, INTREG, INTREG, INTREG, AVR32_V2), |
| 27159 | + SYNTAX_NORMAL3(EORVC, EORVC, EORVC, INTREG, INTREG, INTREG, AVR32_V2), |
| 27160 | + SYNTAX_NORMAL3(EORQS, EORQS, EORQS, INTREG, INTREG, INTREG, AVR32_V2), |
| 27161 | + SYNTAX_NORMAL3(EORAL, EORAL, EORAL, INTREG, INTREG, INTREG, AVR32_V2), |
| 27162 | + SYNTAX_NORMAL3(EORHS, EORHS, EORCC, INTREG, INTREG, INTREG, AVR32_V2), |
| 27163 | + SYNTAX_NORMAL3(EORLO, EORLO, EORCS, INTREG, INTREG, INTREG, AVR32_V2), |
| 27164 | + SYNTAX_NORMAL2(LD_WEQ, LD_WEQ, LD_WEQ, INTREG, INTREG_UDISP_W, AVR32_V2), |
| 27165 | + SYNTAX_NORMAL2(LD_WNE, LD_WNE, LD_WNE, INTREG, INTREG_UDISP_W, AVR32_V2), |
| 27166 | + SYNTAX_NORMAL2(LD_WCC, LD_WCC, LD_WCC, INTREG, INTREG_UDISP_W, AVR32_V2), |
| 27167 | + SYNTAX_NORMAL2(LD_WCS, LD_WCS, LD_WCS, INTREG, INTREG_UDISP_W, AVR32_V2), |
| 27168 | + SYNTAX_NORMAL2(LD_WGE, LD_WGE, LD_WGE, INTREG, INTREG_UDISP_W, AVR32_V2), |
| 27169 | + SYNTAX_NORMAL2(LD_WLT, LD_WLT, LD_WLT, INTREG, INTREG_UDISP_W, AVR32_V2), |
| 27170 | + SYNTAX_NORMAL2(LD_WMI, LD_WMI, LD_WMI, INTREG, INTREG_UDISP_W, AVR32_V2), |
| 27171 | + SYNTAX_NORMAL2(LD_WPL, LD_WPL, LD_WPL, INTREG, INTREG_UDISP_W, AVR32_V2), |
| 27172 | + SYNTAX_NORMAL2(LD_WLS, LD_WLS, LD_WLS, INTREG, INTREG_UDISP_W, AVR32_V2), |
| 27173 | + SYNTAX_NORMAL2(LD_WGT, LD_WGT, LD_WGT, INTREG, INTREG_UDISP_W, AVR32_V2), |
| 27174 | + SYNTAX_NORMAL2(LD_WLE, LD_WLE, LD_WLE, INTREG, INTREG_UDISP_W, AVR32_V2), |
| 27175 | + SYNTAX_NORMAL2(LD_WHI, LD_WHI, LD_WHI, INTREG, INTREG_UDISP_W, AVR32_V2), |
| 27176 | + SYNTAX_NORMAL2(LD_WVS, LD_WVS, LD_WVS, INTREG, INTREG_UDISP_W, AVR32_V2), |
| 27177 | + SYNTAX_NORMAL2(LD_WVC, LD_WVC, LD_WVC, INTREG, INTREG_UDISP_W, AVR32_V2), |
| 27178 | + SYNTAX_NORMAL2(LD_WQS, LD_WQS, LD_WQS, INTREG, INTREG_UDISP_W, AVR32_V2), |
| 27179 | + SYNTAX_NORMAL2(LD_WAL, LD_WAL, LD_WAL, INTREG, INTREG_UDISP_W, AVR32_V2), |
| 27180 | + SYNTAX_NORMAL2(LD_WHS, LD_WHS, LD_WCC, INTREG, INTREG_UDISP_W, AVR32_V2), |
| 27181 | + SYNTAX_NORMAL2(LD_WLO, LD_WLO, LD_WCS, INTREG, INTREG_UDISP_W, AVR32_V2), |
| 27182 | + SYNTAX_NORMAL2(LD_SHEQ, LD_SHEQ, LD_SHEQ, INTREG, INTREG_UDISP_H, AVR32_V2), |
| 27183 | + SYNTAX_NORMAL2(LD_SHNE, LD_SHNE, LD_SHNE, INTREG, INTREG_UDISP_H, AVR32_V2), |
| 27184 | + SYNTAX_NORMAL2(LD_SHCC, LD_SHCC, LD_SHCC, INTREG, INTREG_UDISP_H, AVR32_V2), |
| 27185 | + SYNTAX_NORMAL2(LD_SHCS, LD_SHCS, LD_SHCS, INTREG, INTREG_UDISP_H, AVR32_V2), |
| 27186 | + SYNTAX_NORMAL2(LD_SHGE, LD_SHGE, LD_SHGE, INTREG, INTREG_UDISP_H, AVR32_V2), |
| 27187 | + SYNTAX_NORMAL2(LD_SHLT, LD_SHLT, LD_SHLT, INTREG, INTREG_UDISP_H, AVR32_V2), |
| 27188 | + SYNTAX_NORMAL2(LD_SHMI, LD_SHMI, LD_SHMI, INTREG, INTREG_UDISP_H, AVR32_V2), |
| 27189 | + SYNTAX_NORMAL2(LD_SHPL, LD_SHPL, LD_SHPL, INTREG, INTREG_UDISP_H, AVR32_V2), |
| 27190 | + SYNTAX_NORMAL2(LD_SHLS, LD_SHLS, LD_SHLS, INTREG, INTREG_UDISP_H, AVR32_V2), |
| 27191 | + SYNTAX_NORMAL2(LD_SHGT, LD_SHGT, LD_SHGT, INTREG, INTREG_UDISP_H, AVR32_V2), |
| 27192 | + SYNTAX_NORMAL2(LD_SHLE, LD_SHLE, LD_SHLE, INTREG, INTREG_UDISP_H, AVR32_V2), |
| 27193 | + SYNTAX_NORMAL2(LD_SHHI, LD_SHHI, LD_SHHI, INTREG, INTREG_UDISP_H, AVR32_V2), |
| 27194 | + SYNTAX_NORMAL2(LD_SHVS, LD_SHVS, LD_SHVS, INTREG, INTREG_UDISP_H, AVR32_V2), |
| 27195 | + SYNTAX_NORMAL2(LD_SHVC, LD_SHVC, LD_SHVC, INTREG, INTREG_UDISP_H, AVR32_V2), |
| 27196 | + SYNTAX_NORMAL2(LD_SHQS, LD_SHQS, LD_SHQS, INTREG, INTREG_UDISP_H, AVR32_V2), |
| 27197 | + SYNTAX_NORMAL2(LD_SHAL, LD_SHAL, LD_SHAL, INTREG, INTREG_UDISP_H, AVR32_V2), |
| 27198 | + SYNTAX_NORMAL2(LD_SHHS, LD_SHHS, LD_SHCC, INTREG, INTREG_UDISP_H, AVR32_V2), |
| 27199 | + SYNTAX_NORMAL2(LD_SHLO, LD_SHLO, LD_SHCS, INTREG, INTREG_UDISP_H, AVR32_V2), |
| 27200 | + SYNTAX_NORMAL2(LD_UHEQ, LD_UHEQ, LD_UHEQ, INTREG, INTREG_UDISP_H, AVR32_V2), |
| 27201 | + SYNTAX_NORMAL2(LD_UHNE, LD_UHNE, LD_UHNE, INTREG, INTREG_UDISP_H, AVR32_V2), |
| 27202 | + SYNTAX_NORMAL2(LD_UHCC, LD_UHCC, LD_UHCC, INTREG, INTREG_UDISP_H, AVR32_V2), |
| 27203 | + SYNTAX_NORMAL2(LD_UHCS, LD_UHCS, LD_UHCS, INTREG, INTREG_UDISP_H, AVR32_V2), |
| 27204 | + SYNTAX_NORMAL2(LD_UHGE, LD_UHGE, LD_UHGE, INTREG, INTREG_UDISP_H, AVR32_V2), |
| 27205 | + SYNTAX_NORMAL2(LD_UHLT, LD_UHLT, LD_UHLT, INTREG, INTREG_UDISP_H, AVR32_V2), |
| 27206 | + SYNTAX_NORMAL2(LD_UHMI, LD_UHMI, LD_UHMI, INTREG, INTREG_UDISP_H, AVR32_V2), |
| 27207 | + SYNTAX_NORMAL2(LD_UHPL, LD_UHPL, LD_UHPL, INTREG, INTREG_UDISP_H, AVR32_V2), |
| 27208 | + SYNTAX_NORMAL2(LD_UHLS, LD_UHLS, LD_UHLS, INTREG, INTREG_UDISP_H, AVR32_V2), |
| 27209 | + SYNTAX_NORMAL2(LD_UHGT, LD_UHGT, LD_UHGT, INTREG, INTREG_UDISP_H, AVR32_V2), |
| 27210 | + SYNTAX_NORMAL2(LD_UHLE, LD_UHLE, LD_UHLE, INTREG, INTREG_UDISP_H, AVR32_V2), |
| 27211 | + SYNTAX_NORMAL2(LD_UHHI, LD_UHHI, LD_UHHI, INTREG, INTREG_UDISP_H, AVR32_V2), |
| 27212 | + SYNTAX_NORMAL2(LD_UHVS, LD_UHVS, LD_UHVS, INTREG, INTREG_UDISP_H, AVR32_V2), |
| 27213 | + SYNTAX_NORMAL2(LD_UHVC, LD_UHVC, LD_UHVC, INTREG, INTREG_UDISP_H, AVR32_V2), |
| 27214 | + SYNTAX_NORMAL2(LD_UHQS, LD_UHQS, LD_UHQS, INTREG, INTREG_UDISP_H, AVR32_V2), |
| 27215 | + SYNTAX_NORMAL2(LD_UHAL, LD_UHAL, LD_UHAL, INTREG, INTREG_UDISP_H, AVR32_V2), |
| 27216 | + SYNTAX_NORMAL2(LD_UHHS, LD_UHHS, LD_UHCC, INTREG, INTREG_UDISP_H, AVR32_V2), |
| 27217 | + SYNTAX_NORMAL2(LD_UHLO, LD_UHLO, LD_UHCS, INTREG, INTREG_UDISP_H, AVR32_V2), |
| 27218 | + SYNTAX_NORMAL2(LD_SBEQ, LD_SBEQ, LD_SBEQ, INTREG, INTREG_UDISP, AVR32_V2), |
| 27219 | + SYNTAX_NORMAL2(LD_SBNE, LD_SBNE, LD_SBNE, INTREG, INTREG_UDISP, AVR32_V2), |
| 27220 | + SYNTAX_NORMAL2(LD_SBCC, LD_SBCC, LD_SBCC, INTREG, INTREG_UDISP, AVR32_V2), |
| 27221 | + SYNTAX_NORMAL2(LD_SBCS, LD_SBCS, LD_SBCS, INTREG, INTREG_UDISP, AVR32_V2), |
| 27222 | + SYNTAX_NORMAL2(LD_SBGE, LD_SBGE, LD_SBGE, INTREG, INTREG_UDISP, AVR32_V2), |
| 27223 | + SYNTAX_NORMAL2(LD_SBLT, LD_SBLT, LD_SBLT, INTREG, INTREG_UDISP, AVR32_V2), |
| 27224 | + SYNTAX_NORMAL2(LD_SBMI, LD_SBMI, LD_SBMI, INTREG, INTREG_UDISP, AVR32_V2), |
| 27225 | + SYNTAX_NORMAL2(LD_SBPL, LD_SBPL, LD_SBPL, INTREG, INTREG_UDISP, AVR32_V2), |
| 27226 | + SYNTAX_NORMAL2(LD_SBLS, LD_SBLS, LD_SBLS, INTREG, INTREG_UDISP, AVR32_V2), |
| 27227 | + SYNTAX_NORMAL2(LD_SBGT, LD_SBGT, LD_SBGT, INTREG, INTREG_UDISP, AVR32_V2), |
| 27228 | + SYNTAX_NORMAL2(LD_SBLE, LD_SBLE, LD_SBLE, INTREG, INTREG_UDISP, AVR32_V2), |
| 27229 | + SYNTAX_NORMAL2(LD_SBHI, LD_SBHI, LD_SBHI, INTREG, INTREG_UDISP, AVR32_V2), |
| 27230 | + SYNTAX_NORMAL2(LD_SBVS, LD_SBVS, LD_SBVS, INTREG, INTREG_UDISP, AVR32_V2), |
| 27231 | + SYNTAX_NORMAL2(LD_SBVC, LD_SBVC, LD_SBVC, INTREG, INTREG_UDISP, AVR32_V2), |
| 27232 | + SYNTAX_NORMAL2(LD_SBQS, LD_SBQS, LD_SBQS, INTREG, INTREG_UDISP, AVR32_V2), |
| 27233 | + SYNTAX_NORMAL2(LD_SBAL, LD_SBAL, LD_SBAL, INTREG, INTREG_UDISP, AVR32_V2), |
| 27234 | + SYNTAX_NORMAL2(LD_SBHS, LD_SBHS, LD_SBCC, INTREG, INTREG_UDISP, AVR32_V2), |
| 27235 | + SYNTAX_NORMAL2(LD_SBLO, LD_SBLO, LD_SBCS, INTREG, INTREG_UDISP, AVR32_V2), |
| 27236 | + SYNTAX_NORMAL2(LD_UBEQ, LD_UBEQ, LD_UBEQ, INTREG, INTREG_UDISP, AVR32_V2), |
| 27237 | + SYNTAX_NORMAL2(LD_UBNE, LD_UBNE, LD_UBNE, INTREG, INTREG_UDISP, AVR32_V2), |
| 27238 | + SYNTAX_NORMAL2(LD_UBCC, LD_UBCC, LD_UBCC, INTREG, INTREG_UDISP, AVR32_V2), |
| 27239 | + SYNTAX_NORMAL2(LD_UBCS, LD_UBCS, LD_UBCS, INTREG, INTREG_UDISP, AVR32_V2), |
| 27240 | + SYNTAX_NORMAL2(LD_UBGE, LD_UBGE, LD_UBGE, INTREG, INTREG_UDISP, AVR32_V2), |
| 27241 | + SYNTAX_NORMAL2(LD_UBLT, LD_UBLT, LD_UBLT, INTREG, INTREG_UDISP, AVR32_V2), |
| 27242 | + SYNTAX_NORMAL2(LD_UBMI, LD_UBMI, LD_UBMI, INTREG, INTREG_UDISP, AVR32_V2), |
| 27243 | + SYNTAX_NORMAL2(LD_UBPL, LD_UBPL, LD_UBPL, INTREG, INTREG_UDISP, AVR32_V2), |
| 27244 | + SYNTAX_NORMAL2(LD_UBLS, LD_UBLS, LD_UBLS, INTREG, INTREG_UDISP, AVR32_V2), |
| 27245 | + SYNTAX_NORMAL2(LD_UBGT, LD_UBGT, LD_UBGT, INTREG, INTREG_UDISP, AVR32_V2), |
| 27246 | + SYNTAX_NORMAL2(LD_UBLE, LD_UBLE, LD_UBLE, INTREG, INTREG_UDISP, AVR32_V2), |
| 27247 | + SYNTAX_NORMAL2(LD_UBHI, LD_UBHI, LD_UBHI, INTREG, INTREG_UDISP, AVR32_V2), |
| 27248 | + SYNTAX_NORMAL2(LD_UBVS, LD_UBVS, LD_UBVS, INTREG, INTREG_UDISP, AVR32_V2), |
| 27249 | + SYNTAX_NORMAL2(LD_UBVC, LD_UBVC, LD_UBVC, INTREG, INTREG_UDISP, AVR32_V2), |
| 27250 | + SYNTAX_NORMAL2(LD_UBQS, LD_UBQS, LD_UBQS, INTREG, INTREG_UDISP, AVR32_V2), |
| 27251 | + SYNTAX_NORMAL2(LD_UBAL, LD_UBAL, LD_UBAL, INTREG, INTREG_UDISP, AVR32_V2), |
| 27252 | + SYNTAX_NORMAL2(LD_UBHS, LD_UBHS, LD_UBCC, INTREG, INTREG_UDISP, AVR32_V2), |
| 27253 | + SYNTAX_NORMAL2(LD_UBLO, LD_UBLO, LD_UBCS, INTREG, INTREG_UDISP, AVR32_V2), |
| 27254 | + SYNTAX_NORMAL2(ST_WEQ, ST_WEQ, ST_WEQ, INTREG_UDISP_W, INTREG, AVR32_V2), |
| 27255 | + SYNTAX_NORMAL2(ST_WNE, ST_WNE, ST_WNE, INTREG_UDISP_W, INTREG, AVR32_V2), |
| 27256 | + SYNTAX_NORMAL2(ST_WCC, ST_WCC, ST_WCC, INTREG_UDISP_W, INTREG, AVR32_V2), |
| 27257 | + SYNTAX_NORMAL2(ST_WCS, ST_WCS, ST_WCS, INTREG_UDISP_W, INTREG, AVR32_V2), |
| 27258 | + SYNTAX_NORMAL2(ST_WGE, ST_WGE, ST_WGE, INTREG_UDISP_W, INTREG, AVR32_V2), |
| 27259 | + SYNTAX_NORMAL2(ST_WLT, ST_WLT, ST_WLT, INTREG_UDISP_W, INTREG, AVR32_V2), |
| 27260 | + SYNTAX_NORMAL2(ST_WMI, ST_WMI, ST_WMI, INTREG_UDISP_W, INTREG, AVR32_V2), |
| 27261 | + SYNTAX_NORMAL2(ST_WPL, ST_WPL, ST_WPL, INTREG_UDISP_W, INTREG, AVR32_V2), |
| 27262 | + SYNTAX_NORMAL2(ST_WLS, ST_WLS, ST_WLS, INTREG_UDISP_W, INTREG, AVR32_V2), |
| 27263 | + SYNTAX_NORMAL2(ST_WGT, ST_WGT, ST_WGT, INTREG_UDISP_W, INTREG, AVR32_V2), |
| 27264 | + SYNTAX_NORMAL2(ST_WLE, ST_WLE, ST_WLE, INTREG_UDISP_W, INTREG, AVR32_V2), |
| 27265 | + SYNTAX_NORMAL2(ST_WHI, ST_WHI, ST_WHI, INTREG_UDISP_W, INTREG, AVR32_V2), |
| 27266 | + SYNTAX_NORMAL2(ST_WVS, ST_WVS, ST_WVS, INTREG_UDISP_W, INTREG, AVR32_V2), |
| 27267 | + SYNTAX_NORMAL2(ST_WVC, ST_WVC, ST_WVC, INTREG_UDISP_W, INTREG, AVR32_V2), |
| 27268 | + SYNTAX_NORMAL2(ST_WQS, ST_WQS, ST_WQS, INTREG_UDISP_W, INTREG, AVR32_V2), |
| 27269 | + SYNTAX_NORMAL2(ST_WAL, ST_WAL, ST_WAL, INTREG_UDISP_W, INTREG, AVR32_V2), |
| 27270 | + SYNTAX_NORMAL2(ST_WHS, ST_WHS, ST_WCC, INTREG_UDISP_W, INTREG, AVR32_V2), |
| 27271 | + SYNTAX_NORMAL2(ST_WLO, ST_WLO, ST_WCS, INTREG_UDISP_W, INTREG, AVR32_V2), |
| 27272 | + SYNTAX_NORMAL2(ST_HEQ, ST_HEQ, ST_HEQ, INTREG_UDISP_H, INTREG, AVR32_V2), |
| 27273 | + SYNTAX_NORMAL2(ST_HNE, ST_HNE, ST_HNE, INTREG_UDISP_H, INTREG, AVR32_V2), |
| 27274 | + SYNTAX_NORMAL2(ST_HCC, ST_HCC, ST_HCC, INTREG_UDISP_H, INTREG, AVR32_V2), |
| 27275 | + SYNTAX_NORMAL2(ST_HCS, ST_HCS, ST_HCS, INTREG_UDISP_H, INTREG, AVR32_V2), |
| 27276 | + SYNTAX_NORMAL2(ST_HGE, ST_HGE, ST_HGE, INTREG_UDISP_H, INTREG, AVR32_V2), |
| 27277 | + SYNTAX_NORMAL2(ST_HLT, ST_HLT, ST_HLT, INTREG_UDISP_H, INTREG, AVR32_V2), |
| 27278 | + SYNTAX_NORMAL2(ST_HMI, ST_HMI, ST_HMI, INTREG_UDISP_H, INTREG, AVR32_V2), |
| 27279 | + SYNTAX_NORMAL2(ST_HPL, ST_HPL, ST_HPL, INTREG_UDISP_H, INTREG, AVR32_V2), |
| 27280 | + SYNTAX_NORMAL2(ST_HLS, ST_HLS, ST_HLS, INTREG_UDISP_H, INTREG, AVR32_V2), |
| 27281 | + SYNTAX_NORMAL2(ST_HGT, ST_HGT, ST_HGT, INTREG_UDISP_H, INTREG, AVR32_V2), |
| 27282 | + SYNTAX_NORMAL2(ST_HLE, ST_HLE, ST_HLE, INTREG_UDISP_H, INTREG, AVR32_V2), |
| 27283 | + SYNTAX_NORMAL2(ST_HHI, ST_HHI, ST_HHI, INTREG_UDISP_H, INTREG, AVR32_V2), |
| 27284 | + SYNTAX_NORMAL2(ST_HVS, ST_HVS, ST_HVS, INTREG_UDISP_H, INTREG, AVR32_V2), |
| 27285 | + SYNTAX_NORMAL2(ST_HVC, ST_HVC, ST_HVC, INTREG_UDISP_H, INTREG, AVR32_V2), |
| 27286 | + SYNTAX_NORMAL2(ST_HQS, ST_HQS, ST_HQS, INTREG_UDISP_H, INTREG, AVR32_V2), |
| 27287 | + SYNTAX_NORMAL2(ST_HAL, ST_HAL, ST_HAL, INTREG_UDISP_H, INTREG, AVR32_V2), |
| 27288 | + SYNTAX_NORMAL2(ST_HHS, ST_HHS, ST_HCC, INTREG_UDISP_H, INTREG, AVR32_V2), |
| 27289 | + SYNTAX_NORMAL2(ST_HLO, ST_HLO, ST_HCS, INTREG_UDISP_H, INTREG, AVR32_V2), |
| 27290 | + SYNTAX_NORMAL2(ST_BEQ, ST_BEQ, ST_BEQ, INTREG_UDISP, INTREG, AVR32_V2), |
| 27291 | + SYNTAX_NORMAL2(ST_BNE, ST_BNE, ST_BNE, INTREG_UDISP, INTREG, AVR32_V2), |
| 27292 | + SYNTAX_NORMAL2(ST_BCC, ST_BCC, ST_BCC, INTREG_UDISP, INTREG, AVR32_V2), |
| 27293 | + SYNTAX_NORMAL2(ST_BCS, ST_BCS, ST_BCS, INTREG_UDISP, INTREG, AVR32_V2), |
| 27294 | + SYNTAX_NORMAL2(ST_BGE, ST_BGE, ST_BGE, INTREG_UDISP, INTREG, AVR32_V2), |
| 27295 | + SYNTAX_NORMAL2(ST_BLT, ST_BLT, ST_BLT, INTREG_UDISP, INTREG, AVR32_V2), |
| 27296 | + SYNTAX_NORMAL2(ST_BMI, ST_BMI, ST_BMI, INTREG_UDISP, INTREG, AVR32_V2), |
| 27297 | + SYNTAX_NORMAL2(ST_BPL, ST_BPL, ST_BPL, INTREG_UDISP, INTREG, AVR32_V2), |
| 27298 | + SYNTAX_NORMAL2(ST_BLS, ST_BLS, ST_BLS, INTREG_UDISP, INTREG, AVR32_V2), |
| 27299 | + SYNTAX_NORMAL2(ST_BGT, ST_BGT, ST_BGT, INTREG_UDISP, INTREG, AVR32_V2), |
| 27300 | + SYNTAX_NORMAL2(ST_BLE, ST_BLE, ST_BLE, INTREG_UDISP, INTREG, AVR32_V2), |
| 27301 | + SYNTAX_NORMAL2(ST_BHI, ST_BHI, ST_BHI, INTREG_UDISP, INTREG, AVR32_V2), |
| 27302 | + SYNTAX_NORMAL2(ST_BVS, ST_BVS, ST_BVS, INTREG_UDISP, INTREG, AVR32_V2), |
| 27303 | + SYNTAX_NORMAL2(ST_BVC, ST_BVC, ST_BVC, INTREG_UDISP, INTREG, AVR32_V2), |
| 27304 | + SYNTAX_NORMAL2(ST_BQS, ST_BQS, ST_BQS, INTREG_UDISP, INTREG, AVR32_V2), |
| 27305 | + SYNTAX_NORMAL2(ST_BAL, ST_BAL, ST_BAL, INTREG_UDISP, INTREG, AVR32_V2), |
| 27306 | + SYNTAX_NORMAL2(ST_BHS, ST_BHS, ST_BCC, INTREG_UDISP, INTREG, AVR32_V2), |
| 27307 | + SYNTAX_NORMAL2(ST_BLO, ST_BLO, ST_BCS, INTREG_UDISP, INTREG, AVR32_V2), |
| 27308 | + SYNTAX_NORMAL2(MOVH, MOVH, MOVH, INTREG, UNSIGNED_CONST, AVR32_V2), |
| 27309 | + |
| 27310 | + }; |
| 27311 | + |
| 27312 | +#define NORMAL_MNEMONIC(name, syntax, str) \ |
| 27313 | + { \ |
| 27314 | + AVR32_MNEMONIC_##name, str, \ |
| 27315 | + &avr32_syntax_table[AVR32_SYNTAX_##syntax], \ |
| 27316 | + } |
| 27317 | +#define FP_MNEMONIC(name, syntax, str) \ |
| 27318 | + NORMAL_MNEMONIC(name##_S, syntax##_S, str ".s"), \ |
| 27319 | + NORMAL_MNEMONIC(name##_D, syntax##_D, str ".d") |
| 27320 | + |
| 27321 | +const struct avr32_mnemonic avr32_mnemonic_table[] = |
| 27322 | + { |
| 27323 | + NORMAL_MNEMONIC(ABS, ABS, "abs"), |
| 27324 | + NORMAL_MNEMONIC(ACALL, ACALL, "acall"), |
| 27325 | + NORMAL_MNEMONIC(ACR, ACR, "acr"), |
| 27326 | + NORMAL_MNEMONIC(ADC, ADC, "adc"), |
| 27327 | + NORMAL_MNEMONIC(ADD, ADD1, "add"), |
| 27328 | + NORMAL_MNEMONIC(ADDABS, ADDABS, "addabs"), |
| 27329 | + NORMAL_MNEMONIC(ADDHH_W, ADDHH_W, "addhh.w"), |
| 27330 | + NORMAL_MNEMONIC(AND, AND1, "and"), |
| 27331 | + NORMAL_MNEMONIC(ANDH, ANDH, "andh"), |
| 27332 | + NORMAL_MNEMONIC(ANDL, ANDL, "andl"), |
| 27333 | + NORMAL_MNEMONIC(ANDN, ANDN, "andn"), |
| 27334 | + NORMAL_MNEMONIC(ASR, ASR1, "asr"), |
| 27335 | + NORMAL_MNEMONIC(BFEXTS, BFEXTS, "bfexts"), |
| 27336 | + NORMAL_MNEMONIC(BFEXTU, BFEXTU, "bfextu"), |
| 27337 | + NORMAL_MNEMONIC(BFINS, BFINS, "bfins"), |
| 27338 | + NORMAL_MNEMONIC(BLD, BLD, "bld"), |
| 27339 | + NORMAL_MNEMONIC(BREQ, BREQ1, "breq"), |
| 27340 | + NORMAL_MNEMONIC(BRNE, BRNE1, "brne"), |
| 27341 | + NORMAL_MNEMONIC(BRCC, BRCC1, "brcc"), |
| 27342 | + NORMAL_MNEMONIC(BRCS, BRCS1, "brcs"), |
| 27343 | + NORMAL_MNEMONIC(BRGE, BRGE1, "brge"), |
| 27344 | + NORMAL_MNEMONIC(BRLT, BRLT1, "brlt"), |
| 27345 | + NORMAL_MNEMONIC(BRMI, BRMI1, "brmi"), |
| 27346 | + NORMAL_MNEMONIC(BRPL, BRPL1, "brpl"), |
| 27347 | + NORMAL_MNEMONIC(BRHS, BRHS1, "brhs"), |
| 27348 | + NORMAL_MNEMONIC(BRLO, BRLO1, "brlo"), |
| 27349 | + NORMAL_MNEMONIC(BRLS, BRLS, "brls"), |
| 27350 | + NORMAL_MNEMONIC(BRGT, BRGT, "brgt"), |
| 27351 | + NORMAL_MNEMONIC(BRLE, BRLE, "brle"), |
| 27352 | + NORMAL_MNEMONIC(BRHI, BRHI, "brhi"), |
| 27353 | + NORMAL_MNEMONIC(BRVS, BRVS, "brvs"), |
| 27354 | + NORMAL_MNEMONIC(BRVC, BRVC, "brvc"), |
| 27355 | + NORMAL_MNEMONIC(BRQS, BRQS, "brqs"), |
| 27356 | + NORMAL_MNEMONIC(BRAL, BRAL, "bral"), |
| 27357 | + NORMAL_MNEMONIC(BREAKPOINT, BREAKPOINT, "breakpoint"), |
| 27358 | + NORMAL_MNEMONIC(BREV, BREV, "brev"), |
| 27359 | + NORMAL_MNEMONIC(BST, BST, "bst"), |
| 27360 | + NORMAL_MNEMONIC(CACHE, CACHE, "cache"), |
| 27361 | + NORMAL_MNEMONIC(CASTS_B, CASTS_B, "casts.b"), |
| 27362 | + NORMAL_MNEMONIC(CASTS_H, CASTS_H, "casts.h"), |
| 27363 | + NORMAL_MNEMONIC(CASTU_B, CASTU_B, "castu.b"), |
| 27364 | + NORMAL_MNEMONIC(CASTU_H, CASTU_H, "castu.h"), |
| 27365 | + NORMAL_MNEMONIC(CBR, CBR, "cbr"), |
| 27366 | + NORMAL_MNEMONIC(CLZ, CLZ, "clz"), |
| 27367 | + NORMAL_MNEMONIC(COM, COM, "com"), |
| 27368 | + NORMAL_MNEMONIC(COP, COP, "cop"), |
| 27369 | + NORMAL_MNEMONIC(CP_B, CP_B, "cp.b"), |
| 27370 | + NORMAL_MNEMONIC(CP_H, CP_H, "cp.h"), |
| 27371 | + NORMAL_MNEMONIC(CP_W, CP_W1, "cp.w"), |
| 27372 | + NORMAL_MNEMONIC(CP, CP_W1, "cp"), |
| 27373 | + NORMAL_MNEMONIC(CPC, CPC1, "cpc"), |
| 27374 | + NORMAL_MNEMONIC(CSRF, CSRF, "csrf"), |
| 27375 | + NORMAL_MNEMONIC(CSRFCZ, CSRFCZ, "csrfcz"), |
| 27376 | + NORMAL_MNEMONIC(DIVS, DIVS, "divs"), |
| 27377 | + NORMAL_MNEMONIC(DIVU, DIVU, "divu"), |
| 27378 | + NORMAL_MNEMONIC(EOR, EOR1, "eor"), |
| 27379 | + NORMAL_MNEMONIC(EORL, EORL, "eorl"), |
| 27380 | + NORMAL_MNEMONIC(EORH, EORH, "eorh"), |
| 27381 | + NORMAL_MNEMONIC(FRS, FRS, "frs"), |
| 27382 | + NORMAL_MNEMONIC(SSCALL, SSCALL, "sscall"), |
| 27383 | + NORMAL_MNEMONIC(RETSS, RETSS, "retss"), |
| 27384 | + NORMAL_MNEMONIC(ICALL, ICALL, "icall"), |
| 27385 | + NORMAL_MNEMONIC(INCJOSP, INCJOSP, "incjosp"), |
| 27386 | + NORMAL_MNEMONIC(LD_D, LD_D1, "ld.d"), |
| 27387 | + NORMAL_MNEMONIC(LD_SB, LD_SB2, "ld.sb"), |
| 27388 | + NORMAL_MNEMONIC(LD_UB, LD_UB1, "ld.ub"), |
| 27389 | + NORMAL_MNEMONIC(LD_SH, LD_SH1, "ld.sh"), |
| 27390 | + NORMAL_MNEMONIC(LD_UH, LD_UH1, "ld.uh"), |
| 27391 | + NORMAL_MNEMONIC(LD_W, LD_W1, "ld.w"), |
| 27392 | + NORMAL_MNEMONIC(LDC_D, LDC_D3, "ldc.d"), |
| 27393 | + NORMAL_MNEMONIC(LDC_W, LDC_W3, "ldc.w"), |
| 27394 | + NORMAL_MNEMONIC(LDC0_D, LDC0_D, "ldc0.d"), |
| 27395 | + NORMAL_MNEMONIC(LDC0_W, LDC0_W, "ldc0.w"), |
| 27396 | + NORMAL_MNEMONIC(LDCM_D, LDCM_D, "ldcm.d"), |
| 27397 | + NORMAL_MNEMONIC(LDCM_W, LDCM_W, "ldcm.w"), |
| 27398 | + NORMAL_MNEMONIC(LDDPC, LDDPC, "lddpc"), |
| 27399 | + NORMAL_MNEMONIC(LDDSP, LDDSP, "lddsp"), |
| 27400 | + NORMAL_MNEMONIC(LDINS_B, LDINS_B, "ldins.b"), |
| 27401 | + NORMAL_MNEMONIC(LDINS_H, LDINS_H, "ldins.h"), |
| 27402 | + NORMAL_MNEMONIC(LDM, LDM, "ldm"), |
| 27403 | + NORMAL_MNEMONIC(LDMTS, LDMTS, "ldmts"), |
| 27404 | + NORMAL_MNEMONIC(LDSWP_SH, LDSWP_SH, "ldswp.sh"), |
| 27405 | + NORMAL_MNEMONIC(LDSWP_UH, LDSWP_UH, "ldswp.uh"), |
| 27406 | + NORMAL_MNEMONIC(LDSWP_W, LDSWP_W, "ldswp.w"), |
| 27407 | + NORMAL_MNEMONIC(LSL, LSL1, "lsl"), |
| 27408 | + NORMAL_MNEMONIC(LSR, LSR1, "lsr"), |
| 27409 | + NORMAL_MNEMONIC(MAC, MAC, "mac"), |
| 27410 | + NORMAL_MNEMONIC(MACHH_D, MACHH_D, "machh.d"), |
| 27411 | + NORMAL_MNEMONIC(MACHH_W, MACHH_W, "machh.w"), |
| 27412 | + NORMAL_MNEMONIC(MACS_D, MACS_D, "macs.d"), |
| 27413 | + NORMAL_MNEMONIC(MACSATHH_W, MACSATHH_W, "macsathh.w"), |
| 27414 | + NORMAL_MNEMONIC(MACU_D, MACUD, "macu.d"), |
| 27415 | + NORMAL_MNEMONIC(MACWH_D, MACWH_D, "macwh.d"), |
| 27416 | + NORMAL_MNEMONIC(MAX, MAX, "max"), |
| 27417 | + NORMAL_MNEMONIC(MCALL, MCALL, "mcall"), |
| 27418 | + NORMAL_MNEMONIC(MFDR, MFDR, "mfdr"), |
| 27419 | + NORMAL_MNEMONIC(MFSR, MFSR, "mfsr"), |
| 27420 | + NORMAL_MNEMONIC(MIN, MIN, "min"), |
| 27421 | + NORMAL_MNEMONIC(MOV, MOV3, "mov"), |
| 27422 | + NORMAL_MNEMONIC(MOVEQ, MOVEQ1, "moveq"), |
| 27423 | + NORMAL_MNEMONIC(MOVNE, MOVNE1, "movne"), |
| 27424 | + NORMAL_MNEMONIC(MOVCC, MOVCC1, "movcc"), |
| 27425 | + NORMAL_MNEMONIC(MOVCS, MOVCS1, "movcs"), |
| 27426 | + NORMAL_MNEMONIC(MOVGE, MOVGE1, "movge"), |
| 27427 | + NORMAL_MNEMONIC(MOVLT, MOVLT1, "movlt"), |
| 27428 | + NORMAL_MNEMONIC(MOVMI, MOVMI1, "movmi"), |
| 27429 | + NORMAL_MNEMONIC(MOVPL, MOVPL1, "movpl"), |
| 27430 | + NORMAL_MNEMONIC(MOVLS, MOVLS1, "movls"), |
| 27431 | + NORMAL_MNEMONIC(MOVGT, MOVGT1, "movgt"), |
| 27432 | + NORMAL_MNEMONIC(MOVLE, MOVLE1, "movle"), |
| 27433 | + NORMAL_MNEMONIC(MOVHI, MOVHI1, "movhi"), |
| 27434 | + NORMAL_MNEMONIC(MOVVS, MOVVS1, "movvs"), |
| 27435 | + NORMAL_MNEMONIC(MOVVC, MOVVC1, "movvc"), |
| 27436 | + NORMAL_MNEMONIC(MOVQS, MOVQS1, "movqs"), |
| 27437 | + NORMAL_MNEMONIC(MOVAL, MOVAL1, "moval"), |
| 27438 | + NORMAL_MNEMONIC(MOVHS, MOVHS1, "movhs"), |
| 27439 | + NORMAL_MNEMONIC(MOVLO, MOVLO1, "movlo"), |
| 27440 | + NORMAL_MNEMONIC(MTDR, MTDR, "mtdr"), |
| 27441 | + NORMAL_MNEMONIC(MTSR, MTSR, "mtsr"), |
| 27442 | + NORMAL_MNEMONIC(MUL, MUL1, "mul"), |
| 27443 | + NORMAL_MNEMONIC(MULHH_W, MULHH_W, "mulhh.w"), |
| 27444 | + NORMAL_MNEMONIC(MULNHH_W, MULNHH_W, "mulnhh.w"), |
| 27445 | + NORMAL_MNEMONIC(MULNWH_D, MULNWH_D, "mulnwh.d"), |
| 27446 | + NORMAL_MNEMONIC(MULS_D, MULSD, "muls.d"), |
| 27447 | + NORMAL_MNEMONIC(MULSATHH_H, MULSATHH_H, "mulsathh.h"), |
| 27448 | + NORMAL_MNEMONIC(MULSATHH_W, MULSATHH_W, "mulsathh.w"), |
| 27449 | + NORMAL_MNEMONIC(MULSATRNDHH_H, MULSATRNDHH_H, "mulsatrndhh.h"), |
| 27450 | + NORMAL_MNEMONIC(MULSATRNDWH_W, MULSATRNDWH_W, "mulsatrndwh.w"), |
| 27451 | + NORMAL_MNEMONIC(MULSATWH_W, MULSATWH_W, "mulsatwh.w"), |
| 27452 | + NORMAL_MNEMONIC(MULU_D, MULU_D, "mulu.d"), |
| 27453 | + NORMAL_MNEMONIC(MULWH_D, MULWH_D, "mulwh.d"), |
| 27454 | + NORMAL_MNEMONIC(MUSFR, MUSFR, "musfr"), |
| 27455 | + NORMAL_MNEMONIC(MUSTR, MUSTR, "mustr"), |
| 27456 | + NORMAL_MNEMONIC(MVCR_D, MVCR_D, "mvcr.d"), |
| 27457 | + NORMAL_MNEMONIC(MVCR_W, MVCR_W, "mvcr.w"), |
| 27458 | + NORMAL_MNEMONIC(MVRC_D, MVRC_D, "mvrc.d"), |
| 27459 | + NORMAL_MNEMONIC(MVRC_W, MVRC_W, "mvrc.w"), |
| 27460 | + NORMAL_MNEMONIC(NEG, NEG, "neg"), |
| 27461 | + NORMAL_MNEMONIC(NOP, NOP, "nop"), |
| 27462 | + NORMAL_MNEMONIC(OR, OR1, "or"), |
| 27463 | + NORMAL_MNEMONIC(ORH, ORH, "orh"), |
| 27464 | + NORMAL_MNEMONIC(ORL, ORL, "orl"), |
| 27465 | + NORMAL_MNEMONIC(PABS_SB, PABS_SB, "pabs.sb"), |
| 27466 | + NORMAL_MNEMONIC(PABS_SH, PABS_SH, "pabs.sh"), |
| 27467 | + NORMAL_MNEMONIC(PACKSH_SB, PACKSH_SB, "packsh.sb"), |
| 27468 | + NORMAL_MNEMONIC(PACKSH_UB, PACKSH_UB, "packsh.ub"), |
| 27469 | + NORMAL_MNEMONIC(PACKW_SH, PACKW_SH, "packw.sh"), |
| 27470 | + NORMAL_MNEMONIC(PADD_B, PADD_B, "padd.b"), |
| 27471 | + NORMAL_MNEMONIC(PADD_H, PADD_H, "padd.h"), |
| 27472 | + NORMAL_MNEMONIC(PADDH_SH, PADDH_SH, "paddh.sh"), |
| 27473 | + NORMAL_MNEMONIC(PADDH_UB, PADDH_UB, "paddh.ub"), |
| 27474 | + NORMAL_MNEMONIC(PADDS_SB, PADDS_SB, "padds.sb"), |
| 27475 | + NORMAL_MNEMONIC(PADDS_SH, PADDS_SH, "padds.sh"), |
| 27476 | + NORMAL_MNEMONIC(PADDS_UB, PADDS_UB, "padds.ub"), |
| 27477 | + NORMAL_MNEMONIC(PADDS_UH, PADDS_UH, "padds.uh"), |
| 27478 | + NORMAL_MNEMONIC(PADDSUB_H, PADDSUB_H, "paddsub.h"), |
| 27479 | + NORMAL_MNEMONIC(PADDSUBH_SH, PADDSUBH_SH, "paddsubh.sh"), |
| 27480 | + NORMAL_MNEMONIC(PADDSUBS_SH, PADDSUBS_SH, "paddsubs.sh"), |
| 27481 | + NORMAL_MNEMONIC(PADDSUBS_UH, PADDSUBS_UH, "paddsubs.uh"), |
| 27482 | + NORMAL_MNEMONIC(PADDX_H, PADDX_H, "paddx.h"), |
| 27483 | + NORMAL_MNEMONIC(PADDXH_SH, PADDXH_SH, "paddxh.sh"), |
| 27484 | + NORMAL_MNEMONIC(PADDXS_SH, PADDXS_SH, "paddxs.sh"), |
| 27485 | + NORMAL_MNEMONIC(PADDXS_UH, PADDXS_UH, "paddxs.uh"), |
| 27486 | + NORMAL_MNEMONIC(PASR_B, PASR_B, "pasr.b"), |
| 27487 | + NORMAL_MNEMONIC(PASR_H, PASR_H, "pasr.h"), |
| 27488 | + NORMAL_MNEMONIC(PAVG_SH, PAVG_SH, "pavg.sh"), |
| 27489 | + NORMAL_MNEMONIC(PAVG_UB, PAVG_UB, "pavg.ub"), |
| 27490 | + NORMAL_MNEMONIC(PLSL_B, PLSL_B, "plsl.b"), |
| 27491 | + NORMAL_MNEMONIC(PLSL_H, PLSL_H, "plsl.h"), |
| 27492 | + NORMAL_MNEMONIC(PLSR_B, PLSR_B, "plsr.b"), |
| 27493 | + NORMAL_MNEMONIC(PLSR_H, PLSR_H, "plsr.h"), |
| 27494 | + NORMAL_MNEMONIC(PMAX_SH, PMAX_SH, "pmax.sh"), |
| 27495 | + NORMAL_MNEMONIC(PMAX_UB, PMAX_UB, "pmax.ub"), |
| 27496 | + NORMAL_MNEMONIC(PMIN_SH, PMIN_SH, "pmin.sh"), |
| 27497 | + NORMAL_MNEMONIC(PMIN_UB, PMIN_UB, "pmin.ub"), |
| 27498 | + NORMAL_MNEMONIC(POPJC, POPJC, "popjc"), |
| 27499 | + NORMAL_MNEMONIC(POPM, POPM, "popm"), |
| 27500 | + NORMAL_MNEMONIC(PREF, PREF, "pref"), |
| 27501 | + NORMAL_MNEMONIC(PSAD, PSAD, "psad"), |
| 27502 | + NORMAL_MNEMONIC(PSUB_B, PSUB_B, "psub.b"), |
| 27503 | + NORMAL_MNEMONIC(PSUB_H, PSUB_H, "psub.h"), |
| 27504 | + NORMAL_MNEMONIC(PSUBADD_H, PSUBADD_H, "psubadd.h"), |
| 27505 | + NORMAL_MNEMONIC(PSUBADDH_SH, PSUBADDH_SH, "psubaddh.sh"), |
| 27506 | + NORMAL_MNEMONIC(PSUBADDS_SH, PSUBADDS_SH, "psubadds.sh"), |
| 27507 | + NORMAL_MNEMONIC(PSUBADDS_UH, PSUBADDS_UH, "psubadds.uh"), |
| 27508 | + NORMAL_MNEMONIC(PSUBH_SH, PSUBH_SH, "psubh.sh"), |
| 27509 | + NORMAL_MNEMONIC(PSUBH_UB, PSUBH_UB, "psubh.ub"), |
| 27510 | + NORMAL_MNEMONIC(PSUBS_SB, PSUBS_SB, "psubs.sb"), |
| 27511 | + NORMAL_MNEMONIC(PSUBS_SH, PSUBS_SH, "psubs.sh"), |
| 27512 | + NORMAL_MNEMONIC(PSUBS_UB, PSUBS_UB, "psubs.ub"), |
| 27513 | + NORMAL_MNEMONIC(PSUBS_UH, PSUBS_UH, "psubs.uh"), |
| 27514 | + NORMAL_MNEMONIC(PSUBX_H, PSUBX_H, "psubx.h"), |
| 27515 | + NORMAL_MNEMONIC(PSUBXH_SH, PSUBXH_SH, "psubxh.sh"), |
| 27516 | + NORMAL_MNEMONIC(PSUBXS_SH, PSUBXS_SH, "psubxs.sh"), |
| 27517 | + NORMAL_MNEMONIC(PSUBXS_UH, PSUBXS_UH, "psubxs.uh"), |
| 27518 | + NORMAL_MNEMONIC(PUNPCKSB_H, PUNPCKSB_H, "punpcksb.h"), |
| 27519 | + NORMAL_MNEMONIC(PUNPCKUB_H, PUNPCKUB_H, "punpckub.h"), |
| 27520 | + NORMAL_MNEMONIC(PUSHJC, PUSHJC, "pushjc"), |
| 27521 | + NORMAL_MNEMONIC(PUSHM, PUSHM, "pushm"), |
| 27522 | + NORMAL_MNEMONIC(RCALL, RCALL1, "rcall"), |
| 27523 | + NORMAL_MNEMONIC(RETEQ, RETEQ, "reteq"), |
| 27524 | + NORMAL_MNEMONIC(RETNE, RETNE, "retne"), |
| 27525 | + NORMAL_MNEMONIC(RETCC, RETCC, "retcc"), |
| 27526 | + NORMAL_MNEMONIC(RETCS, RETCS, "retcs"), |
| 27527 | + NORMAL_MNEMONIC(RETGE, RETGE, "retge"), |
| 27528 | + NORMAL_MNEMONIC(RETLT, RETLT, "retlt"), |
| 27529 | + NORMAL_MNEMONIC(RETMI, RETMI, "retmi"), |
| 27530 | + NORMAL_MNEMONIC(RETPL, RETPL, "retpl"), |
| 27531 | + NORMAL_MNEMONIC(RETLS, RETLS, "retls"), |
| 27532 | + NORMAL_MNEMONIC(RETGT, RETGT, "retgt"), |
| 27533 | + NORMAL_MNEMONIC(RETLE, RETLE, "retle"), |
| 27534 | + NORMAL_MNEMONIC(RETHI, RETHI, "rethi"), |
| 27535 | + NORMAL_MNEMONIC(RETVS, RETVS, "retvs"), |
| 27536 | + NORMAL_MNEMONIC(RETVC, RETVC, "retvc"), |
| 27537 | + NORMAL_MNEMONIC(RETQS, RETQS, "retqs"), |
| 27538 | + NORMAL_MNEMONIC(RETAL, RETAL, "retal"), |
| 27539 | + NORMAL_MNEMONIC(RETHS, RETHS, "reths"), |
| 27540 | + NORMAL_MNEMONIC(RETLO, RETLO, "retlo"), |
| 27541 | + NORMAL_MNEMONIC(RET, RETAL, "ret"), |
| 27542 | + NORMAL_MNEMONIC(RETD, RETD, "retd"), |
| 27543 | + NORMAL_MNEMONIC(RETE, RETE, "rete"), |
| 27544 | + NORMAL_MNEMONIC(RETJ, RETJ, "retj"), |
| 27545 | + NORMAL_MNEMONIC(RETS, RETS, "rets"), |
| 27546 | + NORMAL_MNEMONIC(RJMP, RJMP, "rjmp"), |
| 27547 | + NORMAL_MNEMONIC(ROL, ROL, "rol"), |
| 27548 | + NORMAL_MNEMONIC(ROR, ROR, "ror"), |
| 27549 | + NORMAL_MNEMONIC(RSUB, RSUB1, "rsub"), |
| 27550 | + NORMAL_MNEMONIC(SATADD_H, SATADD_H, "satadd.h"), |
| 27551 | + NORMAL_MNEMONIC(SATADD_W, SATADD_W, "satadd.w"), |
| 27552 | + NORMAL_MNEMONIC(SATRNDS, SATRNDS, "satrnds"), |
| 27553 | + NORMAL_MNEMONIC(SATRNDU, SATRNDU, "satrndu"), |
| 27554 | + NORMAL_MNEMONIC(SATS, SATS, "sats"), |
| 27555 | + NORMAL_MNEMONIC(SATSUB_H, SATSUB_H, "satsub.h"), |
| 27556 | + NORMAL_MNEMONIC(SATSUB_W, SATSUB_W1, "satsub.w"), |
| 27557 | + NORMAL_MNEMONIC(SATU, SATU, "satu"), |
| 27558 | + NORMAL_MNEMONIC(SBC, SBC, "sbc"), |
| 27559 | + NORMAL_MNEMONIC(SBR, SBR, "sbr"), |
| 27560 | + NORMAL_MNEMONIC(SCALL, SCALL, "scall"), |
| 27561 | + NORMAL_MNEMONIC(SCR, SCR, "scr"), |
| 27562 | + NORMAL_MNEMONIC(SLEEP, SLEEP, "sleep"), |
| 27563 | + NORMAL_MNEMONIC(SREQ, SREQ, "sreq"), |
| 27564 | + NORMAL_MNEMONIC(SRNE, SRNE, "srne"), |
| 27565 | + NORMAL_MNEMONIC(SRCC, SRCC, "srcc"), |
| 27566 | + NORMAL_MNEMONIC(SRCS, SRCS, "srcs"), |
| 27567 | + NORMAL_MNEMONIC(SRGE, SRGE, "srge"), |
| 27568 | + NORMAL_MNEMONIC(SRLT, SRLT, "srlt"), |
| 27569 | + NORMAL_MNEMONIC(SRMI, SRMI, "srmi"), |
| 27570 | + NORMAL_MNEMONIC(SRPL, SRPL, "srpl"), |
| 27571 | + NORMAL_MNEMONIC(SRLS, SRLS, "srls"), |
| 27572 | + NORMAL_MNEMONIC(SRGT, SRGT, "srgt"), |
| 27573 | + NORMAL_MNEMONIC(SRLE, SRLE, "srle"), |
| 27574 | + NORMAL_MNEMONIC(SRHI, SRHI, "srhi"), |
| 27575 | + NORMAL_MNEMONIC(SRVS, SRVS, "srvs"), |
| 27576 | + NORMAL_MNEMONIC(SRVC, SRVC, "srvc"), |
| 27577 | + NORMAL_MNEMONIC(SRQS, SRQS, "srqs"), |
| 27578 | + NORMAL_MNEMONIC(SRAL, SRAL, "sral"), |
| 27579 | + NORMAL_MNEMONIC(SRHS, SRHS, "srhs"), |
| 27580 | + NORMAL_MNEMONIC(SRLO, SRLO, "srlo"), |
| 27581 | + NORMAL_MNEMONIC(SSRF, SSRF, "ssrf"), |
| 27582 | + NORMAL_MNEMONIC(ST_B, ST_B1, "st.b"), |
| 27583 | + NORMAL_MNEMONIC(ST_D, ST_D1, "st.d"), |
| 27584 | + NORMAL_MNEMONIC(ST_H, ST_H1, "st.h"), |
| 27585 | + NORMAL_MNEMONIC(ST_W, ST_W1, "st.w"), |
| 27586 | + NORMAL_MNEMONIC(STC_D, STC_D3, "stc.d"), |
| 27587 | + NORMAL_MNEMONIC(STC_W, STC_W3, "stc.w"), |
| 27588 | + NORMAL_MNEMONIC(STC0_D, STC0_D, "stc0.d"), |
| 27589 | + NORMAL_MNEMONIC(STC0_W, STC0_W, "stc0.w"), |
| 27590 | + NORMAL_MNEMONIC(STCM_D, STCM_D, "stcm.d"), |
| 27591 | + NORMAL_MNEMONIC(STCM_W, STCM_W, "stcm.w"), |
| 27592 | + NORMAL_MNEMONIC(STCOND, STCOND, "stcond"), |
| 27593 | + NORMAL_MNEMONIC(STDSP, STDSP, "stdsp"), |
| 27594 | + NORMAL_MNEMONIC(STHH_W, STHH_W2, "sthh.w"), |
| 27595 | + NORMAL_MNEMONIC(STM, STM, "stm"), |
| 27596 | + NORMAL_MNEMONIC(STMTS, STMTS, "stmts"), |
| 27597 | + NORMAL_MNEMONIC(STSWP_H, STSWP_H, "stswp.h"), |
| 27598 | + NORMAL_MNEMONIC(STSWP_W, STSWP_W, "stswp.w"), |
| 27599 | + NORMAL_MNEMONIC(SUB, SUB1, "sub"), |
| 27600 | + NORMAL_MNEMONIC(SUBEQ, SUBEQ, "subeq"), |
| 27601 | + NORMAL_MNEMONIC(SUBNE, SUBNE, "subne"), |
| 27602 | + NORMAL_MNEMONIC(SUBCC, SUBCC, "subcc"), |
| 27603 | + NORMAL_MNEMONIC(SUBCS, SUBCS, "subcs"), |
| 27604 | + NORMAL_MNEMONIC(SUBGE, SUBGE, "subge"), |
| 27605 | + NORMAL_MNEMONIC(SUBLT, SUBLT, "sublt"), |
| 27606 | + NORMAL_MNEMONIC(SUBMI, SUBMI, "submi"), |
| 27607 | + NORMAL_MNEMONIC(SUBPL, SUBPL, "subpl"), |
| 27608 | + NORMAL_MNEMONIC(SUBLS, SUBLS, "subls"), |
| 27609 | + NORMAL_MNEMONIC(SUBGT, SUBGT, "subgt"), |
| 27610 | + NORMAL_MNEMONIC(SUBLE, SUBLE, "suble"), |
| 27611 | + NORMAL_MNEMONIC(SUBHI, SUBHI, "subhi"), |
| 27612 | + NORMAL_MNEMONIC(SUBVS, SUBVS, "subvs"), |
| 27613 | + NORMAL_MNEMONIC(SUBVC, SUBVC, "subvc"), |
| 27614 | + NORMAL_MNEMONIC(SUBQS, SUBQS, "subqs"), |
| 27615 | + NORMAL_MNEMONIC(SUBAL, SUBAL, "subal"), |
| 27616 | + NORMAL_MNEMONIC(SUBHS, SUBHS, "subhs"), |
| 27617 | + NORMAL_MNEMONIC(SUBLO, SUBLO, "sublo"), |
| 27618 | + NORMAL_MNEMONIC(SUBFEQ, SUBFEQ, "subfeq"), |
| 27619 | + NORMAL_MNEMONIC(SUBFNE, SUBFNE, "subfne"), |
| 27620 | + NORMAL_MNEMONIC(SUBFCC, SUBFCC, "subfcc"), |
| 27621 | + NORMAL_MNEMONIC(SUBFCS, SUBFCS, "subfcs"), |
| 27622 | + NORMAL_MNEMONIC(SUBFGE, SUBFGE, "subfge"), |
| 27623 | + NORMAL_MNEMONIC(SUBFLT, SUBFLT, "subflt"), |
| 27624 | + NORMAL_MNEMONIC(SUBFMI, SUBFMI, "subfmi"), |
| 27625 | + NORMAL_MNEMONIC(SUBFPL, SUBFPL, "subfpl"), |
| 27626 | + NORMAL_MNEMONIC(SUBFLS, SUBFLS, "subfls"), |
| 27627 | + NORMAL_MNEMONIC(SUBFGT, SUBFGT, "subfgt"), |
| 27628 | + NORMAL_MNEMONIC(SUBFLE, SUBFLE, "subfle"), |
| 27629 | + NORMAL_MNEMONIC(SUBFHI, SUBFHI, "subfhi"), |
| 27630 | + NORMAL_MNEMONIC(SUBFVS, SUBFVS, "subfvs"), |
| 27631 | + NORMAL_MNEMONIC(SUBFVC, SUBFVC, "subfvc"), |
| 27632 | + NORMAL_MNEMONIC(SUBFQS, SUBFQS, "subfqs"), |
| 27633 | + NORMAL_MNEMONIC(SUBFAL, SUBFAL, "subfal"), |
| 27634 | + NORMAL_MNEMONIC(SUBFHS, SUBFHS, "subfhs"), |
| 27635 | + NORMAL_MNEMONIC(SUBFLO, SUBFLO, "subflo"), |
| 27636 | + NORMAL_MNEMONIC(SUBHH_W, SUBHH_W, "subhh.w"), |
| 27637 | + NORMAL_MNEMONIC(SWAP_B, SWAP_B, "swap.b"), |
| 27638 | + NORMAL_MNEMONIC(SWAP_BH, SWAP_BH, "swap.bh"), |
| 27639 | + NORMAL_MNEMONIC(SWAP_H, SWAP_H, "swap.h"), |
| 27640 | + NORMAL_MNEMONIC(SYNC, SYNC, "sync"), |
| 27641 | + NORMAL_MNEMONIC(TLBR, TLBR, "tlbr"), |
| 27642 | + NORMAL_MNEMONIC(TLBS, TLBS, "tlbs"), |
| 27643 | + NORMAL_MNEMONIC(TLBW, TLBW, "tlbw"), |
| 27644 | + NORMAL_MNEMONIC(TNBZ, TNBZ, "tnbz"), |
| 27645 | + NORMAL_MNEMONIC(TST, TST, "tst"), |
| 27646 | + NORMAL_MNEMONIC(XCHG, XCHG, "xchg"), |
| 27647 | + NORMAL_MNEMONIC(MEMC, MEMC, "memc"), |
| 27648 | + NORMAL_MNEMONIC(MEMS, MEMS, "mems"), |
| 27649 | + NORMAL_MNEMONIC(MEMT, MEMT, "memt"), |
| 27650 | + NORMAL_MNEMONIC (FMAC_S, FMAC_S, "fmac.s"), |
| 27651 | + NORMAL_MNEMONIC (FNMAC_S, FNMAC_S, "fnmac.s"), |
| 27652 | + NORMAL_MNEMONIC (FMSC_S, FMSC_S, "fmsc.s"), |
| 27653 | + NORMAL_MNEMONIC (FNMSC_S, FNMSC_S, "fnmsc.s"), |
| 27654 | + NORMAL_MNEMONIC (FMUL_S, FMUL_S, "fmul.s"), |
| 27655 | + NORMAL_MNEMONIC (FNMUL_S, FNMUL_S, "fnmul.s"), |
| 27656 | + NORMAL_MNEMONIC (FADD_S, FADD_S, "fadd.s"), |
| 27657 | + NORMAL_MNEMONIC (FSUB_S, FSUB_S, "fsub.s"), |
| 27658 | + NORMAL_MNEMONIC (FCASTRS_SW, FCASTRS_SW, "fcastrs.sw"), |
| 27659 | + NORMAL_MNEMONIC (FCASTRS_UW, FCASTRS_UW, "fcastrs.uw"), |
| 27660 | + NORMAL_MNEMONIC (FCASTSW_S, FCASTSW_S, "fcastsw.s"), |
| 27661 | + NORMAL_MNEMONIC (FCASTUW_S, FCASTUW_S, "fcastuw.s"), |
| 27662 | + NORMAL_MNEMONIC (FCMP_S, FCMP_S, "fcmp.s"), |
| 27663 | + NORMAL_MNEMONIC (FCHK_S, FCHK_S, "fchk.s"), |
| 27664 | + NORMAL_MNEMONIC (FRCPA_S, FRCPA_S, "frcpa.s"), |
| 27665 | + NORMAL_MNEMONIC (FRSQRTA_S, FRSQRTA_S, "frsqrta.s"), |
| 27666 | + NORMAL_MNEMONIC(LDA_W, LDA_W, "lda.w"), |
| 27667 | + NORMAL_MNEMONIC(CALL, CALL, "call"), |
| 27668 | + NORMAL_MNEMONIC(PICOSVMAC, PICOSVMAC0, "picosvmac"), |
| 27669 | + NORMAL_MNEMONIC(PICOSVMUL, PICOSVMUL0, "picosvmul"), |
| 27670 | + NORMAL_MNEMONIC(PICOVMAC, PICOVMAC0, "picovmac"), |
| 27671 | + NORMAL_MNEMONIC(PICOVMUL, PICOVMUL0, "picovmul"), |
| 27672 | + NORMAL_MNEMONIC(PICOLD_D, PICOLD_D2, "picold.d"), |
| 27673 | + NORMAL_MNEMONIC(PICOLD_W, PICOLD_W2, "picold.w"), |
| 27674 | + NORMAL_MNEMONIC(PICOLDM_D, PICOLDM_D, "picoldm.d"), |
| 27675 | + NORMAL_MNEMONIC(PICOLDM_W, PICOLDM_W, "picoldm.w"), |
| 27676 | + NORMAL_MNEMONIC(PICOMV_D, PICOMV_D1, "picomv.d"), |
| 27677 | + NORMAL_MNEMONIC(PICOMV_W, PICOMV_W1, "picomv.w"), |
| 27678 | + NORMAL_MNEMONIC(PICOST_D, PICOST_D2, "picost.d"), |
| 27679 | + NORMAL_MNEMONIC(PICOST_W, PICOST_W2, "picost.w"), |
| 27680 | + NORMAL_MNEMONIC(PICOSTM_D, PICOSTM_D, "picostm.d"), |
| 27681 | + NORMAL_MNEMONIC(PICOSTM_W, PICOSTM_W, "picostm.w"), |
| 27682 | + NORMAL_MNEMONIC(RSUBEQ, RSUBEQ, "rsubeq"), |
| 27683 | + NORMAL_MNEMONIC(RSUBNE, RSUBNE, "rsubne"), |
| 27684 | + NORMAL_MNEMONIC(RSUBCC, RSUBCC, "rsubcc"), |
| 27685 | + NORMAL_MNEMONIC(RSUBCS, RSUBCS, "rsubcs"), |
| 27686 | + NORMAL_MNEMONIC(RSUBGE, RSUBGE, "rsubge"), |
| 27687 | + NORMAL_MNEMONIC(RSUBLT, RSUBLT, "rsublt"), |
| 27688 | + NORMAL_MNEMONIC(RSUBMI, RSUBMI, "rsubmi"), |
| 27689 | + NORMAL_MNEMONIC(RSUBPL, RSUBPL, "rsubpl"), |
| 27690 | + NORMAL_MNEMONIC(RSUBLS, RSUBLS, "rsubls"), |
| 27691 | + NORMAL_MNEMONIC(RSUBGT, RSUBGT, "rsubgt"), |
| 27692 | + NORMAL_MNEMONIC(RSUBLE, RSUBLE, "rsuble"), |
| 27693 | + NORMAL_MNEMONIC(RSUBHI, RSUBHI, "rsubhi"), |
| 27694 | + NORMAL_MNEMONIC(RSUBVS, RSUBVS, "rsubvs"), |
| 27695 | + NORMAL_MNEMONIC(RSUBVC, RSUBVC, "rsubvc"), |
| 27696 | + NORMAL_MNEMONIC(RSUBQS, RSUBQS, "rsubqs"), |
| 27697 | + NORMAL_MNEMONIC(RSUBAL, RSUBAL, "rsubal"), |
| 27698 | + NORMAL_MNEMONIC(RSUBHS, RSUBHS, "rsubhs"), |
| 27699 | + NORMAL_MNEMONIC(RSUBLO, RSUBLO, "rsublo"), |
| 27700 | + NORMAL_MNEMONIC(ADDEQ, ADDEQ, "addeq"), |
| 27701 | + NORMAL_MNEMONIC(ADDNE, ADDNE, "addne"), |
| 27702 | + NORMAL_MNEMONIC(ADDCC, ADDCC, "addcc"), |
| 27703 | + NORMAL_MNEMONIC(ADDCS, ADDCS, "addcs"), |
| 27704 | + NORMAL_MNEMONIC(ADDGE, ADDGE, "addge"), |
| 27705 | + NORMAL_MNEMONIC(ADDLT, ADDLT, "addlt"), |
| 27706 | + NORMAL_MNEMONIC(ADDMI, ADDMI, "addmi"), |
| 27707 | + NORMAL_MNEMONIC(ADDPL, ADDPL, "addpl"), |
| 27708 | + NORMAL_MNEMONIC(ADDLS, ADDLS, "addls"), |
| 27709 | + NORMAL_MNEMONIC(ADDGT, ADDGT, "addgt"), |
| 27710 | + NORMAL_MNEMONIC(ADDLE, ADDLE, "addle"), |
| 27711 | + NORMAL_MNEMONIC(ADDHI, ADDHI, "addhi"), |
| 27712 | + NORMAL_MNEMONIC(ADDVS, ADDVS, "addvs"), |
| 27713 | + NORMAL_MNEMONIC(ADDVC, ADDVC, "addvc"), |
| 27714 | + NORMAL_MNEMONIC(ADDQS, ADDQS, "addqs"), |
| 27715 | + NORMAL_MNEMONIC(ADDAL, ADDAL, "addal"), |
| 27716 | + NORMAL_MNEMONIC(ADDHS, ADDHS, "addhs"), |
| 27717 | + NORMAL_MNEMONIC(ADDLO, ADDLO, "addlo"), |
| 27718 | + NORMAL_MNEMONIC(ANDEQ, ANDEQ, "andeq"), |
| 27719 | + NORMAL_MNEMONIC(ANDNE, ANDNE, "andne"), |
| 27720 | + NORMAL_MNEMONIC(ANDCC, ANDCC, "andcc"), |
| 27721 | + NORMAL_MNEMONIC(ANDCS, ANDCS, "andcs"), |
| 27722 | + NORMAL_MNEMONIC(ANDGE, ANDGE, "andge"), |
| 27723 | + NORMAL_MNEMONIC(ANDLT, ANDLT, "andlt"), |
| 27724 | + NORMAL_MNEMONIC(ANDMI, ANDMI, "andmi"), |
| 27725 | + NORMAL_MNEMONIC(ANDPL, ANDPL, "andpl"), |
| 27726 | + NORMAL_MNEMONIC(ANDLS, ANDLS, "andls"), |
| 27727 | + NORMAL_MNEMONIC(ANDGT, ANDGT, "andgt"), |
| 27728 | + NORMAL_MNEMONIC(ANDLE, ANDLE, "andle"), |
| 27729 | + NORMAL_MNEMONIC(ANDHI, ANDHI, "andhi"), |
| 27730 | + NORMAL_MNEMONIC(ANDVS, ANDVS, "andvs"), |
| 27731 | + NORMAL_MNEMONIC(ANDVC, ANDVC, "andvc"), |
| 27732 | + NORMAL_MNEMONIC(ANDQS, ANDQS, "andqs"), |
| 27733 | + NORMAL_MNEMONIC(ANDAL, ANDAL, "andal"), |
| 27734 | + NORMAL_MNEMONIC(ANDHS, ANDHS, "andhs"), |
| 27735 | + NORMAL_MNEMONIC(ANDLO, ANDLO, "andlo"), |
| 27736 | + NORMAL_MNEMONIC(OREQ, OREQ, "oreq"), |
| 27737 | + NORMAL_MNEMONIC(ORNE, ORNE, "orne"), |
| 27738 | + NORMAL_MNEMONIC(ORCC, ORCC, "orcc"), |
| 27739 | + NORMAL_MNEMONIC(ORCS, ORCS, "orcs"), |
| 27740 | + NORMAL_MNEMONIC(ORGE, ORGE, "orge"), |
| 27741 | + NORMAL_MNEMONIC(ORLT, ORLT, "orlt"), |
| 27742 | + NORMAL_MNEMONIC(ORMI, ORMI, "ormi"), |
| 27743 | + NORMAL_MNEMONIC(ORPL, ORPL, "orpl"), |
| 27744 | + NORMAL_MNEMONIC(ORLS, ORLS, "orls"), |
| 27745 | + NORMAL_MNEMONIC(ORGT, ORGT, "orgt"), |
| 27746 | + NORMAL_MNEMONIC(ORLE, ORLE, "orle"), |
| 27747 | + NORMAL_MNEMONIC(ORHI, ORHI, "orhi"), |
| 27748 | + NORMAL_MNEMONIC(ORVS, ORVS, "orvs"), |
| 27749 | + NORMAL_MNEMONIC(ORVC, ORVC, "orvc"), |
| 27750 | + NORMAL_MNEMONIC(ORQS, ORQS, "orqs"), |
| 27751 | + NORMAL_MNEMONIC(ORAL, ORAL, "oral"), |
| 27752 | + NORMAL_MNEMONIC(ORHS, ORHS, "orhs"), |
| 27753 | + NORMAL_MNEMONIC(ORLO, ORLO, "orlo"), |
| 27754 | + NORMAL_MNEMONIC(EOREQ, EOREQ, "eoreq"), |
| 27755 | + NORMAL_MNEMONIC(EORNE, EORNE, "eorne"), |
| 27756 | + NORMAL_MNEMONIC(EORCC, EORCC, "eorcc"), |
| 27757 | + NORMAL_MNEMONIC(EORCS, EORCS, "eorcs"), |
| 27758 | + NORMAL_MNEMONIC(EORGE, EORGE, "eorge"), |
| 27759 | + NORMAL_MNEMONIC(EORLT, EORLT, "eorlt"), |
| 27760 | + NORMAL_MNEMONIC(EORMI, EORMI, "eormi"), |
| 27761 | + NORMAL_MNEMONIC(EORPL, EORPL, "eorpl"), |
| 27762 | + NORMAL_MNEMONIC(EORLS, EORLS, "eorls"), |
| 27763 | + NORMAL_MNEMONIC(EORGT, EORGT, "eorgt"), |
| 27764 | + NORMAL_MNEMONIC(EORLE, EORLE, "eorle"), |
| 27765 | + NORMAL_MNEMONIC(EORHI, EORHI, "eorhi"), |
| 27766 | + NORMAL_MNEMONIC(EORVS, EORVS, "eorvs"), |
| 27767 | + NORMAL_MNEMONIC(EORVC, EORVC, "eorvc"), |
| 27768 | + NORMAL_MNEMONIC(EORQS, EORQS, "eorqs"), |
| 27769 | + NORMAL_MNEMONIC(EORAL, EORAL, "eoral"), |
| 27770 | + NORMAL_MNEMONIC(EORHS, EORHS, "eorhs"), |
| 27771 | + NORMAL_MNEMONIC(EORLO, EORLO, "eorlo"), |
| 27772 | + NORMAL_MNEMONIC(LD_WEQ, LD_WEQ, "ld.weq"), |
| 27773 | + NORMAL_MNEMONIC(LD_WNE, LD_WNE, "ld.wne"), |
| 27774 | + NORMAL_MNEMONIC(LD_WCC, LD_WCC, "ld.wcc"), |
| 27775 | + NORMAL_MNEMONIC(LD_WCS, LD_WCS, "ld.wcs"), |
| 27776 | + NORMAL_MNEMONIC(LD_WGE, LD_WGE, "ld.wge"), |
| 27777 | + NORMAL_MNEMONIC(LD_WLT, LD_WLT, "ld.wlt"), |
| 27778 | + NORMAL_MNEMONIC(LD_WMI, LD_WMI, "ld.wmi"), |
| 27779 | + NORMAL_MNEMONIC(LD_WPL, LD_WPL, "ld.wpl"), |
| 27780 | + NORMAL_MNEMONIC(LD_WLS, LD_WLS, "ld.wls"), |
| 27781 | + NORMAL_MNEMONIC(LD_WGT, LD_WGT, "ld.wgt"), |
| 27782 | + NORMAL_MNEMONIC(LD_WLE, LD_WLE, "ld.wle"), |
| 27783 | + NORMAL_MNEMONIC(LD_WHI, LD_WHI, "ld.whi"), |
| 27784 | + NORMAL_MNEMONIC(LD_WVS, LD_WVS, "ld.wvs"), |
| 27785 | + NORMAL_MNEMONIC(LD_WVC, LD_WVC, "ld.wvc"), |
| 27786 | + NORMAL_MNEMONIC(LD_WQS, LD_WQS, "ld.wqs"), |
| 27787 | + NORMAL_MNEMONIC(LD_WAL, LD_WAL, "ld.wal"), |
| 27788 | + NORMAL_MNEMONIC(LD_WHS, LD_WHS, "ld.whs"), |
| 27789 | + NORMAL_MNEMONIC(LD_WLO, LD_WLO, "ld.wlo"), |
| 27790 | + NORMAL_MNEMONIC(LD_SHEQ, LD_SHEQ, "ld.sheq"), |
| 27791 | + NORMAL_MNEMONIC(LD_SHNE, LD_SHNE, "ld.shne"), |
| 27792 | + NORMAL_MNEMONIC(LD_SHCC, LD_SHCC, "ld.shcc"), |
| 27793 | + NORMAL_MNEMONIC(LD_SHCS, LD_SHCS, "ld.shcs"), |
| 27794 | + NORMAL_MNEMONIC(LD_SHGE, LD_SHGE, "ld.shge"), |
| 27795 | + NORMAL_MNEMONIC(LD_SHLT, LD_SHLT, "ld.shlt"), |
| 27796 | + NORMAL_MNEMONIC(LD_SHMI, LD_SHMI, "ld.shmi"), |
| 27797 | + NORMAL_MNEMONIC(LD_SHPL, LD_SHPL, "ld.shpl"), |
| 27798 | + NORMAL_MNEMONIC(LD_SHLS, LD_SHLS, "ld.shls"), |
| 27799 | + NORMAL_MNEMONIC(LD_SHGT, LD_SHGT, "ld.shgt"), |
| 27800 | + NORMAL_MNEMONIC(LD_SHLE, LD_SHLE, "ld.shle"), |
| 27801 | + NORMAL_MNEMONIC(LD_SHHI, LD_SHHI, "ld.shhi"), |
| 27802 | + NORMAL_MNEMONIC(LD_SHVS, LD_SHVS, "ld.shvs"), |
| 27803 | + NORMAL_MNEMONIC(LD_SHVC, LD_SHVC, "ld.shvc"), |
| 27804 | + NORMAL_MNEMONIC(LD_SHQS, LD_SHQS, "ld.shqs"), |
| 27805 | + NORMAL_MNEMONIC(LD_SHAL, LD_SHAL, "ld.shal"), |
| 27806 | + NORMAL_MNEMONIC(LD_SHHS, LD_SHHS, "ld.shhs"), |
| 27807 | + NORMAL_MNEMONIC(LD_SHLO, LD_SHLO, "ld.shlo"), |
| 27808 | + NORMAL_MNEMONIC(LD_UHEQ, LD_UHEQ, "ld.uheq"), |
| 27809 | + NORMAL_MNEMONIC(LD_UHNE, LD_UHNE, "ld.uhne"), |
| 27810 | + NORMAL_MNEMONIC(LD_UHCC, LD_UHCC, "ld.uhcc"), |
| 27811 | + NORMAL_MNEMONIC(LD_UHCS, LD_UHCS, "ld.uhcs"), |
| 27812 | + NORMAL_MNEMONIC(LD_UHGE, LD_UHGE, "ld.uhge"), |
| 27813 | + NORMAL_MNEMONIC(LD_UHLT, LD_UHLT, "ld.uhlt"), |
| 27814 | + NORMAL_MNEMONIC(LD_UHMI, LD_UHMI, "ld.uhmi"), |
| 27815 | + NORMAL_MNEMONIC(LD_UHPL, LD_UHPL, "ld.uhpl"), |
| 27816 | + NORMAL_MNEMONIC(LD_UHLS, LD_UHLS, "ld.uhls"), |
| 27817 | + NORMAL_MNEMONIC(LD_UHGT, LD_UHGT, "ld.uhgt"), |
| 27818 | + NORMAL_MNEMONIC(LD_UHLE, LD_UHLE, "ld.uhle"), |
| 27819 | + NORMAL_MNEMONIC(LD_UHHI, LD_UHHI, "ld.uhhi"), |
| 27820 | + NORMAL_MNEMONIC(LD_UHVS, LD_UHVS, "ld.uhvs"), |
| 27821 | + NORMAL_MNEMONIC(LD_UHVC, LD_UHVC, "ld.uhvc"), |
| 27822 | + NORMAL_MNEMONIC(LD_UHQS, LD_UHQS, "ld.uhqs"), |
| 27823 | + NORMAL_MNEMONIC(LD_UHAL, LD_UHAL, "ld.uhal"), |
| 27824 | + NORMAL_MNEMONIC(LD_UHHS, LD_UHHS, "ld.uhhs"), |
| 27825 | + NORMAL_MNEMONIC(LD_UHLO, LD_UHLO, "ld.uhlo"), |
| 27826 | + NORMAL_MNEMONIC(LD_SBEQ, LD_SBEQ, "ld.sbeq"), |
| 27827 | + NORMAL_MNEMONIC(LD_SBNE, LD_SBNE, "ld.sbne"), |
| 27828 | + NORMAL_MNEMONIC(LD_SBCC, LD_SBCC, "ld.sbcc"), |
| 27829 | + NORMAL_MNEMONIC(LD_SBCS, LD_SBCS, "ld.sbcs"), |
| 27830 | + NORMAL_MNEMONIC(LD_SBGE, LD_SBGE, "ld.sbge"), |
| 27831 | + NORMAL_MNEMONIC(LD_SBLT, LD_SBLT, "ld.sblt"), |
| 27832 | + NORMAL_MNEMONIC(LD_SBMI, LD_SBMI, "ld.sbmi"), |
| 27833 | + NORMAL_MNEMONIC(LD_SBPL, LD_SBPL, "ld.sbpl"), |
| 27834 | + NORMAL_MNEMONIC(LD_SBLS, LD_SBLS, "ld.sbls"), |
| 27835 | + NORMAL_MNEMONIC(LD_SBGT, LD_SBGT, "ld.sbgt"), |
| 27836 | + NORMAL_MNEMONIC(LD_SBLE, LD_SBLE, "ld.sble"), |
| 27837 | + NORMAL_MNEMONIC(LD_SBHI, LD_SBHI, "ld.sbhi"), |
| 27838 | + NORMAL_MNEMONIC(LD_SBVS, LD_SBVS, "ld.sbvs"), |
| 27839 | + NORMAL_MNEMONIC(LD_SBVC, LD_SBVC, "ld.sbvc"), |
| 27840 | + NORMAL_MNEMONIC(LD_SBQS, LD_SBQS, "ld.sbqs"), |
| 27841 | + NORMAL_MNEMONIC(LD_SBAL, LD_SBAL, "ld.sbal"), |
| 27842 | + NORMAL_MNEMONIC(LD_SBHS, LD_SBHS, "ld.sbhs"), |
| 27843 | + NORMAL_MNEMONIC(LD_SBLO, LD_SBLO, "ld.sblo"), |
| 27844 | + NORMAL_MNEMONIC(LD_UBEQ, LD_UBEQ, "ld.ubeq"), |
| 27845 | + NORMAL_MNEMONIC(LD_UBNE, LD_UBNE, "ld.ubne"), |
| 27846 | + NORMAL_MNEMONIC(LD_UBCC, LD_UBCC, "ld.ubcc"), |
| 27847 | + NORMAL_MNEMONIC(LD_UBCS, LD_UBCS, "ld.ubcs"), |
| 27848 | + NORMAL_MNEMONIC(LD_UBGE, LD_UBGE, "ld.ubge"), |
| 27849 | + NORMAL_MNEMONIC(LD_UBLT, LD_UBLT, "ld.ublt"), |
| 27850 | + NORMAL_MNEMONIC(LD_UBMI, LD_UBMI, "ld.ubmi"), |
| 27851 | + NORMAL_MNEMONIC(LD_UBPL, LD_UBPL, "ld.ubpl"), |
| 27852 | + NORMAL_MNEMONIC(LD_UBLS, LD_UBLS, "ld.ubls"), |
| 27853 | + NORMAL_MNEMONIC(LD_UBGT, LD_UBGT, "ld.ubgt"), |
| 27854 | + NORMAL_MNEMONIC(LD_UBLE, LD_UBLE, "ld.uble"), |
| 27855 | + NORMAL_MNEMONIC(LD_UBHI, LD_UBHI, "ld.ubhi"), |
| 27856 | + NORMAL_MNEMONIC(LD_UBVS, LD_UBVS, "ld.ubvs"), |
| 27857 | + NORMAL_MNEMONIC(LD_UBVC, LD_UBVC, "ld.ubvc"), |
| 27858 | + NORMAL_MNEMONIC(LD_UBQS, LD_UBQS, "ld.ubqs"), |
| 27859 | + NORMAL_MNEMONIC(LD_UBAL, LD_UBAL, "ld.ubal"), |
| 27860 | + NORMAL_MNEMONIC(LD_UBHS, LD_UBHS, "ld.ubhs"), |
| 27861 | + NORMAL_MNEMONIC(LD_UBLO, LD_UBLO, "ld.ublo"), |
| 27862 | + NORMAL_MNEMONIC(ST_WEQ, ST_WEQ, "st.weq"), |
| 27863 | + NORMAL_MNEMONIC(ST_WNE, ST_WNE, "st.wne"), |
| 27864 | + NORMAL_MNEMONIC(ST_WCC, ST_WCC, "st.wcc"), |
| 27865 | + NORMAL_MNEMONIC(ST_WCS, ST_WCS, "st.wcs"), |
| 27866 | + NORMAL_MNEMONIC(ST_WGE, ST_WGE, "st.wge"), |
| 27867 | + NORMAL_MNEMONIC(ST_WLT, ST_WLT, "st.wlt"), |
| 27868 | + NORMAL_MNEMONIC(ST_WMI, ST_WMI, "st.wmi"), |
| 27869 | + NORMAL_MNEMONIC(ST_WPL, ST_WPL, "st.wpl"), |
| 27870 | + NORMAL_MNEMONIC(ST_WLS, ST_WLS, "st.wls"), |
| 27871 | + NORMAL_MNEMONIC(ST_WGT, ST_WGT, "st.wgt"), |
| 27872 | + NORMAL_MNEMONIC(ST_WLE, ST_WLE, "st.wle"), |
| 27873 | + NORMAL_MNEMONIC(ST_WHI, ST_WHI, "st.whi"), |
| 27874 | + NORMAL_MNEMONIC(ST_WVS, ST_WVS, "st.wvs"), |
| 27875 | + NORMAL_MNEMONIC(ST_WVC, ST_WVC, "st.wvc"), |
| 27876 | + NORMAL_MNEMONIC(ST_WQS, ST_WQS, "st.wqs"), |
| 27877 | + NORMAL_MNEMONIC(ST_WAL, ST_WAL, "st.wal"), |
| 27878 | + NORMAL_MNEMONIC(ST_WHS, ST_WHS, "st.whs"), |
| 27879 | + NORMAL_MNEMONIC(ST_WLO, ST_WLO, "st.wlo"), |
| 27880 | + NORMAL_MNEMONIC(ST_HEQ, ST_HEQ, "st.heq"), |
| 27881 | + NORMAL_MNEMONIC(ST_HNE, ST_HNE, "st.hne"), |
| 27882 | + NORMAL_MNEMONIC(ST_HCC, ST_HCC, "st.hcc"), |
| 27883 | + NORMAL_MNEMONIC(ST_HCS, ST_HCS, "st.hcs"), |
| 27884 | + NORMAL_MNEMONIC(ST_HGE, ST_HGE, "st.hge"), |
| 27885 | + NORMAL_MNEMONIC(ST_HLT, ST_HLT, "st.hlt"), |
| 27886 | + NORMAL_MNEMONIC(ST_HMI, ST_HMI, "st.hmi"), |
| 27887 | + NORMAL_MNEMONIC(ST_HPL, ST_HPL, "st.hpl"), |
| 27888 | + NORMAL_MNEMONIC(ST_HLS, ST_HLS, "st.hls"), |
| 27889 | + NORMAL_MNEMONIC(ST_HGT, ST_HGT, "st.hgt"), |
| 27890 | + NORMAL_MNEMONIC(ST_HLE, ST_HLE, "st.hle"), |
| 27891 | + NORMAL_MNEMONIC(ST_HHI, ST_HHI, "st.hhi"), |
| 27892 | + NORMAL_MNEMONIC(ST_HVS, ST_HVS, "st.hvs"), |
| 27893 | + NORMAL_MNEMONIC(ST_HVC, ST_HVC, "st.hvc"), |
| 27894 | + NORMAL_MNEMONIC(ST_HQS, ST_HQS, "st.hqs"), |
| 27895 | + NORMAL_MNEMONIC(ST_HAL, ST_HAL, "st.hal"), |
| 27896 | + NORMAL_MNEMONIC(ST_HHS, ST_HHS, "st.hhs"), |
| 27897 | + NORMAL_MNEMONIC(ST_HLO, ST_HLO, "st.hlo"), |
| 27898 | + NORMAL_MNEMONIC(ST_BEQ, ST_BEQ, "st.beq"), |
| 27899 | + NORMAL_MNEMONIC(ST_BNE, ST_BNE, "st.bne"), |
| 27900 | + NORMAL_MNEMONIC(ST_BCC, ST_BCC, "st.bcc"), |
| 27901 | + NORMAL_MNEMONIC(ST_BCS, ST_BCS, "st.bcs"), |
| 27902 | + NORMAL_MNEMONIC(ST_BGE, ST_BGE, "st.bge"), |
| 27903 | + NORMAL_MNEMONIC(ST_BLT, ST_BLT, "st.blt"), |
| 27904 | + NORMAL_MNEMONIC(ST_BMI, ST_BMI, "st.bmi"), |
| 27905 | + NORMAL_MNEMONIC(ST_BPL, ST_BPL, "st.bpl"), |
| 27906 | + NORMAL_MNEMONIC(ST_BLS, ST_BLS, "st.bls"), |
| 27907 | + NORMAL_MNEMONIC(ST_BGT, ST_BGT, "st.bgt"), |
| 27908 | + NORMAL_MNEMONIC(ST_BLE, ST_BLE, "st.ble"), |
| 27909 | + NORMAL_MNEMONIC(ST_BHI, ST_BHI, "st.bhi"), |
| 27910 | + NORMAL_MNEMONIC(ST_BVS, ST_BVS, "st.bvs"), |
| 27911 | + NORMAL_MNEMONIC(ST_BVC, ST_BVC, "st.bvc"), |
| 27912 | + NORMAL_MNEMONIC(ST_BQS, ST_BQS, "st.bqs"), |
| 27913 | + NORMAL_MNEMONIC(ST_BAL, ST_BAL, "st.bal"), |
| 27914 | + NORMAL_MNEMONIC(ST_BHS, ST_BHS, "st.bhs"), |
| 27915 | + NORMAL_MNEMONIC(ST_BLO, ST_BLO, "st.blo"), |
| 27916 | + NORMAL_MNEMONIC(MOVH, MOVH, "movh"), |
| 27917 | + |
| 27918 | + }; |
| 27919 | +#undef NORMAL_MNEMONIC |
| 27920 | +#undef ALIAS_MNEMONIC |
| 27921 | +#undef FP_MNEMONIC |
| 27922 | --- /dev/null |
| 27923 | +++ b/opcodes/avr32-opc.h |
| 27924 | @@ -0,0 +1,2341 @@ |
| 27925 | +/* Opcode tables for AVR32. |
| 27926 | + Copyright 2005,2006,2007,2008,2009 Atmel Corporation. |
| 27927 | + |
| 27928 | + Written by Haavard Skinnemoen, Atmel Norway, <hskinnemoen@atmel.com> |
| 27929 | + |
| 27930 | + This file is part of libopcodes. |
| 27931 | + |
| 27932 | + This program is free software; you can redistribute it and/or |
| 27933 | + modify it under the terms of the GNU General Public License as |
| 27934 | + published by the Free Software Foundation; either version 2 of the |
| 27935 | + License, or (at your option) any later version. |
| 27936 | + |
| 27937 | + This program is distributed in the hope that it will be useful, but |
| 27938 | + WITHOUT ANY WARRANTY; without even the implied warranty of |
| 27939 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 27940 | + General Public License for more details. |
| 27941 | + |
| 27942 | + You should have received a copy of the GNU General Public License |
| 27943 | + along with this program; if not, write to the Free Software |
| 27944 | + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA |
| 27945 | + 02111-1307, USA. */ |
| 27946 | + |
| 27947 | +#include "bfd.h" |
| 27948 | + |
| 27949 | +#define AVR32_MAX_OPERANDS 8 |
| 27950 | +#define AVR32_MAX_FIELDS 8 |
| 27951 | + |
| 27952 | +#define AVR32_V1 (1 << 1) |
| 27953 | +#define AVR32_SIMD (1 << 2) |
| 27954 | +#define AVR32_DSP (1 << 3) |
| 27955 | +#define AVR32_RMW (1 << 4) |
| 27956 | +#define AVR32_V2 (1 << 5) |
| 27957 | +#define AVR32_V3 (1 << 6) |
| 27958 | +#define AVR32_V3FP (1 << 7) |
| 27959 | +#define AVR32_PICO (1 << 17) |
| 27960 | + |
| 27961 | +/* Registers we commonly refer to */ |
| 27962 | +#define AVR32_REG_R12 12 |
| 27963 | +#define AVR32_REG_SP 13 |
| 27964 | +#define AVR32_REG_LR 14 |
| 27965 | +#define AVR32_REG_PC 15 |
| 27966 | + |
| 27967 | +struct avr32_ifield |
| 27968 | +{ |
| 27969 | + int id; |
| 27970 | + unsigned short bitsize; |
| 27971 | + unsigned short shift; |
| 27972 | + unsigned long mask; |
| 27973 | + |
| 27974 | + /* If the value doesn't fit, it will be truncated with no warning */ |
| 27975 | + void (*insert)(const struct avr32_ifield *, void *, unsigned long); |
| 27976 | + void (*extract)(const struct avr32_ifield *, void *, unsigned long *); |
| 27977 | +}; |
| 27978 | + |
| 27979 | +struct avr32_opcode |
| 27980 | +{ |
| 27981 | + int id; |
| 27982 | + int size; |
| 27983 | + unsigned long value; |
| 27984 | + unsigned long mask; |
| 27985 | + const struct avr32_syntax *syntax; |
| 27986 | + bfd_reloc_code_real_type reloc_type; |
| 27987 | + unsigned int nr_fields; |
| 27988 | + /* if relaxable, which field is variable, otherwise -1 */ |
| 27989 | + int var_field; |
| 27990 | + const struct avr32_ifield *fields[AVR32_MAX_FIELDS]; |
| 27991 | +}; |
| 27992 | + |
| 27993 | +struct avr32_alias |
| 27994 | +{ |
| 27995 | + int id; |
| 27996 | + const struct avr32_opcode *opc; |
| 27997 | + struct { |
| 27998 | + int is_opindex; |
| 27999 | + unsigned long value; |
| 28000 | + } operand_map[AVR32_MAX_OPERANDS]; |
| 28001 | +}; |
| 28002 | + |
| 28003 | +struct avr32_syntax |
| 28004 | +{ |
| 28005 | + int id; |
| 28006 | + unsigned long isa_flags; |
| 28007 | + const struct avr32_mnemonic *mnemonic; |
| 28008 | + int type; |
| 28009 | + union { |
| 28010 | + const struct avr32_opcode *opc; |
| 28011 | + const struct avr32_alias *alias; |
| 28012 | + } u; |
| 28013 | + const struct avr32_syntax *next; |
| 28014 | + /* negative means "vararg" */ |
| 28015 | + int nr_operands; |
| 28016 | + int operand[AVR32_MAX_OPERANDS]; |
| 28017 | +}; |
| 28018 | + |
| 28019 | +#if 0 |
| 28020 | +#define AVR32_ALIAS_MAKE_CONST(val) ((val) | 0x80000000UL) |
| 28021 | +#define AVR32_ALIAS_IS_CONST(mapval) (((mapval) & 0x80000000UL) != 0) |
| 28022 | +#define AVR32_ALIAS_GET_CONST(mapval) ((mapval) & ~0x80000000UL) |
| 28023 | +#endif |
| 28024 | + |
| 28025 | +struct avr32_mnemonic |
| 28026 | +{ |
| 28027 | + int id; |
| 28028 | + const char *name; |
| 28029 | + const struct avr32_syntax *syntax; |
| 28030 | +}; |
| 28031 | + |
| 28032 | +extern const struct avr32_ifield avr32_ifield_table[]; |
| 28033 | +extern struct avr32_opcode avr32_opc_table[]; |
| 28034 | +extern const struct avr32_syntax avr32_syntax_table[]; |
| 28035 | +extern const struct avr32_alias avr32_alias_table[]; |
| 28036 | +extern const struct avr32_mnemonic avr32_mnemonic_table[]; |
| 28037 | + |
| 28038 | +extern void avr32_insert_simple(const struct avr32_ifield *field, |
| 28039 | + void *buf, unsigned long value); |
| 28040 | +extern void avr32_insert_bit5c(const struct avr32_ifield *field, |
| 28041 | + void *buf, unsigned long value); |
| 28042 | +extern void avr32_insert_k10(const struct avr32_ifield *field, |
| 28043 | + void *buf, unsigned long value); |
| 28044 | +extern void avr32_insert_k21(const struct avr32_ifield *field, |
| 28045 | + void *buf, unsigned long value); |
| 28046 | +extern void avr32_insert_cpop(const struct avr32_ifield *field, |
| 28047 | + void *buf, unsigned long value); |
| 28048 | +extern void avr32_insert_k12cp(const struct avr32_ifield *field, |
| 28049 | + void *buf, unsigned long value); |
| 28050 | + |
| 28051 | +extern void avr32_extract_simple(const struct avr32_ifield *field, |
| 28052 | + void *buf, unsigned long *value); |
| 28053 | +extern void avr32_extract_bit5c(const struct avr32_ifield *field, |
| 28054 | + void *buf, unsigned long *value); |
| 28055 | +extern void avr32_extract_k10(const struct avr32_ifield *field, |
| 28056 | + void *buf, unsigned long *value); |
| 28057 | +extern void avr32_extract_k21(const struct avr32_ifield *field, |
| 28058 | + void *buf, unsigned long *value); |
| 28059 | +extern void avr32_extract_cpop(const struct avr32_ifield *field, |
| 28060 | + void *buf, unsigned long *value); |
| 28061 | +extern void avr32_extract_k12cp(const struct avr32_ifield *field, |
| 28062 | + void *buf, unsigned long *value); |
| 28063 | + |
| 28064 | +enum avr32_operand_type |
| 28065 | +{ |
| 28066 | + AVR32_OPERAND_INTREG, /* just a register */ |
| 28067 | + AVR32_OPERAND_INTREG_PREDEC, /* register with pre-decrement */ |
| 28068 | + AVR32_OPERAND_INTREG_POSTINC, /* register with post-increment */ |
| 28069 | + AVR32_OPERAND_INTREG_LSL, /* register with left shift */ |
| 28070 | + AVR32_OPERAND_INTREG_LSR, /* register with right shift */ |
| 28071 | + AVR32_OPERAND_INTREG_BSEL, /* register with byte selector */ |
| 28072 | + AVR32_OPERAND_INTREG_HSEL, /* register with halfword selector */ |
| 28073 | + AVR32_OPERAND_INTREG_SDISP, /* Rp[signed disp] */ |
| 28074 | + AVR32_OPERAND_INTREG_SDISP_H, /* Rp[signed hword-aligned disp] */ |
| 28075 | + AVR32_OPERAND_INTREG_SDISP_W, /* Rp[signed word-aligned disp] */ |
| 28076 | + AVR32_OPERAND_INTREG_UDISP, /* Rp[unsigned disp] */ |
| 28077 | + AVR32_OPERAND_INTREG_UDISP_H, /* Rp[unsigned hword-aligned disp] */ |
| 28078 | + AVR32_OPERAND_INTREG_UDISP_W, /* Rp[unsigned word-aligned disp] */ |
| 28079 | + AVR32_OPERAND_INTREG_INDEX, /* Rp[Ri << sa] */ |
| 28080 | + AVR32_OPERAND_INTREG_XINDEX, /* Rp[Ri:bytesel << 2] */ |
| 28081 | + AVR32_OPERAND_DWREG, /* Even-numbered register */ |
| 28082 | + AVR32_OPERAND_PC_UDISP_W, /* PC[unsigned word-aligned disp] or label */ |
| 28083 | + AVR32_OPERAND_SP, /* Just SP */ |
| 28084 | + AVR32_OPERAND_SP_UDISP_W, /* SP[unsigned word-aligned disp] */ |
| 28085 | + AVR32_OPERAND_CPNO, |
| 28086 | + AVR32_OPERAND_CPREG, |
| 28087 | + AVR32_OPERAND_CPREG_D, |
| 28088 | + AVR32_OPERAND_UNSIGNED_CONST, |
| 28089 | + AVR32_OPERAND_UNSIGNED_CONST_W, |
| 28090 | + AVR32_OPERAND_SIGNED_CONST, |
| 28091 | + AVR32_OPERAND_SIGNED_CONST_W, |
| 28092 | + AVR32_OPERAND_JMPLABEL, |
| 28093 | + AVR32_OPERAND_UNSIGNED_NUMBER, |
| 28094 | + AVR32_OPERAND_UNSIGNED_NUMBER_W, |
| 28095 | + AVR32_OPERAND_REGLIST8, |
| 28096 | + AVR32_OPERAND_REGLIST9, |
| 28097 | + AVR32_OPERAND_REGLIST16, |
| 28098 | + AVR32_OPERAND_REGLIST_LDM, |
| 28099 | + AVR32_OPERAND_REGLIST_CP8, |
| 28100 | + AVR32_OPERAND_REGLIST_CPD8, |
| 28101 | + AVR32_OPERAND_RETVAL, |
| 28102 | + AVR32_OPERAND_MCALL, |
| 28103 | + AVR32_OPERAND_JOSPINC, |
| 28104 | + AVR32_OPERAND_COH, |
| 28105 | + AVR32_OPERAND_PICO_REG_W, |
| 28106 | + AVR32_OPERAND_PICO_REG_D, |
| 28107 | + AVR32_OPERAND_PICO_REGLIST_W, |
| 28108 | + AVR32_OPERAND_PICO_REGLIST_D, |
| 28109 | + AVR32_OPERAND_PICO_IN, |
| 28110 | + AVR32_OPERAND_PICO_OUT0, |
| 28111 | + AVR32_OPERAND_PICO_OUT1, |
| 28112 | + AVR32_OPERAND_PICO_OUT2, |
| 28113 | + AVR32_OPERAND_PICO_OUT3, |
| 28114 | + AVR32_OPERAND__END_ |
| 28115 | +}; |
| 28116 | +#define AVR32_OPERAND_UNKNOWN AVR32_OPERAND__END_ |
| 28117 | +#define AVR32_NR_OPERANDS AVR32_OPERAND__END_ |
| 28118 | + |
| 28119 | +enum avr32_ifield_type |
| 28120 | +{ |
| 28121 | + AVR32_IFIELD_RX, |
| 28122 | + AVR32_IFIELD_RY, |
| 28123 | + AVR32_IFIELD_COND4C, |
| 28124 | + AVR32_IFIELD_K8C, |
| 28125 | + AVR32_IFIELD_K7C, |
| 28126 | + AVR32_IFIELD_K5C, |
| 28127 | + AVR32_IFIELD_K3, |
| 28128 | + AVR32_IFIELD_RY_DW, |
| 28129 | + AVR32_IFIELD_COND4E, |
| 28130 | + AVR32_IFIELD_K8E, |
| 28131 | + AVR32_IFIELD_BIT5C, |
| 28132 | + AVR32_IFIELD_COND3, |
| 28133 | + AVR32_IFIELD_K10, |
| 28134 | + AVR32_IFIELD_POPM, |
| 28135 | + AVR32_IFIELD_K2, |
| 28136 | + AVR32_IFIELD_RD_E, |
| 28137 | + AVR32_IFIELD_RD_DW, |
| 28138 | + AVR32_IFIELD_X, |
| 28139 | + AVR32_IFIELD_Y, |
| 28140 | + AVR32_IFIELD_X2, |
| 28141 | + AVR32_IFIELD_Y2, |
| 28142 | + AVR32_IFIELD_K5E, |
| 28143 | + AVR32_IFIELD_PART2, |
| 28144 | + AVR32_IFIELD_PART1, |
| 28145 | + AVR32_IFIELD_K16, |
| 28146 | + AVR32_IFIELD_CACHEOP, |
| 28147 | + AVR32_IFIELD_K11, |
| 28148 | + AVR32_IFIELD_K21, |
| 28149 | + AVR32_IFIELD_CPOP, |
| 28150 | + AVR32_IFIELD_CPNO, |
| 28151 | + AVR32_IFIELD_CRD_RI, |
| 28152 | + AVR32_IFIELD_CRX, |
| 28153 | + AVR32_IFIELD_CRY, |
| 28154 | + AVR32_IFIELD_K7E, |
| 28155 | + AVR32_IFIELD_CRD_DW, |
| 28156 | + AVR32_IFIELD_PART1_K12, |
| 28157 | + AVR32_IFIELD_PART2_K12, |
| 28158 | + AVR32_IFIELD_K12, |
| 28159 | + AVR32_IFIELD_S5, |
| 28160 | + AVR32_IFIELD_K5E2, |
| 28161 | + AVR32_IFIELD_K4, |
| 28162 | + AVR32_IFIELD_COND4E2, |
| 28163 | + AVR32_IFIELD_K8E2, |
| 28164 | + AVR32_IFIELD_K6, |
| 28165 | + AVR32_IFIELD_MEM15, |
| 28166 | + AVR32_IFIELD_MEMB5, |
| 28167 | + AVR32_IFIELD_W, |
| 28168 | + AVR32_IFIELD_CM_HL, |
| 28169 | + AVR32_IFIELD_K12CP, |
| 28170 | + AVR32_IFIELD_K9E, |
| 28171 | + AVR32_IFIELD_FP_RX, |
| 28172 | + AVR32_IFIELD_FP_RY, |
| 28173 | + AVR32_IFIELD_FP_RD, |
| 28174 | + AVR32_IFIELD_FP_RA, |
| 28175 | + AVR32_IFIELD__END_, |
| 28176 | +}; |
| 28177 | +#define AVR32_NR_IFIELDS AVR32_IFIELD__END_ |
| 28178 | + |
| 28179 | +enum avr32_opc_type |
| 28180 | +{ |
| 28181 | + AVR32_OPC_ABS, |
| 28182 | + AVR32_OPC_ACALL, |
| 28183 | + AVR32_OPC_ACR, |
| 28184 | + AVR32_OPC_ADC, |
| 28185 | + AVR32_OPC_ADD1, |
| 28186 | + AVR32_OPC_ADD2, |
| 28187 | + AVR32_OPC_ADDABS, |
| 28188 | + AVR32_OPC_ADDHH_W, |
| 28189 | + AVR32_OPC_AND1, |
| 28190 | + AVR32_OPC_AND2, |
| 28191 | + AVR32_OPC_AND3, |
| 28192 | + AVR32_OPC_ANDH, |
| 28193 | + AVR32_OPC_ANDH_COH, |
| 28194 | + AVR32_OPC_ANDL, |
| 28195 | + AVR32_OPC_ANDL_COH, |
| 28196 | + AVR32_OPC_ANDN, |
| 28197 | + AVR32_OPC_ASR1, |
| 28198 | + AVR32_OPC_ASR3, |
| 28199 | + AVR32_OPC_ASR2, |
| 28200 | + AVR32_OPC_BLD, |
| 28201 | + AVR32_OPC_BREQ1, |
| 28202 | + AVR32_OPC_BRNE1, |
| 28203 | + AVR32_OPC_BRCC1, |
| 28204 | + AVR32_OPC_BRCS1, |
| 28205 | + AVR32_OPC_BRGE1, |
| 28206 | + AVR32_OPC_BRLT1, |
| 28207 | + AVR32_OPC_BRMI1, |
| 28208 | + AVR32_OPC_BRPL1, |
| 28209 | + AVR32_OPC_BREQ2, |
| 28210 | + AVR32_OPC_BRNE2, |
| 28211 | + AVR32_OPC_BRCC2, |
| 28212 | + AVR32_OPC_BRCS2, |
| 28213 | + AVR32_OPC_BRGE2, |
| 28214 | + AVR32_OPC_BRLT2, |
| 28215 | + AVR32_OPC_BRMI2, |
| 28216 | + AVR32_OPC_BRPL2, |
| 28217 | + AVR32_OPC_BRLS, |
| 28218 | + AVR32_OPC_BRGT, |
| 28219 | + AVR32_OPC_BRLE, |
| 28220 | + AVR32_OPC_BRHI, |
| 28221 | + AVR32_OPC_BRVS, |
| 28222 | + AVR32_OPC_BRVC, |
| 28223 | + AVR32_OPC_BRQS, |
| 28224 | + AVR32_OPC_BRAL, |
| 28225 | + AVR32_OPC_BREAKPOINT, |
| 28226 | + AVR32_OPC_BREV, |
| 28227 | + AVR32_OPC_BST, |
| 28228 | + AVR32_OPC_CACHE, |
| 28229 | + AVR32_OPC_CASTS_B, |
| 28230 | + AVR32_OPC_CASTS_H, |
| 28231 | + AVR32_OPC_CASTU_B, |
| 28232 | + AVR32_OPC_CASTU_H, |
| 28233 | + AVR32_OPC_CBR, |
| 28234 | + AVR32_OPC_CLZ, |
| 28235 | + AVR32_OPC_COM, |
| 28236 | + AVR32_OPC_COP, |
| 28237 | + AVR32_OPC_CP_B, |
| 28238 | + AVR32_OPC_CP_H, |
| 28239 | + AVR32_OPC_CP_W1, |
| 28240 | + AVR32_OPC_CP_W2, |
| 28241 | + AVR32_OPC_CP_W3, |
| 28242 | + AVR32_OPC_CPC1, |
| 28243 | + AVR32_OPC_CPC2, |
| 28244 | + AVR32_OPC_CSRF, |
| 28245 | + AVR32_OPC_CSRFCZ, |
| 28246 | + AVR32_OPC_DIVS, |
| 28247 | + AVR32_OPC_DIVU, |
| 28248 | + AVR32_OPC_EOR1, |
| 28249 | + AVR32_OPC_EOR2, |
| 28250 | + AVR32_OPC_EOR3, |
| 28251 | + AVR32_OPC_EORL, |
| 28252 | + AVR32_OPC_EORH, |
| 28253 | + AVR32_OPC_FRS, |
| 28254 | + AVR32_OPC_ICALL, |
| 28255 | + AVR32_OPC_INCJOSP, |
| 28256 | + AVR32_OPC_LD_D1, |
| 28257 | + AVR32_OPC_LD_D2, |
| 28258 | + AVR32_OPC_LD_D3, |
| 28259 | + AVR32_OPC_LD_D5, |
| 28260 | + AVR32_OPC_LD_D4, |
| 28261 | + AVR32_OPC_LD_SB2, |
| 28262 | + AVR32_OPC_LD_SB1, |
| 28263 | + AVR32_OPC_LD_UB1, |
| 28264 | + AVR32_OPC_LD_UB2, |
| 28265 | + AVR32_OPC_LD_UB5, |
| 28266 | + AVR32_OPC_LD_UB3, |
| 28267 | + AVR32_OPC_LD_UB4, |
| 28268 | + AVR32_OPC_LD_SH1, |
| 28269 | + AVR32_OPC_LD_SH2, |
| 28270 | + AVR32_OPC_LD_SH5, |
| 28271 | + AVR32_OPC_LD_SH3, |
| 28272 | + AVR32_OPC_LD_SH4, |
| 28273 | + AVR32_OPC_LD_UH1, |
| 28274 | + AVR32_OPC_LD_UH2, |
| 28275 | + AVR32_OPC_LD_UH5, |
| 28276 | + AVR32_OPC_LD_UH3, |
| 28277 | + AVR32_OPC_LD_UH4, |
| 28278 | + AVR32_OPC_LD_W1, |
| 28279 | + AVR32_OPC_LD_W2, |
| 28280 | + AVR32_OPC_LD_W5, |
| 28281 | + AVR32_OPC_LD_W6, |
| 28282 | + AVR32_OPC_LD_W3, |
| 28283 | + AVR32_OPC_LD_W4, |
| 28284 | + AVR32_OPC_LDC_D1, |
| 28285 | + AVR32_OPC_LDC_D2, |
| 28286 | + AVR32_OPC_LDC_D3, |
| 28287 | + AVR32_OPC_LDC_W1, |
| 28288 | + AVR32_OPC_LDC_W2, |
| 28289 | + AVR32_OPC_LDC_W3, |
| 28290 | + AVR32_OPC_LDC0_D, |
| 28291 | + AVR32_OPC_LDC0_W, |
| 28292 | + AVR32_OPC_LDCM_D, |
| 28293 | + AVR32_OPC_LDCM_D_PU, |
| 28294 | + AVR32_OPC_LDCM_W, |
| 28295 | + AVR32_OPC_LDCM_W_PU, |
| 28296 | + AVR32_OPC_LDDPC, |
| 28297 | + AVR32_OPC_LDDPC_EXT, |
| 28298 | + AVR32_OPC_LDDSP, |
| 28299 | + AVR32_OPC_LDINS_B, |
| 28300 | + AVR32_OPC_LDINS_H, |
| 28301 | + AVR32_OPC_LDM, |
| 28302 | + AVR32_OPC_LDMTS, |
| 28303 | + AVR32_OPC_LDMTS_PU, |
| 28304 | + AVR32_OPC_LDSWP_SH, |
| 28305 | + AVR32_OPC_LDSWP_UH, |
| 28306 | + AVR32_OPC_LDSWP_W, |
| 28307 | + AVR32_OPC_LSL1, |
| 28308 | + AVR32_OPC_LSL3, |
| 28309 | + AVR32_OPC_LSL2, |
| 28310 | + AVR32_OPC_LSR1, |
| 28311 | + AVR32_OPC_LSR3, |
| 28312 | + AVR32_OPC_LSR2, |
| 28313 | + AVR32_OPC_MAC, |
| 28314 | + AVR32_OPC_MACHH_D, |
| 28315 | + AVR32_OPC_MACHH_W, |
| 28316 | + AVR32_OPC_MACS_D, |
| 28317 | + AVR32_OPC_MACSATHH_W, |
| 28318 | + AVR32_OPC_MACUD, |
| 28319 | + AVR32_OPC_MACWH_D, |
| 28320 | + AVR32_OPC_MAX, |
| 28321 | + AVR32_OPC_MCALL, |
| 28322 | + AVR32_OPC_MFDR, |
| 28323 | + AVR32_OPC_MFSR, |
| 28324 | + AVR32_OPC_MIN, |
| 28325 | + AVR32_OPC_MOV3, |
| 28326 | + AVR32_OPC_MOV1, |
| 28327 | + AVR32_OPC_MOV2, |
| 28328 | + AVR32_OPC_MOVEQ1, |
| 28329 | + AVR32_OPC_MOVNE1, |
| 28330 | + AVR32_OPC_MOVCC1, |
| 28331 | + AVR32_OPC_MOVCS1, |
| 28332 | + AVR32_OPC_MOVGE1, |
| 28333 | + AVR32_OPC_MOVLT1, |
| 28334 | + AVR32_OPC_MOVMI1, |
| 28335 | + AVR32_OPC_MOVPL1, |
| 28336 | + AVR32_OPC_MOVLS1, |
| 28337 | + AVR32_OPC_MOVGT1, |
| 28338 | + AVR32_OPC_MOVLE1, |
| 28339 | + AVR32_OPC_MOVHI1, |
| 28340 | + AVR32_OPC_MOVVS1, |
| 28341 | + AVR32_OPC_MOVVC1, |
| 28342 | + AVR32_OPC_MOVQS1, |
| 28343 | + AVR32_OPC_MOVAL1, |
| 28344 | + AVR32_OPC_MOVEQ2, |
| 28345 | + AVR32_OPC_MOVNE2, |
| 28346 | + AVR32_OPC_MOVCC2, |
| 28347 | + AVR32_OPC_MOVCS2, |
| 28348 | + AVR32_OPC_MOVGE2, |
| 28349 | + AVR32_OPC_MOVLT2, |
| 28350 | + AVR32_OPC_MOVMI2, |
| 28351 | + AVR32_OPC_MOVPL2, |
| 28352 | + AVR32_OPC_MOVLS2, |
| 28353 | + AVR32_OPC_MOVGT2, |
| 28354 | + AVR32_OPC_MOVLE2, |
| 28355 | + AVR32_OPC_MOVHI2, |
| 28356 | + AVR32_OPC_MOVVS2, |
| 28357 | + AVR32_OPC_MOVVC2, |
| 28358 | + AVR32_OPC_MOVQS2, |
| 28359 | + AVR32_OPC_MOVAL2, |
| 28360 | + AVR32_OPC_MTDR, |
| 28361 | + AVR32_OPC_MTSR, |
| 28362 | + AVR32_OPC_MUL1, |
| 28363 | + AVR32_OPC_MUL2, |
| 28364 | + AVR32_OPC_MUL3, |
| 28365 | + AVR32_OPC_MULHH_W, |
| 28366 | + AVR32_OPC_MULNHH_W, |
| 28367 | + AVR32_OPC_MULNWH_D, |
| 28368 | + AVR32_OPC_MULSD, |
| 28369 | + AVR32_OPC_MULSATHH_H, |
| 28370 | + AVR32_OPC_MULSATHH_W, |
| 28371 | + AVR32_OPC_MULSATRNDHH_H, |
| 28372 | + AVR32_OPC_MULSATRNDWH_W, |
| 28373 | + AVR32_OPC_MULSATWH_W, |
| 28374 | + AVR32_OPC_MULU_D, |
| 28375 | + AVR32_OPC_MULWH_D, |
| 28376 | + AVR32_OPC_MUSFR, |
| 28377 | + AVR32_OPC_MUSTR, |
| 28378 | + AVR32_OPC_MVCR_D, |
| 28379 | + AVR32_OPC_MVCR_W, |
| 28380 | + AVR32_OPC_MVRC_D, |
| 28381 | + AVR32_OPC_MVRC_W, |
| 28382 | + AVR32_OPC_NEG, |
| 28383 | + AVR32_OPC_NOP, |
| 28384 | + AVR32_OPC_OR1, |
| 28385 | + AVR32_OPC_OR2, |
| 28386 | + AVR32_OPC_OR3, |
| 28387 | + AVR32_OPC_ORH, |
| 28388 | + AVR32_OPC_ORL, |
| 28389 | + AVR32_OPC_PABS_SB, |
| 28390 | + AVR32_OPC_PABS_SH, |
| 28391 | + AVR32_OPC_PACKSH_SB, |
| 28392 | + AVR32_OPC_PACKSH_UB, |
| 28393 | + AVR32_OPC_PACKW_SH, |
| 28394 | + AVR32_OPC_PADD_B, |
| 28395 | + AVR32_OPC_PADD_H, |
| 28396 | + AVR32_OPC_PADDH_SH, |
| 28397 | + AVR32_OPC_PADDH_UB, |
| 28398 | + AVR32_OPC_PADDS_SB, |
| 28399 | + AVR32_OPC_PADDS_SH, |
| 28400 | + AVR32_OPC_PADDS_UB, |
| 28401 | + AVR32_OPC_PADDS_UH, |
| 28402 | + AVR32_OPC_PADDSUB_H, |
| 28403 | + AVR32_OPC_PADDSUBH_SH, |
| 28404 | + AVR32_OPC_PADDSUBS_SH, |
| 28405 | + AVR32_OPC_PADDSUBS_UH, |
| 28406 | + AVR32_OPC_PADDX_H, |
| 28407 | + AVR32_OPC_PADDXH_SH, |
| 28408 | + AVR32_OPC_PADDXS_SH, |
| 28409 | + AVR32_OPC_PADDXS_UH, |
| 28410 | + AVR32_OPC_PASR_B, |
| 28411 | + AVR32_OPC_PASR_H, |
| 28412 | + AVR32_OPC_PAVG_SH, |
| 28413 | + AVR32_OPC_PAVG_UB, |
| 28414 | + AVR32_OPC_PLSL_B, |
| 28415 | + AVR32_OPC_PLSL_H, |
| 28416 | + AVR32_OPC_PLSR_B, |
| 28417 | + AVR32_OPC_PLSR_H, |
| 28418 | + AVR32_OPC_PMAX_SH, |
| 28419 | + AVR32_OPC_PMAX_UB, |
| 28420 | + AVR32_OPC_PMIN_SH, |
| 28421 | + AVR32_OPC_PMIN_UB, |
| 28422 | + AVR32_OPC_POPJC, |
| 28423 | + AVR32_OPC_POPM, |
| 28424 | + AVR32_OPC_POPM_E, |
| 28425 | + AVR32_OPC_PREF, |
| 28426 | + AVR32_OPC_PSAD, |
| 28427 | + AVR32_OPC_PSUB_B, |
| 28428 | + AVR32_OPC_PSUB_H, |
| 28429 | + AVR32_OPC_PSUBADD_H, |
| 28430 | + AVR32_OPC_PSUBADDH_SH, |
| 28431 | + AVR32_OPC_PSUBADDS_SH, |
| 28432 | + AVR32_OPC_PSUBADDS_UH, |
| 28433 | + AVR32_OPC_PSUBH_SH, |
| 28434 | + AVR32_OPC_PSUBH_UB, |
| 28435 | + AVR32_OPC_PSUBS_SB, |
| 28436 | + AVR32_OPC_PSUBS_SH, |
| 28437 | + AVR32_OPC_PSUBS_UB, |
| 28438 | + AVR32_OPC_PSUBS_UH, |
| 28439 | + AVR32_OPC_PSUBX_H, |
| 28440 | + AVR32_OPC_PSUBXH_SH, |
| 28441 | + AVR32_OPC_PSUBXS_SH, |
| 28442 | + AVR32_OPC_PSUBXS_UH, |
| 28443 | + AVR32_OPC_PUNPCKSB_H, |
| 28444 | + AVR32_OPC_PUNPCKUB_H, |
| 28445 | + AVR32_OPC_PUSHJC, |
| 28446 | + AVR32_OPC_PUSHM, |
| 28447 | + AVR32_OPC_PUSHM_E, |
| 28448 | + AVR32_OPC_RCALL1, |
| 28449 | + AVR32_OPC_RCALL2, |
| 28450 | + AVR32_OPC_RETEQ, |
| 28451 | + AVR32_OPC_RETNE, |
| 28452 | + AVR32_OPC_RETCC, |
| 28453 | + AVR32_OPC_RETCS, |
| 28454 | + AVR32_OPC_RETGE, |
| 28455 | + AVR32_OPC_RETLT, |
| 28456 | + AVR32_OPC_RETMI, |
| 28457 | + AVR32_OPC_RETPL, |
| 28458 | + AVR32_OPC_RETLS, |
| 28459 | + AVR32_OPC_RETGT, |
| 28460 | + AVR32_OPC_RETLE, |
| 28461 | + AVR32_OPC_RETHI, |
| 28462 | + AVR32_OPC_RETVS, |
| 28463 | + AVR32_OPC_RETVC, |
| 28464 | + AVR32_OPC_RETQS, |
| 28465 | + AVR32_OPC_RETAL, |
| 28466 | + AVR32_OPC_RETD, |
| 28467 | + AVR32_OPC_RETE, |
| 28468 | + AVR32_OPC_RETJ, |
| 28469 | + AVR32_OPC_RETS, |
| 28470 | + AVR32_OPC_RJMP, |
| 28471 | + AVR32_OPC_ROL, |
| 28472 | + AVR32_OPC_ROR, |
| 28473 | + AVR32_OPC_RSUB1, |
| 28474 | + AVR32_OPC_RSUB2, |
| 28475 | + AVR32_OPC_SATADD_H, |
| 28476 | + AVR32_OPC_SATADD_W, |
| 28477 | + AVR32_OPC_SATRNDS, |
| 28478 | + AVR32_OPC_SATRNDU, |
| 28479 | + AVR32_OPC_SATS, |
| 28480 | + AVR32_OPC_SATSUB_H, |
| 28481 | + AVR32_OPC_SATSUB_W1, |
| 28482 | + AVR32_OPC_SATSUB_W2, |
| 28483 | + AVR32_OPC_SATU, |
| 28484 | + AVR32_OPC_SBC, |
| 28485 | + AVR32_OPC_SBR, |
| 28486 | + AVR32_OPC_SCALL, |
| 28487 | + AVR32_OPC_SCR, |
| 28488 | + AVR32_OPC_SLEEP, |
| 28489 | + AVR32_OPC_SREQ, |
| 28490 | + AVR32_OPC_SRNE, |
| 28491 | + AVR32_OPC_SRCC, |
| 28492 | + AVR32_OPC_SRCS, |
| 28493 | + AVR32_OPC_SRGE, |
| 28494 | + AVR32_OPC_SRLT, |
| 28495 | + AVR32_OPC_SRMI, |
| 28496 | + AVR32_OPC_SRPL, |
| 28497 | + AVR32_OPC_SRLS, |
| 28498 | + AVR32_OPC_SRGT, |
| 28499 | + AVR32_OPC_SRLE, |
| 28500 | + AVR32_OPC_SRHI, |
| 28501 | + AVR32_OPC_SRVS, |
| 28502 | + AVR32_OPC_SRVC, |
| 28503 | + AVR32_OPC_SRQS, |
| 28504 | + AVR32_OPC_SRAL, |
| 28505 | + AVR32_OPC_SSRF, |
| 28506 | + AVR32_OPC_ST_B1, |
| 28507 | + AVR32_OPC_ST_B2, |
| 28508 | + AVR32_OPC_ST_B5, |
| 28509 | + AVR32_OPC_ST_B3, |
| 28510 | + AVR32_OPC_ST_B4, |
| 28511 | + AVR32_OPC_ST_D1, |
| 28512 | + AVR32_OPC_ST_D2, |
| 28513 | + AVR32_OPC_ST_D3, |
| 28514 | + AVR32_OPC_ST_D5, |
| 28515 | + AVR32_OPC_ST_D4, |
| 28516 | + AVR32_OPC_ST_H1, |
| 28517 | + AVR32_OPC_ST_H2, |
| 28518 | + AVR32_OPC_ST_H5, |
| 28519 | + AVR32_OPC_ST_H3, |
| 28520 | + AVR32_OPC_ST_H4, |
| 28521 | + AVR32_OPC_ST_W1, |
| 28522 | + AVR32_OPC_ST_W2, |
| 28523 | + AVR32_OPC_ST_W5, |
| 28524 | + AVR32_OPC_ST_W3, |
| 28525 | + AVR32_OPC_ST_W4, |
| 28526 | + AVR32_OPC_STC_D1, |
| 28527 | + AVR32_OPC_STC_D2, |
| 28528 | + AVR32_OPC_STC_D3, |
| 28529 | + AVR32_OPC_STC_W1, |
| 28530 | + AVR32_OPC_STC_W2, |
| 28531 | + AVR32_OPC_STC_W3, |
| 28532 | + AVR32_OPC_STC0_D, |
| 28533 | + AVR32_OPC_STC0_W, |
| 28534 | + AVR32_OPC_STCM_D, |
| 28535 | + AVR32_OPC_STCM_D_PU, |
| 28536 | + AVR32_OPC_STCM_W, |
| 28537 | + AVR32_OPC_STCM_W_PU, |
| 28538 | + AVR32_OPC_STCOND, |
| 28539 | + AVR32_OPC_STDSP, |
| 28540 | + AVR32_OPC_STHH_W2, |
| 28541 | + AVR32_OPC_STHH_W1, |
| 28542 | + AVR32_OPC_STM, |
| 28543 | + AVR32_OPC_STM_PU, |
| 28544 | + AVR32_OPC_STMTS, |
| 28545 | + AVR32_OPC_STMTS_PU, |
| 28546 | + AVR32_OPC_STSWP_H, |
| 28547 | + AVR32_OPC_STSWP_W, |
| 28548 | + AVR32_OPC_SUB1, |
| 28549 | + AVR32_OPC_SUB2, |
| 28550 | + AVR32_OPC_SUB5, |
| 28551 | + AVR32_OPC_SUB3_SP, |
| 28552 | + AVR32_OPC_SUB3, |
| 28553 | + AVR32_OPC_SUB4, |
| 28554 | + AVR32_OPC_SUBEQ, |
| 28555 | + AVR32_OPC_SUBNE, |
| 28556 | + AVR32_OPC_SUBCC, |
| 28557 | + AVR32_OPC_SUBCS, |
| 28558 | + AVR32_OPC_SUBGE, |
| 28559 | + AVR32_OPC_SUBLT, |
| 28560 | + AVR32_OPC_SUBMI, |
| 28561 | + AVR32_OPC_SUBPL, |
| 28562 | + AVR32_OPC_SUBLS, |
| 28563 | + AVR32_OPC_SUBGT, |
| 28564 | + AVR32_OPC_SUBLE, |
| 28565 | + AVR32_OPC_SUBHI, |
| 28566 | + AVR32_OPC_SUBVS, |
| 28567 | + AVR32_OPC_SUBVC, |
| 28568 | + AVR32_OPC_SUBQS, |
| 28569 | + AVR32_OPC_SUBAL, |
| 28570 | + AVR32_OPC_SUBFEQ, |
| 28571 | + AVR32_OPC_SUBFNE, |
| 28572 | + AVR32_OPC_SUBFCC, |
| 28573 | + AVR32_OPC_SUBFCS, |
| 28574 | + AVR32_OPC_SUBFGE, |
| 28575 | + AVR32_OPC_SUBFLT, |
| 28576 | + AVR32_OPC_SUBFMI, |
| 28577 | + AVR32_OPC_SUBFPL, |
| 28578 | + AVR32_OPC_SUBFLS, |
| 28579 | + AVR32_OPC_SUBFGT, |
| 28580 | + AVR32_OPC_SUBFLE, |
| 28581 | + AVR32_OPC_SUBFHI, |
| 28582 | + AVR32_OPC_SUBFVS, |
| 28583 | + AVR32_OPC_SUBFVC, |
| 28584 | + AVR32_OPC_SUBFQS, |
| 28585 | + AVR32_OPC_SUBFAL, |
| 28586 | + AVR32_OPC_SUBHH_W, |
| 28587 | + AVR32_OPC_SWAP_B, |
| 28588 | + AVR32_OPC_SWAP_BH, |
| 28589 | + AVR32_OPC_SWAP_H, |
| 28590 | + AVR32_OPC_SYNC, |
| 28591 | + AVR32_OPC_TLBR, |
| 28592 | + AVR32_OPC_TLBS, |
| 28593 | + AVR32_OPC_TLBW, |
| 28594 | + AVR32_OPC_TNBZ, |
| 28595 | + AVR32_OPC_TST, |
| 28596 | + AVR32_OPC_XCHG, |
| 28597 | + AVR32_OPC_MEMC, |
| 28598 | + AVR32_OPC_MEMS, |
| 28599 | + AVR32_OPC_MEMT, |
| 28600 | + AVR32_OPC_BFEXTS, |
| 28601 | + AVR32_OPC_BFEXTU, |
| 28602 | + AVR32_OPC_BFINS, |
| 28603 | + AVR32_OPC_RSUBEQ, |
| 28604 | + AVR32_OPC_RSUBNE, |
| 28605 | + AVR32_OPC_RSUBCC, |
| 28606 | + AVR32_OPC_RSUBCS, |
| 28607 | + AVR32_OPC_RSUBGE, |
| 28608 | + AVR32_OPC_RSUBLT, |
| 28609 | + AVR32_OPC_RSUBMI, |
| 28610 | + AVR32_OPC_RSUBPL, |
| 28611 | + AVR32_OPC_RSUBLS, |
| 28612 | + AVR32_OPC_RSUBGT, |
| 28613 | + AVR32_OPC_RSUBLE, |
| 28614 | + AVR32_OPC_RSUBHI, |
| 28615 | + AVR32_OPC_RSUBVS, |
| 28616 | + AVR32_OPC_RSUBVC, |
| 28617 | + AVR32_OPC_RSUBQS, |
| 28618 | + AVR32_OPC_RSUBAL, |
| 28619 | + AVR32_OPC_ADDEQ, |
| 28620 | + AVR32_OPC_ADDNE, |
| 28621 | + AVR32_OPC_ADDCC, |
| 28622 | + AVR32_OPC_ADDCS, |
| 28623 | + AVR32_OPC_ADDGE, |
| 28624 | + AVR32_OPC_ADDLT, |
| 28625 | + AVR32_OPC_ADDMI, |
| 28626 | + AVR32_OPC_ADDPL, |
| 28627 | + AVR32_OPC_ADDLS, |
| 28628 | + AVR32_OPC_ADDGT, |
| 28629 | + AVR32_OPC_ADDLE, |
| 28630 | + AVR32_OPC_ADDHI, |
| 28631 | + AVR32_OPC_ADDVS, |
| 28632 | + AVR32_OPC_ADDVC, |
| 28633 | + AVR32_OPC_ADDQS, |
| 28634 | + AVR32_OPC_ADDAL, |
| 28635 | + AVR32_OPC_SUB2EQ, |
| 28636 | + AVR32_OPC_SUB2NE, |
| 28637 | + AVR32_OPC_SUB2CC, |
| 28638 | + AVR32_OPC_SUB2CS, |
| 28639 | + AVR32_OPC_SUB2GE, |
| 28640 | + AVR32_OPC_SUB2LT, |
| 28641 | + AVR32_OPC_SUB2MI, |
| 28642 | + AVR32_OPC_SUB2PL, |
| 28643 | + AVR32_OPC_SUB2LS, |
| 28644 | + AVR32_OPC_SUB2GT, |
| 28645 | + AVR32_OPC_SUB2LE, |
| 28646 | + AVR32_OPC_SUB2HI, |
| 28647 | + AVR32_OPC_SUB2VS, |
| 28648 | + AVR32_OPC_SUB2VC, |
| 28649 | + AVR32_OPC_SUB2QS, |
| 28650 | + AVR32_OPC_SUB2AL, |
| 28651 | + AVR32_OPC_ANDEQ, |
| 28652 | + AVR32_OPC_ANDNE, |
| 28653 | + AVR32_OPC_ANDCC, |
| 28654 | + AVR32_OPC_ANDCS, |
| 28655 | + AVR32_OPC_ANDGE, |
| 28656 | + AVR32_OPC_ANDLT, |
| 28657 | + AVR32_OPC_ANDMI, |
| 28658 | + AVR32_OPC_ANDPL, |
| 28659 | + AVR32_OPC_ANDLS, |
| 28660 | + AVR32_OPC_ANDGT, |
| 28661 | + AVR32_OPC_ANDLE, |
| 28662 | + AVR32_OPC_ANDHI, |
| 28663 | + AVR32_OPC_ANDVS, |
| 28664 | + AVR32_OPC_ANDVC, |
| 28665 | + AVR32_OPC_ANDQS, |
| 28666 | + AVR32_OPC_ANDAL, |
| 28667 | + AVR32_OPC_OREQ, |
| 28668 | + AVR32_OPC_ORNE, |
| 28669 | + AVR32_OPC_ORCC, |
| 28670 | + AVR32_OPC_ORCS, |
| 28671 | + AVR32_OPC_ORGE, |
| 28672 | + AVR32_OPC_ORLT, |
| 28673 | + AVR32_OPC_ORMI, |
| 28674 | + AVR32_OPC_ORPL, |
| 28675 | + AVR32_OPC_ORLS, |
| 28676 | + AVR32_OPC_ORGT, |
| 28677 | + AVR32_OPC_ORLE, |
| 28678 | + AVR32_OPC_ORHI, |
| 28679 | + AVR32_OPC_ORVS, |
| 28680 | + AVR32_OPC_ORVC, |
| 28681 | + AVR32_OPC_ORQS, |
| 28682 | + AVR32_OPC_ORAL, |
| 28683 | + AVR32_OPC_EOREQ, |
| 28684 | + AVR32_OPC_EORNE, |
| 28685 | + AVR32_OPC_EORCC, |
| 28686 | + AVR32_OPC_EORCS, |
| 28687 | + AVR32_OPC_EORGE, |
| 28688 | + AVR32_OPC_EORLT, |
| 28689 | + AVR32_OPC_EORMI, |
| 28690 | + AVR32_OPC_EORPL, |
| 28691 | + AVR32_OPC_EORLS, |
| 28692 | + AVR32_OPC_EORGT, |
| 28693 | + AVR32_OPC_EORLE, |
| 28694 | + AVR32_OPC_EORHI, |
| 28695 | + AVR32_OPC_EORVS, |
| 28696 | + AVR32_OPC_EORVC, |
| 28697 | + AVR32_OPC_EORQS, |
| 28698 | + AVR32_OPC_EORAL, |
| 28699 | + AVR32_OPC_LD_WEQ, |
| 28700 | + AVR32_OPC_LD_WNE, |
| 28701 | + AVR32_OPC_LD_WCC, |
| 28702 | + AVR32_OPC_LD_WCS, |
| 28703 | + AVR32_OPC_LD_WGE, |
| 28704 | + AVR32_OPC_LD_WLT, |
| 28705 | + AVR32_OPC_LD_WMI, |
| 28706 | + AVR32_OPC_LD_WPL, |
| 28707 | + AVR32_OPC_LD_WLS, |
| 28708 | + AVR32_OPC_LD_WGT, |
| 28709 | + AVR32_OPC_LD_WLE, |
| 28710 | + AVR32_OPC_LD_WHI, |
| 28711 | + AVR32_OPC_LD_WVS, |
| 28712 | + AVR32_OPC_LD_WVC, |
| 28713 | + AVR32_OPC_LD_WQS, |
| 28714 | + AVR32_OPC_LD_WAL, |
| 28715 | + AVR32_OPC_LD_SHEQ, |
| 28716 | + AVR32_OPC_LD_SHNE, |
| 28717 | + AVR32_OPC_LD_SHCC, |
| 28718 | + AVR32_OPC_LD_SHCS, |
| 28719 | + AVR32_OPC_LD_SHGE, |
| 28720 | + AVR32_OPC_LD_SHLT, |
| 28721 | + AVR32_OPC_LD_SHMI, |
| 28722 | + AVR32_OPC_LD_SHPL, |
| 28723 | + AVR32_OPC_LD_SHLS, |
| 28724 | + AVR32_OPC_LD_SHGT, |
| 28725 | + AVR32_OPC_LD_SHLE, |
| 28726 | + AVR32_OPC_LD_SHHI, |
| 28727 | + AVR32_OPC_LD_SHVS, |
| 28728 | + AVR32_OPC_LD_SHVC, |
| 28729 | + AVR32_OPC_LD_SHQS, |
| 28730 | + AVR32_OPC_LD_SHAL, |
| 28731 | + AVR32_OPC_LD_UHEQ, |
| 28732 | + AVR32_OPC_LD_UHNE, |
| 28733 | + AVR32_OPC_LD_UHCC, |
| 28734 | + AVR32_OPC_LD_UHCS, |
| 28735 | + AVR32_OPC_LD_UHGE, |
| 28736 | + AVR32_OPC_LD_UHLT, |
| 28737 | + AVR32_OPC_LD_UHMI, |
| 28738 | + AVR32_OPC_LD_UHPL, |
| 28739 | + AVR32_OPC_LD_UHLS, |
| 28740 | + AVR32_OPC_LD_UHGT, |
| 28741 | + AVR32_OPC_LD_UHLE, |
| 28742 | + AVR32_OPC_LD_UHHI, |
| 28743 | + AVR32_OPC_LD_UHVS, |
| 28744 | + AVR32_OPC_LD_UHVC, |
| 28745 | + AVR32_OPC_LD_UHQS, |
| 28746 | + AVR32_OPC_LD_UHAL, |
| 28747 | + AVR32_OPC_LD_SBEQ, |
| 28748 | + AVR32_OPC_LD_SBNE, |
| 28749 | + AVR32_OPC_LD_SBCC, |
| 28750 | + AVR32_OPC_LD_SBCS, |
| 28751 | + AVR32_OPC_LD_SBGE, |
| 28752 | + AVR32_OPC_LD_SBLT, |
| 28753 | + AVR32_OPC_LD_SBMI, |
| 28754 | + AVR32_OPC_LD_SBPL, |
| 28755 | + AVR32_OPC_LD_SBLS, |
| 28756 | + AVR32_OPC_LD_SBGT, |
| 28757 | + AVR32_OPC_LD_SBLE, |
| 28758 | + AVR32_OPC_LD_SBHI, |
| 28759 | + AVR32_OPC_LD_SBVS, |
| 28760 | + AVR32_OPC_LD_SBVC, |
| 28761 | + AVR32_OPC_LD_SBQS, |
| 28762 | + AVR32_OPC_LD_SBAL, |
| 28763 | + AVR32_OPC_LD_UBEQ, |
| 28764 | + AVR32_OPC_LD_UBNE, |
| 28765 | + AVR32_OPC_LD_UBCC, |
| 28766 | + AVR32_OPC_LD_UBCS, |
| 28767 | + AVR32_OPC_LD_UBGE, |
| 28768 | + AVR32_OPC_LD_UBLT, |
| 28769 | + AVR32_OPC_LD_UBMI, |
| 28770 | + AVR32_OPC_LD_UBPL, |
| 28771 | + AVR32_OPC_LD_UBLS, |
| 28772 | + AVR32_OPC_LD_UBGT, |
| 28773 | + AVR32_OPC_LD_UBLE, |
| 28774 | + AVR32_OPC_LD_UBHI, |
| 28775 | + AVR32_OPC_LD_UBVS, |
| 28776 | + AVR32_OPC_LD_UBVC, |
| 28777 | + AVR32_OPC_LD_UBQS, |
| 28778 | + AVR32_OPC_LD_UBAL, |
| 28779 | + AVR32_OPC_ST_WEQ, |
| 28780 | + AVR32_OPC_ST_WNE, |
| 28781 | + AVR32_OPC_ST_WCC, |
| 28782 | + AVR32_OPC_ST_WCS, |
| 28783 | + AVR32_OPC_ST_WGE, |
| 28784 | + AVR32_OPC_ST_WLT, |
| 28785 | + AVR32_OPC_ST_WMI, |
| 28786 | + AVR32_OPC_ST_WPL, |
| 28787 | + AVR32_OPC_ST_WLS, |
| 28788 | + AVR32_OPC_ST_WGT, |
| 28789 | + AVR32_OPC_ST_WLE, |
| 28790 | + AVR32_OPC_ST_WHI, |
| 28791 | + AVR32_OPC_ST_WVS, |
| 28792 | + AVR32_OPC_ST_WVC, |
| 28793 | + AVR32_OPC_ST_WQS, |
| 28794 | + AVR32_OPC_ST_WAL, |
| 28795 | + AVR32_OPC_ST_HEQ, |
| 28796 | + AVR32_OPC_ST_HNE, |
| 28797 | + AVR32_OPC_ST_HCC, |
| 28798 | + AVR32_OPC_ST_HCS, |
| 28799 | + AVR32_OPC_ST_HGE, |
| 28800 | + AVR32_OPC_ST_HLT, |
| 28801 | + AVR32_OPC_ST_HMI, |
| 28802 | + AVR32_OPC_ST_HPL, |
| 28803 | + AVR32_OPC_ST_HLS, |
| 28804 | + AVR32_OPC_ST_HGT, |
| 28805 | + AVR32_OPC_ST_HLE, |
| 28806 | + AVR32_OPC_ST_HHI, |
| 28807 | + AVR32_OPC_ST_HVS, |
| 28808 | + AVR32_OPC_ST_HVC, |
| 28809 | + AVR32_OPC_ST_HQS, |
| 28810 | + AVR32_OPC_ST_HAL, |
| 28811 | + AVR32_OPC_ST_BEQ, |
| 28812 | + AVR32_OPC_ST_BNE, |
| 28813 | + AVR32_OPC_ST_BCC, |
| 28814 | + AVR32_OPC_ST_BCS, |
| 28815 | + AVR32_OPC_ST_BGE, |
| 28816 | + AVR32_OPC_ST_BLT, |
| 28817 | + AVR32_OPC_ST_BMI, |
| 28818 | + AVR32_OPC_ST_BPL, |
| 28819 | + AVR32_OPC_ST_BLS, |
| 28820 | + AVR32_OPC_ST_BGT, |
| 28821 | + AVR32_OPC_ST_BLE, |
| 28822 | + AVR32_OPC_ST_BHI, |
| 28823 | + AVR32_OPC_ST_BVS, |
| 28824 | + AVR32_OPC_ST_BVC, |
| 28825 | + AVR32_OPC_ST_BQS, |
| 28826 | + AVR32_OPC_ST_BAL, |
| 28827 | + AVR32_OPC_MOVH, |
| 28828 | + AVR32_OPC_SSCALL, |
| 28829 | + AVR32_OPC_RETSS, |
| 28830 | + AVR32_OPC_FMAC_S, |
| 28831 | + AVR32_OPC_FNMAC_S, |
| 28832 | + AVR32_OPC_FMSC_S, |
| 28833 | + AVR32_OPC_FNMSC_S, |
| 28834 | + AVR32_OPC_FMUL_S, |
| 28835 | + AVR32_OPC_FNMUL_S, |
| 28836 | + AVR32_OPC_FADD_S, |
| 28837 | + AVR32_OPC_FSUB_S, |
| 28838 | + AVR32_OPC_FCASTRS_SW, |
| 28839 | + AVR32_OPC_FCASTRS_UW, |
| 28840 | + AVR32_OPC_FCASTSW_S, |
| 28841 | + AVR32_OPC_FCASTUW_S, |
| 28842 | + AVR32_OPC_FCMP_S, |
| 28843 | + AVR32_OPC_FCHK_S, |
| 28844 | + AVR32_OPC_FRCPA_S, |
| 28845 | + AVR32_OPC_FRSQRTA_S, |
| 28846 | + AVR32_OPC__END_ |
| 28847 | +}; |
| 28848 | +#define AVR32_NR_OPCODES AVR32_OPC__END_ |
| 28849 | + |
| 28850 | +enum avr32_syntax_type |
| 28851 | +{ |
| 28852 | + AVR32_SYNTAX_ABS, |
| 28853 | + AVR32_SYNTAX_ACALL, |
| 28854 | + AVR32_SYNTAX_ACR, |
| 28855 | + AVR32_SYNTAX_ADC, |
| 28856 | + AVR32_SYNTAX_ADD1, |
| 28857 | + AVR32_SYNTAX_ADD2, |
| 28858 | + AVR32_SYNTAX_ADDABS, |
| 28859 | + AVR32_SYNTAX_ADDHH_W, |
| 28860 | + AVR32_SYNTAX_AND1, |
| 28861 | + AVR32_SYNTAX_AND2, |
| 28862 | + AVR32_SYNTAX_AND3, |
| 28863 | + AVR32_SYNTAX_ANDH, |
| 28864 | + AVR32_SYNTAX_ANDH_COH, |
| 28865 | + AVR32_SYNTAX_ANDL, |
| 28866 | + AVR32_SYNTAX_ANDL_COH, |
| 28867 | + AVR32_SYNTAX_ANDN, |
| 28868 | + AVR32_SYNTAX_ASR1, |
| 28869 | + AVR32_SYNTAX_ASR3, |
| 28870 | + AVR32_SYNTAX_ASR2, |
| 28871 | + AVR32_SYNTAX_BFEXTS, |
| 28872 | + AVR32_SYNTAX_BFEXTU, |
| 28873 | + AVR32_SYNTAX_BFINS, |
| 28874 | + AVR32_SYNTAX_BLD, |
| 28875 | + AVR32_SYNTAX_BREQ1, |
| 28876 | + AVR32_SYNTAX_BRNE1, |
| 28877 | + AVR32_SYNTAX_BRCC1, |
| 28878 | + AVR32_SYNTAX_BRCS1, |
| 28879 | + AVR32_SYNTAX_BRGE1, |
| 28880 | + AVR32_SYNTAX_BRLT1, |
| 28881 | + AVR32_SYNTAX_BRMI1, |
| 28882 | + AVR32_SYNTAX_BRPL1, |
| 28883 | + AVR32_SYNTAX_BRHS1, |
| 28884 | + AVR32_SYNTAX_BRLO1, |
| 28885 | + AVR32_SYNTAX_BREQ2, |
| 28886 | + AVR32_SYNTAX_BRNE2, |
| 28887 | + AVR32_SYNTAX_BRCC2, |
| 28888 | + AVR32_SYNTAX_BRCS2, |
| 28889 | + AVR32_SYNTAX_BRGE2, |
| 28890 | + AVR32_SYNTAX_BRLT2, |
| 28891 | + AVR32_SYNTAX_BRMI2, |
| 28892 | + AVR32_SYNTAX_BRPL2, |
| 28893 | + AVR32_SYNTAX_BRLS, |
| 28894 | + AVR32_SYNTAX_BRGT, |
| 28895 | + AVR32_SYNTAX_BRLE, |
| 28896 | + AVR32_SYNTAX_BRHI, |
| 28897 | + AVR32_SYNTAX_BRVS, |
| 28898 | + AVR32_SYNTAX_BRVC, |
| 28899 | + AVR32_SYNTAX_BRQS, |
| 28900 | + AVR32_SYNTAX_BRAL, |
| 28901 | + AVR32_SYNTAX_BRHS2, |
| 28902 | + AVR32_SYNTAX_BRLO2, |
| 28903 | + AVR32_SYNTAX_BREAKPOINT, |
| 28904 | + AVR32_SYNTAX_BREV, |
| 28905 | + AVR32_SYNTAX_BST, |
| 28906 | + AVR32_SYNTAX_CACHE, |
| 28907 | + AVR32_SYNTAX_CASTS_B, |
| 28908 | + AVR32_SYNTAX_CASTS_H, |
| 28909 | + AVR32_SYNTAX_CASTU_B, |
| 28910 | + AVR32_SYNTAX_CASTU_H, |
| 28911 | + AVR32_SYNTAX_CBR, |
| 28912 | + AVR32_SYNTAX_CLZ, |
| 28913 | + AVR32_SYNTAX_COM, |
| 28914 | + AVR32_SYNTAX_COP, |
| 28915 | + AVR32_SYNTAX_CP_B, |
| 28916 | + AVR32_SYNTAX_CP_H, |
| 28917 | + AVR32_SYNTAX_CP_W1, |
| 28918 | + AVR32_SYNTAX_CP_W2, |
| 28919 | + AVR32_SYNTAX_CP_W3, |
| 28920 | + AVR32_SYNTAX_CPC1, |
| 28921 | + AVR32_SYNTAX_CPC2, |
| 28922 | + AVR32_SYNTAX_CSRF, |
| 28923 | + AVR32_SYNTAX_CSRFCZ, |
| 28924 | + AVR32_SYNTAX_DIVS, |
| 28925 | + AVR32_SYNTAX_DIVU, |
| 28926 | + AVR32_SYNTAX_EOR1, |
| 28927 | + AVR32_SYNTAX_EOR2, |
| 28928 | + AVR32_SYNTAX_EOR3, |
| 28929 | + AVR32_SYNTAX_EORL, |
| 28930 | + AVR32_SYNTAX_EORH, |
| 28931 | + AVR32_SYNTAX_FRS, |
| 28932 | + AVR32_SYNTAX_SSCALL, |
| 28933 | + AVR32_SYNTAX_RETSS, |
| 28934 | + AVR32_SYNTAX_ICALL, |
| 28935 | + AVR32_SYNTAX_INCJOSP, |
| 28936 | + AVR32_SYNTAX_LD_D1, |
| 28937 | + AVR32_SYNTAX_LD_D2, |
| 28938 | + AVR32_SYNTAX_LD_D3, |
| 28939 | + AVR32_SYNTAX_LD_D5, |
| 28940 | + AVR32_SYNTAX_LD_D4, |
| 28941 | + AVR32_SYNTAX_LD_SB2, |
| 28942 | + AVR32_SYNTAX_LD_SB1, |
| 28943 | + AVR32_SYNTAX_LD_UB1, |
| 28944 | + AVR32_SYNTAX_LD_UB2, |
| 28945 | + AVR32_SYNTAX_LD_UB5, |
| 28946 | + AVR32_SYNTAX_LD_UB3, |
| 28947 | + AVR32_SYNTAX_LD_UB4, |
| 28948 | + AVR32_SYNTAX_LD_SH1, |
| 28949 | + AVR32_SYNTAX_LD_SH2, |
| 28950 | + AVR32_SYNTAX_LD_SH5, |
| 28951 | + AVR32_SYNTAX_LD_SH3, |
| 28952 | + AVR32_SYNTAX_LD_SH4, |
| 28953 | + AVR32_SYNTAX_LD_UH1, |
| 28954 | + AVR32_SYNTAX_LD_UH2, |
| 28955 | + AVR32_SYNTAX_LD_UH5, |
| 28956 | + AVR32_SYNTAX_LD_UH3, |
| 28957 | + AVR32_SYNTAX_LD_UH4, |
| 28958 | + AVR32_SYNTAX_LD_W1, |
| 28959 | + AVR32_SYNTAX_LD_W2, |
| 28960 | + AVR32_SYNTAX_LD_W5, |
| 28961 | + AVR32_SYNTAX_LD_W6, |
| 28962 | + AVR32_SYNTAX_LD_W3, |
| 28963 | + AVR32_SYNTAX_LD_W4, |
| 28964 | + AVR32_SYNTAX_LDC_D1, |
| 28965 | + AVR32_SYNTAX_LDC_D2, |
| 28966 | + AVR32_SYNTAX_LDC_D3, |
| 28967 | + AVR32_SYNTAX_LDC_W1, |
| 28968 | + AVR32_SYNTAX_LDC_W2, |
| 28969 | + AVR32_SYNTAX_LDC_W3, |
| 28970 | + AVR32_SYNTAX_LDC0_D, |
| 28971 | + AVR32_SYNTAX_LDC0_W, |
| 28972 | + AVR32_SYNTAX_LDCM_D, |
| 28973 | + AVR32_SYNTAX_LDCM_D_PU, |
| 28974 | + AVR32_SYNTAX_LDCM_W, |
| 28975 | + AVR32_SYNTAX_LDCM_W_PU, |
| 28976 | + AVR32_SYNTAX_LDDPC, |
| 28977 | + AVR32_SYNTAX_LDDPC_EXT, |
| 28978 | + AVR32_SYNTAX_LDDSP, |
| 28979 | + AVR32_SYNTAX_LDINS_B, |
| 28980 | + AVR32_SYNTAX_LDINS_H, |
| 28981 | + AVR32_SYNTAX_LDM, |
| 28982 | + AVR32_SYNTAX_LDMTS, |
| 28983 | + AVR32_SYNTAX_LDMTS_PU, |
| 28984 | + AVR32_SYNTAX_LDSWP_SH, |
| 28985 | + AVR32_SYNTAX_LDSWP_UH, |
| 28986 | + AVR32_SYNTAX_LDSWP_W, |
| 28987 | + AVR32_SYNTAX_LSL1, |
| 28988 | + AVR32_SYNTAX_LSL3, |
| 28989 | + AVR32_SYNTAX_LSL2, |
| 28990 | + AVR32_SYNTAX_LSR1, |
| 28991 | + AVR32_SYNTAX_LSR3, |
| 28992 | + AVR32_SYNTAX_LSR2, |
| 28993 | + AVR32_SYNTAX_MAC, |
| 28994 | + AVR32_SYNTAX_MACHH_D, |
| 28995 | + AVR32_SYNTAX_MACHH_W, |
| 28996 | + AVR32_SYNTAX_MACS_D, |
| 28997 | + AVR32_SYNTAX_MACSATHH_W, |
| 28998 | + AVR32_SYNTAX_MACUD, |
| 28999 | + AVR32_SYNTAX_MACWH_D, |
| 29000 | + AVR32_SYNTAX_MAX, |
| 29001 | + AVR32_SYNTAX_MCALL, |
| 29002 | + AVR32_SYNTAX_MFDR, |
| 29003 | + AVR32_SYNTAX_MFSR, |
| 29004 | + AVR32_SYNTAX_MIN, |
| 29005 | + AVR32_SYNTAX_MOV3, |
| 29006 | + AVR32_SYNTAX_MOV1, |
| 29007 | + AVR32_SYNTAX_MOV2, |
| 29008 | + AVR32_SYNTAX_MOVEQ1, |
| 29009 | + AVR32_SYNTAX_MOVNE1, |
| 29010 | + AVR32_SYNTAX_MOVCC1, |
| 29011 | + AVR32_SYNTAX_MOVCS1, |
| 29012 | + AVR32_SYNTAX_MOVGE1, |
| 29013 | + AVR32_SYNTAX_MOVLT1, |
| 29014 | + AVR32_SYNTAX_MOVMI1, |
| 29015 | + AVR32_SYNTAX_MOVPL1, |
| 29016 | + AVR32_SYNTAX_MOVLS1, |
| 29017 | + AVR32_SYNTAX_MOVGT1, |
| 29018 | + AVR32_SYNTAX_MOVLE1, |
| 29019 | + AVR32_SYNTAX_MOVHI1, |
| 29020 | + AVR32_SYNTAX_MOVVS1, |
| 29021 | + AVR32_SYNTAX_MOVVC1, |
| 29022 | + AVR32_SYNTAX_MOVQS1, |
| 29023 | + AVR32_SYNTAX_MOVAL1, |
| 29024 | + AVR32_SYNTAX_MOVHS1, |
| 29025 | + AVR32_SYNTAX_MOVLO1, |
| 29026 | + AVR32_SYNTAX_MOVEQ2, |
| 29027 | + AVR32_SYNTAX_MOVNE2, |
| 29028 | + AVR32_SYNTAX_MOVCC2, |
| 29029 | + AVR32_SYNTAX_MOVCS2, |
| 29030 | + AVR32_SYNTAX_MOVGE2, |
| 29031 | + AVR32_SYNTAX_MOVLT2, |
| 29032 | + AVR32_SYNTAX_MOVMI2, |
| 29033 | + AVR32_SYNTAX_MOVPL2, |
| 29034 | + AVR32_SYNTAX_MOVLS2, |
| 29035 | + AVR32_SYNTAX_MOVGT2, |
| 29036 | + AVR32_SYNTAX_MOVLE2, |
| 29037 | + AVR32_SYNTAX_MOVHI2, |
| 29038 | + AVR32_SYNTAX_MOVVS2, |
| 29039 | + AVR32_SYNTAX_MOVVC2, |
| 29040 | + AVR32_SYNTAX_MOVQS2, |
| 29041 | + AVR32_SYNTAX_MOVAL2, |
| 29042 | + AVR32_SYNTAX_MOVHS2, |
| 29043 | + AVR32_SYNTAX_MOVLO2, |
| 29044 | + AVR32_SYNTAX_MTDR, |
| 29045 | + AVR32_SYNTAX_MTSR, |
| 29046 | + AVR32_SYNTAX_MUL1, |
| 29047 | + AVR32_SYNTAX_MUL2, |
| 29048 | + AVR32_SYNTAX_MUL3, |
| 29049 | + AVR32_SYNTAX_MULHH_W, |
| 29050 | + AVR32_SYNTAX_MULNHH_W, |
| 29051 | + AVR32_SYNTAX_MULNWH_D, |
| 29052 | + AVR32_SYNTAX_MULSD, |
| 29053 | + AVR32_SYNTAX_MULSATHH_H, |
| 29054 | + AVR32_SYNTAX_MULSATHH_W, |
| 29055 | + AVR32_SYNTAX_MULSATRNDHH_H, |
| 29056 | + AVR32_SYNTAX_MULSATRNDWH_W, |
| 29057 | + AVR32_SYNTAX_MULSATWH_W, |
| 29058 | + AVR32_SYNTAX_MULU_D, |
| 29059 | + AVR32_SYNTAX_MULWH_D, |
| 29060 | + AVR32_SYNTAX_MUSFR, |
| 29061 | + AVR32_SYNTAX_MUSTR, |
| 29062 | + AVR32_SYNTAX_MVCR_D, |
| 29063 | + AVR32_SYNTAX_MVCR_W, |
| 29064 | + AVR32_SYNTAX_MVRC_D, |
| 29065 | + AVR32_SYNTAX_MVRC_W, |
| 29066 | + AVR32_SYNTAX_NEG, |
| 29067 | + AVR32_SYNTAX_NOP, |
| 29068 | + AVR32_SYNTAX_OR1, |
| 29069 | + AVR32_SYNTAX_OR2, |
| 29070 | + AVR32_SYNTAX_OR3, |
| 29071 | + AVR32_SYNTAX_ORH, |
| 29072 | + AVR32_SYNTAX_ORL, |
| 29073 | + AVR32_SYNTAX_PABS_SB, |
| 29074 | + AVR32_SYNTAX_PABS_SH, |
| 29075 | + AVR32_SYNTAX_PACKSH_SB, |
| 29076 | + AVR32_SYNTAX_PACKSH_UB, |
| 29077 | + AVR32_SYNTAX_PACKW_SH, |
| 29078 | + AVR32_SYNTAX_PADD_B, |
| 29079 | + AVR32_SYNTAX_PADD_H, |
| 29080 | + AVR32_SYNTAX_PADDH_SH, |
| 29081 | + AVR32_SYNTAX_PADDH_UB, |
| 29082 | + AVR32_SYNTAX_PADDS_SB, |
| 29083 | + AVR32_SYNTAX_PADDS_SH, |
| 29084 | + AVR32_SYNTAX_PADDS_UB, |
| 29085 | + AVR32_SYNTAX_PADDS_UH, |
| 29086 | + AVR32_SYNTAX_PADDSUB_H, |
| 29087 | + AVR32_SYNTAX_PADDSUBH_SH, |
| 29088 | + AVR32_SYNTAX_PADDSUBS_SH, |
| 29089 | + AVR32_SYNTAX_PADDSUBS_UH, |
| 29090 | + AVR32_SYNTAX_PADDX_H, |
| 29091 | + AVR32_SYNTAX_PADDXH_SH, |
| 29092 | + AVR32_SYNTAX_PADDXS_SH, |
| 29093 | + AVR32_SYNTAX_PADDXS_UH, |
| 29094 | + AVR32_SYNTAX_PASR_B, |
| 29095 | + AVR32_SYNTAX_PASR_H, |
| 29096 | + AVR32_SYNTAX_PAVG_SH, |
| 29097 | + AVR32_SYNTAX_PAVG_UB, |
| 29098 | + AVR32_SYNTAX_PLSL_B, |
| 29099 | + AVR32_SYNTAX_PLSL_H, |
| 29100 | + AVR32_SYNTAX_PLSR_B, |
| 29101 | + AVR32_SYNTAX_PLSR_H, |
| 29102 | + AVR32_SYNTAX_PMAX_SH, |
| 29103 | + AVR32_SYNTAX_PMAX_UB, |
| 29104 | + AVR32_SYNTAX_PMIN_SH, |
| 29105 | + AVR32_SYNTAX_PMIN_UB, |
| 29106 | + AVR32_SYNTAX_POPJC, |
| 29107 | + AVR32_SYNTAX_POPM, |
| 29108 | + AVR32_SYNTAX_POPM_E, |
| 29109 | + AVR32_SYNTAX_PREF, |
| 29110 | + AVR32_SYNTAX_PSAD, |
| 29111 | + AVR32_SYNTAX_PSUB_B, |
| 29112 | + AVR32_SYNTAX_PSUB_H, |
| 29113 | + AVR32_SYNTAX_PSUBADD_H, |
| 29114 | + AVR32_SYNTAX_PSUBADDH_SH, |
| 29115 | + AVR32_SYNTAX_PSUBADDS_SH, |
| 29116 | + AVR32_SYNTAX_PSUBADDS_UH, |
| 29117 | + AVR32_SYNTAX_PSUBH_SH, |
| 29118 | + AVR32_SYNTAX_PSUBH_UB, |
| 29119 | + AVR32_SYNTAX_PSUBS_SB, |
| 29120 | + AVR32_SYNTAX_PSUBS_SH, |
| 29121 | + AVR32_SYNTAX_PSUBS_UB, |
| 29122 | + AVR32_SYNTAX_PSUBS_UH, |
| 29123 | + AVR32_SYNTAX_PSUBX_H, |
| 29124 | + AVR32_SYNTAX_PSUBXH_SH, |
| 29125 | + AVR32_SYNTAX_PSUBXS_SH, |
| 29126 | + AVR32_SYNTAX_PSUBXS_UH, |
| 29127 | + AVR32_SYNTAX_PUNPCKSB_H, |
| 29128 | + AVR32_SYNTAX_PUNPCKUB_H, |
| 29129 | + AVR32_SYNTAX_PUSHJC, |
| 29130 | + AVR32_SYNTAX_PUSHM, |
| 29131 | + AVR32_SYNTAX_PUSHM_E, |
| 29132 | + AVR32_SYNTAX_RCALL1, |
| 29133 | + AVR32_SYNTAX_RCALL2, |
| 29134 | + AVR32_SYNTAX_RETEQ, |
| 29135 | + AVR32_SYNTAX_RETNE, |
| 29136 | + AVR32_SYNTAX_RETCC, |
| 29137 | + AVR32_SYNTAX_RETCS, |
| 29138 | + AVR32_SYNTAX_RETGE, |
| 29139 | + AVR32_SYNTAX_RETLT, |
| 29140 | + AVR32_SYNTAX_RETMI, |
| 29141 | + AVR32_SYNTAX_RETPL, |
| 29142 | + AVR32_SYNTAX_RETLS, |
| 29143 | + AVR32_SYNTAX_RETGT, |
| 29144 | + AVR32_SYNTAX_RETLE, |
| 29145 | + AVR32_SYNTAX_RETHI, |
| 29146 | + AVR32_SYNTAX_RETVS, |
| 29147 | + AVR32_SYNTAX_RETVC, |
| 29148 | + AVR32_SYNTAX_RETQS, |
| 29149 | + AVR32_SYNTAX_RETAL, |
| 29150 | + AVR32_SYNTAX_RETHS, |
| 29151 | + AVR32_SYNTAX_RETLO, |
| 29152 | + AVR32_SYNTAX_RETD, |
| 29153 | + AVR32_SYNTAX_RETE, |
| 29154 | + AVR32_SYNTAX_RETJ, |
| 29155 | + AVR32_SYNTAX_RETS, |
| 29156 | + AVR32_SYNTAX_RJMP, |
| 29157 | + AVR32_SYNTAX_ROL, |
| 29158 | + AVR32_SYNTAX_ROR, |
| 29159 | + AVR32_SYNTAX_RSUB1, |
| 29160 | + AVR32_SYNTAX_RSUB2, |
| 29161 | + AVR32_SYNTAX_SATADD_H, |
| 29162 | + AVR32_SYNTAX_SATADD_W, |
| 29163 | + AVR32_SYNTAX_SATRNDS, |
| 29164 | + AVR32_SYNTAX_SATRNDU, |
| 29165 | + AVR32_SYNTAX_SATS, |
| 29166 | + AVR32_SYNTAX_SATSUB_H, |
| 29167 | + AVR32_SYNTAX_SATSUB_W1, |
| 29168 | + AVR32_SYNTAX_SATSUB_W2, |
| 29169 | + AVR32_SYNTAX_SATU, |
| 29170 | + AVR32_SYNTAX_SBC, |
| 29171 | + AVR32_SYNTAX_SBR, |
| 29172 | + AVR32_SYNTAX_SCALL, |
| 29173 | + AVR32_SYNTAX_SCR, |
| 29174 | + AVR32_SYNTAX_SLEEP, |
| 29175 | + AVR32_SYNTAX_SREQ, |
| 29176 | + AVR32_SYNTAX_SRNE, |
| 29177 | + AVR32_SYNTAX_SRCC, |
| 29178 | + AVR32_SYNTAX_SRCS, |
| 29179 | + AVR32_SYNTAX_SRGE, |
| 29180 | + AVR32_SYNTAX_SRLT, |
| 29181 | + AVR32_SYNTAX_SRMI, |
| 29182 | + AVR32_SYNTAX_SRPL, |
| 29183 | + AVR32_SYNTAX_SRLS, |
| 29184 | + AVR32_SYNTAX_SRGT, |
| 29185 | + AVR32_SYNTAX_SRLE, |
| 29186 | + AVR32_SYNTAX_SRHI, |
| 29187 | + AVR32_SYNTAX_SRVS, |
| 29188 | + AVR32_SYNTAX_SRVC, |
| 29189 | + AVR32_SYNTAX_SRQS, |
| 29190 | + AVR32_SYNTAX_SRAL, |
| 29191 | + AVR32_SYNTAX_SRHS, |
| 29192 | + AVR32_SYNTAX_SRLO, |
| 29193 | + AVR32_SYNTAX_SSRF, |
| 29194 | + AVR32_SYNTAX_ST_B1, |
| 29195 | + AVR32_SYNTAX_ST_B2, |
| 29196 | + AVR32_SYNTAX_ST_B5, |
| 29197 | + AVR32_SYNTAX_ST_B3, |
| 29198 | + AVR32_SYNTAX_ST_B4, |
| 29199 | + AVR32_SYNTAX_ST_D1, |
| 29200 | + AVR32_SYNTAX_ST_D2, |
| 29201 | + AVR32_SYNTAX_ST_D3, |
| 29202 | + AVR32_SYNTAX_ST_D5, |
| 29203 | + AVR32_SYNTAX_ST_D4, |
| 29204 | + AVR32_SYNTAX_ST_H1, |
| 29205 | + AVR32_SYNTAX_ST_H2, |
| 29206 | + AVR32_SYNTAX_ST_H5, |
| 29207 | + AVR32_SYNTAX_ST_H3, |
| 29208 | + AVR32_SYNTAX_ST_H4, |
| 29209 | + AVR32_SYNTAX_ST_W1, |
| 29210 | + AVR32_SYNTAX_ST_W2, |
| 29211 | + AVR32_SYNTAX_ST_W5, |
| 29212 | + AVR32_SYNTAX_ST_W3, |
| 29213 | + AVR32_SYNTAX_ST_W4, |
| 29214 | + AVR32_SYNTAX_STC_D1, |
| 29215 | + AVR32_SYNTAX_STC_D2, |
| 29216 | + AVR32_SYNTAX_STC_D3, |
| 29217 | + AVR32_SYNTAX_STC_W1, |
| 29218 | + AVR32_SYNTAX_STC_W2, |
| 29219 | + AVR32_SYNTAX_STC_W3, |
| 29220 | + AVR32_SYNTAX_STC0_D, |
| 29221 | + AVR32_SYNTAX_STC0_W, |
| 29222 | + AVR32_SYNTAX_STCM_D, |
| 29223 | + AVR32_SYNTAX_STCM_D_PU, |
| 29224 | + AVR32_SYNTAX_STCM_W, |
| 29225 | + AVR32_SYNTAX_STCM_W_PU, |
| 29226 | + AVR32_SYNTAX_STCOND, |
| 29227 | + AVR32_SYNTAX_STDSP, |
| 29228 | + AVR32_SYNTAX_STHH_W2, |
| 29229 | + AVR32_SYNTAX_STHH_W1, |
| 29230 | + AVR32_SYNTAX_STM, |
| 29231 | + AVR32_SYNTAX_STM_PU, |
| 29232 | + AVR32_SYNTAX_STMTS, |
| 29233 | + AVR32_SYNTAX_STMTS_PU, |
| 29234 | + AVR32_SYNTAX_STSWP_H, |
| 29235 | + AVR32_SYNTAX_STSWP_W, |
| 29236 | + AVR32_SYNTAX_SUB1, |
| 29237 | + AVR32_SYNTAX_SUB2, |
| 29238 | + AVR32_SYNTAX_SUB5, |
| 29239 | + AVR32_SYNTAX_SUB3_SP, |
| 29240 | + AVR32_SYNTAX_SUB3, |
| 29241 | + AVR32_SYNTAX_SUB4, |
| 29242 | + AVR32_SYNTAX_SUBEQ, |
| 29243 | + AVR32_SYNTAX_SUBNE, |
| 29244 | + AVR32_SYNTAX_SUBCC, |
| 29245 | + AVR32_SYNTAX_SUBCS, |
| 29246 | + AVR32_SYNTAX_SUBGE, |
| 29247 | + AVR32_SYNTAX_SUBLT, |
| 29248 | + AVR32_SYNTAX_SUBMI, |
| 29249 | + AVR32_SYNTAX_SUBPL, |
| 29250 | + AVR32_SYNTAX_SUBLS, |
| 29251 | + AVR32_SYNTAX_SUBGT, |
| 29252 | + AVR32_SYNTAX_SUBLE, |
| 29253 | + AVR32_SYNTAX_SUBHI, |
| 29254 | + AVR32_SYNTAX_SUBVS, |
| 29255 | + AVR32_SYNTAX_SUBVC, |
| 29256 | + AVR32_SYNTAX_SUBQS, |
| 29257 | + AVR32_SYNTAX_SUBAL, |
| 29258 | + AVR32_SYNTAX_SUBHS, |
| 29259 | + AVR32_SYNTAX_SUBLO, |
| 29260 | + AVR32_SYNTAX_SUBFEQ, |
| 29261 | + AVR32_SYNTAX_SUBFNE, |
| 29262 | + AVR32_SYNTAX_SUBFCC, |
| 29263 | + AVR32_SYNTAX_SUBFCS, |
| 29264 | + AVR32_SYNTAX_SUBFGE, |
| 29265 | + AVR32_SYNTAX_SUBFLT, |
| 29266 | + AVR32_SYNTAX_SUBFMI, |
| 29267 | + AVR32_SYNTAX_SUBFPL, |
| 29268 | + AVR32_SYNTAX_SUBFLS, |
| 29269 | + AVR32_SYNTAX_SUBFGT, |
| 29270 | + AVR32_SYNTAX_SUBFLE, |
| 29271 | + AVR32_SYNTAX_SUBFHI, |
| 29272 | + AVR32_SYNTAX_SUBFVS, |
| 29273 | + AVR32_SYNTAX_SUBFVC, |
| 29274 | + AVR32_SYNTAX_SUBFQS, |
| 29275 | + AVR32_SYNTAX_SUBFAL, |
| 29276 | + AVR32_SYNTAX_SUBFHS, |
| 29277 | + AVR32_SYNTAX_SUBFLO, |
| 29278 | + AVR32_SYNTAX_SUBHH_W, |
| 29279 | + AVR32_SYNTAX_SWAP_B, |
| 29280 | + AVR32_SYNTAX_SWAP_BH, |
| 29281 | + AVR32_SYNTAX_SWAP_H, |
| 29282 | + AVR32_SYNTAX_SYNC, |
| 29283 | + AVR32_SYNTAX_TLBR, |
| 29284 | + AVR32_SYNTAX_TLBS, |
| 29285 | + AVR32_SYNTAX_TLBW, |
| 29286 | + AVR32_SYNTAX_TNBZ, |
| 29287 | + AVR32_SYNTAX_TST, |
| 29288 | + AVR32_SYNTAX_XCHG, |
| 29289 | + AVR32_SYNTAX_MEMC, |
| 29290 | + AVR32_SYNTAX_MEMS, |
| 29291 | + AVR32_SYNTAX_MEMT, |
| 29292 | + AVR32_SYNTAX_FMAC_S, |
| 29293 | + AVR32_SYNTAX_FNMAC_S, |
| 29294 | + AVR32_SYNTAX_FMSC_S, |
| 29295 | + AVR32_SYNTAX_FNMSC_S, |
| 29296 | + AVR32_SYNTAX_FMUL_S, |
| 29297 | + AVR32_SYNTAX_FNMUL_S, |
| 29298 | + AVR32_SYNTAX_FADD_S, |
| 29299 | + AVR32_SYNTAX_FSUB_S, |
| 29300 | + AVR32_SYNTAX_FCASTRS_SW, |
| 29301 | + AVR32_SYNTAX_FCASTRS_UW, |
| 29302 | + AVR32_SYNTAX_FCASTSW_S, |
| 29303 | + AVR32_SYNTAX_FCASTUW_S, |
| 29304 | + AVR32_SYNTAX_FCMP_S, |
| 29305 | + AVR32_SYNTAX_FCHK_S, |
| 29306 | + AVR32_SYNTAX_FRCPA_S, |
| 29307 | + AVR32_SYNTAX_FRSQRTA_S, |
| 29308 | + AVR32_SYNTAX_LDA_W, |
| 29309 | + AVR32_SYNTAX_CALL, |
| 29310 | + AVR32_SYNTAX_PICOSVMAC0, |
| 29311 | + AVR32_SYNTAX_PICOSVMAC1, |
| 29312 | + AVR32_SYNTAX_PICOSVMAC2, |
| 29313 | + AVR32_SYNTAX_PICOSVMAC3, |
| 29314 | + AVR32_SYNTAX_PICOSVMUL0, |
| 29315 | + AVR32_SYNTAX_PICOSVMUL1, |
| 29316 | + AVR32_SYNTAX_PICOSVMUL2, |
| 29317 | + AVR32_SYNTAX_PICOSVMUL3, |
| 29318 | + AVR32_SYNTAX_PICOVMAC0, |
| 29319 | + AVR32_SYNTAX_PICOVMAC1, |
| 29320 | + AVR32_SYNTAX_PICOVMAC2, |
| 29321 | + AVR32_SYNTAX_PICOVMAC3, |
| 29322 | + AVR32_SYNTAX_PICOVMUL0, |
| 29323 | + AVR32_SYNTAX_PICOVMUL1, |
| 29324 | + AVR32_SYNTAX_PICOVMUL2, |
| 29325 | + AVR32_SYNTAX_PICOVMUL3, |
| 29326 | + AVR32_SYNTAX_PICOLD_D2, |
| 29327 | + AVR32_SYNTAX_PICOLD_D3, |
| 29328 | + AVR32_SYNTAX_PICOLD_D1, |
| 29329 | + AVR32_SYNTAX_PICOLD_W2, |
| 29330 | + AVR32_SYNTAX_PICOLD_W3, |
| 29331 | + AVR32_SYNTAX_PICOLD_W1, |
| 29332 | + AVR32_SYNTAX_PICOLDM_D, |
| 29333 | + AVR32_SYNTAX_PICOLDM_D_PU, |
| 29334 | + AVR32_SYNTAX_PICOLDM_W, |
| 29335 | + AVR32_SYNTAX_PICOLDM_W_PU, |
| 29336 | + AVR32_SYNTAX_PICOMV_D1, |
| 29337 | + AVR32_SYNTAX_PICOMV_D2, |
| 29338 | + AVR32_SYNTAX_PICOMV_W1, |
| 29339 | + AVR32_SYNTAX_PICOMV_W2, |
| 29340 | + AVR32_SYNTAX_PICOST_D2, |
| 29341 | + AVR32_SYNTAX_PICOST_D3, |
| 29342 | + AVR32_SYNTAX_PICOST_D1, |
| 29343 | + AVR32_SYNTAX_PICOST_W2, |
| 29344 | + AVR32_SYNTAX_PICOST_W3, |
| 29345 | + AVR32_SYNTAX_PICOST_W1, |
| 29346 | + AVR32_SYNTAX_PICOSTM_D, |
| 29347 | + AVR32_SYNTAX_PICOSTM_D_PU, |
| 29348 | + AVR32_SYNTAX_PICOSTM_W, |
| 29349 | + AVR32_SYNTAX_PICOSTM_W_PU, |
| 29350 | + AVR32_SYNTAX_RSUBEQ, |
| 29351 | + AVR32_SYNTAX_RSUBNE, |
| 29352 | + AVR32_SYNTAX_RSUBCC, |
| 29353 | + AVR32_SYNTAX_RSUBCS, |
| 29354 | + AVR32_SYNTAX_RSUBGE, |
| 29355 | + AVR32_SYNTAX_RSUBLT, |
| 29356 | + AVR32_SYNTAX_RSUBMI, |
| 29357 | + AVR32_SYNTAX_RSUBPL, |
| 29358 | + AVR32_SYNTAX_RSUBLS, |
| 29359 | + AVR32_SYNTAX_RSUBGT, |
| 29360 | + AVR32_SYNTAX_RSUBLE, |
| 29361 | + AVR32_SYNTAX_RSUBHI, |
| 29362 | + AVR32_SYNTAX_RSUBVS, |
| 29363 | + AVR32_SYNTAX_RSUBVC, |
| 29364 | + AVR32_SYNTAX_RSUBQS, |
| 29365 | + AVR32_SYNTAX_RSUBAL, |
| 29366 | + AVR32_SYNTAX_RSUBHS, |
| 29367 | + AVR32_SYNTAX_RSUBLO, |
| 29368 | + AVR32_SYNTAX_ADDEQ, |
| 29369 | + AVR32_SYNTAX_ADDNE, |
| 29370 | + AVR32_SYNTAX_ADDCC, |
| 29371 | + AVR32_SYNTAX_ADDCS, |
| 29372 | + AVR32_SYNTAX_ADDGE, |
| 29373 | + AVR32_SYNTAX_ADDLT, |
| 29374 | + AVR32_SYNTAX_ADDMI, |
| 29375 | + AVR32_SYNTAX_ADDPL, |
| 29376 | + AVR32_SYNTAX_ADDLS, |
| 29377 | + AVR32_SYNTAX_ADDGT, |
| 29378 | + AVR32_SYNTAX_ADDLE, |
| 29379 | + AVR32_SYNTAX_ADDHI, |
| 29380 | + AVR32_SYNTAX_ADDVS, |
| 29381 | + AVR32_SYNTAX_ADDVC, |
| 29382 | + AVR32_SYNTAX_ADDQS, |
| 29383 | + AVR32_SYNTAX_ADDAL, |
| 29384 | + AVR32_SYNTAX_ADDHS, |
| 29385 | + AVR32_SYNTAX_ADDLO, |
| 29386 | + AVR32_SYNTAX_SUB2EQ, |
| 29387 | + AVR32_SYNTAX_SUB2NE, |
| 29388 | + AVR32_SYNTAX_SUB2CC, |
| 29389 | + AVR32_SYNTAX_SUB2CS, |
| 29390 | + AVR32_SYNTAX_SUB2GE, |
| 29391 | + AVR32_SYNTAX_SUB2LT, |
| 29392 | + AVR32_SYNTAX_SUB2MI, |
| 29393 | + AVR32_SYNTAX_SUB2PL, |
| 29394 | + AVR32_SYNTAX_SUB2LS, |
| 29395 | + AVR32_SYNTAX_SUB2GT, |
| 29396 | + AVR32_SYNTAX_SUB2LE, |
| 29397 | + AVR32_SYNTAX_SUB2HI, |
| 29398 | + AVR32_SYNTAX_SUB2VS, |
| 29399 | + AVR32_SYNTAX_SUB2VC, |
| 29400 | + AVR32_SYNTAX_SUB2QS, |
| 29401 | + AVR32_SYNTAX_SUB2AL, |
| 29402 | + AVR32_SYNTAX_SUB2HS, |
| 29403 | + AVR32_SYNTAX_SUB2LO, |
| 29404 | + AVR32_SYNTAX_ANDEQ, |
| 29405 | + AVR32_SYNTAX_ANDNE, |
| 29406 | + AVR32_SYNTAX_ANDCC, |
| 29407 | + AVR32_SYNTAX_ANDCS, |
| 29408 | + AVR32_SYNTAX_ANDGE, |
| 29409 | + AVR32_SYNTAX_ANDLT, |
| 29410 | + AVR32_SYNTAX_ANDMI, |
| 29411 | + AVR32_SYNTAX_ANDPL, |
| 29412 | + AVR32_SYNTAX_ANDLS, |
| 29413 | + AVR32_SYNTAX_ANDGT, |
| 29414 | + AVR32_SYNTAX_ANDLE, |
| 29415 | + AVR32_SYNTAX_ANDHI, |
| 29416 | + AVR32_SYNTAX_ANDVS, |
| 29417 | + AVR32_SYNTAX_ANDVC, |
| 29418 | + AVR32_SYNTAX_ANDQS, |
| 29419 | + AVR32_SYNTAX_ANDAL, |
| 29420 | + AVR32_SYNTAX_ANDHS, |
| 29421 | + AVR32_SYNTAX_ANDLO, |
| 29422 | + AVR32_SYNTAX_OREQ, |
| 29423 | + AVR32_SYNTAX_ORNE, |
| 29424 | + AVR32_SYNTAX_ORCC, |
| 29425 | + AVR32_SYNTAX_ORCS, |
| 29426 | + AVR32_SYNTAX_ORGE, |
| 29427 | + AVR32_SYNTAX_ORLT, |
| 29428 | + AVR32_SYNTAX_ORMI, |
| 29429 | + AVR32_SYNTAX_ORPL, |
| 29430 | + AVR32_SYNTAX_ORLS, |
| 29431 | + AVR32_SYNTAX_ORGT, |
| 29432 | + AVR32_SYNTAX_ORLE, |
| 29433 | + AVR32_SYNTAX_ORHI, |
| 29434 | + AVR32_SYNTAX_ORVS, |
| 29435 | + AVR32_SYNTAX_ORVC, |
| 29436 | + AVR32_SYNTAX_ORQS, |
| 29437 | + AVR32_SYNTAX_ORAL, |
| 29438 | + AVR32_SYNTAX_ORHS, |
| 29439 | + AVR32_SYNTAX_ORLO, |
| 29440 | + AVR32_SYNTAX_EOREQ, |
| 29441 | + AVR32_SYNTAX_EORNE, |
| 29442 | + AVR32_SYNTAX_EORCC, |
| 29443 | + AVR32_SYNTAX_EORCS, |
| 29444 | + AVR32_SYNTAX_EORGE, |
| 29445 | + AVR32_SYNTAX_EORLT, |
| 29446 | + AVR32_SYNTAX_EORMI, |
| 29447 | + AVR32_SYNTAX_EORPL, |
| 29448 | + AVR32_SYNTAX_EORLS, |
| 29449 | + AVR32_SYNTAX_EORGT, |
| 29450 | + AVR32_SYNTAX_EORLE, |
| 29451 | + AVR32_SYNTAX_EORHI, |
| 29452 | + AVR32_SYNTAX_EORVS, |
| 29453 | + AVR32_SYNTAX_EORVC, |
| 29454 | + AVR32_SYNTAX_EORQS, |
| 29455 | + AVR32_SYNTAX_EORAL, |
| 29456 | + AVR32_SYNTAX_EORHS, |
| 29457 | + AVR32_SYNTAX_EORLO, |
| 29458 | + AVR32_SYNTAX_LD_WEQ, |
| 29459 | + AVR32_SYNTAX_LD_WNE, |
| 29460 | + AVR32_SYNTAX_LD_WCC, |
| 29461 | + AVR32_SYNTAX_LD_WCS, |
| 29462 | + AVR32_SYNTAX_LD_WGE, |
| 29463 | + AVR32_SYNTAX_LD_WLT, |
| 29464 | + AVR32_SYNTAX_LD_WMI, |
| 29465 | + AVR32_SYNTAX_LD_WPL, |
| 29466 | + AVR32_SYNTAX_LD_WLS, |
| 29467 | + AVR32_SYNTAX_LD_WGT, |
| 29468 | + AVR32_SYNTAX_LD_WLE, |
| 29469 | + AVR32_SYNTAX_LD_WHI, |
| 29470 | + AVR32_SYNTAX_LD_WVS, |
| 29471 | + AVR32_SYNTAX_LD_WVC, |
| 29472 | + AVR32_SYNTAX_LD_WQS, |
| 29473 | + AVR32_SYNTAX_LD_WAL, |
| 29474 | + AVR32_SYNTAX_LD_WHS, |
| 29475 | + AVR32_SYNTAX_LD_WLO, |
| 29476 | + AVR32_SYNTAX_LD_SHEQ, |
| 29477 | + AVR32_SYNTAX_LD_SHNE, |
| 29478 | + AVR32_SYNTAX_LD_SHCC, |
| 29479 | + AVR32_SYNTAX_LD_SHCS, |
| 29480 | + AVR32_SYNTAX_LD_SHGE, |
| 29481 | + AVR32_SYNTAX_LD_SHLT, |
| 29482 | + AVR32_SYNTAX_LD_SHMI, |
| 29483 | + AVR32_SYNTAX_LD_SHPL, |
| 29484 | + AVR32_SYNTAX_LD_SHLS, |
| 29485 | + AVR32_SYNTAX_LD_SHGT, |
| 29486 | + AVR32_SYNTAX_LD_SHLE, |
| 29487 | + AVR32_SYNTAX_LD_SHHI, |
| 29488 | + AVR32_SYNTAX_LD_SHVS, |
| 29489 | + AVR32_SYNTAX_LD_SHVC, |
| 29490 | + AVR32_SYNTAX_LD_SHQS, |
| 29491 | + AVR32_SYNTAX_LD_SHAL, |
| 29492 | + AVR32_SYNTAX_LD_SHHS, |
| 29493 | + AVR32_SYNTAX_LD_SHLO, |
| 29494 | + AVR32_SYNTAX_LD_UHEQ, |
| 29495 | + AVR32_SYNTAX_LD_UHNE, |
| 29496 | + AVR32_SYNTAX_LD_UHCC, |
| 29497 | + AVR32_SYNTAX_LD_UHCS, |
| 29498 | + AVR32_SYNTAX_LD_UHGE, |
| 29499 | + AVR32_SYNTAX_LD_UHLT, |
| 29500 | + AVR32_SYNTAX_LD_UHMI, |
| 29501 | + AVR32_SYNTAX_LD_UHPL, |
| 29502 | + AVR32_SYNTAX_LD_UHLS, |
| 29503 | + AVR32_SYNTAX_LD_UHGT, |
| 29504 | + AVR32_SYNTAX_LD_UHLE, |
| 29505 | + AVR32_SYNTAX_LD_UHHI, |
| 29506 | + AVR32_SYNTAX_LD_UHVS, |
| 29507 | + AVR32_SYNTAX_LD_UHVC, |
| 29508 | + AVR32_SYNTAX_LD_UHQS, |
| 29509 | + AVR32_SYNTAX_LD_UHAL, |
| 29510 | + AVR32_SYNTAX_LD_UHHS, |
| 29511 | + AVR32_SYNTAX_LD_UHLO, |
| 29512 | + AVR32_SYNTAX_LD_SBEQ, |
| 29513 | + AVR32_SYNTAX_LD_SBNE, |
| 29514 | + AVR32_SYNTAX_LD_SBCC, |
| 29515 | + AVR32_SYNTAX_LD_SBCS, |
| 29516 | + AVR32_SYNTAX_LD_SBGE, |
| 29517 | + AVR32_SYNTAX_LD_SBLT, |
| 29518 | + AVR32_SYNTAX_LD_SBMI, |
| 29519 | + AVR32_SYNTAX_LD_SBPL, |
| 29520 | + AVR32_SYNTAX_LD_SBLS, |
| 29521 | + AVR32_SYNTAX_LD_SBGT, |
| 29522 | + AVR32_SYNTAX_LD_SBLE, |
| 29523 | + AVR32_SYNTAX_LD_SBHI, |
| 29524 | + AVR32_SYNTAX_LD_SBVS, |
| 29525 | + AVR32_SYNTAX_LD_SBVC, |
| 29526 | + AVR32_SYNTAX_LD_SBQS, |
| 29527 | + AVR32_SYNTAX_LD_SBAL, |
| 29528 | + AVR32_SYNTAX_LD_SBHS, |
| 29529 | + AVR32_SYNTAX_LD_SBLO, |
| 29530 | + AVR32_SYNTAX_LD_UBEQ, |
| 29531 | + AVR32_SYNTAX_LD_UBNE, |
| 29532 | + AVR32_SYNTAX_LD_UBCC, |
| 29533 | + AVR32_SYNTAX_LD_UBCS, |
| 29534 | + AVR32_SYNTAX_LD_UBGE, |
| 29535 | + AVR32_SYNTAX_LD_UBLT, |
| 29536 | + AVR32_SYNTAX_LD_UBMI, |
| 29537 | + AVR32_SYNTAX_LD_UBPL, |
| 29538 | + AVR32_SYNTAX_LD_UBLS, |
| 29539 | + AVR32_SYNTAX_LD_UBGT, |
| 29540 | + AVR32_SYNTAX_LD_UBLE, |
| 29541 | + AVR32_SYNTAX_LD_UBHI, |
| 29542 | + AVR32_SYNTAX_LD_UBVS, |
| 29543 | + AVR32_SYNTAX_LD_UBVC, |
| 29544 | + AVR32_SYNTAX_LD_UBQS, |
| 29545 | + AVR32_SYNTAX_LD_UBAL, |
| 29546 | + AVR32_SYNTAX_LD_UBHS, |
| 29547 | + AVR32_SYNTAX_LD_UBLO, |
| 29548 | + AVR32_SYNTAX_ST_WEQ, |
| 29549 | + AVR32_SYNTAX_ST_WNE, |
| 29550 | + AVR32_SYNTAX_ST_WCC, |
| 29551 | + AVR32_SYNTAX_ST_WCS, |
| 29552 | + AVR32_SYNTAX_ST_WGE, |
| 29553 | + AVR32_SYNTAX_ST_WLT, |
| 29554 | + AVR32_SYNTAX_ST_WMI, |
| 29555 | + AVR32_SYNTAX_ST_WPL, |
| 29556 | + AVR32_SYNTAX_ST_WLS, |
| 29557 | + AVR32_SYNTAX_ST_WGT, |
| 29558 | + AVR32_SYNTAX_ST_WLE, |
| 29559 | + AVR32_SYNTAX_ST_WHI, |
| 29560 | + AVR32_SYNTAX_ST_WVS, |
| 29561 | + AVR32_SYNTAX_ST_WVC, |
| 29562 | + AVR32_SYNTAX_ST_WQS, |
| 29563 | + AVR32_SYNTAX_ST_WAL, |
| 29564 | + AVR32_SYNTAX_ST_WHS, |
| 29565 | + AVR32_SYNTAX_ST_WLO, |
| 29566 | + AVR32_SYNTAX_ST_HEQ, |
| 29567 | + AVR32_SYNTAX_ST_HNE, |
| 29568 | + AVR32_SYNTAX_ST_HCC, |
| 29569 | + AVR32_SYNTAX_ST_HCS, |
| 29570 | + AVR32_SYNTAX_ST_HGE, |
| 29571 | + AVR32_SYNTAX_ST_HLT, |
| 29572 | + AVR32_SYNTAX_ST_HMI, |
| 29573 | + AVR32_SYNTAX_ST_HPL, |
| 29574 | + AVR32_SYNTAX_ST_HLS, |
| 29575 | + AVR32_SYNTAX_ST_HGT, |
| 29576 | + AVR32_SYNTAX_ST_HLE, |
| 29577 | + AVR32_SYNTAX_ST_HHI, |
| 29578 | + AVR32_SYNTAX_ST_HVS, |
| 29579 | + AVR32_SYNTAX_ST_HVC, |
| 29580 | + AVR32_SYNTAX_ST_HQS, |
| 29581 | + AVR32_SYNTAX_ST_HAL, |
| 29582 | + AVR32_SYNTAX_ST_HHS, |
| 29583 | + AVR32_SYNTAX_ST_HLO, |
| 29584 | + AVR32_SYNTAX_ST_BEQ, |
| 29585 | + AVR32_SYNTAX_ST_BNE, |
| 29586 | + AVR32_SYNTAX_ST_BCC, |
| 29587 | + AVR32_SYNTAX_ST_BCS, |
| 29588 | + AVR32_SYNTAX_ST_BGE, |
| 29589 | + AVR32_SYNTAX_ST_BLT, |
| 29590 | + AVR32_SYNTAX_ST_BMI, |
| 29591 | + AVR32_SYNTAX_ST_BPL, |
| 29592 | + AVR32_SYNTAX_ST_BLS, |
| 29593 | + AVR32_SYNTAX_ST_BGT, |
| 29594 | + AVR32_SYNTAX_ST_BLE, |
| 29595 | + AVR32_SYNTAX_ST_BHI, |
| 29596 | + AVR32_SYNTAX_ST_BVS, |
| 29597 | + AVR32_SYNTAX_ST_BVC, |
| 29598 | + AVR32_SYNTAX_ST_BQS, |
| 29599 | + AVR32_SYNTAX_ST_BAL, |
| 29600 | + AVR32_SYNTAX_ST_BHS, |
| 29601 | + AVR32_SYNTAX_ST_BLO, |
| 29602 | + AVR32_SYNTAX_MOVH, |
| 29603 | + AVR32_SYNTAX__END_ |
| 29604 | +}; |
| 29605 | +#define AVR32_NR_SYNTAX AVR32_SYNTAX__END_ |
| 29606 | + |
| 29607 | +enum avr32_alias_type |
| 29608 | + { |
| 29609 | + AVR32_ALIAS_PICOSVMAC0, |
| 29610 | + AVR32_ALIAS_PICOSVMAC1, |
| 29611 | + AVR32_ALIAS_PICOSVMAC2, |
| 29612 | + AVR32_ALIAS_PICOSVMAC3, |
| 29613 | + AVR32_ALIAS_PICOSVMUL0, |
| 29614 | + AVR32_ALIAS_PICOSVMUL1, |
| 29615 | + AVR32_ALIAS_PICOSVMUL2, |
| 29616 | + AVR32_ALIAS_PICOSVMUL3, |
| 29617 | + AVR32_ALIAS_PICOVMAC0, |
| 29618 | + AVR32_ALIAS_PICOVMAC1, |
| 29619 | + AVR32_ALIAS_PICOVMAC2, |
| 29620 | + AVR32_ALIAS_PICOVMAC3, |
| 29621 | + AVR32_ALIAS_PICOVMUL0, |
| 29622 | + AVR32_ALIAS_PICOVMUL1, |
| 29623 | + AVR32_ALIAS_PICOVMUL2, |
| 29624 | + AVR32_ALIAS_PICOVMUL3, |
| 29625 | + AVR32_ALIAS_PICOLD_D1, |
| 29626 | + AVR32_ALIAS_PICOLD_D2, |
| 29627 | + AVR32_ALIAS_PICOLD_D3, |
| 29628 | + AVR32_ALIAS_PICOLD_W1, |
| 29629 | + AVR32_ALIAS_PICOLD_W2, |
| 29630 | + AVR32_ALIAS_PICOLD_W3, |
| 29631 | + AVR32_ALIAS_PICOLDM_D, |
| 29632 | + AVR32_ALIAS_PICOLDM_D_PU, |
| 29633 | + AVR32_ALIAS_PICOLDM_W, |
| 29634 | + AVR32_ALIAS_PICOLDM_W_PU, |
| 29635 | + AVR32_ALIAS_PICOMV_D1, |
| 29636 | + AVR32_ALIAS_PICOMV_D2, |
| 29637 | + AVR32_ALIAS_PICOMV_W1, |
| 29638 | + AVR32_ALIAS_PICOMV_W2, |
| 29639 | + AVR32_ALIAS_PICOST_D1, |
| 29640 | + AVR32_ALIAS_PICOST_D2, |
| 29641 | + AVR32_ALIAS_PICOST_D3, |
| 29642 | + AVR32_ALIAS_PICOST_W1, |
| 29643 | + AVR32_ALIAS_PICOST_W2, |
| 29644 | + AVR32_ALIAS_PICOST_W3, |
| 29645 | + AVR32_ALIAS_PICOSTM_D, |
| 29646 | + AVR32_ALIAS_PICOSTM_D_PU, |
| 29647 | + AVR32_ALIAS_PICOSTM_W, |
| 29648 | + AVR32_ALIAS_PICOSTM_W_PU, |
| 29649 | + AVR32_ALIAS__END_ |
| 29650 | + }; |
| 29651 | +#define AVR32_NR_ALIAS AVR32_ALIAS__END_ |
| 29652 | + |
| 29653 | +enum avr32_mnemonic_type |
| 29654 | +{ |
| 29655 | + AVR32_MNEMONIC_ABS, |
| 29656 | + AVR32_MNEMONIC_ACALL, |
| 29657 | + AVR32_MNEMONIC_ACR, |
| 29658 | + AVR32_MNEMONIC_ADC, |
| 29659 | + AVR32_MNEMONIC_ADD, |
| 29660 | + AVR32_MNEMONIC_ADDABS, |
| 29661 | + AVR32_MNEMONIC_ADDHH_W, |
| 29662 | + AVR32_MNEMONIC_AND, |
| 29663 | + AVR32_MNEMONIC_ANDH, |
| 29664 | + AVR32_MNEMONIC_ANDL, |
| 29665 | + AVR32_MNEMONIC_ANDN, |
| 29666 | + AVR32_MNEMONIC_ASR, |
| 29667 | + AVR32_MNEMONIC_BFEXTS, |
| 29668 | + AVR32_MNEMONIC_BFEXTU, |
| 29669 | + AVR32_MNEMONIC_BFINS, |
| 29670 | + AVR32_MNEMONIC_BLD, |
| 29671 | + AVR32_MNEMONIC_BREQ, |
| 29672 | + AVR32_MNEMONIC_BRNE, |
| 29673 | + AVR32_MNEMONIC_BRCC, |
| 29674 | + AVR32_MNEMONIC_BRCS, |
| 29675 | + AVR32_MNEMONIC_BRGE, |
| 29676 | + AVR32_MNEMONIC_BRLT, |
| 29677 | + AVR32_MNEMONIC_BRMI, |
| 29678 | + AVR32_MNEMONIC_BRPL, |
| 29679 | + AVR32_MNEMONIC_BRHS, |
| 29680 | + AVR32_MNEMONIC_BRLO, |
| 29681 | + AVR32_MNEMONIC_BRLS, |
| 29682 | + AVR32_MNEMONIC_BRGT, |
| 29683 | + AVR32_MNEMONIC_BRLE, |
| 29684 | + AVR32_MNEMONIC_BRHI, |
| 29685 | + AVR32_MNEMONIC_BRVS, |
| 29686 | + AVR32_MNEMONIC_BRVC, |
| 29687 | + AVR32_MNEMONIC_BRQS, |
| 29688 | + AVR32_MNEMONIC_BRAL, |
| 29689 | + AVR32_MNEMONIC_BREAKPOINT, |
| 29690 | + AVR32_MNEMONIC_BREV, |
| 29691 | + AVR32_MNEMONIC_BST, |
| 29692 | + AVR32_MNEMONIC_CACHE, |
| 29693 | + AVR32_MNEMONIC_CASTS_B, |
| 29694 | + AVR32_MNEMONIC_CASTS_H, |
| 29695 | + AVR32_MNEMONIC_CASTU_B, |
| 29696 | + AVR32_MNEMONIC_CASTU_H, |
| 29697 | + AVR32_MNEMONIC_CBR, |
| 29698 | + AVR32_MNEMONIC_CLZ, |
| 29699 | + AVR32_MNEMONIC_COM, |
| 29700 | + AVR32_MNEMONIC_COP, |
| 29701 | + AVR32_MNEMONIC_CP_B, |
| 29702 | + AVR32_MNEMONIC_CP_H, |
| 29703 | + AVR32_MNEMONIC_CP_W, |
| 29704 | + AVR32_MNEMONIC_CP, |
| 29705 | + AVR32_MNEMONIC_CPC, |
| 29706 | + AVR32_MNEMONIC_CSRF, |
| 29707 | + AVR32_MNEMONIC_CSRFCZ, |
| 29708 | + AVR32_MNEMONIC_DIVS, |
| 29709 | + AVR32_MNEMONIC_DIVU, |
| 29710 | + AVR32_MNEMONIC_EOR, |
| 29711 | + AVR32_MNEMONIC_EORL, |
| 29712 | + AVR32_MNEMONIC_EORH, |
| 29713 | + AVR32_MNEMONIC_FRS, |
| 29714 | + AVR32_MNEMONIC_SSCALL, |
| 29715 | + AVR32_MNEMONIC_RETSS, |
| 29716 | + AVR32_MNEMONIC_ICALL, |
| 29717 | + AVR32_MNEMONIC_INCJOSP, |
| 29718 | + AVR32_MNEMONIC_LD_D, |
| 29719 | + AVR32_MNEMONIC_LD_SB, |
| 29720 | + AVR32_MNEMONIC_LD_UB, |
| 29721 | + AVR32_MNEMONIC_LD_SH, |
| 29722 | + AVR32_MNEMONIC_LD_UH, |
| 29723 | + AVR32_MNEMONIC_LD_W, |
| 29724 | + AVR32_MNEMONIC_LDC_D, |
| 29725 | + AVR32_MNEMONIC_LDC_W, |
| 29726 | + AVR32_MNEMONIC_LDC0_D, |
| 29727 | + AVR32_MNEMONIC_LDC0_W, |
| 29728 | + AVR32_MNEMONIC_LDCM_D, |
| 29729 | + AVR32_MNEMONIC_LDCM_W, |
| 29730 | + AVR32_MNEMONIC_LDDPC, |
| 29731 | + AVR32_MNEMONIC_LDDSP, |
| 29732 | + AVR32_MNEMONIC_LDINS_B, |
| 29733 | + AVR32_MNEMONIC_LDINS_H, |
| 29734 | + AVR32_MNEMONIC_LDM, |
| 29735 | + AVR32_MNEMONIC_LDMTS, |
| 29736 | + AVR32_MNEMONIC_LDSWP_SH, |
| 29737 | + AVR32_MNEMONIC_LDSWP_UH, |
| 29738 | + AVR32_MNEMONIC_LDSWP_W, |
| 29739 | + AVR32_MNEMONIC_LSL, |
| 29740 | + AVR32_MNEMONIC_LSR, |
| 29741 | + AVR32_MNEMONIC_MAC, |
| 29742 | + AVR32_MNEMONIC_MACHH_D, |
| 29743 | + AVR32_MNEMONIC_MACHH_W, |
| 29744 | + AVR32_MNEMONIC_MACS_D, |
| 29745 | + AVR32_MNEMONIC_MACSATHH_W, |
| 29746 | + AVR32_MNEMONIC_MACU_D, |
| 29747 | + AVR32_MNEMONIC_MACWH_D, |
| 29748 | + AVR32_MNEMONIC_MAX, |
| 29749 | + AVR32_MNEMONIC_MCALL, |
| 29750 | + AVR32_MNEMONIC_MFDR, |
| 29751 | + AVR32_MNEMONIC_MFSR, |
| 29752 | + AVR32_MNEMONIC_MIN, |
| 29753 | + AVR32_MNEMONIC_MOV, |
| 29754 | + AVR32_MNEMONIC_MOVEQ, |
| 29755 | + AVR32_MNEMONIC_MOVNE, |
| 29756 | + AVR32_MNEMONIC_MOVCC, |
| 29757 | + AVR32_MNEMONIC_MOVCS, |
| 29758 | + AVR32_MNEMONIC_MOVGE, |
| 29759 | + AVR32_MNEMONIC_MOVLT, |
| 29760 | + AVR32_MNEMONIC_MOVMI, |
| 29761 | + AVR32_MNEMONIC_MOVPL, |
| 29762 | + AVR32_MNEMONIC_MOVLS, |
| 29763 | + AVR32_MNEMONIC_MOVGT, |
| 29764 | + AVR32_MNEMONIC_MOVLE, |
| 29765 | + AVR32_MNEMONIC_MOVHI, |
| 29766 | + AVR32_MNEMONIC_MOVVS, |
| 29767 | + AVR32_MNEMONIC_MOVVC, |
| 29768 | + AVR32_MNEMONIC_MOVQS, |
| 29769 | + AVR32_MNEMONIC_MOVAL, |
| 29770 | + AVR32_MNEMONIC_MOVHS, |
| 29771 | + AVR32_MNEMONIC_MOVLO, |
| 29772 | + AVR32_MNEMONIC_MTDR, |
| 29773 | + AVR32_MNEMONIC_MTSR, |
| 29774 | + AVR32_MNEMONIC_MUL, |
| 29775 | + AVR32_MNEMONIC_MULHH_W, |
| 29776 | + AVR32_MNEMONIC_MULNHH_W, |
| 29777 | + AVR32_MNEMONIC_MULNWH_D, |
| 29778 | + AVR32_MNEMONIC_MULS_D, |
| 29779 | + AVR32_MNEMONIC_MULSATHH_H, |
| 29780 | + AVR32_MNEMONIC_MULSATHH_W, |
| 29781 | + AVR32_MNEMONIC_MULSATRNDHH_H, |
| 29782 | + AVR32_MNEMONIC_MULSATRNDWH_W, |
| 29783 | + AVR32_MNEMONIC_MULSATWH_W, |
| 29784 | + AVR32_MNEMONIC_MULU_D, |
| 29785 | + AVR32_MNEMONIC_MULWH_D, |
| 29786 | + AVR32_MNEMONIC_MUSFR, |
| 29787 | + AVR32_MNEMONIC_MUSTR, |
| 29788 | + AVR32_MNEMONIC_MVCR_D, |
| 29789 | + AVR32_MNEMONIC_MVCR_W, |
| 29790 | + AVR32_MNEMONIC_MVRC_D, |
| 29791 | + AVR32_MNEMONIC_MVRC_W, |
| 29792 | + AVR32_MNEMONIC_NEG, |
| 29793 | + AVR32_MNEMONIC_NOP, |
| 29794 | + AVR32_MNEMONIC_OR, |
| 29795 | + AVR32_MNEMONIC_ORH, |
| 29796 | + AVR32_MNEMONIC_ORL, |
| 29797 | + AVR32_MNEMONIC_PABS_SB, |
| 29798 | + AVR32_MNEMONIC_PABS_SH, |
| 29799 | + AVR32_MNEMONIC_PACKSH_SB, |
| 29800 | + AVR32_MNEMONIC_PACKSH_UB, |
| 29801 | + AVR32_MNEMONIC_PACKW_SH, |
| 29802 | + AVR32_MNEMONIC_PADD_B, |
| 29803 | + AVR32_MNEMONIC_PADD_H, |
| 29804 | + AVR32_MNEMONIC_PADDH_SH, |
| 29805 | + AVR32_MNEMONIC_PADDH_UB, |
| 29806 | + AVR32_MNEMONIC_PADDS_SB, |
| 29807 | + AVR32_MNEMONIC_PADDS_SH, |
| 29808 | + AVR32_MNEMONIC_PADDS_UB, |
| 29809 | + AVR32_MNEMONIC_PADDS_UH, |
| 29810 | + AVR32_MNEMONIC_PADDSUB_H, |
| 29811 | + AVR32_MNEMONIC_PADDSUBH_SH, |
| 29812 | + AVR32_MNEMONIC_PADDSUBS_SH, |
| 29813 | + AVR32_MNEMONIC_PADDSUBS_UH, |
| 29814 | + AVR32_MNEMONIC_PADDX_H, |
| 29815 | + AVR32_MNEMONIC_PADDXH_SH, |
| 29816 | + AVR32_MNEMONIC_PADDXS_SH, |
| 29817 | + AVR32_MNEMONIC_PADDXS_UH, |
| 29818 | + AVR32_MNEMONIC_PASR_B, |
| 29819 | + AVR32_MNEMONIC_PASR_H, |
| 29820 | + AVR32_MNEMONIC_PAVG_SH, |
| 29821 | + AVR32_MNEMONIC_PAVG_UB, |
| 29822 | + AVR32_MNEMONIC_PLSL_B, |
| 29823 | + AVR32_MNEMONIC_PLSL_H, |
| 29824 | + AVR32_MNEMONIC_PLSR_B, |
| 29825 | + AVR32_MNEMONIC_PLSR_H, |
| 29826 | + AVR32_MNEMONIC_PMAX_SH, |
| 29827 | + AVR32_MNEMONIC_PMAX_UB, |
| 29828 | + AVR32_MNEMONIC_PMIN_SH, |
| 29829 | + AVR32_MNEMONIC_PMIN_UB, |
| 29830 | + AVR32_MNEMONIC_POPJC, |
| 29831 | + AVR32_MNEMONIC_POPM, |
| 29832 | + AVR32_MNEMONIC_PREF, |
| 29833 | + AVR32_MNEMONIC_PSAD, |
| 29834 | + AVR32_MNEMONIC_PSUB_B, |
| 29835 | + AVR32_MNEMONIC_PSUB_H, |
| 29836 | + AVR32_MNEMONIC_PSUBADD_H, |
| 29837 | + AVR32_MNEMONIC_PSUBADDH_SH, |
| 29838 | + AVR32_MNEMONIC_PSUBADDS_SH, |
| 29839 | + AVR32_MNEMONIC_PSUBADDS_UH, |
| 29840 | + AVR32_MNEMONIC_PSUBH_SH, |
| 29841 | + AVR32_MNEMONIC_PSUBH_UB, |
| 29842 | + AVR32_MNEMONIC_PSUBS_SB, |
| 29843 | + AVR32_MNEMONIC_PSUBS_SH, |
| 29844 | + AVR32_MNEMONIC_PSUBS_UB, |
| 29845 | + AVR32_MNEMONIC_PSUBS_UH, |
| 29846 | + AVR32_MNEMONIC_PSUBX_H, |
| 29847 | + AVR32_MNEMONIC_PSUBXH_SH, |
| 29848 | + AVR32_MNEMONIC_PSUBXS_SH, |
| 29849 | + AVR32_MNEMONIC_PSUBXS_UH, |
| 29850 | + AVR32_MNEMONIC_PUNPCKSB_H, |
| 29851 | + AVR32_MNEMONIC_PUNPCKUB_H, |
| 29852 | + AVR32_MNEMONIC_PUSHJC, |
| 29853 | + AVR32_MNEMONIC_PUSHM, |
| 29854 | + AVR32_MNEMONIC_RCALL, |
| 29855 | + AVR32_MNEMONIC_RETEQ, |
| 29856 | + AVR32_MNEMONIC_RETNE, |
| 29857 | + AVR32_MNEMONIC_RETCC, |
| 29858 | + AVR32_MNEMONIC_RETCS, |
| 29859 | + AVR32_MNEMONIC_RETGE, |
| 29860 | + AVR32_MNEMONIC_RETLT, |
| 29861 | + AVR32_MNEMONIC_RETMI, |
| 29862 | + AVR32_MNEMONIC_RETPL, |
| 29863 | + AVR32_MNEMONIC_RETLS, |
| 29864 | + AVR32_MNEMONIC_RETGT, |
| 29865 | + AVR32_MNEMONIC_RETLE, |
| 29866 | + AVR32_MNEMONIC_RETHI, |
| 29867 | + AVR32_MNEMONIC_RETVS, |
| 29868 | + AVR32_MNEMONIC_RETVC, |
| 29869 | + AVR32_MNEMONIC_RETQS, |
| 29870 | + AVR32_MNEMONIC_RETAL, |
| 29871 | + AVR32_MNEMONIC_RETHS, |
| 29872 | + AVR32_MNEMONIC_RETLO, |
| 29873 | + AVR32_MNEMONIC_RET, |
| 29874 | + AVR32_MNEMONIC_RETD, |
| 29875 | + AVR32_MNEMONIC_RETE, |
| 29876 | + AVR32_MNEMONIC_RETJ, |
| 29877 | + AVR32_MNEMONIC_RETS, |
| 29878 | + AVR32_MNEMONIC_RJMP, |
| 29879 | + AVR32_MNEMONIC_ROL, |
| 29880 | + AVR32_MNEMONIC_ROR, |
| 29881 | + AVR32_MNEMONIC_RSUB, |
| 29882 | + AVR32_MNEMONIC_SATADD_H, |
| 29883 | + AVR32_MNEMONIC_SATADD_W, |
| 29884 | + AVR32_MNEMONIC_SATRNDS, |
| 29885 | + AVR32_MNEMONIC_SATRNDU, |
| 29886 | + AVR32_MNEMONIC_SATS, |
| 29887 | + AVR32_MNEMONIC_SATSUB_H, |
| 29888 | + AVR32_MNEMONIC_SATSUB_W, |
| 29889 | + AVR32_MNEMONIC_SATU, |
| 29890 | + AVR32_MNEMONIC_SBC, |
| 29891 | + AVR32_MNEMONIC_SBR, |
| 29892 | + AVR32_MNEMONIC_SCALL, |
| 29893 | + AVR32_MNEMONIC_SCR, |
| 29894 | + AVR32_MNEMONIC_SLEEP, |
| 29895 | + AVR32_MNEMONIC_SREQ, |
| 29896 | + AVR32_MNEMONIC_SRNE, |
| 29897 | + AVR32_MNEMONIC_SRCC, |
| 29898 | + AVR32_MNEMONIC_SRCS, |
| 29899 | + AVR32_MNEMONIC_SRGE, |
| 29900 | + AVR32_MNEMONIC_SRLT, |
| 29901 | + AVR32_MNEMONIC_SRMI, |
| 29902 | + AVR32_MNEMONIC_SRPL, |
| 29903 | + AVR32_MNEMONIC_SRLS, |
| 29904 | + AVR32_MNEMONIC_SRGT, |
| 29905 | + AVR32_MNEMONIC_SRLE, |
| 29906 | + AVR32_MNEMONIC_SRHI, |
| 29907 | + AVR32_MNEMONIC_SRVS, |
| 29908 | + AVR32_MNEMONIC_SRVC, |
| 29909 | + AVR32_MNEMONIC_SRQS, |
| 29910 | + AVR32_MNEMONIC_SRAL, |
| 29911 | + AVR32_MNEMONIC_SRHS, |
| 29912 | + AVR32_MNEMONIC_SRLO, |
| 29913 | + AVR32_MNEMONIC_SSRF, |
| 29914 | + AVR32_MNEMONIC_ST_B, |
| 29915 | + AVR32_MNEMONIC_ST_D, |
| 29916 | + AVR32_MNEMONIC_ST_H, |
| 29917 | + AVR32_MNEMONIC_ST_W, |
| 29918 | + AVR32_MNEMONIC_STC_D, |
| 29919 | + AVR32_MNEMONIC_STC_W, |
| 29920 | + AVR32_MNEMONIC_STC0_D, |
| 29921 | + AVR32_MNEMONIC_STC0_W, |
| 29922 | + AVR32_MNEMONIC_STCM_D, |
| 29923 | + AVR32_MNEMONIC_STCM_W, |
| 29924 | + AVR32_MNEMONIC_STCOND, |
| 29925 | + AVR32_MNEMONIC_STDSP, |
| 29926 | + AVR32_MNEMONIC_STHH_W, |
| 29927 | + AVR32_MNEMONIC_STM, |
| 29928 | + AVR32_MNEMONIC_STMTS, |
| 29929 | + AVR32_MNEMONIC_STSWP_H, |
| 29930 | + AVR32_MNEMONIC_STSWP_W, |
| 29931 | + AVR32_MNEMONIC_SUB, |
| 29932 | + AVR32_MNEMONIC_SUBEQ, |
| 29933 | + AVR32_MNEMONIC_SUBNE, |
| 29934 | + AVR32_MNEMONIC_SUBCC, |
| 29935 | + AVR32_MNEMONIC_SUBCS, |
| 29936 | + AVR32_MNEMONIC_SUBGE, |
| 29937 | + AVR32_MNEMONIC_SUBLT, |
| 29938 | + AVR32_MNEMONIC_SUBMI, |
| 29939 | + AVR32_MNEMONIC_SUBPL, |
| 29940 | + AVR32_MNEMONIC_SUBLS, |
| 29941 | + AVR32_MNEMONIC_SUBGT, |
| 29942 | + AVR32_MNEMONIC_SUBLE, |
| 29943 | + AVR32_MNEMONIC_SUBHI, |
| 29944 | + AVR32_MNEMONIC_SUBVS, |
| 29945 | + AVR32_MNEMONIC_SUBVC, |
| 29946 | + AVR32_MNEMONIC_SUBQS, |
| 29947 | + AVR32_MNEMONIC_SUBAL, |
| 29948 | + AVR32_MNEMONIC_SUBHS, |
| 29949 | + AVR32_MNEMONIC_SUBLO, |
| 29950 | + AVR32_MNEMONIC_SUBFEQ, |
| 29951 | + AVR32_MNEMONIC_SUBFNE, |
| 29952 | + AVR32_MNEMONIC_SUBFCC, |
| 29953 | + AVR32_MNEMONIC_SUBFCS, |
| 29954 | + AVR32_MNEMONIC_SUBFGE, |
| 29955 | + AVR32_MNEMONIC_SUBFLT, |
| 29956 | + AVR32_MNEMONIC_SUBFMI, |
| 29957 | + AVR32_MNEMONIC_SUBFPL, |
| 29958 | + AVR32_MNEMONIC_SUBFLS, |
| 29959 | + AVR32_MNEMONIC_SUBFGT, |
| 29960 | + AVR32_MNEMONIC_SUBFLE, |
| 29961 | + AVR32_MNEMONIC_SUBFHI, |
| 29962 | + AVR32_MNEMONIC_SUBFVS, |
| 29963 | + AVR32_MNEMONIC_SUBFVC, |
| 29964 | + AVR32_MNEMONIC_SUBFQS, |
| 29965 | + AVR32_MNEMONIC_SUBFAL, |
| 29966 | + AVR32_MNEMONIC_SUBFHS, |
| 29967 | + AVR32_MNEMONIC_SUBFLO, |
| 29968 | + AVR32_MNEMONIC_SUBHH_W, |
| 29969 | + AVR32_MNEMONIC_SWAP_B, |
| 29970 | + AVR32_MNEMONIC_SWAP_BH, |
| 29971 | + AVR32_MNEMONIC_SWAP_H, |
| 29972 | + AVR32_MNEMONIC_SYNC, |
| 29973 | + AVR32_MNEMONIC_TLBR, |
| 29974 | + AVR32_MNEMONIC_TLBS, |
| 29975 | + AVR32_MNEMONIC_TLBW, |
| 29976 | + AVR32_MNEMONIC_TNBZ, |
| 29977 | + AVR32_MNEMONIC_TST, |
| 29978 | + AVR32_MNEMONIC_XCHG, |
| 29979 | + AVR32_MNEMONIC_MEMC, |
| 29980 | + AVR32_MNEMONIC_MEMS, |
| 29981 | + AVR32_MNEMONIC_MEMT, |
| 29982 | + AVR32_MNEMONIC_FMAC_S, |
| 29983 | + AVR32_MNEMONIC_FNMAC_S, |
| 29984 | + AVR32_MNEMONIC_FMSC_S, |
| 29985 | + AVR32_MNEMONIC_FNMSC_S, |
| 29986 | + AVR32_MNEMONIC_FMUL_S, |
| 29987 | + AVR32_MNEMONIC_FNMUL_S, |
| 29988 | + AVR32_MNEMONIC_FADD_S, |
| 29989 | + AVR32_MNEMONIC_FSUB_S, |
| 29990 | + AVR32_MNEMONIC_FCASTRS_SW, |
| 29991 | + AVR32_MNEMONIC_FCASTRS_UW, |
| 29992 | + AVR32_MNEMONIC_FCASTSW_S, |
| 29993 | + AVR32_MNEMONIC_FCASTUW_S, |
| 29994 | + AVR32_MNEMONIC_FCMP_S, |
| 29995 | + AVR32_MNEMONIC_FCHK_S, |
| 29996 | + AVR32_MNEMONIC_FRCPA_S, |
| 29997 | + AVR32_MNEMONIC_FRSQRTA_S, |
| 29998 | + /* AVR32_MNEMONIC_FLD_S, |
| 29999 | + AVR32_MNEMONIC_FLD_D, |
| 30000 | + AVR32_MNEMONIC_FST_S, |
| 30001 | + AVR32_MNEMONIC_FST_D, */ |
| 30002 | + AVR32_MNEMONIC_LDA_W, |
| 30003 | + AVR32_MNEMONIC_CALL, |
| 30004 | + AVR32_MNEMONIC_PICOSVMAC, |
| 30005 | + AVR32_MNEMONIC_PICOSVMUL, |
| 30006 | + AVR32_MNEMONIC_PICOVMAC, |
| 30007 | + AVR32_MNEMONIC_PICOVMUL, |
| 30008 | + AVR32_MNEMONIC_PICOLD_D, |
| 30009 | + AVR32_MNEMONIC_PICOLD_W, |
| 30010 | + AVR32_MNEMONIC_PICOLDM_D, |
| 30011 | + AVR32_MNEMONIC_PICOLDM_W, |
| 30012 | + AVR32_MNEMONIC_PICOMV_D, |
| 30013 | + AVR32_MNEMONIC_PICOMV_W, |
| 30014 | + AVR32_MNEMONIC_PICOST_D, |
| 30015 | + AVR32_MNEMONIC_PICOST_W, |
| 30016 | + AVR32_MNEMONIC_PICOSTM_D, |
| 30017 | + AVR32_MNEMONIC_PICOSTM_W, |
| 30018 | + AVR32_MNEMONIC_RSUBEQ, |
| 30019 | + AVR32_MNEMONIC_RSUBNE, |
| 30020 | + AVR32_MNEMONIC_RSUBCC, |
| 30021 | + AVR32_MNEMONIC_RSUBCS, |
| 30022 | + AVR32_MNEMONIC_RSUBGE, |
| 30023 | + AVR32_MNEMONIC_RSUBLT, |
| 30024 | + AVR32_MNEMONIC_RSUBMI, |
| 30025 | + AVR32_MNEMONIC_RSUBPL, |
| 30026 | + AVR32_MNEMONIC_RSUBLS, |
| 30027 | + AVR32_MNEMONIC_RSUBGT, |
| 30028 | + AVR32_MNEMONIC_RSUBLE, |
| 30029 | + AVR32_MNEMONIC_RSUBHI, |
| 30030 | + AVR32_MNEMONIC_RSUBVS, |
| 30031 | + AVR32_MNEMONIC_RSUBVC, |
| 30032 | + AVR32_MNEMONIC_RSUBQS, |
| 30033 | + AVR32_MNEMONIC_RSUBAL, |
| 30034 | + AVR32_MNEMONIC_RSUBHS, |
| 30035 | + AVR32_MNEMONIC_RSUBLO, |
| 30036 | + AVR32_MNEMONIC_ADDEQ, |
| 30037 | + AVR32_MNEMONIC_ADDNE, |
| 30038 | + AVR32_MNEMONIC_ADDCC, |
| 30039 | + AVR32_MNEMONIC_ADDCS, |
| 30040 | + AVR32_MNEMONIC_ADDGE, |
| 30041 | + AVR32_MNEMONIC_ADDLT, |
| 30042 | + AVR32_MNEMONIC_ADDMI, |
| 30043 | + AVR32_MNEMONIC_ADDPL, |
| 30044 | + AVR32_MNEMONIC_ADDLS, |
| 30045 | + AVR32_MNEMONIC_ADDGT, |
| 30046 | + AVR32_MNEMONIC_ADDLE, |
| 30047 | + AVR32_MNEMONIC_ADDHI, |
| 30048 | + AVR32_MNEMONIC_ADDVS, |
| 30049 | + AVR32_MNEMONIC_ADDVC, |
| 30050 | + AVR32_MNEMONIC_ADDQS, |
| 30051 | + AVR32_MNEMONIC_ADDAL, |
| 30052 | + AVR32_MNEMONIC_ADDHS, |
| 30053 | + AVR32_MNEMONIC_ADDLO, |
| 30054 | + AVR32_MNEMONIC_ANDEQ, |
| 30055 | + AVR32_MNEMONIC_ANDNE, |
| 30056 | + AVR32_MNEMONIC_ANDCC, |
| 30057 | + AVR32_MNEMONIC_ANDCS, |
| 30058 | + AVR32_MNEMONIC_ANDGE, |
| 30059 | + AVR32_MNEMONIC_ANDLT, |
| 30060 | + AVR32_MNEMONIC_ANDMI, |
| 30061 | + AVR32_MNEMONIC_ANDPL, |
| 30062 | + AVR32_MNEMONIC_ANDLS, |
| 30063 | + AVR32_MNEMONIC_ANDGT, |
| 30064 | + AVR32_MNEMONIC_ANDLE, |
| 30065 | + AVR32_MNEMONIC_ANDHI, |
| 30066 | + AVR32_MNEMONIC_ANDVS, |
| 30067 | + AVR32_MNEMONIC_ANDVC, |
| 30068 | + AVR32_MNEMONIC_ANDQS, |
| 30069 | + AVR32_MNEMONIC_ANDAL, |
| 30070 | + AVR32_MNEMONIC_ANDHS, |
| 30071 | + AVR32_MNEMONIC_ANDLO, |
| 30072 | + AVR32_MNEMONIC_OREQ, |
| 30073 | + AVR32_MNEMONIC_ORNE, |
| 30074 | + AVR32_MNEMONIC_ORCC, |
| 30075 | + AVR32_MNEMONIC_ORCS, |
| 30076 | + AVR32_MNEMONIC_ORGE, |
| 30077 | + AVR32_MNEMONIC_ORLT, |
| 30078 | + AVR32_MNEMONIC_ORMI, |
| 30079 | + AVR32_MNEMONIC_ORPL, |
| 30080 | + AVR32_MNEMONIC_ORLS, |
| 30081 | + AVR32_MNEMONIC_ORGT, |
| 30082 | + AVR32_MNEMONIC_ORLE, |
| 30083 | + AVR32_MNEMONIC_ORHI, |
| 30084 | + AVR32_MNEMONIC_ORVS, |
| 30085 | + AVR32_MNEMONIC_ORVC, |
| 30086 | + AVR32_MNEMONIC_ORQS, |
| 30087 | + AVR32_MNEMONIC_ORAL, |
| 30088 | + AVR32_MNEMONIC_ORHS, |
| 30089 | + AVR32_MNEMONIC_ORLO, |
| 30090 | + AVR32_MNEMONIC_EOREQ, |
| 30091 | + AVR32_MNEMONIC_EORNE, |
| 30092 | + AVR32_MNEMONIC_EORCC, |
| 30093 | + AVR32_MNEMONIC_EORCS, |
| 30094 | + AVR32_MNEMONIC_EORGE, |
| 30095 | + AVR32_MNEMONIC_EORLT, |
| 30096 | + AVR32_MNEMONIC_EORMI, |
| 30097 | + AVR32_MNEMONIC_EORPL, |
| 30098 | + AVR32_MNEMONIC_EORLS, |
| 30099 | + AVR32_MNEMONIC_EORGT, |
| 30100 | + AVR32_MNEMONIC_EORLE, |
| 30101 | + AVR32_MNEMONIC_EORHI, |
| 30102 | + AVR32_MNEMONIC_EORVS, |
| 30103 | + AVR32_MNEMONIC_EORVC, |
| 30104 | + AVR32_MNEMONIC_EORQS, |
| 30105 | + AVR32_MNEMONIC_EORAL, |
| 30106 | + AVR32_MNEMONIC_EORHS, |
| 30107 | + AVR32_MNEMONIC_EORLO, |
| 30108 | + AVR32_MNEMONIC_LD_WEQ, |
| 30109 | + AVR32_MNEMONIC_LD_WNE, |
| 30110 | + AVR32_MNEMONIC_LD_WCC, |
| 30111 | + AVR32_MNEMONIC_LD_WCS, |
| 30112 | + AVR32_MNEMONIC_LD_WGE, |
| 30113 | + AVR32_MNEMONIC_LD_WLT, |
| 30114 | + AVR32_MNEMONIC_LD_WMI, |
| 30115 | + AVR32_MNEMONIC_LD_WPL, |
| 30116 | + AVR32_MNEMONIC_LD_WLS, |
| 30117 | + AVR32_MNEMONIC_LD_WGT, |
| 30118 | + AVR32_MNEMONIC_LD_WLE, |
| 30119 | + AVR32_MNEMONIC_LD_WHI, |
| 30120 | + AVR32_MNEMONIC_LD_WVS, |
| 30121 | + AVR32_MNEMONIC_LD_WVC, |
| 30122 | + AVR32_MNEMONIC_LD_WQS, |
| 30123 | + AVR32_MNEMONIC_LD_WAL, |
| 30124 | + AVR32_MNEMONIC_LD_WHS, |
| 30125 | + AVR32_MNEMONIC_LD_WLO, |
| 30126 | + AVR32_MNEMONIC_LD_SHEQ, |
| 30127 | + AVR32_MNEMONIC_LD_SHNE, |
| 30128 | + AVR32_MNEMONIC_LD_SHCC, |
| 30129 | + AVR32_MNEMONIC_LD_SHCS, |
| 30130 | + AVR32_MNEMONIC_LD_SHGE, |
| 30131 | + AVR32_MNEMONIC_LD_SHLT, |
| 30132 | + AVR32_MNEMONIC_LD_SHMI, |
| 30133 | + AVR32_MNEMONIC_LD_SHPL, |
| 30134 | + AVR32_MNEMONIC_LD_SHLS, |
| 30135 | + AVR32_MNEMONIC_LD_SHGT, |
| 30136 | + AVR32_MNEMONIC_LD_SHLE, |
| 30137 | + AVR32_MNEMONIC_LD_SHHI, |
| 30138 | + AVR32_MNEMONIC_LD_SHVS, |
| 30139 | + AVR32_MNEMONIC_LD_SHVC, |
| 30140 | + AVR32_MNEMONIC_LD_SHQS, |
| 30141 | + AVR32_MNEMONIC_LD_SHAL, |
| 30142 | + AVR32_MNEMONIC_LD_SHHS, |
| 30143 | + AVR32_MNEMONIC_LD_SHLO, |
| 30144 | + AVR32_MNEMONIC_LD_UHEQ, |
| 30145 | + AVR32_MNEMONIC_LD_UHNE, |
| 30146 | + AVR32_MNEMONIC_LD_UHCC, |
| 30147 | + AVR32_MNEMONIC_LD_UHCS, |
| 30148 | + AVR32_MNEMONIC_LD_UHGE, |
| 30149 | + AVR32_MNEMONIC_LD_UHLT, |
| 30150 | + AVR32_MNEMONIC_LD_UHMI, |
| 30151 | + AVR32_MNEMONIC_LD_UHPL, |
| 30152 | + AVR32_MNEMONIC_LD_UHLS, |
| 30153 | + AVR32_MNEMONIC_LD_UHGT, |
| 30154 | + AVR32_MNEMONIC_LD_UHLE, |
| 30155 | + AVR32_MNEMONIC_LD_UHHI, |
| 30156 | + AVR32_MNEMONIC_LD_UHVS, |
| 30157 | + AVR32_MNEMONIC_LD_UHVC, |
| 30158 | + AVR32_MNEMONIC_LD_UHQS, |
| 30159 | + AVR32_MNEMONIC_LD_UHAL, |
| 30160 | + AVR32_MNEMONIC_LD_UHHS, |
| 30161 | + AVR32_MNEMONIC_LD_UHLO, |
| 30162 | + AVR32_MNEMONIC_LD_SBEQ, |
| 30163 | + AVR32_MNEMONIC_LD_SBNE, |
| 30164 | + AVR32_MNEMONIC_LD_SBCC, |
| 30165 | + AVR32_MNEMONIC_LD_SBCS, |
| 30166 | + AVR32_MNEMONIC_LD_SBGE, |
| 30167 | + AVR32_MNEMONIC_LD_SBLT, |
| 30168 | + AVR32_MNEMONIC_LD_SBMI, |
| 30169 | + AVR32_MNEMONIC_LD_SBPL, |
| 30170 | + AVR32_MNEMONIC_LD_SBLS, |
| 30171 | + AVR32_MNEMONIC_LD_SBGT, |
| 30172 | + AVR32_MNEMONIC_LD_SBLE, |
| 30173 | + AVR32_MNEMONIC_LD_SBHI, |
| 30174 | + AVR32_MNEMONIC_LD_SBVS, |
| 30175 | + AVR32_MNEMONIC_LD_SBVC, |
| 30176 | + AVR32_MNEMONIC_LD_SBQS, |
| 30177 | + AVR32_MNEMONIC_LD_SBAL, |
| 30178 | + AVR32_MNEMONIC_LD_SBHS, |
| 30179 | + AVR32_MNEMONIC_LD_SBLO, |
| 30180 | + AVR32_MNEMONIC_LD_UBEQ, |
| 30181 | + AVR32_MNEMONIC_LD_UBNE, |
| 30182 | + AVR32_MNEMONIC_LD_UBCC, |
| 30183 | + AVR32_MNEMONIC_LD_UBCS, |
| 30184 | + AVR32_MNEMONIC_LD_UBGE, |
| 30185 | + AVR32_MNEMONIC_LD_UBLT, |
| 30186 | + AVR32_MNEMONIC_LD_UBMI, |
| 30187 | + AVR32_MNEMONIC_LD_UBPL, |
| 30188 | + AVR32_MNEMONIC_LD_UBLS, |
| 30189 | + AVR32_MNEMONIC_LD_UBGT, |
| 30190 | + AVR32_MNEMONIC_LD_UBLE, |
| 30191 | + AVR32_MNEMONIC_LD_UBHI, |
| 30192 | + AVR32_MNEMONIC_LD_UBVS, |
| 30193 | + AVR32_MNEMONIC_LD_UBVC, |
| 30194 | + AVR32_MNEMONIC_LD_UBQS, |
| 30195 | + AVR32_MNEMONIC_LD_UBAL, |
| 30196 | + AVR32_MNEMONIC_LD_UBHS, |
| 30197 | + AVR32_MNEMONIC_LD_UBLO, |
| 30198 | + AVR32_MNEMONIC_ST_WEQ, |
| 30199 | + AVR32_MNEMONIC_ST_WNE, |
| 30200 | + AVR32_MNEMONIC_ST_WCC, |
| 30201 | + AVR32_MNEMONIC_ST_WCS, |
| 30202 | + AVR32_MNEMONIC_ST_WGE, |
| 30203 | + AVR32_MNEMONIC_ST_WLT, |
| 30204 | + AVR32_MNEMONIC_ST_WMI, |
| 30205 | + AVR32_MNEMONIC_ST_WPL, |
| 30206 | + AVR32_MNEMONIC_ST_WLS, |
| 30207 | + AVR32_MNEMONIC_ST_WGT, |
| 30208 | + AVR32_MNEMONIC_ST_WLE, |
| 30209 | + AVR32_MNEMONIC_ST_WHI, |
| 30210 | + AVR32_MNEMONIC_ST_WVS, |
| 30211 | + AVR32_MNEMONIC_ST_WVC, |
| 30212 | + AVR32_MNEMONIC_ST_WQS, |
| 30213 | + AVR32_MNEMONIC_ST_WAL, |
| 30214 | + AVR32_MNEMONIC_ST_WHS, |
| 30215 | + AVR32_MNEMONIC_ST_WLO, |
| 30216 | + AVR32_MNEMONIC_ST_HEQ, |
| 30217 | + AVR32_MNEMONIC_ST_HNE, |
| 30218 | + AVR32_MNEMONIC_ST_HCC, |
| 30219 | + AVR32_MNEMONIC_ST_HCS, |
| 30220 | + AVR32_MNEMONIC_ST_HGE, |
| 30221 | + AVR32_MNEMONIC_ST_HLT, |
| 30222 | + AVR32_MNEMONIC_ST_HMI, |
| 30223 | + AVR32_MNEMONIC_ST_HPL, |
| 30224 | + AVR32_MNEMONIC_ST_HLS, |
| 30225 | + AVR32_MNEMONIC_ST_HGT, |
| 30226 | + AVR32_MNEMONIC_ST_HLE, |
| 30227 | + AVR32_MNEMONIC_ST_HHI, |
| 30228 | + AVR32_MNEMONIC_ST_HVS, |
| 30229 | + AVR32_MNEMONIC_ST_HVC, |
| 30230 | + AVR32_MNEMONIC_ST_HQS, |
| 30231 | + AVR32_MNEMONIC_ST_HAL, |
| 30232 | + AVR32_MNEMONIC_ST_HHS, |
| 30233 | + AVR32_MNEMONIC_ST_HLO, |
| 30234 | + AVR32_MNEMONIC_ST_BEQ, |
| 30235 | + AVR32_MNEMONIC_ST_BNE, |
| 30236 | + AVR32_MNEMONIC_ST_BCC, |
| 30237 | + AVR32_MNEMONIC_ST_BCS, |
| 30238 | + AVR32_MNEMONIC_ST_BGE, |
| 30239 | + AVR32_MNEMONIC_ST_BLT, |
| 30240 | + AVR32_MNEMONIC_ST_BMI, |
| 30241 | + AVR32_MNEMONIC_ST_BPL, |
| 30242 | + AVR32_MNEMONIC_ST_BLS, |
| 30243 | + AVR32_MNEMONIC_ST_BGT, |
| 30244 | + AVR32_MNEMONIC_ST_BLE, |
| 30245 | + AVR32_MNEMONIC_ST_BHI, |
| 30246 | + AVR32_MNEMONIC_ST_BVS, |
| 30247 | + AVR32_MNEMONIC_ST_BVC, |
| 30248 | + AVR32_MNEMONIC_ST_BQS, |
| 30249 | + AVR32_MNEMONIC_ST_BAL, |
| 30250 | + AVR32_MNEMONIC_ST_BHS, |
| 30251 | + AVR32_MNEMONIC_ST_BLO, |
| 30252 | + AVR32_MNEMONIC_MOVH, |
| 30253 | + AVR32_MNEMONIC__END_ |
| 30254 | +}; |
| 30255 | +#define AVR32_NR_MNEMONICS AVR32_MNEMONIC__END_ |
| 30256 | + |
| 30257 | +enum avr32_syntax_parser |
| 30258 | + { |
| 30259 | + AVR32_PARSER_NORMAL, |
| 30260 | + AVR32_PARSER_ALIAS, |
| 30261 | + AVR32_PARSER_LDA, |
| 30262 | + AVR32_PARSER_CALL, |
| 30263 | + AVR32_PARSER__END_ |
| 30264 | + }; |
| 30265 | +#define AVR32_NR_PARSERS AVR32_PARSER__END_ |
| 30266 | --- a/opcodes/configure.in |
| 30267 | +++ b/opcodes/configure.in |
| 30268 | @@ -223,6 +223,7 @@ if test x${all_targets} = xfalse ; then |
| 30269 | bfd_arc_arch) ta="$ta arc-dis.lo arc-opc.lo arc-ext.lo" ;; |
| 30270 | bfd_arm_arch) ta="$ta arm-dis.lo" ;; |
| 30271 | bfd_avr_arch) ta="$ta avr-dis.lo" ;; |
| 30272 | + bfd_avr32_arch) ta="$ta avr32-asm.lo avr32-dis.lo avr32-opc.lo" ;; |
| 30273 | bfd_bfin_arch) ta="$ta bfin-dis.lo" ;; |
| 30274 | bfd_cr16_arch) ta="$ta cr16-dis.lo cr16-opc.lo" ;; |
| 30275 | bfd_cris_arch) ta="$ta cris-dis.lo cris-opc.lo cgen-bitset.lo" ;; |
| 30276 | @@ -285,7 +286,7 @@ if test x${all_targets} = xfalse ; then |
| 30277 | ta="$ta sh64-dis.lo sh64-opc.lo" |
| 30278 | archdefs="$archdefs -DINCLUDE_SHMEDIA" |
| 30279 | break;; |
| 30280 | - esac; |
| 30281 | + esac |
| 30282 | done |
| 30283 | ta="$ta sh-dis.lo cgen-bitset.lo" ;; |
| 30284 | bfd_sparc_arch) ta="$ta sparc-dis.lo sparc-opc.lo" ;; |
| 30285 | --- a/opcodes/disassemble.c |
| 30286 | +++ b/opcodes/disassemble.c |
| 30287 | @@ -27,6 +27,7 @@ |
| 30288 | #define ARCH_arc |
| 30289 | #define ARCH_arm |
| 30290 | #define ARCH_avr |
| 30291 | +#define ARCH_avr32 |
| 30292 | #define ARCH_bfin |
| 30293 | #define ARCH_cr16 |
| 30294 | #define ARCH_cris |
| 30295 | @@ -131,6 +132,11 @@ disassembler (abfd) |
| 30296 | disassemble = print_insn_avr; |
| 30297 | break; |
| 30298 | #endif |
| 30299 | +#ifdef ARCH_avr32 |
| 30300 | + case bfd_arch_avr32: |
| 30301 | + disassemble = print_insn_avr32; |
| 30302 | + break; |
| 30303 | +#endif |
| 30304 | #ifdef ARCH_bfin |
| 30305 | case bfd_arch_bfin: |
| 30306 | disassemble = print_insn_bfin; |
| 30307 | @@ -485,6 +491,9 @@ disassembler_usage (stream) |
| 30308 | #ifdef ARCH_i386 |
| 30309 | print_i386_disassembler_options (stream); |
| 30310 | #endif |
| 30311 | +#ifdef ARCH_avr32 |
| 30312 | + print_avr32_disassembler_options (stream); |
| 30313 | +#endif |
| 30314 | #ifdef ARCH_s390 |
| 30315 | print_s390_disassembler_options (stream); |
| 30316 | #endif |
| 30317 | --- a/bfd/configure |
| 30318 | +++ b/bfd/configure |
| 30319 | @@ -14787,6 +14787,7 @@ do |
| 30320 | bfd_pei_ia64_vec) tb="$tb pei-ia64.lo pepigen.lo cofflink.lo"; target_size=64 ;; |
| 30321 | bfd_elf32_am33lin_vec) tb="$tb elf32-am33lin.lo elf32.lo $elf" ;; |
| 30322 | bfd_elf32_avr_vec) tb="$tb elf32-avr.lo elf32.lo $elf" ;; |
| 30323 | + bfd_elf32_avr32_vec) tb="$tb elf32-avr32.lo elf32.lo $elf" ;; |
| 30324 | bfd_elf32_bfin_vec) tb="$tb elf32-bfin.lo elf32.lo $elf" ;; |
| 30325 | bfd_elf32_bfinfdpic_vec) tb="$tb elf32-bfin.lo elf32.lo $elf" ;; |
| 30326 | bfd_elf32_big_generic_vec) tb="$tb elf32-gen.lo elf32.lo $elf" ;; |
| 30327 | --- a/opcodes/configure |
| 30328 | +++ b/opcodes/configure |
| 30329 | @@ -12284,6 +12284,7 @@ if test x${all_targets} = xfalse ; then |
| 30330 | bfd_arc_arch) ta="$ta arc-dis.lo arc-opc.lo arc-ext.lo" ;; |
| 30331 | bfd_arm_arch) ta="$ta arm-dis.lo" ;; |
| 30332 | bfd_avr_arch) ta="$ta avr-dis.lo" ;; |
| 30333 | + bfd_avr32_arch) ta="$ta avr32-asm.lo avr32-dis.lo avr32-opc.lo" ;; |
| 30334 | bfd_bfin_arch) ta="$ta bfin-dis.lo" ;; |
| 30335 | bfd_cr16_arch) ta="$ta cr16-dis.lo cr16-opc.lo" ;; |
| 30336 | bfd_cris_arch) ta="$ta cris-dis.lo cris-opc.lo cgen-bitset.lo" ;; |
| 30337 | --- a/bfd/libbfd.h |
| 30338 | +++ b/bfd/libbfd.h |
| 30339 | @@ -1646,6 +1646,48 @@ static const char *const bfd_reloc_code_ |
| 30340 | "BFD_RELOC_AVR_LDI", |
| 30341 | "BFD_RELOC_AVR_6", |
| 30342 | "BFD_RELOC_AVR_6_ADIW", |
| 30343 | + "BFD_RELOC_AVR32_DIFF32", |
| 30344 | + "BFD_RELOC_AVR32_DIFF16", |
| 30345 | + "BFD_RELOC_AVR32_DIFF8", |
| 30346 | + "BFD_RELOC_AVR32_GOT32", |
| 30347 | + "BFD_RELOC_AVR32_GOT16", |
| 30348 | + "BFD_RELOC_AVR32_GOT8", |
| 30349 | + "BFD_RELOC_AVR32_21S", |
| 30350 | + "BFD_RELOC_AVR32_16U", |
| 30351 | + "BFD_RELOC_AVR32_16S", |
| 30352 | + "BFD_RELOC_AVR32_SUB5", |
| 30353 | + "BFD_RELOC_AVR32_8S_EXT", |
| 30354 | + "BFD_RELOC_AVR32_8S", |
| 30355 | + "BFD_RELOC_AVR32_15S", |
| 30356 | + "BFD_RELOC_AVR32_22H_PCREL", |
| 30357 | + "BFD_RELOC_AVR32_18W_PCREL", |
| 30358 | + "BFD_RELOC_AVR32_16B_PCREL", |
| 30359 | + "BFD_RELOC_AVR32_16N_PCREL", |
| 30360 | + "BFD_RELOC_AVR32_14UW_PCREL", |
| 30361 | + "BFD_RELOC_AVR32_11H_PCREL", |
| 30362 | + "BFD_RELOC_AVR32_10UW_PCREL", |
| 30363 | + "BFD_RELOC_AVR32_9H_PCREL", |
| 30364 | + "BFD_RELOC_AVR32_9UW_PCREL", |
| 30365 | + "BFD_RELOC_AVR32_GOTPC", |
| 30366 | + "BFD_RELOC_AVR32_GOTCALL", |
| 30367 | + "BFD_RELOC_AVR32_LDA_GOT", |
| 30368 | + "BFD_RELOC_AVR32_GOT21S", |
| 30369 | + "BFD_RELOC_AVR32_GOT18SW", |
| 30370 | + "BFD_RELOC_AVR32_GOT16S", |
| 30371 | + "BFD_RELOC_AVR32_32_CPENT", |
| 30372 | + "BFD_RELOC_AVR32_CPCALL", |
| 30373 | + "BFD_RELOC_AVR32_16_CP", |
| 30374 | + "BFD_RELOC_AVR32_9W_CP", |
| 30375 | + "BFD_RELOC_AVR32_ALIGN", |
| 30376 | + "BFD_RELOC_AVR32_14UW", |
| 30377 | + "BFD_RELOC_AVR32_10UW", |
| 30378 | + "BFD_RELOC_AVR32_10SW", |
| 30379 | + "BFD_RELOC_AVR32_STHH_W", |
| 30380 | + "BFD_RELOC_AVR32_7UW", |
| 30381 | + "BFD_RELOC_AVR32_6S", |
| 30382 | + "BFD_RELOC_AVR32_6UW", |
| 30383 | + "BFD_RELOC_AVR32_4UH", |
| 30384 | + "BFD_RELOC_AVR32_3U", |
| 30385 | "BFD_RELOC_390_12", |
| 30386 | "BFD_RELOC_390_GOT12", |
| 30387 | "BFD_RELOC_390_PLT32", |
| 30388 | --- a/ld/Makefile.in |
| 30389 | +++ b/ld/Makefile.in |
| 30390 | @@ -434,6 +434,53 @@ ALL_EMULATIONS = \ |
| 30391 | eavr5.o \ |
| 30392 | eavr51.o \ |
| 30393 | eavr6.o \ |
| 30394 | + eavr32elf_ap7000.o \ |
| 30395 | + eavr32elf_ap7001.o \ |
| 30396 | + eavr32elf_ap7002.o \ |
| 30397 | + eavr32elf_ap7200.o \ |
| 30398 | + eavr32elf_uc3a0128.o \ |
| 30399 | + eavr32elf_uc3a0256.o \ |
| 30400 | + eavr32elf_uc3a0512.o \ |
| 30401 | + eavr32elf_uc3a0512es.o \ |
| 30402 | + eavr32elf_uc3a1128.o \ |
| 30403 | + eavr32elf_uc3a1256.o \ |
| 30404 | + eavr32elf_uc3a1512es.o \ |
| 30405 | + eavr32elf_uc3a1512.o \ |
| 30406 | + eavr32elf_uc3a364.o \ |
| 30407 | + eavr32elf_uc3a364s.o \ |
| 30408 | + eavr32elf_uc3a3128.o \ |
| 30409 | + eavr32elf_uc3a3128s.o \ |
| 30410 | + eavr32elf_uc3a3256.o \ |
| 30411 | + eavr32elf_uc3a3256s.o \ |
| 30412 | + eavr32elf_uc3b064.o \ |
| 30413 | + eavr32elf_uc3b0128.o \ |
| 30414 | + eavr32elf_uc3b0256es.o \ |
| 30415 | + eavr32elf_uc3b0256.o \ |
| 30416 | + eavr32elf_uc3b0512.o \ |
| 30417 | + eavr32elf_uc3b0512revc.o \ |
| 30418 | + eavr32elf_uc3b164.o \ |
| 30419 | + eavr32elf_uc3b1128.o \ |
| 30420 | + eavr32elf_uc3b1256es.o \ |
| 30421 | + eavr32elf_uc3b1256.o \ |
| 30422 | + eavr32elf_uc3b1512.o \ |
| 30423 | + eavr32elf_uc3b1512revc.o \ |
| 30424 | + eavr32elf_uc3c064c.o \ |
| 30425 | + eavr32elf_uc3c0128c.o \ |
| 30426 | + eavr32elf_uc3c0256c.o \ |
| 30427 | + eavr32elf_uc3c0512crevc.o \ |
| 30428 | + eavr32elf_uc3c164c.o \ |
| 30429 | + eavr32elf_uc3c1128c.o \ |
| 30430 | + eavr32elf_uc3c1256c.o \ |
| 30431 | + eavr32elf_uc3c1512crevc.o \ |
| 30432 | + eavr32elf_uc3c264c.o \ |
| 30433 | + eavr32elf_uc3c2128c.o \ |
| 30434 | + eavr32elf_uc3c2256c.o \ |
| 30435 | + eavr32elf_uc3c2512crevc.o \ |
| 30436 | + eavr32elf_uc3l064.o \ |
| 30437 | + eavr32elf_uc3l032.o \ |
| 30438 | + eavr32elf_uc3l016.o \ |
| 30439 | + eavr32elf_uc3l064revb.o \ |
| 30440 | + eavr32linux.o \ |
| 30441 | ecoff_i860.o \ |
| 30442 | ecoff_sparc.o \ |
| 30443 | eelf32_spu.o \ |
| 30444 | @@ -2069,6 +2116,194 @@ eavr6.c: $(srcdir)/emulparams/avr6.sh $( |
| 30445 | $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \ |
| 30446 | ${GEN_DEPENDS} |
| 30447 | ${GENSCRIPTS} avr6 "$(tdir_avr2)" |
| 30448 | +eavr32elf_ap7000.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30449 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30450 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30451 | + ${GENSCRIPTS} avr32elf_ap7000 "$(tdir_avr32)" avr32elf |
| 30452 | +eavr32elf_ap7001.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30453 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30454 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30455 | + ${GENSCRIPTS} avr32elf_ap7001 "$(tdir_avr32)" avr32elf |
| 30456 | +eavr32elf_ap7002.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30457 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30458 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30459 | + ${GENSCRIPTS} avr32elf_ap7002 "$(tdir_avr32)" avr32elf |
| 30460 | +eavr32elf_ap7200.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30461 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30462 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30463 | + ${GENSCRIPTS} avr32elf_ap7200 "$(tdir_avr32)" avr32elf |
| 30464 | +eavr32elf_uc3a0128.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30465 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30466 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30467 | + ${GENSCRIPTS} avr32elf_uc3a0128 "$(tdir_avr32)" avr32elf |
| 30468 | +eavr32elf_uc3a0256.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30469 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30470 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30471 | + ${GENSCRIPTS} avr32elf_uc3a0256 "$(tdir_avr32)" avr32elf |
| 30472 | +eavr32elf_uc3a0512.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30473 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30474 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30475 | + ${GENSCRIPTS} avr32elf_uc3a0512 "$(tdir_avr32)" avr32elf |
| 30476 | +eavr32elf_uc3a0512es.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30477 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30478 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30479 | + ${GENSCRIPTS} avr32elf_uc3a0512es "$(tdir_avr32)" avr32elf |
| 30480 | +eavr32elf_uc3a1128.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30481 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30482 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30483 | + ${GENSCRIPTS} avr32elf_uc3a1128 "$(tdir_avr32)" avr32elf |
| 30484 | +eavr32elf_uc3a1256.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30485 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30486 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30487 | + ${GENSCRIPTS} avr32elf_uc3a1256 "$(tdir_avr32)" avr32elf |
| 30488 | +eavr32elf_uc3a1512.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30489 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30490 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30491 | + ${GENSCRIPTS} avr32elf_uc3a1512 "$(tdir_avr32)" avr32elf |
| 30492 | +eavr32elf_uc3a1512es.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30493 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30494 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30495 | + ${GENSCRIPTS} avr32elf_uc3a1512es "$(tdir_avr32)" avr32elf |
| 30496 | +eavr32elf_uc3a364.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30497 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30498 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30499 | + ${GENSCRIPTS} avr32elf_uc3a364 "$(tdir_avr32)" avr32elf |
| 30500 | +eavr32elf_uc3a364s.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30501 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30502 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30503 | + ${GENSCRIPTS} avr32elf_uc3a364s "$(tdir_avr32)" avr32elf |
| 30504 | +eavr32elf_uc3a3128.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30505 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30506 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30507 | + ${GENSCRIPTS} avr32elf_uc3a3128 "$(tdir_avr32)" avr32elf |
| 30508 | +eavr32elf_uc3a3128s.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30509 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30510 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30511 | + ${GENSCRIPTS} avr32elf_uc3a3128s "$(tdir_avr32)" avr32elf |
| 30512 | +eavr32elf_uc3a3256.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30513 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30514 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30515 | + ${GENSCRIPTS} avr32elf_uc3a3256 "$(tdir_avr32)" avr32elf |
| 30516 | +eavr32elf_uc3a3256s.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30517 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30518 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30519 | + ${GENSCRIPTS} avr32elf_uc3a3256s "$(tdir_avr32)" avr32elf |
| 30520 | +eavr32elf_uc3b064.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30521 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30522 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30523 | + ${GENSCRIPTS} avr32elf_uc3b064 "$(tdir_avr32)" avr32elf |
| 30524 | +eavr32elf_uc3b0128.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30525 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30526 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30527 | + ${GENSCRIPTS} avr32elf_uc3b0128 "$(tdir_avr32)" avr32elf |
| 30528 | +eavr32elf_uc3b0256.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30529 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30530 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30531 | + ${GENSCRIPTS} avr32elf_uc3b0256 "$(tdir_avr32)" avr32elf |
| 30532 | +eavr32elf_uc3b0256es.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30533 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30534 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30535 | + ${GENSCRIPTS} avr32elf_uc3b0256es "$(tdir_avr32)" avr32elf |
| 30536 | +eavr32elf_uc3b0512.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30537 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30538 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30539 | + ${GENSCRIPTS} avr32elf_uc3b0512 "$(tdir_avr32)" avr32elf |
| 30540 | +eavr32elf_uc3b0512revc.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30541 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30542 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30543 | + ${GENSCRIPTS} avr32elf_uc3b0512revc "$(tdir_avr32)" avr32elf |
| 30544 | +eavr32elf_uc3b164.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30545 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30546 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30547 | + ${GENSCRIPTS} avr32elf_uc3b164 "$(tdir_avr32)" avr32elf |
| 30548 | +eavr32elf_uc3b1128.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30549 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30550 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30551 | + ${GENSCRIPTS} avr32elf_uc3b1128 "$(tdir_avr32)" avr32elf |
| 30552 | +eavr32elf_uc3b1256.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30553 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30554 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30555 | + ${GENSCRIPTS} avr32elf_uc3b1256 "$(tdir_avr32)" avr32elf |
| 30556 | +eavr32elf_uc3b1256es.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30557 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30558 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30559 | + ${GENSCRIPTS} avr32elf_uc3b1256es "$(tdir_avr32)" avr32elf |
| 30560 | +eavr32elf_uc3b1512.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30561 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30562 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30563 | + ${GENSCRIPTS} avr32elf_uc3b1512 "$(tdir_avr32)" avr32elf |
| 30564 | +eavr32elf_uc3b1512revc.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30565 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30566 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30567 | + ${GENSCRIPTS} avr32elf_uc3b1512revc "$(tdir_avr32)" avr32elf |
| 30568 | +eavr32elf_uc3c064c.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30569 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30570 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30571 | + ${GENSCRIPTS} avr32elf_uc3c064c "$(tdir_avr32)" avr32elf |
| 30572 | +eavr32elf_uc3c0128c.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30573 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30574 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30575 | + ${GENSCRIPTS} avr32elf_uc3c0128c "$(tdir_avr32)" avr32elf |
| 30576 | +eavr32elf_uc3c0256c.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30577 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30578 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30579 | + ${GENSCRIPTS} avr32elf_uc3c0256c "$(tdir_avr32)" avr32elf |
| 30580 | +eavr32elf_uc3c0512crevc.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30581 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30582 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30583 | + ${GENSCRIPTS} avr32elf_uc3c0512crevc "$(tdir_avr32)" avr32elf |
| 30584 | +eavr32elf_uc3c164c.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30585 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30586 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30587 | + ${GENSCRIPTS} avr32elf_uc3c164c "$(tdir_avr32)" avr32elf |
| 30588 | +eavr32elf_uc3c1128c.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30589 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30590 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30591 | + ${GENSCRIPTS} avr32elf_uc3c1128c "$(tdir_avr32)" avr32elf |
| 30592 | +eavr32elf_uc3c1256c.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30593 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30594 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30595 | + ${GENSCRIPTS} avr32elf_uc3c1256c "$(tdir_avr32)" avr32elf |
| 30596 | +eavr32elf_uc3c1512crevc.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30597 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30598 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30599 | + ${GENSCRIPTS} avr32elf_uc3c1512crevc "$(tdir_avr32)" avr32elf |
| 30600 | +eavr32elf_uc3c264c.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30601 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30602 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30603 | + ${GENSCRIPTS} avr32elf_uc3c264c "$(tdir_avr32)" avr32elf |
| 30604 | +eavr32elf_uc3c2128c.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30605 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30606 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30607 | + ${GENSCRIPTS} avr32elf_uc3c2128c "$(tdir_avr32)" avr32elf |
| 30608 | +eavr32elf_uc3c2256c.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30609 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30610 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30611 | + ${GENSCRIPTS} avr32elf_uc3c2256c "$(tdir_avr32)" avr32elf |
| 30612 | +eavr32elf_uc3c2512crevc.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30613 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30614 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30615 | + ${GENSCRIPTS} avr32elf_uc3c2512crevc "$(tdir_avr32)" avr32elf |
| 30616 | +eavr32elf_uc3l064.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30617 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30618 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30619 | + ${GENSCRIPTS} avr32elf_uc3l064 "$(tdir_avr32)" avr32elf |
| 30620 | +eavr32elf_uc3l032.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30621 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30622 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30623 | + ${GENSCRIPTS} avr32elf_uc3l032 "$(tdir_avr32)" avr32elf |
| 30624 | +eavr32elf_uc3l016.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30625 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30626 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30627 | + ${GENSCRIPTS} avr32elf_uc3l016 "$(tdir_avr32)" avr32elf |
| 30628 | +eavr32elf_uc3l064revb.c: $(srcdir)/emulparams/avr32elf.sh \ |
| 30629 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30630 | + $(srcdir)/scripttempl/avr32.sc ${GEN_DEPENDS} |
| 30631 | + ${GENSCRIPTS} avr32elf_uc3l064revb "$(tdir_avr32)" avr32elf |
| 30632 | +eavr32linux.c: $(srcdir)/emulparams/avr32linux.sh \ |
| 30633 | + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/avr32elf.em \ |
| 30634 | + $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} |
| 30635 | + ${GENSCRIPTS} avr32linux "$(tdir_avr32)" |
| 30636 | ecoff_i860.c: $(srcdir)/emulparams/coff_i860.sh \ |
| 30637 | $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/i860coff.sc ${GEN_DEPENDS} |
| 30638 | ${GENSCRIPTS} coff_i860 "$(tdir_coff_i860)" |
| 30639 | --- a/gas/Makefile.in |
| 30640 | +++ b/gas/Makefile.in |
| 30641 | @@ -309,6 +309,7 @@ CPU_TYPES = \ |
| 30642 | arc \ |
| 30643 | arm \ |
| 30644 | avr \ |
| 30645 | + avr32 \ |
| 30646 | bfin \ |
| 30647 | cr16 \ |
| 30648 | cris \ |
| 30649 | @@ -508,6 +509,7 @@ TARGET_CPU_CFILES = \ |
| 30650 | config/tc-arc.c \ |
| 30651 | config/tc-arm.c \ |
| 30652 | config/tc-avr.c \ |
| 30653 | + config/tc-avr32.c \ |
| 30654 | config/tc-bfin.c \ |
| 30655 | config/tc-cr16.c \ |
| 30656 | config/tc-cris.c \ |
| 30657 | @@ -571,6 +573,7 @@ TARGET_CPU_HFILES = \ |
| 30658 | config/tc-arc.h \ |
| 30659 | config/tc-arm.h \ |
| 30660 | config/tc-avr.h \ |
| 30661 | + config/tc-avr32.h \ |
| 30662 | config/tc-bfin.h \ |
| 30663 | config/tc-cr16.h \ |
| 30664 | config/tc-cris.h \ |
| 30665 | @@ -949,6 +952,7 @@ distclean-compile: |
| 30666 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-arc.Po@am__quote@ |
| 30667 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-arm.Po@am__quote@ |
| 30668 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-avr.Po@am__quote@ |
| 30669 | +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-avr32.Po@am__quote@ |
| 30670 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-bfin.Po@am__quote@ |
| 30671 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-cr16.Po@am__quote@ |
| 30672 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-cris.Po@am__quote@ |
| 30673 | @@ -1086,6 +1090,20 @@ tc-avr.obj: config/tc-avr.c |
| 30674 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ |
| 30675 | @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-avr.obj `if test -f 'config/tc-avr.c'; then $(CYGPATH_W) 'config/tc-avr.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-avr.c'; fi` |
| 30676 | |
| 30677 | +tc-avr32.o: config/tc-avr32.c |
| 30678 | +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-avr32.o -MD -MP -MF $(DEPDIR)/tc-avr32.Tpo -c -o tc-avr32.o `test -f 'config/tc-avr32.c' || echo '$(srcdir)/'`config/tc-avr32.c |
| 30679 | +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-avr32.Tpo $(DEPDIR)/tc-avr32.Po |
| 30680 | +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-avr32.c' object='tc-avr32.o' libtool=no @AMDEPBACKSLASH@ |
| 30681 | +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ |
| 30682 | +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-avr32.o `test -f 'config/tc-avr32.c' || echo '$(srcdir)/'`config/tc-avr32.c |
| 30683 | + |
| 30684 | +tc-avr32.obj: config/tc-avr32.c |
| 30685 | +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-avr32.obj -MD -MP -MF $(DEPDIR)/tc-avr32.Tpo -c -o tc-avr32.obj `if test -f 'config/tc-avr32.c'; then $(CYGPATH_W) 'config/tc-avr32.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-avr32.c'; fi` |
| 30686 | +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-avr32.Tpo $(DEPDIR)/tc-avr32.Po |
| 30687 | +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-avr32.c' object='tc-avr32.obj' libtool=no @AMDEPBACKSLASH@ |
| 30688 | +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ |
| 30689 | +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-avr32.obj `if test -f 'config/tc-avr32.c'; then $(CYGPATH_W) 'config/tc-avr32.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-avr32.c'; fi` |
| 30690 | + |
| 30691 | tc-bfin.o: config/tc-bfin.c |
| 30692 | @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-bfin.o -MD -MP -MF $(DEPDIR)/tc-bfin.Tpo -c -o tc-bfin.o `test -f 'config/tc-bfin.c' || echo '$(srcdir)/'`config/tc-bfin.c |
| 30693 | @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-bfin.Tpo $(DEPDIR)/tc-bfin.Po |
| 30694 | --- a/bfd/bfd-in2.h |
| 30695 | +++ b/bfd/bfd-in2.h |
| 30696 | @@ -2042,6 +2042,12 @@ enum bfd_architecture |
| 30697 | #define bfd_mach_avr5 5 |
| 30698 | #define bfd_mach_avr51 51 |
| 30699 | #define bfd_mach_avr6 6 |
| 30700 | + bfd_arch_avr32, /* Atmel AVR32 */ |
| 30701 | +#define bfd_mach_avr32_ap 7000 |
| 30702 | +#define bfd_mach_avr32_uc 3000 |
| 30703 | +#define bfd_mach_avr32_ucr1 3001 |
| 30704 | +#define bfd_mach_avr32_ucr2 3002 |
| 30705 | +#define bfd_mach_avr32_ucr3 3003 |
| 30706 | bfd_arch_bfin, /* ADI Blackfin */ |
| 30707 | #define bfd_mach_bfin 1 |
| 30708 | bfd_arch_cr16, /* National Semiconductor CompactRISC (ie CR16). */ |
| 30709 | @@ -3851,6 +3857,88 @@ instructions */ |
| 30710 | instructions */ |
| 30711 | BFD_RELOC_AVR_6_ADIW, |
| 30712 | |
| 30713 | +/* Difference between two labels: L2 - L1. The value of L1 is encoded |
| 30714 | +as sym + addend, while the initial difference after assembly is |
| 30715 | +inserted into the object file by the assembler. */ |
| 30716 | + BFD_RELOC_AVR32_DIFF32, |
| 30717 | + BFD_RELOC_AVR32_DIFF16, |
| 30718 | + BFD_RELOC_AVR32_DIFF8, |
| 30719 | + |
| 30720 | +/* Reference to a symbol through the Global Offset Table. The linker |
| 30721 | +will allocate an entry for symbol in the GOT and insert the offset |
| 30722 | +of this entry as the relocation value. */ |
| 30723 | + BFD_RELOC_AVR32_GOT32, |
| 30724 | + BFD_RELOC_AVR32_GOT16, |
| 30725 | + BFD_RELOC_AVR32_GOT8, |
| 30726 | + |
| 30727 | +/* Normal (non-pc-relative) code relocations. Alignment and signedness |
| 30728 | +is indicated by the suffixes. S means signed, U means unsigned. W |
| 30729 | +means word-aligned, H means halfword-aligned, neither means |
| 30730 | +byte-aligned (no alignment.) SUB5 is the same relocation as 16S. */ |
| 30731 | + BFD_RELOC_AVR32_21S, |
| 30732 | + BFD_RELOC_AVR32_16U, |
| 30733 | + BFD_RELOC_AVR32_16S, |
| 30734 | + BFD_RELOC_AVR32_SUB5, |
| 30735 | + BFD_RELOC_AVR32_8S_EXT, |
| 30736 | + BFD_RELOC_AVR32_8S, |
| 30737 | + BFD_RELOC_AVR32_15S, |
| 30738 | + |
| 30739 | +/* PC-relative relocations are signed if neither 'U' nor 'S' is |
| 30740 | +specified. However, we explicitly tack on a 'B' to indicate no |
| 30741 | +alignment, to avoid confusion with data relocs. All of these resolve |
| 30742 | +to sym + addend - offset, except the one with 'N' (negated) suffix. |
| 30743 | +This particular one resolves to offset - sym - addend. */ |
| 30744 | + BFD_RELOC_AVR32_22H_PCREL, |
| 30745 | + BFD_RELOC_AVR32_18W_PCREL, |
| 30746 | + BFD_RELOC_AVR32_16B_PCREL, |
| 30747 | + BFD_RELOC_AVR32_16N_PCREL, |
| 30748 | + BFD_RELOC_AVR32_14UW_PCREL, |
| 30749 | + BFD_RELOC_AVR32_11H_PCREL, |
| 30750 | + BFD_RELOC_AVR32_10UW_PCREL, |
| 30751 | + BFD_RELOC_AVR32_9H_PCREL, |
| 30752 | + BFD_RELOC_AVR32_9UW_PCREL, |
| 30753 | + |
| 30754 | +/* Subtract the link-time address of the GOT from (symbol + addend) |
| 30755 | +and insert the result. */ |
| 30756 | + BFD_RELOC_AVR32_GOTPC, |
| 30757 | + |
| 30758 | +/* Reference to a symbol through the GOT. The linker will allocate an |
| 30759 | +entry for symbol in the GOT and insert the offset of this entry as |
| 30760 | +the relocation value. addend must be zero. As usual, 'S' means |
| 30761 | +signed, 'W' means word-aligned, etc. */ |
| 30762 | + BFD_RELOC_AVR32_GOTCALL, |
| 30763 | + BFD_RELOC_AVR32_LDA_GOT, |
| 30764 | + BFD_RELOC_AVR32_GOT21S, |
| 30765 | + BFD_RELOC_AVR32_GOT18SW, |
| 30766 | + BFD_RELOC_AVR32_GOT16S, |
| 30767 | + |
| 30768 | +/* 32-bit constant pool entry. I don't think 8- and 16-bit entries make |
| 30769 | +a whole lot of sense. */ |
| 30770 | + BFD_RELOC_AVR32_32_CPENT, |
| 30771 | + |
| 30772 | +/* Constant pool references. Some of these relocations are signed, |
| 30773 | +others are unsigned. It doesn't really matter, since the constant |
| 30774 | +pool always comes after the code that references it. */ |
| 30775 | + BFD_RELOC_AVR32_CPCALL, |
| 30776 | + BFD_RELOC_AVR32_16_CP, |
| 30777 | + BFD_RELOC_AVR32_9W_CP, |
| 30778 | + |
| 30779 | +/* sym must be the absolute symbol. The addend specifies the alignment |
| 30780 | +order, e.g. if addend is 2, the linker must add padding so that the |
| 30781 | +next address is aligned to a 4-byte boundary. */ |
| 30782 | + BFD_RELOC_AVR32_ALIGN, |
| 30783 | + |
| 30784 | +/* Code relocations that will never make it to the output file. */ |
| 30785 | + BFD_RELOC_AVR32_14UW, |
| 30786 | + BFD_RELOC_AVR32_10UW, |
| 30787 | + BFD_RELOC_AVR32_10SW, |
| 30788 | + BFD_RELOC_AVR32_STHH_W, |
| 30789 | + BFD_RELOC_AVR32_7UW, |
| 30790 | + BFD_RELOC_AVR32_6S, |
| 30791 | + BFD_RELOC_AVR32_6UW, |
| 30792 | + BFD_RELOC_AVR32_4UH, |
| 30793 | + BFD_RELOC_AVR32_3U, |
| 30794 | + |
| 30795 | /* Direct 12 bit. */ |
| 30796 | BFD_RELOC_390_12, |
| 30797 | |
| 30798 | |