diff --git a/bfd/Makefile.am b/bfd/Makefile.am index 10dd765bec87..feabc5308e35 100644 --- a/bfd/Makefile.am +++ b/bfd/Makefile.am @@ -93,6 +93,7 @@ ALL_MACHINES = \ cpu-aarch64.lo \ cpu-alpha.lo \ cpu-arc.lo \ + cpu-arc64.lo \ cpu-arm.lo \ cpu-avr.lo \ cpu-bfin.lo \ @@ -178,6 +179,7 @@ ALL_MACHINES_CFILES = \ cpu-aarch64.c \ cpu-alpha.c \ cpu-arc.c \ + cpu-arc64.c \ cpu-arm.c \ cpu-avr.c \ cpu-bfin.c \ @@ -262,6 +264,7 @@ ALL_MACHINES_CFILES = \ # The .o files needed by all of the 32 bit vectors that are configured into # target_vector in targets.c if configured with --enable-targets=all. BFD32_BACKENDS = \ + arc-plt.lo \ aout-cris.lo \ aout-ns32k.lo \ aout32.lo \ @@ -395,6 +398,7 @@ BFD32_BACKENDS = \ xtensa-modules.lo BFD32_BACKENDS_CFILES = \ + arc-plt.c \ aout-cris.c \ aout-ns32k.c \ aout32.c \ @@ -426,7 +430,6 @@ BFD32_BACKENDS_CFILES = \ elf-vxworks.c \ elf.c \ elf32-am33lin.c \ - elf32-arc.c \ elf32-arm.c \ elf32-avr.c \ elf32-bfin.c \ @@ -535,6 +538,8 @@ BFD64_BACKENDS = \ elf32-aarch64.lo \ elf64-aarch64.lo \ elfxx-aarch64.lo \ + elf32-arc64.lo \ + elf64-arc64.lo \ aix5ppc-core.lo \ aout64.lo \ coff-alpha.lo \ @@ -673,6 +678,7 @@ SOURCE_CFILES = \ BUILD_CFILES = \ elf32-aarch64.c elf64-aarch64.c \ + elf32-arc.c elf64-arc64.c elf32-arc64.c\ elf32-ia64.c elf64-ia64.c \ elf32-loongarch.c elf64-loongarch.c \ elf32-riscv.c elf64-riscv.c \ @@ -853,6 +859,21 @@ elf64-aarch64.c : elfnn-aarch64.c $(AM_V_at)echo "#line 1 \"elfnn-aarch64.c\"" > $@ $(AM_V_GEN)$(SED) -e s/NN/64/g < $< >> $@ +elf32-arc.c : elfnn-arc.c + rm -f elf32-arc.c + $(AM_V_at)echo "#line 1 \"$(srcdir)/elfnn-arc.c\"" > $@ + $(AM_V_GEN)$(SED) -e s/NN/32/g -e s/AA//g < $< >> $@ + +elf64-arc64.c : elfnn-arc.c + rm -f elf64-arc64.c + $(AM_V_at)echo "#line 1 \"$(srcdir)/elfnn-arc.c\"" > $@ + $(AM_V_GEN)$(SED) -e s/NN/64/g -e s/AA/64/g < $< >> $@ + +elf32-arc64.c : elfnn-arc.c + rm -f elf32-arc64.c + $(AM_V_at)echo "#line 1 \"$(srcdir)/elfnn-arc.c\"" > $@ + $(AM_V_GEN)$(SED) -e s/NN/32/g -e s/AA/64/g < $< >> $@ + elf32-ia64.c : elfnn-ia64.c $(AM_V_at)echo "#line 1 \"elfnn-ia64.c\"" > $@ $(AM_V_GEN)$(SED) -e s/NN/32/g < $< >> $@ diff --git a/bfd/Makefile.in b/bfd/Makefile.in index f5313a2ad6ff..ad59f415ff76 100644 --- a/bfd/Makefile.in +++ b/bfd/Makefile.in @@ -519,6 +519,7 @@ ALL_MACHINES = \ cpu-aarch64.lo \ cpu-alpha.lo \ cpu-arc.lo \ + cpu-arc64.lo \ cpu-arm.lo \ cpu-avr.lo \ cpu-bfin.lo \ @@ -604,6 +605,7 @@ ALL_MACHINES_CFILES = \ cpu-aarch64.c \ cpu-alpha.c \ cpu-arc.c \ + cpu-arc64.c \ cpu-arm.c \ cpu-avr.c \ cpu-bfin.c \ @@ -689,6 +691,7 @@ ALL_MACHINES_CFILES = \ # The .o files needed by all of the 32 bit vectors that are configured into # target_vector in targets.c if configured with --enable-targets=all. BFD32_BACKENDS = \ + arc-plt.lo \ aout-cris.lo \ aout-ns32k.lo \ aout32.lo \ @@ -822,6 +825,7 @@ BFD32_BACKENDS = \ xtensa-modules.lo BFD32_BACKENDS_CFILES = \ + arc-plt.c \ aout-cris.c \ aout-ns32k.c \ aout32.c \ @@ -853,7 +857,6 @@ BFD32_BACKENDS_CFILES = \ elf-vxworks.c \ elf.c \ elf32-am33lin.c \ - elf32-arc.c \ elf32-arm.c \ elf32-avr.c \ elf32-bfin.c \ @@ -963,6 +966,8 @@ BFD64_BACKENDS = \ elf32-aarch64.lo \ elf64-aarch64.lo \ elfxx-aarch64.lo \ + elf32-arc64.lo \ + elf64-arc64.lo \ aix5ppc-core.lo \ aout64.lo \ coff-alpha.lo \ @@ -1100,6 +1105,7 @@ SOURCE_CFILES = \ BUILD_CFILES = \ elf32-aarch64.c elf64-aarch64.c \ + elf32-arc.c elf64-arc64.c elf32-arc64.c\ elf32-ia64.c elf64-ia64.c \ elf32-loongarch.c elf64-loongarch.c \ elf32-riscv.c elf64-riscv.c \ @@ -1326,6 +1332,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aout-ns32k.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aout32.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aout64.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arc-plt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/archive.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/archive64.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/archures.Plo@am__quote@ @@ -1358,6 +1365,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-aarch64.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-alpha.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-arc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-arc64.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-arm.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-avr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-bfin.Plo@am__quote@ @@ -1455,6 +1463,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-aarch64.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-am33lin.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-arc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-arc64.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-arm.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-avr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-bfin.Plo@am__quote@ @@ -1523,6 +1532,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-aarch64.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-alpha.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-arc64.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-bpf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-gen.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-hppa.Plo@am__quote@ @@ -2010,6 +2020,21 @@ elf64-aarch64.c : elfnn-aarch64.c $(AM_V_at)echo "#line 1 \"elfnn-aarch64.c\"" > $@ $(AM_V_GEN)$(SED) -e s/NN/64/g < $< >> $@ +elf32-arc.c : elfnn-arc.c + rm -f elf32-arc.c + $(AM_V_at)echo "#line 1 \"$(srcdir)/elfnn-arc.c\"" > $@ + $(AM_V_GEN)$(SED) -e s/NN/32/g -e s/AA//g < $< >> $@ + +elf64-arc64.c : elfnn-arc.c + rm -f elf64-arc64.c + $(AM_V_at)echo "#line 1 \"$(srcdir)/elfnn-arc.c\"" > $@ + $(AM_V_GEN)$(SED) -e s/NN/64/g -e s/AA/64/g < $< >> $@ + +elf32-arc64.c : elfnn-arc.c + rm -f elf32-arc64.c + $(AM_V_at)echo "#line 1 \"$(srcdir)/elfnn-arc.c\"" > $@ + $(AM_V_GEN)$(SED) -e s/NN/32/g -e s/AA/64/g < $< >> $@ + elf32-ia64.c : elfnn-ia64.c $(AM_V_at)echo "#line 1 \"elfnn-ia64.c\"" > $@ $(AM_V_GEN)$(SED) -e s/NN/32/g < $< >> $@ diff --git a/bfd/arc-got.h b/bfd/arc-got.h index 0d9b9a18f871..0d840fb6772d 100644 --- a/bfd/arc-got.h +++ b/bfd/arc-got.h @@ -22,9 +22,23 @@ #ifndef ARC_GOT_H #define ARC_GOT_H +#if ARCH_SIZE == 32 #define TCB_SIZE (8) - -#define align_power(addr, align) \ +#else +#define TCB_SIZE (16) +#endif + +#if ARCH_SIZE == 32 +#define GOT_ENTRY_SIZE 4 +#define write_in_got(A, B, C) bfd_put_32 (A, B, C) +#define read_from_got(A, B) bfd_get_32 (A, B) +#else +#define GOT_ENTRY_SIZE 8 +#define write_in_got(A, B, C) bfd_put_64 (A, B, C) +#define read_from_got(A, B) bfd_get_64 (A, B) +#endif + +#define align_power(addr, align) \ (((addr) + ((bfd_vma) 1 << (align)) - 1) & (-((bfd_vma) 1 << (align)))) enum tls_type_e @@ -201,7 +215,7 @@ arc_got_entry_type_for_reloc (reloc_howto_type *howto) { \ if (COND_FOR_RELOC) \ { \ - htab->srel##SECNAME->size += sizeof (Elf32_External_Rela); \ + htab->srel##SECNAME->size += RELA_SIZE; \ ARC_DEBUG ("arc_info: Added reloc space in " \ #SECNAME " section at " __FILE__ \ ":%d for symbol %s\n", \ @@ -211,7 +225,7 @@ arc_got_entry_type_for_reloc (reloc_howto_type *howto) if (H->dynindx == -1 && !H->forced_local) \ if (! bfd_elf_link_record_dynamic_symbol (info, H)) \ return false; \ - htab->s##SECNAME->size += 4; \ + htab->s##SECNAME->size += GOT_ENTRY_SIZE; \ } \ static bool @@ -230,13 +244,13 @@ arc_fill_got_info_for_reloc (enum tls_type_e type, case GOT_NORMAL: { bfd_vma offset - = ADD_SYMBOL_REF_SEC_AND_RELOC (got, bfd_link_pic (info) - || h != NULL, h); + = ADD_SYMBOL_REF_SEC_AND_RELOC (got, + bfd_link_pic (info) || h != NULL, + h); new_got_entry_to_list (list, type, offset, TLS_GOT_NONE); } break; - case GOT_TLS_GD: { bfd_vma offset @@ -262,59 +276,16 @@ arc_fill_got_info_for_reloc (enum tls_type_e type, return true; } -struct arc_static_sym_data { - bfd_vma sym_value; - const char *symbol_name; -}; - -static struct arc_static_sym_data -get_static_sym_data (unsigned long r_symndx, - Elf_Internal_Sym *local_syms, - asection **local_sections, - struct elf_link_hash_entry *h, - struct arc_relocation_data *reloc_data) -{ - static const char local_name[] = "(local)"; - struct arc_static_sym_data ret = { 0, NULL }; - - if (h != NULL) - { - BFD_ASSERT (h->root.type != bfd_link_hash_undefweak - && h->root.type != bfd_link_hash_undefined); - /* TODO: This should not be here. */ - reloc_data->sym_value = h->root.u.def.value; - reloc_data->sym_section = h->root.u.def.section; - - ret.sym_value = h->root.u.def.value - + h->root.u.def.section->output_section->vma - + h->root.u.def.section->output_offset; - - ret.symbol_name = h->root.root.string; - } - else - { - Elf_Internal_Sym *sym = local_syms + r_symndx; - asection *sec = local_sections[r_symndx]; - - ret.sym_value = sym->st_value - + sec->output_section->vma - + sec->output_offset; - - ret.symbol_name = local_name; - } - return ret; -} - static bfd_vma -relocate_fix_got_relocs_for_got_info (struct got_entry ** list_p, - enum tls_type_e type, - struct bfd_link_info * info, - bfd * output_bfd, - unsigned long r_symndx, - Elf_Internal_Sym * local_syms, - asection ** local_sections, - struct elf_link_hash_entry * h, - struct arc_relocation_data * reloc_data) +relocate_fix_got_relocs_for_got_info (struct got_entry **list_p, + enum tls_type_e type, + struct bfd_link_info *info, + bfd *output_bfd, + unsigned long r_symndx, + Elf_Internal_Sym * local_syms, + asection **local_sections, + struct elf_link_hash_entry *h, + struct arc_relocation_data *reloc_data) { struct elf_link_hash_table *htab = elf_hash_table (info); struct got_entry *entry = NULL; @@ -332,7 +303,37 @@ relocate_fix_got_relocs_for_got_info (struct got_entry ** list_p, && SYMBOL_REFERENCES_LOCAL (info, h)))) { const char ATTRIBUTE_UNUSED *symbol_name; - asection *tls_sec = elf_hash_table (info)->tls_sec; + static const char local_name[] = "(local)"; + asection *tls_sec = NULL; + bfd_vma sym_value = 0; + + if (h != NULL) + { + /* TODO: This should not be here. */ + reloc_data->sym_value = h->root.u.def.value; + reloc_data->sym_section = h->root.u.def.section; + + sym_value = h->root.u.def.value + + h->root.u.def.section->output_section->vma + + h->root.u.def.section->output_offset; + + tls_sec = elf_hash_table (info)->tls_sec; + + symbol_name = h->root.root.string; + } + else + { + Elf_Internal_Sym *sym = local_syms + r_symndx; + asection *sec = local_sections[r_symndx]; + + sym_value = sym->st_value + + sec->output_section->vma + + sec->output_offset; + + tls_sec = elf_hash_table (info)->tls_sec; + + symbol_name = local_name; + } if (entry && !entry->processed) { @@ -346,31 +347,27 @@ relocate_fix_got_relocs_for_got_info (struct got_entry ** list_p, if (h == NULL || h->forced_local || !elf_hash_table (info)->dynamic_sections_created) { - struct arc_static_sym_data tmp = - get_static_sym_data (r_symndx, local_syms, local_sections, - h, reloc_data); - - bfd_put_32 (output_bfd, - tmp.sym_value - sec_vma - + (elf_hash_table (info)->dynamic_sections_created - ? 0 - : (align_power (0, - tls_sec->alignment_power))), - htab->sgot->contents + entry->offset - + (entry->existing_entries == TLS_GOT_MOD_AND_OFF - ? 4 : 0)); - - ARC_DEBUG ("arc_info: FIXED -> %s value = %#lx " - "@ %lx, for symbol %s\n", - (entry->type == GOT_TLS_GD ? "GOT_TLS_GD" : - "GOT_TLS_IE"), - (long) (sym_value - sec_vma), - (long) (htab->sgot->output_section->vma - + htab->sgot->output_offset - + entry->offset - + (entry->existing_entries == TLS_GOT_MOD_AND_OFF - ? 4 : 0)), - tmp.symbol_name); + write_in_got + (output_bfd, + sym_value - sec_vma + + (elf_hash_table (info)->dynamic_sections_created + ? 0 : (align_power (0, tls_sec->alignment_power))), + htab->sgot->contents + entry->offset + + (entry->existing_entries == TLS_GOT_MOD_AND_OFF + ? GOT_ENTRY_SIZE : 0)); + + ARC_DEBUG + ("arc_info: FIXED -> %s value = %#lx " + "@ %lx, for symbol %s\n", + (entry->type == GOT_TLS_GD ? "GOT_TLS_GD" : + "GOT_TLS_IE"), + (long) (sym_value - sec_vma), + (long) (htab->sgot->output_section->vma + + htab->sgot->output_offset + + entry->offset + + (entry->existing_entries == TLS_GOT_MOD_AND_OFF + ? GOT_ENTRY_SIZE : 0)), + symbol_name); } } break; @@ -381,31 +378,27 @@ relocate_fix_got_relocs_for_got_info (struct got_entry ** list_p, bfd_vma ATTRIBUTE_UNUSED sec_vma = tls_sec->output_section->vma; - struct arc_static_sym_data tmp = - get_static_sym_data (r_symndx, local_syms, local_sections, - h, reloc_data); - - bfd_put_32 (output_bfd, - tmp.sym_value - sec_vma - + (elf_hash_table (info)->dynamic_sections_created - ? 0 - : (align_power (TCB_SIZE, - tls_sec->alignment_power))), - htab->sgot->contents + entry->offset - + (entry->existing_entries == TLS_GOT_MOD_AND_OFF - ? 4 : 0)); + write_in_got (output_bfd, + sym_value - sec_vma + + (elf_hash_table (info)->dynamic_sections_created + ? 0 + : (align_power (TCB_SIZE, + tls_sec->alignment_power))), + htab->sgot->contents + entry->offset + + (entry->existing_entries == TLS_GOT_MOD_AND_OFF + ? GOT_ENTRY_SIZE : 0)); ARC_DEBUG ("arc_info: FIXED -> %s value = %#lx " "@ %p, for symbol %s\n", (entry->type == GOT_TLS_GD ? "GOT_TLS_GD" : "GOT_TLS_IE"), (long) (sym_value - sec_vma), - (long) (htab->sgot->output_section->vma + (void *) (htab->sgot->output_section->vma + htab->sgot->output_offset + entry->offset + (entry->existing_entries == TLS_GOT_MOD_AND_OFF - ? 4 : 0)), - tmp.symbol_name); + ? GOT_ENTRY_SIZE : 0)), + symbol_name); } break; @@ -427,9 +420,9 @@ relocate_fix_got_relocs_for_got_info (struct got_entry ** list_p, (long) entry->offset); else { - bfd_put_32 (output_bfd, - reloc_data->sym_value + sec_vma, - htab->sgot->contents + entry->offset); + write_in_got (output_bfd, + reloc_data->sym_value + sec_vma, + htab->sgot->contents + entry->offset); ARC_DEBUG ("arc_info: PATCHED: %#08lx " "@ %#08lx for sym %s in got offset %#lx\n", (long) (reloc_data->sym_value + sec_vma), @@ -455,7 +448,7 @@ relocate_fix_got_relocs_for_got_info (struct got_entry ** list_p, static void create_got_dynrelocs_for_single_entry (struct got_entry *list, bfd *output_bfd, - struct bfd_link_info * info, + struct bfd_link_info *info, struct elf_link_hash_entry *h) { if (list == NULL) @@ -474,8 +467,8 @@ create_got_dynrelocs_for_single_entry (struct got_entry *list, ADD_RELA (output_bfd, got, got_offset, 0, R_ARC_RELATIVE, 0); } /* Do not fully understand the side effects of this condition. - The relocation space might still being reserved. Perhaps - I should clear its value. */ + The relocation space might still being reserved. Perhaps I + should clear its value. */ else if (h != NULL && h->dynindx != -1) { ADD_RELA (output_bfd, got, got_offset, h->dynindx, R_ARC_GLOB_DAT, 0); @@ -516,12 +509,12 @@ GOT_OFFSET = %#lx, GOT_VMA = %#lx, INDEX = %ld, ADDEND = 0x0\n", bfd_vma addend = 0; if (list->type == GOT_TLS_IE) { - addend = bfd_get_32 (output_bfd, - htab->sgot->contents + got_offset); + addend = read_from_got (output_bfd, + htab->sgot->contents + got_offset); } - ADD_RELA (output_bfd, got, - got_offset + (e == TLS_GOT_MOD_AND_OFF ? 4 : 0), + ADD_RELA (output_bfd, got, got_offset + + (e == TLS_GOT_MOD_AND_OFF ? GOT_ENTRY_SIZE : 0), dynindx, (list->type == GOT_TLS_IE ? R_ARC_TLS_TPOFF : R_ARC_TLS_DTPOFF), @@ -542,13 +535,14 @@ GOT_OFFSET = %#lx, GOT_VMA = %#lx, INDEX = %ld, ADDEND = %#lx\n", static void create_got_dynrelocs_for_got_info (struct got_entry **list_p, bfd *output_bfd, - struct bfd_link_info * info, + struct bfd_link_info *info, struct elf_link_hash_entry *h) { + struct got_entry *list = *list_p; + if (list_p == NULL) return; - struct got_entry *list = *list_p; /* Traverse the list of got entries for this symbol. */ while (list) { diff --git a/bfd/arc-plt.c b/bfd/arc-plt.c new file mode 100644 index 000000000000..92e568d69b66 --- /dev/null +++ b/bfd/arc-plt.c @@ -0,0 +1,121 @@ +/* ARC-specific support for PLT relocations. + Copyright (C) 2016-2022 Free Software Foundation, Inc. + Contributed by Cupertino Miranda (cmiranda@synopsys.com). + + This file is part of BFD, the Binary File Descriptor library. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#include "arc-plt.h" + +#define PLT_TYPE_START(NAME) \ + const insn_hword NAME##_plt_entry[] = { +#define PLT_TYPE_END(NAME) }; +#define PLT_ENTRY(...) __VA_ARGS__, +#define PLT_ELEM(...) +#define ENTRY_RELOC(...) +#define ELEM_RELOC(...) + +#include "arc-plt.def" + +#undef PLT_TYPE_START +#undef PLT_TYPE_END +#undef PLT_ENTRY +#undef PLT_ELEM +#undef ENTRY_RELOC +#undef ELEM_RELOC + +#define PLT_TYPE_START(NAME) \ + const struct plt_reloc NAME##_plt_entry_relocs[] = { +#define PLT_TYPE_END(NAME) \ + {0, 0, 0, LAST_RELOC, 0} \ + }; +#define PLT_ENTRY(...) +#define PLT_ELEM(...) +#define ENTRY_RELOC(...) { __VA_ARGS__ }, +#define ELEM_RELOC(...) + +#include "arc-plt.def" + +#undef PLT_TYPE_START +#undef PLT_TYPE_END +#undef PLT_ENTRY +#undef PLT_ELEM +#undef ENTRY_RELOC +#undef ELEM_RELOC + + +#define PLT_TYPE_START(NAME) \ + const insn_hword NAME##_plt_elem[] = { +#define PLT_TYPE_END(NAME) }; +#define PLT_ENTRY(...) +#define PLT_ELEM(...) __VA_ARGS__, +#define ENTRY_RELOC(...) +#define ELEM_RELOC(...) + +#include "arc-plt.def" + +#undef PLT_TYPE_START +#undef PLT_TYPE_END +#undef PLT_ENTRY +#undef PLT_ELEM +#undef ENTRY_RELOC +#undef ELEM_RELOC + +#define PLT_TYPE_START(NAME) \ + const struct plt_reloc NAME##_plt_elem_relocs[] = { +#define PLT_TYPE_END(NAME) \ + {0, 0, 0, LAST_RELOC, 0} \ + }; +#define PLT_ENTRY(...) +#define PLT_ELEM(...) +#define ENTRY_RELOC(...) +#define ELEM_RELOC(...) { __VA_ARGS__ }, + +#include "arc-plt.def" + +#undef PLT_TYPE_START +#undef PLT_TYPE_END +#undef PLT_ENTRY +#undef PLT_ELEM +#undef ENTRY_RELOC +#undef ELEM_RELOC + + +#define PLT_TYPE_START(NAME) \ + { \ + .entry = &NAME##_plt_entry, \ + .entry_size = sizeof (NAME##_plt_entry), \ + .elem = &NAME##_plt_elem, \ + .elem_size = sizeof (NAME##_plt_elem), \ + .entry_relocs = NAME##_plt_entry_relocs, \ + .elem_relocs = NAME##_plt_elem_relocs +#define PLT_TYPE_END(NAME) }, +#define PLT_ENTRY(...) +#define PLT_ELEM(...) +#define ENTRY_RELOC(...) +#define ELEM_RELOC(...) +struct plt_version_t plt_versions[PLT_MAX] = + { +#include "arc-plt.def" + }; + +#undef PLT_TYPE_START +#undef PLT_TYPE_END +#undef PLT_ENTRY +#undef PLT_ELEM +#undef ENTRY_RELOC +#undef ELEM_RELOC diff --git a/bfd/arc-plt.def b/bfd/arc-plt.def index b2f825b068cf..87644ae54f47 100644 --- a/bfd/arc-plt.def +++ b/bfd/arc-plt.def @@ -1,4 +1,4 @@ -/* Arc V2 Related PLT entries. +/* Arc V2/V3 Related PLT entries. Copyright (C) 2016-2022 Free Software Foundation, Inc. Contributed by Cupertino Miranda (cmiranda@synopsys.com). @@ -19,15 +19,72 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ -PLT_TYPE_START (ELF_ARCV2_PIC) - PLT_ENTRY (0x2730, 0x7f8b, 0x0000, 0x0000) /* ld %r11, [pcl,0] : 0 to be replaced by _DYNAMIC@GOTPC+4 */ - PLT_ENTRY (0x2730, 0x7f8a, 0x0000, 0x0000) /* ld %r10, [pcl,0] : 0 to be replaced by _DYNAMIC@GOTPC+8 */ - PLT_ENTRY (0x2020, 0x0280) /* j [%r10] */ - PLT_ENTRY (0x0,0x0,0x0,0x0,0x0,0x0) /* padding */ - PLT_ELEM (0x2730, 0x7f8c, 0x0000, 0x0000) /* ld %r12, [%pc,func@got] */ - PLT_ELEM (0x2021, 0x0300) /* j.d [%r12] */ - PLT_ELEM (0x240a, 0x1fc0) /* mov %r12, %pcl */ +PLT_TYPE_START (ELF_ARCV3_PIC) +/* + -- at .got.plt + 0 should be the address of .dynamic + ldl r11, [pcl, 0] .got.plt + 8 + ldl r10, [pcl, 0] .got.plt + 16 + j [r10] + padding + + 2e: 2731 ff0b 0000 0000 ldl r11,[pcl,0@s32] ;2c + 32: R_ARC_GOTPC32 f_var + 36: 2731 ff0a 0000 0000 ldl r10,[pcl,0@s32] ;34 + 3a: R_ARC_GOTPC32 f_var + 3e: 2020 0280 j [r10] +*/ + +/* ldl %r11, [pcl,0] : 0 to be replaced by _DYNAMIC@GOTPC+4. */ + PLT_ENTRY (0x2731, 0xff0b, 0x0000, 0x0000) +/* ldl %r10, [pcl,0] : 0 to be replaced by _DYNAMIC@GOTPC+8. */ + PLT_ENTRY (0x2731, 0xff0a, 0x0000, 0x0000) +/* j [%r10]. */ + PLT_ENTRY (0x2020, 0x0280) +/* padding. */ + PLT_ENTRY (0x0, 0x0, 0x0, 0x0, 0x0,0x0) + +/* + ldl r12, [pcl, 0] -- at .got.plt + 0 should be the address of .dynamic + + 46: 2731 ff0c 0000 0000 ldl r12,[pcl,0@s32] ;44 + 4a: R_ARC_GOTPC32 f_var + 4e: 2021 0300 j.d [r12] + 52: 5c0a 1fc0 movl r12,pcl +*/ + +/* ld %r12, [%pc,func@got]. */ + PLT_ELEM (0x2731, 0xff0c, 0x0000, 0x0000) +/* j.d [%r12]. */ + PLT_ELEM (0x2021, 0x0300) +/* movl %r12, %pcl. */ + PLT_ELEM (0x5c0a, 0x1fc0) + + ENTRY_RELOC (4, 32, 0xFFFFFFFF, SGOT | RELATIVE_INSN_32 | MIDDLE_ENDIAN, 8) + ENTRY_RELOC (12, 32, 0xFFFFFFFF, SGOT | RELATIVE_INSN_32 | MIDDLE_ENDIAN, 16) + ENTRY_RELOC (20, 32, 0xFFFFFFFF, SGOT, 0) + + ELEM_RELOC (4, 32, 0xFFFFFFFF, SGOT | RELATIVE_INSN_32 | MIDDLE_ENDIAN, 0) + +PLT_TYPE_END (ELF_ARCV3_PIC) + + +PLT_TYPE_START (ELF_ARCV2_PIC) +/* ld %r11, [pcl,0] : 0 to be replaced by _DYNAMIC@GOTPC+4. */ + PLT_ENTRY (0x2730, 0x7f8b, 0x0000, 0x0000) +/* ld %r10, [pcl,0] : 0 to be replaced by _DYNAMIC@GOTPC+8. */ + PLT_ENTRY (0x2730, 0x7f8a, 0x0000, 0x0000) +/* j [%r10]. */ + PLT_ENTRY (0x2020, 0x0280) +/* padding. */ + PLT_ENTRY (0x0,0x0,0x0,0x0,0x0,0x0) + + /* ld %r12, [%pc,func@got]. */ + PLT_ELEM (0x2730, 0x7f8c, 0x0000, 0x0000) +/* j.d [%r12]. */ + PLT_ELEM (0x2021, 0x0300) +/* mov %r12, %pcl. */ + PLT_ELEM (0x240a, 0x1fc0) ENTRY_RELOC (4, 32, 0xFFFFFFFF, SGOT | RELATIVE_INSN_32 | MIDDLE_ENDIAN, 4) ENTRY_RELOC (12, 32, 0xFFFFFFFF, SGOT | RELATIVE_INSN_32 | MIDDLE_ENDIAN, 8) @@ -38,14 +95,18 @@ PLT_TYPE_START (ELF_ARCV2_PIC) PLT_TYPE_END (ELF_ARCV2_PIC) PLT_TYPE_START (ELF_ARCV2_ABS) - PLT_ENTRY (0x1600,0x700b,0x0000,0x0000) /* ld %r11, [0] */ - PLT_ENTRY (0x1600,0x700a,0x0000,0x0000) /* ld %r10, [0] */ - PLT_ENTRY (0x2020,0x0280) /* j [%r10] */ - PLT_ENTRY (0x0,0x0,0x0,0x0,0x0,0x0) /* padding */ - - PLT_ELEM (0x2730, 0x7f8c, 0x0000, 0x0000) /* ld %r12, [%pcl,func@gotpc] */ - PLT_ELEM (0x2021,0x0300) /* j.d [%r12] */ - PLT_ELEM (0x240a,0x1fc0) /* mov %r12, %pcl */ +/* ld %r11, [0]. */ + PLT_ENTRY (0x1600,0x700b,0x0000,0x0000) +/* ld %r10, [0]. */ + PLT_ENTRY (0x1600,0x700a,0x0000,0x0000) +/* j [%r10]. */ + PLT_ENTRY (0x2020,0x0280) +/* padding. */ + PLT_ENTRY (0x0,0x0,0x0,0x0,0x0,0x0) + + PLT_ELEM (0x2730, 0x7f8c, 0x0000, 0x0000) /* ld %r12, [%pcl,func@gotpc]. */ + PLT_ELEM (0x2021,0x0300) /* j.d [%r12]. */ + PLT_ELEM (0x240a,0x1fc0) /* mov %r12, %pcl. */ ENTRY_RELOC (4, 32, 0xFFFFFFFF, SGOT | MIDDLE_ENDIAN, 4) ENTRY_RELOC (12, 32, 0xFFFFFFFF, SGOT | MIDDLE_ENDIAN, 8) @@ -59,14 +120,18 @@ PLT_TYPE_END (ELF_ARCV2_ABS) /* Non Arc V2 Related PLT entries. */ PLT_TYPE_START (ELF_ARC_PIC) - PLT_ENTRY (0x2730,0x7f8b,0x0000,0x0000) /* ld %r11, [pcl,0] : 0 to be replaced by _DYNAMIC@GOTPC+4 */ - PLT_ENTRY (0x2730,0x7f8a,0x0000,0x0000) /* ld %r10, [pcl,0] : 0 to be replaced by -DYNAMIC@GOTPC+8 */ - PLT_ENTRY (0x2020,0x0280) /* j [%r10] */ - PLT_ENTRY (0x0,0x0) /* padding */ - - PLT_ELEM (0x2730,0x7f8c,0x0000,0x0000) /* ld %r12, [%pc,func@got] */ - PLT_ELEM (0x7c20) /* j_s.d [%r12] */ - PLT_ELEM (0x74ef) /* mov_s %r12, %pcl */ +/* ld %r11, [pcl,0] : 0 to be replaced by _DYNAMIC@GOTPC+4. */ + PLT_ENTRY (0x2730,0x7f8b,0x0000,0x0000) +/* ld %r10, [pcl,0] : 0 to be replaced by -DYNAMIC@GOTPC+8. */ + PLT_ENTRY (0x2730,0x7f8a,0x0000,0x0000) +/* j [%r10]. */ + PLT_ENTRY (0x2020,0x0280) +/* padding. */ + PLT_ENTRY (0x0,0x0) + + PLT_ELEM (0x2730,0x7f8c,0x0000,0x0000) /* ld %r12, [%pc,func@got]. */ + PLT_ELEM (0x7c20) /* j_s.d [%r12]. */ + PLT_ELEM (0x74ef) /* mov_s %r12, %pcl. */ ENTRY_RELOC (4, 32, 0xFFFFFFFF, SGOT | RELATIVE_INSN_32 | MIDDLE_ENDIAN, 4) ENTRY_RELOC (12, 32, 0xFFFFFFFF, SGOT | RELATIVE_INSN_32 | MIDDLE_ENDIAN, 8) @@ -77,13 +142,13 @@ PLT_TYPE_START (ELF_ARC_PIC) PLT_TYPE_END (ELF_ARC_PIC) PLT_TYPE_START (ELF_ARC_ABS) - PLT_ENTRY (0x1600,0x700b,0x0000,0x0000) /* ld %r11, [0] */ - PLT_ENTRY (0x1600,0x700a,0x0000,0x0000) /* ld %r10, [0] */ - PLT_ENTRY (0x2020,0x0280) /* j [%r10] */ - PLT_ENTRY (0x0,0x0) /* padding */ + PLT_ENTRY (0x1600,0x700b,0x0000,0x0000) /* ld %r11, [0]. */ + PLT_ENTRY (0x1600,0x700a,0x0000,0x0000) /* ld %r10, [0]. */ + PLT_ENTRY (0x2020,0x0280) /* j [%r10]. */ + PLT_ENTRY (0x0,0x0) /* padding. */ - PLT_ELEM (0x2730,0x7f8c,0x0000,0x0000) /* ld %r12, [%pc,func@gotpc] */ - PLT_ELEM (0x7c20,0x74ef) /* mov_s %r12, %pcl */ + PLT_ELEM (0x2730,0x7f8c,0x0000,0x0000) /* ld %r12, [%pc,func@gotpc]. */ + PLT_ELEM (0x7c20,0x74ef) /* mov_s %r12, %pcl. */ ENTRY_RELOC (4, 32, 0xFFFFFFFF, SGOT | MIDDLE_ENDIAN, 4) ENTRY_RELOC (12, 32, 0xFFFFFFFF, SGOT | MIDDLE_ENDIAN, 8) diff --git a/bfd/arc-plt.h b/bfd/arc-plt.h index 8dc31fb5be78..b25185cb8ba4 100644 --- a/bfd/arc-plt.h +++ b/bfd/arc-plt.h @@ -22,6 +22,9 @@ #ifndef ARC_PLT_H #define ARC_PLT_H +#include "sysdep.h" +#include "bfd.h" + /* Instructions appear in memory as a sequence of half-words (16 bit); individual half-words are represented on the target in target byte order. We use 'unsigned short' on the host to represent the PLT templates, @@ -92,97 +95,20 @@ struct plt_version_t }; #define PLT_TYPE_START(NAME) \ - const insn_hword NAME##_plt_entry[] = { -#define PLT_TYPE_END(NAME) }; -#define PLT_ENTRY(...) __VA_ARGS__, -#define PLT_ELEM(...) -#define ENTRY_RELOC(...) -#define ELEM_RELOC(...) - -#include "arc-plt.def" - -#undef PLT_TYPE_START -#undef PLT_TYPE_END -#undef PLT_ENTRY -#undef PLT_ELEM -#undef ENTRY_RELOC -#undef ELEM_RELOC - -#define PLT_TYPE_START(NAME) \ - const struct plt_reloc NAME##_plt_entry_relocs[] = { -#define PLT_TYPE_END(NAME) \ - {0, 0, 0, LAST_RELOC, 0} \ - }; -#define PLT_ENTRY(...) -#define PLT_ELEM(...) -#define ENTRY_RELOC(...) { __VA_ARGS__ }, -#define ELEM_RELOC(...) + extern const insn_hword NAME##_plt_entry[]; \ + extern const struct plt_reloc NAME##_plt_entry_relocs[]; \ + extern const insn_hword NAME##_plt_elem[]; \ + extern const struct plt_reloc NAME##_plt_elem_relocs[]; -#include "arc-plt.def" -#undef PLT_TYPE_START -#undef PLT_TYPE_END -#undef PLT_ENTRY -#undef PLT_ELEM -#undef ENTRY_RELOC -#undef ELEM_RELOC - - -#define PLT_TYPE_START(NAME) \ - const insn_hword NAME##_plt_elem[] = { -#define PLT_TYPE_END(NAME) }; -#define PLT_ENTRY(...) -#define PLT_ELEM(...) __VA_ARGS__, -#define ENTRY_RELOC(...) -#define ELEM_RELOC(...) - -#include "arc-plt.def" - -#undef PLT_TYPE_START -#undef PLT_TYPE_END -#undef PLT_ENTRY -#undef PLT_ELEM -#undef ENTRY_RELOC -#undef ELEM_RELOC - -#define PLT_TYPE_START(NAME) \ - const struct plt_reloc NAME##_plt_elem_relocs[] = { -#define PLT_TYPE_END(NAME) \ - {0, 0, 0, LAST_RELOC, 0} \ - }; -#define PLT_ENTRY(...) -#define PLT_ELEM(...) -#define ENTRY_RELOC(...) -#define ELEM_RELOC(...) { __VA_ARGS__ }, - -#include "arc-plt.def" - -#undef PLT_TYPE_START -#undef PLT_TYPE_END -#undef PLT_ENTRY -#undef PLT_ELEM -#undef ENTRY_RELOC -#undef ELEM_RELOC - - -#define PLT_TYPE_START(NAME) \ - { \ - .entry = &NAME##_plt_entry, \ - .entry_size = sizeof (NAME##_plt_entry), \ - .elem = &NAME##_plt_elem, \ - .elem_size = sizeof (NAME##_plt_elem), \ - .entry_relocs = NAME##_plt_entry_relocs, \ - .elem_relocs = NAME##_plt_elem_relocs -#define PLT_TYPE_END(NAME) }, +#define PLT_TYPE_END(NAME) #define PLT_ENTRY(...) #define PLT_ELEM(...) #define ENTRY_RELOC(...) #define ELEM_RELOC(...) -const struct plt_version_t plt_versions[PLT_MAX] = { #include "arc-plt.def" -}; #undef PLT_TYPE_START #undef PLT_TYPE_END #undef PLT_ENTRY @@ -190,5 +116,6 @@ const struct plt_version_t plt_versions[PLT_MAX] = { #undef ENTRY_RELOC #undef ELEM_RELOC +extern struct plt_version_t plt_versions[PLT_MAX]; -#endif /* ARC_PLT_H */ +#endif diff --git a/bfd/archures.c b/bfd/archures.c index d19b5d7ee6ba..8c4ad360cbd3 100644 --- a/bfd/archures.c +++ b/bfd/archures.c @@ -366,6 +366,9 @@ DESCRIPTION .#define bfd_mach_arc_arc601 4 .#define bfd_mach_arc_arc700 3 .#define bfd_mach_arc_arcv2 5 +. bfd_arch_arc64, {* ARCv3 32/64 Cores. *} +.#define bfd_mach_arcv3_64 1 +.#define bfd_mach_arcv3_32 2 . bfd_arch_m32c, {* Renesas M16C/M32C. *} .#define bfd_mach_m16c 0x75 .#define bfd_mach_m32c 0x78 @@ -615,6 +618,7 @@ DESCRIPTION extern const bfd_arch_info_type bfd_aarch64_arch; extern const bfd_arch_info_type bfd_alpha_arch; extern const bfd_arch_info_type bfd_arc_arch; +extern const bfd_arch_info_type bfd_arc64_arch; extern const bfd_arch_info_type bfd_arm_arch; extern const bfd_arch_info_type bfd_avr_arch; extern const bfd_arch_info_type bfd_bfin_arch; @@ -705,6 +709,7 @@ static const bfd_arch_info_type * const bfd_archures_list[] = &bfd_aarch64_arch, &bfd_alpha_arch, &bfd_arc_arch, + &bfd_arc64_arch, &bfd_arm_arch, &bfd_avr_arch, &bfd_bfin_arch, diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h index 8e815bab6242..7a1db7fd7302 100644 --- a/bfd/bfd-in2.h +++ b/bfd/bfd-in2.h @@ -1740,6 +1740,9 @@ enum bfd_architecture #define bfd_mach_arc_arc601 4 #define bfd_mach_arc_arc700 3 #define bfd_mach_arc_arcv2 5 + bfd_arch_arc64, /* ARCv3 32/64 Cores. */ +#define bfd_mach_arcv3_64 1 +#define bfd_mach_arcv3_32 2 bfd_arch_m32c, /* Renesas M16C/M32C. */ #define bfd_mach_m16c 0x75 #define bfd_mach_m32c 0x78 @@ -3345,6 +3348,7 @@ pc-relative or some form of GOT-indirect relocation. */ BFD_RELOC_ARC_16, BFD_RELOC_ARC_24, BFD_RELOC_ARC_32, + BFD_RELOC_ARC_64, BFD_RELOC_ARC_N8, BFD_RELOC_ARC_N16, BFD_RELOC_ARC_N24, @@ -3409,6 +3413,27 @@ pc-relative or some form of GOT-indirect relocation. */ BFD_RELOC_ARC_S21H_PCREL_PLT, BFD_RELOC_ARC_NPS_CMEM16, BFD_RELOC_ARC_JLI_SECTOFF, + BFD_RELOC_ARC_S7H_PCREL, + BFD_RELOC_ARC_S8H_PCREL, + BFD_RELOC_ARC_S9H_PCREL, + BFD_RELOC_ARC_S10H_PCREL, + BFD_RELOC_ARC_S13H_PCREL, + BFD_RELOC_ARC_ALIGN, + BFD_RELOC_ARC_ADD8, + BFD_RELOC_ARC_ADD16, + BFD_RELOC_ARC_SUB8, + BFD_RELOC_ARC_SUB16, + BFD_RELOC_ARC_SUB32, + BFD_RELOC_ARC_LO32, + BFD_RELOC_ARC_HI32, + BFD_RELOC_ARC_LO32_ME, + BFD_RELOC_ARC_HI32_ME, + BFD_RELOC_ARC_N64, + BFD_RELOC_ARC_SDA_LDST3, + BFD_RELOC_ARC_NLO32, + BFD_RELOC_ARC_NLO32_ME, + BFD_RELOC_ARC_PCLO32_ME_2, + BFD_RELOC_ARC_PLT34, /* ADI Blackfin 16 bit immediate absolute reloc. */ BFD_RELOC_BFIN_16_IMM, diff --git a/bfd/config.bfd b/bfd/config.bfd index cfe582478826..244747fa6371 100644 --- a/bfd/config.bfd +++ b/bfd/config.bfd @@ -182,7 +182,8 @@ case "${targ_cpu}" in aarch64*) targ_archs="bfd_aarch64_arch bfd_arm_arch";; alpha*) targ_archs=bfd_alpha_arch ;; am33_2.0*) targ_archs=bfd_mn10300_arch ;; -arc*) targ_archs=bfd_arc_arch ;; +arc|arceb) targ_archs=bfd_arc_arch ;; +arc64|arc32) targ_archs=bfd_arc64_arch ;; arm*) targ_archs=bfd_arm_arch ;; bfin*) targ_archs=bfd_bfin_arch ;; c30*) targ_archs=bfd_tic30_arch ;; @@ -342,16 +343,29 @@ case "${targ}" in targ_defvec=am33_elf32_linux_vec ;; - arc*eb-*-elf* | arc*eb-*-linux*) + arceb-*-elf* | arceb-*-linux*) targ_defvec=arc_elf32_be_vec targ_selvecs=arc_elf32_le_vec ;; - arc*-*-elf* | arc*-*-linux*) + arc-*-elf* | arc-*-linux*) targ_defvec=arc_elf32_le_vec targ_selvecs=arc_elf32_be_vec ;; +#ifdef BFD64 + arc64-*-*) + targ_defvec=arc64_elf64_le_vec + targ_selvecs=arc64_elf32_le_vec + want64=true + ;; + arc32-*-*) + targ_defvec=arc64_elf32_le_vec + targ_selvecs=arc64_elf64_le_vec + want64=true + ;; +#endif + arm-*-darwin*) targ_defvec=arm_mach_o_vec targ_selvecs="mach_o_le_vec mach_o_be_vec mach_o_fat_vec" diff --git a/bfd/configure b/bfd/configure index b23c9eebfd7e..67f0ce31af5c 100755 --- a/bfd/configure +++ b/bfd/configure @@ -13367,8 +13367,10 @@ do aout0_be_vec) tb="$tb aout0.lo aout32.lo" ;; aout64_vec) tb="$tb demo64.lo aout64.lo"; target_size=64 ;; aout_vec) tb="$tb host-aout.lo aout32.lo" ;; - arc_elf32_be_vec) tb="$tb elf32-arc.lo elf32.lo $elf" ;; - arc_elf32_le_vec) tb="$tb elf32-arc.lo elf32.lo $elf" ;; + arc_elf32_be_vec) tb="$tb arc-plt.lo elf32-arc.lo elf32.lo $elf" ;; + arc_elf32_le_vec) tb="$tb arc-plt.lo elf32-arc.lo elf32.lo $elf" ;; + arc64_elf64_le_vec) tb="$tb arc-plt.lo elf64-arc64.lo elf64.lo $elf"; target_size=64 ;; + arc64_elf32_le_vec) tb="$tb arc-plt.lo elf32-arc64.lo elf32.lo $elf"; target_size=64 ;; arm_elf32_be_vec) tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;; arm_elf32_le_vec) tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;; arm_elf32_fdpic_be_vec) tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;; diff --git a/bfd/configure.ac b/bfd/configure.ac index a9078965c409..c942067fb974 100644 --- a/bfd/configure.ac +++ b/bfd/configure.ac @@ -446,8 +446,10 @@ do aout0_be_vec) tb="$tb aout0.lo aout32.lo" ;; aout64_vec) tb="$tb demo64.lo aout64.lo"; target_size=64 ;; aout_vec) tb="$tb host-aout.lo aout32.lo" ;; - arc_elf32_be_vec) tb="$tb elf32-arc.lo elf32.lo $elf" ;; - arc_elf32_le_vec) tb="$tb elf32-arc.lo elf32.lo $elf" ;; + arc_elf32_be_vec) tb="$tb arc-plt.lo elf32-arc.lo elf32.lo $elf" ;; + arc_elf32_le_vec) tb="$tb arc-plt.lo elf32-arc.lo elf32.lo $elf" ;; + arc64_elf64_le_vec) tb="$tb arc-plt.lo elf64-arc64.lo elf64.lo $elf"; target_size=64 ;; + arc64_elf32_le_vec) tb="$tb arc-plt.lo elf32-arc64.lo elf32.lo $elf"; target_size=64 ;; arm_elf32_be_vec) tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;; arm_elf32_le_vec) tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;; arm_elf32_fdpic_be_vec) tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;; diff --git a/bfd/cpu-arc.c b/bfd/cpu-arc.c index 9be2056c8f2a..4bd0d237d22e 100644 --- a/bfd/cpu-arc.c +++ b/bfd/cpu-arc.c @@ -26,51 +26,53 @@ static const bfd_arch_info_type * arc_compatible (const bfd_arch_info_type *a, const bfd_arch_info_type *b); -#define ARC(mach, print_name, default_p, next) \ - { \ - 32, /* Bits in a word. */ \ - 32, /* Bits in an address. */ \ - 8, /* Bits in a byte. */ \ - bfd_arch_arc, \ - mach, \ - "arc", \ - print_name, \ - 4, /* Section alignment power. */ \ - default_p, \ - arc_compatible, \ - bfd_default_scan, \ - bfd_arch_default_fill, \ - next, \ - 0 /* Maximum offset of a reloc from the start of an insn. */ \ - } +#define ARC(BITS_WORD, BITS_ADDR, MACH, PRINT_NAME, DEFAULT_P, NEXT) \ +{ \ + BITS_WORD, /* 32 bits in a word. */ \ + BITS_ADDR, /* 32 bits in an address. */ \ + 8, /* 8 bits in a byte. */ \ + bfd_arch_arc, \ + MACH, \ + "arc", \ + PRINT_NAME, \ + 4, /* section alignment power. */ \ + DEFAULT_P, \ + arc_compatible, \ + bfd_default_scan, \ + bfd_arch_default_fill, \ + NEXT, \ + 0 /* Maximum offset of a reloc from the start of an insn. */ \ +} static const bfd_arch_info_type arch_info_struct[] = { - ARC (bfd_mach_arc_arc600, "A6" , false, &arch_info_struct[1]), - ARC (bfd_mach_arc_arc601, "ARC601", false, &arch_info_struct[2]), - ARC (bfd_mach_arc_arc700, "ARC700", false, &arch_info_struct[3]), - ARC (bfd_mach_arc_arc700, "A7", false, &arch_info_struct[4]), - ARC (bfd_mach_arc_arcv2, "ARCv2", false, &arch_info_struct[5]), - ARC (bfd_mach_arc_arcv2, "EM", false, &arch_info_struct[6]), - ARC (bfd_mach_arc_arcv2, "HS", false, NULL), + ARC (32, 32, bfd_mach_arc_arc600, "A6" , false, &arch_info_struct[1]), + ARC (32, 32, bfd_mach_arc_arc601, "ARC601", false, &arch_info_struct[2]), + ARC (32, 32, bfd_mach_arc_arc700, "ARC700", false, &arch_info_struct[3]), + ARC (32, 32, bfd_mach_arc_arc700, "A7", false, &arch_info_struct[4]), + ARC (32, 32, bfd_mach_arc_arcv2, "ARCv2", false, &arch_info_struct[5]), + ARC (32, 32, bfd_mach_arc_arcv2, "EM", false, &arch_info_struct[6]), + ARC (32, 32, bfd_mach_arc_arcv2, "HS", false, NULL), }; const bfd_arch_info_type bfd_arc_arch = - ARC (bfd_mach_arc_arc600, "ARC600", true, &arch_info_struct[0]); - -/* ARC-specific "compatible" function. The general rule is that if A and B are - compatible, then this function should return architecture that is more - "feature-rich", that is, can run both A and B. ARCv2, EM and HS all has - same mach number, so bfd_default_compatible assumes they are the same, and - returns an A. That causes issues with GDB, because GDB assumes that if - machines are compatible, then "compatible ()" always returns same machine - regardless of argument order. As a result GDB gets confused because, for - example, compatible (ARCv2, EM) returns ARCv2, but compatible (EM, ARCv2) - returns EM, hence GDB is not sure if they are compatible and prints a - warning. */ + ARC (32, 32, bfd_mach_arc_arc600, "ARC600", true, &arch_info_struct[0]); + +/* ARC-specific "compatible" function. The general rule is that if A + and B are compatible, then this function should return architecture + that is more "feature-rich", that is, can run both A and B. ARCv2, + EM and HS all has same mach number, so bfd_default_compatible + assumes they are the same, and returns an A. That causes issues + with GDB, because GDB assumes that if machines are compatible, then + "compatible ()" always returns same machine regardless of argument + order. As a result GDB gets confused because, for example, + compatible (ARCv2, EM) returns ARCv2, but compatible (EM, ARCv2) + returns EM, hence GDB is not sure if they are compatible and prints + a warning. */ static const bfd_arch_info_type * -arc_compatible (const bfd_arch_info_type *a, const bfd_arch_info_type *b) +arc_compatible (const bfd_arch_info_type *a ATTRIBUTE_UNUSED, + const bfd_arch_info_type *b ATTRIBUTE_UNUSED) { const bfd_arch_info_type * const em = &arch_info_struct[5]; const bfd_arch_info_type * const hs = &arch_info_struct[6]; @@ -84,9 +86,6 @@ arc_compatible (const bfd_arch_info_type *a, const bfd_arch_info_type *b) if (a->arch != b->arch) return NULL; - if (a->bits_per_word != b->bits_per_word) - return NULL; - /* ARCv2|EM and EM. */ if ((a->mach == bfd_mach_arc_arcv2 && b == em) || (b->mach == bfd_mach_arc_arcv2 && a == em)) diff --git a/bfd/cpu-arc64.c b/bfd/cpu-arc64.c new file mode 100644 index 000000000000..514025b219ab --- /dev/null +++ b/bfd/cpu-arc64.c @@ -0,0 +1,75 @@ +/* BFD support for the ARC64 processor + Copyright (C) 2022 Free Software Foundation, Inc. + + This file is part of BFD, the Binary File Descriptor library. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#include "sysdep.h" +#include "bfd.h" +#include "libbfd.h" + +/* ARC64-specific "compatible" function. The general rule is that if + A and B are compatible, then this function should return + architecture that is more "feature-rich", that is, can run both A + and B. */ + +static const bfd_arch_info_type * +compatible (const bfd_arch_info_type *a ATTRIBUTE_UNUSED, + const bfd_arch_info_type *b ATTRIBUTE_UNUSED) +{ + /* If a & b are for different architecture we can do nothing. */ + if (a->arch != b->arch) + return NULL; + + /* If a & b are for the same machine then all is well. */ + if (a->mach == b->mach) + return a; + + /* Otherwise if either a or b is the 'default' machine + then it can be polymorphed into the other. */ + if (a->the_default) + return b; + + if (b->the_default) + return a; + + return NULL; +} + +#define ARC64(WORDSIZE, MACH, PRINT_NAME, DEFAULT_P, NEXT) \ + { \ + WORDSIZE, /* 64/32 bits in a word. */ \ + WORDSIZE, /* 64/32 bits in an address. */ \ + 8, /* 8 bits in a byte. */ \ + bfd_arch_arc64, \ + MACH, \ + "arc64", \ + PRINT_NAME, \ + 4, /* section alignment power. */ \ + DEFAULT_P, \ + compatible, \ + bfd_default_scan, \ + bfd_arch_default_fill, \ + NEXT, \ + 0 /* Maximum offset of a reloc from the start of an insn. */ \ + } + +static const bfd_arch_info_type bfd_arc64_arch_32 = + ARC64 (32, bfd_mach_arcv3_32, "arc64:32", false, NULL); + +const bfd_arch_info_type bfd_arc64_arch = + ARC64 (64, bfd_mach_arcv3_64, "arc64:64", true, &bfd_arc64_arch_32); diff --git a/bfd/elf32-arc.c b/bfd/elfnn-arc.c similarity index 69% rename from bfd/elf32-arc.c rename to bfd/elfnn-arc.c index d94113154dbe..4f1d4a456b87 100644 --- a/bfd/elf32-arc.c +++ b/bfd/elfnn-arc.c @@ -27,13 +27,43 @@ #include "libiberty.h" #include "opcode/arc-func.h" #include "opcode/arc.h" + +#define RELA_SIZE sizeof(ElfNN_External_Rela) + #include "arc-plt.h" -#define FEATURE_LIST_NAME bfd_feature_list -#define CONFLICT_LIST bfd_conflict_list +#define FEATURE_LIST_NAME bfdNN_feature_list +#define CONFLICT_LIST bfdNN_conflict_list #include "opcode/arc-attrs.h" -/* #define ARC_ENABLE_DEBUG 1 */ +/* Possible ARC architectures. */ +#define ARC 0 +#define ARC32 1 +#define ARC64 2 + +/* Arc's architecture size. */ +#define ARCH_SIZE NN + +/* Arc's architecture type. */ +#define ARCH_TYPE ARCAA + +/* Arc's BFD backend. There are two different backends, one for + ARCv1/v2 and the second for the ARCv3/64/32. They are + incompatible. */ +#define ARC_BFD_ARCH bfd_arch_arcAA + +/* The name of the dynamic interpreter. This is put in the .interp + section. */ + +#define ELF64_DYNAMIC_INTERPRETER "/lib/ld.so.1" +#define ELF32_DYNAMIC_INTERPRETER "/sbin/ld-uClibc.so" + +#define LOG_FILE_ALIGN (ARCH_SIZE == 32 ? 2 : 3) + +/* Do not enable this unless you know what you are doing. + Code under this macro is not safe for production. + #define ARC_ENABLE_DEBUG 1 */ + #ifdef ARC_ENABLE_DEBUG static const char * name_for_global_symbol (struct elf_link_hash_entry *h) @@ -48,26 +78,27 @@ name_for_global_symbol (struct elf_link_hash_entry *h) #define ARC_DEBUG(...) #endif - #define ADD_RELA(BFD, SECTION, OFFSET, SYM_IDX, TYPE, ADDEND) \ { \ struct elf_link_hash_table *_htab = elf_hash_table (info); \ Elf_Internal_Rela _rel; \ bfd_byte * _loc; \ + const struct elf_backend_data *bed; \ + bed = get_elf_backend_data (BFD); \ \ if (_htab->dynamic_sections_created) \ { \ BFD_ASSERT (_htab->srel##SECTION &&_htab->srel##SECTION->contents); \ _loc = _htab->srel##SECTION->contents \ + ((_htab->srel##SECTION->reloc_count) \ - * sizeof (Elf32_External_Rela)); \ + * sizeof (ElfNN_External_Rela)); \ _htab->srel##SECTION->reloc_count++; \ _rel.r_addend = ADDEND; \ _rel.r_offset = (_htab->s##SECTION)->output_section->vma \ + (_htab->s##SECTION)->output_offset + OFFSET; \ BFD_ASSERT ((long) SYM_IDX != -1); \ - _rel.r_info = ELF32_R_INFO (SYM_IDX, TYPE); \ - bfd_elf32_swap_reloca_out (BFD, &_rel, _loc); \ + _rel.r_info = ELFNN_R_INFO (SYM_IDX, TYPE); \ + bed->s->swap_reloca_out (BFD, &_rel, _loc); \ } \ } @@ -195,9 +226,11 @@ struct elf_arc_link_hash_entry #define arc_bfd_get_8(A,B,C) bfd_get_8(A,B) #define arc_bfd_get_16(A,B,C) bfd_get_16(A,B) #define arc_bfd_get_32(A,B,C) bfd_get_32(A,B) +#define arc_bfd_get_64(A,B,C) bfd_get_64(A,B) #define arc_bfd_put_8(A,B,C,D) bfd_put_8(A,B,C) #define arc_bfd_put_16(A,B,C,D) bfd_put_16(A,B,C) #define arc_bfd_put_32(A,B,C,D) bfd_put_32(A,B,C) +#define arc_bfd_put_64(A,B,C,D) bfd_put_64(A,B,C) static bfd_reloc_status_type @@ -230,10 +263,10 @@ arc_elf_reloc (bfd *abfd ATTRIBUTE_UNUSED, TYPE = VALUE, enum howto_list -{ + { #include "elf/arc-reloc.def" - HOWTO_LIST_LAST -}; + HOWTO_LIST_LAST + }; #undef ARC_RELOC_HOWTO @@ -243,7 +276,7 @@ enum howto_list "R_" #TYPE, false, 0, 0, false), static struct reloc_howto_struct elf_arc_howto_table[] = -{ + { #include "elf/arc-reloc.def" /* Example of what is generated by the preprocessor. Currently kept as an example. @@ -282,17 +315,6 @@ arc_elf_howto_init (void) } #undef ARC_RELOC_HOWTO - -#define ARC_RELOC_HOWTO(TYPE, VALUE, SIZE, BITSIZE, RELOC_FUNCTION, OVERFLOW, FORMULA) \ - [TYPE] = VALUE, - -const int howto_table_lookup[] = -{ -#include "elf/arc-reloc.def" -}; - -#undef ARC_RELOC_HOWTO - static reloc_howto_type * arc_elf_howto (unsigned int r_type) { @@ -327,7 +349,7 @@ elf_arc_link_hash_newfunc (struct bfd_hash_entry *entry, subclass. */ if (ret == NULL) ret = (struct elf_arc_link_hash_entry *) - bfd_hash_allocate (table, sizeof (struct elf_arc_link_hash_entry)); + bfd_hash_allocate (table, sizeof (struct elf_arc_link_hash_entry)); if (ret == NULL) return (struct bfd_hash_entry *) ret; @@ -356,8 +378,9 @@ static struct bfd_link_hash_table * arc_elf_link_hash_table_create (bfd *abfd) { struct elf_arc_link_hash_table *ret; + bfd_size_type amt = sizeof (struct elf_arc_link_hash_table); - ret = (struct elf_arc_link_hash_table *) bfd_zmalloc (sizeof (*ret)); + ret = (struct elf_arc_link_hash_table *) bfd_zmalloc (amt); if (ret == NULL) return NULL; @@ -379,24 +402,27 @@ arc_elf_link_hash_table_create (bfd *abfd) { BFD_RELOC_##TYPE, R_##TYPE }, static const struct arc_reloc_map arc_reloc_map[] = -{ + { #include "elf/arc-reloc.def" - {BFD_RELOC_NONE, R_ARC_NONE}, - {BFD_RELOC_8, R_ARC_8}, - {BFD_RELOC_16, R_ARC_16}, - {BFD_RELOC_24, R_ARC_24}, - {BFD_RELOC_32, R_ARC_32}, -}; + {BFD_RELOC_NONE, R_ARC_NONE}, + {BFD_RELOC_8, R_ARC_8}, + {BFD_RELOC_16, R_ARC_16}, + {BFD_RELOC_24, R_ARC_24}, + {BFD_RELOC_32, R_ARC_32}, + {BFD_RELOC_64, R_ARC_64}, + }; #undef ARC_RELOC_HOWTO -typedef ATTRIBUTE_UNUSED unsigned (*replace_func) (unsigned, int ATTRIBUTE_UNUSED); +typedef ATTRIBUTE_UNUSED +bfd_vma (*replace_func) (bfd_vma, bfd_vma ATTRIBUTE_UNUSED); -#define ARC_RELOC_HOWTO(TYPE, VALUE, SIZE, BITSIZE, RELOC_FUNCTION, OVERFLOW, FORMULA) \ - case TYPE: \ - func = RELOC_FUNCTION; \ - break; +#define ARC_RELOC_HOWTO(TYPE, VALUE, SIZE, BITSIZE, \ + RELOC_FUNCTION, OVERFLOW, FORMULA) \ + case TYPE: \ + func = (void *) RELOC_FUNCTION; \ + break; static replace_func get_replace_function (bfd *abfd, unsigned int r_type) @@ -405,7 +431,7 @@ get_replace_function (bfd *abfd, unsigned int r_type) switch (r_type) { - #include "elf/arc-reloc.def" +#include "elf/arc-reloc.def" } if (func == replace_bits24 && bfd_big_endian (abfd)) @@ -416,7 +442,7 @@ get_replace_function (bfd *abfd, unsigned int r_type) #undef ARC_RELOC_HOWTO static reloc_howto_type * -arc_elf32_bfd_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED, +arc_elfNN_bfd_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED, bfd_reloc_code_real_type code) { unsigned int i; @@ -503,7 +529,7 @@ arc_elf_copy_private_bfd_data (bfd *ibfd, bfd *obfd) } static reloc_howto_type * -bfd_elf32_bfd_reloc_name_lookup (bfd * abfd ATTRIBUTE_UNUSED, +bfd_elfNN_bfd_reloc_name_lookup (bfd * abfd ATTRIBUTE_UNUSED, const char *r_name) { unsigned int i; @@ -525,7 +551,7 @@ arc_info_to_howto_rel (bfd * abfd, { unsigned int r_type; - r_type = ELF32_R_TYPE (dst->r_info); + r_type = ELFNN_R_TYPE (dst->r_info); if (r_type >= (unsigned int) R_ARC_max) { /* xgettext:c-format */ @@ -536,7 +562,7 @@ arc_info_to_howto_rel (bfd * abfd, } cache_ptr->howto = arc_elf_howto (r_type); - return true; + return cache_ptr->howto != NULL; } /* Extract CPU features from an NTBS. */ @@ -549,14 +575,14 @@ arc_extract_features (const char *p) if (!p) return 0; - for (i = 0; i < ARRAY_SIZE (bfd_feature_list); i++) + for (i = 0; i < ARRAY_SIZE (FEATURE_LIST_NAME); i++) { - char *t = strstr (p, bfd_feature_list[i].attr); - unsigned l = strlen (bfd_feature_list[i].attr); + char *t = strstr (p, FEATURE_LIST_NAME[i].attr); + unsigned l = strlen (FEATURE_LIST_NAME[i].attr); if ((t != NULL) && (t[l] == ',' || t[l] == '\0')) - r |= bfd_feature_list[i].feature; + r |= FEATURE_LIST_NAME[i].feature; } return r; @@ -629,20 +655,21 @@ arc_elf_merge_attributes (bfd *ibfd, struct bfd_link_info *info) case Tag_ARC_PCS_config: if (out_attr[i].i == 0) out_attr[i].i = in_attr[i].i; - else if (in_attr[i].i != 0 && out_attr[i].i != in_attr[i].i) + else if ((in_attr[i].i & 0xff) != 0 + && ((out_attr[i].i & 0xff) != (in_attr[i].i & 0xff))) { const char *tagval[] = { "Absent", "Bare-metal/mwdt", - "Bare-metal/newlib", "Linux/uclibc", - "Linux/glibc" }; - BFD_ASSERT (in_attr[i].i < 5); - BFD_ASSERT (out_attr[i].i < 5); + "Bare-metal/newlib", "Linux/uclibc", + "Linux/glibc" }; + BFD_ASSERT ((in_attr[i].i & 0xff) < 5); + BFD_ASSERT ((out_attr[i].i & 0xff) < 5); /* It's sometimes ok to mix different configs, so this is only a warning. */ _bfd_error_handler (_("warning: %pB: conflicting platform configuration " "%s with %s"), ibfd, - tagval[in_attr[i].i], - tagval[out_attr[i].i]); + tagval[in_attr[i].i & 0xff], + tagval[out_attr[i].i & 0xff]); } break; @@ -653,7 +680,7 @@ arc_elf_merge_attributes (bfd *ibfd, struct bfd_link_info *info) && ((out_attr[i].i + in_attr[i].i) < 6)) { const char *tagval[] = { "Absent", "ARC6xx", "ARC7xx", - "ARCEM", "ARCHS" }; + "ARCEM", "ARCHS" }; BFD_ASSERT (in_attr[i].i < 5); BFD_ASSERT (out_attr[i].i < 5); /* We cannot mix code for different CPUs. */ @@ -690,33 +717,33 @@ arc_elf_merge_attributes (bfd *ibfd, struct bfd_link_info *info) /* First, check if a feature is compatible with the output object chosen CPU. */ - for (j = 0; j < ARRAY_SIZE (bfd_feature_list); j++) - if (((in_feature | out_feature) & bfd_feature_list[j].feature) - && (!(cpu_out & bfd_feature_list[j].cpus))) + for (j = 0; j < ARRAY_SIZE (FEATURE_LIST_NAME); j++) + if (((in_feature | out_feature) & FEATURE_LIST_NAME[j].feature) + && (!(cpu_out & FEATURE_LIST_NAME[j].cpus))) { _bfd_error_handler (_("error: %pB: unable to merge ISA extension attributes " "%s"), - obfd, bfd_feature_list[j].name); + obfd, FEATURE_LIST_NAME[j].name); result = false; break; } /* Second, if we have compatible features with the chosen CPU, check if they are compatible among them. */ - for (j = 0; j < ARRAY_SIZE (bfd_conflict_list); j++) - if (((in_feature | out_feature) & bfd_conflict_list[j]) - == bfd_conflict_list[j]) + for (j = 0; j < ARRAY_SIZE (CONFLICT_LIST); j++) + if (((in_feature | out_feature) & CONFLICT_LIST[j]) + == CONFLICT_LIST[j]) { unsigned k; - for (k = 0; k < ARRAY_SIZE (bfd_feature_list); k++) + for (k = 0; k < ARRAY_SIZE (FEATURE_LIST_NAME); k++) { - if (in_feature & bfd_feature_list[k].feature - & bfd_conflict_list[j]) - p1 = (char *) bfd_feature_list[k].name; - if (out_feature & bfd_feature_list[k].feature - & bfd_conflict_list[j]) - p2 = (char *) bfd_feature_list[k].name; + if (in_feature & FEATURE_LIST_NAME[k].feature + & CONFLICT_LIST[j]) + p1 = (char *) FEATURE_LIST_NAME[k].name; + if (out_feature & FEATURE_LIST_NAME[k].feature + & CONFLICT_LIST[j]) + p2 = (char *) FEATURE_LIST_NAME[k].name; } _bfd_error_handler (_("error: %pB: conflicting ISA extension attributes " @@ -728,9 +755,9 @@ arc_elf_merge_attributes (bfd *ibfd, struct bfd_link_info *info) /* Everithing is alright. */ out_feature |= in_feature; p1 = NULL; - for (j = 0; j < ARRAY_SIZE (bfd_feature_list); j++) - if (out_feature & bfd_feature_list[j].feature) - p1 = arc_stralloc (p1, bfd_feature_list[j].attr); + for (j = 0; j < ARRAY_SIZE (FEATURE_LIST_NAME); j++) + if (out_feature & FEATURE_LIST_NAME[j].feature) + p1 = arc_stralloc (p1, FEATURE_LIST_NAME[j].attr); if (p1) out_attr[Tag_ARC_ISA_config].s = _bfd_elf_attr_strdup (obfd, p1); @@ -784,7 +811,7 @@ arc_elf_merge_attributes (bfd *ibfd, struct bfd_link_info *info) if (out_attr[i].i == 0) out_attr[i].i = in_attr[i].i; else if (out_attr[i].i != 0 && in_attr[i].i != 0 - && out_attr[i].i != in_attr[i].i) + && out_attr[i].i != in_attr[i].i) { _bfd_error_handler (_("error: %pB: conflicting attributes %s: %s with %s"), @@ -811,7 +838,7 @@ arc_elf_merge_attributes (bfd *ibfd, struct bfd_link_info *info) if (out_attr[i].i == 0) out_attr[i].i = in_attr[i].i; else if (out_attr[i].i != 0 && in_attr[i].i != 0 - && out_attr[i].i != in_attr[i].i) + && out_attr[i].i != in_attr[i].i) { _bfd_error_handler (_("error: %pB: conflicting attributes %s"), @@ -865,10 +892,19 @@ arc_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info) flagword in_flags; asection *sec; - /* Check if we have the same endianess. */ + /* Check if we have the same endianess. */ if (! _bfd_generic_verify_endian_match (ibfd, info)) return false; + if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0) + { + _bfd_error_handler + (_("%pB: ABI is incompatible with the selected emulation:\n" + " target emulation '%s' does not match '%s'"), + ibfd, bfd_get_target (ibfd), bfd_get_target (obfd)); + return false; + } + if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour || bfd_get_flavour (obfd) != bfd_target_elf_flavour) return true; @@ -956,7 +992,7 @@ arc_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info) if (bfd_get_mach (obfd) < bfd_get_mach (ibfd)) { - return bfd_set_arch_mach (obfd, bfd_arch_arc, bfd_get_mach (ibfd)); + return bfd_set_arch_mach (obfd, ARC_BFD_ARCH, bfd_get_mach (ibfd)); } return true; @@ -964,7 +1000,7 @@ arc_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info) /* Return a best guess for the machine number based on the attributes. */ -static unsigned int +static ATTRIBUTE_UNUSED unsigned int bfd_arc_get_mach_from_attributes (bfd * abfd) { int arch = bfd_elf_get_obj_attr_int (abfd, OBJ_ATTR_PROC, Tag_ARC_CPU_base); @@ -986,19 +1022,24 @@ bfd_arc_get_mach_from_attributes (bfd * abfd) ? bfd_mach_arc_arc700 : bfd_mach_arc_arcv2; } -/* Set the right machine number for an ARC ELF file. */ +/* Set the right machine number for an ARC ELF file. Make sure this + is initialised, or you'll have the potential of passing + garbage---or misleading values---into the call to + bfd_default_set_arch_mach (). */ + static bool arc_elf_object_p (bfd * abfd) { - /* Make sure this is initialised, or you'll have the potential of passing - garbage---or misleading values---into the call to - bfd_default_set_arch_mach (). */ - unsigned int mach = bfd_mach_arc_arc700; - unsigned long arch = elf_elfheader (abfd)->e_flags & EF_ARC_MACH_MSK; - unsigned e_machine = elf_elfheader (abfd)->e_machine; - - if (e_machine == EM_ARC_COMPACT || e_machine == EM_ARC_COMPACT2) + unsigned int mach; + unsigned long ATTRIBUTE_UNUSED arch = elf_elfheader (abfd)->e_flags + & EF_ARC_MACH_MSK; + unsigned e_machine = elf_elfheader (abfd)->e_machine; + + switch (e_machine) { +#if (ARCH_TYPE == ARC) && (ARCH_SIZE == 32) + case EM_ARC_COMPACT: + case EM_ARC_COMPACT2: switch (arch) { case E_ARC_MACH_ARC600: @@ -1018,24 +1059,29 @@ arc_elf_object_p (bfd * abfd) mach = bfd_arc_get_mach_from_attributes (abfd); break; } - } - else - { - if (e_machine == EM_ARC) - { - _bfd_error_handler - (_("error: the ARC4 architecture is no longer supported")); - return false; - } - else - { - _bfd_error_handler - (_("warning: unset or old architecture flags; " - "use default machine")); - } + break; + + case EM_ARC: + _bfd_error_handler + (_("error: the ARC4 architecture is no longer supported")); + return false; + +#else /* New ARCv3 arches. */ + case EM_ARC_COMPACT3_64: + mach = bfd_mach_arcv3_64; + break; + + case EM_ARC_COMPACT3: + mach = bfd_mach_arcv3_32; + break; +#endif + + default: + _bfd_error_handler (_("error: unset or old architecture flags.")); + return false; } - return bfd_default_set_arch_mach (abfd, bfd_arch_arc, mach); + return bfd_default_set_arch_mach (abfd, ARC_BFD_ARCH, mach); } /* The final processing done just before writing out an ARC ELF object file. @@ -1049,6 +1095,7 @@ arc_elf_final_write_processing (bfd *abfd) Tag_ARC_ABI_osver); flagword e_flags = elf_elfheader (abfd)->e_flags & ~EF_ARC_OSABI_MSK; +#if (ARCH_TYPE == ARC) && (ARCH_SIZE == 32) switch (bfd_get_mach (abfd)) { case bfd_mach_arc_arcv2: @@ -1058,7 +1105,21 @@ arc_elf_final_write_processing (bfd *abfd) emf = EM_ARC_COMPACT; break; } - +#else + switch (bfd_get_mach (abfd)) + { + case bfd_mach_arcv3_64: + emf = EM_ARC_COMPACT3_64; + break; + case bfd_mach_arcv3_32: + emf = EM_ARC_COMPACT3; + break; + default: + _bfd_error_handler (_("Unknown ARC architecture")); + bfd_set_error (bfd_error_sorry); + return false; + } +#endif elf_elfheader (abfd)->e_machine = emf; /* Record whatever is the current syscall ABI version. */ @@ -1108,7 +1169,8 @@ debug_arc_reloc (struct arc_relocation_data reloc_data) ARC_DEBUG (" Input_section:\n"); if (reloc_data.input_section != NULL) { - ARC_DEBUG (" section name = %s, output_offset 0x%08x, output_section->vma = 0x%08x\n", + ARC_DEBUG (" section name = %s, output_offset 0x%08x, " \ + "output_section->vma = 0x%08x\n", reloc_data.input_section->name, (unsigned int) reloc_data.input_section->output_offset, (unsigned int) reloc_data.input_section->output_section->vma); @@ -1120,7 +1182,7 @@ debug_arc_reloc (struct arc_relocation_data reloc_data) } else { - ARC_DEBUG (" input section is NULL\n"); + ARC_DEBUG ("\tinput section is NULL\n"); } } #else @@ -1134,14 +1196,14 @@ middle_endian_convert (bfd_vma insn, bool do_it) { insn = ((insn & 0xffff0000) >> 16) - | ((insn & 0xffff) << 16); + | ((insn & 0xffff) << 16); } return insn; } -/* This function is called for relocations that are otherwise marked as NOT - requiring overflow checks. In here we perform non-standard checks of - the relocation value. */ +/* This function is called for relocations that are otherwise marked + as NOT requiring overflow checks. In here we perform non-standard + checks of the relocation value. */ static inline bfd_reloc_status_type arc_special_overflow_checks (const struct arc_relocation_data reloc_data, @@ -1189,17 +1251,19 @@ arc_special_overflow_checks (const struct arc_relocation_data reloc_data, #define ME(reloc) (reloc) -#define IS_ME(FORMULA,BFD) ((strstr (FORMULA, "ME") != NULL) \ +#define IS_ME(FORMULA,BFD) ((strstr (FORMULA, "ME") != NULL) \ && (!bfd_big_endian (BFD))) -#define S ((bfd_signed_vma) (reloc_data.sym_value \ - + (reloc_data.sym_section->output_section != NULL ? \ - (reloc_data.sym_section->output_offset \ - + reloc_data.sym_section->output_section->vma) : 0))) -#define L ((bfd_signed_vma) (reloc_data.sym_value \ - + (reloc_data.sym_section->output_section != NULL ? \ - (reloc_data.sym_section->output_offset \ - + reloc_data.sym_section->output_section->vma) : 0))) +#define S \ + ((bfd_signed_vma) (reloc_data.sym_value \ + + (reloc_data.sym_section->output_section != NULL ? \ + (reloc_data.sym_section->output_offset \ + + reloc_data.sym_section->output_section->vma) : 0))) +#define L \ + ((bfd_signed_vma) (reloc_data.sym_value \ + + (reloc_data.sym_section->output_section != NULL ? \ + (reloc_data.sym_section->output_offset \ + + reloc_data.sym_section->output_section->vma) : 0))) #define A (reloc_data.reloc_addend) #define B (0) #define G (reloc_data.got_offset_value) @@ -1207,29 +1271,32 @@ arc_special_overflow_checks (const struct arc_relocation_data reloc_data, #define GOT_BEGIN (htab->sgot->output_section->vma) #define MES (0) - /* P: relative offset to PCL The offset should be to the - current location aligned to 32 bits. */ -#define P ((bfd_signed_vma) ( \ - ( \ - (reloc_data.input_section->output_section != NULL ? \ - reloc_data.input_section->output_section->vma : 0) \ - + reloc_data.input_section->output_offset \ - + (reloc_data.reloc_offset - (bitsize >= 32 ? 4 : 0))) \ - & ~0x3)) -#define PDATA ((bfd_signed_vma) ( \ - (reloc_data.input_section->output_section->vma \ - + reloc_data.input_section->output_offset \ - + (reloc_data.reloc_offset)))) -#define SECTSTART (bfd_signed_vma) (reloc_data.sym_section->output_section->vma \ - + reloc_data.sym_section->output_offset) -#define FINAL_SECTSTART \ +/* P: relative offset to PCL The offset should be to the + current location aligned to 32 bits. */ +#define P ((bfd_signed_vma) \ + (((reloc_data.input_section->output_section != NULL ? \ + reloc_data.input_section->output_section->vma : 0) \ + + reloc_data.input_section->output_offset \ + + (reloc_data.reloc_offset - (bitsize == 32 ? 4 : \ + (bitsize == 34 ? 2 : 0)))) \ + & ~0x3)) +#define PDATA \ + ((bfd_signed_vma) ((reloc_data.input_section->output_section->vma \ + + reloc_data.input_section->output_offset \ + + (reloc_data.reloc_offset)))) +#define SECTSTART \ + (bfd_signed_vma) (reloc_data.sym_section->output_section->vma \ + + reloc_data.sym_section->output_offset) +#define FINAL_SECTSTART \ (bfd_signed_vma) (reloc_data.sym_section->output_section->vma) #define JLI (bfd_signed_vma) (reloc_data.sym_section->output_section->vma) #define _SDA_BASE_ (bfd_signed_vma) (reloc_data.sdata_begin_symbol_vma) -#define TLS_REL (bfd_signed_vma) \ +#define TLS_REL (bfd_signed_vma) \ ((elf_hash_table (info))->tls_sec->output_section->vma) -#define TLS_TBSS (align_power(TCB_SIZE, \ - reloc_data.sym_section->alignment_power)) +#define TLS_TBSS (align_power(TCB_SIZE, \ + reloc_data.sym_section->alignment_power)) +#define ICARRY insn +#define DEREFP (insn) #define none (0) @@ -1281,20 +1348,21 @@ arc_special_overflow_checks (const struct arc_relocation_data reloc_data, #define PRINT_DEBUG_RELOC_INFO_BEFORE(...) #define PRINT_DEBUG_RELOC_INFO_AFTER -#endif /* ARC_ENABLE_DEBUG */ +#endif /* ARC_ENABLE_DEBUG. */ -#define ARC_RELOC_HOWTO(TYPE, VALUE, SIZE, BITSIZE, RELOC_FUNCTION, OVERFLOW, FORMULA) \ +#define ARC_RELOC_HOWTO(TYPE, VALUE, SIZE, BITSIZE, \ + RELOC_FUNCTION, OVERFLOW, FORMULA) \ case R_##TYPE: \ - { \ - bfd_signed_vma bitsize ATTRIBUTE_UNUSED = BITSIZE; \ - relocation = FORMULA ; \ - PRINT_DEBUG_RELOC_INFO_BEFORE (#FORMULA, #TYPE); \ - insn = middle_endian_convert (insn, IS_ME (#FORMULA, abfd)); \ - insn = (* get_replace_function (abfd, TYPE)) (insn, relocation); \ - insn = middle_endian_convert (insn, IS_ME (#FORMULA, abfd)); \ - PRINT_DEBUG_RELOC_INFO_AFTER; \ - } \ - break; + { \ + bfd_signed_vma bitsize ATTRIBUTE_UNUSED = BITSIZE; \ + relocation = FORMULA ; \ + PRINT_DEBUG_RELOC_INFO_BEFORE (#FORMULA, #TYPE); \ + insn = middle_endian_convert (insn, IS_ME (#FORMULA, abfd)); \ + insn = (* get_replace_function (abfd, TYPE)) (insn, relocation); \ + insn = middle_endian_convert (insn, IS_ME (#FORMULA, abfd)); \ + PRINT_DEBUG_RELOC_INFO_AFTER; \ + } \ + break; static bfd_reloc_status_type arc_do_relocation (bfd_byte * contents, @@ -1313,6 +1381,11 @@ arc_do_relocation (bfd_byte * contents, switch (reloc_data.howto->size) { + case 4: + insn = arc_bfd_get_64 (abfd, + contents + reloc_data.reloc_offset, + reloc_data.input_section); + break; case 2: insn = arc_bfd_get_32 (abfd, contents + reloc_data.reloc_offset, @@ -1361,7 +1434,7 @@ arc_do_relocation (bfd_byte * contents, DEBUG_ARC_RELOC (reloc_data); ARC_DEBUG ("Relocation value = signed -> %d, unsigned -> %u" ", hex -> (0x%08x)\n", - (int) relocation, (unsigned) relocation, (int) relocation); + (int) relocation, (unsigned) relocation, (int) relocation); return flag; } @@ -1369,16 +1442,21 @@ arc_do_relocation (bfd_byte * contents, /* Write updated instruction back to memory. */ switch (reloc_data.howto->size) { + case 4: + arc_bfd_put_64 (abfd, insn, + contents + reloc_data.reloc_offset, + reloc_data.input_section); + break; case 2: arc_bfd_put_32 (abfd, insn, contents + reloc_data.reloc_offset, reloc_data.input_section); break; case 1: - arc_bfd_put_16 (abfd, insn, - contents + reloc_data.reloc_offset, - reloc_data.input_section); - break; + arc_bfd_put_16 (abfd, insn, + contents + reloc_data.reloc_offset, + reloc_data.input_section); + break; case 0: arc_bfd_put_8 (abfd, insn, contents + reloc_data.reloc_offset, @@ -1404,6 +1482,7 @@ arc_do_relocation (bfd_byte * contents, #undef SECTSTART #undef JLI #undef _SDA_BASE_ +#undef ICARRY #undef none #undef ARC_RELOC_HOWTO @@ -1424,14 +1503,14 @@ arc_do_relocation (bfd_byte * contents, corresponding to the st_shndx field of each local symbol. */ static int -elf_arc_relocate_section (bfd * output_bfd, - struct bfd_link_info * info, - bfd * input_bfd, - asection * input_section, - bfd_byte * contents, - Elf_Internal_Rela * relocs, - Elf_Internal_Sym * local_syms, - asection ** local_sections) +elf_arc_relocate_section (bfd *output_bfd, + struct bfd_link_info *info, + bfd *input_bfd, + asection *input_section, + bfd_byte *contents, + Elf_Internal_Rela *relocs, + Elf_Internal_Sym *local_syms, + asection **local_sections) { Elf_Internal_Shdr * symtab_hdr; struct elf_link_hash_entry ** sym_hashes; @@ -1439,7 +1518,9 @@ elf_arc_relocate_section (bfd * output_bfd, Elf_Internal_Rela * wrel; Elf_Internal_Rela * relend; struct elf_link_hash_table * htab = elf_hash_table (info); + const struct elf_backend_data *bed; + bed = get_elf_backend_data (output_bfd); symtab_hdr = &((elf_tdata (input_bfd))->symtab_hdr); sym_hashes = elf_sym_hashes (input_bfd); @@ -1447,32 +1528,33 @@ elf_arc_relocate_section (bfd * output_bfd, relend = relocs + input_section->reloc_count; for (; rel < relend; wrel++, rel++) { - enum elf_arc_reloc_type r_type; - reloc_howto_type *howto; - unsigned long r_symndx; - struct elf_link_hash_entry *h; - Elf_Internal_Sym *sym; - asection *sec; - struct elf_link_hash_entry *h2; - const char *msg; - bool unresolved_reloc = false; + enum elf_arc_reloc_type r_type; + reloc_howto_type * howto; + unsigned long r_symndx; + struct elf_link_hash_entry * h; + Elf_Internal_Sym * sym; + asection * sec; + struct elf_link_hash_entry * h2; + const char * msg; + bool unresolved_reloc = false; + bool resolved_to_zero; struct arc_relocation_data reloc_data = - { - .reloc_offset = 0, - .reloc_addend = 0, - .got_offset_value = 0, - .sym_value = 0, - .sym_section = NULL, - .howto = NULL, - .input_section = NULL, - .sdata_begin_symbol_vma = 0, - .sdata_begin_symbol_vma_set = false, - .got_symbol_vma = 0, - .should_relocate = false - }; - - r_type = ELF32_R_TYPE (rel->r_info); + { + .reloc_offset = 0, + .reloc_addend = 0, + .got_offset_value = 0, + .sym_value = 0, + .sym_section = NULL, + .howto = NULL, + .input_section = NULL, + .sdata_begin_symbol_vma = 0, + .sdata_begin_symbol_vma_set = false, + .got_symbol_vma = 0, + .should_relocate = false + }; + + r_type = ELFNN_R_TYPE (rel->r_info); if (r_type >= (int) R_ARC_max) { @@ -1481,7 +1563,7 @@ elf_arc_relocate_section (bfd * output_bfd, } howto = arc_elf_howto (r_type); - r_symndx = ELF32_R_SYM (rel->r_info); + r_symndx = ELFNN_R_SYM (rel->r_info); /* If we are generating another .o file and the symbol in not local, skip this relocation. */ @@ -1583,9 +1665,9 @@ elf_arc_relocate_section (bfd * output_bfd, /* For ld -r, remove relocations in debug sections against sections defined in discarded sections. Not done for eh_frame editing code expects to be present. */ - if (bfd_link_relocatable (info) - && (input_section->flags & SEC_DEBUGGING)) - wrel--; + if (bfd_link_relocatable (info) + && (input_section->flags & SEC_DEBUGGING)) + wrel--; continue; } @@ -1597,6 +1679,8 @@ elf_arc_relocate_section (bfd * output_bfd, continue; } + resolved_to_zero = (h != NULL && UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)); + if (r_symndx < symtab_hdr->sh_info) /* A local symbol. */ { reloc_data.sym_value = sym->st_value; @@ -1625,7 +1709,7 @@ elf_arc_relocate_section (bfd * output_bfd, BFD_ASSERT (htab->sgot != NULL || !is_reloc_for_GOT (howto)); if (htab->sgot != NULL) reloc_data.got_symbol_vma = htab->sgot->output_section->vma - + htab->sgot->output_offset; + + htab->sgot->output_offset; reloc_data.should_relocate = true; } @@ -1639,19 +1723,18 @@ elf_arc_relocate_section (bfd * output_bfd, while (h->root.type == bfd_link_hash_indirect || h->root.type == bfd_link_hash_warning) - { - struct elf_arc_link_hash_entry *ah_old = - (struct elf_arc_link_hash_entry *) h; - h = (struct elf_link_hash_entry *) h->root.u.i.link; - struct elf_arc_link_hash_entry *ah = - (struct elf_arc_link_hash_entry *) h; - - if (ah->got_ents == 0 && ah_old->got_ents != ah->got_ents) - ah->got_ents = ah_old->got_ents; - } + { + struct elf_arc_link_hash_entry *ah_old + = (struct elf_arc_link_hash_entry *) h; + h = (struct elf_link_hash_entry *) h->root.u.i.link; + struct elf_arc_link_hash_entry *ah + = (struct elf_arc_link_hash_entry *) h; + + if (ah->got_ents == 0 && ah_old->got_ents != ah->got_ents) + ah->got_ents = ah_old->got_ents; + } /* TODO: Need to validate what was the intention. */ - /* BFD_ASSERT ((h->dynindx == -1) || (h->forced_local != 0)); */ reloc_data.symbol_name = h->root.root.string; /* If we have encountered a definition for this symbol. */ @@ -1668,13 +1751,13 @@ elf_arc_relocate_section (bfd * output_bfd, struct elf_arc_link_hash_entry *ah = (struct elf_arc_link_hash_entry *) h; /* TODO: Change it to use arc_do_relocation with - ARC_32 reloc. Try to use ADD_RELA macro. */ + ARC_32 reloc. Try to use ADD_RELA macro. */ bfd_vma relocation = reloc_data.sym_value + reloc_data.reloc_addend + (reloc_data.sym_section->output_section != NULL ? - (reloc_data.sym_section->output_offset - + reloc_data.sym_section->output_section->vma) - : 0); + (reloc_data.sym_section->output_offset + + reloc_data.sym_section->output_section->vma) + : 0); BFD_ASSERT (ah->got_ents); bfd_vma got_offset = ah->got_ents->offset; @@ -1705,7 +1788,8 @@ elf_arc_relocate_section (bfd * output_bfd, reloc_data.sym_section = htab->splt; reloc_data.should_relocate = true; } - else + /* See pr22269. */ + else if (!resolved_to_zero) continue; } else @@ -1739,7 +1823,7 @@ elf_arc_relocate_section (bfd * output_bfd, BFD_ASSERT (htab->sgot != NULL || !is_reloc_for_GOT (howto)); if (htab->sgot != NULL) reloc_data.got_symbol_vma = htab->sgot->output_section->vma - + htab->sgot->output_offset; + + htab->sgot->output_offset; } if ((is_reloc_for_GOT (howto) @@ -1763,106 +1847,109 @@ elf_arc_relocate_section (bfd * output_bfd, if (h == NULL) { - create_got_dynrelocs_for_single_entry ( - got_entry_for_type (list, - arc_got_entry_type_for_reloc (howto)), - output_bfd, info, NULL); + create_got_dynrelocs_for_single_entry + (got_entry_for_type (list, + arc_got_entry_type_for_reloc (howto)), + output_bfd, info, NULL); } } -#define IS_ARC_PCREL_TYPE(TYPE) \ - ( (TYPE == R_ARC_PC32) \ - || (TYPE == R_ARC_32_PCREL)) +#define IS_ARC_PCREL_TYPE(TYPE) \ + ((TYPE == R_ARC_PC32) \ + || (TYPE == R_ARC_32_PCREL)) switch (r_type) { - case R_ARC_32: - case R_ARC_32_ME: - case R_ARC_PC32: - case R_ARC_32_PCREL: - if (bfd_link_pic (info) - && (input_section->flags & SEC_ALLOC) != 0 - && (!IS_ARC_PCREL_TYPE (r_type) - || (h != NULL - && h->dynindx != -1 - && !h->def_regular - && (!info->symbolic || !h->def_regular)))) - { - Elf_Internal_Rela outrel; - bfd_byte *loc; - bool skip = false; - bool relocate = false; - asection *sreloc = _bfd_elf_get_dynamic_reloc_section - (input_bfd, input_section, - /*RELA*/ true); + case R_ARC_64: + case R_ARC_32: + case R_ARC_32_ME: + case R_ARC_PC32: + case R_ARC_32_PCREL: + case R_ARC_HI32_ME: + case R_ARC_LO32_ME: + if (bfd_link_pic (info) + && !resolved_to_zero + && (input_section->flags & SEC_ALLOC) != 0 + && (!IS_ARC_PCREL_TYPE (r_type) + || (h != NULL + && h->dynindx != -1 + && (!SYMBOL_REFERENCES_LOCAL (info, h))))) + { + Elf_Internal_Rela outrel; + bfd_byte *loc; + bool skip = false; + bool relocate = false; + asection *sreloc = _bfd_elf_get_dynamic_reloc_section + (input_bfd, input_section, + /*RELA*/ true); - BFD_ASSERT (sreloc != NULL); + BFD_ASSERT (sreloc != NULL); - outrel.r_offset = _bfd_elf_section_offset (output_bfd, - info, - input_section, - rel->r_offset); + outrel.r_offset = _bfd_elf_section_offset (output_bfd, + info, + input_section, + rel->r_offset); if (outrel.r_offset == (bfd_vma) -1) skip = true; - outrel.r_addend = rel->r_addend; - outrel.r_offset += (input_section->output_section->vma - + input_section->output_offset); + outrel.r_addend = rel->r_addend; + outrel.r_offset += (input_section->output_section->vma + + input_section->output_offset); - if (skip) - { - memset (&outrel, 0, sizeof outrel); + if (skip) + { + memset (&outrel, 0, sizeof outrel); + relocate = false; + } + else if (h != NULL + && h->dynindx != -1 + && (IS_ARC_PCREL_TYPE (r_type) + || !(bfd_link_executable (info) + || SYMBOLIC_BIND (info, h)) + || ! h->def_regular)) + { + BFD_ASSERT (h != NULL); + if ((input_section->flags & SEC_ALLOC) != 0) relocate = false; - } - else if (h != NULL - && h->dynindx != -1 - && (IS_ARC_PCREL_TYPE (r_type) - || !(bfd_link_executable (info) - || SYMBOLIC_BIND (info, h)) - || ! h->def_regular)) - { - BFD_ASSERT (h != NULL); - if ((input_section->flags & SEC_ALLOC) != 0) - relocate = false; - else - relocate = true; - - BFD_ASSERT (h->dynindx != -1); - outrel.r_info = ELF32_R_INFO (h->dynindx, r_type); - } - else - { - /* Handle local symbols, they either do not have a - global hash table entry (h == NULL), or are - forced local due to a version script - (h->forced_local), or the third condition is - legacy, it appears to say something like, for - links where we are pre-binding the symbols, or - there's not an entry for this symbol in the - dynamic symbol table, and it's a regular symbol - not defined in a shared object, then treat the - symbol as local, resolve it now. */ + else relocate = true; - /* outrel.r_addend = 0; */ - outrel.r_info = ELF32_R_INFO (0, R_ARC_RELATIVE); - } - BFD_ASSERT (sreloc->contents != 0); + BFD_ASSERT (h->dynindx != -1); + outrel.r_info = ELFNN_R_INFO (h->dynindx, r_type); + } + else + { + /* Handle local symbols, they either do not have a + global hash table entry (h == NULL), or are + forced local due to a version script + (h->forced_local), or the third condition is + legacy, it appears to say something like, for + links where we are pre-binding the symbols, or + there's not an entry for this symbol in the + dynamic symbol table, and it's a regular symbol + not defined in a shared object, then treat the + symbol as local, resolve it now. */ + relocate = true; + /* outrel.r_addend = 0; */ + outrel.r_info = ELFNN_R_INFO (0, R_ARC_RELATIVE); + } - loc = sreloc->contents; - loc += sreloc->reloc_count * sizeof (Elf32_External_Rela); - sreloc->reloc_count += 1; + BFD_ASSERT (sreloc->contents != 0); - bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc); + loc = sreloc->contents; + loc += sreloc->reloc_count * sizeof (ElfNN_External_Rela); + sreloc->reloc_count += 1; - if (!relocate) - continue; - } - break; - default: - break; + bed->s->swap_reloca_out (output_bfd, &outrel, loc); + + if (!relocate) + continue; + } + break; + default: + break; } if (is_reloc_SDA_relative (howto) @@ -1879,10 +1966,12 @@ elf_arc_relocate_section (bfd * output_bfd, /* Make sure we have with a dynamic linker. In case of GOT and PLT the sym_section should point to .got or .plt respectively. */ if ((is_reloc_for_GOT (howto) || is_reloc_for_PLT (howto)) - && reloc_data.sym_section == NULL) + && reloc_data.sym_section == NULL + && !resolved_to_zero) { _bfd_error_handler - (_("GOT and PLT relocations cannot be fixed with a non dynamic linker")); + (_("GOT and PLT relocations cannot be fixed with a non dynamic" \ + " linker")); bfd_set_error (bfd_error_bad_value); return false; } @@ -1895,18 +1984,20 @@ elf_arc_relocate_section (bfd * output_bfd, case bfd_reloc_overflow: (*info->callbacks->reloc_overflow) - (info, (h ? &h->root : NULL), reloc_data.symbol_name, howto->name, (bfd_vma) 0, - input_bfd, input_section, rel->r_offset); + (info, (h ? &h->root : NULL), reloc_data.symbol_name, howto->name, + (bfd_vma) 0, input_bfd, input_section, rel->r_offset); break; case bfd_reloc_undefined: (*info->callbacks->undefined_symbol) - (info, reloc_data.symbol_name, input_bfd, input_section, rel->r_offset, true); + (info, reloc_data.symbol_name, input_bfd, input_section, + rel->r_offset, true); break; case bfd_reloc_other: /* xgettext:c-format */ - msg = _("%pB(%pA): warning: unaligned access to symbol '%s' in the small data area"); + msg = _("%pB(%pA): warning: unaligned access to symbol '%s' in the" \ + " small data area"); break; case bfd_reloc_outofrange: @@ -1931,7 +2022,8 @@ elf_arc_relocate_section (bfd * output_bfd, } if (msg) - _bfd_error_handler (msg, input_bfd, input_section, reloc_data.symbol_name); + _bfd_error_handler (msg, input_bfd, input_section, + reloc_data.symbol_name); return false; } @@ -1975,7 +2067,7 @@ elf_arc_check_relocs (bfd * abfd, unsigned long r_symndx; struct elf_link_hash_entry *h; - r_type = ELF32_R_TYPE (rel->r_info); + r_type = ELFNN_R_TYPE (rel->r_info); if (r_type >= (int) R_ARC_max) { @@ -1985,7 +2077,7 @@ elf_arc_check_relocs (bfd * abfd, howto = arc_elf_howto (r_type); /* Load symbol information. */ - r_symndx = ELF32_R_SYM (rel->r_info); + r_symndx = ELFNN_R_SYM (rel->r_info); if (r_symndx < symtab_hdr->sh_info) /* Is a local symbol. */ h = NULL; else /* Global one. */ @@ -1999,8 +2091,13 @@ elf_arc_check_relocs (bfd * abfd, switch (r_type) { + case R_ARC_8: + case R_ARC_16: case R_ARC_32: + case R_ARC_64: case R_ARC_32_ME: + case R_ARC_HI32_ME: + case R_ARC_LO32_ME: /* During shared library creation, these relocs should not appear in a shared library (as memory will be read only and the dynamic linker can not resolve these. However @@ -2029,39 +2126,52 @@ elf_arc_check_relocs (bfd * abfd, return false; } - /* In some cases we are not setting the 'non_got_ref' - flag, even though the relocations don't require a GOT - access. We should extend the testing in this area to - ensure that no significant cases are being missed. */ - if (h) - h->non_got_ref = 1; - /* FALLTHROUGH */ - case R_ARC_PC32: - case R_ARC_32_PCREL: - if ((bfd_link_pic (info)) - && ((r_type != R_ARC_PC32 && r_type != R_ARC_32_PCREL) - || (h != NULL - && (!info->symbolic || !h->def_regular)))) - { - if (sreloc == NULL) - { - if (info->dynamic - && ! htab->dynamic_sections_created - && ! _bfd_elf_link_create_dynamic_sections (abfd, info)) - return false; - sreloc = _bfd_elf_make_dynamic_reloc_section (sec, dynobj, - 2, abfd, - /*rela*/ - true); - - if (sreloc == NULL) - return false; - } - sreloc->size += sizeof (Elf32_External_Rela); + /* In some cases we are not setting the 'non_got_ref' flag, + even though the relocations don't require a GOT access. + We should extend the testing in this area to ensure that + no significant cases are being missed. */ + if (h) + h->non_got_ref = 1; - } - default: + /* We don't need to handle relocs into sections not going + into the "real" output. */ + if ((sec->flags & SEC_ALLOC) == 0) + break; + + /* No need to do anything if we're not creating a shared + object. */ + if (!bfd_link_pic (info) + || (h != NULL + && UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))) + break; + + /* FALLTHROUGH */ + case R_ARC_PC32: + case R_ARC_32_PCREL: + if (!bfd_link_pic (info)) break; + + if (((r_type != R_ARC_PC32 && r_type != R_ARC_32_PCREL) + || (!SYMBOL_REFERENCES_LOCAL (info, h)))) + { + if (sreloc == NULL) + { + if (info->dynamic + && ! htab->dynamic_sections_created + && ! _bfd_elf_link_create_dynamic_sections (abfd, info)) + return false; + sreloc = _bfd_elf_make_dynamic_reloc_section (sec, dynobj, + 2, abfd, + /*rela*/ + true); + + if (sreloc == NULL) + return false; + } + sreloc->size += sizeof (ElfNN_External_Rela); + } + default: + break; } if (is_reloc_for_PLT (howto)) @@ -2099,20 +2209,18 @@ elf_arc_check_relocs (bfd * abfd, if (! _bfd_elf_create_got_section (dynobj, info)) return false; - arc_fill_got_info_for_reloc ( - arc_got_entry_type_for_reloc (howto), - get_got_entry_list_for_symbol (abfd, r_symndx, h), - info, - h); + arc_fill_got_info_for_reloc + (arc_got_entry_type_for_reloc (howto), + get_got_entry_list_for_symbol (abfd, r_symndx, h), + info, + h); } } return true; } -#define ELF_DYNAMIC_INTERPRETER "/sbin/ld-uClibc.so" - -static const struct plt_version_t * +static struct plt_version_t * arc_get_plt_version (struct bfd_link_info *info) { int i; @@ -2124,7 +2232,12 @@ arc_get_plt_version (struct bfd_link_info *info) (int) plt_versions[i].elem_size); } - if (bfd_get_mach (info->output_bfd) == bfd_mach_arc_arcv2) + if (bfd_get_mach (info->output_bfd) == bfd_mach_arcv3_64) + { + return &(plt_versions[ELF_ARCV3_PIC]); + } + else if (bfd_get_mach (info->output_bfd) == bfd_mach_arc_arcv2 + || bfd_get_mach(info->output_bfd) == bfd_mach_arcv3_32) { if (bfd_link_pic (info)) return &(plt_versions[ELF_ARCV2_PIC]); @@ -2138,6 +2251,8 @@ arc_get_plt_version (struct bfd_link_info *info) else return &(plt_versions[ELF_ARC_ABS]); } + BFD_ASSERT(0); + return NULL; } static bfd_vma @@ -2158,9 +2273,8 @@ add_symbol_to_plt (struct bfd_link_info *info) htab->splt->size += plt_data->elem_size; ARC_DEBUG ("PLT_SIZE = %d\n", (int) htab->splt->size); - htab->sgotplt->size += 4; - htab->srelplt->size += sizeof (Elf32_External_Rela); - + htab->sgotplt->size += GOT_ENTRY_SIZE; + htab->srelplt->size += sizeof (ElfNN_External_Rela); return ret; } @@ -2180,11 +2294,11 @@ plt_do_relocs_for_symbol (bfd *abfd, switch (SYM_ONLY (reloc->symbol)) { - case SGOT: - relocation - = htab->sgotplt->output_section->vma - + htab->sgotplt->output_offset + symbol_got_offset; - break; + case SGOT: + relocation + = htab->sgotplt->output_section->vma + + htab->sgotplt->output_offset + symbol_got_offset; + break; } relocation += reloc->addend; @@ -2195,26 +2309,26 @@ plt_do_relocs_for_symbol (bfd *abfd, reloc_offset -= (IS_INSN_24 (reloc->symbol)) ? 2 : 0; relocation -= htab->splt->output_section->vma - + htab->splt->output_offset - + plt_offset + reloc_offset; + + htab->splt->output_offset + + plt_offset + reloc_offset; } /* TODO: being ME is not a property of the relocation but of the - section of which is applying the relocation. */ + section of which is applying the relocation. */ if (IS_MIDDLE_ENDIAN (reloc->symbol) && !bfd_big_endian (abfd)) { relocation = ((relocation & 0xffff0000) >> 16) - | ((relocation & 0xffff) << 16); + | ((relocation & 0xffff) << 16); } switch (reloc->size) { - case 32: - bfd_put_32 (htab->splt->output_section->owner, - relocation, - htab->splt->contents + plt_offset + reloc->offset); - break; + case 32: + bfd_put_32 (htab->splt->output_section->owner, + relocation, + htab->splt->contents + plt_offset + reloc->offset); + break; } reloc = &(reloc[1]); /* Jump to next relocation. */ @@ -2228,10 +2342,12 @@ relocate_plt_for_symbol (bfd *output_bfd, { const struct plt_version_t *plt_data = arc_get_plt_version (info); struct elf_link_hash_table *htab = elf_hash_table (info); + const struct elf_backend_data *bed; bfd_vma plt_index = (h->plt.offset - plt_data->entry_size) - / plt_data->elem_size; - bfd_vma got_offset = (plt_index + 3) * 4; + / plt_data->elem_size; + bfd_vma got_offset = (plt_index + 3) * GOT_ENTRY_SIZE; + bed = get_elf_backend_data (output_bfd); ARC_DEBUG ("arc_info: PLT_OFFSET = %#lx, PLT_ENTRY_VMA = %#lx, \ GOT_ENTRY_OFFSET = %#lx, GOT_ENTRY_VMA = %#lx, for symbol %s\n", @@ -2280,11 +2396,11 @@ GOT_ENTRY_OFFSET = %#lx, GOT_ENTRY_VMA = %#lx, for symbol %s\n", rel.r_addend = 0; BFD_ASSERT (h->dynindx != -1); - rel.r_info = ELF32_R_INFO (h->dynindx, R_ARC_JMP_SLOT); + rel.r_info = ELFNN_R_INFO (h->dynindx, R_ARC_JMP_SLOT); loc = htab->srelplt->contents; - loc += plt_index * sizeof (Elf32_External_Rela); /* relA */ - bfd_elf32_swap_reloca_out (output_bfd, &rel, loc); + loc += plt_index * sizeof (ElfNN_External_Rela); /* relA */ + bed->s->swap_reloca_out (output_bfd, &rel, loc); } } @@ -2317,7 +2433,7 @@ relocate_plt_for_entry (bfd *abfd, static bool elf_arc_adjust_dynamic_symbol (struct bfd_link_info *info, - struct elf_link_hash_entry *h) + struct elf_link_hash_entry *h) { asection *s; bfd *dynobj = (elf_hash_table (info))->dynobj; @@ -2419,7 +2535,7 @@ elf_arc_adjust_dynamic_symbol (struct bfd_link_info *info, struct elf_arc_link_hash_table *arc_htab = elf_arc_hash_table (info); BFD_ASSERT (arc_htab->elf.srelbss != NULL); - arc_htab->elf.srelbss->size += sizeof (Elf32_External_Rela); + arc_htab->elf.srelbss->size += sizeof (ElfNN_External_Rela); h->needs_copy = 1; } @@ -2432,7 +2548,7 @@ elf_arc_adjust_dynamic_symbol (struct bfd_link_info *info, /* Function : elf_arc_finish_dynamic_symbol Brief : Finish up dynamic symbol handling. We set the - contents of various dynamic sections here. + contents of various dynamic sections here. Args : output_bfd : info : h : @@ -2445,6 +2561,10 @@ elf_arc_finish_dynamic_symbol (bfd * output_bfd, struct elf_link_hash_entry *h, Elf_Internal_Sym * sym) { + const struct elf_backend_data *bed; + + bed = get_elf_backend_data (output_bfd); + if (h->plt.offset != (bfd_vma) -1) { relocate_plt_for_symbol (output_bfd, info, h); @@ -2462,12 +2582,8 @@ elf_arc_finish_dynamic_symbol (bfd * output_bfd, create respective dynamic relocs. */ /* TODO: Make function to get list and not access the list directly. */ /* TODO: Move function to relocate_section create this relocs eagerly. */ - struct elf_arc_link_hash_entry *ah = - (struct elf_arc_link_hash_entry *) h; - create_got_dynrelocs_for_got_info (&ah->got_ents, - output_bfd, - info, - h); + struct elf_arc_link_hash_entry *ah = (struct elf_arc_link_hash_entry *) h; + create_got_dynrelocs_for_got_info (&ah->got_ents, output_bfd, info, h); if (h->needs_copy) { @@ -2487,7 +2603,7 @@ elf_arc_finish_dynamic_symbol (bfd * output_bfd, + h->root.u.def.section->output_offset); bfd_byte * loc = arc_htab->elf.srelbss->contents - + (arc_htab->elf.srelbss->reloc_count * sizeof (Elf32_External_Rela)); + + (arc_htab->elf.srelbss->reloc_count * sizeof (ElfNN_External_Rela)); arc_htab->elf.srelbss->reloc_count++; Elf_Internal_Rela rel; @@ -2495,9 +2611,9 @@ elf_arc_finish_dynamic_symbol (bfd * output_bfd, rel.r_offset = rel_offset; BFD_ASSERT (h->dynindx != -1); - rel.r_info = ELF32_R_INFO (h->dynindx, R_ARC_COPY); + rel.r_info = ELFNN_R_INFO (h->dynindx, R_ARC_COPY); - bfd_elf32_swap_reloca_out (output_bfd, &rel, loc); + bed->s->swap_reloca_out (output_bfd, &rel, loc); } /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute. */ @@ -2541,8 +2657,7 @@ arc_create_forced_local_got_entries_for_tls (struct bfd_hash_entry *bh, while (list != NULL) { create_got_dynrelocs_for_single_entry (list, tmp->output_bfd, - tmp->info, - (struct elf_link_hash_entry *) h); + tmp->info, (struct elf_link_hash_entry *) h); list = list->next; } } @@ -2566,14 +2681,15 @@ elf_arc_finish_dynamic_sections (bfd * output_bfd, struct elf_link_hash_table *htab = elf_hash_table (info); bfd *dynobj = (elf_hash_table (info))->dynobj; asection *sdyn = bfd_get_linker_section (dynobj, ".dynamic"); + const struct elf_backend_data *bed = get_elf_backend_data (output_bfd); if (sdyn) { - Elf32_External_Dyn *dyncon, *dynconend; + ElfNN_External_Dyn *dyncon, *dynconend; - dyncon = (Elf32_External_Dyn *) sdyn->contents; + dyncon = (ElfNN_External_Dyn *) sdyn->contents; dynconend - = (Elf32_External_Dyn *) (sdyn->contents + sdyn->size); + = (ElfNN_External_Dyn *) (sdyn->contents + sdyn->size); for (; dyncon < dynconend; dyncon++) { Elf_Internal_Dyn internal_dyn; @@ -2582,20 +2698,20 @@ elf_arc_finish_dynamic_sections (bfd * output_bfd, struct elf_link_hash_entry *h = NULL; asection *s = NULL; - bfd_elf32_swap_dyn_in (dynobj, dyncon, &internal_dyn); + bed->s->swap_dyn_in (dynobj, dyncon, &internal_dyn); switch (internal_dyn.d_tag) { GET_SYMBOL_OR_SECTION (DT_INIT, info->init_function, NULL) - GET_SYMBOL_OR_SECTION (DT_FINI, info->fini_function, NULL) - GET_SYMBOL_OR_SECTION (DT_PLTGOT, NULL, ".plt") - GET_SYMBOL_OR_SECTION (DT_JMPREL, NULL, ".rela.plt") - GET_SYMBOL_OR_SECTION (DT_PLTRELSZ, NULL, ".rela.plt") - GET_SYMBOL_OR_SECTION (DT_VERSYM, NULL, ".gnu.version") - GET_SYMBOL_OR_SECTION (DT_VERDEF, NULL, ".gnu.version_d") - GET_SYMBOL_OR_SECTION (DT_VERNEED, NULL, ".gnu.version_r") - default: - break; + GET_SYMBOL_OR_SECTION (DT_FINI, info->fini_function, NULL) + GET_SYMBOL_OR_SECTION (DT_PLTGOT, NULL, ".plt") + GET_SYMBOL_OR_SECTION (DT_JMPREL, NULL, ".rela.plt") + GET_SYMBOL_OR_SECTION (DT_PLTRELSZ, NULL, ".rela.plt") + GET_SYMBOL_OR_SECTION (DT_VERSYM, NULL, ".gnu.version") + GET_SYMBOL_OR_SECTION (DT_VERDEF, NULL, ".gnu.version_d") + GET_SYMBOL_OR_SECTION (DT_VERNEED, NULL, ".gnu.version_r") + default: + break; } /* In case the dynamic symbols should be updated with a symbol. */ @@ -2646,7 +2762,7 @@ elf_arc_finish_dynamic_sections (bfd * output_bfd, } if (do_it) - bfd_elf32_swap_dyn_out (output_bfd, &internal_dyn, dyncon); + bed->s->swap_dyn_out (output_bfd, &internal_dyn, dyncon); } if (htab->splt->size > 0) @@ -2657,7 +2773,7 @@ elf_arc_finish_dynamic_sections (bfd * output_bfd, /* TODO: Validate this. */ if (htab->srelplt->output_section != bfd_abs_section_ptr) elf_section_data (htab->srelplt->output_section) - ->this_hdr.sh_entsize = 12; + ->this_hdr.sh_entsize = GOT_ENTRY_SIZE * 3; } /* Fill in the first three entries in the global offset table. */ @@ -2667,20 +2783,24 @@ elf_arc_finish_dynamic_sections (bfd * output_bfd, h = elf_link_hash_lookup (elf_hash_table (info), "_GLOBAL_OFFSET_TABLE_", false, false, true); - if (h != NULL && h->root.type != bfd_link_hash_undefined - && h->root.u.def.section != NULL) + if (h != NULL && h->root.type != bfd_link_hash_undefined + && h->root.u.def.section != NULL) { asection *sec = h->root.u.def.section; - if (sdyn == NULL) - bfd_put_32 (output_bfd, (bfd_vma) 0, - sec->contents); - else - bfd_put_32 (output_bfd, - sdyn->output_section->vma + sdyn->output_offset, + if (sdyn == NULL) { + write_in_got(output_bfd, (bfd_vma) 0, sec->contents); - bfd_put_32 (output_bfd, (bfd_vma) 0, sec->contents + 4); - bfd_put_32 (output_bfd, (bfd_vma) 0, sec->contents + 8); + } + else { + write_in_got(output_bfd, + sdyn->output_section->vma + sdyn->output_offset, + sec->contents); + } + write_in_got(output_bfd, (bfd_vma) 0, + sec->contents + (GOT_ENTRY_SIZE)); + write_in_got(output_bfd, (bfd_vma) 0, + sec->contents + (GOT_ENTRY_SIZE * 2)); } } @@ -2708,6 +2828,7 @@ elf_arc_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, bfd *dynobj; asection *s; bool relocs_exist = false; + bool reltext_exist = false; struct elf_link_hash_table *htab = elf_hash_table (info); dynobj = htab->dynobj; @@ -2723,8 +2844,8 @@ elf_arc_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, { s = bfd_get_section_by_name (dynobj, ".interp"); BFD_ASSERT (s != NULL); - s->size = sizeof (ELF_DYNAMIC_INTERPRETER); - s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER; + s->size = sizeof (ELFNN_DYNAMIC_INTERPRETER); + s->contents = (unsigned char *) ELFNN_DYNAMIC_INTERPRETER; } /* Add some entries to the .dynamic section. We fill in some of @@ -2762,7 +2883,29 @@ elf_arc_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, else if (startswith (s->name, ".rela")) { if (s->size != 0 && s != htab->srelplt) - relocs_exist = true; + { + if (!reltext_exist) + { + const char *name = s->name + 5; + bfd *ibfd; + for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next) + if (bfd_get_flavour (ibfd) == bfd_target_elf_flavour + && ibfd->flags & DYNAMIC) + { + asection *target = bfd_get_section_by_name (ibfd, name); + if (target != NULL + && elf_section_data (target)->sreloc == s + && ((target->output_section->flags + & (SEC_READONLY | SEC_ALLOC)) + == (SEC_READONLY | SEC_ALLOC))) + { + reltext_exist = true; + break; + } + } + } + relocs_exist = true; + } /* We use the reloc_count field as a counter if we need to copy relocs into the output file. */ @@ -2789,18 +2932,44 @@ elf_arc_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, return false; } - return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs_exist); + if (htab->dynamic_sections_created) + { + /* TODO: Check if this is needed. */ + if (!bfd_link_pic (info)) + if (!_bfd_elf_add_dynamic_entry (info, DT_DEBUG, 0)) + return false; + + if (htab->splt && (htab->splt->flags & SEC_EXCLUDE) == 0) + if (!_bfd_elf_add_dynamic_entry (info, DT_PLTGOT, 0) + || !_bfd_elf_add_dynamic_entry (info, DT_PLTRELSZ, 0) + || !_bfd_elf_add_dynamic_entry (info, DT_PLTREL, DT_RELA) + || !_bfd_elf_add_dynamic_entry (info, DT_JMPREL, 0)) + return false; + + if (relocs_exist) + if (!_bfd_elf_add_dynamic_entry (info, DT_RELA, 0) + || !_bfd_elf_add_dynamic_entry (info, DT_RELASZ, 0) + || !_bfd_elf_add_dynamic_entry (info, DT_RELAENT, + sizeof (ElfNN_External_Rela))) + return false; + + if (reltext_exist) + if (!_bfd_elf_add_dynamic_entry (info, DT_TEXTREL, 0)) + return false; + } + + return true; } -/* Classify dynamic relocs such that -z combreloc can reorder and combine - them. */ +/* Classify dynamic relocs such that -z combreloc can reorder and + combine them. */ static enum elf_reloc_type_class -elf32_arc_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED, - const asection *rel_sec ATTRIBUTE_UNUSED, - const Elf_Internal_Rela *rela) +arc_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED, + const asection *rel_sec ATTRIBUTE_UNUSED, + const Elf_Internal_Rela *rela) { - switch ((int) ELF32_R_TYPE (rela->r_info)) + switch ((int) ELFNN_R_TYPE (rela->r_info)) { case R_ARC_RELATIVE: return reloc_class_relative; @@ -2808,47 +2977,44 @@ elf32_arc_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED, return reloc_class_plt; case R_ARC_COPY: return reloc_class_copy; - /* TODO: Needed in future to support ifunc. */ - /* - case R_ARC_IRELATIVE: - return reloc_class_ifunc; - */ default: return reloc_class_normal; } } -const struct elf_size_info arc_elf32_size_info = -{ - sizeof (Elf32_External_Ehdr), - sizeof (Elf32_External_Phdr), - sizeof (Elf32_External_Shdr), - sizeof (Elf32_External_Rel), - sizeof (Elf32_External_Rela), - sizeof (Elf32_External_Sym), - sizeof (Elf32_External_Dyn), - sizeof (Elf_External_Note), - 4, - 1, - 32, 2, - ELFCLASS32, EV_CURRENT, - bfd_elf32_write_out_phdrs, - bfd_elf32_write_shdrs_and_ehdr, - bfd_elf32_checksum_contents, - bfd_elf32_write_relocs, - bfd_elf32_swap_symbol_in, - bfd_elf32_swap_symbol_out, - bfd_elf32_slurp_reloc_table, - bfd_elf32_slurp_symbol_table, - bfd_elf32_swap_dyn_in, - bfd_elf32_swap_dyn_out, - bfd_elf32_swap_reloc_in, - bfd_elf32_swap_reloc_out, - bfd_elf32_swap_reloca_in, - bfd_elf32_swap_reloca_out -}; +/* We use this so we can override certain functions + (though currently we don't). */ -#define elf_backend_size_info arc_elf32_size_info +const struct elf_size_info arc_elfNN_size_info = + { + sizeof (ElfNN_External_Ehdr), + sizeof (ElfNN_External_Phdr), + sizeof (ElfNN_External_Shdr), + sizeof (ElfNN_External_Rel), + sizeof (ElfNN_External_Rela), + sizeof (ElfNN_External_Sym), + sizeof (ElfNN_External_Dyn), + sizeof (Elf_External_Note), + 4, + 1, + ARCH_SIZE, + LOG_FILE_ALIGN, + ELFCLASSNN, EV_CURRENT, + bfd_elfNN_write_out_phdrs, + bfd_elfNN_write_shdrs_and_ehdr, + bfd_elfNN_checksum_contents, + bfd_elfNN_write_relocs, + bfd_elfNN_swap_symbol_in, + bfd_elfNN_swap_symbol_out, + bfd_elfNN_slurp_reloc_table, + bfd_elfNN_slurp_symbol_table, + bfd_elfNN_swap_dyn_in, + bfd_elfNN_swap_dyn_out, + bfd_elfNN_swap_reloc_in, + bfd_elfNN_swap_reloc_out, + bfd_elfNN_swap_reloca_in, + bfd_elfNN_swap_reloca_out + }; /* GDB expects general purpose registers to be in section .reg. However Linux kernel doesn't create this section and instead writes registers to NOTE @@ -2858,7 +3024,7 @@ const struct elf_size_info arc_elf32_size_info = stable. */ static bool -elf32_arc_grok_prstatus (bfd *abfd, Elf_Internal_Note *note) +elfNN_arc_grok_prstatus (bfd *abfd, Elf_Internal_Note *note) { int offset; size_t size; @@ -2869,11 +3035,11 @@ elf32_arc_grok_prstatus (bfd *abfd, Elf_Internal_Note *note) return false; case 236: /* sizeof (struct elf_prstatus) on Linux/arc. */ - /* pr_cursig */ + /* pr_cursig. */ elf_tdata (abfd)->core->signal = bfd_get_16 (abfd, note->descdata + 12); - /* pr_pid */ + /* pr_pid. */ elf_tdata (abfd)->core->lwpid = bfd_get_32 (abfd, note->descdata + 24); - /* pr_regs */ + /* pr_regs. */ offset = 72; size = (40 * 4); /* There are 40 registers in user_regs_struct. */ break; @@ -2887,11 +3053,11 @@ elf32_arc_grok_prstatus (bfd *abfd, Elf_Internal_Note *note) string or both. */ static int -elf32_arc_obj_attrs_arg_type (int tag) +elfNN_arc_obj_attrs_arg_type (int tag) { if (tag == Tag_ARC_CPU_name - || tag == Tag_ARC_ISA_config - || tag == Tag_ARC_ISA_apex) + || tag == Tag_ARC_ISA_config + || tag == Tag_ARC_ISA_apex) return ATTR_TYPE_FLAG_STR_VAL; else if (tag < (Tag_ARC_ISA_mpy_option + 1)) return ATTR_TYPE_FLAG_INT_VAL; @@ -2902,7 +3068,7 @@ elf32_arc_obj_attrs_arg_type (int tag) /* Attribute numbers >=14 can be safely ignored. */ static bool -elf32_arc_obj_attrs_handle_unknown (bfd *abfd, int tag) +elfNN_arc_obj_attrs_handle_unknown (bfd *abfd, int tag) { if ((tag & 127) < (Tag_ARC_ISA_mpy_option + 1)) { @@ -2921,12 +3087,12 @@ elf32_arc_obj_attrs_handle_unknown (bfd *abfd, int tag) } } -/* Handle an ARC specific section when reading an object file. This is - called when bfd_section_from_shdr finds a section with an unknown - type. */ +/* Handle an ARC specific section when reading an object file. This + is called when bfd_section_from_shdr finds a section with an + unknown type. */ static bool -elf32_arc_section_from_shdr (bfd *abfd, +elfNN_arc_section_from_shdr (bfd *abfd, Elf_Internal_Shdr * hdr, const char *name, int shindex) @@ -2947,13 +3113,138 @@ elf32_arc_section_from_shdr (bfd *abfd, return true; } +/* Delete a number of bytes from a given section while relaxing. */ + +static bool +arc_relax_delete_bytes (struct bfd_link_info *link_info, bfd *abfd, + asection *sec, bfd_vma addr, int count) +{ + Elf_Internal_Shdr *symtab_hdr; + unsigned int sec_shndx; + bfd_byte *contents; + Elf_Internal_Rela *irel, *irelend; + bfd_vma toaddr; + Elf_Internal_Sym *isym; + Elf_Internal_Sym *isymend; + struct elf_link_hash_entry **sym_hashes; + struct elf_link_hash_entry **end_hashes; + struct elf_link_hash_entry **start_hashes; + unsigned int symcount; + + sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec); + + contents = elf_section_data (sec)->this_hdr.contents; + + toaddr = sec->size; + + irel = elf_section_data (sec)->relocs; + irelend = irel + sec->reloc_count; + + /* Actually delete the bytes. */ + memmove (contents + addr, contents + addr + count, + (size_t) (toaddr - addr - count)); + sec->size -= count; + + /* Adjust all the relocs. */ + for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++) + /* Get the new reloc address. */ + if ((irel->r_offset > addr && irel->r_offset < toaddr)) + irel->r_offset -= count; + + /* Adjust the local symbols defined in this section. */ + symtab_hdr = &elf_tdata (abfd)->symtab_hdr; + isym = (Elf_Internal_Sym *) symtab_hdr->contents; + for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++) + { + if (isym->st_shndx == sec_shndx + && isym->st_value > addr + && isym->st_value <= toaddr) + { + /* Adjust the addend of SWITCH relocations in this section, + which reference this local symbol. */ + isym->st_value -= count; + } + } + + /* Now adjust the global symbols defined in this section. */ + symcount = (symtab_hdr->sh_size / sizeof (ElfNN_External_Sym) + - symtab_hdr->sh_info); + sym_hashes = start_hashes = elf_sym_hashes (abfd); + end_hashes = sym_hashes + symcount; + + for (; sym_hashes < end_hashes; sym_hashes++) + { + struct elf_link_hash_entry *sym_hash = *sym_hashes; + + /* The '--wrap SYMBOL' option is causing a pain when the object + file, containing the definition of __wrap_SYMBOL, includes a + direct call to SYMBOL as well. Since both __wrap_SYMBOL and + SYMBOL reference the same symbol (which is __wrap_SYMBOL), + but still exist as two different symbols in 'sym_hashes', we + don't want to adjust the global symbol __wrap_SYMBOL twice. + This check is only relevant when symbols are being + wrapped. */ + if (link_info->wrap_hash != NULL) + { + struct elf_link_hash_entry **cur_sym_hashes; + + /* Loop only over the symbols whom been already checked. */ + for (cur_sym_hashes = start_hashes; cur_sym_hashes < sym_hashes; + cur_sym_hashes++) + /* If the current symbol is identical to 'sym_hash', that means + the symbol was already adjusted (or at least checked). */ + if (*cur_sym_hashes == sym_hash) + break; + + /* Don't adjust the symbol again. */ + if (cur_sym_hashes < sym_hashes) + continue; + } + + if ((sym_hash->root.type == bfd_link_hash_defined + || sym_hash->root.type == bfd_link_hash_defweak) + && sym_hash->root.u.def.section == sec) + { + /* As above, adjust the value if needed. */ + if (sym_hash->root.u.def.value > addr + && sym_hash->root.u.def.value <= toaddr) + sym_hash->root.u.def.value -= count; + + /* As above, adjust the size if needed. */ + if (sym_hash->root.u.def.value <= addr + && sym_hash->root.u.def.value + sym_hash->size > addr + && sym_hash->root.u.def.value + sym_hash->size <= toaddr) + sym_hash->size -= count; + } + } + + return true; +} + +/* Check Tag_ARC_PCS_config if we can relax. */ +static bool +arc_can_relax_p (bfd *abfd) +{ + obj_attribute *attr = elf_known_obj_attributes_proc (abfd); + + if (attr[Tag_ARC_PCS_config].i & 0x100) + return true; + return false; +} + /* Relaxation hook. These are the current relaxing opportunities available: * R_ARC_GOTPC32 => R_ARC_PCREL. + * R_ARC_S25W_PCREL => R_ARC_S13_PCREL. -*/ + This is a two step relaxation procedure, in the first round, we + relax all the above opportunities. In the second round, we deal + with function align by removing unnecessary NOP_S placed by the + assembler. + + Inspired from CRX and RISCV backends. */ static bool arc_elf_relax_section (bfd *abfd, asection *sec, @@ -2964,16 +3255,21 @@ arc_elf_relax_section (bfd *abfd, asection *sec, Elf_Internal_Rela *irel, *irelend; bfd_byte *contents = NULL; Elf_Internal_Sym *isymbuf = NULL; + bool do_relax = false; /* Assume nothing changes. */ *again = false; + /* Check if we can do size related relaxation. */ + do_relax = arc_can_relax_p (abfd); + /* We don't have to do anything for a relocatable link, if this section does not have relocs, or if this is not a code section. */ if (bfd_link_relocatable (link_info) || (sec->flags & SEC_RELOC) == 0 || sec->reloc_count == 0 + || sec->sec_flg0 || (sec->flags & SEC_CODE) == 0) return true; @@ -2989,45 +3285,78 @@ arc_elf_relax_section (bfd *abfd, asection *sec, irelend = internal_relocs + sec->reloc_count; for (irel = internal_relocs; irel < irelend; irel++) { - /* If this isn't something that can be relaxed, then ignore - this reloc. */ - if (ELF32_R_TYPE (irel->r_info) != (int) R_ARC_GOTPC32) - continue; + asection *sym_sec; + struct elf_link_hash_entry *htop = NULL; + bfd_vma symval; + + /* If this isn't something that can be relaxed, then ignore this + reloc. */ + if (ELFNN_R_TYPE (irel->r_info) != (int) R_ARC_GOTPC32 + && ELFNN_R_TYPE (irel->r_info) != (int) R_ARC_S25W_PCREL + && ELFNN_R_TYPE (irel->r_info) != (int) R_ARC_ALIGN) + continue; /* Get the section contents if we haven't done so already. */ if (contents == NULL) - { - /* Get cached copy if it exists. */ - if (elf_section_data (sec)->this_hdr.contents != NULL) - contents = elf_section_data (sec)->this_hdr.contents; - /* Go get them off disk. */ - else if (!bfd_malloc_and_get_section (abfd, sec, &contents)) - goto error_return; - } + { + /* Get cached copy if it exists. */ + if (elf_section_data (sec)->this_hdr.contents != NULL) + contents = elf_section_data (sec)->this_hdr.contents; + /* Go get them off disk. */ + else if (!bfd_malloc_and_get_section (abfd, sec, &contents)) + goto error_return; + } /* Read this BFD's local symbols if we haven't done so already. */ if (isymbuf == NULL && symtab_hdr->sh_info != 0) - { - isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents; - if (isymbuf == NULL) - isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr, - symtab_hdr->sh_info, 0, - NULL, NULL, NULL); - if (isymbuf == NULL) - goto error_return; - } - - struct elf_link_hash_entry *htop = NULL; + { + isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents; + if (isymbuf == NULL) + isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr, + symtab_hdr->sh_info, 0, + NULL, NULL, NULL); + if (isymbuf == NULL) + goto error_return; + } - if (ELF32_R_SYM (irel->r_info) >= symtab_hdr->sh_info) + /* Get the value of the symbol referred to by the reloc. */ + if (ELFNN_R_SYM (irel->r_info) < symtab_hdr->sh_info) + { + /* A local symbol. */ + Elf_Internal_Sym *isym; + + isym = isymbuf + ELFNN_R_SYM (irel->r_info); + sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx); + symval = isym->st_value; + /* If the reloc is absolute, it will not have + a symbol or section associated with it. */ + if (sym_sec) + symval += sym_sec->output_section->vma + + sym_sec->output_offset; + } + else { /* An external symbol. */ - unsigned int indx = ELF32_R_SYM (irel->r_info) - symtab_hdr->sh_info; + unsigned int indx = ELFNN_R_SYM (irel->r_info) - symtab_hdr->sh_info; htop = elf_sym_hashes (abfd)[indx]; + + BFD_ASSERT (htop != NULL); + if (htop->root.type != bfd_link_hash_defined + && htop->root.type != bfd_link_hash_defweak) + /* This appears to be a reference to an undefined + symbol. Just ignore it--it will be caught by the + regular reloc processing. */ + continue; + + symval = (htop->root.u.def.value + + htop->root.u.def.section->output_section->vma + + htop->root.u.def.section->output_offset); + sym_sec = htop->root.u.def.section; } - if (ELF32_R_TYPE (irel->r_info) == (int) R_ARC_GOTPC32 - && SYMBOL_REFERENCES_LOCAL (link_info, htop)) + if (ELFNN_R_TYPE (irel->r_info) == (int) R_ARC_GOTPC32 + && SYMBOL_REFERENCES_LOCAL (link_info, htop) + && link_info->relax_pass == 0) { unsigned int code; @@ -3040,7 +3369,7 @@ arc_elf_relax_section (bfd *abfd, asection *sec, symtab_hdr->contents = (unsigned char *) isymbuf; /* Fix the relocation's type. */ - irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info), R_ARC_PC32); + irel->r_info = ELFNN_R_INFO (ELFNN_R_SYM (irel->r_info), R_ARC_PC32); /* ld rA,[pcl,symbol@tgot] -> add rA,pcl,symbol@pcl. */ /* 0010 0bbb aa11 0ZZX DBBB 1111 10AA AAAA. @@ -3055,26 +3384,121 @@ arc_elf_relax_section (bfd *abfd, asection *sec, /* The size isn't changed, don't redo. */ *again = false; } + + /* Any of the next relax rules are changing the size, allow them + is assembler was informed. */ + if (!do_relax) + continue; + + if (ELFNN_R_TYPE (irel->r_info) == (int) R_ARC_S25W_PCREL + && link_info->relax_pass == 0) + { + unsigned int code; + bfd_vma value = symval + irel->r_addend; + bfd_vma dot, gap; + + /* Get the address (PCL) of this instruction. */ + dot = (sec->output_section->vma + + sec->output_offset + irel->r_offset) & ~0x03; + + /* Compute the distance from this insn to the branch target. */ + gap = value - dot; + + /* Check if the gap falls in the range that can be + accomodated in 13bit signed range (32-bit aligned). */ + if ((int) gap < -4094 || (int) gap > 4097 || ((int) gap & 0x3) != 0) + continue; + + /* Get the opcode. */ + code = bfd_get_32_me (abfd, contents + irel->r_offset); + /* bl @symb@pcl -> bl_s @symb@pcl. */ + /* 0000 1sss ssss ss10 SSSS SSSS SSNR tttt. */ + BFD_ASSERT ((code & 0xF8030000) == 0x08020000); + + /* Check for delay slot bit. */ + if (code & 0x20) + continue; + + /* Note that we've changed the relocs, section contents, etc. */ + elf_section_data (sec)->relocs = internal_relocs; + elf_section_data (sec)->this_hdr.contents = contents; + symtab_hdr->contents = (unsigned char *) isymbuf; + + /* Fix the relocation's type. */ + irel->r_info = ELFNN_R_INFO (ELFNN_R_SYM (irel->r_info), + R_ARC_S13_PCREL); + + /* Write back bl_s instruction. */ + bfd_put_16 (abfd, 0xF800, contents + irel->r_offset); + /* Delete two bytes of data. */ + if (!arc_relax_delete_bytes (link_info, abfd, sec, + irel->r_offset + 2, 2)) + goto error_return; + + *again = true; + } + + if (ELFNN_R_TYPE (irel->r_info) == (int) R_ARC_ALIGN + && link_info->relax_pass == 1) + { + bfd_vma aligned_addr; + bfd_vma nop_bytes; + bfd_vma alignment = 4; + + if (irel->r_addend == 2) + alignment = 2; + aligned_addr = ((irel->r_offset - 1) & ~(alignment - 1)) + alignment; + nop_bytes = aligned_addr - irel->r_offset; + + /* Cannot remove more than we have left. */ + BFD_ASSERT (irel->r_addend >= nop_bytes); + /* I should be always 16bit multiple quantum. */ + BFD_ASSERT (nop_bytes == 0 || nop_bytes == 2); + + /* Once we aligned we cannot relax anything else. */ + sec->sec_flg0 = true; + + /* Note that we've changed the relocs, section contents, etc. */ + elf_section_data (sec)->relocs = internal_relocs; + elf_section_data (sec)->this_hdr.contents = contents; + symtab_hdr->contents = (unsigned char *) isymbuf; + + /* Delete the relocation's type. */ + irel->r_info = ELFNN_R_INFO (ELFNN_R_SYM (irel->r_info), + R_ARC_NONE); + + /* Add an NOP_S if needed. */ + if (nop_bytes != 0) + bfd_put_16 (abfd, 0x78E0, contents + irel->r_offset); + + /* Delete nop_bytes bytes of data. */ + if (!arc_relax_delete_bytes (link_info, abfd, sec, + irel->r_offset + nop_bytes, + irel->r_addend - nop_bytes)) + goto error_return; + + *again = true; + } } if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf) { if (!link_info->keep_memory) - free (isymbuf); + free (isymbuf); else - /* Cache the symbols for elf_link_input_bfd. */ - symtab_hdr->contents = (unsigned char *) isymbuf; + /* Cache the symbols for elf_link_input_bfd. */ + symtab_hdr->contents = (unsigned char *) isymbuf; } if (contents != NULL && elf_section_data (sec)->this_hdr.contents != contents) { if (!link_info->keep_memory) - free (contents); + free (contents); else - /* Cache the section contents for elf_link_input_bfd. */ - elf_section_data (sec)->this_hdr.contents = contents; + /* Cache the section contents for elf_link_input_bfd. */ + elf_section_data (sec)->this_hdr.contents = contents; } if (elf_section_data (sec)->relocs != internal_relocs) @@ -3093,24 +3517,35 @@ arc_elf_relax_section (bfd *abfd, asection *sec, return false; } -#define TARGET_LITTLE_SYM arc_elf32_le_vec -#define TARGET_LITTLE_NAME "elf32-littlearc" -#define TARGET_BIG_SYM arc_elf32_be_vec -#define TARGET_BIG_NAME "elf32-bigarc" -#define ELF_ARCH bfd_arch_arc +#define TARGET_LITTLE_SYM arcAA_elfNN_le_vec +#define TARGET_LITTLE_NAME "elfNN-littlearcAA" +#define TARGET_BIG_SYM arc_elfNN_be_vec +#define TARGET_BIG_NAME "elfNN-bigarc" +#define ELF_ARCH ARC_BFD_ARCH #define ELF_TARGET_ID ARC_ELF_DATA -#define ELF_MACHINE_CODE EM_ARC_COMPACT -#define ELF_MACHINE_ALT1 EM_ARC_COMPACT2 + +#if (ARCH_TYPE == ARC) && (ARCH_SIZE == 32) +# define ELF_MACHINE_CODE EM_ARC_COMPACT2 +# define ELF_MACHINE_ALT1 EM_ARC_COMPACT +#elif (ARCH_TYPE == ARC32) || (ARCH_TYPE == ARC64) +# define ELF_MACHINE_CODE EM_ARC_COMPACT3_64 +# define ELF_MACHINE_ALT1 EM_ARC_COMPACT3 +#else +# error "Unsupported ARC architecture" +#endif + #define ELF_MAXPAGESIZE 0x2000 -#define bfd_elf32_bfd_link_hash_table_create arc_elf_link_hash_table_create +#define bfd_elfNN_bfd_link_hash_table_create arc_elf_link_hash_table_create + +#define bfd_elfNN_bfd_merge_private_bfd_data arc_elf_merge_private_bfd_data +#define bfd_elfNN_bfd_reloc_type_lookup arc_elfNN_bfd_reloc_type_lookup +#define bfd_elfNN_bfd_set_private_flags arc_elf_set_private_flags +#define bfd_elfNN_bfd_print_private_bfd_data arc_elf_print_private_bfd_data +#define bfd_elfNN_bfd_copy_private_bfd_data arc_elf_copy_private_bfd_data +#define bfd_elfNN_bfd_relax_section arc_elf_relax_section -#define bfd_elf32_bfd_merge_private_bfd_data arc_elf_merge_private_bfd_data -#define bfd_elf32_bfd_reloc_type_lookup arc_elf32_bfd_reloc_type_lookup -#define bfd_elf32_bfd_set_private_flags arc_elf_set_private_flags -#define bfd_elf32_bfd_print_private_bfd_data arc_elf_print_private_bfd_data -#define bfd_elf32_bfd_copy_private_bfd_data arc_elf_copy_private_bfd_data -#define bfd_elf32_bfd_relax_section arc_elf_relax_section +#define elf_backend_size_info arc_elfNN_size_info #define elf_info_to_howto_rel arc_info_to_howto_rel #define elf_backend_object_p arc_elf_object_p @@ -3120,7 +3555,7 @@ arc_elf_relax_section (bfd *abfd, asection *sec, #define elf_backend_check_relocs elf_arc_check_relocs #define elf_backend_create_dynamic_sections _bfd_elf_create_dynamic_sections -#define elf_backend_reloc_type_class elf32_arc_reloc_type_class +#define elf_backend_reloc_type_class arc_reloc_type_class #define elf_backend_adjust_dynamic_symbol elf_arc_adjust_dynamic_symbol #define elf_backend_finish_dynamic_symbol elf_arc_finish_dynamic_symbol @@ -3133,14 +3568,14 @@ arc_elf_relax_section (bfd *abfd, asection *sec, #define elf_backend_plt_readonly 1 #define elf_backend_rela_plts_and_copies_p 1 #define elf_backend_want_plt_sym 0 -#define elf_backend_got_header_size 12 +#define elf_backend_got_header_size (GOT_ENTRY_SIZE * 3) #define elf_backend_dtrel_excludes_plt 1 #define elf_backend_may_use_rel_p 0 #define elf_backend_may_use_rela_p 1 #define elf_backend_default_use_rela_p 1 -#define elf_backend_grok_prstatus elf32_arc_grok_prstatus +#define elf_backend_grok_prstatus elfNN_arc_grok_prstatus #define elf_backend_default_execstack 0 @@ -3149,11 +3584,12 @@ arc_elf_relax_section (bfd *abfd, asection *sec, #undef elf_backend_obj_attrs_section #define elf_backend_obj_attrs_section ".ARC.attributes" #undef elf_backend_obj_attrs_arg_type -#define elf_backend_obj_attrs_arg_type elf32_arc_obj_attrs_arg_type +#define elf_backend_obj_attrs_arg_type elfNN_arc_obj_attrs_arg_type #undef elf_backend_obj_attrs_section_type #define elf_backend_obj_attrs_section_type SHT_ARC_ATTRIBUTES -#define elf_backend_obj_attrs_handle_unknown elf32_arc_obj_attrs_handle_unknown +#define elf_backend_obj_attrs_handle_unknown \ + elfNN_arc_obj_attrs_handle_unknown -#define elf_backend_section_from_shdr elf32_arc_section_from_shdr +#define elf_backend_section_from_shdr elfNN_arc_section_from_shdr -#include "elf32-target.h" +#include "elfNN-target.h" diff --git a/bfd/libbfd.h b/bfd/libbfd.h index 6e62e5569623..2af3bbe7b546 100644 --- a/bfd/libbfd.h +++ b/bfd/libbfd.h @@ -1856,6 +1856,7 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_ARC_16", "BFD_RELOC_ARC_24", "BFD_RELOC_ARC_32", + "BFD_RELOC_ARC_64", "BFD_RELOC_ARC_N8", "BFD_RELOC_ARC_N16", "BFD_RELOC_ARC_N24", @@ -1920,6 +1921,27 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_ARC_S21H_PCREL_PLT", "BFD_RELOC_ARC_NPS_CMEM16", "BFD_RELOC_ARC_JLI_SECTOFF", + "BFD_RELOC_ARC_S7H_PCREL", + "BFD_RELOC_ARC_S8H_PCREL", + "BFD_RELOC_ARC_S9H_PCREL", + "BFD_RELOC_ARC_S10H_PCREL", + "BFD_RELOC_ARC_S13H_PCREL", + "BFD_RELOC_ARC_ALIGN", + "BFD_RELOC_ARC_ADD8", + "BFD_RELOC_ARC_ADD16", + "BFD_RELOC_ARC_SUB8", + "BFD_RELOC_ARC_SUB16", + "BFD_RELOC_ARC_SUB32", + "BFD_RELOC_ARC_LO32", + "BFD_RELOC_ARC_HI32", + "BFD_RELOC_ARC_LO32_ME", + "BFD_RELOC_ARC_HI32_ME", + "BFD_RELOC_ARC_N64", + "BFD_RELOC_ARC_SDA_LDST3", + "BFD_RELOC_ARC_NLO32", + "BFD_RELOC_ARC_NLO32_ME", + "BFD_RELOC_ARC_PCLO32_ME_2", + "BFD_RELOC_ARC_PLT34", "BFD_RELOC_BFIN_16_IMM", "BFD_RELOC_BFIN_16_HIGH", "BFD_RELOC_BFIN_4_PCREL", diff --git a/bfd/reloc.c b/bfd/reloc.c index 164060361a97..5d3106fd3576 100644 --- a/bfd/reloc.c +++ b/bfd/reloc.c @@ -3621,6 +3621,8 @@ ENUMX BFD_RELOC_ARC_24 ENUMX BFD_RELOC_ARC_32 +ENUMX + BFD_RELOC_ARC_64 ENUMX BFD_RELOC_ARC_N8 ENUMX @@ -3749,6 +3751,48 @@ ENUMX BFD_RELOC_ARC_NPS_CMEM16 ENUMX BFD_RELOC_ARC_JLI_SECTOFF +ENUMX + BFD_RELOC_ARC_S7H_PCREL +ENUMX + BFD_RELOC_ARC_S8H_PCREL +ENUMX + BFD_RELOC_ARC_S9H_PCREL +ENUMX + BFD_RELOC_ARC_S10H_PCREL +ENUMX + BFD_RELOC_ARC_S13H_PCREL +ENUMX + BFD_RELOC_ARC_ALIGN +ENUMX + BFD_RELOC_ARC_ADD8 +ENUMX + BFD_RELOC_ARC_ADD16 +ENUMX + BFD_RELOC_ARC_SUB8 +ENUMX + BFD_RELOC_ARC_SUB16 +ENUMX + BFD_RELOC_ARC_SUB32 +ENUMX + BFD_RELOC_ARC_LO32 +ENUMX + BFD_RELOC_ARC_HI32 +ENUMX + BFD_RELOC_ARC_LO32_ME +ENUMX + BFD_RELOC_ARC_HI32_ME +ENUMX + BFD_RELOC_ARC_N64 +ENUMX + BFD_RELOC_ARC_SDA_LDST3 +ENUMX + BFD_RELOC_ARC_NLO32 +ENUMX + BFD_RELOC_ARC_NLO32_ME +ENUMX + BFD_RELOC_ARC_PCLO32_ME_2 +ENUMX + BFD_RELOC_ARC_PLT34 ENUMDOC ARC relocs. diff --git a/bfd/targets.c b/bfd/targets.c index 18fec45f02a9..5a3be9a2c10b 100644 --- a/bfd/targets.c +++ b/bfd/targets.c @@ -689,6 +689,8 @@ extern const bfd_target am33_elf32_linux_vec; extern const bfd_target aout_vec; extern const bfd_target arc_elf32_be_vec; extern const bfd_target arc_elf32_le_vec; +extern const bfd_target arc64_elf32_le_vec; +extern const bfd_target arc64_elf64_le_vec; extern const bfd_target arm_elf32_be_vec; extern const bfd_target arm_elf32_le_vec; extern const bfd_target arm_elf32_fdpic_be_vec; @@ -995,6 +997,10 @@ static const bfd_target * const _bfd_target_vector[] = &aarch64_elf64_le_cloudabi_vec, &aarch64_mach_o_vec, &aarch64_pei_vec, + &arc_elf32_be_vec, + &arc_elf32_le_vec, + &arc64_elf32_le_vec, + &arc64_elf64_le_vec, #endif #ifdef BFD64 diff --git a/binutils/readelf.c b/binutils/readelf.c index b45683cd5718..cfd7d2963fb8 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -1059,6 +1059,8 @@ guess_is_rela (unsigned int e_machine) case EM_ARC: case EM_ARC_COMPACT: case EM_ARC_COMPACT2: + case EM_ARC_COMPACT3: + case EM_ARC_COMPACT3_64: case EM_AVR: case EM_AVR_OLD: case EM_BLACKFIN: @@ -1744,6 +1746,8 @@ dump_relocations (Filedata * filedata, case EM_ARC: case EM_ARC_COMPACT: case EM_ARC_COMPACT2: + case EM_ARC_COMPACT3: + case EM_ARC_COMPACT3_64: rtype = elf_arc_reloc_type (type); break; @@ -2978,9 +2982,9 @@ get_machine_name (unsigned e_machine) case EM_NFP: return "Netronome Flow Processor"; case EM_VE: return "NEC Vector Engine"; case EM_CSKY: return "C-SKY"; - case EM_ARC_COMPACT3_64: return "Synopsys ARCv2.3 64-bit"; + case EM_ARC_COMPACT3_64: return "Synopsys ARCv3 64-bit processor"; case EM_MCS6502: return "MOS Technology MCS 6502 processor"; - case EM_ARC_COMPACT3: return "Synopsys ARCv2.3 32-bit"; + case EM_ARC_COMPACT3: return "Synopsys ARCv3 32-bit processor"; case EM_KVX: return "Kalray VLIW core of the MPPA processor family"; case EM_65816: return "WDC 65816/65C816"; case EM_LOONGARCH: return "LoongArch"; @@ -3578,6 +3582,14 @@ get_machine_flags (Filedata * filedata, unsigned e_flags, unsigned e_machine) default: break; + case EM_ARC_COMPACT3: + strcat (buf, ", HS5x"); + break; + + case EM_ARC_COMPACT3_64: + strcat (buf, ", HS6x"); + break; + case EM_ARC_COMPACT2: case EM_ARC_COMPACT: decode_ARC_machine_flags (e_flags, e_machine, buf); @@ -4824,6 +4836,8 @@ get_section_type_name (Filedata * filedata, unsigned int sh_type) case EM_ARC: case EM_ARC_COMPACT: case EM_ARC_COMPACT2: + case EM_ARC_COMPACT3: + case EM_ARC_COMPACT3_64: result = get_arc_section_type_name (sh_type); break; case EM_MIPS: @@ -14002,6 +14016,8 @@ is_32bit_abs_reloc (Filedata * filedata, unsigned int reloc_type) return reloc_type == 1; /* R_ARC_32. */ case EM_ARC_COMPACT: case EM_ARC_COMPACT2: + case EM_ARC_COMPACT3: + case EM_ARC_COMPACT3_64: return reloc_type == 4; /* R_ARC_32. */ case EM_ARM: return reloc_type == 2; /* R_ARM_ABS32 */ @@ -14199,6 +14215,8 @@ is_32bit_pcrel_reloc (Filedata * filedata, unsigned int reloc_type) return reloc_type == 10; /* R_ALPHA_SREL32. */ case EM_ARC_COMPACT: case EM_ARC_COMPACT2: + case EM_ARC_COMPACT3: + case EM_ARC_COMPACT3_64: return reloc_type == 49; /* R_ARC_32_PCREL. */ case EM_ARM: return reloc_type == 3; /* R_ARM_REL32 */ @@ -14263,6 +14281,8 @@ is_64bit_abs_reloc (Filedata * filedata, unsigned int reloc_type) { case EM_AARCH64: return reloc_type == 257; /* R_AARCH64_ABS64. */ + case EM_ARC_COMPACT3_64: + return reloc_type == 5; /* R_ARC_64. */ case EM_ALPHA: return reloc_type == 2; /* R_ALPHA_REFQUAD. */ case EM_IA_64: @@ -14366,6 +14386,8 @@ is_16bit_abs_reloc (Filedata * filedata, unsigned int reloc_type) case EM_ARC: case EM_ARC_COMPACT: case EM_ARC_COMPACT2: + case EM_ARC_COMPACT3: + case EM_ARC_COMPACT3_64: return reloc_type == 2; /* R_ARC_16. */ case EM_ADAPTEVA_EPIPHANY: return reloc_type == 5; @@ -14618,6 +14640,8 @@ is_none_reloc (Filedata * filedata, unsigned int reloc_type) case EM_ARC: /* R_ARC_NONE. */ case EM_ARC_COMPACT2: /* R_ARC_NONE. */ case EM_ARC_COMPACT: /* R_ARC_NONE. */ + case EM_ARC_COMPACT3: /* R_ARC_NONE. */ + case EM_ARC_COMPACT3_64: /* R_ARC_NONE. */ case EM_ARM: /* R_ARM_NONE. */ case EM_C166: /* R_XC16X_NONE. */ case EM_CRIS: /* R_CRIS_NONE. */ @@ -21606,6 +21630,8 @@ process_arch_specific (Filedata * filedata) case EM_ARC: case EM_ARC_COMPACT: case EM_ARC_COMPACT2: + case EM_ARC_COMPACT3: + case EM_ARC_COMPACT3_64: return process_attributes (filedata, "ARC", SHT_ARC_ATTRIBUTES, display_arc_attribute, display_generic_attribute); diff --git a/binutils/testsuite/binutils-all/arc/objdump.exp b/binutils/testsuite/binutils-all/arc/objdump.exp index fe698550d303..cd554faf4133 100644 --- a/binutils/testsuite/binutils-all/arc/objdump.exp +++ b/binutils/testsuite/binutils-all/arc/objdump.exp @@ -14,7 +14,7 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -if {![istarget "arc*-*-*"]} then { +if {![istarget "arc-*-*"] || ![istarget "arceb-*-*"]} then { return } diff --git a/gas/config.in b/gas/config.in index e243fd277eeb..9588bf001845 100644 --- a/gas/config.in +++ b/gas/config.in @@ -231,6 +231,12 @@ /* Target alias. */ #undef TARGET_ALIAS +/* Using ARCv3/32 architecture. */ +#undef TARGET_ARCv3_32 + +/* Using ARCv3/64 architecture. */ +#undef TARGET_ARCv3_64 + /* Define as 1 if big endian. */ #undef TARGET_BYTES_BIG_ENDIAN diff --git a/gas/config/tc-arc.c b/gas/config/tc-arc.c index 40b051750dc5..a072131c2cd9 100644 --- a/gas/config/tc-arc.c +++ b/gas/config/tc-arc.c @@ -48,9 +48,14 @@ #define LP_INSN(x) ((MAJOR_OPCODE (x) == 0x4) \ && (SUB_OPCODE (x) == 0x28)) + +#ifndef DEFAULT_ARCH +#define DEFAULT_ARCH "arc" +#endif /* DEFAULT_ARCH. */ + #ifndef TARGET_WITH_CPU #define TARGET_WITH_CPU "arc700" -#endif /* TARGET_WITH_CPU */ +#endif /* TARGET_WITH_CPU. */ #define ARC_GET_FLAG(s) (*symbol_get_tc (s)) #define ARC_SET_FLAG(s,v) (*symbol_get_tc (s) |= (v)) @@ -121,6 +126,9 @@ enum arc_rlx_types /* Generic assembler global variables which must be defined by all targets. */ +/* Default architecture. */ +static const char default_arch[] = DEFAULT_ARCH; + /* Characters which always start a comment. */ const char comment_chars[] = "#;"; @@ -141,7 +149,6 @@ const char FLT_CHARS[] = "rRsSfFdD"; /* Byte order. */ extern int target_big_endian; -const char *arc_target_format = DEFAULT_TARGET_FORMAT; static int byte_order = DEFAULT_BYTE_ORDER; /* Arc extension section. */ @@ -164,6 +171,9 @@ const pseudo_typeS md_pseudo_table[] = { /* Make sure that .word is 32 bits. */ { "word", cons, 4 }, +#if defined (TARGET_ARCv3_64) || defined (TARGET_ARCv3_32) + { "xword", cons, 8}, +#endif { "align", s_align_bytes, 0 }, /* Defaulting is invalid (0). */ { "lcomm", arc_lcomm, 0 }, @@ -186,18 +196,21 @@ const char *md_shortopts = ""; enum options { - OPTION_EB = OPTION_MD_BASE, - OPTION_EL, + OPTION_MCPU = OPTION_MD_BASE, + + OPTION_CD, + OPTION_RELAX, + OPTION_LINKER_RELAX, +#if !defined (TARGET_ARCv3_64) && !defined (TARGET_ARCv3_32) + OPTION_EB, + OPTION_EL, OPTION_ARC600, OPTION_ARC601, OPTION_ARC700, OPTION_ARCEM, OPTION_ARCHS, - OPTION_MCPU, - OPTION_CD, - OPTION_RELAX, OPTION_NPS400, OPTION_SPFP, @@ -226,13 +239,19 @@ enum options OPTION_LOCK, OPTION_SWAPE, OPTION_RTSC +#endif }; struct option md_longopts[] = { + { "mcpu", required_argument, NULL, OPTION_MCPU }, + { "mcode-density", no_argument, NULL, OPTION_CD }, + { "mrelax", no_argument, NULL, OPTION_RELAX }, + { "mlinker-relax", no_argument, NULL, OPTION_LINKER_RELAX }, + +#if !defined (TARGET_ARCv3_64) && !defined (TARGET_ARCv3_32) { "EB", no_argument, NULL, OPTION_EB }, { "EL", no_argument, NULL, OPTION_EL }, - { "mcpu", required_argument, NULL, OPTION_MCPU }, { "mA6", no_argument, NULL, OPTION_ARC600 }, { "mARC600", no_argument, NULL, OPTION_ARC600 }, { "mARC601", no_argument, NULL, OPTION_ARC601 }, @@ -240,9 +259,7 @@ struct option md_longopts[] = { "mA7", no_argument, NULL, OPTION_ARC700 }, { "mEM", no_argument, NULL, OPTION_ARCEM }, { "mHS", no_argument, NULL, OPTION_ARCHS }, - { "mcode-density", no_argument, NULL, OPTION_CD }, - { "mrelax", no_argument, NULL, OPTION_RELAX }, - { "mnps400", no_argument, NULL, OPTION_NPS400 }, + { "mnps400", no_argument, NULL, OPTION_NPS400 }, /* Floating point options */ { "mspfp", no_argument, NULL, OPTION_SPFP}, @@ -287,8 +304,9 @@ struct option md_longopts[] = { "mlock", no_argument, NULL, OPTION_LOCK}, { "mswape", no_argument, NULL, OPTION_SWAPE}, { "mrtsc", no_argument, NULL, OPTION_RTSC}, +#endif - { NULL, no_argument, NULL, 0 } + { NULL, no_argument, NULL, 0 } }; size_t md_longopts_size = sizeof (md_longopts); @@ -437,25 +455,41 @@ static htab_t arc_aux_hash; /* The hash table of address types. */ static htab_t arc_addrtype_hash; -#define ARC_CPU_TYPE_A6xx(NAME,EXTRA) \ - { #NAME, ARC_OPCODE_ARC600, bfd_mach_arc_arc600, \ - E_ARC_MACH_ARC600, EXTRA} -#define ARC_CPU_TYPE_A7xx(NAME,EXTRA) \ - { #NAME, ARC_OPCODE_ARC700, bfd_mach_arc_arc700, \ - E_ARC_MACH_ARC700, EXTRA} -#define ARC_CPU_TYPE_AV2EM(NAME,EXTRA) \ - { #NAME, ARC_OPCODE_ARCv2EM, bfd_mach_arc_arcv2, \ - EF_ARC_CPU_ARCV2EM, EXTRA} -#define ARC_CPU_TYPE_AV2HS(NAME,EXTRA) \ - { #NAME, ARC_OPCODE_ARCv2HS, bfd_mach_arc_arcv2, \ - EF_ARC_CPU_ARCV2HS, EXTRA} -#define ARC_CPU_TYPE_NONE \ - { 0, 0, 0, 0, 0 } +#if !defined (TARGET_ARCv3_64) && !defined (TARGET_ARCv3_32) +# define ARC_CPU_TYPE_A6xx(NAME,EXTRA) \ + { #NAME, "arc", ARC_OPCODE_ARC600, bfd_mach_arc_arc600, \ + E_ARC_MACH_ARC600, EXTRA}, +# define ARC_CPU_TYPE_A7xx(NAME,EXTRA) \ + { #NAME, "arc", ARC_OPCODE_ARC700, bfd_mach_arc_arc700, \ + E_ARC_MACH_ARC700, EXTRA}, +# define ARC_CPU_TYPE_AV2EM(NAME,EXTRA) \ + { #NAME, "arc", ARC_OPCODE_ARCv2EM, bfd_mach_arc_arcv2, \ + EF_ARC_CPU_ARCV2EM, EXTRA}, +# define ARC_CPU_TYPE_AV2HS(NAME,EXTRA) \ + { #NAME, "arc", ARC_OPCODE_ARCv2HS, bfd_mach_arc_arcv2, \ + EF_ARC_CPU_ARCV2HS, EXTRA}, +# define ARC_CPU_TYPE_A64x(NAME,EXTRA) +# define ARC_CPU_TYPE_A32x(NAME,EXTRA) +#else +# define ARC_CPU_TYPE_A6xx(NAME,EXTRA) +# define ARC_CPU_TYPE_A7xx(NAME,EXTRA) +# define ARC_CPU_TYPE_AV2EM(NAME,EXTRA) +# define ARC_CPU_TYPE_AV2HS(NAME,EXTRA) +# define ARC_CPU_TYPE_A64x(NAME,EXTRA) \ + { #NAME, "arc64", ARC_OPCODE_ARC64, bfd_mach_arcv3_64, \ + EF_ARC_CPU_ARC64, EXTRA}, +# define ARC_CPU_TYPE_A32x(NAME,EXTRA) \ + { #NAME, "arc64", ARC_OPCODE_ARC32, bfd_mach_arcv3_32, \ + 0x00, EXTRA}, +#endif +#define ARC_CPU_TYPE_NONE \ + { 0, 0, 0, 0, 0, 0 } /* A table of CPU names and opcode sets. */ static const struct cpu_type { const char *name; + const char *arch; unsigned flags; int mach; unsigned eflags; @@ -467,7 +501,7 @@ static const struct cpu_type }; /* Information about the cpu/variant we're assembling for. */ -static struct cpu_type selected_cpu = { 0, 0, 0, E_ARC_OSABI_CURRENT, 0 }; +static struct cpu_type selected_cpu = { 0, 0, 0, 0, E_ARC_OSABI_CURRENT, 0 }; /* TRUE if current assembly code uses RF16 only registers. */ static bool rf16_only = true; @@ -475,7 +509,7 @@ static bool rf16_only = true; /* MPY option. */ static unsigned mpy_option = 0; -/* Use PIC. */ +/* Use PIC. */ static unsigned pic_option = 0; /* Use small data. */ @@ -499,7 +533,14 @@ static unsigned cl_features = 0; #define O_tpoff O_md9 /* @tpoff relocation. */ #define O_dtpoff9 O_md10 /* @dtpoff9 relocation. */ #define O_dtpoff O_md11 /* @dtpoff relocation. */ -#define O_last O_dtpoff +#if defined (TARGET_ARCv3_64) || defined (TARGET_ARCv3_32) +# define O_u32 O_md12 /* @u32 modifier. */ +# define O_s32 O_md13 /* @s32 modifier. */ +# define O_plt34 O_md14 /* @plt34 relocation. */ +# define O_last O_md14 +#else +# define O_last O_md11 +#endif /* Used to define a bracket as operand in tokens. */ #define O_bracket O_md32 @@ -552,6 +593,11 @@ static const struct arc_reloc_op_tag DEF (tpoff, BFD_RELOC_ARC_TLS_LE_32, 1), DEF (dtpoff9, BFD_RELOC_ARC_TLS_DTPOFF_S9, 0), DEF (dtpoff, BFD_RELOC_ARC_TLS_DTPOFF, 1), +#if defined (TARGET_ARCv3_64) || defined (TARGET_ARCv3_32) + DEF (u32, BFD_RELOC_ARC_LO32_ME, 1), + DEF (s32, BFD_RELOC_ARC_32_ME, 1), + DEF (plt34, BFD_RELOC_ARC_PLT34, 0), +#endif }; static const int arc_num_reloc_op @@ -709,7 +755,8 @@ arc_find_opcode (const char *name) /* Initialise the iterator ITER. */ static void -arc_opcode_hash_entry_iterator_init (struct arc_opcode_hash_entry_iterator *iter) +arc_opcode_hash_entry_iterator_init +(struct arc_opcode_hash_entry_iterator *iter) { iter->index = 0; iter->opcode = NULL; @@ -720,8 +767,9 @@ arc_opcode_hash_entry_iterator_init (struct arc_opcode_hash_entry_iterator *iter been returned. */ static const struct arc_opcode * -arc_opcode_hash_entry_iterator_next (const struct arc_opcode_hash_entry *entry, - struct arc_opcode_hash_entry_iterator *iter) +arc_opcode_hash_entry_iterator_next +(const struct arc_opcode_hash_entry *entry, + struct arc_opcode_hash_entry_iterator *iter) { if (iter->opcode == NULL && iter->index == 0) { @@ -834,12 +882,12 @@ static void arc_select_cpu (const char *arg, enum mach_selection_type sel) { int i; - static struct cpu_type old_cpu = { 0, 0, 0, E_ARC_OSABI_CURRENT, 0 }; + static struct cpu_type old_cpu = { 0, 0, 0, 0, E_ARC_OSABI_CURRENT, 0 }; - /* We should only set a default if we've not made a selection from some - other source. */ + /* We should only set a default if we've not made a selection from + some other source. */ gas_assert (sel != MACH_SELECTION_FROM_DEFAULT - || mach_selection_mode == MACH_SELECTION_NONE); + || mach_selection_mode == MACH_SELECTION_NONE); if ((mach_selection_mode == MACH_SELECTION_FROM_CPU_DIRECTIVE) && (sel == MACH_SELECTION_FROM_CPU_DIRECTIVE)) @@ -849,19 +897,21 @@ arc_select_cpu (const char *arg, enum mach_selection_type sel) for (i = 0; cpu_types[i].name; ++i) { if (!strcasecmp (cpu_types[i].name, arg)) - { - /* If a previous selection was made on the command line, then we - allow later selections on the command line to override earlier - ones. However, a selection from a '.cpu NAME' directive must - match the command line selection, or we give a warning. */ - if (mach_selection_mode == MACH_SELECTION_FROM_COMMAND_LINE) - { - gas_assert (sel == MACH_SELECTION_FROM_COMMAND_LINE - || sel == MACH_SELECTION_FROM_CPU_DIRECTIVE); - if (sel == MACH_SELECTION_FROM_CPU_DIRECTIVE - && selected_cpu.mach != cpu_types[i].mach) - { - as_warn (_("Command-line value overrides \".cpu\" directive")); + { + /* If a previous selection was made on the command line, + then we allow later selections on the command line to + override earlier ones. However, a selection from a '.cpu + NAME' directive must match the command line selection, or + we give a warning. */ + if (mach_selection_mode == MACH_SELECTION_FROM_COMMAND_LINE) + { + gas_assert (sel == MACH_SELECTION_FROM_COMMAND_LINE + || sel == MACH_SELECTION_FROM_CPU_DIRECTIVE); + if (sel == MACH_SELECTION_FROM_CPU_DIRECTIVE + && selected_cpu.mach != cpu_types[i].mach) + { + as_warn (_("Command-line value overrides \".cpu\" " + "directive")); } return; } @@ -886,8 +936,8 @@ arc_select_cpu (const char *arg, enum mach_selection_type sel) if (mach_selection_mode != MACH_SELECTION_NONE && (old_cpu.mach != selected_cpu.mach)) { - bfd_find_target (arc_target_format, stdoutput); - if (! bfd_set_arch_mach (stdoutput, bfd_arch_arc, selected_cpu.mach)) + bfd_find_target (arc_target_format (), stdoutput); + if (! bfd_set_arch_mach (stdoutput, TARGET_ARCH, selected_cpu.mach)) as_warn (_("Could not set architecture and machine")); } @@ -1007,7 +1057,7 @@ arc_option (int ignore ATTRIBUTE_UNUSED) || (!strcmp ("A6", cpu))) cpu_name = "arc600"; else if ((!strcmp ("ARC700", cpu)) - || (!strcmp ("A7", cpu))) + || (!strcmp ("A7", cpu))) cpu_name = "arc700"; else if (!strcmp ("EM", cpu)) cpu_name = "arcem"; @@ -1084,6 +1134,11 @@ debug_exp (expressionS *t) case O_tpoff: namemd = "O_tpoff"; break; case O_dtpoff9: namemd = "O_dtpoff9"; break; case O_dtpoff: namemd = "O_dtpoff"; break; +#if defined (TARGET_ARCv3_64) || defined (TARGET_ARCv3_32) + case O_u32: namemd = "O_u32"; break; + case O_s32: namemd = "O_s32"; break; + case O_plt34: namemd = "O_plt34"; break; +#endif } pr_debug ("%s (%s, %s, %d, %s)", name, @@ -1108,10 +1163,13 @@ parse_reloc_symbol (expressionS *resultP) expressionS right; symbolS *base; + /* We want to use @u32 and @s32 to force immediates into long + field. */ /* A relocation operand has the following form @identifier@relocation_type. The identifier is already in tok! */ - if (resultP->X_op != O_symbol) + if (resultP->X_op != O_constant + && resultP->X_op != O_symbol) { as_bad (_("No valid label relocation operand")); resultP->X_op = O_illegal; @@ -1142,6 +1200,12 @@ parse_reloc_symbol (expressionS *resultP) return; } + if (resultP->X_op == O_constant) + { + resultP->X_md = r->op; + return; + } + *input_line_pointer = c; SKIP_WHITESPACE_AFTER_NAME (); /* Extra check for TLS: base. */ @@ -1236,8 +1300,11 @@ tokenize_arguments (char *str, ++num_args; break; - case '{': case '[': + /* Silence the error detection. */ + saw_comma = TRUE; + /* fallthru */ + case '{': input_line_pointer++; if (brk_lvl || num_args == ntok) goto err; @@ -1275,8 +1342,8 @@ tokenize_arguments (char *str, debug_exp (tok); if (tok->X_op == O_illegal - || tok->X_op == O_absent - || num_args == ntok) + || tok->X_op == O_absent + || num_args == ntok) goto err; saw_comma = false; @@ -1307,8 +1374,8 @@ tokenize_arguments (char *str, debug_exp (tok); if (tok->X_op == O_illegal - || tok->X_op == O_absent - || num_args == ntok) + || tok->X_op == O_absent + || num_args == ntok) goto err; saw_comma = false; @@ -1647,10 +1714,10 @@ check_cpu_feature (insn_subclass_t sc) } /* Parse the flags described by FIRST_PFLAG and NFLGS against the flag - operands in OPCODE. Stores the matching OPCODES into the FIRST_PFLAG - array and returns TRUE if the flag operands all match, otherwise, - returns FALSE, in which case the FIRST_PFLAG array may have been - modified. */ + operands in OPCODE. Stores the matching OPCODES into the + FIRST_PFLAG array and returns TRUE if the flag operands all match, + otherwise, returns FALSE, in which case the FIRST_PFLAG array may + have been modified. */ static bool parse_opcode_flags (const struct arc_opcode *opcode, @@ -1677,56 +1744,58 @@ parse_opcode_flags (const struct arc_opcode *opcode, if (cl_flags->flag_class & F_CLASS_IMPLICIT) continue; - /* Check for extension conditional codes. */ + /* Check for extension conditional codes. */ if (ext_condcode.arc_ext_condcode - && cl_flags->flag_class & F_CLASS_EXTEND) - { - struct arc_flag_operand *pf = ext_condcode.arc_ext_condcode; - while (pf->name) - { - pflag = first_pflag; - for (i = 0; i < nflgs; i++, pflag++) - { - if (!strcmp (pf->name, pflag->name)) - { - if (pflag->flgp != NULL) - return false; - /* Found it. */ - cl_matches++; - pflag->flgp = pf; - lnflg--; - break; - } - } - pf++; - } - } + && cl_flags->flag_class & F_CLASS_EXTEND) + { + struct arc_flag_operand *pf = ext_condcode.arc_ext_condcode; + while (pf->name) + { + pflag = first_pflag; + for (i = 0; i < nflgs; i++, pflag++) + { + if (!strcmp (pf->name, pflag->name)) + { + if (pflag->flgp != NULL) + return false; + /* Found it. */ + cl_matches++; + pflag->flgp = pf; + pflag->insert = cl_flags->insert; + lnflg--; + break; + } + } + pf++; + } + } for (flgopridx = cl_flags->flags; *flgopridx; ++flgopridx) - { - const struct arc_flag_operand *flg_operand; - - pflag = first_pflag; - flg_operand = &arc_flag_operands[*flgopridx]; - for (i = 0; i < nflgs; i++, pflag++) - { - /* Match against the parsed flags. */ - if (!strcmp (flg_operand->name, pflag->name)) - { - if (pflag->flgp != NULL) - return false; - cl_matches++; - pflag->flgp = flg_operand; - lnflg--; - break; /* goto next flag class and parsed flag. */ - } - } - } + { + const struct arc_flag_operand *flg_operand; + + pflag = first_pflag; + flg_operand = &arc_flag_operands[*flgopridx]; + for (i = 0; i < nflgs; i++, pflag++) + { + /* Match against the parsed flags. */ + if (!strcmp (flg_operand->name, pflag->name)) + { + if (pflag->flgp != NULL) + return false; + cl_matches++; + pflag->flgp = flg_operand; + pflag->insert = cl_flags->insert; + lnflg--; + break; /* goto next flag class and parsed flag. */ + } + } + } if ((cl_flags->flag_class & F_CLASS_REQUIRED) && cl_matches == 0) - return false; + return false; if ((cl_flags->flag_class & F_CLASS_OPTIONAL) && cl_matches > 1) - return false; + return false; } /* Did I check all the parsed flags? */ @@ -1754,6 +1823,7 @@ find_opcode_match (const struct arc_opcode_hash_entry *entry, int bkntok, maxerridx = 0; expressionS emptyE; const char *tmpmsg = NULL; + unsigned int tmp ATTRIBUTE_UNUSED = 0; arc_opcode_hash_entry_iterator_init (&iter); memset (&emptyE, 0, sizeof (emptyE)); @@ -1868,12 +1938,30 @@ find_opcode_match (const struct arc_opcode_hash_entry *entry, goto match_failed; break; - case ARC_OPERAND_COLON: + case ARC_OPERAND_COLON: /* Check if colon is also in opcode table as operand. */ - if (tok[tokidx].X_op != O_colon) - goto match_failed; - break; + if (tok[tokidx].X_op != O_colon) + goto match_failed; + break; + + case (ARC_OPERAND_LIMM | ARC_OPERAND_SIGNED): + /* Signed extended 32 bit, only available for ARC64. */ + if (tok[tokidx].X_op == O_constant) + { + offsetT val = tok[tokidx].X_add_number; + const offsetT min = -(1LL << 31); + const offsetT max = (1LL << 31) - 1; + if (val > max || val < min) + goto match_failed; + break; + } + /* By default a symbol is zero extended. */ + else if (tok[tokidx].X_op == O_symbol + && tok[tokidx].X_md == O_absent) + goto match_failed; + + /* FALLTHRU */ case ARC_OPERAND_LIMM: case ARC_OPERAND_SIGNED: case ARC_OPERAND_UNSIGNED: @@ -1906,8 +1994,8 @@ find_opcode_match (const struct arc_opcode_hash_entry *entry, if (opcode->insn_class != AUXREG) goto de_fault; - p = S_GET_NAME (tok[tokidx].X_add_symbol); + p = S_GET_NAME (tok[tokidx].X_add_symbol); /* For compatibility reasons, an aux register can be spelled with upper or lower case letters. */ @@ -1932,6 +2020,12 @@ find_opcode_match (const struct arc_opcode_hash_entry *entry, } /* Fall through. */ case O_constant: +#if defined (TARGET_ARCv3_64) || defined (TARGET_ARCv3_32) + /* Check if we want limm. */ + if (tok[tokidx].X_md == O_u32 + && !(operand->flags & ARC_OPERAND_LIMM)) + goto match_failed; +#endif /* Check the range. */ if (operand->bits != 32 && !(operand->flags & ARC_OPERAND_NCHK)) @@ -2001,9 +2095,7 @@ find_opcode_match (const struct arc_opcode_hash_entry *entry, if (operand->insert) { tmpmsg = NULL; - (*operand->insert)(0, - regs, - &tmpmsg); + (*operand->insert) (0, regs, &tmpmsg); if (tmpmsg) goto match_failed; } @@ -2019,15 +2111,30 @@ find_opcode_match (const struct arc_opcode_hash_entry *entry, /* Relocs requiring long immediate. FIXME! make it generic and move it to a function. */ + tmp = ARC_OPERAND_SIGNED; switch (tok[tokidx].X_md) { - case O_gotoff: + /* All offsets needs to be mapped into a signed + limm. */ case O_gotpc: - case O_pcl: case O_tpoff: - case O_dtpoff: - case O_tlsgd: case O_tlsie: + case O_tlsgd: + case O_pcl: +#if defined (TARGET_ARCv3_64) || defined (TARGET_ARCv3_32) + case O_plt34: + case O_s32: + /* Fail if is not signed (ARC64 only). */ + tmp = (selected_cpu.mach == bfd_mach_arcv3_64) ? 0 : tmp; + /* Fall through. */ + case O_u32: + if ((operand->flags & ARC_OPERAND_SIGNED) == tmp) + goto match_failed; + /* Fall through. */ +#else + case O_gotoff: /* Not generated by ARC64. */ + case O_dtpoff: /* Not generated by ARC64. */ +#endif if (!(operand->flags & ARC_OPERAND_LIMM)) goto match_failed; /* Fall through. */ @@ -2141,7 +2248,8 @@ pseudo_operand_match (const expressionS *tok, switch (tok->X_op) { case O_constant: - if (operand_real->bits == 32 && (operand_real->flags & ARC_OPERAND_LIMM)) + if (operand_real->bits == 32 + && (operand_real->flags & ARC_OPERAND_LIMM)) ret = 1; else if (!(operand_real->flags & ARC_OPERAND_IR)) { @@ -2213,6 +2321,25 @@ find_pseudo_insn (const char *opname, return pseudo_insn; } } + +#if defined (TARGET_ARCv3_64) || defined (TARGET_ARCv3_32) + /* ARC64 pseudo instructions. */ + for (i = 0; i < arc64_num_pseudo_insn; i++) + { + pseudo_insn = &arc64_pseudo_insns[i]; + if (strcmp (pseudo_insn->mnemonic_p, opname) == 0) + { + op = pseudo_insn->operand; + for (j = 0; j < ntok; ++j) + if (!pseudo_operand_match (&tok[j], &op[j])) + break; + + /* Found the right instruction. */ + if (j == ntok) + return pseudo_insn; + } + } +#endif return NULL; } @@ -2409,6 +2536,9 @@ autodetect_attributes (const struct arc_opcode *opcode, case O_gotoff: case O_gotpc: case O_plt: +#if defined (TARGET_ARCv3_64) || defined (TARGET_ARCv3_32) + case O_plt34: +#endif pic_option = 2; break; case O_sda: @@ -2508,7 +2638,7 @@ md_assemble (char *str) struct arc_flags flags[MAX_INSN_FLGS]; /* Split off the opcode. */ - opnamelen = strspn (str, "abcdefghijklmnopqrstuvwxyz_0123468"); + opnamelen = strspn (str, "abcdefghijklmnopqrstuvwxyz_0123456789"); opname = xmemdup0 (str, opnamelen); /* Signalize we are assembling the instructions. */ @@ -2572,6 +2702,27 @@ declare_register_set (void) } } +#if defined (TARGET_ARCv3_64) || defined (TARGET_ARCv3_32) +/* Helper use for declaration of fp refisters. */ +static void +declare_fp_set (void) +{ + int i; + for (i = 0; i < 32; ++i) + { + char name[32]; + + sprintf (name, "f%d", i); + declare_register (name, i); + if ((i & 0x01) == 0) + { + sprintf (name, "f%df%d", i, i+1); + declare_register (name, i); + } + } +} +#endif + /* Construct a symbol for an address type. */ static void @@ -2584,21 +2735,38 @@ declare_addrtype (const char *name, int number) as_fatal (_("duplicate %s"), name); } +/* Initialize the default cpu. */ + +static void +init_default_arch (void) +{ + if (strcmp (default_arch, "arc64") == 0) +#ifdef TARGET_ARCv3_32 + arc_select_cpu ("hs5x", MACH_SELECTION_FROM_DEFAULT); +#else + arc_select_cpu ("hs6x", MACH_SELECTION_FROM_DEFAULT); +#endif + else + arc_select_cpu (TARGET_WITH_CPU, MACH_SELECTION_FROM_DEFAULT); +} + /* Port-specific assembler initialization. This function is called once, at assembler startup time. */ void md_begin (void) { - const struct arc_opcode *opcode = arc_opcodes; + const struct arc_opcode *opcode; + + opcode = arc_opcodes; if (mach_selection_mode == MACH_SELECTION_NONE) - arc_select_cpu (TARGET_WITH_CPU, MACH_SELECTION_FROM_DEFAULT); + init_default_arch (); /* The endianness can be chosen "at the factory". */ target_big_endian = byte_order == BIG_ENDIAN; - if (!bfd_set_arch_mach (stdoutput, bfd_arch_arc, selected_cpu.mach)) + if (!bfd_set_arch_mach (stdoutput, TARGET_ARCH, selected_cpu.mach)) as_warn (_("could not set architecture and machine")); /* Set elf header flags. */ @@ -2624,12 +2792,23 @@ md_begin (void) arc_reg_hash = str_htab_create (); declare_register_set (); +#if defined (TARGET_ARCv3_64) || defined (TARGET_ARCv3_32) + declare_register ("gp", 30); + declare_fp_set (); +#else declare_register ("gp", 26); +#endif declare_register ("fp", 27); declare_register ("sp", 28); declare_register ("ilink", 29); - declare_register ("ilink1", 29); - declare_register ("ilink2", 30); +#if !defined (TARGET_ARCv3_64) && !defined (TARGET_ARCv3_32) + if (selected_cpu.mach == bfd_mach_arc_arc600 + || selected_cpu.mach == bfd_mach_arc_arc700) + { + declare_register ("ilink1", 29); + declare_register ("ilink2", 30); + } +#endif declare_register ("blink", 31); /* XY memory registers. */ @@ -2786,8 +2965,14 @@ md_pcrel_from_section (fixS *fixP, case BFD_RELOC_ARC_S13_PCREL: case BFD_RELOC_ARC_S21W_PCREL: case BFD_RELOC_ARC_S25W_PCREL: + case BFD_RELOC_ARC_S10H_PCREL: + case BFD_RELOC_ARC_S13H_PCREL: + case BFD_RELOC_ARC_S9H_PCREL: + case BFD_RELOC_ARC_S8H_PCREL: + case BFD_RELOC_ARC_S7H_PCREL: base &= ~3; break; + default: as_bad_where (fixP->fx_file, fixP->fx_line, _("unhandled reloc %s in md_pcrel_from_section"), @@ -2884,6 +3069,36 @@ insert_operand (unsigned long long insn, return insn; } +/* Called by TARGET_FORMAT. */ + +const char * +arc_target_format (void) +{ + + /* We don't get a chance to initialize anything before we're called, + so handle that now. */ + if (mach_selection_mode == MACH_SELECTION_NONE) + init_default_arch (); + + if (selected_cpu.name == NULL) + return DEFAULT_TARGET_FORMAT; + +#if defined(TARGET_ARCv3_64) || defined(TARGET_ARCv3_32) + if (selected_cpu.mach == bfd_mach_arcv3_64) + return "elf64-littlearc64"; + + if (selected_cpu.mach == bfd_mach_arcv3_32) + return "elf32-littlearc64"; + + return DEFAULT_TARGET_FORMAT; +#else + if (byte_order == LITTLE_ENDIAN) + return "elf32-littlearc"; + + return "elf32-bigarc"; +#endif +} + /* Apply a fixup to the object code. At this point all symbol values should be fully resolved, and we attempt to completely resolve the reloc. If we can not do that, we determine the correct reloc code @@ -2901,7 +3116,6 @@ md_apply_fix (fixS *fixP, symbolS *fx_addsy, *fx_subsy; offsetT fx_offset; segT add_symbol_segment = absolute_section; - segT sub_symbol_segment = absolute_section; const struct arc_operand *operand = NULL; extended_bfd_reloc_code_real_type reloc; @@ -2920,29 +3134,9 @@ md_apply_fix (fixS *fixP, add_symbol_segment = S_GET_SEGMENT (fx_addsy); } - if (fx_subsy - && fixP->fx_r_type != BFD_RELOC_ARC_TLS_DTPOFF - && fixP->fx_r_type != BFD_RELOC_ARC_TLS_DTPOFF_S9 - && fixP->fx_r_type != BFD_RELOC_ARC_TLS_GD_LD) - { - resolve_symbol_value (fx_subsy); - sub_symbol_segment = S_GET_SEGMENT (fx_subsy); - - if (sub_symbol_segment == absolute_section) - { - /* The symbol is really a constant. */ - fx_offset -= S_GET_VALUE (fx_subsy); - fx_subsy = NULL; - } - else - { - as_bad_subtract (fixP); - return; - } - } - if (fx_addsy - && !S_IS_WEAK (fx_addsy)) + && !S_IS_WEAK (fx_addsy) + && !fx_subsy) { if (add_symbol_segment == seg && fixP->fx_pcrel) @@ -3112,6 +3306,11 @@ md_apply_fix (fixS *fixP, case BFD_RELOC_ARC_S21H_PCREL: case BFD_RELOC_ARC_S25H_PCREL: case BFD_RELOC_ARC_S13_PCREL: + case BFD_RELOC_ARC_S10H_PCREL: + case BFD_RELOC_ARC_S13H_PCREL: + case BFD_RELOC_ARC_S9H_PCREL: + case BFD_RELOC_ARC_S8H_PCREL: + case BFD_RELOC_ARC_S7H_PCREL: solve_plt: operand = find_operand_for_reloc (reloc); gas_assert (operand); @@ -3240,8 +3439,7 @@ tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, code = fixP->fx_r_type; - /* if we have something like add gp, pcl, - _GLOBAL_OFFSET_TABLE_@gotpc. */ + /* if we have something like add gp, pcl, _GLOBAL_OFFSET_TABLE_@gotpc. */ if (code == BFD_RELOC_ARC_GOTPC32 && GOT_symbol && fixP->fx_addsy == GOT_symbol) @@ -3427,6 +3625,25 @@ md_parse_option (int c, const char *arg ATTRIBUTE_UNUSED) { switch (c) { + case OPTION_MCPU: + arc_select_cpu (arg, MACH_SELECTION_FROM_COMMAND_LINE); + break; + + case OPTION_CD: + selected_cpu.features |= CD; + cl_features |= CD; + arc_check_feature (); + break; + + case OPTION_RELAX: + relaxation_state = TRUE; + break; + + case OPTION_LINKER_RELAX: + relaxation_state = FALSE; + break; + +#if !defined (TARGET_ARCv3_64) && !defined (TARGET_ARCv3_32) case OPTION_ARC600: case OPTION_ARC601: return md_parse_option (OPTION_MCPU, "arc600"); @@ -3440,32 +3657,14 @@ md_parse_option (int c, const char *arg ATTRIBUTE_UNUSED) case OPTION_ARCHS: return md_parse_option (OPTION_MCPU, "archs"); - case OPTION_MCPU: - { - arc_select_cpu (arg, MACH_SELECTION_FROM_COMMAND_LINE); - break; - } - case OPTION_EB: - arc_target_format = "elf32-bigarc"; byte_order = BIG_ENDIAN; break; case OPTION_EL: - arc_target_format = "elf32-littlearc"; byte_order = LITTLE_ENDIAN; break; - case OPTION_CD: - selected_cpu.features |= CD; - cl_features |= CD; - arc_check_feature (); - break; - - case OPTION_RELAX: - relaxation_state = 1; - break; - case OPTION_NPS400: selected_cpu.features |= NPS400; cl_features |= NPS400; @@ -3512,6 +3711,7 @@ md_parse_option (int c, const char *arg ATTRIBUTE_UNUSED) case OPTION_SWAPE: case OPTION_RTSC: break; +#endif default: return 0; @@ -3534,13 +3734,16 @@ arc_show_cpu_list (FILE *stream) { bool last = (cpu_types[i + 1].name == NULL); + if (strcmp (default_arch, cpu_types[i].arch) != 0) + continue; + /* If displaying the new cpu name string, and the ', ' (for all - but the last one) will take us past a target width of 80 - characters, then it's time for a new line. */ + but the last one) will take us past a target width of 80 + characters, then it's time for a new line. */ if (offset + strlen (cpu_types[i].name) + (last ? 0 : 2) > 80) { - fprintf (stream, "\n%s", space_buf); - offset = strlen (space_buf); + fprintf (stream, "\n%s", space_buf); + offset = strlen (space_buf); } fprintf (stream, "%s%s", cpu_types[i].name, (last ? "\n" : ", ")); @@ -3551,10 +3754,11 @@ arc_show_cpu_list (FILE *stream) void md_show_usage (FILE *stream) { +#if !defined(TARGET_ARCv3_64) && !defined(TARGET_ARCv3_32) fprintf (stream, _("ARC-specific assembler options:\n")); fprintf (stream, " -mcpu=\t (default: %s), assemble for" - " CPU , one of:\n", TARGET_WITH_CPU); + " CPU , one of:\n", TARGET_WITH_CPU); arc_show_cpu_list (stream); fprintf (stream, "\n"); fprintf (stream, " -mA6/-mARC600/-mARC601 same as -mcpu=arc600\n"); @@ -3568,7 +3772,7 @@ md_show_usage (FILE *stream) fprintf (stream, " -mdpfp\t\t enable double-precision floating point" " instructions\n"); fprintf (stream, " -mfpuda\t\t enable double-precision assist floating " - "point\n\t\t\t instructions for ARC EM\n"); + "point\n\t\t\t instructions for ARC EM\n"); fprintf (stream, " -mcode-density\t enable code density option for ARC EM\n"); @@ -3581,33 +3785,41 @@ md_show_usage (FILE *stream) -mrelax enable relaxation\n")); fprintf (stream, _("The following ARC-specific assembler options are " - "deprecated and are accepted\nfor compatibility only:\n")); + "deprecated and are accepted\nfor compatibility only:\n")); fprintf (stream, _(" -mEA\n" - " -mbarrel-shifter\n" - " -mbarrel_shifter\n" - " -mcrc\n" - " -mdsp-packa\n" - " -mdsp_packa\n" - " -mdvbf\n" - " -mld-extension-reg-mask\n" - " -mlock\n" - " -mmac-24\n" - " -mmac-d16\n" - " -mmac_24\n" - " -mmac_d16\n" - " -mmin-max\n" - " -mmin_max\n" - " -mmul64\n" - " -mno-mpy\n" - " -mnorm\n" - " -mrtsc\n" - " -msimd\n" - " -mswap\n" - " -mswape\n" - " -mtelephony\n" + " -mbarrel-shifter\n" + " -mbarrel_shifter\n" + " -mcrc\n" + " -mdsp-packa\n" + " -mdsp_packa\n" + " -mdvbf\n" + " -mld-extension-reg-mask\n" + " -mlock\n" + " -mmac-24\n" + " -mmac-d16\n" + " -mmac_24\n" + " -mmac_d16\n" + " -mmin-max\n" + " -mmin_max\n" + " -mmul64\n" + " -mno-mpy\n" + " -mnorm\n" + " -mrtsc\n" + " -msimd\n" + " -mswap\n" + " -mswape\n" + " -mtelephony\n" " -muser-mode-only\n" - " -mxy\n")); + " -mxy\n")); +#else + fprintf (stream, _("ARC64-specific assembler options:\n")); + + fprintf (stream, " -mcpu=\t assemble for CPU ," + "one of:\n"); + arc_show_cpu_list (stream); + fprintf (stream, "\n"); +#endif } /* Find the proper relocation for the given opcode. */ @@ -3690,6 +3902,9 @@ may_relax_expr (expressionS tok) default: break; case O_plt: +#if defined (TARGET_ARCv3_64) || defined (TARGET_ARCv3_32) + case O_plt34: +#endif return false; } @@ -3935,8 +4150,8 @@ assemble_insn (const struct arc_opcode *opcode, break; case O_bracket: - case O_colon: - case O_addrtype: + case O_colon: + case O_addrtype: /* Ignore brackets, colons, and address types. */ break; @@ -3976,6 +4191,17 @@ assemble_insn (const struct arc_opcode *opcode, operand->default_reloc); break; +#if defined (TARGET_ARCv3_64) || defined (TARGET_ARCv3_32) + case O_s32: + if ((operand->flags & ARC_OPERAND_SIGNED) == 0) + as_bad (_("Unable to use @s32 relocation for insn %s"), + opcode->name); + /* Fall-through. */ + case O_u32: + reloc = operand->default_reloc; + break; + case O_plt34: +#endif case O_gotoff: case O_gotpc: needGOTSymbol = true; @@ -4133,8 +4359,22 @@ assemble_insn (const struct arc_opcode *opcode, } } else - image |= (flg_operand->code & ((1 << flg_operand->bits) - 1)) - << flg_operand->shift; + { + unsigned int flag_encoding; + flag_encoding = (flg_operand->code & ((1 << flg_operand->bits) - 1)); + + if (pflags[i].insert) + { + /* We can have a special flag which needs an insertion + function. */ + const char *errmsg = NULL; + image = (*pflags[i].insert) (image, flag_encoding, &errmsg); + } + else + { + image |= flag_encoding << flg_operand->shift; + } + } } insn->relax = relax_insn_p (opcode, tok, ntok, pflags, nflg); @@ -4163,26 +4403,64 @@ assemble_insn (const struct arc_opcode *opcode, arc_last_insns[0].opcode->name); } +static void +arc_make_nops (char *buf, bfd_vma bytes) +{ + bfd_vma i = 0; + + /* ARC instructions cannot begin or end on odd addresses, so this case + means we are not within a valid instruction sequence. It is thus safe + to use a zero byte, even though that is not a valid instruction. */ + if (bytes % 2 == 1) + buf[i++] = 0; + + /* Use 2-byte NOP. */ + for ( ; i < bytes; i += 2) + md_number_to_chars_midend (buf + i, NOP_OPCODE_S, 2); +} + +/* Implement HANDLE_ALIGN. */ + void arc_handle_align (fragS* fragP) { - if ((fragP)->fr_type == rs_align_code) + char *dest = (fragP)->fr_literal + (fragP)->fr_fix; + valueT count = ((fragP)->fr_next->fr_address + - (fragP)->fr_address - (fragP)->fr_fix); + bfd_signed_vma size = count & ~0x01; + bfd_signed_vma excess = count & 0x01; + expressionS ex; + + if (fragP->fr_type != rs_align_code) + return; + + if (count <= 0) + return; + + /* Insert zeros to get 2 byte alignment. */ + if (excess && fragP->fr_type == rs_align_code) { - char *dest = (fragP)->fr_literal + (fragP)->fr_fix; - valueT count = ((fragP)->fr_next->fr_address - - (fragP)->fr_address - (fragP)->fr_fix); + arc_make_nops (dest, excess); + fragP->fr_fix += excess; + dest += excess; + } - (fragP)->fr_var = 2; + /* Only emit this reloc when linker relaxation is required. */ + if (linkrelax && size) + { + ex.X_op = O_constant; + ex.X_add_number = size; + fix_new_exp (fragP, fragP->fr_fix, 0, &ex, FALSE, BFD_RELOC_ARC_ALIGN); + } + else + { + if (size > MAX_MEM_FOR_RS_ALIGN_CODE) + size &= MAX_MEM_FOR_RS_ALIGN_CODE; - if (count & 1)/* Padding in the gap till the next 2-byte - boundary with 0s. */ - { - (fragP)->fr_fix++; - *dest++ = 0; - } - /* Writing nop_s. */ - md_number_to_chars (dest, NOP_OPCODE_S, 2); + /* Insert variable number of 2 bytes NOPs. */ + arc_make_nops (dest, size); } + fragP->fr_fix += size; } /* Here we decide which fixups can be adjusted to make them relative @@ -4194,7 +4472,6 @@ arc_handle_align (fragS* fragP) int tc_arc_fix_adjustable (fixS *fixP) { - /* Prevent all adjustments to global symbols. */ if (S_IS_EXTERNAL (fixP->fx_addsy)) return 0; @@ -4206,6 +4483,9 @@ tc_arc_fix_adjustable (fixS *fixP) { case BFD_RELOC_ARC_GOTPC32: case BFD_RELOC_ARC_PLT32: +#if defined (TARGET_ARCv3_64) || defined (TARGET_ARCv3_32) + case BFD_RELOC_ARC_PLT34: +#endif case BFD_RELOC_ARC_S25H_PCREL_PLT: case BFD_RELOC_ARC_S21H_PCREL_PLT: case BFD_RELOC_ARC_S25W_PCREL_PLT: @@ -4288,14 +4568,16 @@ check_zol (symbolS *s) if (is_br_jmp_insn_p (arc_last_insns[0].opcode) || arc_last_insns[1].has_delay_slot) - as_bad (_("Jump/Branch instruction detected at the end of the ZOL label @%s"), + as_bad (_("Jump/Branch instruction detected at the end " + "of the ZOL label @%s"), S_GET_NAME (s)); break; case bfd_mach_arc_arc600: if (is_kernel_insn_p (arc_last_insns[0].opcode)) - as_bad (_("Kernel instruction detected at the end of the ZOL label @%s"), + as_bad (_("Kernel instruction detected at the end " + "of the ZOL label @%s"), S_GET_NAME (s)); if (arc_last_insns[0].has_limm @@ -4306,7 +4588,8 @@ end of the ZOL label @%s"), S_GET_NAME (s)); /* Fall through. */ case bfd_mach_arc_arc700: if (arc_last_insns[0].has_delay_slot) - as_bad (_("An illegal use of delay slot detected at the end of the ZOL label @%s"), + as_bad (_("An illegal use of delay slot detected at the end " + "of the ZOL label @%s"), S_GET_NAME (s)); break; @@ -4620,7 +4903,8 @@ arc_extinsn (int ignore ATTRIBUTE_UNUSED) | ARC_OPCODE_ARCv2HS)) ? 0x07 : 0x0a; if ((einsn.major > mophigh) || (einsn.major < moplow)) - as_fatal (_("major opcode not in range [0x%02x - 0x%02x]"), moplow, mophigh); + as_fatal (_("major opcode not in range [0x%02x - 0x%02x]"), moplow, + mophigh); if ((einsn.minor > 0x3f) && (einsn.major != 0x0a) && (einsn.major != 5) && (einsn.major != 9)) @@ -5059,9 +5343,6 @@ arc_md_end (void) { arc_set_public_attributes (); - if (!bfd_set_arch_mach (stdoutput, bfd_arch_arc, selected_cpu.mach)) - as_fatal (_("could not set architecture and machine")); - bfd_set_private_flags (stdoutput, selected_cpu.eflags); } diff --git a/gas/config/tc-arc.h b/gas/config/tc-arc.h index bbad54c42fb6..3e785b313f89 100644 --- a/gas/config/tc-arc.h +++ b/gas/config/tc-arc.h @@ -34,7 +34,11 @@ /* This macro is the BFD architecture to pass to `bfd_set_arch_mach'. */ -#define TARGET_ARCH bfd_arch_arc +#if defined (TARGET_ARCv3_64) || defined (TARGET_ARCv3_32) +# define TARGET_ARCH bfd_arch_arc64 +#else +# define TARGET_ARCH bfd_arch_arc +#endif /* The `extsym - .' expressions can be emitted using PC-relative relocs. */ @@ -48,28 +52,33 @@ #undef BIG_ENDIAN #define BIG_ENDIAN 4321 -#ifdef TARGET_BYTES_BIG_ENDIAN - -# define DEFAULT_TARGET_FORMAT "elf32-bigarc" -# define DEFAULT_BYTE_ORDER BIG_ENDIAN - -#else +#ifndef TARGET_BYTES_BIG_ENDIAN /* You should define this macro to be non-zero if the target is big endian, and zero if the target is little endian. */ -# define TARGET_BYTES_BIG_ENDIAN 0 +#define TARGET_BYTES_BIG_ENDIAN 0 +#endif -# define DEFAULT_TARGET_FORMAT "elf32-littlearc" +#ifdef TARGET_ARCv3_64 +# define DEFAULT_TARGET_FORMAT "elf64-littlearc64" # define DEFAULT_BYTE_ORDER LITTLE_ENDIAN - +#elif defined (TARGET_ARCv3_32) +# define DEFAULT_TARGET_FORMAT "elf64-littlearc32" +# define DEFAULT_BYTE_ORDER LITTLE_ENDIAN +#else +# if TARGET_BYTES_BIG_ENDIAN == 1 +# define DEFAULT_TARGET_FORMAT "elf32-bigarc" +# define DEFAULT_BYTE_ORDER BIG_ENDIAN +# else +# define DEFAULT_TARGET_FORMAT "elf32-littlearc" +# define DEFAULT_BYTE_ORDER LITTLE_ENDIAN #endif /* TARGET_BYTES_BIG_ENDIAN. */ -/* The endianness of the target format may change based on command - line arguments. */ -extern const char *arc_target_format; +#endif /* TARGET_ARCv3_64. */ /* This macro is the BFD target name to use when creating the output file. This will normally depend upon the `OBJ_FMT' macro. */ -#define TARGET_FORMAT arc_target_format +#define TARGET_FORMAT arc_target_format() +extern const char *arc_target_format (void); /* `md_short_jump_size' `md_long_jump_size' @@ -103,9 +112,6 @@ extern const char *arc_target_format; fixp->fx_frag->fr_address. */ #define MD_PCREL_FROM_SECTION(FIX, SEC) md_pcrel_from_section (FIX, SEC) -/* [ ] is index operator. */ -#define NEED_INDEX_OPERATOR - #define MAX_MEM_FOR_RS_ALIGN_CODE (1+2) /* HANDLE_ALIGN called after all the assembly has been done, @@ -131,6 +137,7 @@ extern const char *arc_target_format; #define TC_VALIDATE_FIX(FIXP,SEG,SKIP) \ if ((FIXP->fx_r_type == BFD_RELOC_ARC_GOTPC32 \ || FIXP->fx_r_type == BFD_RELOC_ARC_PLT32 \ + || FIXP->fx_r_type == BFD_RELOC_ARC_PLT34 \ || FIXP->fx_r_type == BFD_RELOC_ARC_S25W_PCREL_PLT \ || FIXP->fx_r_type == BFD_RELOC_ARC_S25H_PCREL_PLT \ || FIXP->fx_r_type == BFD_RELOC_ARC_S21W_PCREL_PLT \ @@ -236,6 +243,11 @@ struct arc_flags /* Pointer to arc flags. */ const struct arc_flag_operand *flgp; + + /* Pointer to insert function. */ + unsigned long long (*insert) (unsigned long long instruction, + long long int op, + const char **errmsg); }; extern const relax_typeS md_relax_table[]; diff --git a/gas/configure b/gas/configure index 589262fe051a..eb765575eb31 100755 --- a/gas/configure +++ b/gas/configure @@ -12011,6 +12011,18 @@ cat >>confdefs.h <<_ACEOF #define DEFAULT_CRIS_ARCH $arch _ACEOF + ;; + arc64) + # Set for which architecture we compile + +$as_echo "#define TARGET_ARCv3_64 1" >>confdefs.h + + ;; + arc32) + # Set for which architecture we compile + +$as_echo "#define TARGET_ARCv3_32 1" >>confdefs.h + ;; esac @@ -12427,7 +12439,7 @@ $as_echo "#define NDS32_DEFAULT_ZOL_EXT 1" >>confdefs.h $as_echo "$enable_zol_ext" >&6; } ;; - aarch64 | i386 | s390 | sparc) + aarch64 | i386 | s390 | sparc | arc) if test $this_target = $target ; then cat >>confdefs.h <<_ACEOF diff --git a/gas/configure.ac b/gas/configure.ac index 7f817da421b7..388aef731f3e 100644 --- a/gas/configure.ac +++ b/gas/configure.ac @@ -226,6 +226,14 @@ for this_target in $target $canon_targets ; do AC_DEFINE_UNQUOTED(DEFAULT_CRIS_ARCH, $arch, [Default CRIS architecture.]) ;; + arc64) + # Set for which architecture we compile + AC_DEFINE(TARGET_ARCv3_64, 1, [Using ARCv3/64 architecture.]) + ;; + arc32) + # Set for which architecture we compile + AC_DEFINE(TARGET_ARCv3_32, 1, [Using ARCv3/32 architecture.]) + ;; esac if test ${this_target} = $target ; then @@ -589,7 +597,7 @@ changequote([,])dnl AC_MSG_RESULT($enable_zol_ext) ;; - aarch64 | i386 | s390 | sparc) + aarch64 | i386 | s390 | sparc | arc) if test $this_target = $target ; then AC_DEFINE_UNQUOTED(DEFAULT_ARCH, "${arch}", [Default architecture.]) fi diff --git a/gas/configure.tgt b/gas/configure.tgt index 62f806bdfe8e..9ee1fb2aac73 100644 --- a/gas/configure.tgt +++ b/gas/configure.tgt @@ -50,7 +50,9 @@ case ${cpu} in aarch64_be) cpu_type=aarch64 endian=big arch=aarch64;; alpha*) cpu_type=alpha ;; am33_2.0) cpu_type=mn10300 endian=little ;; - arc*eb) cpu_type=arc endian=big ;; + arc64|arc32) cpu_type=arc arch=arc64 endian=little ;; + arceb) cpu_type=arc arch=arc endian=big ;; + arc) cpu_type=arc arch=arc endian=little ;; arm*be|arm*b) cpu_type=arm endian=big ;; arm*) cpu_type=arm endian=little ;; bfin*) cpu_type=bfin endian=little ;; @@ -142,6 +144,7 @@ case ${generic_target} in alpha-*-netbsd* | alpha-*-openbsd*) fmt=elf em=nbsd ;; arc-*-elf*) fmt=elf ;; + arc64-*-* | arc32-*-*) fmt=elf ;; arc*-*-linux*) fmt=elf bfd_gas=yes ;; arm-*-phoenix*) fmt=elf ;; diff --git a/gas/testsuite/gas/arc/adc.d b/gas/testsuite/gas/arc/adc.d index ccb7b7cbdec0..ed55430d4443 100644 --- a/gas/testsuite/gas/arc/adc.d +++ b/gas/testsuite/gas/arc/adc.d @@ -6,7 +6,7 @@ Disassembly of section .text: 0x[0-9a-f]+ 2101 0080 adc r0,r1,r2 0x[0-9a-f]+ 2301 371a adc gp,fp,sp -0x[0-9a-f]+ 2601 37dd adc ilink,r30,blink +0x[0-9a-f]+ 2601 37dd adc ilink1,ilink2,blink 0x[0-9a-f]+ 2141 0000 adc r0,r1,0 0x[0-9a-f]+ 2601 7080 0000 0000 adc r0,0,r2 0x[0-9a-f]+ 2101 00be adc 0,r1,r2 @@ -30,8 +30,8 @@ Disassembly of section .text: 0x[0-9a-f]+ 22c1 2503 adc.p r18,r18,r20 0x[0-9a-f]+ 25c1 25c3 adc.p r21,r21,r23 0x[0-9a-f]+ 20c1 3684 adc.n r24,r24,gp -0x[0-9a-f]+ 23c1 3744 adc.n fp,fp,ilink -0x[0-9a-f]+ 26c1 37c5 adc.c r30,r30,blink +0x[0-9a-f]+ 23c1 3744 adc.n fp,fp,ilink1 +0x[0-9a-f]+ 26c1 37c5 adc.c ilink2,ilink2,blink 0x[0-9a-f]+ 23c1 00c5 adc.c r3,r3,r3 0x[0-9a-f]+ 23c1 0205 adc.c r3,r3,r8 0x[0-9a-f]+ 23c1 0106 adc.nc r3,r3,r4 diff --git a/gas/testsuite/gas/arc/add.d b/gas/testsuite/gas/arc/add.d index f7bae70f8cd6..02571366a72d 100644 --- a/gas/testsuite/gas/arc/add.d +++ b/gas/testsuite/gas/arc/add.d @@ -6,7 +6,7 @@ Disassembly of section .text: 0x[0-9a-f]+ 2100 0080 add r0,r1,r2 0x[0-9a-f]+ 2300 371a add gp,fp,sp -0x[0-9a-f]+ 2600 37dd add ilink,r30,blink +0x[0-9a-f]+ 2600 37dd add ilink1,ilink2,blink 0x[0-9a-f]+ 2140 0000 add r0,r1,0 0x[0-9a-f]+ 2600 7080 0000 0000 add r0,0,r2 0x[0-9a-f]+ 2100 00be add 0,r1,r2 @@ -30,8 +30,8 @@ Disassembly of section .text: 0x[0-9a-f]+ 22c0 2503 add.p r18,r18,r20 0x[0-9a-f]+ 25c0 25c3 add.p r21,r21,r23 0x[0-9a-f]+ 20c0 3684 add.n r24,r24,gp -0x[0-9a-f]+ 23c0 3744 add.n fp,fp,ilink -0x[0-9a-f]+ 26c0 37c5 add.c r30,r30,blink +0x[0-9a-f]+ 23c0 3744 add.n fp,fp,ilink1 +0x[0-9a-f]+ 26c0 37c5 add.c ilink2,ilink2,blink 0x[0-9a-f]+ 23c0 00c5 add.c r3,r3,r3 0x[0-9a-f]+ 23c0 0205 add.c r3,r3,r8 0x[0-9a-f]+ 23c0 0106 add.nc r3,r3,r4 diff --git a/gas/testsuite/gas/arc/and.d b/gas/testsuite/gas/arc/and.d index 99e30f5a47e3..3dc3302e941d 100644 --- a/gas/testsuite/gas/arc/and.d +++ b/gas/testsuite/gas/arc/and.d @@ -6,7 +6,7 @@ Disassembly of section .text: 0x[0-9a-f]+ 2104 0080 and r0,r1,r2 0x[0-9a-f]+ 2304 371a and gp,fp,sp -0x[0-9a-f]+ 2604 37dd and ilink,r30,blink +0x[0-9a-f]+ 2604 37dd and ilink1,ilink2,blink 0x[0-9a-f]+ 2144 0000 and r0,r1,0 0x[0-9a-f]+ 2604 7080 0000 0000 and r0,0,r2 0x[0-9a-f]+ 2104 00be and 0,r1,r2 @@ -30,8 +30,8 @@ Disassembly of section .text: 0x[0-9a-f]+ 22c4 2503 and.p r18,r18,r20 0x[0-9a-f]+ 25c4 25c3 and.p r21,r21,r23 0x[0-9a-f]+ 20c4 3684 and.n r24,r24,gp -0x[0-9a-f]+ 23c4 3744 and.n fp,fp,ilink -0x[0-9a-f]+ 26c4 37c5 and.c r30,r30,blink +0x[0-9a-f]+ 23c4 3744 and.n fp,fp,ilink1 +0x[0-9a-f]+ 26c4 37c5 and.c ilink2,ilink2,blink 0x[0-9a-f]+ 23c4 00c5 and.c r3,r3,r3 0x[0-9a-f]+ 23c4 0205 and.c r3,r3,r8 0x[0-9a-f]+ 23c4 0106 and.nc r3,r3,r4 diff --git a/gas/testsuite/gas/arc/arc.exp b/gas/testsuite/gas/arc/arc.exp index b6f52ebf592a..30a98afacc42 100644 --- a/gas/testsuite/gas/arc/arc.exp +++ b/gas/testsuite/gas/arc/arc.exp @@ -14,6 +14,10 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. +if { [istarget arc64-*-*] || [istarget arc32-*-*] } { + return +} + # ARC base instruction set # ARC library extensions diff --git a/gas/testsuite/gas/arc/asl.d b/gas/testsuite/gas/arc/asl.d index f316378d899c..6734c7874912 100644 --- a/gas/testsuite/gas/arc/asl.d +++ b/gas/testsuite/gas/arc/asl.d @@ -6,7 +6,7 @@ Disassembly of section .text: 0x[0-9a-f]+ 2900 0080 asl r0,r1,r2 0x[0-9a-f]+ 2b00 371a asl gp,fp,sp -0x[0-9a-f]+ 2e00 37dd asl ilink,r30,blink +0x[0-9a-f]+ 2e00 37dd asl ilink1,ilink2,blink 0x[0-9a-f]+ 2940 0000 asl r0,r1,0 0x[0-9a-f]+ 2e00 7080 0000 0000 asl r0,0,r2 0x[0-9a-f]+ 2900 00be asl 0,r1,r2 @@ -30,8 +30,8 @@ Disassembly of section .text: 0x[0-9a-f]+ 2ac0 2503 asl.p r18,r18,r20 0x[0-9a-f]+ 2dc0 25c3 asl.p r21,r21,r23 0x[0-9a-f]+ 28c0 3684 asl.n r24,r24,gp -0x[0-9a-f]+ 2bc0 3744 asl.n fp,fp,ilink -0x[0-9a-f]+ 2ec0 37c5 asl.c r30,r30,blink +0x[0-9a-f]+ 2bc0 3744 asl.n fp,fp,ilink1 +0x[0-9a-f]+ 2ec0 37c5 asl.c ilink2,ilink2,blink 0x[0-9a-f]+ 2bc0 00c5 asl.c r3,r3,r3 0x[0-9a-f]+ 2bc0 0205 asl.c r3,r3,r8 0x[0-9a-f]+ 2bc0 0106 asl.nc r3,r3,r4 diff --git a/gas/testsuite/gas/arc/asr.d b/gas/testsuite/gas/arc/asr.d index d72878ba2d5d..a52478f8bc7d 100644 --- a/gas/testsuite/gas/arc/asr.d +++ b/gas/testsuite/gas/arc/asr.d @@ -6,7 +6,7 @@ Disassembly of section .text: 0x[0-9a-f]+ 2902 0080 asr r0,r1,r2 0x[0-9a-f]+ 2b02 371a asr gp,fp,sp -0x[0-9a-f]+ 2e02 37dd asr ilink,r30,blink +0x[0-9a-f]+ 2e02 37dd asr ilink1,ilink2,blink 0x[0-9a-f]+ 2942 0000 asr r0,r1,0 0x[0-9a-f]+ 2e02 7080 0000 0000 asr r0,0,r2 0x[0-9a-f]+ 2902 00be asr 0,r1,r2 @@ -30,8 +30,8 @@ Disassembly of section .text: 0x[0-9a-f]+ 2ac2 2503 asr.p r18,r18,r20 0x[0-9a-f]+ 2dc2 25c3 asr.p r21,r21,r23 0x[0-9a-f]+ 28c2 3684 asr.n r24,r24,gp -0x[0-9a-f]+ 2bc2 3744 asr.n fp,fp,ilink -0x[0-9a-f]+ 2ec2 37c5 asr.c r30,r30,blink +0x[0-9a-f]+ 2bc2 3744 asr.n fp,fp,ilink1 +0x[0-9a-f]+ 2ec2 37c5 asr.c ilink2,ilink2,blink 0x[0-9a-f]+ 2bc2 00c5 asr.c r3,r3,r3 0x[0-9a-f]+ 2bc2 0205 asr.c r3,r3,r8 0x[0-9a-f]+ 2bc2 0106 asr.nc r3,r3,r4 diff --git a/gas/testsuite/gas/arc/bic.d b/gas/testsuite/gas/arc/bic.d index 57124cd7e63d..8bcd504da947 100644 --- a/gas/testsuite/gas/arc/bic.d +++ b/gas/testsuite/gas/arc/bic.d @@ -6,7 +6,7 @@ Disassembly of section .text: 0x[0-9a-f]+ 2106 0080 bic r0,r1,r2 0x[0-9a-f]+ 2306 371a bic gp,fp,sp -0x[0-9a-f]+ 2606 37dd bic ilink,r30,blink +0x[0-9a-f]+ 2606 37dd bic ilink1,ilink2,blink 0x[0-9a-f]+ 2146 0000 bic r0,r1,0 0x[0-9a-f]+ 2606 7080 0000 0000 bic r0,0,r2 0x[0-9a-f]+ 2106 00be bic 0,r1,r2 @@ -30,8 +30,8 @@ Disassembly of section .text: 0x[0-9a-f]+ 22c6 2503 bic.p r18,r18,r20 0x[0-9a-f]+ 25c6 25c3 bic.p r21,r21,r23 0x[0-9a-f]+ 20c6 3684 bic.n r24,r24,gp -0x[0-9a-f]+ 23c6 3744 bic.n fp,fp,ilink -0x[0-9a-f]+ 26c6 37c5 bic.c r30,r30,blink +0x[0-9a-f]+ 23c6 3744 bic.n fp,fp,ilink1 +0x[0-9a-f]+ 26c6 37c5 bic.c ilink2,ilink2,blink 0x[0-9a-f]+ 23c6 00c5 bic.c r3,r3,r3 0x[0-9a-f]+ 23c6 0205 bic.c r3,r3,r8 0x[0-9a-f]+ 23c6 0106 bic.nc r3,r3,r4 diff --git a/gas/testsuite/gas/arc/lsr.d b/gas/testsuite/gas/arc/lsr.d index 8ce4d1c57e0c..cc019b7fa6e0 100644 --- a/gas/testsuite/gas/arc/lsr.d +++ b/gas/testsuite/gas/arc/lsr.d @@ -6,7 +6,7 @@ Disassembly of section .text: 0x[0-9a-f]+ 2901 0080 lsr r0,r1,r2 0x[0-9a-f]+ 2b01 371a lsr gp,fp,sp -0x[0-9a-f]+ 2e01 37dd lsr ilink,r30,blink +0x[0-9a-f]+ 2e01 37dd lsr ilink1,ilink2,blink 0x[0-9a-f]+ 2941 0000 lsr r0,r1,0 0x[0-9a-f]+ 2e01 7080 0000 0000 lsr r0,0,r2 0x[0-9a-f]+ 2901 00be lsr 0,r1,r2 @@ -30,8 +30,8 @@ Disassembly of section .text: 0x[0-9a-f]+ 2ac1 2503 lsr.p r18,r18,r20 0x[0-9a-f]+ 2dc1 25c3 lsr.p r21,r21,r23 0x[0-9a-f]+ 28c1 3684 lsr.n r24,r24,gp -0x[0-9a-f]+ 2bc1 3744 lsr.n fp,fp,ilink -0x[0-9a-f]+ 2ec1 37c5 lsr.c r30,r30,blink +0x[0-9a-f]+ 2bc1 3744 lsr.n fp,fp,ilink1 +0x[0-9a-f]+ 2ec1 37c5 lsr.c ilink2,ilink2,blink 0x[0-9a-f]+ 2bc1 00c5 lsr.c r3,r3,r3 0x[0-9a-f]+ 2bc1 0205 lsr.c r3,r3,r8 0x[0-9a-f]+ 2bc1 0106 lsr.nc r3,r3,r4 diff --git a/gas/testsuite/gas/arc/nps400-1.d b/gas/testsuite/gas/arc/nps400-1.d index 707b982f81a7..dc373a5d177b 100644 --- a/gas/testsuite/gas/arc/nps400-1.d +++ b/gas/testsuite/gas/arc/nps400-1.d @@ -18,7 +18,7 @@ Disassembly of section .text: 24: 4878 ffff movh\.cl r3,0xffff 28: 49cf 0906 movbi r14,r14,0x6,0x8,0x4 2c: 4aff 0174 movbi\.f r23,r23,0x14,0xb,0x1 - 30: 4bcf 864a movbi\.cl r30,0xa,0x12,0x2 + 30: 4bcf 864a movbi\.cl ilink2,0xa,0x12,0x2 34: 48df 8c09 movbi\.f\.cl r6,0x9,0,0x8 38: 4843 a845 decode1 r0,r0,r2,0x5,0xb 3c: 4853 a845 decode1\.f r0,r0,r2,0x5,0xb diff --git a/gas/testsuite/gas/arc/or.d b/gas/testsuite/gas/arc/or.d index 693421bd506a..5b766895de21 100644 --- a/gas/testsuite/gas/arc/or.d +++ b/gas/testsuite/gas/arc/or.d @@ -6,7 +6,7 @@ Disassembly of section .text: 0x[0-9a-f]+ 2105 0080 or r0,r1,r2 0x[0-9a-f]+ 2305 371a or gp,fp,sp -0x[0-9a-f]+ 2605 37dd or ilink,r30,blink +0x[0-9a-f]+ 2605 37dd or ilink1,ilink2,blink 0x[0-9a-f]+ 2145 0000 or r0,r1,0 0x[0-9a-f]+ 2605 7080 0000 0000 or r0,0,r2 0x[0-9a-f]+ 2105 00be or 0,r1,r2 @@ -30,8 +30,8 @@ Disassembly of section .text: 0x[0-9a-f]+ 22c5 2503 or.p r18,r18,r20 0x[0-9a-f]+ 25c5 25c3 or.p r21,r21,r23 0x[0-9a-f]+ 20c5 3684 or.n r24,r24,gp -0x[0-9a-f]+ 23c5 3744 or.n fp,fp,ilink -0x[0-9a-f]+ 26c5 37c5 or.c r30,r30,blink +0x[0-9a-f]+ 23c5 3744 or.n fp,fp,ilink1 +0x[0-9a-f]+ 26c5 37c5 or.c ilink2,ilink2,blink 0x[0-9a-f]+ 23c5 00c5 or.c r3,r3,r3 0x[0-9a-f]+ 23c5 0205 or.c r3,r3,r8 0x[0-9a-f]+ 23c5 0106 or.nc r3,r3,r4 diff --git a/gas/testsuite/gas/arc/ror.d b/gas/testsuite/gas/arc/ror.d index 0e25c4c4dd34..abb3783f4c05 100644 --- a/gas/testsuite/gas/arc/ror.d +++ b/gas/testsuite/gas/arc/ror.d @@ -6,7 +6,7 @@ Disassembly of section .text: 0x[0-9a-f]+ 2903 0080 ror r0,r1,r2 0x[0-9a-f]+ 2b03 371a ror gp,fp,sp -0x[0-9a-f]+ 2e03 37dd ror ilink,r30,blink +0x[0-9a-f]+ 2e03 37dd ror ilink1,ilink2,blink 0x[0-9a-f]+ 2943 0000 ror r0,r1,0 0x[0-9a-f]+ 2e03 7080 0000 0000 ror r0,0,r2 0x[0-9a-f]+ 2903 00be ror 0,r1,r2 @@ -30,8 +30,8 @@ Disassembly of section .text: 0x[0-9a-f]+ 2ac3 2503 ror.p r18,r18,r20 0x[0-9a-f]+ 2dc3 25c3 ror.p r21,r21,r23 0x[0-9a-f]+ 28c3 3684 ror.n r24,r24,gp -0x[0-9a-f]+ 2bc3 3744 ror.n fp,fp,ilink -0x[0-9a-f]+ 2ec3 37c5 ror.c r30,r30,blink +0x[0-9a-f]+ 2bc3 3744 ror.n fp,fp,ilink1 +0x[0-9a-f]+ 2ec3 37c5 ror.c ilink2,ilink2,blink 0x[0-9a-f]+ 2bc3 00c5 ror.c r3,r3,r3 0x[0-9a-f]+ 2bc3 0205 ror.c r3,r3,r8 0x[0-9a-f]+ 2bc3 0106 ror.nc r3,r3,r4 diff --git a/gas/testsuite/gas/arc/sbc.d b/gas/testsuite/gas/arc/sbc.d index bca7deec6107..2acc0e3a5d4f 100644 --- a/gas/testsuite/gas/arc/sbc.d +++ b/gas/testsuite/gas/arc/sbc.d @@ -6,7 +6,7 @@ Disassembly of section .text: 0x[0-9a-f]+ 2103 0080 sbc r0,r1,r2 0x[0-9a-f]+ 2303 371a sbc gp,fp,sp -0x[0-9a-f]+ 2603 37dd sbc ilink,r30,blink +0x[0-9a-f]+ 2603 37dd sbc ilink1,ilink2,blink 0x[0-9a-f]+ 2143 0000 sbc r0,r1,0 0x[0-9a-f]+ 2603 7080 0000 0000 sbc r0,0,r2 0x[0-9a-f]+ 2103 00be sbc 0,r1,r2 @@ -30,8 +30,8 @@ Disassembly of section .text: 0x[0-9a-f]+ 22c3 2503 sbc.p r18,r18,r20 0x[0-9a-f]+ 25c3 25c3 sbc.p r21,r21,r23 0x[0-9a-f]+ 20c3 3684 sbc.n r24,r24,gp -0x[0-9a-f]+ 23c3 3744 sbc.n fp,fp,ilink -0x[0-9a-f]+ 26c3 37c5 sbc.c r30,r30,blink +0x[0-9a-f]+ 23c3 3744 sbc.n fp,fp,ilink1 +0x[0-9a-f]+ 26c3 37c5 sbc.c ilink2,ilink2,blink 0x[0-9a-f]+ 23c3 00c5 sbc.c r3,r3,r3 0x[0-9a-f]+ 23c3 0205 sbc.c r3,r3,r8 0x[0-9a-f]+ 23c3 0106 sbc.nc r3,r3,r4 diff --git a/gas/testsuite/gas/arc/sub.d b/gas/testsuite/gas/arc/sub.d index 520be7c74171..75c5432eba6d 100644 --- a/gas/testsuite/gas/arc/sub.d +++ b/gas/testsuite/gas/arc/sub.d @@ -6,7 +6,7 @@ Disassembly of section .text: 0x[0-9a-f]+ 2102 0080 sub r0,r1,r2 0x[0-9a-f]+ 2302 371a sub gp,fp,sp -0x[0-9a-f]+ 2602 37dd sub ilink,r30,blink +0x[0-9a-f]+ 2602 37dd sub ilink1,ilink2,blink 0x[0-9a-f]+ 2142 0000 sub r0,r1,0 0x[0-9a-f]+ 2602 7080 0000 0000 sub r0,0,r2 0x[0-9a-f]+ 2102 00be sub 0,r1,r2 @@ -30,8 +30,8 @@ Disassembly of section .text: 0x[0-9a-f]+ 22c2 2503 sub.p r18,r18,r20 0x[0-9a-f]+ 25c2 25c3 sub.p r21,r21,r23 0x[0-9a-f]+ 20c2 3684 sub.n r24,r24,gp -0x[0-9a-f]+ 23c2 3744 sub.n fp,fp,ilink -0x[0-9a-f]+ 26c2 37c5 sub.c r30,r30,blink +0x[0-9a-f]+ 23c2 3744 sub.n fp,fp,ilink1 +0x[0-9a-f]+ 26c2 37c5 sub.c ilink2,ilink2,blink 0x[0-9a-f]+ 23c2 00c5 sub.c r3,r3,r3 0x[0-9a-f]+ 23c2 0205 sub.c r3,r3,r8 0x[0-9a-f]+ 23c2 0106 sub.nc r3,r3,r4 diff --git a/gas/testsuite/gas/arc/textinsn3op.d b/gas/testsuite/gas/arc/textinsn3op.d index 2615885a8ee4..db74a7839bde 100644 --- a/gas/testsuite/gas/arc/textinsn3op.d +++ b/gas/testsuite/gas/arc/textinsn3op.d @@ -8,7 +8,7 @@ Disassembly of section .text: [0-9a-f]+ <.text>: 0: 3930 0080 myinsn r0,r1,r2 4: 3b30 371a myinsn gp,fp,sp - 8: 3e30 37dd myinsn ilink,r30,blink + 8: 3e30 37dd myinsn ilink1,ilink2,blink c: 3970 0000 myinsn r0,r1,0 10: 3e30 7080 0000 0000 myinsn r0,0,r2 18: 3930 00be myinsn 0,r1,r2 @@ -32,8 +32,8 @@ Disassembly of section .text: 84: 3af0 2503 myinsn.p r18,r18,r20 88: 3df0 25c3 myinsn.p r21,r21,r23 8c: 38f0 3684 myinsn.n r24,r24,gp - 90: 3bf0 3744 myinsn.n fp,fp,ilink - 94: 3ef0 37c5 myinsn.c r30,r30,blink + 90: 3bf0 3744 myinsn.n fp,fp,ilink1 + 94: 3ef0 37c5 myinsn.c ilink2,ilink2,blink 98: 3bf0 00c5 myinsn.c r3,r3,r3 9c: 3bf0 0205 myinsn.c r3,r3,r8 a0: 3bf0 0106 myinsn.nc r3,r3,r4 diff --git a/gas/testsuite/gas/arc/warn.exp b/gas/testsuite/gas/arc/warn.exp index 232fa6d5416b..5a7657e91a70 100644 --- a/gas/testsuite/gas/arc/warn.exp +++ b/gas/testsuite/gas/arc/warn.exp @@ -15,6 +15,9 @@ # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # Test assembler warnings. +if { [istarget arc64-*-*] || [istarget arc32-*-*] } { + return +} if [istarget arc*-*-*] { load_lib gas-dg.exp diff --git a/gas/testsuite/gas/arc/xor.d b/gas/testsuite/gas/arc/xor.d index b4b7e08ec733..d4947d8607f3 100644 --- a/gas/testsuite/gas/arc/xor.d +++ b/gas/testsuite/gas/arc/xor.d @@ -6,7 +6,7 @@ Disassembly of section .text: 0x[0-9a-f]+ 2107 0080 xor r0,r1,r2 0x[0-9a-f]+ 2307 371a xor gp,fp,sp -0x[0-9a-f]+ 2607 37dd xor ilink,r30,blink +0x[0-9a-f]+ 2607 37dd xor ilink1,ilink2,blink 0x[0-9a-f]+ 2147 0000 xor r0,r1,0 0x[0-9a-f]+ 2607 7080 0000 0000 xor r0,0,r2 0x[0-9a-f]+ 2107 00be xor 0,r1,r2 @@ -30,8 +30,8 @@ Disassembly of section .text: 0x[0-9a-f]+ 22c7 2503 xor.p r18,r18,r20 0x[0-9a-f]+ 25c7 25c3 xor.p r21,r21,r23 0x[0-9a-f]+ 20c7 3684 xor.n r24,r24,gp -0x[0-9a-f]+ 23c7 3744 xor.n fp,fp,ilink -0x[0-9a-f]+ 26c7 37c5 xor.c r30,r30,blink +0x[0-9a-f]+ 23c7 3744 xor.n fp,fp,ilink1 +0x[0-9a-f]+ 26c7 37c5 xor.c ilink2,ilink2,blink 0x[0-9a-f]+ 23c7 00c5 xor.c r3,r3,r3 0x[0-9a-f]+ 23c7 0205 xor.c r3,r3,r8 0x[0-9a-f]+ 23c7 0106 xor.nc r3,r3,r4 diff --git a/gas/testsuite/gas/arc64/arc64.exp b/gas/testsuite/gas/arc64/arc64.exp new file mode 100644 index 000000000000..dd0c0c88f947 --- /dev/null +++ b/gas/testsuite/gas/arc64/arc64.exp @@ -0,0 +1,24 @@ +# Copyright (C) 2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + +if { ![istarget arc64-*-*] && ![istarget arc32-*-*] } { + return +} + +# ARC base instruction set + +# ARC library extensions +run_dump_tests [lsort [glob -nocomplain $srcdir/$subdir/*.d]] diff --git a/gas/testsuite/gas/arc64/float01.d b/gas/testsuite/gas/arc64/float01.d new file mode 100644 index 000000000000..d0bb692c0f34 --- /dev/null +++ b/gas/testsuite/gas/arc64/float01.d @@ -0,0 +1,65 @@ +#as: -mcpu=hs6x +#source: float01.s +#objdump: -d --prefix-addresses --show-raw-insn + +.*: +file format elf64-.*arc64 + + +Disassembly of section .text: +0x[0-9a-f]+ e310 0062\s+vfhadd f1,f2,f3 +0x[0-9a-f]+ e311 0062\s+vfhsub f1,f2,f3 +0x[0-9a-f]+ e312 0062\s+vfhmul f1,f2,f3 +0x[0-9a-f]+ e313 0062\s+vfhdiv f1,f2,f3 +0x[0-9a-f]+ e314 0062\s+vfhadds f1,f2,f3 +0x[0-9a-f]+ e315 0062\s+vfhsubs f1,f2,f3 +0x[0-9a-f]+ e316 0062\s+vfhmuls f1,f2,f3 +0x[0-9a-f]+ e317 0062\s+vfhdivs f1,f2,f3 +0x[0-9a-f]+ e518 00e4\s+vfhunpkl f3,f4,f5 +0x[0-9a-f]+ e519 00e4\s+vfhunpkm f3,f4,f5 +0x[0-9a-f]+ e51a 00e4\s+vfhpackl f3,f4,f5 +0x[0-9a-f]+ e51b 00e4\s+vfhpackm f3,f4,f5 +0x[0-9a-f]+ e51c 00e4\s+vfhbflyl f3,f4,f5 +0x[0-9a-f]+ e51d 00e4\s+vfhbflym f3,f4,f5 +0x[0-9a-f]+ e51e 00e4\s+vfhaddsub f3,f4,f5 +0x[0-9a-f]+ e51f 00e4\s+vfhsubadd f3,f4,f5 +0x[0-9a-f]+ e010 51a7\s+vfsadd f6,f7,f8 +0x[0-9a-f]+ e011 51a7\s+vfssub f6,f7,f8 +0x[0-9a-f]+ e012 51a7\s+vfsmul f6,f7,f8 +0x[0-9a-f]+ e013 51a7\s+vfsdiv f6,f7,f8 +0x[0-9a-f]+ e014 51a7\s+vfsadds f6,f7,f8 +0x[0-9a-f]+ e015 51a7\s+vfssubs f6,f7,f8 +0x[0-9a-f]+ e016 51a7\s+vfsmuls f6,f7,f8 +0x[0-9a-f]+ e017 51a7\s+vfsdivs f6,f7,f8 +0x[0-9a-f]+ e218 51e9\s+vfsunpkl f7,f9,f10 +0x[0-9a-f]+ e219 51e9\s+vfsunpkm f7,f9,f10 +0x[0-9a-f]+ e21a 51e9\s+vfspackl f7,f9,f10 +0x[0-9a-f]+ e21b 51e9\s+vfspackm f7,f9,f10 +0x[0-9a-f]+ e21c 51e9\s+vfsbflyl f7,f9,f10 +0x[0-9a-f]+ e21d 51e9\s+vfsbflym f7,f9,f10 +0x[0-9a-f]+ e21e 51e9\s+vfsaddsub f7,f9,f10 +0x[0-9a-f]+ e21f 51e9\s+vfssubadd f7,f9,f10 +0x[0-9a-f]+ e610 b2b8\s+vfdadd f10f11,f24f25,f30f31 +0x[0-9a-f]+ e611 b2b8\s+vfdsub f10f11,f24f25,f30f31 +0x[0-9a-f]+ e612 b2b8\s+vfdmul f10f11,f24f25,f30f31 +0x[0-9a-f]+ e613 b2b8\s+vfddiv f10f11,f24f25,f30f31 +0x[0-9a-f]+ e614 b2b8\s+vfdadds f10f11,f24f25,f30f31 +0x[0-9a-f]+ e615 b2b8\s+vfdsubs f10f11,f24f25,f30f31 +0x[0-9a-f]+ e616 b2b8\s+vfdmuls f10f11,f24f25,f30f31 +0x[0-9a-f]+ e617 b2b8\s+vfddivs f10f11,f24f25,f30f31 +0x[0-9a-f]+ e218 a42c\s+vfdunpkl\s+f16f17,f12f13,f18f19 +0x[0-9a-f]+ e219 a42c\s+vfdunpkm\s+f16f17,f12f13,f18f19 +0x[0-9a-f]+ e21a a42c\s+vfdpackl\s+f16f17,f12f13,f18f19 +0x[0-9a-f]+ e21b a42c\s+vfdpackm\s+f16f17,f12f13,f18f19 +0x[0-9a-f]+ e21c a42c\s+vfdbflyl\s+f16f17,f12f13,f18f19 +0x[0-9a-f]+ e21d a42c\s+vfdbflym\s+f16f17,f12f13,f18f19 +0x[0-9a-f]+ e21e a42c\s+vfdaddsub\s+f16f17,f12f13,f18f19 +0x[0-9a-f]+ e21f a42c\s+vfdsubadd\s+f16f17,f12f13,f18f19 +0x[0-9a-f]+ e040 07ed\s+fhsqrt f31,f13 +0x[0-9a-f]+ e040 47ed\s+fssqrt f31,f13 +0x[0-9a-f]+ e040 87ed\s+fdsqrt f31,f13 +0x[0-9a-f]+ e041 0461\s+vfhsqrt f17,f1 +0x[0-9a-f]+ e041 4461\s+vfssqrt f17,f1 +0x[0-9a-f]+ e041 82bc\s+vfdsqrt f10f11,f28f29 +0x[0-9a-f]+ e042 02ef\s+vfhexch f11,f15 +0x[0-9a-f]+ e042 42ef\s+vfsexch f11,f15 +0x[0-9a-f]+ e042 823a\s+vfdexch f8f9,f26f27 diff --git a/gas/testsuite/gas/arc64/float01.s b/gas/testsuite/gas/arc64/float01.s new file mode 100644 index 000000000000..833fbb270e60 --- /dev/null +++ b/gas/testsuite/gas/arc64/float01.s @@ -0,0 +1,64 @@ + vfhadd f1,f2,f3 + vfhsub f1,f2,f3 + vfhmul f1,f2,f3 + vfhdiv f1,f2,f3 + vfhadds f1,f2,f3 + vfhsubs f1,f2,f3 + vfhmuls f1,f2,f3 + vfhdivs f1,f2,f3 + + vfhunpkl f3,f4,f5 + vfhunpkm f3,f4,f5 + vfhpackl f3,f4,f5 + vfhpackm f3,f4,f5 + vfhbflyl f3,f4,f5 + vfhbflym f3,f4,f5 + vfhaddsub f3,f4,f5 + vfhsubadd f3,f4,f5 + + vfsadd f6,f7,f8 + vfssub f6,f7,f8 + vfsmul f6,f7,f8 + vfsdiv f6,f7,f8 + vfsadds f6,f7,f8 + vfssubs f6,f7,f8 + vfsmuls f6,f7,f8 + vfsdivs f6,f7,f8 + + vfsunpkl f7,f9,f10 + vfsunpkm f7,f9,f10 + vfspackl f7,f9,f10 + vfspackm f7,f9,f10 + vfsbflyl f7,f9,f10 + vfsbflym f7,f9,f10 + vfsaddsub f7,f9,f10 + vfssubadd f7,f9,f10 + + vfdadd f10,f24,f30 + vfdsub f10,f24,f30 + vfdmul f10,f24,f30 + vfddiv f10,f24,f30 + vfdadds f10,f24,f30 + vfdsubs f10,f24,f30 + vfdmuls f10,f24,f30 + vfddivs f10,f24,f30 + + vfdunpkl f16,f12,f18 + vfdunpkm f16,f12,f18 + vfdpackl f16,f12,f18 + vfdpackm f16,f12,f18 + vfdbflyl f16,f12,f18 + vfdbflym f16,f12,f18 + vfdaddsub f16,f12,f18 + vfdsubadd f16,f12,f18 + + fhsqrt f31,f13 + fssqrt f31,f13 + fdsqrt f31,f13 + vfhsqrt f17,f1 + vfssqrt f17,f1 + vfdsqrt f10,f28 + + vfhexch f11,f15 + vfsexch f11,f15 + vfdexch f8,f26 diff --git a/gas/testsuite/gas/arc64/ldd.d b/gas/testsuite/gas/arc64/ldd.d new file mode 100644 index 000000000000..1a73169aa31e --- /dev/null +++ b/gas/testsuite/gas/arc64/ldd.d @@ -0,0 +1,46 @@ +#as: -mcpu=hs5x +#source: ldd.s +#objdump: -dr --prefix-addresses --show-raw-insn + +.*: +file format elf32-.*arc64 + +Disassembly of section .text: +0x[0-9a-f]+ 1100 0180 ldd r0r1,\[r1\] +0x[0-9a-f]+ 1100 0980 ldd.di r0r1,\[r1\] +0x[0-9a-f]+ 1100 0380 ldd.aw r0r1,\[r1\] +0x[0-9a-f]+ 1100 0b80 ldd.di.aw r0r1,\[r1] +0x[0-9a-f]+ 1100 0580 ldd.ab r0r1,\[r1\] +0x[0-9a-f]+ 1100 0d80 ldd.di.ab r0r1,\[r1] +0x[0-9a-f]+ 1100 0780 ldd.as r0r1,\[r1\] +0x[0-9a-f]+ 1100 0f80 ldd.di.as r0r1,\[r1] +0x[0-9a-f]+ 13ff 0184 ldd r4r5,\[r3,255\] +0x[0-9a-f]+ 1100 8986 ldd.di r6r7,\[r1,-256] +0x[0-9a-f]+ 177b 0380 ldd.aw r0r1,\[r7,123] +0x[0-9a-f]+ 1185 8b84 ldd.di.aw r4r5,\[r1,-123] +0x[0-9a-f]+ 110a 0582 ldd.ab r2r3,\[r1,10\] +0x[0-9a-f]+ 11ff 8d80 ldd.di.ab r0r1,\[r1,-1] +0x[0-9a-f]+ 11ff 0784 ldd.as r4r5,\[r1,255] +0x[0-9a-f]+ 110a 8f84 ldd.di.as r4r5,\[r1,-246] +0x[0-9a-f]+ 1600 7780 0000 0000 ldd.as r0r1,\[0\] +0x[0-9a-f]+ 1600 7980 0000 0255 ldd.di r0r1,\[0x255\] +0x[0-9a-f]+ 1600 7180 ffff ff00 ldd r0r1,\[0xffffff00] +0x[0-9a-f]+ 1600 7184 8765 4321 ldd r4r5,\[0x87654321] +0x[0-9a-f]+ 2136 0080 ldd r0r1,\[r1,r2\] +0x[0-9a-f]+ 2336 8102 ldd.di r2r3,\[r3,r4\] +0x[0-9a-f]+ 2576 0184 ldd.aw r4r5,\[r5,r6\] +0x[0-9a-f]+ 2676 8106 ldd.di.aw r6r7,\[r6,r4] +0x[0-9a-f]+ 24b6 0080 ldd.ab r0r1,\[r4,r2\] +0x[0-9a-f]+ 21b6 80c2 ldd.di.ab r2r3,\[r1,r3] +0x[0-9a-f]+ 23f6 0144 ldd.as r4r5,\[r3,r5\] +0x[0-9a-f]+ 25f6 8046 ldd.di.as r6r7,\[r5,r1] +0x[0-9a-f]+ 2536 0f84 0000 0102 ldd r4r5,\[r5,0x102\] +0x[0-9a-f]+ 21f6 0f84 0000 0100 ldd.as r4r5,\[r1,0x100] +0x[0-9a-f]+ 2376 0f80 1234 5678 ldd.aw r0r1,\[r3,0x12345678] +0x[0-9a-f]+ 24b6 8f82 edcb a988 ldd.di.ab r2r3,\[r4,0xedcba988] +0x[0-9a-f]+ 2636 7084 0000 0104 ldd r4r5,\[0x104,r2\] +0x[0-9a-f]+ 26f6 7044 0000 0100 ldd.as r4r5,\[0x100,r1] +0x[0-9a-f]+ 2636 7044 0000 00ff ldd r4r5,\[0xff,r1\] +0x[0-9a-f]+ 2636 f140 1234 5678 ldd.di r0r1,\[0x12345678,r5] +0x[0-9a-f]+ 26f6 f102 edcb a988 ldd.di.as r2r3,\[0xedcba988,r4] +0x[0-9a-f]+ 2136 0f80 0000 0100 ldd r0r1,\[r1,0x100\] +0x[0-9a-f]+ 2336 0f82 0000 0104 ldd r2r3,\[r3,0x104\] diff --git a/gas/testsuite/gas/arc64/ldd.s b/gas/testsuite/gas/arc64/ldd.s new file mode 100644 index 000000000000..514f49378e3f --- /dev/null +++ b/gas/testsuite/gas/arc64/ldd.s @@ -0,0 +1,55 @@ +; 64-bit double loads + +; ldd a, [b] +ldd r0, [r1] +ldd.di r0, [r1] +ldd.aw r0, [r1] +ldd.aw.di r0, [r1] +ldd.ab r0, [r1] +ldd.ab.di r0, [r1] +ldd.as r0, [r1] +ldd.as.di r0, [r1] + +; ldd a, [b, s9] +ldd r4, [r3, 255] +ldd.di r6, [r1, -256] +ldd.aw r0, [r7, 123] +ldd.aw.di r4, [r1, -123] +ldd.ab r2, [r1, 10] +ldd.ab.di r0, [r1, -1] +ldd.as r4, [r1, 255] +ldd.as.di r4, [r1, -246] + +; ldd a, [limm] -> no writeback (.aw, .ab) can be used +ldd.as r0, [0x0] +ldd.di r0, [0x255] +ldd r0, [-256] +ldd r4, [0x87654321] + +; ldd a, [b, c] +ldd r0, [r1, r2] +ldd.di r2, [r3, r4] +ldd.aw r4, [r5, r6] +ldd.aw.di r6, [r6, r4] +ldd.ab r0, [r4, r2] +ldd.ab.di r2, [r1, r3] +ldd.as r4, [r3, r5] +ldd.as.di r6, [r5, r1] + +; ldd a, [b, limm] +ldd r4, [r5, 258] +ldd.as r4, [r1, 256] +ldd.aw r0, [r3, 0x12345678] +ldd.ab.di r2, [r4, -0x12345678] + +; ldd a, [limm, c] -> no writeback (.aw, .ab) can be used +ldd r4, [260, r2] +ldd.as r4, [256, r1] +ldd r4, [255, r1] +ldd.di r0, [ 0x12345678, r5] +ldd.as.di r2, [-0x12345678, r4] + +; ldd a, [b, s9] +; use adress-scaling to fit numbers into 4-byte instructions +ldd r0, [r1, 256] +ldd r2, [r3, 260] diff --git a/gas/testsuite/gas/arc64/lddl.d b/gas/testsuite/gas/arc64/lddl.d new file mode 100644 index 000000000000..03a6dca3fc39 --- /dev/null +++ b/gas/testsuite/gas/arc64/lddl.d @@ -0,0 +1,48 @@ +#as: -mcpu=hs6x +#source: lddl.s +#objdump: -dr --prefix-addresses --show-raw-insn + +.*: +file format elf64-.*arc64 + +Disassembly of section .text: +0x[0-9a-f]+ 21f2 0080 lddl r0r1,\[r1,r2\] +0x[0-9a-f]+ 22f2 0f06 0000 0100 lddl r6r7,\[r2,256@s32\] +0x[0-9a-f]+ 22f2 0f02 ffff feff lddl r2r3,\[r2,-257@s32\] +0x[0-9a-f]+ 26f2 7144 8000 0000 lddl r4r5,\[0x80000000,r5\] +0x[0-9a-f]+ 24f2 7144 ffff ff9c lddl r4r5,\[-100@s32,r5\] +0x[0-9a-f]+ 1000 0682 lddl r2r3,\[r0\] +0x[0-9a-f]+ 17ff 0686 lddl r6r7,\[r7,255\] +0x[0-9a-f]+ 1700 8686 lddl r6r7,\[r7,-256\] +0x[0-9a-f]+ 1400 7680 1337 1338 lddl r0r1,\[322376504@s32\] +0x[0-9a-f]+ 1600 7682 8000 0000 lddl r2r3,\[0x80000000\] +0x[0-9a-f]+ 1400 7682 8000 0000 lddl r2r3,\[-2147483648@s32\] +0x[0-9a-f]+ 21f3 0080 lddl.aw r0r1,\[r1,r2\] +0x[0-9a-f]+ 22f3 0f06 0000 0100 lddl.aw r6r7,\[r2,256@s32\] +0x[0-9a-f]+ 22f3 0f02 ffff feff lddl.aw r2r3,\[r2,-257@s32\] +0x[0-9a-f]+ 1000 06c2 lddl.aw r2r3,\[r0\] +0x[0-9a-f]+ 17ff 06c6 lddl.aw r6r7,\[r7,255\] +0x[0-9a-f]+ 1700 86c6 lddl.aw r6r7,\[r7,-256\] +0x[0-9a-f]+ 21f3 0080 lddl.aw r0r1,\[r1,r2\] +0x[0-9a-f]+ 22f3 0f06 0000 0100 lddl.aw r6r7,\[r2,256@s32\] +0x[0-9a-f]+ 22f3 0f02 ffff feff lddl.aw r2r3,\[r2,-257@s32\] +0x[0-9a-f]+ 1000 06c2 lddl.aw r2r3,\[r0\] +0x[0-9a-f]+ 17ff 06c6 lddl.aw r6r7,\[r7,255\] +0x[0-9a-f]+ 1700 86c6 lddl.aw r6r7,\[r7,-256\] +0x[0-9a-f]+ 21f3 8080 lddl.ab r0r1,\[r1,r2\] +0x[0-9a-f]+ 22f3 8f06 0000 0100 lddl.ab r6r7,\[r2,256@s32\] +0x[0-9a-f]+ 22f3 8f02 ffff feff lddl.ab r2r3,\[r2,-257@s32\] +0x[0-9a-f]+ 1000 0ec2 lddl.ab r2r3,\[r0\] +0x[0-9a-f]+ 17ff 0ec6 lddl.ab r6r7,\[r7,255\] +0x[0-9a-f]+ 1700 8ec6 lddl.ab r6r7,\[r7,-256\] +0x[0-9a-f]+ 21f2 8080 lddl.as r0r1,\[r1,r2\] +0x[0-9a-f]+ 22f2 8f06 0000 0100 lddl.as r6r7,\[r2,256@s32\] +0x[0-9a-f]+ 22f2 8f02 ffff feff lddl.as r2r3,\[r2,-257@s32\] +0x[0-9a-f]+ 26f2 f144 8000 0000 lddl.as r4r5,\[0x80000000,r5\] +0x[0-9a-f]+ 24f2 f144 ffff ff9c lddl.as r4r5,\[-100@s32,r5\] +0x[0-9a-f]+ 1000 0e82 lddl.as r2r3,\[r0\] +0x[0-9a-f]+ 17ff 0e86 lddl.as r6r7,\[r7,255\] +0x[0-9a-f]+ 1700 8e86 lddl.as r6r7,\[r7,-256\] +0x[0-9a-f]+ 24f2 f144 ffff ff00 lddl.as r4r5,\[-256@s32,r5\] +0x[0-9a-f]+ 1400 7e80 1337 1338 lddl.as r0r1,\[322376504@s32] +0x[0-9a-f]+ 1600 7e82 8000 0000 lddl.as r2r3,\[0x80000000] +0x[0-9a-f]+ 1400 7e82 8000 0000 lddl.as r2r3,\[-2147483648@s32] diff --git a/gas/testsuite/gas/arc64/lddl.s b/gas/testsuite/gas/arc64/lddl.s new file mode 100644 index 000000000000..77d6c58b6d14 --- /dev/null +++ b/gas/testsuite/gas/arc64/lddl.s @@ -0,0 +1,54 @@ +; 128-bit double loads + + lddl r0, [r1,r2] ; lddl a, [b, c] + lddl r6, [r2,256] ; lddl a, [b, limm] (limm > s9) + lddl r2, [r2,-257] ; lddl a, [b, ximm] + lddl r4, [0x80000000,r5] ; lddl a, [limm, c] + lddl r4, [-100,r5] ; lddl a, [ximm, c] + + lddl r2, [r0] ; lddl a, [b, s9=0] + lddl r6, [r7,255] ; lddl a, [b, s9] biggest s9 + lddl r6, [r7,-256] ; lddl a, [b, s9] smallest s9 + lddl r0, [0x13371338] ; lddl a, [limm,s9=0] + lddl r2, [0x80000000] ; lddl a, [limm,s9=0] + lddl r2, [-2147483648] ; lddl a, [ximm,s9=0] + + ; Now, repetition of instructions above with suffices (*.a/aw/ab/as) + + lddl.a r0, [r1,r2] + lddl.a r6, [r2,256] + lddl.a r2, [r2,-257] + + lddl.a r2, [r0] + lddl.a r6, [r7,255] + lddl.a r6, [r7,-256] + + lddl.aw r0, [r1,r2] + lddl.aw r6, [r2,256] + lddl.aw r2, [r2,-257] + + lddl.aw r2, [r0] + lddl.aw r6, [r7,255] + lddl.aw r6, [r7,-256] + + lddl.ab r0, [r1,r2] + lddl.ab r6, [r2,256] + lddl.ab r2, [r2,-257] + + lddl.ab r2, [r0] + lddl.ab r6, [r7,255] + lddl.ab r6, [r7,-256] + + lddl.as r0, [r1,r2] + lddl.as r6, [r2,256] + lddl.as r2, [r2,-257] + lddl.as r4, [0x80000000,r5] + lddl.as r4, [-100,r5] + + lddl.as r2, [r0] + lddl.as r6, [r7,255] + lddl.as r6, [r7,-256] + lddl.as r4, [-256,r5] + lddl.as r0, [0x13371338] + lddl.as r2, [0x80000000] + lddl.as r2, [-2147483648] diff --git a/gas/testsuite/gas/arc64/load.d b/gas/testsuite/gas/arc64/load.d new file mode 100644 index 000000000000..a387f923c8ae --- /dev/null +++ b/gas/testsuite/gas/arc64/load.d @@ -0,0 +1,70 @@ +#as: -mcpu=hs6x +#source: load.s +#objdump: -d --prefix-addresses --show-raw-insn + +.*: +file format elf64-.*arc64 + + +Disassembly of section .text: +0x[0-9a-f]+ 2031 8f01 ffff f020 ldl r1,\[r0,-4064@s32\] +0x[0-9a-f]+ 2030 0f01 ffff f020 ld r1,\[r0,-4064@s32\] +0x[0-9a-f]+ 2032 0f01 ffff f020 ldb r1,\[r0,-4064@s32\] +0x[0-9a-f]+ 20f2 0f02 ffff f020 lddl r2r3,\[r0,-4064@s32\] +0x[0-9a-f]+ 2034 0f01 ffff f020 ldh r1,\[r0,-4064@s32\] +0x[0-9a-f]+ 2431 f001 ffff f020 ldl r1,\[-4064@s32,r0\] +0x[0-9a-f]+ 2430 7001 ffff f020 ld r1,\[-4064@s32,r0\] +0x[0-9a-f]+ 2432 7001 ffff f020 ldb r1,\[-4064@s32,r0\] +0x[0-9a-f]+ 24f2 7002 ffff f020 lddl r2r3,\[-4064@s32,r0\] +0x[0-9a-f]+ 2434 7001 ffff f020 ldh r1,\[-4064@s32,r0\] +0x[0-9a-f]+ 2631 f001 ffff f020 ldl r1,\[0xfffff020,r0\] +0x[0-9a-f]+ 2630 7001 ffff f020 ld r1,\[0xfffff020,r0\] +0x[0-9a-f]+ 2632 7001 ffff f020 ldb r1,\[0xfffff020,r0\] +0x[0-9a-f]+ 26f2 7002 ffff f020 lddl r2r3,\[0xfffff020,r0\] +0x[0-9a-f]+ 2634 7001 ffff f020 ldh r1,\[0xfffff020,r0\] +0x[0-9a-f]+ 2031 8f81 ffff f020 ldl r1,\[r0,0xfffff020\] +0x[0-9a-f]+ 2030 0f81 ffff f020 ld r1,\[r0,0xfffff020\] +0x[0-9a-f]+ 2032 0f81 ffff f020 ldb r1,\[r0,0xfffff020\] +0x[0-9a-f]+ 20f2 0f82 ffff f020 lddl r2r3,\[r0,0xfffff020\] +0x[0-9a-f]+ 2034 0f81 ffff f020 ldh r1,\[r0,0xfffff020\] +0x[0-9a-f]+ 2071 8f01 ffff f020 ldl.aw r1,\[r0,-4064@s32\] +0x[0-9a-f]+ 2070 0f01 ffff f020 ld.aw r1,\[r0,-4064@s32\] +0x[0-9a-f]+ 2072 0f01 ffff f020 ldb.aw r1,\[r0,-4064@s32\] +0x[0-9a-f]+ 20f3 0f02 ffff f020 lddl.aw r2r3,\[r0,-4064@s32\] +0x[0-9a-f]+ 2074 0f01 ffff f020 ldh.aw r1,\[r0,-4064@s32\] +0x[0-9a-f]+ 2471 f001 ffff f020 ldl.aw r1,\[-4064@s32,r0\] +0x[0-9a-f]+ 2470 7001 ffff f020 ld.aw r1,\[-4064@s32,r0\] +0x[0-9a-f]+ 2472 7001 ffff f020 ldb.aw r1,\[-4064@s32,r0\] +0x[0-9a-f]+ 2474 7001 ffff f020 ldh.aw r1,\[-4064@s32,r0\] +0x[0-9a-f]+ 2671 f001 ffff f020 ldl.aw r1,\[0xfffff020,r0\] +0x[0-9a-f]+ 2670 7001 ffff f020 ld.aw r1,\[0xfffff020,r0\] +0x[0-9a-f]+ 2672 7001 ffff f020 ldb.aw r1,\[0xfffff020,r0\] +0x[0-9a-f]+ 2674 7001 ffff f020 ldh.aw r1,\[0xfffff020,r0\] +0x[0-9a-f]+ 2071 8f81 ffff f020 ldl.aw r1,\[r0,0xfffff020\] +0x[0-9a-f]+ 2070 0f81 ffff f020 ld.aw r1,\[r0,0xfffff020\] +0x[0-9a-f]+ 2072 0f81 ffff f020 ldb.aw r1,\[r0,0xfffff020\] +0x[0-9a-f]+ 20f3 0f82 ffff f020 lddl.aw r2r3,\[r0,0xfffff020\] +0x[0-9a-f]+ 2074 0f81 ffff f020 ldh.aw r1,\[r0,0xfffff020\] +0x[0-9a-f]+ 2030 8f01 ffff f020 ld.di r1,\[r0,-4064@s32\] +0x[0-9a-f]+ 2032 8f01 ffff f020 ldb.di r1,\[r0,-4064@s32\] +0x[0-9a-f]+ 2034 8f01 ffff f020 ldh.di r1,\[r0,-4064@s32\] +0x[0-9a-f]+ 2430 f001 ffff f020 ld.di r1,\[-4064@s32,r0\] +0x[0-9a-f]+ 2432 f001 ffff f020 ldb.di r1,\[-4064@s32,r0\] +0x[0-9a-f]+ 2434 f001 ffff f020 ldh.di r1,\[-4064@s32,r0\] +0x[0-9a-f]+ 2630 f001 ffff f020 ld.di r1,\[0xfffff020,r0\] +0x[0-9a-f]+ 2632 f001 ffff f020 ldb.di r1,\[0xfffff020,r0\] +0x[0-9a-f]+ 2634 f001 ffff f020 ldh.di r1,\[0xfffff020,r0\] +0x[0-9a-f]+ 2030 8f81 ffff f020 ld.di r1,\[r0,0xfffff020\] +0x[0-9a-f]+ 2032 8f81 ffff f020 ldb.di r1,\[r0,0xfffff020\] +0x[0-9a-f]+ 2034 8f81 ffff f020 ldh.di r1,\[r0,0xfffff020\] +0x[0-9a-f]+ 2031 0f01 ffff f020 ld.x r1,\[r0,-4064@s32\] +0x[0-9a-f]+ 2033 0f01 ffff f020 ldb.x r1,\[r0,-4064@s32\] +0x[0-9a-f]+ 2035 0f01 ffff f020 ldh.x r1,\[r0,-4064@s32\] +0x[0-9a-f]+ 2431 7001 ffff f020 ld.x r1,\[-4064@s32,r0\] +0x[0-9a-f]+ 2433 7001 ffff f020 ldb.x r1,\[-4064@s32,r0\] +0x[0-9a-f]+ 2435 7001 ffff f020 ldh.x r1,\[-4064@s32,r0\] +0x[0-9a-f]+ 2631 7001 ffff f020 ld.x r1,\[0xfffff020,r0\] +0x[0-9a-f]+ 2633 7001 ffff f020 ldb.x r1,\[0xfffff020,r0\] +0x[0-9a-f]+ 2635 7001 ffff f020 ldh.x r1,\[0xfffff020,r0\] +0x[0-9a-f]+ 2031 0f81 ffff f020 ld.x r1,\[r0,0xfffff020\] +0x[0-9a-f]+ 2033 0f81 ffff f020 ldb.x r1,\[r0,0xfffff020\] +0x[0-9a-f]+ 2035 0f81 ffff f020 ldh.x r1,\[r0,0xfffff020\] diff --git a/gas/testsuite/gas/arc64/load.s b/gas/testsuite/gas/arc64/load.s new file mode 100644 index 000000000000..f142f8a6f412 --- /dev/null +++ b/gas/testsuite/gas/arc64/load.s @@ -0,0 +1,82 @@ + ldl r1,[r0,-4064] + ld r1,[r0,-4064] + ldb r1,[r0,-4064] + lddl r2,[r0,-4064] + ldh r1,[r0,-4064] + + ldl r1,[-4064,r0] + ld r1,[-4064,r0] + ldb r1,[-4064,r0] + lddl r2,[-4064,r0] + ldh r1,[-4064,r0] + + ldl r1,[0xfffff020,r0] + ld r1,[0xfffff020,r0] + ldb r1,[0xfffff020,r0] + lddl r2,[0xfffff020,r0] + ldh r1,[0xfffff020,r0] + + ldl r1,[r0,0xfffff020] + ld r1,[r0,0xfffff020] + ldb r1,[r0,0xfffff020] + lddl r2,[r0,0xfffff020] + ldh r1,[r0,0xfffff020] + + + ldl.aw r1,[r0,-4064] + ld.aw r1,[r0,-4064] + ldb.aw r1,[r0,-4064] + lddl.aw r2,[r0,-4064] + ldh.aw r1,[r0,-4064] + + ldl.aw r1,[-4064,r0] + ld.aw r1,[-4064,r0] + ldb.aw r1,[-4064,r0] + ;; lddl.aw r2,[-4064,r0] + ldh.aw r1,[-4064,r0] + + ldl.aw r1,[0xfffff020,r0] + ld.aw r1,[0xfffff020,r0] + ldb.aw r1,[0xfffff020,r0] + ;; lddl.aw r2,[0xfffff020,r0] + ldh.aw r1,[0xfffff020,r0] + + ldl.aw r1,[r0,0xfffff020] + ld.aw r1,[r0,0xfffff020] + ldb.aw r1,[r0,0xfffff020] + lddl.aw r2,[r0,0xfffff020] + ldh.aw r1,[r0,0xfffff020] + + + ld.di r1,[r0,-4064] + ldb.di r1,[r0,-4064] + ldh.di r1,[r0,-4064] + + ld.di r1,[-4064,r0] + ldb.di r1,[-4064,r0] + ldh.di r1,[-4064,r0] + + ld.di r1,[0xfffff020,r0] + ldb.di r1,[0xfffff020,r0] + ldh.di r1,[0xfffff020,r0] + + ld.di r1,[r0,0xfffff020] + ldb.di r1,[r0,0xfffff020] + ldh.di r1,[r0,0xfffff020] + + + ld.x r1,[r0,-4064] + ldb.x r1,[r0,-4064] + ldh.x r1,[r0,-4064] + + ld.x r1,[-4064,r0] + ldb.x r1,[-4064,r0] + ldh.x r1,[-4064,r0] + + ld.x r1,[0xfffff020,r0] + ldb.x r1,[0xfffff020,r0] + ldh.x r1,[0xfffff020,r0] + + ld.x r1,[r0,0xfffff020] + ldb.x r1,[r0,0xfffff020] + ldh.x r1,[r0,0xfffff020] diff --git a/gas/testsuite/gas/arc64/st.d b/gas/testsuite/gas/arc64/st.d new file mode 100644 index 000000000000..84e467ccd01d --- /dev/null +++ b/gas/testsuite/gas/arc64/st.d @@ -0,0 +1,53 @@ +#source: st.s +#objdump: -dr --prefix-addresses --show-raw-insn + +.*: +file format elf.*-.*arc64 + +Disassembly of section .text: +0x[0-9a-f]+ 1900 0100 st r4,\[r1\] +0x[0-9a-f]+ 1e00 7100 0000 1338 st r4,\[0x1338\] +0x[0-9a-f]+ 1e00 7180 7fff ffff st r6,\[0x7fffffff\] +0x[0-9a-f]+ 1b00 0f80 0800 0000 st 0x8000000,\[r3\] +0x[0-9a-f]+ 1e00 7f80 0000 1234 st 0x1234,\[0x1234\] +0x[0-9a-f]+ 19ff 0000 st r0,\[r1,255\] +0x[0-9a-f]+ 1c00 8080 st r2,\[r4,-256\] +0x[0-9a-f]+ 1e0c 7180 7fff ffff st r6,\[0x7fffffff,12\] +0x[0-9a-f]+ 1e0d 7f80 0000 4321 st 0x4321,\[0x4321,13\] +0x[0-9a-f]+ 1e00 7200 ffff fc00 st r8,\[0xfffffc00\] +0x[0-9a-f]+ 1a14 8f80 0000 0020 st 0x20,\[r2,-236\] +0x[0-9a-f]+ 1a0a 8f80 ffff ffdf st 0xffffffdf,\[r2,-246\] +0x[0-9a-f]+ 1a00 8f80 1234 5678 st 0x12345678,\[r2,-256\] +0x[0-9a-f]+ 19ff 0f80 ffff 5bf0 st 0xffff5bf0,\[r1,255\] +0x[0-9a-f]+ 19ff 0008 st.aw r0,\[r1,255\] +0x[0-9a-f]+ 1c00 8088 st.aw r2,\[r4,-256\] +0x[0-9a-f]+ 1a00 8f88 1234 5678 st.aw 0x12345678,\[r2,-256\] +0x[0-9a-f]+ 19ff 0f88 ffff 5bf0 st.aw 0xffff5bf0,\[r1,255\] +0x[0-9a-f]+ 19ff 0008 st.aw r0,\[r1,255\] +0x[0-9a-f]+ 1c00 8088 st.aw r2,\[r4,-256\] +0x[0-9a-f]+ 1a00 8f88 1234 5678 st.aw 0x12345678,\[r2,-256\] +0x[0-9a-f]+ 19ff 0f88 ffff 5bf0 st.aw 0xffff5bf0,\[r1,255\] +0x[0-9a-f]+ 19ff 0010 st.ab r0,\[r1,255\] +0x[0-9a-f]+ 1c00 8090 st.ab r2,\[r4,-256\] +0x[0-9a-f]+ 1a00 8f90 1234 5678 st.ab 0x12345678,\[r2,-256\] +0x[0-9a-f]+ 19ff 0f90 ffff 5bf0 st.ab 0xffff5bf0,\[r1,255\] +0x[0-9a-f]+ 19ff 0018 st.as r0,\[r1,255\] +0x[0-9a-f]+ 1c00 8098 st.as r2,\[r4,-256\] +0x[0-9a-f]+ 1e00 7100 0000 1338 st r4,\[0x1338\] +0x[0-9a-f]+ 1e00 7180 7fff ffff st r6,\[0x7fffffff\] +0x[0-9a-f]+ 1e00 7200 ffff fc00 st r8,\[0xfffffc00\] +0x[0-9a-f]+ 1a00 8f98 1234 5678 st.as 0x12345678,\[r2,-256\] +0x[0-9a-f]+ 19ff 0f98 ffff 5bf0 st.as 0xffff5bf0,\[r1,255\] +0x[0-9a-f]+ 1900 07c1 st 31,\[r1\] +0x[0-9a-f]+ 1900 0801 st -32,\[r1\] +0x[0-9a-f]+ 19ff 0801 st -32,\[r1,255\] +0x[0-9a-f]+ 1c00 8141 st 5,\[r4,-256\] +0x[0-9a-f]+ 1e00 7001 0000 1338 st 0,\[0x1338\] +0x[0-9a-f]+ 1e00 7041 7fff ffff st 1,\[0x7fffffff\] +0x[0-9a-f]+ 1e00 7fc1 ffff fc00 st -1,\[0xfffffc00\] +0x[0-9a-f]+ 1900 07e1 st.di 31,\[r1\] +0x[0-9a-f]+ 19ff 0839 st.di.as -32,\[r1,255\] +0x[0-9a-f]+ 1c00 8169 st.di.aw 5,\[r4,-256\] +0x[0-9a-f]+ 1b9b 0db1 st.di.ab -10,\[r3,155\] +0x[0-9a-f]+ 1c9c 0289 st.aw 10,\[r4,156\] +0x[0-9a-f]+ 1e00 7001 0000 1338 st 0,\[0x1338\] +0x[0-9a-f]+ 1e00 7061 7fff ffff st.di 1,\[0x7fffffff\] diff --git a/gas/testsuite/gas/arc64/st.s b/gas/testsuite/gas/arc64/st.s new file mode 100644 index 000000000000..49c7dcaa2b5c --- /dev/null +++ b/gas/testsuite/gas/arc64/st.s @@ -0,0 +1,59 @@ +; common stores + + st r4, [r1] ; st c, [b] + st r4, [0x1338] ; st c, [limm] limm: small + st r6, [0x7fffffff] ; st c, [limm] limm: big + st 0x8000000, [r3] ; st limm, [b] limm: big + st 0x1234, [0x1234] ; st limm, [limm] limm: equal + + st r0, [r1,255] ; st c, [b, s9] s9: biggest + st r2, [r4,-256] ; st c, [b, s9] s9: smallest + st r6, [0x7fffffff,12] ; st c, [limm,s9] limm: positive + st 0x4321, [0x4321,13] ; st limm, [limm,s9] limm: equal + st r8, [-1024] ; st c, [limm] limm: negative + st 32, [r2, -236] ; st limm, [b, s9] limm: smallest positive + st -33, [r2, -246] ; st limm, [b, s9] limm: biggest negative + st 0x12345678, [r2, -256] ; st limm, [b, s9] limm: positive + st -42000, [r1, 255] ; st limm, [b, s9] limm: negative + + ; Now, repetition of instructions above with suffices (*.a/aw/ab/as) + + st.a r0, [r1,255] + st.a r2, [r4,-256] + st.a 0x12345678, [r2, -256] + st.a -42000, [r1, 255] + + st.aw r0, [r1,255] + st.aw r2, [r4,-256] + st.aw 0x12345678, [r2, -256] + st.aw -42000, [r1, 255] + + st.ab r0, [r1,255] + st.ab r2, [r4,-256] + st.ab 0x12345678, [r2, -256] + st.ab -42000, [r1, 255] + + st.as r0, [r1,255] + st.as r2, [r4,-256] + st r4, [0x1338] + st r6, [0x7fffffff] + st r8, [-1024] + st.as 0x12345678, [r2, -256] + st.as -42000, [r1, 255] + + ; st w6, ... + st 31, [r1] ; st w6, [b, s9=0] w6: biggest + st -32, [r1] ; st w6, [b, s9=0] w6: smallest + st -32, [r1,255] ; st w6, [b, s9] s9: biggest + st 5, [r4,-256] ; st w6, [b, s9] s9: smallest + st 0, [0x1338] ; st w6, [limm] limm: small positive + st 1, [0x7fffffff] ; st w6, [limm] limm: positive + st -1, [-1024] ; st w6, [limm] limm: negative + + st.di 31, [r1] ; st w6, [b, s9=0] w6: biggest + st.as.di -32, [r1,255] ; st w6, [b, s9] s9: biggest + st.aw.di 5, [r4,-256] ; st w6, [b, s9] s9: smallest + st.ab.di -10, [r3,155] ; st w6, [b, s9] + st.aw 10, [r4,156] ; st w6, [b, s9] + st 0, [0x1338] ; st w6, [limm] limm: small positive + st.di 1, [0x7fffffff] ; st w6, [limm] limm: positive diff --git a/gas/testsuite/gas/arc64/std.d b/gas/testsuite/gas/arc64/std.d new file mode 100644 index 000000000000..9958b59f01c2 --- /dev/null +++ b/gas/testsuite/gas/arc64/std.d @@ -0,0 +1,55 @@ +#as: -mcpu=hs5x +#source: std.s +#objdump: -dr --prefix-addresses --show-raw-insn + +.*: +file format elf32-.*arc64 + +Disassembly of section .text: +0x[0-9a-f]+ 1900 0106 std r4r5,\[r1\] +0x[0-9a-f]+ 1e00 7106 0000 1338 std r4r5,\[0x1338\] +0x[0-9a-f]+ 1e00 7186 7fff ffff std r6r7,\[0x7fffffff\] +0x[0-9a-f]+ 1b00 0f86 0800 0000 std 0x8000000,\[r3\] +0x[0-9a-f]+ 1e00 7f86 0000 1234 std 0x1234,\[0x1234\] +0x[0-9a-f]+ 19ff 0006 std r0r1,\[r1,255\] +0x[0-9a-f]+ 1c00 8086 std r2r3,\[r4,-256\] +0x[0-9a-f]+ 1e0c 7186 7fff ffff std r6r7,\[0x7fffffff,12\] +0x[0-9a-f]+ 1e0d 7f86 0000 4321 std 0x4321,\[0x4321,13\] +0x[0-9a-f]+ 1e00 7206 ffff fc00 std r8r9,\[0xfffffc00\] +0x[0-9a-f]+ 1a14 8f86 0000 0020 std 0x20,\[r2,-236\] +0x[0-9a-f]+ 1a0a 8f86 ffff ffdf std 0xffffffdf,\[r2,-246\] +0x[0-9a-f]+ 1a00 8f86 1234 5678 std 0x12345678,\[r2,-256\] +0x[0-9a-f]+ 19ff 0f86 ffff 5bf0 std 0xffff5bf0,\[r1,255\] +0x[0-9a-f]+ 19ff 000e std.aw r0r1,\[r1,255\] +0x[0-9a-f]+ 1c00 808e std.aw r2r3,\[r4,-256\] +0x[0-9a-f]+ 1a00 8f8e 1234 5678 std.aw 0x12345678,\[r2,-256\] +0x[0-9a-f]+ 19ff 0f8e ffff 5bf0 std.aw 0xffff5bf0,\[r1,255\] +0x[0-9a-f]+ 19ff 000e std.aw r0r1,\[r1,255\] +0x[0-9a-f]+ 1c00 808e std.aw r2r3,\[r4,-256\] +0x[0-9a-f]+ 1a00 8f8e 1234 5678 std.aw 0x12345678,\[r2,-256\] +0x[0-9a-f]+ 19ff 0f8e ffff 5bf0 std.aw 0xffff5bf0,\[r1,255\] +0x[0-9a-f]+ 19ff 0016 std.ab r0r1,\[r1,255\] +0x[0-9a-f]+ 1c00 8096 std.ab r2r3,\[r4,-256\] +0x[0-9a-f]+ 1a00 8f96 1234 5678 std.ab 0x12345678,\[r2,-256\] +0x[0-9a-f]+ 19ff 0f96 ffff 5bf0 std.ab 0xffff5bf0,\[r1,255\] +0x[0-9a-f]+ 19ff 001e std.as r0r1,\[r1,255\] +0x[0-9a-f]+ 1c00 809e std.as r2r3,\[r4,-256\] +0x[0-9a-f]+ 1e00 711e 0000 1338 std.as r4r5,\[0x1338\] +0x[0-9a-f]+ 1e00 719e 7fff ffff std.as r6r7,\[0x7fffffff] +0x[0-9a-f]+ 1e00 721e ffff fc00 std.as r8r9,\[0xfffffc00] +0x[0-9a-f]+ 1a00 8f9e 1234 5678 std.as 0x12345678,\[r2,-256\] +0x[0-9a-f]+ 19ff 0f9e ffff 5bf0 std.as 0xffff5bf0,\[r1,255\] +0x[0-9a-f]+ 1e0f 7fbe 0000 4321 std.di.as 0x4321,\[0x4321,15\] +0x[0-9a-f]+ 1900 07c7 std 31,\[r1\] +0x[0-9a-f]+ 1900 0807 std -32,\[r1\] +0x[0-9a-f]+ 19ff 0807 std -32,\[r1,255\] +0x[0-9a-f]+ 1c00 8147 std 5,\[r4,-256\] +0x[0-9a-f]+ 1e00 7007 0000 1338 std 0,\[0x1338\] +0x[0-9a-f]+ 1e00 7047 7fff ffff std 1,\[0x7fffffff\] +0x[0-9a-f]+ 1e00 7fc7 ffff fc00 std -1,\[0xfffffc00\] +0x[0-9a-f]+ 1900 07e7 std.di 31,\[r1\] +0x[0-9a-f]+ 19ff 083f std.di.as -32,\[r1,255\] +0x[0-9a-f]+ 1c00 816f std.di.aw 5,\[r4,-256\] +0x[0-9a-f]+ 1b9b 0db7 std.di.ab -10,\[r3,155\] +0x[0-9a-f]+ 1c9c 028f std.aw 10,\[r4,156\] +0x[0-9a-f]+ 1e00 7007 0000 1338 std 0,\[0x1338\] +0x[0-9a-f]+ 1e00 7067 7fff ffff std.di 1,\[0x7fffffff\] diff --git a/gas/testsuite/gas/arc64/std.s b/gas/testsuite/gas/arc64/std.s new file mode 100644 index 000000000000..75c5a7cb4f32 --- /dev/null +++ b/gas/testsuite/gas/arc64/std.s @@ -0,0 +1,60 @@ +; 64-bit double stores + + std r4, [r1] ; std c, [b] + std r4, [0x1338] ; std c, [limm] limm: small + std r6, [0x7fffffff] ; std c, [limm] limm: big + std 0x8000000, [r3] ; std limm, [b] limm: big + std 0x1234, [0x1234] ; std limm, [limm] limm: equal + + std r0, [r1,255] ; std c, [b, s9] s9: biggest + std r2, [r4,-256] ; std c, [b, s9] s9: smallest + std r6, [0x7fffffff,12] ; std c, [limm,s9] limm: positive + std 0x4321, [0x4321,13] ; std limm, [limm,s9] limm: equal + std r8, [-1024] ; std c, [limm] limm: negative + std 32, [r2, -236] ; std limm, [b, s9] limm: smallest positive + std -33, [r2, -246] ; std limm, [b, s9] limm: biggest negative + std 0x12345678, [r2, -256] ; std limm, [b, s9] limm: positive + std -42000, [r1, 255] ; std limm, [b, s9] limm: negative + + ; Now, repetition of instructions above with suffices (*.a/aw/ab/as) + + std.a r0, [r1,255] + std.a r2, [r4,-256] + std.a 0x12345678, [r2, -256] + std.a -42000, [r1, 255] + + std.aw r0, [r1,255] + std.aw r2, [r4,-256] + std.aw 0x12345678, [r2, -256] + std.aw -42000, [r1, 255] + + std.ab r0, [r1,255] + std.ab r2, [r4,-256] + std.ab 0x12345678, [r2, -256] + std.ab -42000, [r1, 255] + + std.as r0, [r1,255] + std.as r2, [r4,-256] + std.as r4, [0x1338] + std.as r6, [0x7fffffff] + std.as r8, [-1024] + std.as 0x12345678, [r2, -256] + std.as -42000, [r1, 255] + std.as.di 0x4321, [0x4321, 15] + + ; std w6, ... + std 31, [r1] ; std w6, [b, s9=0] w6: biggest + std -32, [r1] ; std w6, [b, s9=0] w6: smallest + std -32, [r1,255] ; std w6, [b, s9] s9: biggest + std 5, [r4,-256] ; std w6, [b, s9] s9: smallest + std 0, [0x1338] ; std w6, [limm] limm: small positive + std 1, [0x7fffffff] ; std w6, [limm] limm: positive + std -1, [-1024] ; std w6, [limm] limm: negative + + std.di 31, [r1] ; std w6, [b, s9=0] w6: biggest + std.as.di -32, [r1,255] ; std w6, [b, s9] s9: biggest + std.aw.di 5, [r4,-256] ; std w6, [b, s9] s9: smallest + std.ab.di -10, [r3,155] ; std w6, [b, s9] + std.aw 10, [r4,156] ; std w6, [b, s9] + std 0, [0x1338] ; std w6, [limm] limm: small positive + std.di 1, [0x7fffffff] ; std w6, [limm] limm: positive diff --git a/gas/testsuite/gas/arc64/stdl.d b/gas/testsuite/gas/arc64/stdl.d new file mode 100644 index 000000000000..91ae852ed611 --- /dev/null +++ b/gas/testsuite/gas/arc64/stdl.d @@ -0,0 +1,45 @@ +#as: -mcpu=hs6x +#source: stdl.s +#objdump: -dr --prefix-addresses --show-raw-insn + +.*: +file format elf64-.*arc64 + +Disassembly of section .text: +0x[0-9a-f]+ 1900 0127 stdl r4r5,\[r1\] +0x[0-9a-f]+ 1c00 70a7 0000 1338 stdl r2r3,\[4920@s32\] +0x[0-9a-f]+ 1c00 71a7 7fff ffff stdl r6r7,\[2147483647@s32\] +0x[0-9a-f]+ 1e00 70a7 8000 0000 stdl r2r3,\[0x80000000\] +0x[0-9a-f]+ 1c00 7027 ffff fb2e stdl r0r1,\[-1234@s32\] +0x[0-9a-f]+ 1b00 0fa7 8000 0000 stdl 0x80000000,\[r3\] +0x[0-9a-f]+ 1b00 0f27 7fff ffff stdl 2147483647@s32,\[r3\] +0x[0-9a-f]+ 1c00 7f27 0000 1234 stdl 4660@s32,\[4660@s32\] +0x[0-9a-f]+ 1e00 7fa7 f0f0 f0f0 stdl 0xf0f0f0f0,\[0xf0f0f0f0\] +0x[0-9a-f]+ 19ff 0027 stdl r0r1,\[r1,255\] +0x[0-9a-f]+ 1c00 80a7 stdl r2r3,\[r4,-256\] +0x[0-9a-f]+ 1c0c 7127 0000 0000 stdl r4r5,\[0@s32,12\] +0x[0-9a-f]+ 1c0d 71a7 7fff ffff stdl r6r7,\[2147483647@s32,13\] +0x[0-9a-f]+ 1e0e 7027 8000 0000 stdl r0r1,\[0x80000000,14\] +0x[0-9a-f]+ 19ff 0f27 ffff 5bf0 stdl -42000@s32,\[r1,255\] +0x[0-9a-f]+ 1a00 8fa7 8234 5678 stdl 0x82345678,\[r2,-256\] +0x[0-9a-f]+ 1c0d 7f27 0000 4321 stdl 17185@s32,\[17185@s32,13\] +0x[0-9a-f]+ 1e1f 7fa7 f000 0000 stdl 0xf0000000,\[0xf0000000,31\] +0x[0-9a-f]+ 19ff 002f stdl.aw r0r1,\[r1,255\] +0x[0-9a-f]+ 1c00 812f stdl.aw r4r5,\[r4,-256\] +0x[0-9a-f]+ 1a00 8faf 8234 5678 stdl.aw 0x82345678,\[r2,-256\] +0x[0-9a-f]+ 19ff 0f2f ffff 5bf0 stdl.aw -42000@s32,\[r1,255\] +0x[0-9a-f]+ 19ff 002f stdl.aw r0r1,\[r1,255\] +0x[0-9a-f]+ 1c00 80af stdl.aw r2r3,\[r4,-256\] +0x[0-9a-f]+ 1a00 8faf 8234 5678 stdl.aw 0x82345678,\[r2,-256\] +0x[0-9a-f]+ 19ff 0f2f ffff 5bf0 stdl.aw -42000@s32,\[r1,255\] +0x[0-9a-f]+ 19ff 0037 stdl.ab r0r1,\[r1,255\] +0x[0-9a-f]+ 1c00 81b7 stdl.ab r6r7,\[r4,-256\] +0x[0-9a-f]+ 1a00 8fb7 8234 5678 stdl.ab 0x82345678,\[r2,-256\] +0x[0-9a-f]+ 19ff 0f37 ffff 5bf0 stdl.ab -42000@s32,\[r1,255\] +0x[0-9a-f]+ 19ff 003f stdl.as r0r1,\[r1,255\] +0x[0-9a-f]+ 1c00 813f stdl.as r4r5,\[r4,-256\] +0x[0-9a-f]+ 1c0b 70bf ffff fc00 stdl.as r2r3,\[-1024@s32,11\] +0x[0-9a-f]+ 1a00 8fbf 8234 5678 stdl.as 0x82345678,\[r2,-256\] +0x[0-9a-f]+ 19ff 0f3f ffff 5bf0 stdl.as -42000@s32,\[r1,255\] +0x[0-9a-f]+ 1a00 8fbf 8234 5678 stdl.as 0x82345678,\[r2,-256\] +0x[0-9a-f]+ 1c0d 7f3f 0000 4321 stdl.as 17185@s32,\[17185@s32,13\] +0x[0-9a-f]+ 1e1f 7fbf f000 0000 stdl.as 0xf0000000,\[0xf0000000,31\] diff --git a/gas/testsuite/gas/arc64/stdl.s b/gas/testsuite/gas/arc64/stdl.s new file mode 100644 index 000000000000..ec0e6601ff40 --- /dev/null +++ b/gas/testsuite/gas/arc64/stdl.s @@ -0,0 +1,47 @@ +; 128-bit double stores + + stdl r4, [r1] ; stdl c, [b] + stdl r2, [0x1338] ; stdl c, [ximm] ximm: default + stdl r6, [0x7fffffff] ; stdl c, [ximm] ximm: big + stdl r2, [0x80000000] ; stdl c, [limm] limm: positive + stdl r0, [-1234] ; stdl c, [ximm] ximm: negative + stdl 0x80000000, [r3] ; stdl limm, [b] limm: smallest + stdl 0x7fffffff, [r3] ; stdl ximm, [b] ximm: biggest + stdl 0x1234, [0x1234] ; stdl ximm, [ximm] ximm: equal + stdl 0xf0f0f0f0, [0xf0f0f0f0] ; stdl limm, [limm] limm: equal + + stdl r0, [r1, 255] ; stdl c, [b, s9] s9: biggest + stdl r2, [r4,-256] ; stdl c, [b, s9] s9: smallest + stdl r4, [0x0 ,12] ; stdl c, [ximm,s9] ximm: smallest + stdl r6, [0x7fffffff,13] ; stdl c, [ximm,s9] ximm: positive + stdl r0, [0x80000000,14] ; stdl c, [limm,s9] limm: smallest + stdl -42000, [r1, 255] ; stdl ximm, [b, s9] ximm: negative + stdl 0x82345678, [r2, -256] ; stdl limm, [b, s9] limm: positive + stdl 0x4321, [0x4321,13] ; stdl ximm, [ximm,s9] ximm: equal + stdl 0xf0000000, [0xf0000000,31] ; stdl limm, [limm,s9] limm: equal + + ; Now, repetition of instructions above with suffices (*.a/aw/ab/as) + + stdl.a r0, [r1,255] + stdl.a r4, [r4,-256] + stdl.a 0x82345678, [r2, -256] + stdl.a -42000, [r1, 255] + + stdl.aw r0, [r1,255] + stdl.aw r2, [r4,-256] + stdl.aw 0x82345678, [r2, -256] + stdl.aw -42000, [r1, 255] + + stdl.ab r0, [r1,255] + stdl.ab r6, [r4,-256] + stdl.ab 0x82345678, [r2, -256] + stdl.ab -42000, [r1, 255] + + stdl.as r0, [r1,255] + stdl.as r4, [r4,-256] + stdl.as r2, [-1024, 11] + stdl.as 0x82345678, [r2, -256] + stdl.as -42000, [r1, 255] + stdl.as 0x82345678, [r2, -256] + stdl.as 0x4321, [0x4321,13] + stdl.as 0xf0000000, [0xf0000000,31] diff --git a/gas/testsuite/gas/arc64/stl.d b/gas/testsuite/gas/arc64/stl.d new file mode 100644 index 000000000000..7783695b0307 --- /dev/null +++ b/gas/testsuite/gas/arc64/stl.d @@ -0,0 +1,57 @@ +#as: -mcpu=hs6x +#source: stl.s +#objdump: -dr --prefix-addresses --show-raw-insn + +.*: +file format elf64-.*arc64 + +Disassembly of section .text: +0x[0-9a-f]+ 1900 0107 stl r4,\[r1\] +0x[0-9a-f]+ 1c00 70c7 0000 1338 stl r3,\[4920@s32\] +0x[0-9a-f]+ 1c00 7147 7fff ffff stl r5,\[2147483647@s32\] +0x[0-9a-f]+ 1e00 7087 8000 0000 stl r2,\[0x80000000\] +0x[0-9a-f]+ 1c00 71c7 ffff fb2e stl r7,\[-1234@s32\] +0x[0-9a-f]+ 1b00 0f87 8000 0000 stl 0x80000000,\[r3\] +0x[0-9a-f]+ 1b00 0f07 7fff ffff stl 2147483647@s32,\[r3\] +0x[0-9a-f]+ 1c00 7f07 0000 1234 stl 4660@s32,\[4660@s32\] +0x[0-9a-f]+ 1e00 7f87 f0f0 f0f0 stl 0xf0f0f0f0,\[0xf0f0f0f0\] +0x[0-9a-f]+ 19ff 0047 stl r1,\[r1,255\] +0x[0-9a-f]+ 1c00 8087 stl r2,\[r4,-256\] +0x[0-9a-f]+ 1c0c 7187 0000 0000 stl r6,\[0@s32,12\] +0x[0-9a-f]+ 1c0d 7187 7fff ffff stl r6,\[2147483647@s32,13\] +0x[0-9a-f]+ 1e0e 7147 8000 0000 stl r5,\[0x80000000,14\] +0x[0-9a-f]+ 19ff 0f07 ffff 5bf0 stl -42000@s32,\[r1,255\] +0x[0-9a-f]+ 1a00 8f87 8234 5678 stl 0x82345678,\[r2,-256\] +0x[0-9a-f]+ 1c0d 7f07 0000 4321 stl 17185@s32,\[17185@s32,13\] +0x[0-9a-f]+ 1e1f 7f87 f000 0000 stl 0xf0000000,\[0xf0000000,31\] +0x[0-9a-f]+ 19ff 000f stl.aw r0,\[r1,255\] +0x[0-9a-f]+ 1c00 804f stl.aw r1,\[r4,-256\] +0x[0-9a-f]+ 1a00 8f8f 8234 5678 stl.aw 0x82345678,\[r2,-256\] +0x[0-9a-f]+ 19ff 0f0f ffff 5bf0 stl.aw -42000@s32,\[r1,255\] +0x[0-9a-f]+ 19ff 000f stl.aw r0,\[r1,255\] +0x[0-9a-f]+ 1c00 808f stl.aw r2,\[r4,-256\] +0x[0-9a-f]+ 1a00 8f8f 8234 5678 stl.aw 0x82345678,\[r2,-256\] +0x[0-9a-f]+ 19ff 0f0f ffff 5bf0 stl.aw -42000@s32,\[r1,255\] +0x[0-9a-f]+ 19ff 0017 stl.ab r0,\[r1,255\] +0x[0-9a-f]+ 1c00 80d7 stl.ab r3,\[r4,-256\] +0x[0-9a-f]+ 1a00 8f97 8234 5678 stl.ab 0x82345678,\[r2,-256\] +0x[0-9a-f]+ 19ff 0f17 ffff 5bf0 stl.ab -42000@s32,\[r1,255\] +0x[0-9a-f]+ 19ff 001f stl.as r0,\[r1,255\] +0x[0-9a-f]+ 1c00 805f stl.as r1,\[r4,-256\] +0x[0-9a-f]+ 1c0b 715f ffff fc00 stl.as r5,\[-1024@s32,11\] +0x[0-9a-f]+ 1a00 8f9f 8234 5678 stl.as 0x82345678,\[r2,-256\] +0x[0-9a-f]+ 19ff 0f1f ffff 5bf0 stl.as -42000@s32,\[r1,255\] +0x[0-9a-f]+ 1a00 8f9f 8234 5678 stl.as 0x82345678,\[r2,-256\] +0x[0-9a-f]+ 1c0d 7f1f 0000 4321 stl.as 17185@s32,\[17185@s32,13\] +0x[0-9a-f]+ 1e1f 7f9f f000 0000 stl.as 0xf0000000,\[0xf0000000,31\] +#0x[0-9a-f]+ 1900 07c6 stl 31,\[r1\] +#0x[0-9a-f]+ 1900 0806 stl -32,\[r1\] +#0x[0-9a-f]+ 19ff 0806 stl -32,\[r1,255\] +#0x[0-9a-f]+ 1c00 8146 stl 5,\[r4,-256\] +#0x[0-9a-f]+ 19ff 081e stl.as -32,\[r1,255\] +#0x[0-9a-f]+ 1c00 814e stl.aw 5,\[r4,-256\] +#0x[0-9a-f]+ 1b9b 0d96 stl.ab -10,\[r3,155\] +#0x[0-9a-f]+ 1c9c 028e stl.aw 10,\[r4,156\] +0x[0-9a-f]+ 1c00 7006 0000 1338 stl 0,\[4920@s32\] +0x[0-9a-f]+ 1e00 7046 8fff ffff stl 1,\[0x8fffffff\] +0x[0-9a-f]+ 1c00 7fc6 ffff fc00 stl -1,\[-1024@s32\] +0x[0-9a-f]+ 1e03 7f9e f0f0 f0f0 stl.as -2,\[0xf0f0f0f0,3\] diff --git a/gas/testsuite/gas/arc64/stl.s b/gas/testsuite/gas/arc64/stl.s new file mode 100644 index 000000000000..180bcfab7f47 --- /dev/null +++ b/gas/testsuite/gas/arc64/stl.s @@ -0,0 +1,61 @@ +; 64-bit stores + + stl r4, [r1] ; stl c, [b] + stl r3, [0x1338] ; stl c, [ximm] ximm: default + stl r5, [0x7fffffff] ; stl c, [ximm] ximm: big + stl r2, [0x80000000] ; stl c, [limm] limm: positive + stl r7, [-1234] ; stl c, [ximm] ximm: negative + stl 0x80000000, [r3] ; stl limm, [b] limm: smallest + stl 0x7fffffff, [r3] ; stl ximm, [b] ximm: biggest + stl 0x1234, [0x1234] ; stl ximm, [ximm] ximm: equal + stl 0xf0f0f0f0, [0xf0f0f0f0] ; stl limm, [limm] limm: equal + + stl r1, [r1, 255] ; stl c, [b, s9] s9: biggest + stl r2, [r4,-256] ; stl c, [b, s9] s9: smallest + stl r6, [0x0 ,12] ; stl c, [ximm,s9] ximm: smallest + stl r6, [0x7fffffff,13] ; stl c, [ximm,s9] ximm: positive + stl r5, [0x80000000,14] ; stl c, [limm,s9] limm: smallest + stl -42000, [r1, 255] ; stl ximm, [b, s9] ximm: negative + stl 0x82345678, [r2, -256] ; stl limm, [b, s9] limm: positive + stl 0x4321, [0x4321,13] ; stl ximm, [ximm,s9] ximm: equal + stl 0xf0000000, [0xf0000000,31] ; stl limm, [limm,s9] limm: equal + + ; Now, repetition of instructions above with suffices (*.a/aw/ab/as) + + stl.a r0, [r1,255] + stl.a r1, [r4,-256] + stl.a 0x82345678, [r2, -256] + stl.a -42000, [r1, 255] + + stl.aw r0, [r1,255] + stl.aw r2, [r4,-256] + stl.aw 0x82345678, [r2, -256] + stl.aw -42000, [r1, 255] + + stl.ab r0, [r1,255] + stl.ab r3, [r4,-256] + stl.ab 0x82345678, [r2, -256] + stl.ab -42000, [r1, 255] + + stl.as r0, [r1,255] + stl.as r1, [r4,-256] + stl.as r5, [-1024, 11] + stl.as 0x82345678, [r2, -256] + stl.as -42000, [r1, 255] + stl.as 0x82345678, [r2, -256] + stl.as 0x4321, [0x4321,13] + stl.as 0xf0000000, [0xf0000000,31] + + ; stl w6, ... +; stl 31, [r1] ; stl w6, [b, s9=0] w6: biggest +; stl -32, [r1] ; stl w6, [b, s9=0] w6: smallest +; stl -32, [r1,255] ; stl w6, [b, s9] s9: biggest +; stl 5, [r4,-256] ; stl w6, [b, s9] s9: smallest +; stl.as -32, [r1,255] ; stl w6, [b, s9] s9: biggest +; stl.aw 5, [r4,-256] ; stl w6, [b, s9] s9: smallest +; stl.ab -10, [r3,155] ; stl w6, [b, s9] +; stl.aw 10, [r4,156] ; stl w6, [b, s9] + stl 0, [0x1338] ; stl w6, [ximm] ximm: small positive + stl 1, [0x8fffffff] ; stl w6, [limm] limm: positive + stl -1, [-1024] ; stl w6, [ximm] ximm: negative + stl.as -2, [0xf0f0f0f0, 3] ; stl w6, [limm, s9] limm: positive diff --git a/gas/testsuite/gas/cfi/cfi-arc-1.d b/gas/testsuite/gas/cfi/cfi-arc-1.d index 73caeb2a078c..9bc522a46263 100644 --- a/gas/testsuite/gas/cfi/cfi-arc-1.d +++ b/gas/testsuite/gas/cfi/cfi-arc-1.d @@ -3,7 +3,7 @@ Contents of the .eh_frame section: -00000000 00000010 00000000 CIE +00000000 0+10 00000000 CIE Version: 1 Augmentation: "zR" Code alignment factor: 1 @@ -13,17 +13,17 @@ Contents of the .eh_frame section: DW_CFA_def_cfa: r28 ofs 0 -00000014 00000020 00000018 FDE cie=00000000 pc=00000000..00000010 - DW_CFA_advance_loc: 4 to 00000004 +00000014 0+20 00000018 FDE cie=00000000 pc=0+..[0-9a-f]+ + DW_CFA_advance_loc: 4 to 0+4 DW_CFA_def_cfa_offset: 48 DW_CFA_offset: r13 at cfa-48 - DW_CFA_advance_loc: 4 to 00000008 + DW_CFA_advance_loc: 8 to 0+c DW_CFA_def_cfa_offset: 52 DW_CFA_offset: r14 at cfa-44 DW_CFA_offset: r15 at cfa-40 - DW_CFA_advance_loc: 4 to 0000000c + DW_CFA_advance_loc: 4 to 0+10 DW_CFA_offset: r27 at cfa-52 - DW_CFA_advance_loc: 2 to 0000000e + DW_CFA_advance_loc: 4 to 0+14 DW_CFA_def_cfa_register: r27 DW_CFA_nop diff --git a/gas/testsuite/gas/cfi/cfi-arc-1.s b/gas/testsuite/gas/cfi/cfi-arc-1.s index 5d4f99d8c679..9f338e74b4d5 100644 --- a/gas/testsuite/gas/cfi/cfi-arc-1.s +++ b/gas/testsuite/gas/cfi/cfi-arc-1.s @@ -1,20 +1,20 @@ .file "foo.c" - .cpu HS .section .text .align 4 .cfi_startproc foo: - st.a r13,[sp,-48] + st.a r13,[sp,-48] .cfi_def_cfa_offset 48 .cfi_offset r13, -48 .LCFI0: - std r14,[sp,4] + st r14,[sp,4] + st r15,[sp,8] .cfi_adjust_cfa_offset 4 .cfi_offset r14, -44 .cfi_rel_offset r15, 12 - st.a fp,[sp,-4] + st.a fp,[sp,-4] .cfi_rel_offset fp, 0 - mov_s fp,sp + mov fp,sp .cfi_def_cfa_register fp j_s [blink] .cfi_endproc diff --git a/include/elf/arc-cpu.def b/include/elf/arc-cpu.def index a00d8a76b5e2..5ae1f2e71c2f 100644 --- a/include/elf/arc-cpu.def +++ b/include/elf/arc-cpu.def @@ -19,35 +19,40 @@ 02110-1301, USA. */ -ARC_CPU_TYPE_A7xx (arc700, 0x00), -ARC_CPU_TYPE_A7xx (nps400, NPS400), - -ARC_CPU_TYPE_AV2EM (arcem, 0x00), -ARC_CPU_TYPE_AV2EM (em, 0x00), -ARC_CPU_TYPE_AV2EM (em_mini, 0x00), -ARC_CPU_TYPE_AV2EM (em4, CD), -ARC_CPU_TYPE_AV2EM (em4_dmips, CD), -ARC_CPU_TYPE_AV2EM (em4_fpus, CD), -ARC_CPU_TYPE_AV2EM (em4_fpuda, CD | DPA), -ARC_CPU_TYPE_AV2EM (quarkse_em, CD | SPX | DPX), - -ARC_CPU_TYPE_AV2HS (archs, CD), -ARC_CPU_TYPE_AV2HS (hs, CD), -ARC_CPU_TYPE_AV2HS (hs34, CD), -ARC_CPU_TYPE_AV2HS (hs38, CD), -ARC_CPU_TYPE_AV2HS (hs38_linux, CD), -ARC_CPU_TYPE_AV2HS (hs4x, CD), -ARC_CPU_TYPE_AV2HS (hs4xd, CD), -ARC_CPU_TYPE_AV2HS (hs4x_rel31, CD), - -ARC_CPU_TYPE_A6xx (arc600, 0x00), -ARC_CPU_TYPE_A6xx (arc600_norm, 0x00), -ARC_CPU_TYPE_A6xx (arc600_mul64, 0x00), -ARC_CPU_TYPE_A6xx (arc600_mul32x16, 0x00), -ARC_CPU_TYPE_A6xx (arc601, 0x00), -ARC_CPU_TYPE_A6xx (arc601_norm, 0x00), -ARC_CPU_TYPE_A6xx (arc601_mul64, 0x00), -ARC_CPU_TYPE_A6xx (arc601_mul32x16, 0x00), +ARC_CPU_TYPE_A64x (hs6x, CD | DIV) +ARC_CPU_TYPE_A32x (hs5x, CD | DIV) +ARC_CPU_TYPE_A64x (hs68, CD | DIV) +ARC_CPU_TYPE_A32x (hs58, CD | DIV) + +ARC_CPU_TYPE_A7xx (arc700, 0x00) +ARC_CPU_TYPE_A7xx (nps400, NPS400) + +ARC_CPU_TYPE_AV2EM (arcem, 0x00) +ARC_CPU_TYPE_AV2EM (em, 0x00) +ARC_CPU_TYPE_AV2EM (em_mini, 0x00) +ARC_CPU_TYPE_AV2EM (em4, CD) +ARC_CPU_TYPE_AV2EM (em4_dmips, CD) +ARC_CPU_TYPE_AV2EM (em4_fpus, CD) +ARC_CPU_TYPE_AV2EM (em4_fpuda, CD | DPA) +ARC_CPU_TYPE_AV2EM (quarkse_em, CD | SPX | DPX) + +ARC_CPU_TYPE_AV2HS (archs, CD) +ARC_CPU_TYPE_AV2HS (hs, CD) +ARC_CPU_TYPE_AV2HS (hs34, CD) +ARC_CPU_TYPE_AV2HS (hs38, CD) +ARC_CPU_TYPE_AV2HS (hs38_linux, CD) +ARC_CPU_TYPE_AV2HS (hs4x, CD) +ARC_CPU_TYPE_AV2HS (hs4xd, CD) +ARC_CPU_TYPE_AV2HS (hs4x_rel31, CD) + +ARC_CPU_TYPE_A6xx (arc600, 0x00) +ARC_CPU_TYPE_A6xx (arc600_norm, 0x00) +ARC_CPU_TYPE_A6xx (arc600_mul64, 0x00) +ARC_CPU_TYPE_A6xx (arc600_mul32x16, 0x00) +ARC_CPU_TYPE_A6xx (arc601, 0x00) +ARC_CPU_TYPE_A6xx (arc601_norm, 0x00) +ARC_CPU_TYPE_A6xx (arc601_mul64, 0x00) +ARC_CPU_TYPE_A6xx (arc601_mul32x16, 0x00) ARC_CPU_TYPE_NONE diff --git a/include/elf/arc-reloc.def b/include/elf/arc-reloc.def index d58fa05fecff..490a88d6c11c 100644 --- a/include/elf/arc-reloc.def +++ b/include/elf/arc-reloc.def @@ -64,6 +64,13 @@ ARC_RELOC_HOWTO(ARC_32, 4, \ bitfield, \ ( S + A )) +ARC_RELOC_HOWTO(ARC_64, 5, \ + 4, \ + 64, \ + replace_word64, \ + bitfield, \ + ( S + A )) + ARC_RELOC_HOWTO(ARC_N8, 8, \ 0, \ 8, \ @@ -90,7 +97,7 @@ ARC_RELOC_HOWTO(ARC_N32, 11, \ 32, \ replace_word32, \ bitfield, \ - ( A - S )) + ( A - S)) ARC_RELOC_HOWTO(ARC_SDA, 12, \ 2, \ @@ -201,14 +208,14 @@ ARC_RELOC_HOWTO(ARC_32_ME, 27, \ 2, \ 32, \ replace_limm, \ - signed, \ + bitfield, \ ( ME ( ( S + A ) ) )) ARC_RELOC_HOWTO(ARC_32_ME_S, 105, \ 2, \ 32, \ replace_limms, \ - signed, \ + bitfield, \ ( ME ( ( S + A ) ) )) ARC_RELOC_HOWTO(ARC_N32_ME, 28, \ @@ -511,3 +518,152 @@ ARC_RELOC_HOWTO(ARC_NPS_CMEM16, 78, \ replace_bits16, \ dont, \ ( ME ( S + A ))) + +ARC_RELOC_HOWTO(ARC_S9H_PCREL, 79, \ + 2, \ + 8, \ + replace_disp8ls, \ + signed, \ + ( ME ( ( ( ( S + A ) - P ) >> 1 ) ) ) ) + +ARC_RELOC_HOWTO(ARC_S7H_PCREL, 80, \ + 1, \ + 6, \ + replace_disp6s, \ + signed, \ + ( ( ( ( S + A ) - P ) >> 1 ) ) ) + +ARC_RELOC_HOWTO(ARC_S8H_PCREL, 81, \ + 1, \ + 7, \ + replace_disp7s, \ + signed, \ + ( ( ( ( S + A ) - P ) >> 1 ) ) ) + +ARC_RELOC_HOWTO(ARC_S10H_PCREL, 82, \ + 1, \ + 9, \ + replace_disp9s, \ + signed, \ + ( ( ( ( S + A ) - P ) >> 1 ) ) ) + +ARC_RELOC_HOWTO(ARC_S13H_PCREL, 83, \ + 2, \ + 12, \ + replace_disp12s, \ + signed, \ + ( ME ( ( ( ( S + A ) - P ) >> 1 ) ) ) ) + +ARC_RELOC_HOWTO(ARC_ALIGN, 84, \ + 2, \ + 0, \ + replace_none, \ + dont, \ + 0 ) + +ARC_RELOC_HOWTO(ARC_ADD8, 85, \ + 0, \ + 8, \ + replace_bits8, \ + dont, \ + ( S + A )) + +ARC_RELOC_HOWTO(ARC_ADD16, 86, \ + 1, \ + 16, \ + replace_bits16, \ + dont, \ + ( S + A )) + +ARC_RELOC_HOWTO(ARC_SUB8, 87, \ + 0, \ + 8, \ + replace_bits8, \ + dont, \ + ( A - S + ICARRY )) + +ARC_RELOC_HOWTO(ARC_SUB16, 88, \ + 1, \ + 16, \ + replace_bits16, \ + dont, \ + ( A - S + ICARRY )) + +ARC_RELOC_HOWTO(ARC_SUB32, 89, \ + 2, \ + 32, \ + replace_word32, \ + dont, \ + ( A - S + ICARRY)) + +ARC_RELOC_HOWTO(ARC_LO32, 90, \ + 2, \ + 32, \ + replace_word32, \ + dont, \ + ( ( S + A ) & 4294967295 )) + +ARC_RELOC_HOWTO(ARC_HI32, 91, \ + 2, \ + 32, \ + replace_word32, \ + dont, \ + ( ( S + A ) >> 32 )) + +ARC_RELOC_HOWTO(ARC_LO32_ME, 92, \ + 2, \ + 32, \ + replace_word32, \ + dont, \ + ( ME ( ( ( S + A ) & 4294967295 ) ) )) + +ARC_RELOC_HOWTO(ARC_HI32_ME, 93, \ + 2, \ + 32, \ + replace_word32, \ + dont, \ + ( ME ( ( ( S + A ) >> 32 ) ) )) + +ARC_RELOC_HOWTO(ARC_N64, 94, \ + 2, \ + 32, \ + replace_word32, \ + dont, \ + ( DEREFP - ( S + A ) )) + +ARC_RELOC_HOWTO(ARC_SDA_LDST3, 95, \ + 2, \ + 9, \ + replace_disp9ls, \ + signed, \ + ( ( ( S + A ) - _SDA_BASE_ ) >> 3 )) + +ARC_RELOC_HOWTO(ARC_NLO32, 96, \ + 2, \ + 32, \ + replace_word32, \ + dont, \ + ( DEREFP - ( ( S + A ) & 4294967295 ) )) + +ARC_RELOC_HOWTO(ARC_NLO32_ME, 97, \ + 2, \ + 32, \ + replace_word32, \ + dont, \ + ( ME ( ( DEREFP - ( ( S + A ) & 4294967295 ) ) ) )) + +ARC_RELOC_HOWTO(ARC_PCLO32_ME_2, 98, \ + 2, \ + 34, \ + replace_word32, \ + signed, \ + ( ME ( ( ( ( S + A ) - P ) >> 2 ) & 0xFFFFFFFF ) ) ) + + +ARC_RELOC_HOWTO(ARC_PLT34, 99, \ + 2, \ + 34, \ + replace_word32, \ + signed, \ + ( ME ( ( ( ( L + A ) - P ) >> 2 ) & 0xFFFFFFFF ) ) ) + diff --git a/include/elf/arc.h b/include/elf/arc.h index 7ef0f912d55d..101ac5c10b38 100644 --- a/include/elf/arc.h +++ b/include/elf/arc.h @@ -50,6 +50,7 @@ END_RELOC_NUMBERS (R_ARC_max) #define E_ARC_MACH_ARC700 0x00000003 #define EF_ARC_CPU_ARCV2EM 0x00000005 #define EF_ARC_CPU_ARCV2HS 0x00000006 +#define EF_ARC_CPU_ARC64 0x00000007 /* ARC Linux specific ABIs. */ #define E_ARC_OSABI_ORIG 0x00000000 /* MUST be 0 for back-compat. */ diff --git a/include/opcode/arc-attrs.h b/include/opcode/arc-attrs.h index 18f6653603af..9b8cba04624c 100644 --- a/include/opcode/arc-attrs.h +++ b/include/opcode/arc-attrs.h @@ -37,8 +37,8 @@ const struct feature_type } FEATURE_LIST_NAME [] = { { BTSCN, ARC_OPCODE_ARCALL, "BITSCAN", "bit-scan" }, - { CD, ARC_OPCODE_ARCV2, "CD", "code-density" }, - { DIV, ARC_OPCODE_ARCV2, "DIV_REM", "div/rem" }, + { CD, ARC_OPCODE_ARCVx, "CD", "code-density" }, + { DIV, ARC_OPCODE_ARCVx, "DIV_REM", "div/rem" }, { DP, ARC_OPCODE_ARCv2HS, "FPUD", "double-precision FPU" }, { DPA, ARC_OPCODE_ARCv2EM, "FPUDA", "double assist FP" }, { DPX, ARC_OPCODE_ARCFPX, "DPFP", "double-precision FPX" }, diff --git a/include/opcode/arc-func.h b/include/opcode/arc-func.h index 34666e9fe0c8..8d8380ccf2bd 100644 --- a/include/opcode/arc-func.h +++ b/include/opcode/arc-func.h @@ -22,8 +22,8 @@ /* mask = 00000000000000000000000000000000. */ #ifndef REPLACE_none #define REPLACE_none -ATTRIBUTE_UNUSED static unsigned -replace_none (unsigned insn, int value ATTRIBUTE_UNUSED) +ATTRIBUTE_UNUSED static bfd_vma +replace_none (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) { insn = insn & ~0x00; @@ -35,8 +35,8 @@ replace_none (unsigned insn, int value ATTRIBUTE_UNUSED) /* mask = 11111111. */ #ifndef REPLACE_bits8 #define REPLACE_bits8 -ATTRIBUTE_UNUSED static unsigned -replace_bits8 (unsigned insn, int value ATTRIBUTE_UNUSED) +ATTRIBUTE_UNUSED static bfd_vma +replace_bits8 (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) { insn = insn & ~0xff; insn |= ((value >> 0) & 0x00ff) << 0; @@ -49,8 +49,8 @@ replace_bits8 (unsigned insn, int value ATTRIBUTE_UNUSED) /* mask = 1111111111111111. */ #ifndef REPLACE_bits16 #define REPLACE_bits16 -ATTRIBUTE_UNUSED static unsigned -replace_bits16 (unsigned insn, int value ATTRIBUTE_UNUSED) +ATTRIBUTE_UNUSED static bfd_vma +replace_bits16 (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) { insn = insn & ~0xffff; insn |= ((value >> 0) & 0xffff) << 0; @@ -63,8 +63,8 @@ replace_bits16 (unsigned insn, int value ATTRIBUTE_UNUSED) /* mask = 111111111111111111111111. */ #ifndef REPLACE_bits24 #define REPLACE_bits24 -ATTRIBUTE_UNUSED static unsigned -replace_bits24 (unsigned insn, int value ATTRIBUTE_UNUSED) +ATTRIBUTE_UNUSED static bfd_vma +replace_bits24 (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) { insn = insn & ~0xffffff; insn |= ((value >> 0) & 0xffffff) << 0; @@ -78,8 +78,8 @@ replace_bits24 (unsigned insn, int value ATTRIBUTE_UNUSED) /* mask = 111111111111111111111111. */ #ifndef REPLACE_bits24_be #define REPLACE_bits24_be -ATTRIBUTE_UNUSED static unsigned -replace_bits24_be (unsigned insn, int value ATTRIBUTE_UNUSED) +ATTRIBUTE_UNUSED static bfd_vma +replace_bits24_be (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) { insn = insn & ~0xffffff00; insn |= ((value >> 0) & 0xffffff) << 8; @@ -87,27 +87,39 @@ replace_bits24_be (unsigned insn, int value ATTRIBUTE_UNUSED) return insn; } -#endif /* REPLACE_bits24_be */ +#endif /* REPLACE_bits24_be. */ /* mask = 11111111111111111111111111111111. */ #ifndef REPLACE_word32 #define REPLACE_word32 -ATTRIBUTE_UNUSED static unsigned -replace_word32 (unsigned insn, int value ATTRIBUTE_UNUSED) +ATTRIBUTE_UNUSED static bfd_vma +replace_word32 (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) { insn = insn & ~0xffffffff; insn |= ((value >> 0) & 0xffffffff) << 0; return insn; } +#endif /* REPLACE_word32. */ + +/* mask = 1111111111111111111111111111111111111111111111111111111111111111. */ +#ifndef REPLACE_word64 +#define REPLACE_word64 +ATTRIBUTE_UNUSED static bfd_vma +replace_word64 (bfd_vma insn, bfd_vma value) +{ + insn |= value; + + return insn; +} +#endif /* REPLACE_word64. */ -#endif /* REPLACE_word32 */ /* mask = 0000000000000000000000000000000011111111111111111111111111111111. */ #ifndef REPLACE_limm #define REPLACE_limm -ATTRIBUTE_UNUSED static unsigned -replace_limm (unsigned insn, int value ATTRIBUTE_UNUSED) +ATTRIBUTE_UNUSED static bfd_vma +replace_limm (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) { insn = insn & ~0xffffffff; insn |= ((value >> 0) & 0xffffffff) << 0; @@ -115,13 +127,13 @@ replace_limm (unsigned insn, int value ATTRIBUTE_UNUSED) return insn; } -#endif /* REPLACE_limm */ +#endif /* REPLACE_limm. */ /* mask = 000000000000000011111111111111111111111111111111. */ #ifndef REPLACE_limms #define REPLACE_limms -ATTRIBUTE_UNUSED static unsigned -replace_limms (unsigned insn, int value ATTRIBUTE_UNUSED) +ATTRIBUTE_UNUSED static bfd_vma +replace_limms (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) { insn = insn & ~0xffffffff; insn |= ((value >> 0) & 0xffffffff) << 0; @@ -129,13 +141,13 @@ replace_limms (unsigned insn, int value ATTRIBUTE_UNUSED) return insn; } -#endif /* REPLACE_limms */ +#endif /* REPLACE_limms. */ /* mask = 00000111111111102222222222000000. */ #ifndef REPLACE_disp21h #define REPLACE_disp21h -ATTRIBUTE_UNUSED static unsigned -replace_disp21h (unsigned insn, int value ATTRIBUTE_UNUSED) +ATTRIBUTE_UNUSED static bfd_vma +replace_disp21h (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) { insn = insn & ~0x7feffc0; insn |= ((value >> 0) & 0x03ff) << 17; @@ -144,13 +156,13 @@ replace_disp21h (unsigned insn, int value ATTRIBUTE_UNUSED) return insn; } -#endif /* REPLACE_disp21h */ +#endif /* REPLACE_disp21h. */ /* mask = 00000111111111002222222222000000. */ #ifndef REPLACE_disp21w #define REPLACE_disp21w -ATTRIBUTE_UNUSED static unsigned -replace_disp21w (unsigned insn, int value ATTRIBUTE_UNUSED) +ATTRIBUTE_UNUSED static bfd_vma +replace_disp21w (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) { insn = insn & ~0x7fcffc0; insn |= ((value >> 0) & 0x01ff) << 18; @@ -159,13 +171,13 @@ replace_disp21w (unsigned insn, int value ATTRIBUTE_UNUSED) return insn; } -#endif /* REPLACE_disp21w */ +#endif /* REPLACE_disp21w. */ /* mask = 00000111111111102222222222003333. */ #ifndef REPLACE_disp25h #define REPLACE_disp25h -ATTRIBUTE_UNUSED static unsigned -replace_disp25h (unsigned insn, int value ATTRIBUTE_UNUSED) +ATTRIBUTE_UNUSED static bfd_vma +replace_disp25h (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) { insn = insn & ~0x7feffcf; insn |= ((value >> 0) & 0x03ff) << 17; @@ -175,13 +187,13 @@ replace_disp25h (unsigned insn, int value ATTRIBUTE_UNUSED) return insn; } -#endif /* REPLACE_disp25h */ +#endif /* REPLACE_disp25h. */ /* mask = 00000111111111002222222222003333. */ #ifndef REPLACE_disp25w #define REPLACE_disp25w -ATTRIBUTE_UNUSED static unsigned -replace_disp25w (unsigned insn, int value ATTRIBUTE_UNUSED) +ATTRIBUTE_UNUSED static bfd_vma +replace_disp25w (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) { insn = insn & ~0x7fcffcf; insn |= ((value >> 0) & 0x01ff) << 18; @@ -191,13 +203,13 @@ replace_disp25w (unsigned insn, int value ATTRIBUTE_UNUSED) return insn; } -#endif /* REPLACE_disp25w */ +#endif /* REPLACE_disp25w. */ /* mask = 00000000000000000000000111111111. */ #ifndef REPLACE_disp9 #define REPLACE_disp9 -ATTRIBUTE_UNUSED static unsigned -replace_disp9 (unsigned insn, int value ATTRIBUTE_UNUSED) +ATTRIBUTE_UNUSED static bfd_vma +replace_disp9 (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) { insn = insn & ~0x1ff; insn |= ((value >> 0) & 0x01ff) << 0; @@ -205,13 +217,13 @@ replace_disp9 (unsigned insn, int value ATTRIBUTE_UNUSED) return insn; } -#endif /* REPLACE_disp9 */ +#endif /* REPLACE_disp9. */ /* mask = 00000000111111112000000000000000. */ #ifndef REPLACE_disp9ls #define REPLACE_disp9ls -ATTRIBUTE_UNUSED static unsigned -replace_disp9ls (unsigned insn, int value ATTRIBUTE_UNUSED) +ATTRIBUTE_UNUSED static bfd_vma +replace_disp9ls (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) { insn = insn & ~0xff8000; insn |= ((value >> 0) & 0x00ff) << 16; @@ -225,8 +237,8 @@ replace_disp9ls (unsigned insn, int value ATTRIBUTE_UNUSED) /* mask = 0000000111111111. */ #ifndef REPLACE_disp9s #define REPLACE_disp9s -ATTRIBUTE_UNUSED static unsigned -replace_disp9s (unsigned insn, int value ATTRIBUTE_UNUSED) +ATTRIBUTE_UNUSED static bfd_vma +replace_disp9s (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) { insn = insn & ~0x1ff; insn |= ((value >> 0) & 0x01ff) << 0; @@ -234,13 +246,13 @@ replace_disp9s (unsigned insn, int value ATTRIBUTE_UNUSED) return insn; } -#endif /* REPLACE_disp9s */ +#endif /* REPLACE_disp9s. */ /* mask = 0000011111111111. */ #ifndef REPLACE_disp13s #define REPLACE_disp13s -ATTRIBUTE_UNUSED static unsigned -replace_disp13s (unsigned insn, int value ATTRIBUTE_UNUSED) +ATTRIBUTE_UNUSED static bfd_vma +replace_disp13s (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) { insn = insn & ~0x7ff; insn |= ((value >> 0) & 0x07ff) << 0; @@ -248,13 +260,13 @@ replace_disp13s (unsigned insn, int value ATTRIBUTE_UNUSED) return insn; } -#endif /* REPLACE_disp13s */ +#endif /* REPLACE_disp13s. */ /* mask = 0000022222200111. */ #ifndef REPLACE_disp9s1 #define REPLACE_disp9s1 -ATTRIBUTE_UNUSED static unsigned -replace_disp9s1 (unsigned insn, int value ATTRIBUTE_UNUSED) +ATTRIBUTE_UNUSED static bfd_vma +replace_disp9s1 (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) { insn = insn & ~0x7e7; insn |= ((value >> 0) & 0x0007) << 0; @@ -263,13 +275,13 @@ replace_disp9s1 (unsigned insn, int value ATTRIBUTE_UNUSED) return insn; } -#endif /* REPLACE_disp9s1 */ +#endif /* REPLACE_disp9s1. */ /* mask = 00000000000000000000111111222222. */ #ifndef REPLACE_disp12s #define REPLACE_disp12s -ATTRIBUTE_UNUSED static unsigned -replace_disp12s (unsigned insn, int value ATTRIBUTE_UNUSED) +ATTRIBUTE_UNUSED static bfd_vma +replace_disp12s (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) { insn = insn & ~0xfff; insn |= ((value >> 0) & 0x003f) << 6; @@ -277,13 +289,13 @@ replace_disp12s (unsigned insn, int value ATTRIBUTE_UNUSED) return insn; } -#endif /* REPLACE_disp12s */ +#endif /* REPLACE_disp12s. */ /* mask = 0000001111111111. */ #ifndef REPLACE_jli #define REPLACE_jli -ATTRIBUTE_UNUSED static unsigned -replace_jli (unsigned insn, int value) +ATTRIBUTE_UNUSED static bfd_vma +replace_jli (bfd_vma insn, bfd_vma value) { insn = insn & ~0x3ff; insn |= ((value >> 0) & 0x03ff) << 0; @@ -291,4 +303,76 @@ replace_jli (unsigned insn, int value) return insn; } -#endif /* REPLACE_jli */ +#endif /* REPLACE_jli. */ + +#ifndef REPLACE_disp8ls +#define REPLACE_disp8ls +/* mask = 0000 0000 1111 1110 2000 0000 0000 0000. */ +ATTRIBUTE_UNUSED static bfd_vma +replace_disp8ls (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) +{ + insn = insn & ~0xfe8000; + insn |= ((value >> 0) & 0x007f) << 17; + insn |= ((value >> 7) & 0x0001) << 15; + + return insn; +} +#endif /* REPLACE_disp8ls. */ + +#ifndef REPLACE_disp9s +#define REPLACE_disp9s +/* mask = 0000000111111111 + insn = 1111001sssssssss. */ +static bfd_vma +replace_disp9s (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) +{ + insn = insn & ~0x1ff; + insn |= ((value >> 0) & 0x01ff) << 0; + + return insn; +} +#endif /* REPLACE_disp9s. */ + +#ifndef REPLACE_disp6s +#define REPLACE_disp6s +/* mask = 0000000000111111 + insn = 1111011000ssssss. */ +ATTRIBUTE_UNUSED static bfd_vma +replace_disp6s (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) +{ + insn = insn & ~0x3f; + insn |= ((value >> 0) & 0x003f) << 0; + + return insn; +} + +#endif /* REPLACE_disp6s. */ + +#ifndef REPLACE_disp7s +#define REPLACE_disp7s +/* mask = 0000000001111111 + insn = 11101bbb1sssssss. */ +ATTRIBUTE_UNUSED static bfd_vma +replace_disp7s (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) +{ + insn = insn & ~0x7f; + insn |= ((value >> 0) & 0x007f) << 0; + + return insn; +} +#endif /* REPLACE_disp7s. */ + +#ifndef REPLACE_disp12s +#define REPLACE_disp12s +/* mask = 00000000000000000000111111222222 + insn = 00100RRR101010000RRRssssssSSSSSS. */ +ATTRIBUTE_UNUSED static bfd_vma +replace_disp12s (bfd_vma insn, bfd_vma value ATTRIBUTE_UNUSED) +{ + insn = insn & ~0xfff; + insn |= ((value >> 0) & 0x003f) << 6; + insn |= ((value >> 6) & 0x003f) << 0; + + return insn; +} +#endif /* REPLACE_disp12s. */ diff --git a/include/opcode/arc.h b/include/opcode/arc.h index b83150782b75..7fe98a63b310 100644 --- a/include/opcode/arc.h +++ b/include/opcode/arc.h @@ -199,13 +199,19 @@ extern int arc_opcode_len (const struct arc_opcode *opcode); #define ARC_OPCODE_ARC700 0x0002 /* ARC 700 specific insns. */ #define ARC_OPCODE_ARCv2EM 0x0004 /* ARCv2 EM specific insns. */ #define ARC_OPCODE_ARCv2HS 0x0008 /* ARCv2 HS specific insns. */ +#define ARC_OPCODE_ARC64 0x0010 /* ARC64 specific insns. */ +#define ARC_OPCODE_ARC32 0x0020 /* ARC32 specific insns. */ /* CPU combi. */ #define ARC_OPCODE_ARCALL (ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 \ - | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS) + | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS \ + | ARC_OPCODE_ARC64 | ARC_OPCODE_ARC32) #define ARC_OPCODE_ARCFPX (ARC_OPCODE_ARC700 | ARC_OPCODE_ARCv2EM) #define ARC_OPCODE_ARCV1 (ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700) #define ARC_OPCODE_ARCV2 (ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS) +#define ARC_OPCODE_ARCVx \ + (ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS | ARC_OPCODE_ARC64 \ + | ARC_OPCODE_ARC32) #define ARC_OPCODE_ARCMPY6E (ARC_OPCODE_ARC700 | ARC_OPCODE_ARCV2) /* The operands table is an array of struct arc_operand. */ @@ -325,6 +331,9 @@ extern const unsigned arc_NToperand; /* Mark the colon position. */ #define ARC_OPERAND_COLON 0x4000 +/* Mark a floating point register. */ +#define ARC_OPERAND_FP 0x8000 + /* Mask for selecting the type for typecheck purposes. */ #define ARC_OPERAND_TYPECHECK_MASK \ (ARC_OPERAND_IR \ @@ -369,6 +378,16 @@ struct arc_flag_class /* List of valid flags (codes). */ unsigned flags[256]; + + /* Some special cases needs to use insert/extract functions for + flags as well. The function prototypes are identically like the + one used for insertion/extraction of an operand. The reason + beeing the ability of reusing these functions. */ + unsigned long long (*insert) (unsigned long long instruction, + long long int op, + const char **errmsg); + long long int (*extract) (unsigned long long instruction, + bool *invalid); }; extern const struct arc_flag_class arc_flag_classes[]; @@ -441,6 +460,8 @@ struct arc_pseudo_insn extern const struct arc_pseudo_insn arc_pseudo_insns[]; extern const unsigned arc_num_pseudo_insn; +extern const struct arc_pseudo_insn arc64_pseudo_insns[]; +extern const unsigned arc64_num_pseudo_insn; /* Structure for AUXILIARY registers. */ struct arc_aux_reg @@ -478,8 +499,10 @@ extern const unsigned arc_num_relax_opcodes; #define FIELDC(word) ((word & 0x3F) << 6) #define FIELDF (0x01 << 15) #define FIELDQ (0x1F) +#define HARD_FIELDF (0x00) -#define INSN3OP(MOP,SOP) (((MOP & 0x1F) << 27) | ((SOP & 0x3F) << 16)) +#define INSN3OP(MOP,SOP) \ + (((MOP & 0x1F) << 27) | ((SOP & 0x3F) << 16) | HARD_FIELDF) #define INSN2OPX(MOP,SOP1,SOP2) (INSN3OP (MOP,SOP1) | (SOP2 & 0x3F)) #define INSN2OP(MOP,SOP) (INSN2OPX (MOP,0x2F,SOP)) @@ -667,6 +690,116 @@ typedef enum #define ARC_NUM_ADDRTYPES 16 +/*ARC64 floating point enums. */ +enum FP_SIZE { + P_HALF = 0, + P_SINGLE = 1, + P_DOUBLE = 2 +}; + +enum TPOF { + TOPF_FMADD = 0, + TOPF_FMSUB = 1, + TOPF_FNMADD = 2, + TOPF_FNMSUB = 3, + TOPF_VFMADD = 4, + TOPF_VFMSUB = 5, + TOPF_VFNMADD = 6, + TOPF_VFNMSUB = 7, + + TOPF_VFMADDS = 0xC, + TOPF_VFMSUBS = 0xD, + TOPF_VFNMADDS = 0xE, + TOPF_VFNMSUBS = 0xF +}; + +enum DPOF { + DOPF_FADD = 0, + DOPF_FSUB = 1, + DOPF_FMUL = 2, + DOPF_FDIV = 3, + DOPF_FCMP = 4, + DOPF_FCMPF = 5, + DOPF_FMIN = 6, + DOPF_FMAX = 7, + DOPF_FSGNJ = 8, + DOPF_FSGNJN = 10, + DOPF_FSGNJX = 11, + + DOPF_VFADD = 0x10, + DOPF_VFSUB = 0x11, + DOPF_VFMUL = 0x12, + DOPF_VFDIV = 0x13, + DOPF_VFADDS = 0x14, + DOPF_VFSUBS = 0x15, + DOPF_VFMULS = 0x16, + DOPF_VFDIVS = 0x17, + + DOPF_VFUNPKL = 0x18, + DOPF_VFUNPKM = 0x19, + DOPF_VFPACKL = 0x1a, + DOPF_VFPACKM = 0x1b, + DOPF_VFBFLYL = 0x1c, + DOPF_VFBFLYM = 0x1d, + DOPF_VFADDSUB = 0x1e, + DOPF_VFSUBADD = 0x1f + +}; + +enum SOPF { + SOPF_FSQRT = 0, + SOPF_VFSQRT = 1, + SOPF_VFEXCH = 2 +}; + +enum COPF { + COPF_FMOV = 0, + COPF_VFMOV = 1, +}; + +enum CONVOPS { + FUINT2S = 0, + FS2UINT = 0, + FINT2S = 0, + FS2INT = 0, + FSRND = 0, + F2UINT_RZ = 0, + FSINT_RZ = 0, + FSRND_RZ = 0, + FMVI2S = 0, + FMVS2I = 0, + FS2H = 0, + FH2S = 0, + FS2H_RZ = 0, + + FUINT2D = 1, + FS2UL = 1, + FINT2D = 1, + FS2L = 1, + FS2D = 1, + FS2UL_RZ = 1, + FS2L_RZ = 1, + + FUL2S = 2, + FD2UINT = 2, + FL2S = 2, + FD2INT = 2, + FD2S = 2, + FD2UINT_RZ = 2, + FD2INT_RZ = 2, + + FUL2D = 3, + FD2UL = 3, + FL2D = 3, + FD2L = 3, + FDRND = 3, + FD2UL_RZ = 3, + FD2L_RZ = 3, + FDRND_RZ = 3, + FMVL2D = 3, + FMVD2L = 3, +}; + #ifdef __cplusplus } #endif diff --git a/ld/Makefile.am b/ld/Makefile.am index b55a873d9278..db9c815c548a 100644 --- a/ld/Makefile.am +++ b/ld/Makefile.am @@ -391,6 +391,10 @@ ALL_64_EMULATION_SOURCES = \ eaarch64linux32.c \ eaarch64linux32b.c \ eaarch64linuxb.c \ + earc64elf32.c \ + earc64elf64.c \ + earc64linux32.c \ + earc64linux64.c \ eelf32_x86_64.c \ eelf32b4300.c \ eelf32bmip.c \ @@ -886,6 +890,10 @@ $(ALL_EMULATION_SOURCES) $(ALL_64_EMULATION_SOURCES): $(GEN_DEPENDS) @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eaarch64linux32.Pc@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eaarch64linux32b.Pc@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eaarch64linuxb.Pc@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earc64elf32.Pc@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earc64elf64.Pc@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earc64linux32.Pc@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earc64linux64.Pc@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32_x86_64.Pc@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32b4300.Pc@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32bmip.Pc@am__quote@ diff --git a/ld/Makefile.in b/ld/Makefile.in index 61e93eeaf1eb..fc8645cafbcd 100644 --- a/ld/Makefile.in +++ b/ld/Makefile.in @@ -881,6 +881,10 @@ ALL_64_EMULATION_SOURCES = \ eaarch64linux32.c \ eaarch64linux32b.c \ eaarch64linuxb.c \ + earc64elf32.c \ + earc64elf64.c \ + earc64linux32.c \ + earc64linux64.c \ eelf32_x86_64.c \ eelf32b4300.c \ eelf32bmip.c \ @@ -1262,6 +1266,10 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eaixrs6.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ealpha.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ealphavms.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earc64elf32.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earc64elf64.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earc64linux32.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earc64linux64.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earcelf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earclinux.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earclinux_nps.Po@am__quote@ @@ -2553,6 +2561,10 @@ $(ALL_EMULATION_SOURCES) $(ALL_64_EMULATION_SOURCES): $(GEN_DEPENDS) @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eaarch64linux32.Pc@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eaarch64linux32b.Pc@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eaarch64linuxb.Pc@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earc64elf32.Pc@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earc64elf64.Pc@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earc64linux32.Pc@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earc64linux64.Pc@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32_x86_64.Pc@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32b4300.Pc@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32bmip.Pc@am__quote@ diff --git a/ld/configure.tgt b/ld/configure.tgt index c7acf3f11ff1..6e7bd090b103 100644 --- a/ld/configure.tgt +++ b/ld/configure.tgt @@ -107,10 +107,27 @@ alpha*-*-*vms*) targ_emul=alphavms ;; am33_2.0-*-linux*) targ_emul=elf32am33lin # mn10300 variant ;; -arc*-*-elf*) targ_emul=arcelf +arc-*-elf* | arc[be]*-*-elf*) targ_emul=arcelf targ_extra_emuls="arclinux arclinux_nps arcv2elf arcv2elfx" ;; -arc*-*-linux*) case "${with_cpu}" in +arc64-*-elf*) targ_emul=arc64elf64 + targ_extra_emuls="arc64elf32 arc64linux64" + targ_extra_libpath=$targ_extra_emuls + ;; +arc32-*-elf*) targ_emul=arc64elf32 + targ_extra_emuls="arc64linux32 arc64elf64 arc64linux64" + targ_extra_libpath=$targ_extra_emuls + ;; +arc64-*-linux*) targ_emul=arc64linux64 + targ_extra_emuls="arc64elf64 arc64elf32 arc64linux32" + targ_extra_libpath=$targ_extra_emuls + ;; +arc32-*-linux*) targ_emul=arc64linux32 + targ_extra_emuls="arc64elf32 arc64elf64 arc64linux64" + targ_extra_libpath=$targ_extra_emuls + ;; +arc-*-linux* | arc[eb]*-linux*) + case "${with_cpu}" in nps400) targ_emul=arclinux_nps targ_extra_emuls=arclinux ;; diff --git a/ld/emulparams/arc64elf32.sh b/ld/emulparams/arc64elf32.sh new file mode 100644 index 000000000000..0f8389a0a6ff --- /dev/null +++ b/ld/emulparams/arc64elf32.sh @@ -0,0 +1,12 @@ +SCRIPT_NAME=elf +ELFSIZE=32 +SCRIPT_NAME=elfarc +TEMPLATE_NAME=elf +OUTPUT_FORMAT="elf32-littlearc64" + +TEXT_START_ADDR=0x00 + +MAXPAGESIZE="CONSTANT (MAXPAGESIZE)" +ARCH="arc64:32" +ENTRY=__start +EMBEDDED=yes diff --git a/ld/emulparams/arc64elf64.sh b/ld/emulparams/arc64elf64.sh new file mode 100644 index 000000000000..d4291345206f --- /dev/null +++ b/ld/emulparams/arc64elf64.sh @@ -0,0 +1,12 @@ +SCRIPT_NAME=elf +ELFSIZE=64 +SCRIPT_NAME=elfarc +TEMPLATE_NAME=elf +OUTPUT_FORMAT="elf64-littlearc64" + +TEXT_START_ADDR=0x00 + +MAXPAGESIZE="CONSTANT (MAXPAGESIZE)" +ARCH="arc64:64" +ENTRY=__start +EMBEDDED=yes diff --git a/ld/emulparams/arc64linux32.sh b/ld/emulparams/arc64linux32.sh new file mode 100644 index 000000000000..1ad8f3de41e6 --- /dev/null +++ b/ld/emulparams/arc64linux32.sh @@ -0,0 +1,22 @@ +ARCH="arc64:32" + +SCRIPT_NAME=elf +ELFSIZE=32 +OUTPUT_FORMAT="elf32-littlearc64" + +TEMPLATE_NAME=elf + +GENERATE_SHLIB_SCRIPT=yes +GENERATE_PIE_SCRIPT=yes + +MAXPAGESIZE="CONSTANT (MAXPAGESIZE)" +COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)" + +TEXT_START_ADDR=0x10000 + +ENTRY=__start + +# To support RELRO security feature. +NO_SMALL_DATA=yes +SEPARATE_GOTPLT="SIZEOF (.got.plt) >= 12 ? 12 : 0" +GENERATE_COMBRELOC_SCRIPT=yes diff --git a/ld/emulparams/arc64linux64.sh b/ld/emulparams/arc64linux64.sh new file mode 100644 index 000000000000..89ff73dc4f2f --- /dev/null +++ b/ld/emulparams/arc64linux64.sh @@ -0,0 +1,22 @@ +ARCH="arc64:64" + +SCRIPT_NAME=elf +ELFSIZE=64 +OUTPUT_FORMAT="elf64-littlearc64" + +TEMPLATE_NAME=elf + +GENERATE_SHLIB_SCRIPT=yes +GENERATE_PIE_SCRIPT=yes + +MAXPAGESIZE="CONSTANT (MAXPAGESIZE)" +COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)" + +TEXT_START_ADDR=0x10000 + +ENTRY=__start + +# To support RELRO security feature. +NO_SMALL_DATA=yes +SEPARATE_GOTPLT=8 #FIXME! what is the true value here? +GENERATE_COMBRELOC_SCRIPT=yes diff --git a/ld/scripttempl/elfarc.sc b/ld/scripttempl/elfarc.sc index 1d3c043a4d79..eba68ace5dbc 100644 --- a/ld/scripttempl/elfarc.sc +++ b/ld/scripttempl/elfarc.sc @@ -393,20 +393,14 @@ test -n "${RELOCATING}" && cat <: -^\s+[0-9a-f]+:\s+2730\s7f80\s[0-9a-f]+\s[0-9a-f]+\s+ld\s+r\d+,\[pcl,.* diff --git a/ld/testsuite/ld-arc/got-weak.s b/ld/testsuite/ld-arc/got-weak.s deleted file mode 100644 index 8ea18be37802..000000000000 --- a/ld/testsuite/ld-arc/got-weak.s +++ /dev/null @@ -1,7 +0,0 @@ - .cpu archs - - .weak symb - .global __start - .text -__start: - ld r0,[pcl,@symb@gotpc] diff --git a/ld/testsuite/ld-arc/nps-1a.d b/ld/testsuite/ld-arc/nps-1a.d index 4eae02472a37..687191dae1db 100644 --- a/ld/testsuite/ld-arc/nps-1a.d +++ b/ld/testsuite/ld-arc/nps-1a.d @@ -1,6 +1,6 @@ #source: nps-1.s #as: -mcpu=arc700 -mnps400 -#ld: -defsym=foo=0x57f03000 +#ld: -defsym=foo=0x57f03000 -T sda-relocs.ld #objdump: -d .*: +file format .*arc.* diff --git a/ld/testsuite/ld-arc/nps-1b.d b/ld/testsuite/ld-arc/nps-1b.d index a4848b8b7d84..4845d6b100a2 100644 --- a/ld/testsuite/ld-arc/nps-1b.d +++ b/ld/testsuite/ld-arc/nps-1b.d @@ -1,4 +1,4 @@ #source: nps-1.s #as: -mcpu=arc700 -mnps400 -#ld: -defsym=foo=0x56f03000 +#ld: -defsym=foo=0x56f03000 -T sda-relocs.ld #error_output: nps-1b.err diff --git a/ld/testsuite/ld-arc/relax-local-pic.d b/ld/testsuite/ld-arc/relax-local-pic.d index 181a963223ae..1cb2cbf057ff 100644 --- a/ld/testsuite/ld-arc/relax-local-pic.d +++ b/ld/testsuite/ld-arc/relax-local-pic.d @@ -3,12 +3,12 @@ #ld: -q -A elf32-arclittle -relax #objdump: -dr -[^:]+: file format elf32-.*arc +[^:]+: file format elf.*arc Disassembly of section \.text: [0-9a-f]+ <__start>: \s+[0-9a-f]+: 2700 7f84 0000 [0-9a-f]+\s+add\s+r4,pcl,.* - [0-9a-f]+: R_ARC_PC32 a_in_other_thread +\s+[0-9a-f]+: R_ARC_PC32 a_in_other_thread \s+[0-9a-f]+: 1c00 [0-9a-f\s]+ st\s+.* diff --git a/ld/testsuite/ld-arc64/arcv3_64-reloc-near-exe.dd b/ld/testsuite/ld-arc64/arcv3_64-reloc-near-exe.dd new file mode 100644 index 000000000000..2c77c4127193 --- /dev/null +++ b/ld/testsuite/ld-arc64/arcv3_64-reloc-near-exe.dd @@ -0,0 +1,29 @@ +# an exemplary output +# +# test_static.exe: file format elf64-littlearc64 +# +# +# Disassembly of section .text: +# +# 0000000000001000 <__start>: +# 1000: 78e0 nop_s +# 1002: 2731 ff0e 0000 7000 ldl r14,[pcl,28672@s32] ;8000 <.got> +# 1006: R_ARC_GOTPC32 foo +# 100a: 2731 ff0f 0000 7000 ldl r15,[pcl,28672@s32] ;8008 <.got+0x8> +# 100e: R_ARC_GOTPC32 bar +# 1012: 78e0 nop_s +# 1014: 0000 0000 b 0 ;1014 <__start+0x14> + +[^:]+:\s+file format elf.*-.*arc64 + + +Disassembly of section .text: + +^[0-9a-f]+.*: +\s*[0-9a-f]+:\s+[0-9a-f\s]+nop_s +\s*[0-9a-f]+:\s+[0-9a-f\s]+ldl\s+r14,.* +\s*[0-9a-f]+:\s+R_ARC_GOTPC32\s+foo +\s*[0-9a-f]+:\s+[0-9a-f\s]+ldl\s+r15,.* +\s*[0-9a-f]+:\s+R_ARC_GOTPC32\s+bar +\s*[0-9a-f]+:\s+[0-9a-f\s]+nop_s +\s*[0-9a-f]+:.* diff --git a/ld/testsuite/ld-arc64/arcv3_64-reloc-near-so.dd b/ld/testsuite/ld-arc64/arcv3_64-reloc-near-so.dd new file mode 100644 index 000000000000..2b3cef9418ed --- /dev/null +++ b/ld/testsuite/ld-arc64/arcv3_64-reloc-near-so.dd @@ -0,0 +1,21 @@ +# an exemplary output +# +# test_dynamic.so: file format elf64-littlearc64 +# +# +# Disassembly of section .got: +# +# 0000000000002440 <.got>: +# ... +# 2440: R_ARC_GLOB_DAT foo +# 2448: R_ARC_GLOB_DAT bar + +[^:]+:\s+file format elf.*-.*arc64 + + +Disassembly of section .got: + +^[0-9a-f]+.*: +\s*\.\.\. +\s*[0-9a-f]+:\s+R_ARC_GLOB_DAT\s+foo +\s*[0-9a-f]+:\s+R_ARC_GLOB_DAT\s+bar diff --git a/ld/testsuite/ld-arc64/arcv3_64-reloc-near.s b/ld/testsuite/ld-arc64/arcv3_64-reloc-near.s new file mode 100644 index 000000000000..1423f9244145 --- /dev/null +++ b/ld/testsuite/ld-arc64/arcv3_64-reloc-near.s @@ -0,0 +1,11 @@ + .comm foo,4 + .comm bar,4 + + .text + .align 8 + + .global __start +__start: + nop_s # messing with the alignment a bit + ldl r14, [pcl, @foo@gotpc] + ldl r15, [pcl, @bar@gotpc] diff --git a/ld/testsuite/ld-arc64/arcv3_64.exp b/ld/testsuite/ld-arc64/arcv3_64.exp new file mode 100644 index 000000000000..d39483cd6ddf --- /dev/null +++ b/ld/testsuite/ld-arc64/arcv3_64.exp @@ -0,0 +1,48 @@ +# Copyright (C) 2020 Free Software Foundation, Inc. +# +# This file is part of the GNU Binutils. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, +# MA 02110-1301, USA. +# + +if { ![istarget arc64-*-*] } { + return +} + +set arcv3_64_tests { + { "Near relocations (executable)" + "-q" "" "" {arcv3_64-reloc-near.s} + { { objdump { -Dr -j .text } arcv3_64-reloc-near-exe.dd } } + "arcv3_64-reloc.exe" } + { "Near relocations (shared object)" + "-shared -q -m arc64linux64" "" "" {arcv3_64-reloc-near.s} + { { objdump -DRj.got arcv3_64-reloc-near-so.dd } } + "arcv3_64-reloc-near.so" } + { "Solve fixed PLT34 reloc" + "-q -T linkscript.ld" "" "" {plt34-reloc.s} + { { objdump -drj.text plt34-reloc.dd } } + "plt34-reloc.x" } + { "Generate PLT entry using PLT34 reloc" + "-shared -m arc64linux64" "" "" {plt34-got.s} + { { objdump -dj.text plt34-got.dd } } + "plt34-got.so" } + { "Solve PCLO32_ME_2 reloc" + "-q -T linkscript.ld" "" "" {bl34.s} + { { objdump -drj.text bl34.dd } } + "bl34.x" } +} + +run_ld_link_tests $arcv3_64_tests diff --git a/ld/testsuite/ld-arc64/bl34.dd b/ld/testsuite/ld-arc64/bl34.dd new file mode 100644 index 000000000000..4f983ecae335 --- /dev/null +++ b/ld/testsuite/ld-arc64/bl34.dd @@ -0,0 +1,12 @@ +[^:]+:\s+file format elf64-.*arc64 + + +Disassembly of section .text: + +^[0-9a-f]+ <__start>: +^\s*[0-9a-f]+:\s+78e0\s+nop_s$ +^\s*[0-9a-f]+:\s+7be0\s4000\s0000\s+bl_s\s\d+@s32\s;100000000\s$ +^\s*[0-9a-f]+:\s+R_ARC_PCLO32_ME_2\s+\.text2$ +^\s*[0-9a-f]+:\s+7be0\s3fff\sfffe\s+bl_s\s\d+@s32\s;100000000\s$ +^\s*[0-9a-f]+:\s+R_ARC_PCLO32_ME_2\s+\.text2$ +^\s*[0-9a-f]+:\s+78e0\s+nop_s$ diff --git a/ld/testsuite/ld-arc64/bl34.s b/ld/testsuite/ld-arc64/bl34.s new file mode 100644 index 000000000000..dfda09133ca9 --- /dev/null +++ b/ld/testsuite/ld-arc64/bl34.s @@ -0,0 +1,13 @@ + .text + .align 4 + .global __start +__start: + nop_s + bl_s @foo@s32 + bl_s @foo@s32 + +;;; Have a symbol beyond 4G boundary. + .section ".foo.text" + .align 4 +foo: + add r0,r0,r0 diff --git a/ld/testsuite/ld-arc64/linkscript.ld b/ld/testsuite/ld-arc64/linkscript.ld new file mode 100644 index 000000000000..bddc653e29bf --- /dev/null +++ b/ld/testsuite/ld-arc64/linkscript.ld @@ -0,0 +1,5 @@ +SECTIONS +{ + .text 0x00 : { *(.text) } + .text2 0x100000000 : { *(.foo.text) } +} diff --git a/ld/testsuite/ld-arc64/plt34-got.dd b/ld/testsuite/ld-arc64/plt34-got.dd new file mode 100644 index 000000000000..3f57f6a00ca0 --- /dev/null +++ b/ld/testsuite/ld-arc64/plt34-got.dd @@ -0,0 +1,9 @@ +[^:]+:\s+file format elf64-.*arc64 + + +Disassembly of section .text: + +^[0-9a-f]+ <__start>: +^\s*[0-9a-f]+:\s+78e0\s+nop_s$ +^\s*[0-9a-f]+:\s+[0-9a-f]+\s[0-9a-f]+\s+bl\s+[\-0-9]+\s+;[0-9a-f]+\s+<\.plt\+0x[0-9a-f]+>$ +^\s*[0-9a-f]+:\s+7be0\s[0-9a-f]+\s[0-9a-f]+\s+bl_s\s+[\-\d]+@s32\s+;[0-9a-f]+\s+<\.plt\+0x[0-9a-f]+>$ \ No newline at end of file diff --git a/ld/testsuite/ld-arc64/plt34-got.s b/ld/testsuite/ld-arc64/plt34-got.s new file mode 100644 index 000000000000..a74c3213dbb6 --- /dev/null +++ b/ld/testsuite/ld-arc64/plt34-got.s @@ -0,0 +1,9 @@ +;;; Check if 34bit reloc is correctly solved by the linker. + .text + .align 4 + .global __start +__start: + nop_s + bl @foo@plt + bl_s @foo@plt34 + diff --git a/ld/testsuite/ld-arc64/plt34-reloc.dd b/ld/testsuite/ld-arc64/plt34-reloc.dd new file mode 100644 index 000000000000..36427a5394f2 --- /dev/null +++ b/ld/testsuite/ld-arc64/plt34-reloc.dd @@ -0,0 +1,12 @@ +[^:]+:\s+file format elf64-.*arc64 + + +Disassembly of section .text: + +^[0-9a-f]+ <__start>: +^\s*[0-9a-f]+:\s+78e0\s+nop_s$ +^\s*[0-9a-f]+:\s+7be0\s4000\s0000\s+bl_s\s\d+@s32\s;100000000\s$ +^\s*[0-9a-f]+:\s+R_ARC_PLT34\s+foo$ +^\s*[0-9a-f]+:\s+7be0\s3fff\sfffe\s+bl_s\s\d+@s32\s;100000000\s$ +^\s*[0-9a-f]+:\s+R_ARC_PLT34\s+foo$ +^\s*[0-9a-f]+:\s+78e0\s+nop_s$ diff --git a/ld/testsuite/ld-arc64/plt34-reloc.s b/ld/testsuite/ld-arc64/plt34-reloc.s new file mode 100644 index 000000000000..2be4aaf51b6d --- /dev/null +++ b/ld/testsuite/ld-arc64/plt34-reloc.s @@ -0,0 +1,14 @@ +;;; Check if 34bit reloc is correctly solved by the linker. + .text + .align 4 + .global __start +__start: + nop_s + bl_s @foo@plt34 + bl_s @foo@plt34 + +;;; Have a symbol beyond 4G boundary. + .section ".foo.text" + .align 4 +foo: + add r0,r0,r0 diff --git a/opcodes/Makefile.am b/opcodes/Makefile.am index afd19fa7785a..1f3661f9d95e 100644 --- a/opcodes/Makefile.am +++ b/opcodes/Makefile.am @@ -121,6 +121,7 @@ TARGET32_LIBOPCODES_CFILES = \ arc-dis.c \ arc-ext.c \ arc-opc.c \ + arc64-opc.c \ arm-dis.c \ avr-dis.c \ bfin-dis.c \ diff --git a/opcodes/Makefile.in b/opcodes/Makefile.in index 3ab8bfb0548b..a4141aea49fe 100644 --- a/opcodes/Makefile.in +++ b/opcodes/Makefile.in @@ -513,6 +513,7 @@ TARGET32_LIBOPCODES_CFILES = \ arc-dis.c \ arc-ext.c \ arc-opc.c \ + arc64-opc.c \ arm-dis.c \ avr-dis.c \ bfin-dis.c \ @@ -908,6 +909,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arc-dis.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arc-ext.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arc-opc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arc64-opc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arm-dis.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/avr-dis.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bfin-dis.Plo@am__quote@ diff --git a/opcodes/arc-dis.c b/opcodes/arc-dis.c index 771f786d18e5..739f3a938cf8 100644 --- a/opcodes/arc-dis.c +++ b/opcodes/arc-dis.c @@ -60,7 +60,7 @@ struct arc_disassemble_info /* Instruction length w/o limm field. */ unsigned insn_len; - /* TRUE if we have limm. */ + /* true if we have limm. */ bool limm_p; /* LIMM value, if exists. */ @@ -85,7 +85,7 @@ static const char * const regnames[64] = "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", - "r24", "r25", "gp", "fp", "sp", "ilink", "r30", "blink", + "r24", "r25", "r26", "fp", "sp", "ilink", "r30", "blink", "r32", "r33", "r34", "r35", "r36", "r37", "r38", "r39", "r40", "r41", "r42", "r43", "r44", "r45", "r46", "r47", @@ -93,6 +93,29 @@ static const char * const regnames[64] = "r56", "r57", "r58", "r59", "lp_count", "reserved", "LIMM", "pcl" }; +typedef struct regmod +{ + const unsigned int index; + const unsigned int isa; + const char *rname; +} regmod_t; + +static regmod_t regmods[] = +{ + { 26, ARC_OPCODE_ARCV1 | ARC_OPCODE_ARCV2, "gp" }, + { 29, ARC_OPCODE_ARCV1, "ilink1" }, + { 30, ARC_OPCODE_ARCV1, "ilink2" }, + { 0, ARC_OPCODE_NONE, 0 } +}; + +static const char * const fpnames[32] = +{ + "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", + "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", + "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23", + "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31" +}; + static const char * const addrtypenames[ARC_NUM_ADDRTYPES] = { "bd", "jid", "lbd", "mbd", "sd", "sm", "xa", "xd", @@ -126,7 +149,6 @@ static unsigned enforced_isa_mask = ARC_OPCODE_NONE; static bool print_hex = false; /* Macros section. */ - #ifdef DEBUG # define pr_debug(fmt, args...) fprintf (stderr, fmt, ##args) #else @@ -140,8 +162,29 @@ static bool print_hex = false; #define BITS(word,s,e) (((word) >> (s)) & ((1ull << ((e) - (s)) << 1) - 1)) #define OPCODE_32BIT_INSN(word) (BITS ((word), 27, 31)) +#define REG_PCL 63 +#define REG_LIMM 62 +#define REG_LIMM_S 30 +#define REG_U32 62 +#define REG_S32 60 + /* Functions implementation. */ +static const char * +getregname (unsigned int index, unsigned int isa_mask) +{ + regmod_t *iregmods = regmods; + while (iregmods->rname) + { + if (index == iregmods->index + && (isa_mask & iregmods->isa)) + return iregmods->rname; + iregmods ++; + } + + return regnames[index % 64]; +} + /* Initialize private data. */ static bool init_arc_disasm_info (struct disassemble_info *info) @@ -170,7 +213,7 @@ add_to_decodelist (insn_class_t insn_class, decodelist = t; } -/* Return TRUE if we need to skip the opcode from being +/* Return true if we need to skip the opcode from being disassembled. */ static bool @@ -277,7 +320,7 @@ find_format_from_table (struct disassemble_info *info, if (arc_opcode_len (opcode) != (int) insn_len) continue; - if ((insn & opcode->mask) != opcode->opcode) + if ((insn & opcode->mask) != (opcode->mask & opcode->opcode)) continue; *has_limm = false; @@ -285,7 +328,7 @@ find_format_from_table (struct disassemble_info *info, /* Possible candidate, check the operands. */ for (opidx = opcode->operands; *opidx; opidx++) { - int value, limmind; + int value, slimmind; const struct arc_operand *operand = &arc_operands[*opidx]; if (operand->flags & ARC_OPERAND_FAKE) @@ -296,19 +339,19 @@ find_format_from_table (struct disassemble_info *info, else value = (insn >> operand->shift) & ((1ull << operand->bits) - 1); - /* Check for LIMM indicator. If it is there, then make sure - we pick the right format. */ - limmind = (isa_mask & ARC_OPCODE_ARCV2) ? 0x1E : 0x3E; + /* Check for (short) LIMM indicator. If it is there, then + make sure we pick the right format. */ + slimmind = (isa_mask & ARC_OPCODE_ARCVx) ? REG_LIMM_S : REG_LIMM; if (operand->flags & ARC_OPERAND_IR && !(operand->flags & ARC_OPERAND_LIMM)) - { - if ((value == 0x3E && insn_len == 4) - || (value == limmind && insn_len == 2)) - { - invalid = true; - break; - } - } + if ((value == REG_LIMM && insn_len == 4) + || (value == slimmind && insn_len == 2) + || (isa_mask & ARC_OPCODE_ARC64 + && (value == REG_S32) && (insn_len == 4))) + { + invalid = true; + break; + } if (operand->flags & ARC_OPERAND_LIMM && !(operand->flags & ARC_OPERAND_DUPLICATE)) @@ -338,11 +381,15 @@ find_format_from_table (struct disassemble_info *info, for (flgopridx = cl_flags->flags; *flgopridx; ++flgopridx) { + bool tmp = false; const struct arc_flag_operand *flg_operand = &arc_flag_operands[*flgopridx]; - value = (insn >> flg_operand->shift) - & ((1 << flg_operand->bits) - 1); + if (cl_flags->extract) + value = (*cl_flags->extract)(insn, &tmp); + else + value = (insn >> flg_operand->shift) + & ((1 << flg_operand->bits) - 1); if (value == flg_operand->code) foundA = 1; if (value) @@ -395,15 +442,15 @@ find_format_from_table (struct disassemble_info *info, the found opcode requires a LIMM then the LIMM value will be loaded into a field of ITER. - This function returns TRUE in almost all cases, FALSE is reserved to + This function returns true in almost all cases, false is reserved to indicate an error (failing to find an opcode is not an error) a returned - result of FALSE would indicate that the disassembler can't continue. + result of false would indicate that the disassembler can't continue. - If no matching opcode is found then the returned result will be TRUE, the + If no matching opcode is found then the returned result will be true, the value placed into OPCODE_RESULT will be NULL, ITER will be undefined, and INSN_LEN will be unchanged. - If a matching opcode is found, then the returned result will be TRUE, the + If a matching opcode is found, then the returned result will be true, the opcode pointer is placed into OPCODE_RESULT, INSN_LEN will be increased by 4 if the instruction requires a LIMM, and the LIMM value will have been loaded into a field of ITER. Finally, ITER will have been initialised so @@ -420,11 +467,14 @@ find_format (bfd_vma memaddr, struct arc_operand_iterator * iter) { const struct arc_opcode *opcode = NULL; + const struct arc_opcode *opcodeList = NULL; bool needs_limm = false; const extInstruction_t *einsn, *i; unsigned limm = 0; struct arc_disassemble_info *arc_infop = info->private_data; + opcodeList = arc_opcodes; + /* First, try the extension instructions. */ if (*insn_len == 4) { @@ -450,7 +500,7 @@ find_format (bfd_vma memaddr, /* Then, try finding the first match in the opcode table. */ if (opcode == NULL) - opcode = find_format_from_table (info, arc_opcodes, insn, *insn_len, + opcode = find_format_from_table (info, opcodeList, insn, *insn_len, isa_mask, &needs_limm, true); if (opcode != NULL && needs_limm) @@ -539,8 +589,14 @@ print_flags (const struct arc_opcode *opcode, if (!flg_operand->favail) continue; - value = (insn[0] >> flg_operand->shift) - & ((1 << flg_operand->bits) - 1); + if (cl_flags->extract) + { + bool tmp = false; + value = (*cl_flags->extract)(insn[0], &tmp); + } + else + value = (insn[0] >> flg_operand->shift) + & ((1 << flg_operand->bits) - 1); if (value == flg_operand->code) { /* FIXME!: print correctly nt/t flag. */ @@ -641,34 +697,58 @@ arc_insn_length (bfd_byte msb, bfd_byte lsb, struct disassemble_info *info) { bfd_byte major_opcode = msb >> 3; - switch (info->mach) + switch (info->arch) { - case bfd_mach_arc_arc700: - /* The nps400 extension set requires this special casing of the - instruction length calculation. Right now this is not causing any - problems as none of the known extensions overlap in opcode space, - but, if they ever do then we might need to start carrying - information around in the elf about which extensions are in use. */ - if (major_opcode == 0xb) - { - bfd_byte minor_opcode = lsb & 0x1f; + case bfd_arch_arc: + switch (info->mach) + { + case bfd_mach_arc_arc700: + /* The nps400 extension set requires this special casing of + the instruction length calculation. Right now this is + not causing any problems as none of the known extensions + overlap in opcode space, but, if they ever do then we + might need to start carrying information around in the + elf about which extensions are in use. */ + if (major_opcode == 0xb) + { + bfd_byte minor_opcode = lsb & 0x1f; - if (minor_opcode < 4) - return 6; - else if (minor_opcode == 0x10 || minor_opcode == 0x11) - return 8; - } - if (major_opcode == 0xa) - { - return 8; - } - /* Fall through. */ - case bfd_mach_arc_arc600: - return (major_opcode > 0xb) ? 2 : 4; + if (minor_opcode < 4) + return 6; + else if (minor_opcode == 0x10 || minor_opcode == 0x11) + return 8; + } + if (major_opcode == 0xa) + { + return 8; + } + /* Fall through. */ + case bfd_mach_arc_arc600: + return (major_opcode > 0xb) ? 2 : 4; + break; + + case bfd_mach_arc_arcv2: + return (major_opcode > 0x7) ? 2 : 4; + break; + + default: + return 0; + } break; - case bfd_mach_arc_arcv2: - return (major_opcode > 0x7) ? 2 : 4; + case bfd_arch_arc64: + switch (info->mach) + { + case bfd_mach_arcv3_32: + case bfd_mach_arcv3_64: + if (major_opcode == 0x0b + || major_opcode == 0x1c) + return 4; + return (major_opcode > 0x7) ? 2 : 4; + + default: + return 0; + } break; default: @@ -718,8 +798,8 @@ extract_operand_value (const struct arc_operand *operand, return value; } -/* Find the next operand, and the operands value from ITER. Return TRUE if - there is another operand, otherwise return FALSE. If there is an +/* Find the next operand, and the operands value from ITER. Return true if + there is another operand, otherwise return false. If there is an operand returned then the operand is placed into OPERAND, and the value into VALUE. If there is no operand returned then OPERAND and VALUE are unchanged. */ @@ -803,14 +883,18 @@ parse_option (const char *option) } #define ARC_CPU_TYPE_A6xx(NAME,EXTRA) \ - { #NAME, ARC_OPCODE_ARC600, "ARC600" } + { #NAME, ARC_OPCODE_ARC600, "ARC600" }, #define ARC_CPU_TYPE_A7xx(NAME,EXTRA) \ - { #NAME, ARC_OPCODE_ARC700, "ARC700" } + { #NAME, ARC_OPCODE_ARC700, "ARC700" }, #define ARC_CPU_TYPE_AV2EM(NAME,EXTRA) \ - { #NAME, ARC_OPCODE_ARCv2EM, "ARC EM" } + { #NAME, ARC_OPCODE_ARCv2EM, "ARC EM" }, #define ARC_CPU_TYPE_AV2HS(NAME,EXTRA) \ - { #NAME, ARC_OPCODE_ARCv2HS, "ARC HS" } -#define ARC_CPU_TYPE_NONE \ + { #NAME, ARC_OPCODE_ARCv2HS, "ARC HS" }, +#define ARC_CPU_TYPE_A64x(NAME,EXTRA) \ + { #NAME, ARC_OPCODE_ARC64, "ARC64" }, +#define ARC_CPU_TYPE_A32x(NAME,EXTRA) \ + { #NAME, ARC_OPCODE_ARC64, "ARC32" }, +#define ARC_CPU_TYPE_NONE \ { 0, 0, 0 } /* A table of CPU names and opcode sets. */ @@ -945,7 +1029,8 @@ print_insn_arc (bfd_vma memaddr, bool open_braket; int size; const struct arc_operand *operand; - int value, vpcl; + int value; + bfd_vma vpcl; struct arc_operand_iterator iter; struct arc_disassemble_info *arc_infop; bool rpcl = false, rset = false; @@ -973,25 +1058,54 @@ print_insn_arc (bfd_vma memaddr, if (info->section && info->section->owner) header = elf_elfheader (info->section->owner); - switch (info->mach) + switch (info->arch) { - case bfd_mach_arc_arc700: - isa_mask = ARC_OPCODE_ARC700; + case bfd_arch_arc: + switch (info->mach) + { + case bfd_mach_arc_arc700: + isa_mask = ARC_OPCODE_ARC700; + break; + + case bfd_mach_arc_arc600: + isa_mask = ARC_OPCODE_ARC600; + break; + + case bfd_mach_arc_arcv2: + default: + isa_mask = ARC_OPCODE_ARCv2EM; + /* TODO: Perhaps remove definition of header since it is + only used at this location. */ + if (header != NULL + && (header->e_flags & EF_ARC_MACH_MSK) == EF_ARC_CPU_ARCV2HS) + isa_mask = ARC_OPCODE_ARCv2HS; + break; + } break; - case bfd_mach_arc_arc600: - isa_mask = ARC_OPCODE_ARC600; + case bfd_arch_arc64: + switch (info->mach) + { + case bfd_mach_arcv3_64: + isa_mask = ARC_OPCODE_ARC64; + break; + + case bfd_mach_arcv3_32: + isa_mask = ARC_OPCODE_ARC32; + break; + + default: + /* xgettext:c-format */ + opcodes_error_handler (_("unrecognised arc64 disassembler \ +variant")); + return -1; + } break; - case bfd_mach_arc_arcv2: default: - isa_mask = ARC_OPCODE_ARCv2EM; - /* TODO: Perhaps remove definition of header since it is only used at - this location. */ - if (header != NULL - && (header->e_flags & EF_ARC_MACH_MSK) == EF_ARC_CPU_ARCV2HS) - isa_mask = ARC_OPCODE_ARCv2HS; - break; + /* xgettext:c-format */ + opcodes_error_handler (_("unrecognised disassembler architecture")); + return -1; } } else @@ -1250,8 +1364,10 @@ print_insn_arc (bfd_vma memaddr, rpcl = true; vpcl = value; rset = true; - - info->target = (bfd_vma) (memaddr & ~3) + value; + if ((operand->flags & ARC_OPERAND_LIMM) + && (operand->flags & ARC_OPERAND_ALIGNED32)) + vpcl <<= 2; + info->target = (bfd_vma) (memaddr & ~3) + vpcl; } else if (!(operand->flags & ARC_OPERAND_IR)) { @@ -1264,10 +1380,15 @@ print_insn_arc (bfd_vma memaddr, { const char *rname; - assert (value >=0 && value < 64); + assert (value >= 0 && value < 64); rname = arcExtMap_coreRegName (value); if (!rname) - rname = regnames[value]; + { + if (operand->flags & ARC_OPERAND_FP) + rname = fpnames[value & 0x1f]; + else + rname = getregname (value, isa_mask); + } (*info->fprintf_func) (info->stream, "%s", rname); /* Check if we have a double register to print. */ @@ -1276,15 +1397,17 @@ print_insn_arc (bfd_vma memaddr, if ((value & 0x01) == 0) { rname = arcExtMap_coreRegName (value + 1); - if (!rname) - rname = regnames[value + 1]; + if (operand->flags & ARC_OPERAND_FP) + rname = fpnames[(value + 1) & 0x1f]; + else + rname = getregname (value + 1, isa_mask); } else rname = _("\nWarning: illegal use of double register " "pair.\n"); (*info->fprintf_func) (info->stream, "%s", rname); } - if (value == 63) + if (value == REG_PCL) rpcl = true; else rpcl = false; @@ -1297,7 +1420,10 @@ print_insn_arc (bfd_vma memaddr, (*info->fprintf_func) (info->stream, "%s", rname); else { - (*info->fprintf_func) (info->stream, "%#x", value); + if (operand->flags & ARC_OPERAND_SIGNED) + (*info->fprintf_func) (info->stream, "%d@s32", value); + else + (*info->fprintf_func) (info->stream, "%#x", value); if (info->insn_type == dis_branch || info->insn_type == dis_jsr) info->target = (bfd_vma) value; @@ -1341,7 +1467,8 @@ print_insn_arc (bfd_vma memaddr, break; default: (*info->fprintf_func) (info->stream, "r13-%s", - regnames[13 + value - 1]); + getregname (13 + value - 1, + isa_mask)); break; } rpcl = false; @@ -1363,7 +1490,7 @@ print_insn_arc (bfd_vma memaddr, = ARC_OPERAND_KIND_LIMM; /* It is not important to have exactly the LIMM indicator here. */ - arc_infop->operands[arc_infop->operands_count].value = 63; + arc_infop->operands[arc_infop->operands_count].value = REG_PCL; } else { diff --git a/opcodes/arc-ext-tbl.h b/opcodes/arc-ext-tbl.h deleted file mode 100644 index 32694bf13b36..000000000000 --- a/opcodes/arc-ext-tbl.h +++ /dev/null @@ -1,124 +0,0 @@ -/* ARC instruction defintions. - Copyright (C) 2016-2022 Free Software Foundation, Inc. - - Contributed by Claudiu Zissulescu (claziss@synopsys.com) - - This file is part of libopcodes. - - This library is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - It is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public - License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* Common combinations of FLAGS. */ -#define FLAGS_NONE { 0 } -#define FLAGS_F { C_F } -#define FLAGS_CC { C_CC } -#define FLAGS_CCF { C_CC, C_F } - -/* Common combination of arguments. */ -#define ARG_NONE { 0 } -#define ARG_32BIT_RARBRC { RA, RB, RC } -#define ARG_32BIT_ZARBRC { ZA, RB, RC } -#define ARG_32BIT_RBRBRC { RB, RBdup, RC } -#define ARG_32BIT_RARBU6 { RA, RB, UIMM6_20 } -#define ARG_32BIT_ZARBU6 { ZA, RB, UIMM6_20 } -#define ARG_32BIT_RBRBU6 { RB, RBdup, UIMM6_20 } -#define ARG_32BIT_RBRBS12 { RB, RBdup, SIMM12_20 } -#define ARG_32BIT_RALIMMRC { RA, LIMM, RC } -#define ARG_32BIT_RARBLIMM { RA, RB, LIMM } -#define ARG_32BIT_ZALIMMRC { ZA, LIMM, RC } -#define ARG_32BIT_ZARBLIMM { ZA, RB, LIMM } - -#define ARG_32BIT_RBRBLIMM { RB, RBdup, LIMM } -#define ARG_32BIT_RALIMMU6 { RA, LIMM, UIMM6_20 } -#define ARG_32BIT_ZALIMMU6 { ZA, LIMM, UIMM6_20 } - -#define ARG_32BIT_ZALIMMS12 { ZA, LIMM, SIMM12_20 } -#define ARG_32BIT_RALIMMLIMM { RA, LIMM, LIMMdup } -#define ARG_32BIT_ZALIMMLIMM { ZA, LIMM, LIMMdup } - -#define ARG_32BIT_RBRC { RB, RC } -#define ARG_32BIT_ZARC { ZA, RC } -#define ARG_32BIT_RBU6 { RB, UIMM6_20 } -#define ARG_32BIT_ZAU6 { ZA, UIMM6_20 } -#define ARG_32BIT_RBLIMM { RB, LIMM } -#define ARG_32BIT_ZALIMM { ZA, LIMM } - -/* Macro to generate 2 operand extension instruction. */ -#define EXTINSN2OPF(NAME, CPU, CLASS, SCLASS, MOP, SOP, FL) \ - { NAME, INSN2OP_BC (MOP,SOP), MINSN2OP_BC, CPU, CLASS, SCLASS, \ - ARG_32BIT_RBRC, FL }, \ - { NAME, INSN2OP_0C (MOP,SOP), MINSN2OP_0C, CPU, CLASS, SCLASS, \ - ARG_32BIT_ZARC, FL }, \ - { NAME, INSN2OP_BU (MOP,SOP), MINSN2OP_BU, CPU, CLASS, SCLASS, \ - ARG_32BIT_RBU6, FL }, \ - { NAME, INSN2OP_0U (MOP,SOP), MINSN2OP_0U, CPU, CLASS, SCLASS, \ - ARG_32BIT_ZAU6, FL }, \ - { NAME, INSN2OP_BL (MOP,SOP), MINSN2OP_BL, CPU, CLASS, SCLASS, \ - ARG_32BIT_RBLIMM, FL }, \ - { NAME, INSN2OP_0L (MOP,SOP), MINSN2OP_0L, CPU, CLASS, SCLASS, \ - ARG_32BIT_ZALIMM, FL }, - -#define EXTINSN2OP(NAME, CPU, CLASS, SCLASS, MOP, SOP) \ - EXTINSN2OPF(NAME, CPU, CLASS, SCLASS, MOP, SOP, FLAGS_F) - -/* Macro to generate 3 operand extesion instruction. */ -#define EXTINSN3OP(NAME, CPU, CLASS, SCLASS, MOP, SOP) \ - { NAME, INSN3OP_ABC (MOP,SOP), MINSN3OP_ABC, CPU, CLASS, SCLASS, \ - ARG_32BIT_RARBRC, FLAGS_F }, \ - { NAME, INSN3OP_0BC (MOP,SOP), MINSN3OP_0BC, CPU, CLASS, SCLASS, \ - ARG_32BIT_ZARBRC, FLAGS_F }, \ - { NAME, INSN3OP_CBBC (MOP,SOP), MINSN3OP_CBBC, CPU, CLASS, SCLASS, \ - ARG_32BIT_RBRBRC, FLAGS_CCF }, \ - { NAME, INSN3OP_ABU (MOP,SOP), MINSN3OP_ABU, CPU, CLASS, SCLASS, \ - ARG_32BIT_RARBU6, FLAGS_F }, \ - { NAME, INSN3OP_0BU (MOP,SOP), MINSN3OP_0BU, CPU, CLASS, SCLASS, \ - ARG_32BIT_ZARBU6, FLAGS_F }, \ - { NAME, INSN3OP_CBBU (MOP,SOP), MINSN3OP_CBBU, CPU, CLASS, SCLASS, \ - ARG_32BIT_RBRBU6, FLAGS_CCF }, \ - { NAME, INSN3OP_BBS (MOP,SOP), MINSN3OP_BBS, CPU, CLASS, SCLASS, \ - ARG_32BIT_RBRBS12, FLAGS_F }, \ - { NAME, INSN3OP_ALC (MOP,SOP), MINSN3OP_ALC, CPU, CLASS, SCLASS, \ - ARG_32BIT_RALIMMRC, FLAGS_F }, \ - { NAME, INSN3OP_ABL (MOP,SOP), MINSN3OP_ABL, CPU, CLASS, SCLASS, \ - ARG_32BIT_RARBLIMM, FLAGS_F }, \ - { NAME, INSN3OP_0LC (MOP,SOP), MINSN3OP_0LC, CPU, CLASS, SCLASS, \ - ARG_32BIT_ZALIMMRC, FLAGS_F }, \ - { NAME, INSN3OP_0BL (MOP,SOP), MINSN3OP_0BL, CPU, CLASS, SCLASS, \ - ARG_32BIT_ZARBLIMM, FLAGS_F }, \ - { NAME, INSN3OP_C0LC (MOP,SOP), MINSN3OP_C0LC, CPU, CLASS, SCLASS, \ - ARG_32BIT_ZALIMMRC, FLAGS_CCF }, \ - { NAME, INSN3OP_CBBL (MOP,SOP), MINSN3OP_CBBL, CPU, CLASS, SCLASS, \ - ARG_32BIT_RBRBLIMM, FLAGS_CCF }, \ - { NAME, INSN3OP_ALU (MOP,SOP), MINSN3OP_ALU, CPU, CLASS, SCLASS, \ - ARG_32BIT_RALIMMU6, FLAGS_F }, \ - { NAME, INSN3OP_0LU (MOP,SOP), MINSN3OP_0LU, CPU, CLASS, SCLASS, \ - ARG_32BIT_ZALIMMU6, FLAGS_F }, \ - { NAME, INSN3OP_C0LU (MOP,SOP), MINSN3OP_C0LU, CPU, CLASS, SCLASS, \ - ARG_32BIT_ZALIMMU6, FLAGS_CCF }, \ - { NAME, INSN3OP_0LS (MOP,SOP), MINSN3OP_0LS, CPU, CLASS, SCLASS, \ - ARG_32BIT_ZALIMMS12, FLAGS_F }, \ - { NAME, INSN3OP_ALL (MOP,SOP), MINSN3OP_ALL, CPU, CLASS, SCLASS, \ - ARG_32BIT_RALIMMLIMM, FLAGS_F }, \ - { NAME, INSN3OP_0LL (MOP,SOP), MINSN3OP_0LL, CPU, CLASS, SCLASS, \ - ARG_32BIT_ZALIMMLIMM, FLAGS_F }, \ - { NAME, INSN3OP_C0LL (MOP,SOP), MINSN3OP_C0LL, CPU, CLASS, SCLASS, \ - ARG_32BIT_ZALIMMLIMM, FLAGS_CCF }, - -/* Extension instruction declarations. */ -EXTINSN2OP ("dsp_fp_flt2i", ARC_OPCODE_ARCv2EM, FLOAT, QUARKSE1, 7, 43) -EXTINSN2OP ("dsp_fp_i2flt", ARC_OPCODE_ARCv2EM, FLOAT, QUARKSE1, 7, 44) -EXTINSN2OP ("dsp_fp_sqrt", ARC_OPCODE_ARCv2EM, FLOAT, QUARKSE2, 7, 45) - -EXTINSN3OP ("dsp_fp_div", ARC_OPCODE_ARCv2EM, FLOAT, QUARKSE2, 7, 42) -EXTINSN3OP ("dsp_fp_cmp", ARC_OPCODE_ARCv2EM, FLOAT, QUARKSE1, 7, 43) diff --git a/opcodes/arc-fxi.h b/opcodes/arc-fxi.h index 838f2335388a..b0a6b8f4730d 100644 --- a/opcodes/arc-fxi.h +++ b/opcodes/arc-fxi.h @@ -1318,3 +1318,63 @@ extract_uimm6_axx_ (unsigned long long insn ATTRIBUTE_UNUSED, return value; } #endif /* EXTRACT_UIMM6_AXX_ */ + +/* mask = 0000022000011111. */ +#ifndef INSERT_UIMM9_A32_11_S +#define INSERT_UIMM9_A32_11_S +ATTRIBUTE_UNUSED static unsigned long long +insert_uimm9_a32_11_s (unsigned long long insn ATTRIBUTE_UNUSED, + long long int value ATTRIBUTE_UNUSED, + const char **errmsg ATTRIBUTE_UNUSED) +{ + if (value & 0x03) + *errmsg = "Target address is not 32bit aligned."; + + insn |= ((value >> 2) & 0x001f) << 0; + insn |= ((value >> 7) & 0x0003) << 9; + return insn; +} +#endif /* INSERT_UIMM9_A32_11_S. */ + +#ifndef EXTRACT_UIMM9_A32_11_S +#define EXTRACT_UIMM9_A32_11_S +ATTRIBUTE_UNUSED static long long int +extract_uimm9_a32_11_s (unsigned long long insn ATTRIBUTE_UNUSED, + bool *invalid ATTRIBUTE_UNUSED) +{ + unsigned value = 0; + value |= ((insn >> 0) & 0x001f) << 2; + value |= ((insn >> 9) & 0x0003) << 7; + + return value; +} +#endif /* EXTRACT_UIMM9_A32_11_S. */ + +/* mask = 0000022222220111. */ +#ifndef INSERT_UIMM10_13_S +#define INSERT_UIMM10_13_S +ATTRIBUTE_UNUSED static unsigned long long +insert_uimm10_13_s (unsigned long long insn ATTRIBUTE_UNUSED, + long long int value ATTRIBUTE_UNUSED, + const char **errmsg ATTRIBUTE_UNUSED) +{ + insn |= ((value >> 0) & 0x0007) << 0; + insn |= ((value >> 3) & 0x007f) << 4; + + return insn; +} +#endif /* INSERT_UIMM10_13_S. */ + +#ifndef EXTRACT_UIMM10_13_S +#define EXTRACT_UIMM10_13_S +ATTRIBUTE_UNUSED static long long int +extract_uimm10_13_s (unsigned long long insn ATTRIBUTE_UNUSED, + bool *invalid ATTRIBUTE_UNUSED) +{ + unsigned value = 0; + value |= ((insn >> 0) & 0x0007) << 0; + value |= ((insn >> 4) & 0x007f) << 3; + + return value; +} +#endif /* EXTRACT_UIMM10_13_S. */ diff --git a/opcodes/arc-opc.c b/opcodes/arc-opc.c index 7171733955a6..effeffc3108c 100644 --- a/opcodes/arc-opc.c +++ b/opcodes/arc-opc.c @@ -19,2595 +19,103 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ -#include "sysdep.h" -#include -#include "bfd.h" -#include "opcode/arc.h" -#include "opintl.h" -#include "libiberty.h" - -/* ARC NPS400 Support: The ARC NPS400 core is an ARC700 with some custom - instructions. All NPS400 features are built into all ARC target builds as - this reduces the chances that regressions might creep in. */ - -/* Insert RA register into a 32-bit opcode, with checks. */ - -static unsigned long long -insert_ra_chk (unsigned long long insn, - long long value, - const char ** errmsg) -{ - if (value == 60) - *errmsg = _("LP_COUNT register cannot be used as destination register"); - - return insn | (value & 0x3F); -} - -/* Insert RB register into a 32-bit opcode. */ - -static unsigned long long -insert_rb (unsigned long long insn, - long long value, - const char ** errmsg ATTRIBUTE_UNUSED) -{ - return insn | ((value & 0x07) << 24) | (((value >> 3) & 0x07) << 12); -} - -/* Insert RB register with checks. */ - -static unsigned long long -insert_rb_chk (unsigned long long insn, - long long value, - const char ** errmsg) -{ - if (value == 60) - *errmsg = _("LP_COUNT register cannot be used as destination register"); - - return insn | ((value & 0x07) << 24) | (((value >> 3) & 0x07) << 12); -} - -static long long -extract_rb (unsigned long long insn, - bool *invalid) -{ - int value = (((insn >> 12) & 0x07) << 3) | ((insn >> 24) & 0x07); - - if (value == 0x3e && invalid) - *invalid = true; /* A limm operand, it should be extracted in a - different way. */ - - return value; -} - -static unsigned long long -insert_rad (unsigned long long insn, - long long value, - const char ** errmsg) -{ - if (value & 0x01) - *errmsg = _("cannot use odd number destination register"); - if (value == 60) - *errmsg = _("LP_COUNT register cannot be used as destination register"); - - return insn | (value & 0x3F); -} - -static unsigned long long -insert_rcd (unsigned long long insn, - long long value, - const char ** errmsg) -{ - if (value & 0x01) - *errmsg = _("cannot use odd number source register"); - - return insn | ((value & 0x3F) << 6); -} - -static unsigned long long -insert_rbd (unsigned long long insn, - long long value, - const char ** errmsg) -{ - if (value & 0x01) - *errmsg = _("cannot use odd number source register"); - if (value == 60) - *errmsg = _("LP_COUNT register cannot be used as destination register"); - - return insn | ((value & 0x07) << 24) | (((value >> 3) & 0x07) << 12); -} - -/* Dummy insert ZERO operand function. */ - -static unsigned long long -insert_za (unsigned long long insn, - long long value, - const char ** errmsg) -{ - if (value) - *errmsg = _("operand is not zero"); - return insn; -} - -/* Insert Y-bit in bbit/br instructions. This function is called only - when solving fixups. */ - -static unsigned long long -insert_Ybit (unsigned long long insn, - long long value, - const char ** errmsg ATTRIBUTE_UNUSED) -{ - if (value > 0) - insn |= 0x08; - - return insn; -} - -/* Insert Y-bit in bbit/br instructions. This function is called only - when solving fixups. */ - -static unsigned long long -insert_NYbit (unsigned long long insn, - long long value, - const char ** errmsg ATTRIBUTE_UNUSED) -{ - if (value < 0) - insn |= 0x08; - - return insn; -} - -/* Insert H register into a 16-bit opcode. */ - -static unsigned long long -insert_rhv1 (unsigned long long insn, - long long value, - const char ** errmsg ATTRIBUTE_UNUSED) -{ - return insn |= ((value & 0x07) << 5) | ((value >> 3) & 0x07); -} - -static long long -extract_rhv1 (unsigned long long insn, - bool *invalid ATTRIBUTE_UNUSED) -{ - int value = ((insn & 0x7) << 3) | ((insn >> 5) & 0x7); - - return value; -} - -/* Insert H register into a 16-bit opcode. */ - -static unsigned long long -insert_rhv2 (unsigned long long insn, - long long value, - const char ** errmsg) -{ - if (value == 0x1E) - *errmsg = _("register R30 is a limm indicator"); - else if (value < 0 || value > 31) - *errmsg = _("register out of range"); - return insn |= ((value & 0x07) << 5) | ((value >> 3) & 0x03); -} - -static long long -extract_rhv2 (unsigned long long insn, - bool *invalid ATTRIBUTE_UNUSED) -{ - int value = ((insn >> 5) & 0x07) | ((insn & 0x03) << 3); - - return value; -} - -static unsigned long long -insert_r0 (unsigned long long insn, - long long value, - const char ** errmsg) -{ - if (value != 0) - *errmsg = _("register must be R0"); - return insn; -} - -static long long -extract_r0 (unsigned long long insn ATTRIBUTE_UNUSED, - bool *invalid ATTRIBUTE_UNUSED) -{ - return 0; -} - - -static unsigned long long -insert_r1 (unsigned long long insn, - long long value, - const char ** errmsg) -{ - if (value != 1) - *errmsg = _("register must be R1"); - return insn; -} - -static long long -extract_r1 (unsigned long long insn ATTRIBUTE_UNUSED, - bool* invalid ATTRIBUTE_UNUSED) -{ - return 1; -} - -static unsigned long long -insert_r2 (unsigned long long insn, - long long value, - const char ** errmsg) -{ - if (value != 2) - *errmsg = _("register must be R2"); - return insn; -} - -static long long -extract_r2 (unsigned long long insn ATTRIBUTE_UNUSED, - bool *invalid ATTRIBUTE_UNUSED) -{ - return 2; -} - -static unsigned long long -insert_r3 (unsigned long long insn, - long long value, - const char ** errmsg) -{ - if (value != 3) - *errmsg = _("register must be R3"); - return insn; -} - -static long long -extract_r3 (unsigned long long insn ATTRIBUTE_UNUSED, - bool *invalid ATTRIBUTE_UNUSED) -{ - return 3; -} - -static unsigned long long -insert_sp (unsigned long long insn, - long long value, - const char ** errmsg) -{ - if (value != 28) - *errmsg = _("register must be SP"); - return insn; -} - -static long long -extract_sp (unsigned long long insn ATTRIBUTE_UNUSED, - bool *invalid ATTRIBUTE_UNUSED) -{ - return 28; -} - -static unsigned long long -insert_gp (unsigned long long insn, - long long value, - const char ** errmsg) -{ - if (value != 26) - *errmsg = _("register must be GP"); - return insn; -} - -static long long -extract_gp (unsigned long long insn ATTRIBUTE_UNUSED, - bool *invalid ATTRIBUTE_UNUSED) -{ - return 26; -} - -static unsigned long long -insert_pcl (unsigned long long insn, - long long value, - const char ** errmsg) -{ - if (value != 63) - *errmsg = _("register must be PCL"); - return insn; -} - -static long long -extract_pcl (unsigned long long insn ATTRIBUTE_UNUSED, - bool *invalid ATTRIBUTE_UNUSED) -{ - return 63; -} - -static unsigned long long -insert_blink (unsigned long long insn, - long long value, - const char ** errmsg) -{ - if (value != 31) - *errmsg = _("register must be BLINK"); - return insn; -} - -static long long -extract_blink (unsigned long long insn ATTRIBUTE_UNUSED, - bool *invalid ATTRIBUTE_UNUSED) -{ - return 31; -} - -static unsigned long long -insert_ilink1 (unsigned long long insn, - long long value, - const char ** errmsg) -{ - if (value != 29) - *errmsg = _("register must be ILINK1"); - return insn; -} - -static long long -extract_ilink1 (unsigned long long insn ATTRIBUTE_UNUSED, - bool *invalid ATTRIBUTE_UNUSED) -{ - return 29; -} - -static unsigned long long -insert_ilink2 (unsigned long long insn, - long long value, - const char ** errmsg) -{ - if (value != 30) - *errmsg = _("register must be ILINK2"); - return insn; -} - -static long long -extract_ilink2 (unsigned long long insn ATTRIBUTE_UNUSED, - bool *invalid ATTRIBUTE_UNUSED) -{ - return 30; -} - -static unsigned long long -insert_ras (unsigned long long insn, - long long value, - const char ** errmsg) -{ - switch (value) - { - case 0: - case 1: - case 2: - case 3: - insn |= value; - break; - case 12: - case 13: - case 14: - case 15: - insn |= (value - 8); - break; - default: - *errmsg = _("register must be either r0-r3 or r12-r15"); - break; - } - return insn; -} - -static long long -extract_ras (unsigned long long insn, - bool *invalid ATTRIBUTE_UNUSED) -{ - int value = insn & 0x07; - - if (value > 3) - return (value + 8); - else - return value; -} - -static unsigned long long -insert_rbs (unsigned long long insn, - long long value, - const char ** errmsg) -{ - switch (value) - { - case 0: - case 1: - case 2: - case 3: - insn |= value << 8; - break; - case 12: - case 13: - case 14: - case 15: - insn |= ((value - 8)) << 8; - break; - default: - *errmsg = _("register must be either r0-r3 or r12-r15"); - break; - } - return insn; -} - -static long long -extract_rbs (unsigned long long insn, - bool *invalid ATTRIBUTE_UNUSED) -{ - int value = (insn >> 8) & 0x07; - - if (value > 3) - return (value + 8); - else - return value; -} - -static unsigned long long -insert_rcs (unsigned long long insn, - long long value, - const char ** errmsg) -{ - switch (value) - { - case 0: - case 1: - case 2: - case 3: - insn |= value << 5; - break; - case 12: - case 13: - case 14: - case 15: - insn |= ((value - 8)) << 5; - break; - default: - *errmsg = _("register must be either r0-r3 or r12-r15"); - break; - } - return insn; -} - -static long long -extract_rcs (unsigned long long insn, - bool *invalid ATTRIBUTE_UNUSED) -{ - int value = (insn >> 5) & 0x07; - - if (value > 3) - return (value + 8); - else - return value; -} - -static unsigned long long -insert_simm3s (unsigned long long insn, - long long value, - const char ** errmsg) -{ - int tmp = 0; - switch (value) - { - case -1: - tmp = 0x07; - break; - case 0: - tmp = 0x00; - break; - case 1: - tmp = 0x01; - break; - case 2: - tmp = 0x02; - break; - case 3: - tmp = 0x03; - break; - case 4: - tmp = 0x04; - break; - case 5: - tmp = 0x05; - break; - case 6: - tmp = 0x06; - break; - default: - *errmsg = _("accepted values are from -1 to 6"); - break; - } - - insn |= tmp << 8; - return insn; -} - -static long long -extract_simm3s (unsigned long long insn, - bool *invalid ATTRIBUTE_UNUSED) -{ - int value = (insn >> 8) & 0x07; - - if (value == 7) - return -1; - else - return value; -} - -static unsigned long long -insert_rrange (unsigned long long insn, - long long value, - const char ** errmsg) -{ - int reg1 = (value >> 16) & 0xFFFF; - int reg2 = value & 0xFFFF; - - if (reg1 != 13) - *errmsg = _("first register of the range should be r13"); - else if (reg2 < 13 || reg2 > 26) - *errmsg = _("last register of the range doesn't fit"); - else - insn |= ((reg2 - 12) & 0x0F) << 1; - return insn; -} - -static long long -extract_rrange (unsigned long long insn, - bool *invalid ATTRIBUTE_UNUSED) -{ - return (insn >> 1) & 0x0F; -} - -static unsigned long long -insert_r13el (unsigned long long insn, - long long int value, - const char **errmsg) -{ - if (value != 13) - { - *errmsg = _("invalid register number, should be fp"); - return insn; - } - - insn |= 0x02; - return insn; -} - -static unsigned long long -insert_fpel (unsigned long long insn, - long long value, - const char ** errmsg) -{ - if (value != 27) - { - *errmsg = _("invalid register number, should be fp"); - return insn; - } - - insn |= 0x0100; - return insn; -} - -static long long -extract_fpel (unsigned long long insn, - bool *invalid ATTRIBUTE_UNUSED) -{ - return (insn & 0x0100) ? 27 : -1; -} - -static unsigned long long -insert_blinkel (unsigned long long insn, - long long value, - const char ** errmsg) -{ - if (value != 31) - { - *errmsg = _("invalid register number, should be blink"); - return insn; - } - - insn |= 0x0200; - return insn; -} - -static long long -extract_blinkel (unsigned long long insn, - bool *invalid ATTRIBUTE_UNUSED) -{ - return (insn & 0x0200) ? 31 : -1; -} - -static unsigned long long -insert_pclel (unsigned long long insn, - long long value, - const char ** errmsg) -{ - if (value != 63) - { - *errmsg = _("invalid register number, should be pcl"); - return insn; - } - - insn |= 0x0400; - return insn; -} - -static long long -extract_pclel (unsigned long long insn, - bool *invalid ATTRIBUTE_UNUSED) -{ - return (insn & 0x0400) ? 63 : -1; -} - -#define INSERT_W6 - -/* mask = 00000000000000000000111111000000 - insn = 00011bbb000000000BBBwwwwwwDaaZZ1. */ - -static unsigned long long -insert_w6 (unsigned long long insn, - long long value, - const char ** errmsg ATTRIBUTE_UNUSED) -{ - insn |= ((value >> 0) & 0x003f) << 6; - - return insn; -} - -#define EXTRACT_W6 - -/* mask = 00000000000000000000111111000000. */ - -static long long -extract_w6 (unsigned long long insn, - bool *invalid ATTRIBUTE_UNUSED) -{ - int value = 0; - - value |= ((insn >> 6) & 0x003f) << 0; - - /* Extend the sign. */ - int signbit = 1 << 5; - value = (value ^ signbit) - signbit; - - return value; -} - -#define INSERT_G_S - -/* mask = 0000011100022000 - insn = 01000ggghhhGG0HH. */ - -static unsigned long long -insert_g_s (unsigned long long insn, - long long value, - const char ** errmsg ATTRIBUTE_UNUSED) -{ - insn |= ((value >> 0) & 0x0007) << 8; - insn |= ((value >> 3) & 0x0003) << 3; - - return insn; -} - -#define EXTRACT_G_S - -/* mask = 0000011100022000. */ - -static long long -extract_g_s (unsigned long long insn, - bool *invalid ATTRIBUTE_UNUSED) -{ - int value = 0; - int signbit = 1 << (6 - 1); - - value |= ((insn >> 8) & 0x0007) << 0; - value |= ((insn >> 3) & 0x0003) << 3; - - /* Extend the sign. */ - value = (value ^ signbit) - signbit; - - return value; -} - -/* ARC NPS400 Support: See comment near head of file. */ -#define MAKE_3BIT_REG_INSERT_EXTRACT_FUNCS(NAME,OFFSET) \ -static unsigned long long \ -insert_nps_3bit_reg_at_##OFFSET##_##NAME \ - (unsigned long long insn, \ - long long value, \ - const char ** errmsg) \ -{ \ - switch (value) \ - { \ - case 0: \ - case 1: \ - case 2: \ - case 3: \ - insn |= value << (OFFSET); \ - break; \ - case 12: \ - case 13: \ - case 14: \ - case 15: \ - insn |= (value - 8) << (OFFSET); \ - break; \ - default: \ - *errmsg = _("register must be either r0-r3 or r12-r15"); \ - break; \ - } \ - return insn; \ -} \ - \ -static long long \ -extract_nps_3bit_reg_at_##OFFSET##_##NAME \ - (unsigned long long insn, \ - bool *invalid ATTRIBUTE_UNUSED) \ -{ \ - int value = (insn >> (OFFSET)) & 0x07; \ - if (value > 3) \ - value += 8; \ - return value; \ -} \ - -MAKE_3BIT_REG_INSERT_EXTRACT_FUNCS(dst,8) -MAKE_3BIT_REG_INSERT_EXTRACT_FUNCS(dst,24) -MAKE_3BIT_REG_INSERT_EXTRACT_FUNCS(dst,40) -MAKE_3BIT_REG_INSERT_EXTRACT_FUNCS(dst,56) - -MAKE_3BIT_REG_INSERT_EXTRACT_FUNCS(src2,5) -MAKE_3BIT_REG_INSERT_EXTRACT_FUNCS(src2,21) -MAKE_3BIT_REG_INSERT_EXTRACT_FUNCS(src2,37) -MAKE_3BIT_REG_INSERT_EXTRACT_FUNCS(src2,53) - -static unsigned long long -insert_nps_bitop_size_2b (unsigned long long insn, - long long value, - const char ** errmsg) -{ - switch (value) - { - case 1: - value = 0; - break; - case 2: - value = 1; - break; - case 4: - value = 2; - break; - case 8: - value = 3; - break; - default: - value = 0; - *errmsg = _("invalid size, should be 1, 2, 4, or 8"); - break; - } - - insn |= value << 10; - return insn; -} - -static long long -extract_nps_bitop_size_2b (unsigned long long insn, - bool *invalid ATTRIBUTE_UNUSED) -{ - return 1 << ((insn >> 10) & 0x3); -} - -static unsigned long long -insert_nps_bitop_uimm8 (unsigned long long insn, - long long value, - const char ** errmsg ATTRIBUTE_UNUSED) -{ - insn |= ((value >> 5) & 7) << 12; - insn |= (value & 0x1f); - return insn; -} - -static long long -extract_nps_bitop_uimm8 (unsigned long long insn, - bool *invalid ATTRIBUTE_UNUSED) -{ - return (((insn >> 12) & 0x7) << 5) | (insn & 0x1f); -} - -static unsigned long long -insert_nps_rflt_uimm6 (unsigned long long insn, - long long value, - const char ** errmsg) -{ - switch (value) - { - case 1: - case 2: - case 4: - break; - - default: - *errmsg = _("invalid immediate, must be 1, 2, or 4"); - value = 0; - } - - insn |= (value << 6); - return insn; -} - -static long long -extract_nps_rflt_uimm6 (unsigned long long insn, - bool *invalid ATTRIBUTE_UNUSED) -{ - return (insn >> 6) & 0x3f; -} - -static unsigned long long -insert_nps_dst_pos_and_size (unsigned long long insn, - long long value, - const char ** errmsg ATTRIBUTE_UNUSED) -{ - insn |= ((value & 0x1f) | (((32 - value - 1) & 0x1f) << 10)); - return insn; -} - -static long long -extract_nps_dst_pos_and_size (unsigned long long insn, - bool *invalid ATTRIBUTE_UNUSED) -{ - return (insn & 0x1f); -} - -static unsigned long long -insert_nps_cmem_uimm16 (unsigned long long insn, - long long value, - const char ** errmsg) -{ - int top = (value >> 16) & 0xffff; - - if (top != 0x0 && top != NPS_CMEM_HIGH_VALUE) - *errmsg = _("invalid value for CMEM ld/st immediate"); - insn |= (value & 0xffff); - return insn; -} - -static long long -extract_nps_cmem_uimm16 (unsigned long long insn, - bool *invalid ATTRIBUTE_UNUSED) -{ - return (NPS_CMEM_HIGH_VALUE << 16) | (insn & 0xffff); -} - -static unsigned long long -insert_nps_imm_offset (unsigned long long insn, - long long value, - const char ** errmsg) -{ - switch (value) - { - case 0: - case 16: - case 32: - case 48: - case 64: - value = value >> 4; - break; - default: - *errmsg = _("invalid position, should be 0, 16, 32, 48 or 64."); - value = 0; - } - insn |= (value << 10); - return insn; -} - -static long long -extract_nps_imm_offset (unsigned long long insn, - bool *invalid ATTRIBUTE_UNUSED) -{ - return ((insn >> 10) & 0x7) * 16; -} - -static unsigned long long -insert_nps_imm_entry (unsigned long long insn, - long long value, - const char ** errmsg) -{ - switch (value) - { - case 16: - value = 0; - break; - case 32: - value = 1; - break; - case 64: - value = 2; - break; - case 128: - value = 3; - break; - default: - *errmsg = _("invalid position, should be 16, 32, 64 or 128."); - value = 0; - } - insn |= (value << 2); - return insn; -} - -static long long -extract_nps_imm_entry (unsigned long long insn, - bool *invalid ATTRIBUTE_UNUSED) -{ - int imm_entry = ((insn >> 2) & 0x7); - return (1 << (imm_entry + 4)); -} - -static unsigned long long -insert_nps_size_16bit (unsigned long long insn, - long long value, - const char ** errmsg) -{ - if ((value < 1) || (value > 64)) - { - *errmsg = _("invalid size value must be on range 1-64."); - value = 0; - } - value = value & 0x3f; - insn |= (value << 6); - return insn; -} - -static long long -extract_nps_size_16bit (unsigned long long insn, - bool *invalid ATTRIBUTE_UNUSED) -{ - return ((insn & 0xfc0) >> 6) ? ((insn & 0xfc0) >> 6) : 64; -} - - -#define MAKE_SRC_POS_INSERT_EXTRACT_FUNCS(NAME,SHIFT) \ -static unsigned long long \ -insert_nps_##NAME##_pos (unsigned long long insn, \ - long long value, \ - const char ** errmsg) \ -{ \ - switch (value) \ - { \ - case 0: \ - case 8: \ - case 16: \ - case 24: \ - value = value / 8; \ - break; \ - default: \ - *errmsg = _("invalid position, should be 0, 8, 16, or 24"); \ - value = 0; \ - } \ - insn |= (value << SHIFT); \ - return insn; \ -} \ - \ -static long long \ -extract_nps_##NAME##_pos (unsigned long long insn, \ - bool *invalid ATTRIBUTE_UNUSED) \ -{ \ - return ((insn >> SHIFT) & 0x3) * 8; \ -} - -MAKE_SRC_POS_INSERT_EXTRACT_FUNCS (src2, 12) -MAKE_SRC_POS_INSERT_EXTRACT_FUNCS (src1, 10) - -#define MAKE_BIAS_INSERT_EXTRACT_FUNCS(NAME,LOWER,UPPER,BITS,BIAS,SHIFT) \ -static unsigned long long \ -insert_nps_##NAME (unsigned long long insn, \ - long long value, \ - const char ** errmsg) \ - { \ - if (value < LOWER || value > UPPER) \ - { \ - *errmsg = _("invalid size, value must be " \ - #LOWER " to " #UPPER "."); \ - return insn; \ - } \ - value -= BIAS; \ - insn |= (value << SHIFT); \ - return insn; \ - } \ - \ -static long long \ -extract_nps_##NAME (unsigned long long insn, \ - bool *invalid ATTRIBUTE_UNUSED) \ -{ \ - return ((insn >> SHIFT) & ((1 << BITS) - 1)) + BIAS; \ -} - -MAKE_BIAS_INSERT_EXTRACT_FUNCS (addb_size,2,32,5,1,5) -MAKE_BIAS_INSERT_EXTRACT_FUNCS (andb_size,1,32,5,1,5) -MAKE_BIAS_INSERT_EXTRACT_FUNCS (fxorb_size,8,32,5,8,5) -MAKE_BIAS_INSERT_EXTRACT_FUNCS (wxorb_size,16,32,5,16,5) -MAKE_BIAS_INSERT_EXTRACT_FUNCS (bitop_size,1,32,5,1,10) -MAKE_BIAS_INSERT_EXTRACT_FUNCS (qcmp_size,1,8,3,1,9) -MAKE_BIAS_INSERT_EXTRACT_FUNCS (bitop1_size,1,32,5,1,20) -MAKE_BIAS_INSERT_EXTRACT_FUNCS (bitop2_size,1,32,5,1,25) -MAKE_BIAS_INSERT_EXTRACT_FUNCS (hash_width,1,32,5,1,6) -MAKE_BIAS_INSERT_EXTRACT_FUNCS (hash_len,1,8,3,1,2) -MAKE_BIAS_INSERT_EXTRACT_FUNCS (index3,4,7,2,4,0) - -static long long -extract_nps_qcmp_m3 (unsigned long long insn, - bool *invalid) -{ - int m3 = (insn >> 5) & 0xf; - if (m3 == 0xf) - *invalid = true; - return m3; -} - -static long long -extract_nps_qcmp_m2 (unsigned long long insn, - bool *invalid) -{ - bool tmp_invalid = false; - int m2 = (insn >> 15) & 0x1; - int m3 = extract_nps_qcmp_m3 (insn, &tmp_invalid); - - if (m2 == 0 && m3 == 0xf) - *invalid = true; - return m2; -} - -static long long -extract_nps_qcmp_m1 (unsigned long long insn, - bool *invalid) -{ - bool tmp_invalid = false; - int m1 = (insn >> 14) & 0x1; - int m2 = extract_nps_qcmp_m2 (insn, &tmp_invalid); - int m3 = extract_nps_qcmp_m3 (insn, &tmp_invalid); - - if (m1 == 0 && m2 == 0 && m3 == 0xf) - *invalid = true; - return m1; -} - -static unsigned long long -insert_nps_calc_entry_size (unsigned long long insn, - long long value, - const char ** errmsg) -{ - unsigned pwr; - - if (value < 1 || value > 256) - { - *errmsg = _("value out of range 1 - 256"); - return 0; - } - - for (pwr = 0; (value & 1) == 0; value >>= 1) - ++pwr; - - if (value != 1) - { - *errmsg = _("value must be power of 2"); - return 0; - } - - return insn | (pwr << 8); -} - -static long long -extract_nps_calc_entry_size (unsigned long long insn, - bool *invalid ATTRIBUTE_UNUSED) -{ - unsigned entry_size = (insn >> 8) & 0xf; - return 1 << entry_size; -} - -static unsigned long long -insert_nps_bitop_mod4 (unsigned long long insn, - long long value, - const char ** errmsg ATTRIBUTE_UNUSED) -{ - return insn | ((value & 0x2) << 30) | ((value & 0x1) << 47); -} - -static long long -extract_nps_bitop_mod4 (unsigned long long insn, - bool *invalid ATTRIBUTE_UNUSED) -{ - return ((insn >> 30) & 0x2) | ((insn >> 47) & 0x1); -} - -static unsigned long long -insert_nps_bitop_dst_pos3_pos4 (unsigned long long insn, - long long value, - const char ** errmsg ATTRIBUTE_UNUSED) -{ - return insn | (value << 42) | (value << 37); -} - -static long long -extract_nps_bitop_dst_pos3_pos4 (unsigned long long insn, - bool *invalid) -{ - if (((insn >> 42) & 0x1f) != ((insn >> 37) & 0x1f)) - *invalid = true; - return ((insn >> 37) & 0x1f); -} - -static unsigned long long -insert_nps_bitop_ins_ext (unsigned long long insn, - long long value, - const char ** errmsg) -{ - if (value < 0 || value > 28) - *errmsg = _("value must be in the range 0 to 28"); - return insn | (value << 20); -} - -static long long -extract_nps_bitop_ins_ext (unsigned long long insn, - bool *invalid) -{ - int value = (insn >> 20) & 0x1f; - - if (value > 28) - *invalid = true; - return value; -} - -#define MAKE_1BASED_INSERT_EXTRACT_FUNCS(NAME,SHIFT,UPPER,BITS) \ -static unsigned long long \ -insert_nps_##NAME (unsigned long long insn, \ - long long value, \ - const char ** errmsg) \ -{ \ - if (value < 1 || value > UPPER) \ - *errmsg = _("value must be in the range 1 to " #UPPER); \ - if (value == UPPER) \ - value = 0; \ - return insn | (value << SHIFT); \ -} \ - \ -static long long \ -extract_nps_##NAME (unsigned long long insn, \ - bool *invalid ATTRIBUTE_UNUSED) \ -{ \ - int value = (insn >> SHIFT) & ((1 << BITS) - 1); \ - if (value == 0) \ - value = UPPER; \ - return value; \ -} - -MAKE_1BASED_INSERT_EXTRACT_FUNCS (field_size, 6, 8, 3) -MAKE_1BASED_INSERT_EXTRACT_FUNCS (shift_factor, 9, 8, 3) -MAKE_1BASED_INSERT_EXTRACT_FUNCS (bits_to_scramble, 12, 8, 3) -MAKE_1BASED_INSERT_EXTRACT_FUNCS (bdlen_max_len, 5, 256, 8) -MAKE_1BASED_INSERT_EXTRACT_FUNCS (bd_num_buff, 6, 8, 3) -MAKE_1BASED_INSERT_EXTRACT_FUNCS (pmu_num_job, 6, 4, 2) -MAKE_1BASED_INSERT_EXTRACT_FUNCS (proto_size, 16, 64, 6) - -static unsigned long long -insert_nps_min_hofs (unsigned long long insn, - long long value, - const char ** errmsg) -{ - if (value < 0 || value > 240) - *errmsg = _("value must be in the range 0 to 240"); - if ((value % 16) != 0) - *errmsg = _("value must be a multiple of 16"); - value = value / 16; - return insn | (value << 6); -} - -static long long -extract_nps_min_hofs (unsigned long long insn, - bool *invalid ATTRIBUTE_UNUSED) -{ - int value = (insn >> 6) & 0xF; - return value * 16; -} - -#define MAKE_INSERT_NPS_ADDRTYPE(NAME, VALUE) \ -static unsigned long long \ -insert_nps_##NAME (unsigned long long insn, \ - long long value, \ - const char ** errmsg) \ -{ \ - if (value != ARC_NPS400_ADDRTYPE_##VALUE) \ - *errmsg = _("invalid address type for operand"); \ - return insn; \ -} \ - \ -static long long \ -extract_nps_##NAME (unsigned long long insn ATTRIBUTE_UNUSED, \ - bool *invalid ATTRIBUTE_UNUSED) \ -{ \ - return ARC_NPS400_ADDRTYPE_##VALUE; \ -} - -MAKE_INSERT_NPS_ADDRTYPE (bd, BD) -MAKE_INSERT_NPS_ADDRTYPE (jid, JID) -MAKE_INSERT_NPS_ADDRTYPE (lbd, LBD) -MAKE_INSERT_NPS_ADDRTYPE (mbd, MBD) -MAKE_INSERT_NPS_ADDRTYPE (sd, SD) -MAKE_INSERT_NPS_ADDRTYPE (sm, SM) -MAKE_INSERT_NPS_ADDRTYPE (xa, XA) -MAKE_INSERT_NPS_ADDRTYPE (xd, XD) -MAKE_INSERT_NPS_ADDRTYPE (cd, CD) -MAKE_INSERT_NPS_ADDRTYPE (cbd, CBD) -MAKE_INSERT_NPS_ADDRTYPE (cjid, CJID) -MAKE_INSERT_NPS_ADDRTYPE (clbd, CLBD) -MAKE_INSERT_NPS_ADDRTYPE (cm, CM) -MAKE_INSERT_NPS_ADDRTYPE (csd, CSD) -MAKE_INSERT_NPS_ADDRTYPE (cxa, CXA) -MAKE_INSERT_NPS_ADDRTYPE (cxd, CXD) - -static unsigned long long -insert_nps_rbdouble_64 (unsigned long long insn, - long long value, - const char ** errmsg) -{ - if (value < 0 || value > 31) - *errmsg = _("value must be in the range 0 to 31"); - return insn | (value << 43) | (value << 48); -} - - -static long long -extract_nps_rbdouble_64 (unsigned long long insn, - bool *invalid) -{ - int value1 = (insn >> 43) & 0x1F; - int value2 = (insn >> 48) & 0x1F; - - if (value1 != value2) - *invalid = true; - - return value1; -} - -static unsigned long long -insert_nps_misc_imm_offset (unsigned long long insn, - long long value, - const char ** errmsg) -{ - if (value & 0x3) - { - *errmsg = _("invalid position, should be one of: 0,4,8,...124."); - value = 0; - } - insn |= (value << 6); - return insn; -} - -static long long int -extract_nps_misc_imm_offset (unsigned long long insn, - bool *invalid ATTRIBUTE_UNUSED) -{ - return ((insn >> 8) & 0x1f) * 4; -} - -static long long int -extract_uimm12_20 (unsigned long long insn ATTRIBUTE_UNUSED, - bool *invalid ATTRIBUTE_UNUSED) -{ - int value = 0; - - value |= ((insn >> 6) & 0x003f) << 0; - value |= ((insn >> 0) & 0x003f) << 6; - - return value; -} - -/* Include the generic extract/insert functions. Order is important - as some of the functions present in the .h may be disabled via - defines. */ -#include "arc-fxi.h" - -/* The flag operands table. - - The format of the table is - NAME CODE BITS SHIFT FAVAIL. */ -const struct arc_flag_operand arc_flag_operands[] = -{ -#define F_NULL 0 - { 0, 0, 0, 0, 0}, -#define F_ALWAYS (F_NULL + 1) - { "al", 0, 0, 0, 0 }, -#define F_RA (F_ALWAYS + 1) - { "ra", 0, 0, 0, 0 }, -#define F_EQUAL (F_RA + 1) - { "eq", 1, 5, 0, 1 }, -#define F_ZERO (F_EQUAL + 1) - { "z", 1, 5, 0, 0 }, -#define F_NOTEQUAL (F_ZERO + 1) - { "ne", 2, 5, 0, 1 }, -#define F_NOTZERO (F_NOTEQUAL + 1) - { "nz", 2, 5, 0, 0 }, -#define F_POZITIVE (F_NOTZERO + 1) - { "p", 3, 5, 0, 1 }, -#define F_PL (F_POZITIVE + 1) - { "pl", 3, 5, 0, 0 }, -#define F_NEGATIVE (F_PL + 1) - { "n", 4, 5, 0, 1 }, -#define F_MINUS (F_NEGATIVE + 1) - { "mi", 4, 5, 0, 0 }, -#define F_CARRY (F_MINUS + 1) - { "c", 5, 5, 0, 1 }, -#define F_CARRYSET (F_CARRY + 1) - { "cs", 5, 5, 0, 0 }, -#define F_LOWER (F_CARRYSET + 1) - { "lo", 5, 5, 0, 0 }, -#define F_CARRYCLR (F_LOWER + 1) - { "cc", 6, 5, 0, 0 }, -#define F_NOTCARRY (F_CARRYCLR + 1) - { "nc", 6, 5, 0, 1 }, -#define F_HIGHER (F_NOTCARRY + 1) - { "hs", 6, 5, 0, 0 }, -#define F_OVERFLOWSET (F_HIGHER + 1) - { "vs", 7, 5, 0, 0 }, -#define F_OVERFLOW (F_OVERFLOWSET + 1) - { "v", 7, 5, 0, 1 }, -#define F_NOTOVERFLOW (F_OVERFLOW + 1) - { "nv", 8, 5, 0, 1 }, -#define F_OVERFLOWCLR (F_NOTOVERFLOW + 1) - { "vc", 8, 5, 0, 0 }, -#define F_GT (F_OVERFLOWCLR + 1) - { "gt", 9, 5, 0, 1 }, -#define F_GE (F_GT + 1) - { "ge", 10, 5, 0, 1 }, -#define F_LT (F_GE + 1) - { "lt", 11, 5, 0, 1 }, -#define F_LE (F_LT + 1) - { "le", 12, 5, 0, 1 }, -#define F_HI (F_LE + 1) - { "hi", 13, 5, 0, 1 }, -#define F_LS (F_HI + 1) - { "ls", 14, 5, 0, 1 }, -#define F_PNZ (F_LS + 1) - { "pnz", 15, 5, 0, 1 }, -#define F_NJ (F_PNZ + 1) - { "nj", 21, 5, 0, 1 }, -#define F_NM (F_NJ + 1) - { "nm", 23, 5, 0, 1 }, -#define F_NO_T (F_NM + 1) - { "nt", 24, 5, 0, 1 }, - - /* FLAG. */ -#define F_FLAG (F_NO_T + 1) - { "f", 1, 1, 15, 1 }, -#define F_FFAKE (F_FLAG + 1) - { "f", 0, 0, 0, 1 }, - - /* Delay slot. */ -#define F_ND (F_FFAKE + 1) - { "nd", 0, 1, 5, 0 }, -#define F_D (F_ND + 1) - { "d", 1, 1, 5, 1 }, -#define F_DFAKE (F_D + 1) - { "d", 0, 0, 0, 1 }, -#define F_DNZ_ND (F_DFAKE + 1) - { "nd", 0, 1, 16, 0 }, -#define F_DNZ_D (F_DNZ_ND + 1) - { "d", 1, 1, 16, 1 }, - - /* Data size. */ -#define F_SIZEB1 (F_DNZ_D + 1) - { "b", 1, 2, 1, 1 }, -#define F_SIZEB7 (F_SIZEB1 + 1) - { "b", 1, 2, 7, 1 }, -#define F_SIZEB17 (F_SIZEB7 + 1) - { "b", 1, 2, 17, 1 }, -#define F_SIZEW1 (F_SIZEB17 + 1) - { "w", 2, 2, 1, 0 }, -#define F_SIZEW7 (F_SIZEW1 + 1) - { "w", 2, 2, 7, 0 }, -#define F_SIZEW17 (F_SIZEW7 + 1) - { "w", 2, 2, 17, 0 }, - - /* Sign extension. */ -#define F_SIGN6 (F_SIZEW17 + 1) - { "x", 1, 1, 6, 1 }, -#define F_SIGN16 (F_SIGN6 + 1) - { "x", 1, 1, 16, 1 }, -#define F_SIGNX (F_SIGN16 + 1) - { "x", 0, 0, 0, 1 }, - - /* Address write-back modes. */ -#define F_A3 (F_SIGNX + 1) - { "a", 1, 2, 3, 0 }, -#define F_A9 (F_A3 + 1) - { "a", 1, 2, 9, 0 }, -#define F_A22 (F_A9 + 1) - { "a", 1, 2, 22, 0 }, -#define F_AW3 (F_A22 + 1) - { "aw", 1, 2, 3, 1 }, -#define F_AW9 (F_AW3 + 1) - { "aw", 1, 2, 9, 1 }, -#define F_AW22 (F_AW9 + 1) - { "aw", 1, 2, 22, 1 }, -#define F_AB3 (F_AW22 + 1) - { "ab", 2, 2, 3, 1 }, -#define F_AB9 (F_AB3 + 1) - { "ab", 2, 2, 9, 1 }, -#define F_AB22 (F_AB9 + 1) - { "ab", 2, 2, 22, 1 }, -#define F_AS3 (F_AB22 + 1) - { "as", 3, 2, 3, 1 }, -#define F_AS9 (F_AS3 + 1) - { "as", 3, 2, 9, 1 }, -#define F_AS22 (F_AS9 + 1) - { "as", 3, 2, 22, 1 }, -#define F_ASFAKE (F_AS22 + 1) - { "as", 0, 0, 0, 1 }, - - /* Cache bypass. */ -#define F_DI5 (F_ASFAKE + 1) - { "di", 1, 1, 5, 1 }, -#define F_DI11 (F_DI5 + 1) - { "di", 1, 1, 11, 1 }, -#define F_DI14 (F_DI11 + 1) - { "di", 1, 1, 14, 1 }, -#define F_DI15 (F_DI14 + 1) - { "di", 1, 1, 15, 1 }, - - /* ARCv2 specific. */ -#define F_NT (F_DI15 + 1) - { "nt", 0, 1, 3, 1}, -#define F_T (F_NT + 1) - { "t", 1, 1, 3, 1}, -#define F_H1 (F_T + 1) - { "h", 2, 2, 1, 1 }, -#define F_H7 (F_H1 + 1) - { "h", 2, 2, 7, 1 }, -#define F_H17 (F_H7 + 1) - { "h", 2, 2, 17, 1 }, -#define F_SIZED (F_H17 + 1) - { "dd", 8, 0, 0, 0 }, /* Fake. */ - - /* Fake Flags. */ -#define F_NE (F_SIZED + 1) - { "ne", 0, 0, 0, 1 }, - - /* ARC NPS400 Support: See comment near head of file. */ -#define F_NPS_CL (F_NE + 1) - { "cl", 0, 0, 0, 1 }, - -#define F_NPS_NA (F_NPS_CL + 1) - { "na", 1, 1, 9, 1 }, - -#define F_NPS_SR (F_NPS_NA + 1) - { "s", 1, 1, 13, 1 }, - -#define F_NPS_M (F_NPS_SR + 1) - { "m", 1, 1, 7, 1 }, - -#define F_NPS_FLAG (F_NPS_M + 1) - { "f", 1, 1, 20, 1 }, - -#define F_NPS_R (F_NPS_FLAG + 1) - { "r", 1, 1, 15, 1 }, - -#define F_NPS_RW (F_NPS_R + 1) - { "rw", 0, 1, 7, 1 }, - -#define F_NPS_RD (F_NPS_RW + 1) - { "rd", 1, 1, 7, 1 }, - -#define F_NPS_WFT (F_NPS_RD + 1) - { "wft", 0, 0, 0, 1 }, - -#define F_NPS_IE1 (F_NPS_WFT + 1) - { "ie1", 1, 2, 8, 1 }, - -#define F_NPS_IE2 (F_NPS_IE1 + 1) - { "ie2", 2, 2, 8, 1 }, - -#define F_NPS_IE12 (F_NPS_IE2 + 1) - { "ie12", 3, 2, 8, 1 }, - -#define F_NPS_SYNC_RD (F_NPS_IE12 + 1) - { "rd", 0, 1, 6, 1 }, - -#define F_NPS_SYNC_WR (F_NPS_SYNC_RD + 1) - { "wr", 1, 1, 6, 1 }, - -#define F_NPS_HWS_OFF (F_NPS_SYNC_WR + 1) - { "off", 0, 0, 0, 1 }, - -#define F_NPS_HWS_RESTORE (F_NPS_HWS_OFF + 1) - { "restore", 0, 0, 0, 1 }, - -#define F_NPS_SX (F_NPS_HWS_RESTORE + 1) - { "sx", 1, 1, 14, 1 }, - -#define F_NPS_AR (F_NPS_SX + 1) - { "ar", 0, 1, 0, 1 }, - -#define F_NPS_AL (F_NPS_AR + 1) - { "al", 1, 1, 0, 1 }, - -#define F_NPS_S (F_NPS_AL + 1) - { "s", 0, 0, 0, 1 }, - -#define F_NPS_ZNCV_RD (F_NPS_S + 1) - { "rd", 0, 1, 15, 1 }, - -#define F_NPS_ZNCV_WR (F_NPS_ZNCV_RD + 1) - { "wr", 1, 1, 15, 1 }, - -#define F_NPS_P0 (F_NPS_ZNCV_WR + 1) - { "p0", 0, 0, 0, 1 }, - -#define F_NPS_P1 (F_NPS_P0 + 1) - { "p1", 0, 0, 0, 1 }, - -#define F_NPS_P2 (F_NPS_P1 + 1) - { "p2", 0, 0, 0, 1 }, - -#define F_NPS_P3 (F_NPS_P2 + 1) - { "p3", 0, 0, 0, 1 }, - -#define F_NPS_LDBIT_DI (F_NPS_P3 + 1) - { "di", 0, 0, 0, 1 }, - -#define F_NPS_LDBIT_CL1 (F_NPS_LDBIT_DI + 1) - { "cl", 1, 1, 6, 1 }, - -#define F_NPS_LDBIT_CL2 (F_NPS_LDBIT_CL1 + 1) - { "cl", 1, 1, 16, 1 }, - -#define F_NPS_LDBIT_X2_1 (F_NPS_LDBIT_CL2 + 1) - { "x2", 1, 2, 9, 1 }, - -#define F_NPS_LDBIT_X2_2 (F_NPS_LDBIT_X2_1 + 1) - { "x2", 1, 2, 22, 1 }, - -#define F_NPS_LDBIT_X4_1 (F_NPS_LDBIT_X2_2 + 1) - { "x4", 2, 2, 9, 1 }, - -#define F_NPS_LDBIT_X4_2 (F_NPS_LDBIT_X4_1 + 1) - { "x4", 2, 2, 22, 1 }, - -#define F_NPS_CORE (F_NPS_LDBIT_X4_2 + 1) - { "core", 1, 3, 6, 1 }, - -#define F_NPS_CLSR (F_NPS_CORE + 1) - { "clsr", 2, 3, 6, 1 }, - -#define F_NPS_ALL (F_NPS_CLSR + 1) - { "all", 3, 3, 6, 1 }, - -#define F_NPS_GIC (F_NPS_ALL + 1) - { "gic", 4, 3, 6, 1 }, - -#define F_NPS_RSPI_GIC (F_NPS_GIC + 1) - { "gic", 5, 3, 6, 1 }, -}; - -const unsigned arc_num_flag_operands = ARRAY_SIZE (arc_flag_operands); - -/* Table of the flag classes. - - The format of the table is - CLASS {FLAG_CODE}. */ -const struct arc_flag_class arc_flag_classes[] = -{ -#define C_EMPTY 0 - { F_CLASS_NONE, { F_NULL } }, - -#define C_CC_EQ (C_EMPTY + 1) - {F_CLASS_IMPLICIT | F_CLASS_COND, {F_EQUAL, F_NULL} }, - -#define C_CC_GE (C_CC_EQ + 1) - {F_CLASS_IMPLICIT | F_CLASS_COND, {F_GE, F_NULL} }, - -#define C_CC_GT (C_CC_GE + 1) - {F_CLASS_IMPLICIT | F_CLASS_COND, {F_GT, F_NULL} }, - -#define C_CC_HI (C_CC_GT + 1) - {F_CLASS_IMPLICIT | F_CLASS_COND, {F_HI, F_NULL} }, - -#define C_CC_HS (C_CC_HI + 1) - {F_CLASS_IMPLICIT | F_CLASS_COND, {F_NOTCARRY, F_NULL} }, - -#define C_CC_LE (C_CC_HS + 1) - {F_CLASS_IMPLICIT | F_CLASS_COND, {F_LE, F_NULL} }, - -#define C_CC_LO (C_CC_LE + 1) - {F_CLASS_IMPLICIT | F_CLASS_COND, {F_CARRY, F_NULL} }, - -#define C_CC_LS (C_CC_LO + 1) - {F_CLASS_IMPLICIT | F_CLASS_COND, {F_LS, F_NULL} }, - -#define C_CC_LT (C_CC_LS + 1) - {F_CLASS_IMPLICIT | F_CLASS_COND, {F_LT, F_NULL} }, - -#define C_CC_NE (C_CC_LT + 1) - {F_CLASS_IMPLICIT | F_CLASS_COND, {F_NOTEQUAL, F_NULL} }, - -#define C_AA_AB (C_CC_NE + 1) - {F_CLASS_IMPLICIT | F_CLASS_WB, {F_AB3, F_NULL} }, - -#define C_AA_AW (C_AA_AB + 1) - {F_CLASS_IMPLICIT | F_CLASS_WB, {F_AW3, F_NULL} }, - -#define C_ZZ_D (C_AA_AW + 1) - {F_CLASS_IMPLICIT | F_CLASS_ZZ, {F_SIZED, F_NULL} }, - -#define C_ZZ_H (C_ZZ_D + 1) - {F_CLASS_IMPLICIT | F_CLASS_ZZ, {F_H1, F_NULL} }, - -#define C_ZZ_B (C_ZZ_H + 1) - {F_CLASS_IMPLICIT | F_CLASS_ZZ, {F_SIZEB1, F_NULL} }, - -#define C_CC (C_ZZ_B + 1) - { F_CLASS_OPTIONAL | F_CLASS_EXTEND | F_CLASS_COND, - { F_ALWAYS, F_RA, F_EQUAL, F_ZERO, F_NOTEQUAL, - F_NOTZERO, F_POZITIVE, F_PL, F_NEGATIVE, F_MINUS, - F_CARRY, F_CARRYSET, F_LOWER, F_CARRYCLR, - F_NOTCARRY, F_HIGHER, F_OVERFLOWSET, F_OVERFLOW, - F_NOTOVERFLOW, F_OVERFLOWCLR, F_GT, F_GE, F_LT, - F_LE, F_HI, F_LS, F_PNZ, F_NJ, F_NM, F_NO_T, F_NULL } }, - -#define C_AA_ADDR3 (C_CC + 1) -#define C_AA27 (C_CC + 1) - { F_CLASS_OPTIONAL | F_CLASS_WB, { F_A3, F_AW3, F_AB3, F_AS3, F_NULL } }, -#define C_AA_ADDR9 (C_AA_ADDR3 + 1) -#define C_AA21 (C_AA_ADDR3 + 1) - { F_CLASS_OPTIONAL | F_CLASS_WB, { F_A9, F_AW9, F_AB9, F_AS9, F_NULL } }, -#define C_AA_ADDR22 (C_AA_ADDR9 + 1) -#define C_AA8 (C_AA_ADDR9 + 1) - { F_CLASS_OPTIONAL | F_CLASS_WB, { F_A22, F_AW22, F_AB22, F_AS22, F_NULL } }, - -#define C_F (C_AA_ADDR22 + 1) - { F_CLASS_OPTIONAL, { F_FLAG, F_NULL } }, -#define C_FHARD (C_F + 1) - { F_CLASS_OPTIONAL, { F_FFAKE, F_NULL } }, - -#define C_T (C_FHARD + 1) - { F_CLASS_OPTIONAL, { F_NT, F_T, F_NULL } }, -#define C_D (C_T + 1) - { F_CLASS_OPTIONAL, { F_ND, F_D, F_NULL } }, -#define C_DNZ_D (C_D + 1) - { F_CLASS_OPTIONAL, { F_DNZ_ND, F_DNZ_D, F_NULL } }, - -#define C_DHARD (C_DNZ_D + 1) - { F_CLASS_OPTIONAL, { F_DFAKE, F_NULL } }, - -#define C_DI20 (C_DHARD + 1) - { F_CLASS_OPTIONAL, { F_DI11, F_NULL }}, -#define C_DI14 (C_DI20 + 1) - { F_CLASS_OPTIONAL, { F_DI14, F_NULL }}, -#define C_DI16 (C_DI14 + 1) - { F_CLASS_OPTIONAL, { F_DI15, F_NULL }}, -#define C_DI26 (C_DI16 + 1) - { F_CLASS_OPTIONAL, { F_DI5, F_NULL }}, - -#define C_X25 (C_DI26 + 1) - { F_CLASS_OPTIONAL, { F_SIGN6, F_NULL }}, -#define C_X15 (C_X25 + 1) - { F_CLASS_OPTIONAL, { F_SIGN16, F_NULL }}, -#define C_XHARD (C_X15 + 1) -#define C_X (C_X15 + 1) - { F_CLASS_OPTIONAL, { F_SIGNX, F_NULL }}, - -#define C_ZZ13 (C_X + 1) - { F_CLASS_OPTIONAL, { F_SIZEB17, F_SIZEW17, F_H17, F_NULL}}, -#define C_ZZ23 (C_ZZ13 + 1) - { F_CLASS_OPTIONAL, { F_SIZEB7, F_SIZEW7, F_H7, F_NULL}}, -#define C_ZZ29 (C_ZZ23 + 1) - { F_CLASS_OPTIONAL, { F_SIZEB1, F_SIZEW1, F_H1, F_NULL}}, - -#define C_AS (C_ZZ29 + 1) - { F_CLASS_OPTIONAL, { F_ASFAKE, F_NULL}}, - -#define C_NE (C_AS + 1) - { F_CLASS_REQUIRED, { F_NE, F_NULL}}, - - /* ARC NPS400 Support: See comment near head of file. */ -#define C_NPS_CL (C_NE + 1) - { F_CLASS_REQUIRED, { F_NPS_CL, F_NULL}}, - -#define C_NPS_NA (C_NPS_CL + 1) - { F_CLASS_OPTIONAL, { F_NPS_NA, F_NULL}}, - -#define C_NPS_SR (C_NPS_NA + 1) - { F_CLASS_OPTIONAL, { F_NPS_SR, F_NULL}}, - -#define C_NPS_M (C_NPS_SR + 1) - { F_CLASS_OPTIONAL, { F_NPS_M, F_NULL}}, - -#define C_NPS_F (C_NPS_M + 1) - { F_CLASS_OPTIONAL, { F_NPS_FLAG, F_NULL}}, - -#define C_NPS_R (C_NPS_F + 1) - { F_CLASS_OPTIONAL, { F_NPS_R, F_NULL}}, - -#define C_NPS_SCHD_RW (C_NPS_R + 1) - { F_CLASS_REQUIRED, { F_NPS_RW, F_NPS_RD, F_NULL}}, - -#define C_NPS_SCHD_TRIG (C_NPS_SCHD_RW + 1) - { F_CLASS_REQUIRED, { F_NPS_WFT, F_NULL}}, - -#define C_NPS_SCHD_IE (C_NPS_SCHD_TRIG + 1) - { F_CLASS_OPTIONAL, { F_NPS_IE1, F_NPS_IE2, F_NPS_IE12, F_NULL}}, - -#define C_NPS_SYNC (C_NPS_SCHD_IE + 1) - { F_CLASS_REQUIRED, { F_NPS_SYNC_RD, F_NPS_SYNC_WR, F_NULL}}, - -#define C_NPS_HWS_OFF (C_NPS_SYNC + 1) - { F_CLASS_REQUIRED, { F_NPS_HWS_OFF, F_NULL}}, - -#define C_NPS_HWS_RESTORE (C_NPS_HWS_OFF + 1) - { F_CLASS_REQUIRED, { F_NPS_HWS_RESTORE, F_NULL}}, - -#define C_NPS_SX (C_NPS_HWS_RESTORE + 1) - { F_CLASS_OPTIONAL, { F_NPS_SX, F_NULL}}, - -#define C_NPS_AR_AL (C_NPS_SX + 1) - { F_CLASS_REQUIRED, { F_NPS_AR, F_NPS_AL, F_NULL}}, - -#define C_NPS_S (C_NPS_AR_AL + 1) - { F_CLASS_REQUIRED, { F_NPS_S, F_NULL}}, - -#define C_NPS_ZNCV (C_NPS_S + 1) - { F_CLASS_REQUIRED, { F_NPS_ZNCV_RD, F_NPS_ZNCV_WR, F_NULL}}, - -#define C_NPS_P0 (C_NPS_ZNCV + 1) - { F_CLASS_REQUIRED, { F_NPS_P0, F_NULL }}, - -#define C_NPS_P1 (C_NPS_P0 + 1) - { F_CLASS_REQUIRED, { F_NPS_P1, F_NULL }}, - -#define C_NPS_P2 (C_NPS_P1 + 1) - { F_CLASS_REQUIRED, { F_NPS_P2, F_NULL }}, - -#define C_NPS_P3 (C_NPS_P2 + 1) - { F_CLASS_REQUIRED, { F_NPS_P3, F_NULL }}, - -#define C_NPS_LDBIT_DI (C_NPS_P3 + 1) - { F_CLASS_REQUIRED, { F_NPS_LDBIT_DI, F_NULL }}, - -#define C_NPS_LDBIT_CL1 (C_NPS_LDBIT_DI + 1) - { F_CLASS_OPTIONAL, { F_NPS_LDBIT_CL1, F_NULL }}, - -#define C_NPS_LDBIT_CL2 (C_NPS_LDBIT_CL1 + 1) - { F_CLASS_OPTIONAL, { F_NPS_LDBIT_CL2, F_NULL }}, - -#define C_NPS_LDBIT_X_1 (C_NPS_LDBIT_CL2 + 1) - { F_CLASS_OPTIONAL, { F_NPS_LDBIT_X2_1, F_NPS_LDBIT_X4_1, F_NULL }}, - -#define C_NPS_LDBIT_X_2 (C_NPS_LDBIT_X_1 + 1) - { F_CLASS_OPTIONAL, { F_NPS_LDBIT_X2_2, F_NPS_LDBIT_X4_2, F_NULL }}, - -#define C_NPS_CORE (C_NPS_LDBIT_X_2 + 1) - { F_CLASS_REQUIRED, { F_NPS_CORE, F_NULL}}, - -#define C_NPS_CLSR (C_NPS_CORE + 1) - { F_CLASS_REQUIRED, { F_NPS_CLSR, F_NULL}}, - -#define C_NPS_ALL (C_NPS_CLSR + 1) - { F_CLASS_REQUIRED, { F_NPS_ALL, F_NULL}}, - -#define C_NPS_GIC (C_NPS_ALL + 1) - { F_CLASS_REQUIRED, { F_NPS_GIC, F_NULL}}, - -#define C_NPS_RSPI_GIC (C_NPS_GIC + 1) - { F_CLASS_REQUIRED, { F_NPS_RSPI_GIC, F_NULL}}, -}; - -const unsigned char flags_none[] = { 0 }; -const unsigned char flags_f[] = { C_F }; -const unsigned char flags_cc[] = { C_CC }; -const unsigned char flags_ccf[] = { C_CC, C_F }; - -/* The operands table. - - The format of the operands table is: - - BITS SHIFT DEFAULT_RELOC FLAGS INSERT_FUN EXTRACT_FUN. */ -const struct arc_operand arc_operands[] = -{ - /* The fields are bits, shift, insert, extract, flags. The zero - index is used to indicate end-of-list. */ -#define UNUSED 0 - { 0, 0, 0, 0, 0, 0 }, - -#define IGNORED (UNUSED + 1) - { 0, 0, 0, ARC_OPERAND_IGNORE | ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, 0, 0 }, - - /* The plain integer register fields. Used by 32 bit - instructions. */ -#define RA (IGNORED + 1) - { 6, 0, 0, ARC_OPERAND_IR, 0, 0 }, -#define RA_CHK (RA + 1) - { 6, 0, 0, ARC_OPERAND_IR, insert_ra_chk, 0 }, -#define RB (RA_CHK + 1) - { 6, 12, 0, ARC_OPERAND_IR, insert_rb, extract_rb }, -#define RB_CHK (RB + 1) - { 6, 12, 0, ARC_OPERAND_IR, insert_rb_chk, extract_rb }, -#define RC (RB_CHK + 1) - { 6, 6, 0, ARC_OPERAND_IR, 0, 0 }, -#define RBdup (RC + 1) - { 6, 12, 0, ARC_OPERAND_IR | ARC_OPERAND_DUPLICATE, insert_rb, extract_rb }, - -#define RAD (RBdup + 1) - { 6, 0, 0, ARC_OPERAND_IR | ARC_OPERAND_TRUNCATE, insert_rad, 0 }, -#define RAD_CHK (RAD + 1) - { 6, 0, 0, ARC_OPERAND_IR | ARC_OPERAND_TRUNCATE, insert_rad, 0 }, -#define RCD (RAD_CHK + 1) - { 6, 6, 0, ARC_OPERAND_IR | ARC_OPERAND_TRUNCATE, insert_rcd, 0 }, -#define RBD (RCD + 1) - { 6, 6, 0, ARC_OPERAND_IR | ARC_OPERAND_TRUNCATE, insert_rbd, extract_rb }, -#define RBDdup (RBD + 1) - { 6, 12, 0, ARC_OPERAND_IR | ARC_OPERAND_DUPLICATE | ARC_OPERAND_TRUNCATE, - insert_rbd, extract_rb }, - - /* The plain integer register fields. Used by short - instructions. */ -#define RA16 (RBDdup + 1) -#define RA_S (RBDdup + 1) - { 4, 0, 0, ARC_OPERAND_IR, insert_ras, extract_ras }, -#define RB16 (RA16 + 1) -#define RB_S (RA16 + 1) - { 4, 8, 0, ARC_OPERAND_IR, insert_rbs, extract_rbs }, -#define RB16dup (RB16 + 1) -#define RB_Sdup (RB16 + 1) - { 4, 8, 0, ARC_OPERAND_IR | ARC_OPERAND_DUPLICATE, insert_rbs, extract_rbs }, -#define RC16 (RB16dup + 1) -#define RC_S (RB16dup + 1) - { 4, 5, 0, ARC_OPERAND_IR, insert_rcs, extract_rcs }, -#define R6H (RC16 + 1) /* 6bit register field 'h' used - by V1 cpus. */ - { 6, 5, 0, ARC_OPERAND_IR, insert_rhv1, extract_rhv1 }, -#define R5H (R6H + 1) /* 5bit register field 'h' used - by V2 cpus. */ -#define RH_S (R6H + 1) /* 5bit register field 'h' used - by V2 cpus. */ - { 5, 5, 0, ARC_OPERAND_IR, insert_rhv2, extract_rhv2 }, -#define R5Hdup (R5H + 1) -#define RH_Sdup (R5H + 1) - { 5, 5, 0, ARC_OPERAND_IR | ARC_OPERAND_DUPLICATE, - insert_rhv2, extract_rhv2 }, - -#define RG (R5Hdup + 1) -#define G_S (R5Hdup + 1) - { 5, 5, 0, ARC_OPERAND_IR, insert_g_s, extract_g_s }, - - /* Fix registers. */ -#define R0 (RG + 1) -#define R0_S (RG + 1) - { 0, 0, 0, ARC_OPERAND_IR, insert_r0, extract_r0 }, -#define R1 (R0 + 1) -#define R1_S (R0 + 1) - { 1, 0, 0, ARC_OPERAND_IR, insert_r1, extract_r1 }, -#define R2 (R1 + 1) -#define R2_S (R1 + 1) - { 2, 0, 0, ARC_OPERAND_IR, insert_r2, extract_r2 }, -#define R3 (R2 + 1) -#define R3_S (R2 + 1) - { 2, 0, 0, ARC_OPERAND_IR, insert_r3, extract_r3 }, -#define RSP (R3 + 1) -#define SP_S (R3 + 1) - { 5, 0, 0, ARC_OPERAND_IR, insert_sp, extract_sp }, -#define SPdup (RSP + 1) -#define SP_Sdup (RSP + 1) - { 5, 0, 0, ARC_OPERAND_IR | ARC_OPERAND_DUPLICATE, insert_sp, extract_sp }, -#define GP (SPdup + 1) -#define GP_S (SPdup + 1) - { 5, 0, 0, ARC_OPERAND_IR, insert_gp, extract_gp }, - -#define PCL_S (GP + 1) - { 1, 0, 0, ARC_OPERAND_IR | ARC_OPERAND_NCHK, insert_pcl, extract_pcl }, - -#define BLINK (PCL_S + 1) -#define BLINK_S (PCL_S + 1) - { 5, 0, 0, ARC_OPERAND_IR, insert_blink, extract_blink }, - -#define ILINK1 (BLINK + 1) - { 5, 0, 0, ARC_OPERAND_IR, insert_ilink1, extract_ilink1 }, -#define ILINK2 (ILINK1 + 1) - { 5, 0, 0, ARC_OPERAND_IR, insert_ilink2, extract_ilink2 }, - - /* Long immediate. */ -#define LIMM (ILINK2 + 1) -#define LIMM_S (ILINK2 + 1) - { 32, 0, BFD_RELOC_ARC_32_ME, ARC_OPERAND_LIMM, insert_limm, 0 }, -#define LIMMdup (LIMM + 1) - { 32, 0, 0, ARC_OPERAND_LIMM | ARC_OPERAND_DUPLICATE, insert_limm, 0 }, - - /* Special operands. */ -#define ZA (LIMMdup + 1) -#define ZB (LIMMdup + 1) -#define ZA_S (LIMMdup + 1) -#define ZB_S (LIMMdup + 1) -#define ZC_S (LIMMdup + 1) - { 0, 0, 0, ARC_OPERAND_UNSIGNED, insert_za, 0 }, - -#define RRANGE_EL (ZA + 1) - { 4, 0, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK | ARC_OPERAND_TRUNCATE, - insert_rrange, extract_rrange}, -#define R13_EL (RRANGE_EL + 1) - { 1, 0, 0, ARC_OPERAND_IR | ARC_OPERAND_IGNORE | ARC_OPERAND_NCHK, - insert_r13el, extract_rrange }, -#define FP_EL (R13_EL + 1) - { 1, 0, 0, ARC_OPERAND_IR | ARC_OPERAND_IGNORE | ARC_OPERAND_NCHK, - insert_fpel, extract_fpel }, -#define BLINK_EL (FP_EL + 1) - { 1, 0, 0, ARC_OPERAND_IR | ARC_OPERAND_IGNORE | ARC_OPERAND_NCHK, - insert_blinkel, extract_blinkel }, -#define PCL_EL (BLINK_EL + 1) - { 1, 0, 0, ARC_OPERAND_IR | ARC_OPERAND_IGNORE | ARC_OPERAND_NCHK, - insert_pclel, extract_pclel }, - - /* Fake operand to handle the T flag. */ -#define BRAKET (PCL_EL + 1) -#define BRAKETdup (PCL_EL + 1) - { 0, 0, 0, ARC_OPERAND_FAKE | ARC_OPERAND_BRAKET, 0, 0 }, - - /* Fake operand to handle the T flag. */ -#define FKT_T (BRAKET + 1) - { 1, 3, 0, ARC_OPERAND_FAKE, insert_Ybit, 0 }, - /* Fake operand to handle the T flag. */ -#define FKT_NT (FKT_T + 1) - { 1, 3, 0, ARC_OPERAND_FAKE, insert_NYbit, 0 }, - - /* UIMM6_20 mask = 00000000000000000000111111000000. */ -#define UIMM6_20 (FKT_NT + 1) - {6, 0, 0, ARC_OPERAND_UNSIGNED, insert_uimm6_20, extract_uimm6_20}, - - /* Exactly like the above but used by relaxation. */ -#define UIMM6_20R (UIMM6_20 + 1) - {6, 0, -UIMM6_20R, ARC_OPERAND_UNSIGNED | ARC_OPERAND_PCREL, - insert_uimm6_20, extract_uimm6_20}, - - /* SIMM12_20 mask = 00000000000000000000111111222222. */ -#define SIMM12_20 (UIMM6_20R + 1) - {12, 0, 0, ARC_OPERAND_SIGNED, insert_simm12_20, extract_simm12_20}, - - /* Exactly like the above but used by relaxation. */ -#define SIMM12_20R (SIMM12_20 + 1) - {12, 0, -SIMM12_20R, ARC_OPERAND_SIGNED | ARC_OPERAND_PCREL, - insert_simm12_20, extract_simm12_20}, - - /* UIMM12_20 mask = 00000000000000000000111111222222. */ -#define UIMM12_20 (SIMM12_20R + 1) - {12, 0, 0, ARC_OPERAND_UNSIGNED, insert_simm12_20, extract_uimm12_20}, - - /* SIMM3_5_S mask = 0000011100000000. */ -#define SIMM3_5_S (UIMM12_20 + 1) - {3, 0, 0, ARC_OPERAND_SIGNED | ARC_OPERAND_NCHK, - insert_simm3s, extract_simm3s}, - - /* UIMM7_A32_11_S mask = 0000000000011111. */ -#define UIMM7_A32_11_S (SIMM3_5_S + 1) - {7, 0, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_ALIGNED32 - | ARC_OPERAND_TRUNCATE | ARC_OPERAND_IGNORE, insert_uimm7_a32_11_s, - extract_uimm7_a32_11_s}, - - /* The same as above but used by relaxation. */ -#define UIMM7_A32_11R_S (UIMM7_A32_11_S + 1) - {7, 0, -UIMM7_A32_11R_S, ARC_OPERAND_UNSIGNED | ARC_OPERAND_ALIGNED32 - | ARC_OPERAND_TRUNCATE | ARC_OPERAND_IGNORE | ARC_OPERAND_PCREL, - insert_uimm7_a32_11_s, extract_uimm7_a32_11_s}, - - /* UIMM7_9_S mask = 0000000001111111. */ -#define UIMM7_9_S (UIMM7_A32_11R_S + 1) - {7, 0, 0, ARC_OPERAND_UNSIGNED, insert_uimm7_9_s, extract_uimm7_9_s}, - - /* UIMM3_13_S mask = 0000000000000111. */ -#define UIMM3_13_S (UIMM7_9_S + 1) - {3, 0, 0, ARC_OPERAND_UNSIGNED, insert_uimm3_13_s, extract_uimm3_13_s}, - - /* Exactly like the above but used for relaxation. */ -#define UIMM3_13R_S (UIMM3_13_S + 1) - {3, 0, -UIMM3_13R_S, ARC_OPERAND_UNSIGNED | ARC_OPERAND_PCREL, - insert_uimm3_13_s, extract_uimm3_13_s}, - - /* SIMM11_A32_7_S mask = 0000000111111111. */ -#define SIMM11_A32_7_S (UIMM3_13R_S + 1) - {11, 0, BFD_RELOC_ARC_SDA16_LD2, ARC_OPERAND_SIGNED | ARC_OPERAND_ALIGNED32 - | ARC_OPERAND_TRUNCATE, insert_simm11_a32_7_s, extract_simm11_a32_7_s}, - - /* UIMM6_13_S mask = 0000000002220111. */ -#define UIMM6_13_S (SIMM11_A32_7_S + 1) - {6, 0, 0, ARC_OPERAND_UNSIGNED, insert_uimm6_13_s, extract_uimm6_13_s}, - /* UIMM5_11_S mask = 0000000000011111. */ -#define UIMM5_11_S (UIMM6_13_S + 1) - {5, 0, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_IGNORE, insert_uimm5_11_s, - extract_uimm5_11_s}, - - /* SIMM9_A16_8 mask = 00000000111111102000000000000000. */ -#define SIMM9_A16_8 (UIMM5_11_S + 1) - {9, 0, -SIMM9_A16_8, ARC_OPERAND_SIGNED | ARC_OPERAND_ALIGNED16 - | ARC_OPERAND_PCREL | ARC_OPERAND_TRUNCATE, insert_simm9_a16_8, - extract_simm9_a16_8}, - - /* UIMM6_8 mask = 00000000000000000000111111000000. */ -#define UIMM6_8 (SIMM9_A16_8 + 1) - {6, 0, 0, ARC_OPERAND_UNSIGNED, insert_uimm6_8, extract_uimm6_8}, - - /* SIMM21_A16_5 mask = 00000111111111102222222222000000. */ -#define SIMM21_A16_5 (UIMM6_8 + 1) - {21, 0, BFD_RELOC_ARC_S21H_PCREL, ARC_OPERAND_SIGNED - | ARC_OPERAND_ALIGNED16 | ARC_OPERAND_TRUNCATE | ARC_OPERAND_PCREL, - insert_simm21_a16_5, extract_simm21_a16_5}, - - /* SIMM25_A16_5 mask = 00000111111111102222222222003333. */ -#define SIMM25_A16_5 (SIMM21_A16_5 + 1) - {25, 0, BFD_RELOC_ARC_S25H_PCREL, ARC_OPERAND_SIGNED - | ARC_OPERAND_ALIGNED16 | ARC_OPERAND_TRUNCATE | ARC_OPERAND_PCREL, - insert_simm25_a16_5, extract_simm25_a16_5}, - - /* SIMM10_A16_7_S mask = 0000000111111111. */ -#define SIMM10_A16_7_S (SIMM25_A16_5 + 1) - {10, 0, -SIMM10_A16_7_S, ARC_OPERAND_SIGNED | ARC_OPERAND_ALIGNED16 - | ARC_OPERAND_TRUNCATE | ARC_OPERAND_PCREL, insert_simm10_a16_7_s, - extract_simm10_a16_7_s}, - -#define SIMM10_A16_7_Sbis (SIMM10_A16_7_S + 1) - {10, 0, -SIMM10_A16_7_Sbis, ARC_OPERAND_SIGNED | ARC_OPERAND_ALIGNED16 - | ARC_OPERAND_TRUNCATE, insert_simm10_a16_7_s, extract_simm10_a16_7_s}, - - /* SIMM7_A16_10_S mask = 0000000000111111. */ -#define SIMM7_A16_10_S (SIMM10_A16_7_Sbis + 1) - {7, 0, -SIMM7_A16_10_S, ARC_OPERAND_SIGNED | ARC_OPERAND_ALIGNED16 - | ARC_OPERAND_TRUNCATE | ARC_OPERAND_PCREL, insert_simm7_a16_10_s, - extract_simm7_a16_10_s}, - - /* SIMM21_A32_5 mask = 00000111111111002222222222000000. */ -#define SIMM21_A32_5 (SIMM7_A16_10_S + 1) - {21, 0, BFD_RELOC_ARC_S21W_PCREL, ARC_OPERAND_SIGNED | ARC_OPERAND_ALIGNED32 - | ARC_OPERAND_TRUNCATE | ARC_OPERAND_PCREL, insert_simm21_a32_5, - extract_simm21_a32_5}, - - /* SIMM25_A32_5 mask = 00000111111111002222222222003333. */ -#define SIMM25_A32_5 (SIMM21_A32_5 + 1) - {25, 0, BFD_RELOC_ARC_S25W_PCREL, ARC_OPERAND_SIGNED | ARC_OPERAND_ALIGNED32 - | ARC_OPERAND_TRUNCATE | ARC_OPERAND_PCREL, insert_simm25_a32_5, - extract_simm25_a32_5}, - - /* SIMM13_A32_5_S mask = 0000011111111111. */ -#define SIMM13_A32_5_S (SIMM25_A32_5 + 1) - {13, 0, BFD_RELOC_ARC_S13_PCREL, ARC_OPERAND_SIGNED | ARC_OPERAND_ALIGNED32 - | ARC_OPERAND_TRUNCATE | ARC_OPERAND_PCREL, insert_simm13_a32_5_s, - extract_simm13_a32_5_s}, - - /* SIMM8_A16_9_S mask = 0000000001111111. */ -#define SIMM8_A16_9_S (SIMM13_A32_5_S + 1) - {8, 0, -SIMM8_A16_9_S, ARC_OPERAND_SIGNED | ARC_OPERAND_ALIGNED16 - | ARC_OPERAND_TRUNCATE | ARC_OPERAND_PCREL, insert_simm8_a16_9_s, - extract_simm8_a16_9_s}, - -/* UIMM10_6_S_JLIOFF mask = 0000001111111111. */ -#define UIMM10_6_S_JLIOFF (SIMM8_A16_9_S + 1) - {12, 0, BFD_RELOC_ARC_JLI_SECTOFF, ARC_OPERAND_UNSIGNED - | ARC_OPERAND_ALIGNED32 | ARC_OPERAND_TRUNCATE, insert_uimm10_6_s, - extract_uimm10_6_s}, - - /* UIMM3_23 mask = 00000000000000000000000111000000. */ -#define UIMM3_23 (UIMM10_6_S_JLIOFF + 1) - {3, 0, 0, ARC_OPERAND_UNSIGNED, insert_uimm3_23, extract_uimm3_23}, - - /* UIMM10_6_S mask = 0000001111111111. */ -#define UIMM10_6_S (UIMM3_23 + 1) - {10, 0, 0, ARC_OPERAND_UNSIGNED, insert_uimm10_6_s, extract_uimm10_6_s}, - - /* UIMM6_11_S mask = 0000002200011110. */ -#define UIMM6_11_S (UIMM10_6_S + 1) - {6, 0, 0, ARC_OPERAND_UNSIGNED, insert_uimm6_11_s, extract_uimm6_11_s}, - - /* SIMM9_8 mask = 00000000111111112000000000000000. */ -#define SIMM9_8 (UIMM6_11_S + 1) - {9, 0, BFD_RELOC_ARC_SDA_LDST, ARC_OPERAND_SIGNED | ARC_OPERAND_IGNORE, - insert_simm9_8, extract_simm9_8}, - - /* The same as above but used by relaxation. */ -#define SIMM9_8R (SIMM9_8 + 1) - {9, 0, -SIMM9_8R, ARC_OPERAND_SIGNED | ARC_OPERAND_IGNORE - | ARC_OPERAND_PCREL, insert_simm9_8, extract_simm9_8}, - - /* UIMM10_A32_8_S mask = 0000000011111111. */ -#define UIMM10_A32_8_S (SIMM9_8R + 1) - {10, 0, -UIMM10_A32_8_S, ARC_OPERAND_UNSIGNED | ARC_OPERAND_ALIGNED32 - | ARC_OPERAND_TRUNCATE | ARC_OPERAND_PCREL, insert_uimm10_a32_8_s, - extract_uimm10_a32_8_s}, - - /* SIMM9_7_S mask = 0000000111111111. */ -#define SIMM9_7_S (UIMM10_A32_8_S + 1) - {9, 0, BFD_RELOC_ARC_SDA16_LD, ARC_OPERAND_SIGNED, insert_simm9_7_s, - extract_simm9_7_s}, - - /* UIMM6_A16_11_S mask = 0000000000011111. */ -#define UIMM6_A16_11_S (SIMM9_7_S + 1) - {6, 0, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_ALIGNED16 - | ARC_OPERAND_TRUNCATE | ARC_OPERAND_IGNORE, insert_uimm6_a16_11_s, - extract_uimm6_a16_11_s}, - - /* UIMM5_A32_11_S mask = 0000020000011000. */ -#define UIMM5_A32_11_S (UIMM6_A16_11_S + 1) - {5, 0, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_ALIGNED32 - | ARC_OPERAND_TRUNCATE | ARC_OPERAND_IGNORE, insert_uimm5_a32_11_s, - extract_uimm5_a32_11_s}, - - /* SIMM11_A32_13_S mask = 0000022222200111. */ -#define SIMM11_A32_13_S (UIMM5_A32_11_S + 1) - {11, 0, BFD_RELOC_ARC_SDA16_ST2, ARC_OPERAND_SIGNED | ARC_OPERAND_ALIGNED32 - | ARC_OPERAND_TRUNCATE, insert_simm11_a32_13_s, extract_simm11_a32_13_s}, - - /* UIMM7_13_S mask = 0000000022220111. */ -#define UIMM7_13_S (SIMM11_A32_13_S + 1) - {7, 0, 0, ARC_OPERAND_UNSIGNED, insert_uimm7_13_s, extract_uimm7_13_s}, - - /* UIMM6_A16_21 mask = 00000000000000000000011111000000. */ -#define UIMM6_A16_21 (UIMM7_13_S + 1) - {6, 0, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_ALIGNED16 - | ARC_OPERAND_TRUNCATE, insert_uimm6_a16_21, extract_uimm6_a16_21}, - - /* UIMM7_11_S mask = 0000022200011110. */ -#define UIMM7_11_S (UIMM6_A16_21 + 1) - {7, 0, 0, ARC_OPERAND_UNSIGNED, insert_uimm7_11_s, extract_uimm7_11_s}, - - /* UIMM7_A16_20 mask = 00000000000000000000111111000000. */ -#define UIMM7_A16_20 (UIMM7_11_S + 1) - {7, 0, -UIMM7_A16_20, ARC_OPERAND_UNSIGNED | ARC_OPERAND_ALIGNED16 - | ARC_OPERAND_TRUNCATE | ARC_OPERAND_PCREL, insert_uimm7_a16_20, - extract_uimm7_a16_20}, - - /* SIMM13_A16_20 mask = 00000000000000000000111111222222. */ -#define SIMM13_A16_20 (UIMM7_A16_20 + 1) - {13, 0, -SIMM13_A16_20, ARC_OPERAND_SIGNED | ARC_OPERAND_ALIGNED16 - | ARC_OPERAND_TRUNCATE | ARC_OPERAND_PCREL, insert_simm13_a16_20, - extract_simm13_a16_20}, - - /* UIMM8_8_S mask = 0000000011111111. */ -#define UIMM8_8_S (SIMM13_A16_20 + 1) - {8, 0, 0, ARC_OPERAND_UNSIGNED, insert_uimm8_8_s, extract_uimm8_8_s}, - - /* The same as above but used for relaxation. */ -#define UIMM8_8R_S (UIMM8_8_S + 1) - {8, 0, -UIMM8_8R_S, ARC_OPERAND_UNSIGNED | ARC_OPERAND_PCREL, - insert_uimm8_8_s, extract_uimm8_8_s}, - - /* W6 mask = 00000000000000000000111111000000. */ -#define W6 (UIMM8_8R_S + 1) - {6, 0, 0, ARC_OPERAND_SIGNED, insert_w6, extract_w6}, - - /* UIMM6_5_S mask = 0000011111100000. */ -#define UIMM6_5_S (W6 + 1) - {6, 0, 0, ARC_OPERAND_UNSIGNED, insert_uimm6_5_s, extract_uimm6_5_s}, - - /* ARC NPS400 Support: See comment near head of file. */ -#define NPS_R_DST_3B (UIMM6_5_S + 1) - { 3, 24, 0, ARC_OPERAND_IR | ARC_OPERAND_NCHK, - insert_nps_3bit_reg_at_24_dst, extract_nps_3bit_reg_at_24_dst }, - -#define NPS_R_SRC1_3B (NPS_R_DST_3B + 1) - { 3, 24, 0, ARC_OPERAND_IR | ARC_OPERAND_DUPLICATE | ARC_OPERAND_NCHK, - insert_nps_3bit_reg_at_24_dst, extract_nps_3bit_reg_at_24_dst }, - -#define NPS_R_SRC2_3B (NPS_R_SRC1_3B + 1) - { 3, 21, 0, ARC_OPERAND_IR | ARC_OPERAND_NCHK, - insert_nps_3bit_reg_at_21_src2, extract_nps_3bit_reg_at_21_src2 }, - -#define NPS_R_DST (NPS_R_SRC2_3B + 1) - { 6, 21, 0, ARC_OPERAND_IR, NULL, NULL }, - -#define NPS_R_SRC1 (NPS_R_DST + 1) - { 6, 21, 0, ARC_OPERAND_IR | ARC_OPERAND_DUPLICATE, NULL, NULL }, - -#define NPS_BITOP_DST_POS (NPS_R_SRC1 + 1) - { 5, 5, 0, ARC_OPERAND_UNSIGNED, 0, 0 }, - -#define NPS_BITOP_SRC_POS (NPS_BITOP_DST_POS + 1) - { 5, 0, 0, ARC_OPERAND_UNSIGNED, 0, 0 }, - -#define NPS_BITOP_SIZE (NPS_BITOP_SRC_POS + 1) - { 5, 10, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, - insert_nps_bitop_size, extract_nps_bitop_size }, - -#define NPS_BITOP_DST_POS_SZ (NPS_BITOP_SIZE + 1) - { 5, 0, 0, ARC_OPERAND_UNSIGNED, - insert_nps_dst_pos_and_size, extract_nps_dst_pos_and_size }, - -#define NPS_BITOP_SIZE_2B (NPS_BITOP_DST_POS_SZ + 1) - { 0, 0, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, - insert_nps_bitop_size_2b, extract_nps_bitop_size_2b }, - -#define NPS_BITOP_UIMM8 (NPS_BITOP_SIZE_2B + 1) - { 8, 0, 0, ARC_OPERAND_UNSIGNED, - insert_nps_bitop_uimm8, extract_nps_bitop_uimm8 }, - -#define NPS_UIMM16 (NPS_BITOP_UIMM8 + 1) - { 16, 0, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, - -#define NPS_SIMM16 (NPS_UIMM16 + 1) - { 16, 0, 0, ARC_OPERAND_SIGNED, NULL, NULL }, - -#define NPS_RFLT_UIMM6 (NPS_SIMM16 + 1) - { 6, 6, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, - insert_nps_rflt_uimm6, extract_nps_rflt_uimm6 }, - -#define NPS_XLDST_UIMM16 (NPS_RFLT_UIMM6 + 1) - { 16, 0, BFD_RELOC_ARC_NPS_CMEM16, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, - insert_nps_cmem_uimm16, extract_nps_cmem_uimm16 }, - -#define NPS_SRC2_POS (NPS_XLDST_UIMM16 + 1) - { 0, 0, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, - insert_nps_src2_pos, extract_nps_src2_pos }, - -#define NPS_SRC1_POS (NPS_SRC2_POS + 1) - { 0, 0, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, - insert_nps_src1_pos, extract_nps_src1_pos }, - -#define NPS_ADDB_SIZE (NPS_SRC1_POS + 1) - { 0, 0, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, - insert_nps_addb_size, extract_nps_addb_size }, - -#define NPS_ANDB_SIZE (NPS_ADDB_SIZE + 1) - { 0, 0, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, - insert_nps_andb_size, extract_nps_andb_size }, - -#define NPS_FXORB_SIZE (NPS_ANDB_SIZE + 1) - { 0, 0, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, - insert_nps_fxorb_size, extract_nps_fxorb_size }, - -#define NPS_WXORB_SIZE (NPS_FXORB_SIZE + 1) - { 0, 0, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, - insert_nps_wxorb_size, extract_nps_wxorb_size }, - -#define NPS_R_XLDST (NPS_WXORB_SIZE + 1) - { 6, 5, 0, ARC_OPERAND_IR, NULL, NULL }, - -#define NPS_DIV_UIMM4 (NPS_R_XLDST + 1) - { 4, 5, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, - -#define NPS_QCMP_SIZE (NPS_DIV_UIMM4 + 1) - { 0, 0, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, - insert_nps_qcmp_size, extract_nps_qcmp_size }, - -#define NPS_QCMP_M1 (NPS_QCMP_SIZE + 1) - { 1, 14, 0, ARC_OPERAND_UNSIGNED, NULL, extract_nps_qcmp_m1 }, - -#define NPS_QCMP_M2 (NPS_QCMP_M1 + 1) - { 1, 15, 0, ARC_OPERAND_UNSIGNED, NULL, extract_nps_qcmp_m2 }, - -#define NPS_QCMP_M3 (NPS_QCMP_M2 + 1) - { 4, 5, 0, ARC_OPERAND_UNSIGNED, NULL, extract_nps_qcmp_m3 }, - -#define NPS_CALC_ENTRY_SIZE (NPS_QCMP_M3 + 1) - { 0, 0, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, - insert_nps_calc_entry_size, extract_nps_calc_entry_size }, - -#define NPS_R_DST_3B_SHORT (NPS_CALC_ENTRY_SIZE + 1) - { 3, 8, 0, ARC_OPERAND_IR | ARC_OPERAND_NCHK, - insert_nps_3bit_reg_at_8_dst, extract_nps_3bit_reg_at_8_dst }, - -#define NPS_R_SRC1_3B_SHORT (NPS_R_DST_3B_SHORT + 1) - { 3, 8, 0, ARC_OPERAND_IR | ARC_OPERAND_DUPLICATE | ARC_OPERAND_NCHK, - insert_nps_3bit_reg_at_8_dst, extract_nps_3bit_reg_at_8_dst }, - -#define NPS_R_SRC2_3B_SHORT (NPS_R_SRC1_3B_SHORT + 1) - { 3, 5, 0, ARC_OPERAND_IR | ARC_OPERAND_NCHK, - insert_nps_3bit_reg_at_5_src2, extract_nps_3bit_reg_at_5_src2 }, - -#define NPS_BITOP_SIZE2 (NPS_R_SRC2_3B_SHORT + 1) - { 5, 25, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, - insert_nps_bitop2_size, extract_nps_bitop2_size }, - -#define NPS_BITOP_SIZE1 (NPS_BITOP_SIZE2 + 1) - { 5, 20, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, - insert_nps_bitop1_size, extract_nps_bitop1_size }, - -#define NPS_BITOP_DST_POS3_POS4 (NPS_BITOP_SIZE1 + 1) - { 5, 0, 0, ARC_OPERAND_UNSIGNED, - insert_nps_bitop_dst_pos3_pos4, extract_nps_bitop_dst_pos3_pos4 }, - -#define NPS_BITOP_DST_POS4 (NPS_BITOP_DST_POS3_POS4 + 1) - { 5, 42, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, - -#define NPS_BITOP_DST_POS3 (NPS_BITOP_DST_POS4 + 1) - { 5, 37, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, - -#define NPS_BITOP_DST_POS2 (NPS_BITOP_DST_POS3 + 1) - { 5, 15, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, - -#define NPS_BITOP_DST_POS1 (NPS_BITOP_DST_POS2 + 1) - { 5, 10, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, - -#define NPS_BITOP_SRC_POS4 (NPS_BITOP_DST_POS1 + 1) - { 5, 32, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, - -#define NPS_BITOP_SRC_POS3 (NPS_BITOP_SRC_POS4 + 1) - { 5, 20, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, - -#define NPS_BITOP_SRC_POS2 (NPS_BITOP_SRC_POS3 + 1) - { 5, 5, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, - -#define NPS_BITOP_SRC_POS1 (NPS_BITOP_SRC_POS2 + 1) - { 5, 0, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, - -#define NPS_BITOP_MOD4 (NPS_BITOP_SRC_POS1 + 1) - { 2, 0, 0, ARC_OPERAND_UNSIGNED, - insert_nps_bitop_mod4, extract_nps_bitop_mod4 }, - -#define NPS_BITOP_MOD3 (NPS_BITOP_MOD4 + 1) - { 2, 29, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, - -#define NPS_BITOP_MOD2 (NPS_BITOP_MOD3 + 1) - { 2, 27, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, - -#define NPS_BITOP_MOD1 (NPS_BITOP_MOD2 + 1) - { 2, 25, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, - -#define NPS_BITOP_INS_EXT (NPS_BITOP_MOD1 + 1) - { 5, 20, 0, ARC_OPERAND_UNSIGNED, - insert_nps_bitop_ins_ext, extract_nps_bitop_ins_ext }, - -#define NPS_FIELD_START_POS (NPS_BITOP_INS_EXT + 1) - { 3, 3, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, - -#define NPS_FIELD_SIZE (NPS_FIELD_START_POS + 1) - { 3, 6, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, - insert_nps_field_size, extract_nps_field_size }, - -#define NPS_SHIFT_FACTOR (NPS_FIELD_SIZE + 1) - { 3, 9, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, - insert_nps_shift_factor, extract_nps_shift_factor }, - -#define NPS_BITS_TO_SCRAMBLE (NPS_SHIFT_FACTOR + 1) - { 3, 12, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, - insert_nps_bits_to_scramble, extract_nps_bits_to_scramble }, - -#define NPS_SRC2_POS_5B (NPS_BITS_TO_SCRAMBLE + 1) - { 5, 5, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, - -#define NPS_BDLEN_MAX_LEN (NPS_SRC2_POS_5B + 1) - { 8, 5, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, - insert_nps_bdlen_max_len, extract_nps_bdlen_max_len }, - -#define NPS_MIN_HOFS (NPS_BDLEN_MAX_LEN + 1) - { 4, 6, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, - insert_nps_min_hofs, extract_nps_min_hofs }, - -#define NPS_PSBC (NPS_MIN_HOFS + 1) - { 1, 11, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, - -#define NPS_DPI_DST (NPS_PSBC + 1) - { 5, 11, 0, ARC_OPERAND_IR, NULL, NULL }, - - /* NPS_DPI_SRC1_3B is similar to NPS_R_SRC1_3B - but doesn't duplicate an operand. */ -#define NPS_DPI_SRC1_3B (NPS_DPI_DST + 1) - { 3, 24, 0, ARC_OPERAND_IR | ARC_OPERAND_NCHK, - insert_nps_3bit_reg_at_24_dst, extract_nps_3bit_reg_at_24_dst }, - -#define NPS_HASH_WIDTH (NPS_DPI_SRC1_3B + 1) - { 5, 6, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, - insert_nps_hash_width, extract_nps_hash_width }, - -#define NPS_HASH_PERM (NPS_HASH_WIDTH + 1) - { 3, 2, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, - -#define NPS_HASH_NONLINEAR (NPS_HASH_PERM + 1) - { 1, 5, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, - -#define NPS_HASH_BASEMAT (NPS_HASH_NONLINEAR + 1) - { 2, 0, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, - -#define NPS_HASH_LEN (NPS_HASH_BASEMAT + 1) - { 3, 2, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, - insert_nps_hash_len, extract_nps_hash_len }, - -#define NPS_HASH_OFS (NPS_HASH_LEN + 1) - { 2, 0, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, - -#define NPS_HASH_BASEMAT2 (NPS_HASH_OFS + 1) - { 1, 5, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, - -#define NPS_E4BY_INDEX0 (NPS_HASH_BASEMAT2 + 1) - { 3, 8, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, - -#define NPS_E4BY_INDEX1 (NPS_E4BY_INDEX0 + 1) - { 3, 5, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, - -#define NPS_E4BY_INDEX2 (NPS_E4BY_INDEX1 + 1) - { 3, 2, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, - -#define NPS_E4BY_INDEX3 (NPS_E4BY_INDEX2 + 1) - { 2, 0, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, - insert_nps_index3, extract_nps_index3 }, - -#define COLON (NPS_E4BY_INDEX3 + 1) - { 0, 0, 0, ARC_OPERAND_COLON | ARC_OPERAND_FAKE, NULL, NULL }, - -#define NPS_BD (COLON + 1) - { 0, 0, 0, ARC_OPERAND_ADDRTYPE | ARC_OPERAND_NCHK, - insert_nps_bd, extract_nps_bd }, - -#define NPS_JID (NPS_BD + 1) - { 0, 0, 0, ARC_OPERAND_ADDRTYPE | ARC_OPERAND_NCHK, - insert_nps_jid, extract_nps_jid }, - -#define NPS_LBD (NPS_JID + 1) - { 0, 0, 0, ARC_OPERAND_ADDRTYPE | ARC_OPERAND_NCHK, - insert_nps_lbd, extract_nps_lbd }, - -#define NPS_MBD (NPS_LBD + 1) - { 0, 0, 0, ARC_OPERAND_ADDRTYPE | ARC_OPERAND_NCHK, - insert_nps_mbd, extract_nps_mbd }, - -#define NPS_SD (NPS_MBD + 1) - { 0, 0, 0, ARC_OPERAND_ADDRTYPE | ARC_OPERAND_NCHK, - insert_nps_sd, extract_nps_sd }, - -#define NPS_SM (NPS_SD + 1) - { 0, 0, 0, ARC_OPERAND_ADDRTYPE | ARC_OPERAND_NCHK, - insert_nps_sm, extract_nps_sm }, - -#define NPS_XA (NPS_SM + 1) - { 0, 0, 0, ARC_OPERAND_ADDRTYPE | ARC_OPERAND_NCHK, - insert_nps_xa, extract_nps_xa }, - -#define NPS_XD (NPS_XA + 1) - { 0, 0, 0, ARC_OPERAND_ADDRTYPE | ARC_OPERAND_NCHK, - insert_nps_xd, extract_nps_xd }, - -#define NPS_CD (NPS_XD + 1) - { 0, 0, 0, ARC_OPERAND_ADDRTYPE | ARC_OPERAND_NCHK, - insert_nps_cd, extract_nps_cd }, - -#define NPS_CBD (NPS_CD + 1) - { 0, 0, 0, ARC_OPERAND_ADDRTYPE | ARC_OPERAND_NCHK, - insert_nps_cbd, extract_nps_cbd }, - -#define NPS_CJID (NPS_CBD + 1) - { 0, 0, 0, ARC_OPERAND_ADDRTYPE | ARC_OPERAND_NCHK, - insert_nps_cjid, extract_nps_cjid }, - -#define NPS_CLBD (NPS_CJID + 1) - { 0, 0, 0, ARC_OPERAND_ADDRTYPE | ARC_OPERAND_NCHK, - insert_nps_clbd, extract_nps_clbd }, - -#define NPS_CM (NPS_CLBD + 1) - { 0, 0, 0, ARC_OPERAND_ADDRTYPE | ARC_OPERAND_NCHK, - insert_nps_cm, extract_nps_cm }, - -#define NPS_CSD (NPS_CM + 1) - { 0, 0, 0, ARC_OPERAND_ADDRTYPE | ARC_OPERAND_NCHK, - insert_nps_csd, extract_nps_csd }, - -#define NPS_CXA (NPS_CSD + 1) - { 0, 0, 0, ARC_OPERAND_ADDRTYPE | ARC_OPERAND_NCHK, - insert_nps_cxa, extract_nps_cxa }, - -#define NPS_CXD (NPS_CXA + 1) - { 0, 0, 0, ARC_OPERAND_ADDRTYPE | ARC_OPERAND_NCHK, - insert_nps_cxd, extract_nps_cxd }, - -#define NPS_BD_TYPE (NPS_CXD + 1) - { 1, 10, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, - -#define NPS_BMU_NUM (NPS_BD_TYPE + 1) - { 3, 0, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, - insert_nps_bd_num_buff, extract_nps_bd_num_buff }, - -#define NPS_PMU_NXT_DST (NPS_BMU_NUM + 1) - { 4, 6, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, - -#define NPS_WHASH_SIZE (NPS_PMU_NXT_DST + 1) - { 6, 6, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, - insert_nps_size_16bit, extract_nps_size_16bit }, - -#define NPS_PMU_NUM_JOB (NPS_WHASH_SIZE + 1) - { 2, 6, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, - insert_nps_pmu_num_job, extract_nps_pmu_num_job }, - -#define NPS_DMA_IMM_ENTRY (NPS_PMU_NUM_JOB + 1) - { 3, 2, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, - insert_nps_imm_entry, extract_nps_imm_entry }, - -#define NPS_DMA_IMM_OFFSET (NPS_DMA_IMM_ENTRY + 1) - { 4, 10, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, - insert_nps_imm_offset, extract_nps_imm_offset }, - -#define NPS_MISC_IMM_SIZE (NPS_DMA_IMM_OFFSET + 1) - { 7, 0, 0, ARC_OPERAND_UNSIGNED , NULL, NULL }, - -#define NPS_MISC_IMM_OFFSET (NPS_MISC_IMM_SIZE + 1) - { 5, 8, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, - insert_nps_misc_imm_offset, extract_nps_misc_imm_offset }, - -#define NPS_R_DST_3B_48 (NPS_MISC_IMM_OFFSET + 1) - { 3, 40, 0, ARC_OPERAND_IR | ARC_OPERAND_NCHK, - insert_nps_3bit_reg_at_40_dst, extract_nps_3bit_reg_at_40_dst }, - -#define NPS_R_SRC1_3B_48 (NPS_R_DST_3B_48 + 1) - { 3, 40, 0, ARC_OPERAND_IR | ARC_OPERAND_DUPLICATE | ARC_OPERAND_NCHK, - insert_nps_3bit_reg_at_40_dst, extract_nps_3bit_reg_at_40_dst }, - -#define NPS_R_SRC2_3B_48 (NPS_R_SRC1_3B_48 + 1) - { 3, 37, 0, ARC_OPERAND_IR | ARC_OPERAND_NCHK, - insert_nps_3bit_reg_at_37_src2, extract_nps_3bit_reg_at_37_src2 }, - -#define NPS_R_DST_3B_64 (NPS_R_SRC2_3B_48 + 1) - { 3, 56, 0, ARC_OPERAND_IR | ARC_OPERAND_NCHK, - insert_nps_3bit_reg_at_56_dst, extract_nps_3bit_reg_at_56_dst }, - -#define NPS_R_SRC1_3B_64 (NPS_R_DST_3B_64 + 1) - { 3, 56, 0, ARC_OPERAND_IR | ARC_OPERAND_DUPLICATE | ARC_OPERAND_NCHK, - insert_nps_3bit_reg_at_56_dst, extract_nps_3bit_reg_at_56_dst }, - -#define NPS_R_SRC2_3B_64 (NPS_R_SRC1_3B_64 + 1) - { 3, 53, 0, ARC_OPERAND_IR | ARC_OPERAND_NCHK, - insert_nps_3bit_reg_at_53_src2, extract_nps_3bit_reg_at_53_src2 }, - -#define NPS_RA_64 (NPS_R_SRC2_3B_64 + 1) - { 6, 53, 0, ARC_OPERAND_IR, NULL, NULL }, - -#define NPS_RB_64 (NPS_RA_64 + 1) - { 5, 48, 0, ARC_OPERAND_IR, NULL, NULL }, - -#define NPS_RBdup_64 (NPS_RB_64 + 1) - { 5, 43, 0, ARC_OPERAND_IR | ARC_OPERAND_DUPLICATE, NULL, NULL }, - -#define NPS_RBdouble_64 (NPS_RBdup_64 + 1) - { 10, 43, 0, ARC_OPERAND_IR | ARC_OPERAND_NCHK, - insert_nps_rbdouble_64, extract_nps_rbdouble_64 }, - -#define NPS_RC_64 (NPS_RBdouble_64 + 1) - { 5, 43, 0, ARC_OPERAND_IR, NULL, NULL }, - -#define NPS_UIMM16_0_64 (NPS_RC_64 + 1) - { 16, 0, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, - -#define NPS_PROTO_SIZE (NPS_UIMM16_0_64 + 1) - { 6, 16, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, - insert_nps_proto_size, extract_nps_proto_size } -}; -const unsigned arc_num_operands = ARRAY_SIZE (arc_operands); - -const unsigned arc_Toperand = FKT_T; -const unsigned arc_NToperand = FKT_NT; - -const unsigned char arg_none[] = { 0 }; -const unsigned char arg_32bit_rarbrc[] = { RA, RB, RC }; -const unsigned char arg_32bit_zarbrc[] = { ZA, RB, RC }; -const unsigned char arg_32bit_rbrbrc[] = { RB, RBdup, RC }; -const unsigned char arg_32bit_rarbu6[] = { RA, RB, UIMM6_20 }; -const unsigned char arg_32bit_zarbu6[] = { ZA, RB, UIMM6_20 }; -const unsigned char arg_32bit_rbrbu6[] = { RB, RBdup, UIMM6_20 }; -const unsigned char arg_32bit_rbrbs12[] = { RB, RBdup, SIMM12_20 }; -const unsigned char arg_32bit_ralimmrc[] = { RA, LIMM, RC }; -const unsigned char arg_32bit_rarblimm[] = { RA, RB, LIMM }; -const unsigned char arg_32bit_zalimmrc[] = { ZA, LIMM, RC }; -const unsigned char arg_32bit_zarblimm[] = { ZA, RB, LIMM }; - -const unsigned char arg_32bit_rbrblimm[] = { RB, RBdup, LIMM }; -const unsigned char arg_32bit_ralimmu6[] = { RA, LIMM, UIMM6_20 }; -const unsigned char arg_32bit_zalimmu6[] = { ZA, LIMM, UIMM6_20 }; - -const unsigned char arg_32bit_zalimms12[] = { ZA, LIMM, SIMM12_20 }; -const unsigned char arg_32bit_ralimmlimm[] = { RA, LIMM, LIMMdup }; -const unsigned char arg_32bit_zalimmlimm[] = { ZA, LIMM, LIMMdup }; - -const unsigned char arg_32bit_rbrc[] = { RB, RC }; -const unsigned char arg_32bit_zarc[] = { ZA, RC }; -const unsigned char arg_32bit_rbu6[] = { RB, UIMM6_20 }; -const unsigned char arg_32bit_zau6[] = { ZA, UIMM6_20 }; -const unsigned char arg_32bit_rblimm[] = { RB, LIMM }; -const unsigned char arg_32bit_zalimm[] = { ZA, LIMM }; - -const unsigned char arg_32bit_limmrc[] = { LIMM, RC }; -const unsigned char arg_32bit_limmu6[] = { LIMM, UIMM6_20 }; -const unsigned char arg_32bit_limms12[] = { LIMM, SIMM12_20 }; -const unsigned char arg_32bit_limmlimm[] = { LIMM, LIMMdup }; - -const unsigned char arg_32bit_rc[] = { RC }; -const unsigned char arg_32bit_u6[] = { UIMM6_20 }; -const unsigned char arg_32bit_limm[] = { LIMM }; +#include "arcxx-opc.inc" + +/* Common combinations of FLAGS. */ +#define FLAGS_NONE { 0 } +#define FLAGS_F { C_F } +#define FLAGS_CC { C_CC } +#define FLAGS_CCF { C_CC, C_F } + +/* Common combination of arguments. */ +#define ARG_NONE { 0 } +#define ARG_32BIT_RARBRC { RA, RB, RC } +#define ARG_32BIT_ZARBRC { ZA, RB, RC } +#define ARG_32BIT_RBRBRC { RB, RBdup, RC } +#define ARG_32BIT_RARBU6 { RA, RB, UIMM6_20 } +#define ARG_32BIT_ZARBU6 { ZA, RB, UIMM6_20 } +#define ARG_32BIT_RBRBU6 { RB, RBdup, UIMM6_20 } +#define ARG_32BIT_RBRBS12 { RB, RBdup, SIMM12_20 } +#define ARG_32BIT_RALIMMRC { RA, LIMM, RC } +#define ARG_32BIT_RARBLIMM { RA, RB, LIMM } +#define ARG_32BIT_ZALIMMRC { ZA, LIMM, RC } +#define ARG_32BIT_ZARBLIMM { ZA, RB, LIMM } + +#define ARG_32BIT_RBRBLIMM { RB, RBdup, LIMM } +#define ARG_32BIT_RALIMMU6 { RA, LIMM, UIMM6_20 } +#define ARG_32BIT_ZALIMMU6 { ZA, LIMM, UIMM6_20 } + +#define ARG_32BIT_ZALIMMS12 { ZA, LIMM, SIMM12_20 } +#define ARG_32BIT_RALIMMLIMM { RA, LIMM, LIMMdup } +#define ARG_32BIT_ZALIMMLIMM { ZA, LIMM, LIMMdup } + +#define ARG_32BIT_RBRC { RB, RC } +#define ARG_32BIT_ZARC { ZA, RC } +#define ARG_32BIT_RBU6 { RB, UIMM6_20 } +#define ARG_32BIT_ZAU6 { ZA, UIMM6_20 } +#define ARG_32BIT_RBLIMM { RB, LIMM } +#define ARG_32BIT_ZALIMM { ZA, LIMM } + +/* Macro to generate 2 operand extension instruction. */ +#define EXTINSN2OPF(NAME, CPU, CLASS, SCLASS, MOP, SOP, FL) \ + { NAME, INSN2OP_BC (MOP,SOP), MINSN2OP_BC, CPU, CLASS, SCLASS, \ + ARG_32BIT_RBRC, FL }, \ + { NAME, INSN2OP_0C (MOP,SOP), MINSN2OP_0C, CPU, CLASS, SCLASS, \ + ARG_32BIT_ZARC, FL }, \ + { NAME, INSN2OP_BU (MOP,SOP), MINSN2OP_BU, CPU, CLASS, SCLASS, \ + ARG_32BIT_RBU6, FL }, \ + { NAME, INSN2OP_0U (MOP,SOP), MINSN2OP_0U, CPU, CLASS, SCLASS, \ + ARG_32BIT_ZAU6, FL }, \ + { NAME, INSN2OP_BL (MOP,SOP), MINSN2OP_BL, CPU, CLASS, SCLASS, \ + ARG_32BIT_RBLIMM, FL }, \ + { NAME, INSN2OP_0L (MOP,SOP), MINSN2OP_0L, CPU, CLASS, SCLASS, \ + ARG_32BIT_ZALIMM, FL }, + +#define EXTINSN2OP(NAME, CPU, CLASS, SCLASS, MOP, SOP) \ + EXTINSN2OPF (NAME, CPU, CLASS, SCLASS, MOP, SOP, FLAGS_F) + +/* Macro to generate 3 operand extesion instruction. */ +#define EXTINSN3OP(NAME, CPU, CLASS, SCLASS, MOP, SOP) \ + { NAME, INSN3OP_ABC (MOP,SOP), MINSN3OP_ABC, CPU, CLASS, SCLASS, \ + ARG_32BIT_RARBRC, FLAGS_F }, \ + { NAME, INSN3OP_0BC (MOP,SOP), MINSN3OP_0BC, CPU, CLASS, SCLASS, \ + ARG_32BIT_ZARBRC, FLAGS_F }, \ + { NAME, INSN3OP_CBBC (MOP,SOP), MINSN3OP_CBBC, CPU, CLASS, SCLASS, \ + ARG_32BIT_RBRBRC, FLAGS_CCF }, \ + { NAME, INSN3OP_ABU (MOP,SOP), MINSN3OP_ABU, CPU, CLASS, SCLASS, \ + ARG_32BIT_RARBU6, FLAGS_F }, \ + { NAME, INSN3OP_0BU (MOP,SOP), MINSN3OP_0BU, CPU, CLASS, SCLASS, \ + ARG_32BIT_ZARBU6, FLAGS_F }, \ + { NAME, INSN3OP_CBBU (MOP,SOP), MINSN3OP_CBBU, CPU, CLASS, SCLASS, \ + ARG_32BIT_RBRBU6, FLAGS_CCF }, \ + { NAME, INSN3OP_BBS (MOP,SOP), MINSN3OP_BBS, CPU, CLASS, SCLASS, \ + ARG_32BIT_RBRBS12, FLAGS_F }, \ + { NAME, INSN3OP_ALC (MOP,SOP), MINSN3OP_ALC, CPU, CLASS, SCLASS, \ + ARG_32BIT_RALIMMRC, FLAGS_F }, \ + { NAME, INSN3OP_ABL (MOP,SOP), MINSN3OP_ABL, CPU, CLASS, SCLASS, \ + ARG_32BIT_RARBLIMM, FLAGS_F }, \ + { NAME, INSN3OP_0LC (MOP,SOP), MINSN3OP_0LC, CPU, CLASS, SCLASS, \ + ARG_32BIT_ZALIMMRC, FLAGS_F }, \ + { NAME, INSN3OP_0BL (MOP,SOP), MINSN3OP_0BL, CPU, CLASS, SCLASS, \ + ARG_32BIT_ZARBLIMM, FLAGS_F }, \ + { NAME, INSN3OP_C0LC (MOP,SOP), MINSN3OP_C0LC, CPU, CLASS, SCLASS, \ + ARG_32BIT_ZALIMMRC, FLAGS_CCF }, \ + { NAME, INSN3OP_CBBL (MOP,SOP), MINSN3OP_CBBL, CPU, CLASS, SCLASS, \ + ARG_32BIT_RBRBLIMM, FLAGS_CCF }, \ + { NAME, INSN3OP_ALU (MOP,SOP), MINSN3OP_ALU, CPU, CLASS, SCLASS, \ + ARG_32BIT_RALIMMU6, FLAGS_F }, \ + { NAME, INSN3OP_0LU (MOP,SOP), MINSN3OP_0LU, CPU, CLASS, SCLASS, \ + ARG_32BIT_ZALIMMU6, FLAGS_F }, \ + { NAME, INSN3OP_C0LU (MOP,SOP), MINSN3OP_C0LU, CPU, CLASS, SCLASS, \ + ARG_32BIT_ZALIMMU6, FLAGS_CCF }, \ + { NAME, INSN3OP_0LS (MOP,SOP), MINSN3OP_0LS, CPU, CLASS, SCLASS, \ + ARG_32BIT_ZALIMMS12, FLAGS_F }, \ + { NAME, INSN3OP_ALL (MOP,SOP), MINSN3OP_ALL, CPU, CLASS, SCLASS, \ + ARG_32BIT_RALIMMLIMM, FLAGS_F }, \ + { NAME, INSN3OP_0LL (MOP,SOP), MINSN3OP_0LL, CPU, CLASS, SCLASS, \ + ARG_32BIT_ZALIMMLIMM, FLAGS_F }, \ + { NAME, INSN3OP_C0LL (MOP,SOP), MINSN3OP_C0LL, CPU, CLASS, SCLASS, \ + ARG_32BIT_ZALIMMLIMM, FLAGS_CCF }, /* The opcode table. @@ -2644,307 +152,19 @@ const unsigned char arg_32bit_limm[] = { LIMM }; mnemonic, so we end up with two groups for the sync instruction, the first within the core arc instruction table, and the second within the nps extension instructions. */ + const struct arc_opcode arc_opcodes[] = { #include "arc-tbl.h" #include "arc-nps400-tbl.h" -#include "arc-ext-tbl.h" - - { NULL, 0, 0, 0, 0, 0, { 0 }, { 0 } } -}; - -/* List with special cases instructions and the applicable flags. */ -const struct arc_flag_special arc_flag_special_cases[] = -{ - { "b", { F_ALWAYS, F_RA, F_EQUAL, F_ZERO, F_NOTEQUAL, F_NOTZERO, F_POZITIVE, - F_PL, F_NEGATIVE, F_MINUS, F_CARRY, F_CARRYSET, F_LOWER, F_CARRYCLR, - F_NOTCARRY, F_HIGHER, F_OVERFLOWSET, F_OVERFLOW, F_NOTOVERFLOW, - F_OVERFLOWCLR, F_GT, F_GE, F_LT, F_LE, F_HI, F_LS, F_PNZ, F_NJ, F_NM, - F_NO_T, F_NULL } }, - { "bl", { F_ALWAYS, F_RA, F_EQUAL, F_ZERO, F_NOTEQUAL, F_NOTZERO, F_POZITIVE, - F_PL, F_NEGATIVE, F_MINUS, F_CARRY, F_CARRYSET, F_LOWER, F_CARRYCLR, - F_NOTCARRY, F_HIGHER, F_OVERFLOWSET, F_OVERFLOW, F_NOTOVERFLOW, - F_OVERFLOWCLR, F_GT, F_GE, F_LT, F_LE, F_HI, F_LS, F_PNZ, F_NULL } }, - { "br", { F_ALWAYS, F_RA, F_EQUAL, F_ZERO, F_NOTEQUAL, F_NOTZERO, F_POZITIVE, - F_PL, F_NEGATIVE, F_MINUS, F_CARRY, F_CARRYSET, F_LOWER, F_CARRYCLR, - F_NOTCARRY, F_HIGHER, F_OVERFLOWSET, F_OVERFLOW, F_NOTOVERFLOW, - F_OVERFLOWCLR, F_GT, F_GE, F_LT, F_LE, F_HI, F_LS, F_PNZ, F_NULL } }, - { "j", { F_ALWAYS, F_RA, F_EQUAL, F_ZERO, F_NOTEQUAL, F_NOTZERO, F_POZITIVE, - F_PL, F_NEGATIVE, F_MINUS, F_CARRY, F_CARRYSET, F_LOWER, F_CARRYCLR, - F_NOTCARRY, F_HIGHER, F_OVERFLOWSET, F_OVERFLOW, F_NOTOVERFLOW, - F_OVERFLOWCLR, F_GT, F_GE, F_LT, F_LE, F_HI, F_LS, F_PNZ, F_NULL } }, - { "jl", { F_ALWAYS, F_RA, F_EQUAL, F_ZERO, F_NOTEQUAL, F_NOTZERO, F_POZITIVE, - F_PL, F_NEGATIVE, F_MINUS, F_CARRY, F_CARRYSET, F_LOWER, F_CARRYCLR, - F_NOTCARRY, F_HIGHER, F_OVERFLOWSET, F_OVERFLOW, F_NOTOVERFLOW, - F_OVERFLOWCLR, F_GT, F_GE, F_LT, F_LE, F_HI, F_LS, F_PNZ, F_NULL } }, - { "lp", { F_ALWAYS, F_RA, F_EQUAL, F_ZERO, F_NOTEQUAL, F_NOTZERO, F_POZITIVE, - F_PL, F_NEGATIVE, F_MINUS, F_CARRY, F_CARRYSET, F_LOWER, F_CARRYCLR, - F_NOTCARRY, F_HIGHER, F_OVERFLOWSET, F_OVERFLOW, F_NOTOVERFLOW, - F_OVERFLOWCLR, F_GT, F_GE, F_LT, F_LE, F_HI, F_LS, F_PNZ, F_NULL } }, - { "set", { F_ALWAYS, F_RA, F_EQUAL, F_ZERO, F_NOTEQUAL, F_NOTZERO, F_POZITIVE, - F_PL, F_NEGATIVE, F_MINUS, F_CARRY, F_CARRYSET, F_LOWER, F_CARRYCLR, - F_NOTCARRY, F_HIGHER, F_OVERFLOWSET, F_OVERFLOW, F_NOTOVERFLOW, - F_OVERFLOWCLR, F_GT, F_GE, F_LT, F_LE, F_HI, F_LS, F_PNZ, F_NULL } }, - { "ld", { F_SIZEB17, F_SIZEW17, F_H17, F_NULL } }, - { "st", { F_SIZEB1, F_SIZEW1, F_H1, F_NULL } } -}; - -const unsigned arc_num_flag_special = ARRAY_SIZE (arc_flag_special_cases); - -/* Relocations. */ -const struct arc_reloc_equiv_tab arc_reloc_equiv[] = -{ - { "sda", "ld", { F_ASFAKE, F_H1, F_NULL }, - BFD_RELOC_ARC_SDA_LDST, BFD_RELOC_ARC_SDA_LDST1 }, - { "sda", "st", { F_ASFAKE, F_H1, F_NULL }, - BFD_RELOC_ARC_SDA_LDST, BFD_RELOC_ARC_SDA_LDST1 }, - { "sda", "ld", { F_ASFAKE, F_SIZEW7, F_NULL }, - BFD_RELOC_ARC_SDA_LDST, BFD_RELOC_ARC_SDA_LDST1 }, - { "sda", "st", { F_ASFAKE, F_SIZEW7, F_NULL }, - BFD_RELOC_ARC_SDA_LDST, BFD_RELOC_ARC_SDA_LDST1 }, - - /* Next two entries will cover the undefined behavior ldb/stb with - address scaling. */ - { "sda", "ld", { F_ASFAKE, F_SIZEB7, F_NULL }, - BFD_RELOC_ARC_SDA_LDST, BFD_RELOC_ARC_SDA_LDST }, - { "sda", "st", { F_ASFAKE, F_SIZEB7, F_NULL }, - BFD_RELOC_ARC_SDA_LDST, BFD_RELOC_ARC_SDA_LDST}, - - { "sda", "ld", { F_ASFAKE, F_NULL }, - BFD_RELOC_ARC_SDA_LDST, BFD_RELOC_ARC_SDA_LDST2 }, - { "sda", "st", { F_ASFAKE, F_NULL }, - BFD_RELOC_ARC_SDA_LDST, BFD_RELOC_ARC_SDA_LDST2}, - { "sda", "ldd", { F_ASFAKE, F_NULL }, - BFD_RELOC_ARC_SDA_LDST, BFD_RELOC_ARC_SDA_LDST2 }, - { "sda", "std", { F_ASFAKE, F_NULL }, - BFD_RELOC_ARC_SDA_LDST, BFD_RELOC_ARC_SDA_LDST2}, - - /* Short instructions. */ - { "sda", 0, { F_NULL }, BFD_RELOC_ARC_SDA16_LD, BFD_RELOC_ARC_SDA16_LD }, - { "sda", 0, { F_NULL }, -SIMM10_A16_7_Sbis, BFD_RELOC_ARC_SDA16_LD1 }, - { "sda", 0, { F_NULL }, BFD_RELOC_ARC_SDA16_LD2, BFD_RELOC_ARC_SDA16_LD2 }, - { "sda", 0, { F_NULL }, BFD_RELOC_ARC_SDA16_ST2, BFD_RELOC_ARC_SDA16_ST2 }, - - { "sda", 0, { F_NULL }, BFD_RELOC_ARC_32_ME, BFD_RELOC_ARC_SDA32_ME }, - { "sda", 0, { F_NULL }, BFD_RELOC_ARC_SDA_LDST, BFD_RELOC_ARC_SDA_LDST }, - - { "plt", 0, { F_NULL }, BFD_RELOC_ARC_S25H_PCREL, - BFD_RELOC_ARC_S25H_PCREL_PLT }, - { "plt", 0, { F_NULL }, BFD_RELOC_ARC_S21H_PCREL, - BFD_RELOC_ARC_S21H_PCREL_PLT }, - { "plt", 0, { F_NULL }, BFD_RELOC_ARC_S25W_PCREL, - BFD_RELOC_ARC_S25W_PCREL_PLT }, - { "plt", 0, { F_NULL }, BFD_RELOC_ARC_S21W_PCREL, - BFD_RELOC_ARC_S21W_PCREL_PLT }, - - { "plt", 0, { F_NULL }, BFD_RELOC_ARC_32_ME, BFD_RELOC_ARC_PLT32 } -}; - -const unsigned arc_num_equiv_tab = ARRAY_SIZE (arc_reloc_equiv); - -const struct arc_pseudo_insn arc_pseudo_insns[] = -{ - { "push", "st", ".aw", 5, { { RC, 0, 0, 0 }, { BRAKET, 1, 0, 1 }, - { RB, 1, 28, 2 }, { SIMM9_8, 1, -4, 3 }, - { BRAKETdup, 1, 0, 4} } }, - { "pop", "ld", ".ab", 5, { { RA, 0, 0, 0 }, { BRAKET, 1, 0, 1 }, - { RB, 1, 28, 2 }, { SIMM9_8, 1, 4, 3 }, - { BRAKETdup, 1, 0, 4} } }, - - { "brgt", "brlt", NULL, 3, { { RB, 0, 0, 1 }, { RC, 0, 0, 0 }, - { SIMM9_A16_8, 0, 0, 2 } } }, - { "brgt", "brge", NULL, 3, { { RB, 0, 0, 0 }, { UIMM6_8, 0, 1, 1 }, - { SIMM9_A16_8, 0, 0, 2 } } }, - { "brgt", "brlt", NULL, 3, { { RB, 0, 0, 1 }, { LIMM, 0, 0, 0 }, - { SIMM9_A16_8, 0, 0, 2 } } }, - { "brgt", "brlt", NULL, 3, { { LIMM, 0, 0, 1 }, { RC, 0, 0, 0 }, - { SIMM9_A16_8, 0, 0, 2 } } }, - { "brgt", "brge", NULL, 3, { { LIMM, 0, 0, 0 }, { UIMM6_8, 0, 1, 1 }, - { SIMM9_A16_8, 0, 0, 2 } } }, - - { "brhi", "brlo", NULL, 3, { { RB, 0, 0, 1 }, { RC, 0, 0, 0 }, - { SIMM9_A16_8, 0, 0, 2 } } }, - { "brhi", "brhs", NULL, 3, { { RB, 0, 0, 0 }, { UIMM6_8, 0, 1, 1 }, - { SIMM9_A16_8, 0, 0, 2 } } }, - { "brhi", "brlo", NULL, 3, { { RB, 0, 0, 1 }, { LIMM, 0, 0, 0 }, - { SIMM9_A16_8, 0, 0, 2 } } }, - { "brhi", "brlo", NULL, 3, { { LIMM, 0, 0, 1 }, { RC, 0, 0, 0 }, - { SIMM9_A16_8, 0, 0, 2 } } }, - { "brhi", "brhs", NULL, 3, { { LIMM, 0, 0, 0 }, { UIMM6_8, 0, 1, 1 }, - { SIMM9_A16_8, 0, 0, 2 } } }, - - { "brle", "brge", NULL, 3, { { RB, 0, 0, 1 }, { RC, 0, 0, 0 }, - { SIMM9_A16_8, 0, 0, 2 } } }, - { "brle", "brlt", NULL, 3, { { RB, 0, 0, 0 }, { UIMM6_8, 0, 1, 1 }, - { SIMM9_A16_8, 0, 0, 2 } } }, - { "brle", "brge", NULL, 3, { { RB, 0, 0, 1 }, { LIMM, 0, 0, 0 }, - { SIMM9_A16_8, 0, 0, 2 } } }, - { "brle", "brge", NULL, 3, { { LIMM, 0, 0, 1 }, { RC, 0, 0, 0 }, - { SIMM9_A16_8, 0, 0, 2 } } }, - { "brle", "brlt", NULL, 3, { { LIMM, 0, 0, 0 }, { UIMM6_8, 0, 1, 1 }, - { SIMM9_A16_8, 0, 0, 2 } } }, - - { "brls", "brhs", NULL, 3, { { RB, 0, 0, 1 }, { RC, 0, 0, 0 }, - { SIMM9_A16_8, 0, 0, 2 } } }, - { "brls", "brlo", NULL, 3, { { RB, 0, 0, 0 }, { UIMM6_8, 0, 1, 1 }, - { SIMM9_A16_8, 0, 0, 2 } } }, - { "brls", "brhs", NULL, 3, { { RB, 0, 0, 1 }, { LIMM, 0, 0, 0 }, - { SIMM9_A16_8, 0, 0, 2 } } }, - { "brls", "brhs", NULL, 3, { { LIMM, 0, 0, 1 }, { RC, 0, 0, 0 }, - { SIMM9_A16_8, 0, 0, 2 } } }, - { "brls", "brlo", NULL, 3, { { LIMM, 0, 0, 0 }, { UIMM6_8, 0, 1, 1 }, - { SIMM9_A16_8, 0, 0, 2 } } }, -}; - -const unsigned arc_num_pseudo_insn = - sizeof (arc_pseudo_insns) / sizeof (*arc_pseudo_insns); - -const struct arc_aux_reg arc_aux_regs[] = -{ -#undef DEF -#define DEF(ADDR, CPU, SUBCLASS, NAME) \ - { ADDR, CPU, SUBCLASS, #NAME, sizeof (#NAME)-1 }, - -#include "arc-regs.h" -#undef DEF -}; - -const unsigned arc_num_aux_regs = ARRAY_SIZE (arc_aux_regs); - -/* NOTE: The order of this array MUST be consistent with 'enum - arc_rlx_types' located in tc-arc.h! */ -const struct arc_opcode arc_relax_opcodes[] = -{ - { NULL, 0x0, 0x0, 0x0, ARITH, NONE, { UNUSED }, { 0 } }, - - /* bl_s s13 11111sssssssssss. */ - { "bl_s", 0x0000F800, 0x0000F800, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 - | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, BRANCH, NONE, - { SIMM13_A32_5_S }, { 0 }}, - - /* bl<.d> s25 00001sssssssss10SSSSSSSSSSNRtttt. */ - { "bl", 0x08020000, 0xF8030000, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 - | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, BRANCH, NONE, - { SIMM25_A32_5 }, { C_D }}, - - /* b_s s10 1111000sssssssss. */ - { "b_s", 0x0000F000, 0x0000FE00, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 - | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, BRANCH, NONE, - { SIMM10_A16_7_S }, { 0 }}, - - /* b<.d> s25 00000ssssssssss1SSSSSSSSSSNRtttt. */ - { "b", 0x00010000, 0xF8010000, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 - | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, BRANCH, NONE, - { SIMM25_A16_5 }, { C_D }}, - - /* add_s c,b,u3 01101bbbccc00uuu. */ - { "add_s", 0x00006800, 0x0000F818, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 - | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, ARITH, NONE, - { RC_S, RB_S, UIMM3_13R_S }, { 0 }}, - - /* add<.f> a,b,u6 00100bbb01000000FBBBuuuuuuAAAAAA. */ - { "add", 0x20400000, 0xF8FF0000, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 - | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, ARITH, NONE, - { RA, RB, UIMM6_20R }, { C_F }}, - - /* add<.f> a,b,limm 00100bbb00000000FBBB111110AAAAAA. */ - { "add", 0x20000F80, 0xF8FF0FC0, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 - | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, ARITH, NONE, - { RA, RB, LIMM }, { C_F }}, - - /* ld_s c,b,u7 10000bbbcccuuuuu. */ - { "ld_s", 0x00008000, 0x0000F800, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 - | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, MEMORY, NONE, - { RC_S, BRAKET, RB_S, UIMM7_A32_11R_S, BRAKETdup }, { 0 }}, - - /* ld<.di><.aa><.x> a,b,s9 - 00010bbbssssssssSBBBDaaZZXAAAAAA. */ - { "ld", 0x10000000, 0xF8000000, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 - | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, MEMORY, NONE, - { RA, BRAKET, RB, SIMM9_8R, BRAKETdup }, - { C_ZZ23, C_DI20, C_AA21, C_X25 }}, - - /* ld<.di><.aa><.x> a,b,limm 00100bbbaa110ZZXDBBB111110AAAAAA. */ - { "ld", 0x20300F80, 0xF8380FC0, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 - | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, MEMORY, NONE, - { RA, BRAKET, RB, LIMM, BRAKETdup }, - { C_ZZ13, C_DI16, C_AA8, C_X15 }}, - - /* mov_s b,u8 11011bbbuuuuuuuu. */ - { "mov_s", 0x0000D800, 0x0000F800, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 - | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, MEMORY, NONE, - { RB_S, UIMM8_8R_S }, { 0 }}, - - /* mov<.f> b,s12 00100bbb10001010FBBBssssssSSSSSS. */ - { "mov", 0x208A0000, 0xF8FF0000, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 - | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, MEMORY, NONE, - { RB, SIMM12_20R }, { C_F }}, + /* Extension instruction declarations. */ + EXTINSN2OP ("dsp_fp_flt2i", ARC_OPCODE_ARCv2EM, FLOAT, QUARKSE1, 7, 43) + EXTINSN2OP ("dsp_fp_i2flt", ARC_OPCODE_ARCv2EM, FLOAT, QUARKSE1, 7, 44) + EXTINSN2OP ("dsp_fp_sqrt", ARC_OPCODE_ARCv2EM, FLOAT, QUARKSE2, 7, 45) - /* mov<.f> b,limm 00100bbb00001010FBBB111110RRRRRR. */ - { "mov", 0x200A0F80, 0xF8FF0FC0, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 - | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, MEMORY, NONE, - { RB, LIMM }, { C_F }}, + EXTINSN3OP ("dsp_fp_div", ARC_OPCODE_ARCv2EM, FLOAT, QUARKSE2, 7, 42) + EXTINSN3OP ("dsp_fp_cmp", ARC_OPCODE_ARCv2EM, FLOAT, QUARKSE1, 7, 43) - /* sub_s c,b,u3 01101bbbccc01uuu. */ - { "sub_s", 0x00006808, 0x0000F818, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 - | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, ARITH, NONE, - { RC_S, RB_S, UIMM3_13R_S }, { 0 }}, - - /* sub<.f> a,b,u6 00100bbb01000010FBBBuuuuuuAAAAAA. */ - { "sub", 0x20420000, 0xF8FF0000, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 - | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, ARITH, NONE, - { RA, RB, UIMM6_20R }, { C_F }}, - - /* sub<.f> a,b,limm 00100bbb00000010FBBB111110AAAAAA. */ - { "sub", 0x20020F80, 0xF8FF0FC0, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 - | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, ARITH, NONE, - { RA, RB, LIMM }, { C_F }}, - - /* mpy<.f> a,b,u6 00100bbb01011010FBBBuuuuuuAAAAAA. */ - { "mpy", 0x205A0000, 0xF8FF0000, ARC_OPCODE_ARC700 | ARC_OPCODE_ARCv2EM - | ARC_OPCODE_ARCv2HS, ARITH, MPY6E, { RA, RB, UIMM6_20R }, { C_F }}, - - /* mpy<.f> a,b,limm 00100bbb00011010FBBB111110AAAAAA. */ - { "mpy", 0x201A0F80, 0xF8FF0FC0, ARC_OPCODE_ARC700 | ARC_OPCODE_ARCv2EM - | ARC_OPCODE_ARCv2HS, ARITH, MPY6E, { RA, RB, LIMM }, { C_F }}, - - /* mov<.f><.cc> b,u6 00100bbb11001010FBBBuuuuuu1QQQQQ. */ - { "mov", 0x20CA0020, 0xF8FF0020, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 - | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, MEMORY, NONE, - { RB, UIMM6_20R }, { C_F, C_CC }}, - - /* mov<.f><.cc> b,limm 00100bbb11001010FBBB1111100QQQQQ. */ - { "mov", 0x20CA0F80, 0xF8FF0FE0, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 - | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, MEMORY, NONE, - { RB, LIMM }, { C_F, C_CC }}, - - /* add<.f><.cc> b,b,u6 00100bbb11000000FBBBuuuuuu1QQQQQ. */ - { "add", 0x20C00020, 0xF8FF0020, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 - | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, ARITH, NONE, - { RB, RBdup, UIMM6_20R }, { C_F, C_CC }}, - - /* add<.f><.cc> b,b,limm 00100bbb11000000FBBB1111100QQQQQ. */ - { "add", 0x20C00F80, 0xF8FF0FE0, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 - | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, ARITH, NONE, - { RB, RBdup, LIMM }, { C_F, C_CC }} + { NULL, 0, 0, 0, 0, 0, { 0 }, { 0 } } }; - -const unsigned arc_num_relax_opcodes = ARRAY_SIZE (arc_relax_opcodes); - -/* Return length of an opcode in bytes. */ - -int -arc_opcode_len (const struct arc_opcode *opcode) -{ - if (opcode->mask < 0x10000ull) - return 2; - - if (opcode->mask < 0x100000000ull) - return 4; - - if (opcode->mask < 0x1000000000000ull) - return 6; - - return 8; -} diff --git a/opcodes/arc64-opc.c b/opcodes/arc64-opc.c new file mode 100644 index 000000000000..e716a1e128d0 --- /dev/null +++ b/opcodes/arc64-opc.c @@ -0,0 +1,673 @@ +/* Opcode table for ARC64. + Copyright (C) 2022 Free Software Foundation, Inc. + + Contributed by Claudiu Zissulescu (claziss@synopsys.com) + + This file is part of libopcodes. + + This library is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + It is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ + +#include "arcxx-opc.inc" + +/* Macros required for ARCv3 floating point instructions. */ +/* Flags. */ +#define FL_NONE { 0 } +#define FL_CC { C_FPCC } + +/* Arguments. */ +#define ARG_NONE { 0 } +#define ARG_64FP_3OP { FA, FB, FC, FD } +#define ARG_128FP_3OP { FDA, FDB, FDC, FDD } +#define ARG_64FP_2OP { FA, FB, FC } +#define ARG_64FP_CMP { FB, FC } +#define ARG_128FP_2OP { FDA, FDB, FDC } +#define ARG_64FP_1OP { FA, FC } +#define ARG_64FP_SOP { FA, FB } +#define ARG_128FP_SOP { FDA, FDB } + +#define ARG_64FP_CVI2F { FA, FRB } +#define ARG_64FP_CVF2I { FRD, FC } + +/* Macros to help generating floating point pattern instructions. */ +/* Define FP_TOP. */ +#define FIELDS1(word) (word & 0x1F) +#define FIELDS2(word) (((word & 0x07) << 24) | (((word >> 3) & 0x03) << 12)) +#define FIELDS3(word) ((word & 0x1F) << 19) +#define FIELDD(word) ((word & 0x1F) << 6) +#define FIELDTOP(word) (((word & 0x01) << 5) | ((word >> 1) & 0x07) << 16) +#define FIELDP(word) ((word & 0x03) << 14) +#define MASK_32BIT(VAL) (0xffffffff & (VAL)) + +#define INSNFP3OP(TOPF, P) \ + ((0x1C << 27) | FIELDTOP (TOPF) | FIELDP (P) | (1 << 11)) +#define MINSNFP3OP \ + (MASK_32BIT (~(FIELDS1 (31) | FIELDS2 (31) | FIELDS3 (31) | FIELDD (31)))) + +/* Define FP_DOP. */ +#define FIELDDOP(ops) ((ops & 0x1f) << 16) + +#define INSNFP2OP(DOPF, P) \ + ((0x1C << 27) | FIELDDOP (DOPF) | FIELDP (P) | (1 << 5)) +#define MINSNFP2OP \ + (MASK_32BIT (~(FIELDS2 (31) | FIELDS1 (31) | FIELDD (31)))) + +/* Define FP_CVF2F. */ +#define FIELDCVTF(WORD) ((WORD & 0x03) << 16) +#define FIELDU0(BIT) (BIT & 0x01) +#define FIELDU1(BIT) (BIT & 0x02) +#define FIELDU3(BIT) (BIT & 0x08) +#define FIELDU4(BIT) (BIT & 0x10) + +#define FP_CVF2F_MACHINE(CVTF, BIT) \ + ((0x1C << 27) | (0x03 << 21) | FIELDCVTF (CVTF) \ + | (1 << 5) | (1 << 2) | FIELDU0(BIT) | FIELDU3(BIT) | FIELDU4(BIT)) +#define MFP_CVF2F (MASK_32BIT (~(FIELDS2 (31) | FIELDD (31)))) + +/* Define FP_RND. */ +#define FP_RND_MACHINE(CVTF, BIT) \ +((0x1C << 27) | (0x03 << 21) | FIELDCVTF (CVTF) | (1 << 5) | (0x03 << 1) \ + | FIELDU3(BIT)) +#define MFP_RND (MASK_32BIT (~(FIELDS2 (31) | FIELDD (31)))) + +/* Define FP_CVF2I. */ +#define FP_CVF2I_MACHINE(CVTF, BIT) ((0x1C << 27) | (0x03 << 21) \ + | FIELDCVTF (CVTF) | (1 << 5) | 1 \ + | FIELDU3(BIT) | FIELDU1(BIT)) +#define MFP_CVF2I (MASK_32BIT (~(FIELDS2 (31) | FIELDD (31)))) + +/* Define FMVVF2I. */ +#define FM_VVF2I(CVTF, BIT) ((0x1C << 27) | (0x03 << 21) | FIELDCVTF (CVTF) \ + | (1 << 5) | 1 << 4 | 1) +#define MFM_VVF2I (MASK_32BIT (~(FIELDS2 (31) | FIELDD (31)))) + +/* Define FP_SOP. */ +#define FP_SOP_MACHINE(SOPF, P) \ + ((0x1C << 27) | (0x02 << 21) | FIELDCVTF (SOPF) | FIELDP (P) | (1 << 5)) +#define MFP_SOP_MACHINE (MASK_32BIT (~(FIELDS1 (31) | FIELDD (31)))) + +/* Define FP_COP. */ +#define FP_COP_MACHINE(COPF, P) \ + ((0x1C << 27) | (0x09 << 19) | FIELDCVTF (COPF) | FIELDP (P) | (1 << 5)) +#define MFP_COP_MACHINE \ + (MASK_32BIT (~(FIELDS1 (31) | FIELDD (31) | FIELDS2(31)))) + +/* Define FP_ZOP. */ +#define INSNFPZOP(COPF) \ + ((0x1C << 27) | (0x07 << 20) | FIELDCVTF (COPF) | (1 << 5)) + +/* Define FP_VMVI. */ +#define INSNFPVMVI(WMVF, P) \ + ((0x1C << 27) | (0x05 << 20) | FIELDCVTF (WMVF) | FIELDP (P) | (1 << 5)) +#define MINSNFPCOP (MASK_32BIT (~(FIELDS1 (31) | FIELDD (31) | FIELDS2(31)))) +#define MINSNFPVMVIZ (MASK_32BIT (~(FIELDS1 (31) | FIELDD (31)))) + +/* Define FP_VMVR. */ +#define INSNFPVMVR(WMVF, P) \ + ((0x1C << 27) | (0x01 << 23) | FIELDCVTF (WMVF) | FIELDP (P) | (1 << 5)) +#define MINSNFPVMVR (MASK_32BIT (~(FIELDS1 (31) | FIELDD (31) | FIELDS2(31)))) + +/* Define FP_CVI2F. */ +#define INSNFPCVI2F(CVTF, BIT) ((0x1C << 27) | (0x07 << 21) | FIELDCVTF (CVTF) \ + | (1 << 5) | FIELDU3 (BIT) | FIELDU1 (BIT)) +#define MINSNFPCVI2F (MASK_32BIT (~(FIELDS2 (31) | FIELDD (31)))) + +/* Define FMVI2F. */ +#define INSNFMVI2F(CVTF, BIT) ((0x1C << 27) | (0x07 << 21) | FIELDCVTF (CVTF) \ + | (1 << 5) | (1 << 4)) +#define MINSNFMVI2F (MASK_32BIT (~(FIELDS2 (31) | FIELDD (31)))) + +/* Define FMVF2I. */ +#define INSNFMVF2I(CVTF, BIT) ((0x1C << 27) | (0x03 << 21) | FIELDCVTF (CVTF) \ + | (1 << 5) | (1 << 4) | (1)) +#define MINSNFMVF2I (MASK_32BIT (~(FIELDS2 (31) | FIELDD (31)))) + +/* Define FP_LOAD. */ +#define FP_LOAD_ENCODING(SIZE) (0x1C << 27 | ((SIZE & 0x03) << 1)) +#define MSK_FP_LOAD (MASK_32BIT (~(FIELDB (63) | FIELDD (31) | (0x03 << 3) \ + | (0x1FF << 15)))) + +#define FP_LSYM_ENCODING(SIZE) (0x1C << 27 | ((SIZE & 0x03) << 1) | FIELDB(62)) +#define MSK_FP_SYM (MASK_32BIT (~(FIELDD (31)))) + +/* Define FP_STORE. */ +#define FP_STORE_ENCODING(SIZE) ((0x1C << 27) | ((SIZE & 0x03) << 1) | (1)) +#define MSK_FP_STORE (MASK_32BIT (~(FIELDB (63) | FIELDD (31) | (0x03 << 3) \ + | (0x1FF << 15)))) +#define FP_SSYM_ENCODING(SIZE) (0x1C << 27 | ((SIZE & 0x03) << 1) \ + | FIELDB(62) | (1)) + +/* FP Load/Store. */ +#define FP_LOAD(NAME,SIZE) \ + { #NAME, FP_LOAD_ENCODING (SIZE), MSK_FP_LOAD, ARC_OPCODE_ARC64, LOAD, \ + NONE, { FA, BRAKET, RB, SIMM9_8, BRAKETdup }, { C_AA27 } }, \ + { #NAME, FP_LSYM_ENCODING (SIZE), MSK_FP_SYM, ARC_OPCODE_ARC64, LOAD, \ + NONE, { FA, BRAKET, LIMM, BRAKETdup }, FL_NONE }, + +#define FP_STORE(NAME,SIZE) \ + { #NAME, FP_STORE_ENCODING (SIZE), MSK_FP_STORE, ARC_OPCODE_ARC64, STORE, \ + NONE, { FA, BRAKET, RB, SIMM9_8, BRAKETdup }, { C_AA27 } }, \ + { #NAME, FP_SSYM_ENCODING (SIZE), MSK_FP_SYM, ARC_OPCODE_ARC64, LOAD, \ + NONE, { FA, BRAKET, LIMM, BRAKETdup }, FL_NONE }, + +/* Macros used to generate conversion instructions. */ +#define FMVF2I_INSN(NAME, CPU, CLASS, SCLASS, OPS, BIT, ARG) \ + { NAME, INSNFMVF2I (OPS, BIT), MINSNFMVF2I, CPU, CLASS, \ + SCLASS, ARG, FL_NONE }, + +#define FMVF2I(NAME, OPS, BIT) \ + FMVF2I_INSN (#NAME, ARC_OPCODE_ARC64, FLOAT, NONE, OPS, \ + BIT, ARG_64FP_CVF2I) + +#define FMVI2F_INSN(NAME, CPU, CLASS, SCLASS, OPS, BIT, ARG) \ + { NAME, INSNFMVI2F (OPS, BIT), MINSNFMVI2F, CPU, CLASS, \ + SCLASS, ARG, FL_NONE }, + +#define FMVI2F(NAME, OPS, BIT) \ + FMVI2F_INSN (#NAME, ARC_OPCODE_ARC64, FLOAT, NONE, OPS, \ + BIT, ARG_64FP_CVI2F) + +#define FP_RND_INSN(NAME, CPU, CLASS, SCLASS, OPS, BIT, ARG) \ + { NAME, FP_RND_MACHINE (OPS, BIT), MFP_RND, CPU, CLASS, \ + SCLASS, ARG, FL_NONE }, + +#define FP_RND(NAME, OPS, BIT) \ + FP_RND_INSN (#NAME, ARC_OPCODE_ARC64, FLOAT, NONE, OPS, \ + BIT, ARG_64FP_1OP) + +#define FP_CVF2F_INSN(NAME, CPU, CLASS, SCLASS, OPS, BIT, ARG) \ + { NAME, FP_CVF2F_MACHINE (OPS, BIT), MFP_CVF2F, CPU, CLASS, \ + SCLASS, ARG, FL_NONE }, + +#define FP_CVF2F(NAME, OPS, BIT) \ + FP_CVF2F_INSN (#NAME, ARC_OPCODE_ARC64, FLOAT, NONE, OPS, \ + BIT, ARG_64FP_1OP) + +#define FP_CVF2I_INSN(NAME, CPU, CLASS, SCLASS, OPS, BIT, ARG) \ + { NAME, FP_CVF2I_MACHINE (OPS, BIT), MFP_CVF2I, CPU, CLASS, \ + SCLASS, ARG, FL_NONE }, + +#define FP_CVF2I(NAME, OPS, BIT) \ + FP_CVF2I_INSN (#NAME, ARC_OPCODE_ARC64, FLOAT, NONE, OPS, \ + BIT, ARG_64FP_CVF2I) + +#define FP_CVI2F_INSN(NAME, CPU, CLASS, SCLASS, OPS, BIT, ARG) \ + { NAME, INSNFPCVI2F (OPS, BIT), MINSNFPCVI2F, CPU, CLASS, \ + SCLASS, ARG, FL_NONE }, + +#define FP_CVI2F(NAME, OPS, BIT) \ + FP_CVI2F_INSN (#NAME, ARC_OPCODE_ARC64, FLOAT, NONE, OPS, \ + BIT, ARG_64FP_CVI2F) + +/* Macro to generate 1 operand extension instruction. */ +#define FP_SOP_INSN(NAME, CPU, CLASS, SCLASS, OPS, PRC, ARG) \ + { NAME, FP_SOP_MACHINE (OPS, PRC), MFP_SOP_MACHINE, CPU, CLASS, SCLASS, \ + ARG, FL_NONE }, + +#define FP_SOP(NAME, OPS, PRECISION) \ + FP_SOP_INSN (#NAME, ARC_OPCODE_ARC64, FLOAT, NONE, SOPF_ ## OPS, \ + P_ ## PRECISION, ARG_64FP_SOP) + +#define FP_SOP_D(NAME, OPS, PRECISION) \ + FP_SOP_INSN (#NAME, ARC_OPCODE_ARC64, FLOAT, NONE, SOPF_ ## OPS, \ + P_ ## PRECISION, ARG_128FP_SOP) + +/* Macro to generate 2 operand extension instruction. */ +#define FP_DOP_INSN(NAME, CPU, CLASS, SCLASS, OPS, PRC, ARG) \ + { NAME, INSNFP2OP (OPS, PRC), MINSNFP2OP, CPU, CLASS, SCLASS, \ + ARG, FL_NONE }, + +#define FP_DOP(NAME, OPS, PRECISION) \ + FP_DOP_INSN (#NAME, ARC_OPCODE_ARC64, FLOAT, NONE, DOPF_ ## OPS, \ + P_ ## PRECISION, ARG_64FP_2OP) + +#define FP_DOPC_INSN(NAME, CPU, CLASS, SCLASS, OPS, PRC, ARG) \ + { NAME, INSNFP2OP (OPS, PRC) | FIELDD (0), MINSNFP2OP, CPU, \ + CLASS, SCLASS, ARG, FL_NONE }, + +#define FP_DOP_C(NAME, OPS, PRECISION) \ + FP_DOPC_INSN (#NAME, ARC_OPCODE_ARC64, FLOAT, NONE, DOPF_ ## OPS, \ + P_ ## PRECISION, ARG_64FP_CMP) + +#define FP_DOP_D(NAME, OPS, PRECISION) \ + FP_DOP_INSN (#NAME, ARC_OPCODE_ARC64, FLOAT, NONE, DOPF_ ## OPS, \ + P_ ## PRECISION, ARG_128FP_2OP) + +/* Macro to generate 3 operand generic instruction. */ +#define FP_TOP_INSN(NAME, CPU, CLASS, SCLASS, TOPF, P, ARG) \ + { NAME, INSNFP3OP (TOPF, P), MINSNFP3OP, CPU, CLASS, SCLASS, \ + ARG, FL_NONE }, + +#define FP_TOP(NAME, OPS, PRECISION) \ + FP_TOP_INSN (#NAME, ARC_OPCODE_ARC64, FLOAT, NONE, TOPF_ ## OPS, \ + P_ ## PRECISION, ARG_64FP_3OP) + +#define FP_TOP_D(NAME, OPS, PRECISION) \ + FP_TOP_INSN (#NAME, ARC_OPCODE_ARC64, FLOAT, NONE, TOPF_ ## OPS, \ + P_ ## PRECISION, ARG_128FP_3OP) + +/* Conditional mov instructions. */ +#define FP_COP_INSN(NAME, CPU, CLASS, SCLASS, OPS, PRC, ARG) \ + { NAME, FP_COP_MACHINE (OPS, PRC), MFP_COP_MACHINE, CPU, CLASS, SCLASS, \ + ARG, FL_CC }, + +#define FP_COP(NAME, OPS, PRECISION) \ + FP_COP_INSN (#NAME, ARC_OPCODE_ARC64, FLOAT, NONE, COPF_ ## OPS, \ + P_ ## PRECISION, ARG_64FP_SOP) + +#define FP_EXT(NAME, PRECISION) \ + {#NAME, INSNFPVMVI (0x00, P_ ## PRECISION), MINSNFPCOP, \ + ARC_OPCODE_ARC64, FLOAT, NONE, { FA, FB, BRAKET, UIMM5_FP, \ + BRAKETdup }, FL_NONE }, \ + {#NAME, INSNFPVMVR (0x00, P_ ## PRECISION), MINSNFPVMVR, \ + ARC_OPCODE_ARC64, FLOAT, NONE, { FA, FB, BRAKET, FRB, BRAKETdup}, \ + FL_NONE }, + +#define FP_INS(NAME, PRECISION) \ + {#NAME, INSNFPVMVI (0x01, P_ ## PRECISION), MINSNFPCOP, \ + ARC_OPCODE_ARC64, FLOAT, NONE, { FA, BRAKET, UIMM5_FP, BRAKETdup, \ + FB }, FL_NONE }, \ + {#NAME, INSNFPVMVR (0x01, P_ ## PRECISION), MINSNFPVMVR, \ + ARC_OPCODE_ARC64, FLOAT, NONE, { FA, BRAKET, FRB, BRAKETdup, \ + FB }, FL_NONE }, + +#define FP_REP(NAME, PRECISION) \ + {#NAME, INSNFPVMVI (0x02, P_ ## PRECISION) | FIELDS2 (0x00), \ + MINSNFPVMVIZ, ARC_OPCODE_ARC64, FLOAT, NONE, { FA, FB }, FL_NONE }, + + +/* Common combinations of FLAGS. */ +#define FLAGS_NONE { 0 } +#define FLAGS_F { C_F } +#define FLAGS_CC { C_CC } +#define FLAGS_CCF { C_CC, C_F } + +/* Common combination of arguments. */ +#define ARG_NONE { 0 } +#define ARG_32BIT_RARBRC { RA, RB, RC } +#define ARG_32BIT_ZARBRC { ZA, RB, RC } +#define ARG_32BIT_RBRBRC { RB, RBdup, RC } +#define ARG_32BIT_RARBU6 { RA, RB, UIMM6_20 } +#define ARG_32BIT_ZARBU6 { ZA, RB, UIMM6_20 } +#define ARG_32BIT_RBRBU6 { RB, RBdup, UIMM6_20 } +#define ARG_32BIT_RBRBS12 { RB, RBdup, SIMM12_20 } +#define ARG_32BIT_RALIMMRC { RA, LIMM, RC } +#define ARG_32BIT_RARBLIMM { RA, RB, LIMM } +#define ARG_32BIT_ZALIMMRC { ZA, LIMM, RC } +#define ARG_32BIT_ZARBLIMM { ZA, RB, LIMM } + +#define ARG_32BIT_RBRBLIMM { RB, RBdup, LIMM } +#define ARG_32BIT_RALIMMU6 { RA, LIMM, UIMM6_20 } +#define ARG_32BIT_ZALIMMU6 { ZA, LIMM, UIMM6_20 } + +#define ARG_32BIT_ZALIMMS12 { ZA, LIMM, SIMM12_20 } +#define ARG_32BIT_RALIMMLIMM { RA, LIMM, LIMMdup } +#define ARG_32BIT_ZALIMMLIMM { ZA, LIMM, LIMMdup } + +#define ARG_32BIT_RBRC { RB, RC } +#define ARG_32BIT_ZARC { ZA, RC } +#define ARG_32BIT_RBU6 { RB, UIMM6_20 } +#define ARG_32BIT_ZAU6 { ZA, UIMM6_20 } +#define ARG_32BIT_RBLIMM { RB, LIMM } +#define ARG_32BIT_ZALIMM { ZA, LIMM } + +/* Macro to generate 2 operand extension instruction. */ +#define EXTINSN2OPF(NAME, CPU, CLASS, SCLASS, MOP, SOP, FL) \ + { NAME, INSN2OP_BC (MOP,SOP), MINSN2OP_BC, CPU, CLASS, SCLASS, \ + ARG_32BIT_RBRC, FL }, \ + { NAME, INSN2OP_0C (MOP,SOP), MINSN2OP_0C, CPU, CLASS, SCLASS, \ + ARG_32BIT_ZARC, FL }, \ + { NAME, INSN2OP_BU (MOP,SOP), MINSN2OP_BU, CPU, CLASS, SCLASS, \ + ARG_32BIT_RBU6, FL }, \ + { NAME, INSN2OP_0U (MOP,SOP), MINSN2OP_0U, CPU, CLASS, SCLASS, \ + ARG_32BIT_ZAU6, FL }, \ + { NAME, INSN2OP_BL (MOP,SOP), MINSN2OP_BL, CPU, CLASS, SCLASS, \ + ARG_32BIT_RBLIMM, FL }, \ + { NAME, INSN2OP_0L (MOP,SOP), MINSN2OP_0L, CPU, CLASS, SCLASS, \ + ARG_32BIT_ZALIMM, FL }, + +#define EXTINSN2OP(NAME, CPU, CLASS, SCLASS, MOP, SOP) \ + EXTINSN2OPF(NAME, CPU, CLASS, SCLASS, MOP, SOP, FLAGS_F) + +/* Macro to generate 3 operand extesion instruction. */ +#define EXTINSN3OP(NAME, CPU, CLASS, SCLASS, MOP, SOP) \ + { NAME, INSN3OP_ABC (MOP,SOP), MINSN3OP_ABC, CPU, CLASS, SCLASS, \ + ARG_32BIT_RARBRC, FLAGS_F }, \ + { NAME, INSN3OP_0BC (MOP,SOP), MINSN3OP_0BC, CPU, CLASS, SCLASS, \ + ARG_32BIT_ZARBRC, FLAGS_F }, \ + { NAME, INSN3OP_CBBC (MOP,SOP), MINSN3OP_CBBC, CPU, CLASS, SCLASS, \ + ARG_32BIT_RBRBRC, FLAGS_CCF }, \ + { NAME, INSN3OP_ABU (MOP,SOP), MINSN3OP_ABU, CPU, CLASS, SCLASS, \ + ARG_32BIT_RARBU6, FLAGS_F }, \ + { NAME, INSN3OP_0BU (MOP,SOP), MINSN3OP_0BU, CPU, CLASS, SCLASS, \ + ARG_32BIT_ZARBU6, FLAGS_F }, \ + { NAME, INSN3OP_CBBU (MOP,SOP), MINSN3OP_CBBU, CPU, CLASS, SCLASS, \ + ARG_32BIT_RBRBU6, FLAGS_CCF }, \ + { NAME, INSN3OP_BBS (MOP,SOP), MINSN3OP_BBS, CPU, CLASS, SCLASS, \ + ARG_32BIT_RBRBS12, FLAGS_F }, \ + { NAME, INSN3OP_ALC (MOP,SOP), MINSN3OP_ALC, CPU, CLASS, SCLASS, \ + ARG_32BIT_RALIMMRC, FLAGS_F }, \ + { NAME, INSN3OP_ABL (MOP,SOP), MINSN3OP_ABL, CPU, CLASS, SCLASS, \ + ARG_32BIT_RARBLIMM, FLAGS_F }, \ + { NAME, INSN3OP_0LC (MOP,SOP), MINSN3OP_0LC, CPU, CLASS, SCLASS, \ + ARG_32BIT_ZALIMMRC, FLAGS_F }, \ + { NAME, INSN3OP_0BL (MOP,SOP), MINSN3OP_0BL, CPU, CLASS, SCLASS, \ + ARG_32BIT_ZARBLIMM, FLAGS_F }, \ + { NAME, INSN3OP_C0LC (MOP,SOP), MINSN3OP_C0LC, CPU, CLASS, SCLASS, \ + ARG_32BIT_ZALIMMRC, FLAGS_CCF }, \ + { NAME, INSN3OP_CBBL (MOP,SOP), MINSN3OP_CBBL, CPU, CLASS, SCLASS, \ + ARG_32BIT_RBRBLIMM, FLAGS_CCF }, \ + { NAME, INSN3OP_ALU (MOP,SOP), MINSN3OP_ALU, CPU, CLASS, SCLASS, \ + ARG_32BIT_RALIMMU6, FLAGS_F }, \ + { NAME, INSN3OP_0LU (MOP,SOP), MINSN3OP_0LU, CPU, CLASS, SCLASS, \ + ARG_32BIT_ZALIMMU6, FLAGS_F }, \ + { NAME, INSN3OP_C0LU (MOP,SOP), MINSN3OP_C0LU, CPU, CLASS, SCLASS, \ + ARG_32BIT_ZALIMMU6, FLAGS_CCF }, \ + { NAME, INSN3OP_0LS (MOP,SOP), MINSN3OP_0LS, CPU, CLASS, SCLASS, \ + ARG_32BIT_ZALIMMS12, FLAGS_F }, \ + { NAME, INSN3OP_ALL (MOP,SOP), MINSN3OP_ALL, CPU, CLASS, SCLASS, \ + ARG_32BIT_RALIMMLIMM, FLAGS_F }, \ + { NAME, INSN3OP_0LL (MOP,SOP), MINSN3OP_0LL, CPU, CLASS, SCLASS, \ + ARG_32BIT_ZALIMMLIMM, FLAGS_F }, \ + { NAME, INSN3OP_C0LL (MOP,SOP), MINSN3OP_C0LL, CPU, CLASS, SCLASS, \ + ARG_32BIT_ZALIMMLIMM, FLAGS_CCF }, + +/* The opcode table. + + The format of the opcode table is: + + NAME OPCODE MASK CPU CLASS SUBCLASS { OPERANDS } { FLAGS }. + + The table is organised such that, where possible, all instructions with + the same mnemonic are together in a block. When the assembler searches + for a suitable instruction the entries are checked in table order, so + more specific, or specialised cases should appear earlier in the table. + + As an example, consider two instructions 'add a,b,u6' and 'add + a,b,limm'. The first takes a 6-bit immediate that is encoded within the + 32-bit instruction, while the second takes a 32-bit immediate that is + encoded in a follow-on 32-bit, making the total instruction length + 64-bits. In this case the u6 variant must appear first in the table, as + all u6 immediates could also be encoded using the 'limm' extension, + however, we want to use the shorter instruction wherever possible. + + It is possible though to split instructions with the same mnemonic into + multiple groups. However, the instructions are still checked in table + order, even across groups. The only time that instructions with the + same mnemonic should be split into different groups is when different + variants of the instruction appear in different architectures, in which + case, grouping all instructions from a particular architecture together + might be preferable to merging the instruction into the main instruction + table. + + An example of this split instruction groups can be found with the 'sync' + instruction. The core arc architecture provides a 'sync' instruction, + while the nps instruction set extension provides 'sync.rd' and + 'sync.wr'. The rd/wr flags are instruction flags, not part of the + mnemonic, so we end up with two groups for the sync instruction, the + first within the core arc instruction table, and the second within the + nps extension instructions. */ + +const struct arc_opcode arc_opcodes[] = +{ +#include "arc64-tbl.h" + + FP_TOP (fhmadd , FMADD , HALF) + FP_TOP (fhmsub , FMSUB , HALF) + FP_TOP (fhnmadd, FNMADD, HALF) + FP_TOP (fhnmsub, FNMSUB, HALF) + + FP_TOP (fsmadd , FMADD , SINGLE) + FP_TOP (fsmsub , FMSUB , SINGLE) + FP_TOP (fsnmadd, FNMADD, SINGLE) + FP_TOP (fsnmsub, FNMSUB, SINGLE) + + FP_TOP (fdmadd , FMADD , DOUBLE) + FP_TOP (fdmsub , FMSUB , DOUBLE) + FP_TOP (fdnmadd, FNMADD, DOUBLE) + FP_TOP (fdnmsub, FNMSUB, DOUBLE) + + /* Vectors. */ + FP_TOP (vfhmadd , VFMADD , HALF) + FP_TOP (vfhmsub , VFMSUB , HALF) + FP_TOP (vfhnmadd, VFNMADD, HALF) + FP_TOP (vfhnmsub, VFNMSUB, HALF) + FP_TOP (vfhmadds , VFMADDS , HALF) + FP_TOP (vfhmsubs , VFMSUBS , HALF) + FP_TOP (vfhnmadds, VFNMADDS, HALF) + FP_TOP (vfhnmsubs, VFNMSUBS, HALF) + + FP_TOP (vfsmadd , VFMADD , SINGLE) + FP_TOP (vfsmsub , VFMSUB , SINGLE) + FP_TOP (vfsnmadd, VFNMADD, SINGLE) + FP_TOP (vfsnmsub, VFNMSUB, SINGLE) + FP_TOP (vfsmadds , VFMADDS , SINGLE) + FP_TOP (vfsmsubs , VFMSUBS , SINGLE) + FP_TOP (vfsnmadds, VFNMADDS, SINGLE) + FP_TOP (vfsnmsubs, VFNMSUBS, SINGLE) + + FP_TOP_D (vfdmadd , VFMADD , DOUBLE) + FP_TOP_D (vfdmsub , VFMSUB , DOUBLE) + FP_TOP_D (vfdnmadd, VFNMADD, DOUBLE) + FP_TOP_D (vfdnmsub, VFNMSUB, DOUBLE) + FP_TOP_D (vfdmadds , VFMADDS , DOUBLE) + FP_TOP_D (vfdmsubs , VFMSUBS , DOUBLE) + FP_TOP_D (vfdnmadds, VFNMADDS, DOUBLE) + FP_TOP_D (vfdnmsubs, VFNMSUBS, DOUBLE) + + /* 2OPS. */ + FP_DOP (fhadd , FADD , HALF) + FP_DOP (fhsub , FSUB , HALF) + FP_DOP (fhmul , FMUL , HALF) + FP_DOP (fhdiv , FDIV , HALF) + FP_DOP (fhmin , FMIN , HALF) + FP_DOP (fhmax , FMAX , HALF) + FP_DOP (fhsgnj , FSGNJ , HALF) + FP_DOP (fhsgnjn, FSGNJN, HALF) + FP_DOP (fhsgnjx, FSGNJX, HALF) + + FP_DOP (fsadd , FADD , SINGLE) + FP_DOP (fssub , FSUB , SINGLE) + FP_DOP (fsmul , FMUL , SINGLE) + FP_DOP (fsdiv , FDIV , SINGLE) + FP_DOP (fsmin , FMIN , SINGLE) + FP_DOP (fsmax , FMAX , SINGLE) + FP_DOP (fssgnj , FSGNJ , SINGLE) + FP_DOP (fssgnjn, FSGNJN, SINGLE) + FP_DOP (fssgnjx, FSGNJX, SINGLE) + + FP_DOP (fdadd , FADD , DOUBLE) + FP_DOP (fdsub , FSUB , DOUBLE) + FP_DOP (fdmul , FMUL , DOUBLE) + FP_DOP (fddiv , FDIV , DOUBLE) + FP_DOP (fdmin , FMIN , DOUBLE) + FP_DOP (fdmax , FMAX , DOUBLE) + FP_DOP (fdsgnj , FSGNJ , DOUBLE) + FP_DOP (fdsgnjn, FSGNJN, DOUBLE) + FP_DOP (fdsgnjx, FSGNJX, DOUBLE) + + FP_DOP_C (fhcmp , FCMP , HALF) + FP_DOP_C (fhcmpf, FCMPF, HALF) + FP_DOP_C (fscmp , FCMP , SINGLE) + FP_DOP_C (fscmpf, FCMPF, SINGLE) + FP_DOP_C (fdcmp , FCMP , DOUBLE) + FP_DOP_C (fdcmpf, FCMPF, DOUBLE) + + /* Vectors. */ + FP_DOP (vfhadd , VFADD , HALF) + FP_DOP (vfhsub , VFSUB , HALF) + FP_DOP (vfhmul , VFMUL , HALF) + FP_DOP (vfhdiv , VFDIV , HALF) + FP_DOP (vfhadds, VFADDS, HALF) + FP_DOP (vfhsubs, VFSUBS, HALF) + FP_DOP (vfhmuls, VFMULS, HALF) + FP_DOP (vfhdivs, VFDIVS, HALF) + + FP_DOP (vfhunpkl , VFUNPKL , HALF) + FP_DOP (vfhunpkm , VFUNPKM , HALF) + FP_DOP (vfhpackl , VFPACKL , HALF) + FP_DOP (vfhpackm , VFPACKM , HALF) + FP_DOP (vfhbflyl , VFBFLYL , HALF) + FP_DOP (vfhbflym , VFBFLYM , HALF) + FP_DOP (vfhaddsub, VFADDSUB, HALF) + FP_DOP (vfhsubadd, VFSUBADD, HALF) + + FP_DOP (vfsadd , VFADD , SINGLE) + FP_DOP (vfssub , VFSUB , SINGLE) + FP_DOP (vfsmul , VFMUL , SINGLE) + FP_DOP (vfsdiv , VFDIV , SINGLE) + FP_DOP (vfsadds, VFADDS, SINGLE) + FP_DOP (vfssubs, VFSUBS, SINGLE) + FP_DOP (vfsmuls, VFMULS, SINGLE) + FP_DOP (vfsdivs, VFDIVS, SINGLE) + + FP_DOP (vfsunpkl , VFUNPKL , SINGLE) + FP_DOP (vfsunpkm , VFUNPKM , SINGLE) + FP_DOP (vfspackl , VFPACKL , SINGLE) + FP_DOP (vfspackm , VFPACKM , SINGLE) + FP_DOP (vfsbflyl , VFBFLYL , SINGLE) + FP_DOP (vfsbflym , VFBFLYM , SINGLE) + FP_DOP (vfsaddsub, VFADDSUB, SINGLE) + FP_DOP (vfssubadd, VFSUBADD, SINGLE) + + FP_DOP_D (vfdadd , VFADD , DOUBLE) + FP_DOP_D (vfdsub , VFSUB , DOUBLE) + FP_DOP_D (vfdmul , VFMUL , DOUBLE) + FP_DOP_D (vfddiv , VFDIV , DOUBLE) + FP_DOP_D (vfdadds, VFADDS, DOUBLE) + FP_DOP_D (vfdsubs, VFSUBS, DOUBLE) + FP_DOP_D (vfdmuls, VFMULS, DOUBLE) + FP_DOP_D (vfddivs, VFDIVS, DOUBLE) + + FP_DOP_D (vfdunpkl , VFUNPKL , DOUBLE) + FP_DOP_D (vfdunpkm , VFUNPKM , DOUBLE) + FP_DOP_D (vfdpackl , VFPACKL , DOUBLE) + FP_DOP_D (vfdpackm , VFPACKM , DOUBLE) + FP_DOP_D (vfdbflyl , VFBFLYL , DOUBLE) + FP_DOP_D (vfdbflym , VFBFLYM , DOUBLE) + FP_DOP_D (vfdaddsub, VFADDSUB, DOUBLE) + FP_DOP_D (vfdsubadd, VFSUBADD, DOUBLE) + + FP_SOP (fhsqrt, FSQRT, HALF) + FP_SOP (fssqrt, FSQRT, SINGLE) + FP_SOP (fdsqrt, FSQRT, DOUBLE) + FP_SOP (vfhsqrt, VFSQRT, HALF) + FP_SOP (vfssqrt, VFSQRT, SINGLE) + FP_SOP_D (vfdsqrt, VFSQRT,DOUBLE) + + FP_SOP (vfhexch, VFEXCH, HALF) + FP_SOP (vfsexch, VFEXCH, SINGLE) + FP_SOP_D (vfdexch, VFEXCH, DOUBLE) + + FP_COP (fhmov, FMOV, HALF) + FP_COP (fsmov, FMOV, SINGLE) + FP_COP (fdmov, FMOV, DOUBLE) + FP_COP (vfhmov, VFMOV, HALF) + FP_COP (vfsmov, VFMOV, SINGLE) + FP_COP (vfdmov, VFMOV, DOUBLE) + + FP_CVI2F (fuint2s, FUINT2S, 0x00) + FP_CVI2F (fuint2d, FUINT2D, 0x00) + FP_CVI2F (ful2s, FUL2S, 0x00) + FP_CVI2F (ful2d, FUL2D, 0x00) + + FP_CVF2I (fs2uint, FS2UINT, 0x01) + FP_CVF2I (fs2ul, FS2UL, 0x01) + FP_CVF2I (fd2uint, FD2UINT, 0x01) + FP_CVF2I (fd2ul, FD2UL, 0x01) + + FP_CVI2F (fint2s, FINT2S, 0x02) + FP_CVI2F (fint2d, FINT2D, 0x02) + FP_CVI2F (fl2s, FL2S, 0x02) + FP_CVI2F (fl2d, FL2D, 0x02) + + FP_CVF2I (fs2int, FS2INT, 0x03) + FP_CVF2I (fs2l, FS2L, 0x03) + FP_CVF2I (fd2int, FD2INT, 0x03) + FP_CVF2I (fd2l, FD2L, 0x03) + + FP_CVF2F (fs2d, FS2D, 0x04) + FP_CVF2F (fd2s, FD2S, 0x04) + + FP_RND (fsrnd, FSRND, 0x06) + FP_RND (fdrnd, FDRND, 0x06) + + FP_CVF2I (fs2uint_rz, F2UINT_RZ, 0x09) + FP_CVF2I (fs2ul_rz, FS2UL_RZ, 0x09) + FP_CVF2I (fd2uint_rz, FD2UINT_RZ, 0x09) + FP_CVF2I (fd2ul_rz, FD2UL_RZ, 0x09) + + FP_CVF2I (fs2int_rz, FSINT_RZ, 0x0B) + FP_CVF2I (fs2l_rz, FS2L_RZ, 0x0B) + FP_CVF2I (fd2int_rz, FD2INT_RZ, 0x0B) + FP_CVF2I (fd2l_rz, FD2L_RZ, 0x0B) + + FP_RND (fsrnd_rz, FSRND_RZ, 0x0E) + FP_RND (fdrnd_rz, FDRND_RZ, 0x0E) + + FMVI2F (fmvi2s, FMVI2S, 0x10) + FMVI2F (fmvl2d, FMVL2D, 0x10) + + FMVF2I (fmvs2i, FMVS2I, 0x11) + FMVF2I (fmvd2l, FMVD2L, 0x11) + + FP_CVF2F (fs2h, FS2H, 0x14) + FP_CVF2F (fh2s, FH2S, 0x15) + FP_CVF2F (fs2h_rz, FS2H_RZ, 0x1C) + + FP_LOAD (fld16, 0x02) + FP_LOAD (fld32, 0x00) + FP_LOAD (fld64, 0x01) + FP_LOAD (fld128, 0x03) + + FP_STORE (fst16, 0x02) + FP_STORE (fst32, 0x00) + FP_STORE (fst64, 0x01) + FP_STORE (fst128, 0x03) + + FP_EXT (vfhext, HALF) + FP_EXT (vfsext, SINGLE) + FP_EXT (vfdext, DOUBLE) + + FP_INS (vfhins, HALF) + FP_INS (vfsins, SINGLE) + FP_INS (vfdins, DOUBLE) + + FP_REP (vfhrep, HALF) + FP_REP (vfsrep, SINGLE) + FP_REP (vfdrep, DOUBLE) + +#undef FLAGS_F +#define FLAGS_F { 0 } + +#undef FLAGS_CCF +#define FLAGS_CCF { C_CC } + +#undef FIELDF +#define FIELDF 0x0 + +#undef HARD_FIELDF +#define HARD_FIELDF (0x01 << 15) + + EXTINSN3OP ("vpack2wl", ARC_OPCODE_ARC64, MOVE, NONE, 5, 0x38) + EXTINSN3OP ("vpack2wm", ARC_OPCODE_ARC64, MOVE, NONE, 5, 0x39) + +#undef HARD_FIELDF +#define HARD_FIELDF (0x0) + + EXTINSN3OP ("vmax2", ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, 4, 0x0B) + EXTINSN3OP ("vmin2", ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, 4, 0x11) + + { NULL, 0, 0, 0, 0, 0, { 0 }, { 0 } } +}; diff --git a/opcodes/arc64-tbl.h b/opcodes/arc64-tbl.h new file mode 100644 index 000000000000..8cc394e45ba5 --- /dev/null +++ b/opcodes/arc64-tbl.h @@ -0,0 +1,12068 @@ +/* ARC64 instruction defintions. + Copyright (C) 2022 Free Software Foundation, Inc. + + Contributed by Claudiu Zissulescu (claziss@synopsys.com) + + This file is part of libopcodes. + + This library is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + It is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* abs<.f> b,c 00100bbb00101111FBBBCCCCCC001001. */ +{ "abs", 0x202F0009, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { C_F }}, + +/* abs<.f> 0,c 0010011000101111F111CCCCCC001001. */ +{ "abs", 0x262F7009, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RC }, { C_F }}, + +/* abs<.f> b,u6 00100bbb01101111FBBBuuuuuu001001. */ +{ "abs", 0x206F0009, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { C_F }}, + +/* abs<.f> 0,u6 0010011001101111F111uuuuuu001001. */ +{ "abs", 0x266F7009, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, UIMM6_20 }, { C_F }}, + +/* abs<.f> b,limm 00100bbb00101111FBBB111110001001. */ +{ "abs", 0x202F0F89, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM }, { C_F }}, + +/* abs<.f> 0,limm 0010011000101111F111111110001001. */ +{ "abs", 0x262F7F89, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM }, { C_F }}, + +/* absl<.f> RB,RC 01011bbb00101111FBBBcccccc001001. */ +{ "absl", 0x582F0009, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { C_F }}, + +/* absl<.f> 0,RC 0101111000101111F111cccccc001001. */ +{ "absl", 0x5E2F7009, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RC }, { C_F }}, + +/* absl<.f> RB,u6 01011bbb01101111FBBBuuuuuu001001. */ +{ "absl", 0x586F0009, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { C_F }}, + +/* absl<.f> 0,u6 0101111001101111F111uuuuuu001001. */ +{ "absl", 0x5E6F7009, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, UIMM6_20 }, { C_F }}, + +/* absl<.f> RB,ximm 01011bbb00101111FBBB111100001001. */ +{ "absl", 0x582F0F09, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, XIMM }, { C_F }}, + +/* absl<.f> 0,ximm 0101111000101111F111111100001001. */ +{ "absl", 0x5E2F7F09, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM }, { C_F }}, + +/* absl<.f> RB,limm 01011bbb00101111FBBB111110001001. */ +{ "absl", 0x582F0F89, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM }, { C_F }}, + +/* absl<.f> 0,limm 0101111000101111F111111110001001. */ +{ "absl", 0x5E2F7F89, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM }, { C_F }}, + +/* abs_s b,c 01111bbbccc10001. */ +{ "abs_s", 0x00007811, 0x0000F81F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB_S, RC_S }, { 0 }}, + +/* adc<.f> a,b,c 00100bbb00000001FBBBCCCCCCAAAAAA. */ +{ "adc", 0x20010000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* adc<.f> 0,b,c 00100bbb00000001FBBBCCCCCC111110. */ +{ "adc", 0x2001003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* adc<.f><.cc> b,b,c 00100bbb11000001FBBBCCCCCC0QQQQQ. */ +{ "adc", 0x20C10000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* adc<.f> a,b,u6 00100bbb01000001FBBBuuuuuuAAAAAA. */ +{ "adc", 0x20410000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* adc<.f> 0,b,u6 00100bbb01000001FBBBuuuuuu111110. */ +{ "adc", 0x2041003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* adc<.f><.cc> b,b,u6 00100bbb11000001FBBBuuuuuu1QQQQQ. */ +{ "adc", 0x20C10020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* adc<.f> b,b,s12 00100bbb10000001FBBBssssssSSSSSS. */ +{ "adc", 0x20810000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* adc<.f> a,limm,c 0010011000000001F111CCCCCCAAAAAA. */ +{ "adc", 0x26017000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* adc<.f> a,b,limm 00100bbb00000001FBBB111110AAAAAA. */ +{ "adc", 0x20010F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* adc<.f> 0,limm,c 0010011000000001F111CCCCCC111110. */ +{ "adc", 0x2601703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* adc<.f> 0,b,limm 00100bbb00000001FBBB111110111110. */ +{ "adc", 0x20010FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* adc<.f><.cc> b,b,limm 00100bbb11000001FBBB1111100QQQQQ. */ +{ "adc", 0x20C10F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* adc<.f><.cc> 0,limm,c 0010011011000001F111CCCCCC0QQQQQ. */ +{ "adc", 0x26C17000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* adc<.f> a,limm,u6 0010011001000001F111uuuuuuAAAAAA. */ +{ "adc", 0x26417000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* adc<.f> 0,limm,u6 0010011001000001F111uuuuuu111110. */ +{ "adc", 0x2641703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* adc<.f><.cc> 0,limm,u6 0010011011000001F111uuuuuu1QQQQQ. */ +{ "adc", 0x26C17020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* adc<.f> 0,limm,s12 0010011010000001F111ssssssSSSSSS. */ +{ "adc", 0x26817000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* adc<.f> a,limm,limm 0010011000000001F111111110AAAAAA. */ +{ "adc", 0x26017F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* adc<.f> 0,limm,limm 0010011000000001F111111110111110. */ +{ "adc", 0x26017FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* adc<.f><.cc> 0,limm,limm 0010011011000001F1111111100QQQQQ. */ +{ "adc", 0x26C17F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* adcl<.f> RA,RB,RC 01011bbb00000001FBBBccccccaaaaaa. */ +{ "adcl", 0x58010000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* adcl<.f> 0,RB,RC 01011bbb00000001FBBBcccccc111110. */ +{ "adcl", 0x5801003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* adcl<.f><.cc> RB,RB,RC 01011bbb11000001FBBBcccccc0QQQQQ. */ +{ "adcl", 0x58C10000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* adcl<.f> RA,RB,u6 01011bbb01000001FBBBuuuuuuaaaaaa. */ +{ "adcl", 0x58410000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* adcl<.f> 0,RB,u6 01011bbb01000001FBBBuuuuuu111110. */ +{ "adcl", 0x5841003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* adcl<.f><.cc> RB,RB,u6 01011bbb11000001FBBBuuuuuu1QQQQQ. */ +{ "adcl", 0x58C10020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* adcl<.f> RB,RB,s12 01011bbb10000001FBBBssssssSSSSSS. */ +{ "adcl", 0x58810000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* adcl<.f> RA,ximm,RC 0101110000000001F111ccccccaaaaaa. */ +{ "adcl", 0x5C017000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* adcl<.f> RA,RB,ximm 01011bbb00000001FBBB111100aaaaaa. */ +{ "adcl", 0x58010F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* adcl<.f> 0,ximm,RC 0101110000000001F111cccccc111110. */ +{ "adcl", 0x5C01703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* adcl<.f> 0,RB,ximm 01011bbb00000001FBBB111100111110. */ +{ "adcl", 0x58010F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* adcl<.f><.cc> 0,ximm,RC 0101110011000001F111cccccc0QQQQQ. */ +{ "adcl", 0x5CC17000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* adcl<.f><.cc> RB,RB,ximm 01011bbb11000001FBBB1111000QQQQQ. */ +{ "adcl", 0x58C10F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* adcl<.f> RA,ximm,u6 0101110001000001F111uuuuuuaaaaaa. */ +{ "adcl", 0x5C417000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* adcl<.f> 0,ximm,u6 0101110001000001F111uuuuuu111110. */ +{ "adcl", 0x5C41703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* adcl<.f><.cc> 0,ximm,u6 0101110011000001F111uuuuuu1QQQQQ. */ +{ "adcl", 0x5CC17020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* adcl<.f> RA,limm,RC 0101111000000001F111ccccccaaaaaa. */ +{ "adcl", 0x5E017000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* adcl<.f> RA,RB,limm 01011bbb00000001FBBB111110aaaaaa. */ +{ "adcl", 0x58010F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* adcl<.f> 0,limm,RC 0101111000000001F111cccccc111110. */ +{ "adcl", 0x5E01703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* adcl<.f> 0,RB,limm 01011bbb00000001FBBB111110111110. */ +{ "adcl", 0x58010FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* adcl<.f><.cc> 0,limm,RC 0101111011000001F111cccccc0QQQQQ. */ +{ "adcl", 0x5EC17000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* adcl<.f><.cc> RB,RB,limm 01011bbb11000001FBBB1111100QQQQQ. */ +{ "adcl", 0x58C10F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* adcl<.f> RA,limm,u6 0101111001000001F111uuuuuuaaaaaa. */ +{ "adcl", 0x5E417000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* adcl<.f> 0,limm,u6 0101111001000001F111uuuuuu111110. */ +{ "adcl", 0x5E41703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* adcl<.f><.cc> 0,limm,u6 0101111011000001F111uuuuuu1QQQQQ. */ +{ "adcl", 0x5EC17020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* adcl<.f> 0,ximm,s12 0101110010000001F111ssssssSSSSSS. */ +{ "adcl", 0x5C817000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* adcl<.f> 0,limm,s12 0101111010000001F111ssssssSSSSSS. */ +{ "adcl", 0x5E817000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* adcl<.f> RA,ximm,ximm 0101110000000001F111111100aaaaaa. */ +{ "adcl", 0x5C017F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* adcl<.f> 0,ximm,ximm 0101110000000001F111111100111110. */ +{ "adcl", 0x5C017F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* adcl<.f><.cc> 0,ximm,ximm 0101110011000001F1111111000QQQQQ. */ +{ "adcl", 0x5CC17F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* adcl<.f> RA,limm,limm 0101111000000001F111111110aaaaaa. */ +{ "adcl", 0x5E017F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* adcl<.f> 0,limm,limm 0101111000000001F111111110111110. */ +{ "adcl", 0x5E017FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* adcl<.f><.cc> 0,limm,limm 0101111011000001F1111111100QQQQQ. */ +{ "adcl", 0x5EC17F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* add<.f> a,b,c 00100bbb00000000FBBBCCCCCCAAAAAA. */ +{ "add", 0x20000000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* add<.f> 0,b,c 00100bbb00000000FBBBCCCCCC111110. */ +{ "add", 0x2000003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* add<.f><.cc> b,b,c 00100bbb11000000FBBBCCCCCC0QQQQQ. */ +{ "add", 0x20C00000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* add<.f> a,b,u6 00100bbb01000000FBBBuuuuuuAAAAAA. */ +{ "add", 0x20400000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* add<.f> 0,b,u6 00100bbb01000000FBBBuuuuuu111110. */ +{ "add", 0x2040003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* add<.f><.cc> b,b,u6 00100bbb11000000FBBBuuuuuu1QQQQQ. */ +{ "add", 0x20C00020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* add<.f> b,b,s12 00100bbb10000000FBBBssssssSSSSSS. */ +{ "add", 0x20800000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* add<.f> a,limm,c 0010011000000000F111CCCCCCAAAAAA. */ +{ "add", 0x26007000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* add<.f> a,b,limm 00100bbb00000000FBBB111110AAAAAA. */ +{ "add", 0x20000F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* add<.f> 0,limm,c 0010011000000000F111CCCCCC111110. */ +{ "add", 0x2600703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* add<.f> 0,b,limm 00100bbb00000000FBBB111110111110. */ +{ "add", 0x20000FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* add<.f><.cc> b,b,limm 00100bbb11000000FBBB1111100QQQQQ. */ +{ "add", 0x20C00F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* add<.f><.cc> 0,limm,c 0010011011000000F111CCCCCC0QQQQQ. */ +{ "add", 0x26C07000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* add<.f> a,limm,u6 0010011001000000F111uuuuuuAAAAAA. */ +{ "add", 0x26407000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* add<.f> 0,limm,u6 0010011001000000F111uuuuuu111110. */ +{ "add", 0x2640703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* add<.f><.cc> 0,limm,u6 0010011011000000F111uuuuuu1QQQQQ. */ +{ "add", 0x26C07020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* add<.f> 0,limm,s12 0010011010000000F111ssssssSSSSSS. */ +{ "add", 0x26807000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* add<.f> a,limm,limm 0010011000000000F111111110AAAAAA. */ +{ "add", 0x26007F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* add<.f> 0,limm,limm 0010011000000000F111111110111110. */ +{ "add", 0x26007FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* add<.f><.cc> 0,limm,limm 0010011011000000F1111111100QQQQQ. */ +{ "add", 0x26C07F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* add1<.f> a,b,c 00100bbb00010100FBBBCCCCCCAAAAAA. */ +{ "add1", 0x20140000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* add1<.f> 0,b,c 00100bbb00010100FBBBCCCCCC111110. */ +{ "add1", 0x2014003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* add1<.f><.cc> b,b,c 00100bbb11010100FBBBCCCCCC0QQQQQ. */ +{ "add1", 0x20D40000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* add1<.f> a,b,u6 00100bbb01010100FBBBuuuuuuAAAAAA. */ +{ "add1", 0x20540000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* add1<.f> 0,b,u6 00100bbb01010100FBBBuuuuuu111110. */ +{ "add1", 0x2054003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* add1<.f><.cc> b,b,u6 00100bbb11010100FBBBuuuuuu1QQQQQ. */ +{ "add1", 0x20D40020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* add1<.f> b,b,s12 00100bbb10010100FBBBssssssSSSSSS. */ +{ "add1", 0x20940000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* add1<.f> a,limm,c 0010011000010100F111CCCCCCAAAAAA. */ +{ "add1", 0x26147000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* add1<.f> a,b,limm 00100bbb00010100FBBB111110AAAAAA. */ +{ "add1", 0x20140F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* add1<.f> 0,limm,c 0010011000010100F111CCCCCC111110. */ +{ "add1", 0x2614703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* add1<.f> 0,b,limm 00100bbb00010100FBBB111110111110. */ +{ "add1", 0x20140FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* add1<.f><.cc> b,b,limm 00100bbb11010100FBBB1111100QQQQQ. */ +{ "add1", 0x20D40F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* add1<.f><.cc> 0,limm,c 0010011011010100F111CCCCCC0QQQQQ. */ +{ "add1", 0x26D47000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* add1<.f> a,limm,u6 0010011001010100F111uuuuuuAAAAAA. */ +{ "add1", 0x26547000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* add1<.f> 0,limm,u6 0010011001010100F111uuuuuu111110. */ +{ "add1", 0x2654703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* add1<.f><.cc> 0,limm,u6 0010011011010100F111uuuuuu1QQQQQ. */ +{ "add1", 0x26D47020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* add1<.f> 0,limm,s12 0010011010010100F111ssssssSSSSSS. */ +{ "add1", 0x26947000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* add1<.f> a,limm,limm 0010011000010100F111111110AAAAAA. */ +{ "add1", 0x26147F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* add1<.f> 0,limm,limm 0010011000010100F111111110111110. */ +{ "add1", 0x26147FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* add1<.f><.cc> 0,limm,limm 0010011011010100F1111111100QQQQQ. */ +{ "add1", 0x26D47F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* add1l<.f> RA,RB,RC 01011bbb00010100FBBBccccccaaaaaa. */ +{ "add1l", 0x58140000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* add1l<.f> 0,RB,RC 01011bbb00010100FBBBcccccc111110. */ +{ "add1l", 0x5814003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* add1l<.f><.cc> RB,RB,RC 01011bbb11010100FBBBcccccc0QQQQQ. */ +{ "add1l", 0x58D40000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* add1l<.f> RA,RB,u6 01011bbb01010100FBBBuuuuuuaaaaaa. */ +{ "add1l", 0x58540000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* add1l<.f> 0,RB,u6 01011bbb01010100FBBBuuuuuu111110. */ +{ "add1l", 0x5854003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* add1l<.f><.cc> RB,RB,u6 01011bbb11010100FBBBuuuuuu1QQQQQ. */ +{ "add1l", 0x58D40020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* add1l<.f> RB,RB,s12 01011bbb10010100FBBBssssssSSSSSS. */ +{ "add1l", 0x58940000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* add1l<.f> RA,ximm,RC 0101110000010100F111ccccccaaaaaa. */ +{ "add1l", 0x5C147000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* add1l<.f> RA,RB,ximm 01011bbb00010100FBBB111100aaaaaa. */ +{ "add1l", 0x58140F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* add1l<.f> 0,ximm,RC 0101110000010100F111cccccc111110. */ +{ "add1l", 0x5C14703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* add1l<.f> 0,RB,ximm 01011bbb00010100FBBB111100111110. */ +{ "add1l", 0x58140F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* add1l<.f><.cc> 0,ximm,RC 0101110011010100F111cccccc0QQQQQ. */ +{ "add1l", 0x5CD47000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* add1l<.f><.cc> RB,RB,ximm 01011bbb11010100FBBB1111000QQQQQ. */ +{ "add1l", 0x58D40F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* add1l<.f> RA,ximm,u6 0101110001010100F111uuuuuuaaaaaa. */ +{ "add1l", 0x5C547000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* add1l<.f> 0,ximm,u6 0101110001010100F111uuuuuu111110. */ +{ "add1l", 0x5C54703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* add1l<.f><.cc> 0,ximm,u6 0101110011010100F111uuuuuu1QQQQQ. */ +{ "add1l", 0x5CD47020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* add1l<.f> RA,limm,RC 0101111000010100F111ccccccaaaaaa. */ +{ "add1l", 0x5E147000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* add1l<.f> RA,RB,limm 01011bbb00010100FBBB111110aaaaaa. */ +{ "add1l", 0x58140F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* add1l<.f> 0,limm,RC 0101111000010100F111cccccc111110. */ +{ "add1l", 0x5E14703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* add1l<.f> 0,RB,limm 01011bbb00010100FBBB111110111110. */ +{ "add1l", 0x58140FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* add1l<.f><.cc> 0,limm,RC 0101111011010100F111cccccc0QQQQQ. */ +{ "add1l", 0x5ED47000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* add1l<.f><.cc> RB,RB,limm 01011bbb11010100FBBB1111100QQQQQ. */ +{ "add1l", 0x58D40F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* add1l<.f> RA,limm,u6 0101111001010100F111uuuuuuaaaaaa. */ +{ "add1l", 0x5E547000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* add1l<.f> 0,limm,u6 0101111001010100F111uuuuuu111110. */ +{ "add1l", 0x5E54703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* add1l<.f><.cc> 0,limm,u6 0101111011010100F111uuuuuu1QQQQQ. */ +{ "add1l", 0x5ED47020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* add1l<.f> 0,ximm,s12 0101110010010100F111ssssssSSSSSS. */ +{ "add1l", 0x5C947000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* add1l<.f> 0,limm,s12 0101111010010100F111ssssssSSSSSS. */ +{ "add1l", 0x5E947000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* add1l<.f> RA,ximm,ximm 0101110000010100F111111100aaaaaa. */ +{ "add1l", 0x5C147F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* add1l<.f> 0,ximm,ximm 0101110000010100F111111100111110. */ +{ "add1l", 0x5C147F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* add1l<.f><.cc> 0,ximm,ximm 0101110011010100F1111111000QQQQQ. */ +{ "add1l", 0x5CD47F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* add1l<.f> RA,limm,limm 0101111000010100F111111110aaaaaa. */ +{ "add1l", 0x5E147F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* add1l<.f> 0,limm,limm 0101111000010100F111111110111110. */ +{ "add1l", 0x5E147FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* add1l<.f><.cc> 0,limm,limm 0101111011010100F1111111100QQQQQ. */ +{ "add1l", 0x5ED47F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* add1_s b,b,c 01111bbbccc10100. */ +{ "add1_s", 0x00007814, 0x0000F81F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB_S, RB_Sdup, RC_S }, { 0 }}, + +/* add2<.f> a,b,c 00100bbb00010101FBBBCCCCCCAAAAAA. */ +{ "add2", 0x20150000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* add2<.f> 0,b,c 00100bbb00010101FBBBCCCCCC111110. */ +{ "add2", 0x2015003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* add2<.f><.cc> b,b,c 00100bbb11010101FBBBCCCCCC0QQQQQ. */ +{ "add2", 0x20D50000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* add2<.f> a,b,u6 00100bbb01010101FBBBuuuuuuAAAAAA. */ +{ "add2", 0x20550000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* add2<.f> 0,b,u6 00100bbb01010101FBBBuuuuuu111110. */ +{ "add2", 0x2055003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* add2<.f><.cc> b,b,u6 00100bbb11010101FBBBuuuuuu1QQQQQ. */ +{ "add2", 0x20D50020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* add2<.f> b,b,s12 00100bbb10010101FBBBssssssSSSSSS. */ +{ "add2", 0x20950000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* add2<.f> a,limm,c 0010011000010101F111CCCCCCAAAAAA. */ +{ "add2", 0x26157000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* add2<.f> a,b,limm 00100bbb00010101FBBB111110AAAAAA. */ +{ "add2", 0x20150F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* add2<.f> 0,limm,c 0010011000010101F111CCCCCC111110. */ +{ "add2", 0x2615703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* add2<.f> 0,b,limm 00100bbb00010101FBBB111110111110. */ +{ "add2", 0x20150FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* add2<.f><.cc> b,b,limm 00100bbb11010101FBBB1111100QQQQQ. */ +{ "add2", 0x20D50F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* add2<.f><.cc> 0,limm,c 0010011011010101F111CCCCCC0QQQQQ. */ +{ "add2", 0x26D57000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* add2<.f> a,limm,u6 0010011001010101F111uuuuuuAAAAAA. */ +{ "add2", 0x26557000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* add2<.f> 0,limm,u6 0010011001010101F111uuuuuu111110. */ +{ "add2", 0x2655703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* add2<.f><.cc> 0,limm,u6 0010011011010101F111uuuuuu1QQQQQ. */ +{ "add2", 0x26D57020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* add2<.f> 0,limm,s12 0010011010010101F111ssssssSSSSSS. */ +{ "add2", 0x26957000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* add2<.f> a,limm,limm 0010011000010101F111111110AAAAAA. */ +{ "add2", 0x26157F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* add2<.f> 0,limm,limm 0010011000010101F111111110111110. */ +{ "add2", 0x26157FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* add2<.f><.cc> 0,limm,limm 0010011011010101F1111111100QQQQQ. */ +{ "add2", 0x26D57F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* add2l<.f> RA,RB,RC 01011bbb00010101FBBBccccccaaaaaa. */ +{ "add2l", 0x58150000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* add2l<.f> 0,RB,RC 01011bbb00010101FBBBcccccc111110. */ +{ "add2l", 0x5815003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* add2l<.f><.cc> RB,RB,RC 01011bbb11010101FBBBcccccc0QQQQQ. */ +{ "add2l", 0x58D50000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* add2l<.f> RA,RB,u6 01011bbb01010101FBBBuuuuuuaaaaaa. */ +{ "add2l", 0x58550000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* add2l<.f> 0,RB,u6 01011bbb01010101FBBBuuuuuu111110. */ +{ "add2l", 0x5855003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* add2l<.f><.cc> RB,RB,u6 01011bbb11010101FBBBuuuuuu1QQQQQ. */ +{ "add2l", 0x58D50020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* add2l<.f> RB,RB,s12 01011bbb10010101FBBBssssssSSSSSS. */ +{ "add2l", 0x58950000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* add2l<.f> RA,ximm,RC 0101110000010101F111ccccccaaaaaa. */ +{ "add2l", 0x5C157000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* add2l<.f> RA,RB,ximm 01011bbb00010101FBBB111100aaaaaa. */ +{ "add2l", 0x58150F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* add2l<.f> 0,ximm,RC 0101110000010101F111cccccc111110. */ +{ "add2l", 0x5C15703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* add2l<.f> 0,RB,ximm 01011bbb00010101FBBB111100111110. */ +{ "add2l", 0x58150F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* add2l<.f><.cc> 0,ximm,RC 0101110011010101F111cccccc0QQQQQ. */ +{ "add2l", 0x5CD57000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* add2l<.f><.cc> RB,RB,ximm 01011bbb11010101FBBB1111000QQQQQ. */ +{ "add2l", 0x58D50F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* add2l<.f> RA,ximm,u6 0101110001010101F111uuuuuuaaaaaa. */ +{ "add2l", 0x5C557000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* add2l<.f> 0,ximm,u6 0101110001010101F111uuuuuu111110. */ +{ "add2l", 0x5C55703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* add2l<.f><.cc> 0,ximm,u6 0101110011010101F111uuuuuu1QQQQQ. */ +{ "add2l", 0x5CD57020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* add2l<.f> RA,limm,RC 0101111000010101F111ccccccaaaaaa. */ +{ "add2l", 0x5E157000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* add2l<.f> RA,RB,limm 01011bbb00010101FBBB111110aaaaaa. */ +{ "add2l", 0x58150F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* add2l<.f> 0,limm,RC 0101111000010101F111cccccc111110. */ +{ "add2l", 0x5E15703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* add2l<.f> 0,RB,limm 01011bbb00010101FBBB111110111110. */ +{ "add2l", 0x58150FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* add2l<.f><.cc> 0,limm,RC 0101111011010101F111cccccc0QQQQQ. */ +{ "add2l", 0x5ED57000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* add2l<.f><.cc> RB,RB,limm 01011bbb11010101FBBB1111100QQQQQ. */ +{ "add2l", 0x58D50F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* add2l<.f> RA,limm,u6 0101111001010101F111uuuuuuaaaaaa. */ +{ "add2l", 0x5E557000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* add2l<.f> 0,limm,u6 0101111001010101F111uuuuuu111110. */ +{ "add2l", 0x5E55703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* add2l<.f><.cc> 0,limm,u6 0101111011010101F111uuuuuu1QQQQQ. */ +{ "add2l", 0x5ED57020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* add2l<.f> 0,ximm,s12 0101110010010101F111ssssssSSSSSS. */ +{ "add2l", 0x5C957000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* add2l<.f> 0,limm,s12 0101111010010101F111ssssssSSSSSS. */ +{ "add2l", 0x5E957000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* add2l<.f> RA,ximm,ximm 0101110000010101F111111100aaaaaa. */ +{ "add2l", 0x5C157F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* add2l<.f> 0,ximm,ximm 0101110000010101F111111100111110. */ +{ "add2l", 0x5C157F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* add2l<.f><.cc> 0,ximm,ximm 0101110011010101F1111111000QQQQQ. */ +{ "add2l", 0x5CD57F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* add2l<.f> RA,limm,limm 0101111000010101F111111110aaaaaa. */ +{ "add2l", 0x5E157F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* add2l<.f> 0,limm,limm 0101111000010101F111111110111110. */ +{ "add2l", 0x5E157FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* add2l<.f><.cc> 0,limm,limm 0101111011010101F1111111100QQQQQ. */ +{ "add2l", 0x5ED57F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* add2_s b,b,c 01111bbbccc10101. */ +{ "add2_s", 0x00007815, 0x0000F81F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB_S, RB_Sdup, RC_S }, { 0 }}, + +/* add3<.f> a,b,c 00100bbb00010110FBBBCCCCCCAAAAAA. */ +{ "add3", 0x20160000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* add3<.f> 0,b,c 00100bbb00010110FBBBCCCCCC111110. */ +{ "add3", 0x2016003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* add3<.f><.cc> b,b,c 00100bbb11010110FBBBCCCCCC0QQQQQ. */ +{ "add3", 0x20D60000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* add3<.f> a,b,u6 00100bbb01010110FBBBuuuuuuAAAAAA. */ +{ "add3", 0x20560000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* add3<.f> 0,b,u6 00100bbb01010110FBBBuuuuuu111110. */ +{ "add3", 0x2056003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* add3<.f><.cc> b,b,u6 00100bbb11010110FBBBuuuuuu1QQQQQ. */ +{ "add3", 0x20D60020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* add3<.f> b,b,s12 00100bbb10010110FBBBssssssSSSSSS. */ +{ "add3", 0x20960000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* add3<.f> a,limm,c 0010011000010110F111CCCCCCAAAAAA. */ +{ "add3", 0x26167000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* add3<.f> a,b,limm 00100bbb00010110FBBB111110AAAAAA. */ +{ "add3", 0x20160F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* add3<.f> 0,limm,c 0010011000010110F111CCCCCC111110. */ +{ "add3", 0x2616703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* add3<.f> 0,b,limm 00100bbb00010110FBBB111110111110. */ +{ "add3", 0x20160FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* add3<.f><.cc> b,b,limm 00100bbb11010110FBBB1111100QQQQQ. */ +{ "add3", 0x20D60F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* add3<.f><.cc> 0,limm,c 0010011011010110F111CCCCCC0QQQQQ. */ +{ "add3", 0x26D67000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* add3<.f> a,limm,u6 0010011001010110F111uuuuuuAAAAAA. */ +{ "add3", 0x26567000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* add3<.f> 0,limm,u6 0010011001010110F111uuuuuu111110. */ +{ "add3", 0x2656703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* add3<.f><.cc> 0,limm,u6 0010011011010110F111uuuuuu1QQQQQ. */ +{ "add3", 0x26D67020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* add3<.f> 0,limm,s12 0010011010010110F111ssssssSSSSSS. */ +{ "add3", 0x26967000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* add3<.f> a,limm,limm 0010011000010110F111111110AAAAAA. */ +{ "add3", 0x26167F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* add3<.f> 0,limm,limm 0010011000010110F111111110111110. */ +{ "add3", 0x26167FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* add3<.f><.cc> 0,limm,limm 0010011011010110F1111111100QQQQQ. */ +{ "add3", 0x26D67F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* add3l<.f> RA,RB,RC 01011bbb00010110FBBBccccccaaaaaa. */ +{ "add3l", 0x58160000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* add3l<.f> 0,RB,RC 01011bbb00010110FBBBcccccc111110. */ +{ "add3l", 0x5816003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* add3l<.f><.cc> RB,RB,RC 01011bbb11010110FBBBcccccc0QQQQQ. */ +{ "add3l", 0x58D60000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* add3l<.f> RA,RB,u6 01011bbb01010110FBBBuuuuuuaaaaaa. */ +{ "add3l", 0x58560000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* add3l<.f> 0,RB,u6 01011bbb01010110FBBBuuuuuu111110. */ +{ "add3l", 0x5856003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* add3l<.f><.cc> RB,RB,u6 01011bbb11010110FBBBuuuuuu1QQQQQ. */ +{ "add3l", 0x58D60020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* add3l<.f> RB,RB,s12 01011bbb10010110FBBBssssssSSSSSS. */ +{ "add3l", 0x58960000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* add3l<.f> RA,ximm,RC 0101110000010110F111ccccccaaaaaa. */ +{ "add3l", 0x5C167000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* add3l<.f> RA,RB,ximm 01011bbb00010110FBBB111100aaaaaa. */ +{ "add3l", 0x58160F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* add3l<.f> 0,ximm,RC 0101110000010110F111cccccc111110. */ +{ "add3l", 0x5C16703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* add3l<.f> 0,RB,ximm 01011bbb00010110FBBB111100111110. */ +{ "add3l", 0x58160F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* add3l<.f><.cc> 0,ximm,RC 0101110011010110F111cccccc0QQQQQ. */ +{ "add3l", 0x5CD67000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* add3l<.f><.cc> RB,RB,ximm 01011bbb11010110FBBB1111000QQQQQ. */ +{ "add3l", 0x58D60F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* add3l<.f> RA,ximm,u6 0101110001010110F111uuuuuuaaaaaa. */ +{ "add3l", 0x5C567000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* add3l<.f> 0,ximm,u6 0101110001010110F111uuuuuu111110. */ +{ "add3l", 0x5C56703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* add3l<.f><.cc> 0,ximm,u6 0101110011010110F111uuuuuu1QQQQQ. */ +{ "add3l", 0x5CD67020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* add3l<.f> RA,limm,RC 0101111000010110F111ccccccaaaaaa. */ +{ "add3l", 0x5E167000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* add3l<.f> RA,RB,limm 01011bbb00010110FBBB111110aaaaaa. */ +{ "add3l", 0x58160F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* add3l<.f> 0,limm,RC 0101111000010110F111cccccc111110. */ +{ "add3l", 0x5E16703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* add3l<.f> 0,RB,limm 01011bbb00010110FBBB111110111110. */ +{ "add3l", 0x58160FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* add3l<.f><.cc> 0,limm,RC 0101111011010110F111cccccc0QQQQQ. */ +{ "add3l", 0x5ED67000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* add3l<.f><.cc> RB,RB,limm 01011bbb11010110FBBB1111100QQQQQ. */ +{ "add3l", 0x58D60F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* add3l<.f> RA,limm,u6 0101111001010110F111uuuuuuaaaaaa. */ +{ "add3l", 0x5E567000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* add3l<.f> 0,limm,u6 0101111001010110F111uuuuuu111110. */ +{ "add3l", 0x5E56703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* add3l<.f><.cc> 0,limm,u6 0101111011010110F111uuuuuu1QQQQQ. */ +{ "add3l", 0x5ED67020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* add3l<.f> 0,ximm,s12 0101110010010110F111ssssssSSSSSS. */ +{ "add3l", 0x5C967000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* add3l<.f> 0,limm,s12 0101111010010110F111ssssssSSSSSS. */ +{ "add3l", 0x5E967000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* add3l<.f> RA,ximm,ximm 0101110000010110F111111100aaaaaa. */ +{ "add3l", 0x5C167F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* add3l<.f> 0,ximm,ximm 0101110000010110F111111100111110. */ +{ "add3l", 0x5C167F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* add3l<.f><.cc> 0,ximm,ximm 0101110011010110F1111111000QQQQQ. */ +{ "add3l", 0x5CD67F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* add3l<.f> RA,limm,limm 0101111000010110F111111110aaaaaa. */ +{ "add3l", 0x5E167F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* add3l<.f> 0,limm,limm 0101111000010110F111111110111110. */ +{ "add3l", 0x5E167FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* add3l<.f><.cc> 0,limm,limm 0101111011010110F1111111100QQQQQ. */ +{ "add3l", 0x5ED67F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* add3_s b,b,c 01111bbbccc10110. */ +{ "add3_s", 0x00007816, 0x0000F81F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB_S, RB_Sdup, RC_S }, { 0 }}, + +/* addhl RA,RB,RC 01011bbb001011100BBBccccccaaaaaa. */ +{ "addhl", 0x582E0000, 0xF8FF8000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { 0 }}, + +/* addhl 0,RB,RC 01011bbb001011100BBBcccccc111110. */ +{ "addhl", 0x582E003E, 0xF8FF803F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { 0 }}, + +/* addhl<.cc> RB,RB,RC 01011bbb111011100BBBcccccc0QQQQQ. */ +{ "addhl", 0x58EE0000, 0xF8FF8020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_CC }}, + +/* addhl RA,RB,u6 01011bbb011011100BBBuuuuuuaaaaaa. */ +{ "addhl", 0x586E0000, 0xF8FF8000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { 0 }}, + +/* addhl 0,RB,u6 01011bbb011011100BBBuuuuuu111110. */ +{ "addhl", 0x586E003E, 0xF8FF803F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { 0 }}, + +/* addhl<.cc> RB,RB,u6 01011bbb111011100BBBuuuuuu1QQQQQ. */ +{ "addhl", 0x58EE0020, 0xF8FF8020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_CC }}, + +/* addhl RB,RB,s12 01011bbb101011100BBBssssssSSSSSS. */ +{ "addhl", 0x58AE0000, 0xF8FF8000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { 0 }}, + +/* addhl RA,limm,RC 01011110001011100111ccccccaaaaaa. */ +{ "addhl", 0x5E2E7000, 0xFFFFF000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, HI32, RC }, { 0 }}, + +/* addhl RA,RB,limm 01011bbb001011100BBB111110aaaaaa. */ +{ "addhl", 0x582E0F80, 0xF8FF8FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, HI32 }, { 0 }}, + +/* addhl<.cc> RB,RB,limm 01011bbb111011100BBB1111100QQQQQ. */ +{ "addhl", 0x58EE0F80, 0xF8FF8FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, HI32 }, { C_CC }}, + +/* addhl_s h,PCL,ximm 01110011hhh010HH. */ +{ "addhl_s", 0x00007308, 0x0000FF1C, ARC_OPCODE_ARC64, ARITH, NONE, { RH_S, PCL_S, XIMM_S }, { 0 }}, + +/* addhl_s h,h,limm 01110001hhh010HH. */ +{ "addhl_s", 0x00007108, 0x0000FF1C, ARC_OPCODE_ARC64, ARITH, NONE, { RH_S, RH_Sdup, HI32 }, { 0 }}, + +/* addl<.f> RA,RB,RC 01011bbb00000000FBBBccccccaaaaaa. */ +{ "addl", 0x58000000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* addl<.f> 0,RB,RC 01011bbb00000000FBBBcccccc111110. */ +{ "addl", 0x5800003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* addl<.f><.cc> RB,RB,RC 01011bbb11000000FBBBcccccc0QQQQQ. */ +{ "addl", 0x58C00000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* addl<.f> RA,RB,u6 01011bbb01000000FBBBuuuuuuaaaaaa. */ +{ "addl", 0x58400000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* addl<.f> 0,RB,u6 01011bbb01000000FBBBuuuuuu111110. */ +{ "addl", 0x5840003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* addl<.f><.cc> RB,RB,u6 01011bbb11000000FBBBuuuuuu1QQQQQ. */ +{ "addl", 0x58C00020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* addl<.f> RB,RB,s12 01011bbb10000000FBBBssssssSSSSSS. */ +{ "addl", 0x58800000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* addl<.f> RA,ximm,RC 0101110000000000F111ccccccaaaaaa. */ +{ "addl", 0x5C007000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* addl<.f> RA,RB,ximm 01011bbb00000000FBBB111100aaaaaa. */ +{ "addl", 0x58000F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* addl<.f> 0,ximm,RC 0101110000000000F111cccccc111110. */ +{ "addl", 0x5C00703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* addl<.f> 0,RB,ximm 01011bbb00000000FBBB111100111110. */ +{ "addl", 0x58000F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* addl<.f><.cc> 0,ximm,RC 0101110011000000F111cccccc0QQQQQ. */ +{ "addl", 0x5CC07000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* addl<.f><.cc> RB,RB,ximm 01011bbb11000000FBBB1111000QQQQQ. */ +{ "addl", 0x58C00F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* addl<.f> RA,ximm,u6 0101110001000000F111uuuuuuaaaaaa. */ +{ "addl", 0x5C407000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* addl<.f> 0,ximm,u6 0101110001000000F111uuuuuu111110. */ +{ "addl", 0x5C40703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* addl<.f><.cc> 0,ximm,u6 0101110011000000F111uuuuuu1QQQQQ. */ +{ "addl", 0x5CC07020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* addl<.f> RA,limm,RC 0101111000000000F111ccccccaaaaaa. */ +{ "addl", 0x5E007000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* addl<.f> RA,RB,limm 01011bbb00000000FBBB111110aaaaaa. */ +{ "addl", 0x58000F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* addl<.f> 0,limm,RC 0101111000000000F111cccccc111110. */ +{ "addl", 0x5E00703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* addl<.f> 0,RB,limm 01011bbb00000000FBBB111110111110. */ +{ "addl", 0x58000FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* addl<.f><.cc> 0,limm,RC 0101111011000000F111cccccc0QQQQQ. */ +{ "addl", 0x5EC07000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* addl<.f><.cc> RB,RB,limm 01011bbb11000000FBBB1111100QQQQQ. */ +{ "addl", 0x58C00F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* addl<.f> RA,limm,u6 0101111001000000F111uuuuuuaaaaaa. */ +{ "addl", 0x5E407000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* addl<.f> 0,limm,u6 0101111001000000F111uuuuuu111110. */ +{ "addl", 0x5E40703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* addl<.f><.cc> 0,limm,u6 0101111011000000F111uuuuuu1QQQQQ. */ +{ "addl", 0x5EC07020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* addl<.f> 0,ximm,s12 0101110010000000F111ssssssSSSSSS. */ +{ "addl", 0x5C807000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* addl<.f> 0,limm,s12 0101111010000000F111ssssssSSSSSS. */ +{ "addl", 0x5E807000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* addl<.f> RA,ximm,ximm 0101110000000000F111111100aaaaaa. */ +{ "addl", 0x5C007F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* addl<.f> 0,ximm,ximm 0101110000000000F111111100111110. */ +{ "addl", 0x5C007F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* addl<.f><.cc> 0,ximm,ximm 0101110011000000F1111111000QQQQQ. */ +{ "addl", 0x5CC07F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* addl<.f> RA,limm,limm 0101111000000000F111111110aaaaaa. */ +{ "addl", 0x5E007F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* addl<.f> 0,limm,limm 0101111000000000F111111110111110. */ +{ "addl", 0x5E007FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* addl<.f><.cc> 0,limm,limm 0101111011000000F1111111100QQQQQ. */ +{ "addl", 0x5EC07F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* addl_s SP,SP,u9 11000UU0101uuuuu. */ +{ "addl_s", 0x0000C0A0, 0x0000F9E0, ARC_OPCODE_ARC64, ARITH, NONE, { SP_S, SP_Sdup, UIMM9_A32_11_S }, { 0 }}, + +/* addl_s b,b,c 01111bbbccc00001. */ +{ "addl_s", 0x00007801, 0x0000F81F, ARC_OPCODE_ARC64, ARITH, NONE, { RB_S, RB_Sdup, RC_S }, { 0 }}, + +/* addl_s b,SP,u7 11000bbb100uuuuu. */ +{ "addl_s", 0x0000C080, 0x0000F8E0, ARC_OPCODE_ARC64, ARITH, NONE, { RB_S, SP_S, UIMM7_A32_11_S }, { 0 }}, + +/* addl_s R0,GP,s11 1100111sssssssss. */ +{ "addl_s", 0x0000CE00, 0x0000FE00, ARC_OPCODE_ARC64, ARITH, NONE, { R0_S, GP_S, SIMM11_A32_7_S }, { 0 }}, + +/* addl_s h,h,LO32 01110001hhh110HH. */ +{ "addl_s", 0x00007118, 0x0000FF1C, ARC_OPCODE_ARC64, ARITH, NONE, { RH_S, RH_Sdup, LO32 }, { 0 }}, + +/* addl_s h,PCL,LO32 01110011hhh110HH. */ +{ "addl_s", 0x00007318, 0x0000FF1C, ARC_OPCODE_ARC64, ARITH, NONE, { RH_S, PCL_S, LO32 }, { 0 }}, + +/* add_s a,b,c 01100bbbccc11aaa. */ +{ "add_s", 0x00006018, 0x0000F818,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA_S, RB_S, RC_S }, { 0 }}, + +/* add_s b,b,h 01110bbbhhh000HH. */ +{ "add_s", 0x00007000, 0x0000F81C,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB_S, RB_Sdup, RH_S }, { 0 }}, + +/* add_s h,h,s3 01110ssshhh001HH. */ +{ "add_s", 0x00007004, 0x0000F81C,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RH_S, RH_Sdup, SIMM3_5_S }, { 0 }}, + +/* add_s c,b,u3 01101bbbccc00uuu. */ +{ "add_s", 0x00006800, 0x0000F818,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RC_S, RB_S, UIMM3_13_S }, { 0 }}, + +/* add_s R0,b,u6 01001bbb0UUU1uuu. */ +{ "add_s", 0x00004808, 0x0000F888,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, CD2, { R0_S, RB_S, UIMM6_13_S }, { 0 }}, + +/* add_s R1,b,u6 01001bbb1UUU1uuu. */ +{ "add_s", 0x00004888, 0x0000F888,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, CD2, { R1_S, RB_S, UIMM6_13_S }, { 0 }}, + +/* add_s b,b,limm 01110bbb11000011. */ +{ "add_s", 0x000070C3, 0x0000F8FF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB_S, RB_Sdup, LIMM_S }, { 0 }}, + +/* add_s 0,limm,s3 01110sss11000111. */ +{ "add_s", 0x000070C7, 0x0000F8FF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA_S, LIMM_S, SIMM3_5_S }, { 0 }}, + +/* aex b,c 00100bbb00100111RBBBCCCCCCRRRRRR. */ +{ "aex", 0x20270000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, AUXREG, NONE, { RB_CHK, BRAKET, RC, BRAKETdup }, { 0 }}, + +/* aex<.cc> b,c 00100bbb11100111RBBBCCCCCC0QQQQQ. */ +{ "aex", 0x20E70000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, AUXREG, NONE, { RB_CHK, BRAKET, RC, BRAKETdup }, { C_CC }}, + +/* aex b,u6 00100bbb01100111RBBBuuuuuuRRRRRR. */ +{ "aex", 0x20670000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, AUXREG, NONE, { RB_CHK, BRAKET, UIMM6_20, BRAKETdup }, { 0 }}, + +/* aex<.cc> b,u6 00100bbb11100111RBBBuuuuuu1QQQQQ. */ +{ "aex", 0x20E70020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, AUXREG, NONE, { RB_CHK, BRAKET, UIMM6_20, BRAKETdup }, { C_CC }}, + +/* aex b,s12 00100bbb10100111RBBBssssssSSSSSS. */ +{ "aex", 0x20A70000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, AUXREG, NONE, { RB_CHK, BRAKET, SIMM12_20, BRAKETdup }, { 0 }}, + +/* aex limm,c 0010011000100111R111CCCCCCRRRRRR. */ +{ "aex", 0x26277000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, AUXREG, NONE, { LIMM, BRAKET, RC, BRAKETdup }, { 0 }}, + +/* aex b,limm 00100bbb00100111RBBB111110RRRRRR. */ +{ "aex", 0x20270F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, AUXREG, NONE, { RB_CHK, BRAKET, LIMM, BRAKETdup }, { 0 }}, + +/* aex<.cc> limm,c 0010011011100111R111CCCCCC0QQQQQ. */ +{ "aex", 0x26E77000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, AUXREG, NONE, { LIMM, BRAKET, RC, BRAKETdup }, { C_CC }}, + +/* aex<.cc> b,limm 00100bbb11100111RBBB1111100QQQQQ. */ +{ "aex", 0x20E70F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, AUXREG, NONE, { RB_CHK, BRAKET, LIMM, BRAKETdup }, { C_CC }}, + +/* aex limm,u6 0010011001100111R111uuuuuuRRRRRR. */ +{ "aex", 0x26677000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, AUXREG, NONE, { LIMM, BRAKET, UIMM6_20, BRAKETdup }, { 0 }}, + +/* aex<.cc> limm,u6 0010011011100111R111uuuuuu1QQQQQ. */ +{ "aex", 0x26E77020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, AUXREG, NONE, { LIMM, BRAKET, UIMM6_20, BRAKETdup }, { C_CC }}, + +/* aex limm,s12 0010011010100111R111ssssssSSSSSS. */ +{ "aex", 0x26A77000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, AUXREG, NONE, { LIMM, BRAKET, SIMM12_20, BRAKETdup }, { 0 }}, + +/* aex limm,limm 0010011000100111R111111110RRRRRR. */ +{ "aex", 0x26277F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, AUXREG, NONE, { LIMM, BRAKET, LIMMdup, BRAKETdup }, { 0 }}, + +/* aex<.cc> limm,limm 0010011011100111R1111111100QQQQQ. */ +{ "aex", 0x26E77F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, AUXREG, NONE, { LIMM, BRAKET, LIMMdup, BRAKETdup }, { C_CC }}, + +/* aexl RB,RC 01011bbb001001110BBBccccccRRRRRR. */ +{ "aexl", 0x58270000, 0xF8FF8000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, BRAKET, RC, BRAKETdup }, { 0 }}, + +/* aexl<.cc> RB,RC 01011bbb111001110BBBcccccc0QQQQQ. */ +{ "aexl", 0x58E70000, 0xF8FF8020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, BRAKET, RC, BRAKETdup }, { C_CC }}, + +/* aexl RB,u6 01011bbb011001110BBBuuuuuuRRRRRR. */ +{ "aexl", 0x58670000, 0xF8FF8000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, BRAKET, UIMM6_20, BRAKETdup }, { 0 }}, + +/* aexl<.cc> RB,u6 01011bbb111001110BBBuuuuuu1QQQQQ. */ +{ "aexl", 0x58E70020, 0xF8FF8020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, BRAKET, UIMM6_20, BRAKETdup }, { C_CC }}, + +/* aexl RB,s12 01011bbb101001110BBBssssssSSSSSS. */ +{ "aexl", 0x58A70000, 0xF8FF8000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, BRAKET, SIMM12_20, BRAKETdup }, { 0 }}, + +/* aexl RB,ximm 01011bbb001001110BBB111100RRRRRR. */ +{ "aexl", 0x58270F00, 0xF8FF8FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, BRAKET, XIMM, BRAKETdup }, { 0 }}, + +/* aexl<.cc> RB,ximm 01011bbb111001110BBB1111000QQQQQ. */ +{ "aexl", 0x58E70F00, 0xF8FF8FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, BRAKET, XIMM, BRAKETdup }, { C_CC }}, + +/* aexl RB,limm 01011bbb001001110BBB111110RRRRRR. */ +{ "aexl", 0x58270F80, 0xF8FF8FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, BRAKET, LIMM, BRAKETdup }, { 0 }}, + +/* aexl<.cc> RB,limm 01011bbb111001110BBB1111100QQQQQ. */ +{ "aexl", 0x58E70F80, 0xF8FF8FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, BRAKET, LIMM, BRAKETdup }, { C_CC }}, + +/* and<.f> a,b,c 00100bbb00000100FBBBCCCCCCAAAAAA. */ +{ "and", 0x20040000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, RC }, { C_F }}, + +/* and<.f> 0,b,c 00100bbb00000100FBBBCCCCCC111110. */ +{ "and", 0x2004003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, RC }, { C_F }}, + +/* and<.f><.cc> b,b,c 00100bbb11000100FBBBCCCCCC0QQQQQ. */ +{ "and", 0x20C40000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* and<.f> a,b,u6 00100bbb01000100FBBBuuuuuuAAAAAA. */ +{ "and", 0x20440000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* and<.f> 0,b,u6 00100bbb01000100FBBBuuuuuu111110. */ +{ "and", 0x2044003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* and<.f><.cc> b,b,u6 00100bbb11000100FBBBuuuuuu1QQQQQ. */ +{ "and", 0x20C40020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* and<.f> b,b,s12 00100bbb10000100FBBBssssssSSSSSS. */ +{ "and", 0x20840000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* and<.f> a,limm,c 0010011000000100F111CCCCCCAAAAAA. */ +{ "and", 0x26047000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, RC }, { C_F }}, + +/* and<.f> a,b,limm 00100bbb00000100FBBB111110AAAAAA. */ +{ "and", 0x20040F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, LIMM }, { C_F }}, + +/* and<.f> 0,limm,c 0010011000000100F111CCCCCC111110. */ +{ "and", 0x2604703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* and<.f> 0,b,limm 00100bbb00000100FBBB111110111110. */ +{ "and", 0x20040FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* and<.f><.cc> b,b,limm 00100bbb11000100FBBB1111100QQQQQ. */ +{ "and", 0x20C40F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* and<.f><.cc> 0,limm,c 0010011011000100F111CCCCCC0QQQQQ. */ +{ "and", 0x26C47000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* and<.f> a,limm,u6 0010011001000100F111uuuuuuAAAAAA. */ +{ "and", 0x26447000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* and<.f> 0,limm,u6 0010011001000100F111uuuuuu111110. */ +{ "and", 0x2644703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* and<.f><.cc> 0,limm,u6 0010011011000100F111uuuuuu1QQQQQ. */ +{ "and", 0x26C47020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* and<.f> 0,limm,s12 0010011010000100F111ssssssSSSSSS. */ +{ "and", 0x26847000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* and<.f> a,limm,limm 0010011000000100F111111110AAAAAA. */ +{ "and", 0x26047F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* and<.f> 0,limm,limm 0010011000000100F111111110111110. */ +{ "and", 0x26047FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* and<.f><.cc> 0,limm,limm 0010011011000100F1111111100QQQQQ. */ +{ "and", 0x26C47F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* andl<.f> RA,RB,RC 01011bbb00000100FBBBccccccaaaaaa. */ +{ "andl", 0x58040000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* andl<.f> 0,RB,RC 01011bbb00000100FBBBcccccc111110. */ +{ "andl", 0x5804003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* andl<.f><.cc> RB,RB,RC 01011bbb11000100FBBBcccccc0QQQQQ. */ +{ "andl", 0x58C40000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* andl<.f> RA,RB,u6 01011bbb01000100FBBBuuuuuuaaaaaa. */ +{ "andl", 0x58440000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* andl<.f> 0,RB,u6 01011bbb01000100FBBBuuuuuu111110. */ +{ "andl", 0x5844003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* andl<.f><.cc> RB,RB,u6 01011bbb11000100FBBBuuuuuu1QQQQQ. */ +{ "andl", 0x58C40020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* andl<.f> RB,RB,s12 01011bbb10000100FBBBssssssSSSSSS. */ +{ "andl", 0x58840000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* andl<.f> RA,ximm,RC 0101110000000100F111ccccccaaaaaa. */ +{ "andl", 0x5C047000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* andl<.f> RA,RB,ximm 01011bbb00000100FBBB111100aaaaaa. */ +{ "andl", 0x58040F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* andl<.f> 0,ximm,RC 0101110000000100F111cccccc111110. */ +{ "andl", 0x5C04703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* andl<.f> 0,RB,ximm 01011bbb00000100FBBB111100111110. */ +{ "andl", 0x58040F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* andl<.f><.cc> 0,ximm,RC 0101110011000100F111cccccc0QQQQQ. */ +{ "andl", 0x5CC47000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* andl<.f><.cc> RB,RB,ximm 01011bbb11000100FBBB1111000QQQQQ. */ +{ "andl", 0x58C40F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* andl<.f> RA,ximm,u6 0101110001000100F111uuuuuuaaaaaa. */ +{ "andl", 0x5C447000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* andl<.f> 0,ximm,u6 0101110001000100F111uuuuuu111110. */ +{ "andl", 0x5C44703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* andl<.f><.cc> 0,ximm,u6 0101110011000100F111uuuuuu1QQQQQ. */ +{ "andl", 0x5CC47020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* andl<.f> RA,limm,RC 0101111000000100F111ccccccaaaaaa. */ +{ "andl", 0x5E047000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* andl<.f> RA,RB,limm 01011bbb00000100FBBB111110aaaaaa. */ +{ "andl", 0x58040F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* andl<.f> 0,limm,RC 0101111000000100F111cccccc111110. */ +{ "andl", 0x5E04703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* andl<.f> 0,RB,limm 01011bbb00000100FBBB111110111110. */ +{ "andl", 0x58040FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* andl<.f><.cc> 0,limm,RC 0101111011000100F111cccccc0QQQQQ. */ +{ "andl", 0x5EC47000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* andl<.f><.cc> RB,RB,limm 01011bbb11000100FBBB1111100QQQQQ. */ +{ "andl", 0x58C40F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* andl<.f> RA,limm,u6 0101111001000100F111uuuuuuaaaaaa. */ +{ "andl", 0x5E447000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* andl<.f> 0,limm,u6 0101111001000100F111uuuuuu111110. */ +{ "andl", 0x5E44703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* andl<.f><.cc> 0,limm,u6 0101111011000100F111uuuuuu1QQQQQ. */ +{ "andl", 0x5EC47020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* andl<.f> 0,ximm,s12 0101110010000100F111ssssssSSSSSS. */ +{ "andl", 0x5C847000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* andl<.f> 0,limm,s12 0101111010000100F111ssssssSSSSSS. */ +{ "andl", 0x5E847000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* andl<.f> RA,ximm,ximm 0101110000000100F111111100aaaaaa. */ +{ "andl", 0x5C047F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* andl<.f> 0,ximm,ximm 0101110000000100F111111100111110. */ +{ "andl", 0x5C047F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* andl<.f><.cc> 0,ximm,ximm 0101110011000100F1111111000QQQQQ. */ +{ "andl", 0x5CC47F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* andl<.f> RA,limm,limm 0101111000000100F111111110aaaaaa. */ +{ "andl", 0x5E047F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* andl<.f> 0,limm,limm 0101111000000100F111111110111110. */ +{ "andl", 0x5E047FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* andl<.f><.cc> 0,limm,limm 0101111011000100F1111111100QQQQQ. */ +{ "andl", 0x5EC47F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* andl_s b,b,c 01111bbbccc01000. */ +{ "andl_s", 0x00007808, 0x0000F81F, ARC_OPCODE_ARC64, ARITH, NONE, { RB_S, RB_Sdup, RC_S }, { 0 }}, + +/* and_s b,b,c 01111bbbccc00100. */ +{ "and_s", 0x00007804, 0x0000F81F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB_S, RB_Sdup, RC_S }, { 0 }}, + +/* asl<.f> b,c 00100bbb00101111FBBBCCCCCC000000. */ +{ "asl", 0x202F0000, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RC }, { C_F }}, + +/* asl<.f> 0,c 0010011000101111F111CCCCCC000000. */ +{ "asl", 0x262F7000, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RC }, { C_F }}, + +/* asl<.f> a,b,c 00101bbb00000000FBBBCCCCCCAAAAAA. */ +{ "asl", 0x28000000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RA, RB, RC }, { C_F }}, + +/* asl<.f> 0,b,c 00101bbb00000000FBBBCCCCCC111110. */ +{ "asl", 0x2800003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, RB, RC }, { C_F }}, + +/* asl<.f><.cc> b,b,c 00101bbb11000000FBBBCCCCCC0QQQQQ. */ +{ "asl", 0x28C00000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* asl<.f> b,u6 00100bbb01101111FBBBuuuuuu000000. */ +{ "asl", 0x206F0000, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, UIMM6_20 }, { C_F }}, + +/* asl<.f> 0,u6 0010011001101111F111uuuuuu000000. */ +{ "asl", 0x266F7000, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, UIMM6_20 }, { C_F }}, + +/* asl<.f> a,b,u6 00101bbb01000000FBBBuuuuuuAAAAAA. */ +{ "asl", 0x28400000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RA, RB, UIMM6_20 }, { C_F }}, + +/* asl<.f> 0,b,u6 00101bbb01000000FBBBuuuuuu111110. */ +{ "asl", 0x2840003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* asl<.f><.cc> b,b,u6 00101bbb11000000FBBBuuuuuu1QQQQQ. */ +{ "asl", 0x28C00020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* asl<.f> b,b,s12 00101bbb10000000FBBBssssssSSSSSS. */ +{ "asl", 0x28800000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* asl<.f> b,limm 00100bbb00101111FBBB111110000000. */ +{ "asl", 0x202F0F80, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, LIMM }, { C_F }}, + +/* asl<.f> 0,limm 0010011000101111F111111110000000. */ +{ "asl", 0x262F7F80, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM }, { C_F }}, + +/* asl<.f> a,limm,c 0010111000000000F111CCCCCCAAAAAA. */ +{ "asl", 0x2E007000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RA, LIMM, RC }, { C_F }}, + +/* asl<.f> a,b,limm 00101bbb00000000FBBB111110AAAAAA. */ +{ "asl", 0x28000F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RA, RB, LIMM }, { C_F }}, + +/* asl<.f> 0,limm,c 0010111000000000F111CCCCCC111110. */ +{ "asl", 0x2E00703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, LIMM, RC }, { C_F }}, + +/* asl<.f> 0,b,limm 00101bbb00000000FBBB111110111110. */ +{ "asl", 0x28000FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, RB, LIMM }, { C_F }}, + +/* asl<.f><.cc> b,b,limm 00101bbb11000000FBBB1111100QQQQQ. */ +{ "asl", 0x28C00F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* asl<.f><.cc> 0,limm,c 0010111011000000F111CCCCCC0QQQQQ. */ +{ "asl", 0x2EC07000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* asl<.f> a,limm,u6 0010111001000000F111uuuuuuAAAAAA. */ +{ "asl", 0x2E407000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* asl<.f> 0,limm,u6 0010111001000000F111uuuuuu111110. */ +{ "asl", 0x2E40703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* asl<.f><.cc> 0,limm,u6 0010111011000000F111uuuuuu1QQQQQ. */ +{ "asl", 0x2EC07020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* asl<.f> 0,limm,s12 0010111010000000F111ssssssSSSSSS. */ +{ "asl", 0x2E807000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* asl<.f> a,limm,limm 0010111000000000F111111110AAAAAA. */ +{ "asl", 0x2E007F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RA, LIMM, LIMMdup }, { C_F }}, + +/* asl<.f> 0,limm,limm 0010111000000000F111111110111110. */ +{ "asl", 0x2E007FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* asl<.f><.cc> 0,limm,limm 0010111011000000F1111111100QQQQQ. */ +{ "asl", 0x2EC07F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* asll<.f> RA,RB,RC 01011bbb00100000FBBBccccccaaaaaa. */ +{ "asll", 0x58200000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* asll<.f> 0,RB,RC 01011bbb00100000FBBBcccccc111110. */ +{ "asll", 0x5820003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* asll<.f><.cc> RB,RB,RC 01011bbb11100000FBBBcccccc0QQQQQ. */ +{ "asll", 0x58E00000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* asll<.f> RB,RC 01011bbb00101111FBBBcccccc000000. */ +{ "asll", 0x582F0000, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { C_F }}, + +/* asll<.f> 0,RC 0101111000101111F111cccccc000000. */ +{ "asll", 0x5E2F7000, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RC }, { C_F }}, + +/* asll<.f> RA,RB,u6 01011bbb01100000FBBBuuuuuuaaaaaa. */ +{ "asll", 0x58600000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* asll<.f> 0,RB,u6 01011bbb01100000FBBBuuuuuu111110. */ +{ "asll", 0x5860003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* asll<.f><.cc> RB,RB,u6 01011bbb11100000FBBBuuuuuu1QQQQQ. */ +{ "asll", 0x58E00020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* asll<.f> RB,u6 01011bbb01101111FBBBuuuuuu000000. */ +{ "asll", 0x586F0000, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { C_F }}, + +/* asll<.f> 0,u6 0101111001101111F111uuuuuu000000. */ +{ "asll", 0x5E6F7000, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, UIMM6_20 }, { C_F }}, + +/* asll<.f> RB,RB,s12 01011bbb10100000FBBBssssssSSSSSS. */ +{ "asll", 0x58A00000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* asll<.f> RA,ximm,RC 0101110000100000F111ccccccaaaaaa. */ +{ "asll", 0x5C207000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* asll<.f> RA,RB,ximm 01011bbb00100000FBBB111100aaaaaa. */ +{ "asll", 0x58200F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* asll<.f> 0,ximm,RC 0101110000100000F111cccccc111110. */ +{ "asll", 0x5C20703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* asll<.f> 0,RB,ximm 01011bbb00100000FBBB111100111110. */ +{ "asll", 0x58200F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* asll<.f><.cc> 0,ximm,RC 0101110011100000F111cccccc0QQQQQ. */ +{ "asll", 0x5CE07000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* asll<.f><.cc> RB,RB,ximm 01011bbb11100000FBBB1111000QQQQQ. */ +{ "asll", 0x58E00F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* asll<.f> RB,ximm 01011bbb00101111FBBB111100000000. */ +{ "asll", 0x582F0F00, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, XIMM }, { C_F }}, + +/* asll<.f> 0,ximm 0101111000101111F111111100000000. */ +{ "asll", 0x5E2F7F00, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM }, { C_F }}, + +/* asll<.f> RA,ximm,u6 0101110001100000F111uuuuuuaaaaaa. */ +{ "asll", 0x5C607000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* asll<.f> 0,ximm,u6 0101110001100000F111uuuuuu111110. */ +{ "asll", 0x5C60703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* asll<.f><.cc> 0,ximm,u6 0101110011100000F111uuuuuu1QQQQQ. */ +{ "asll", 0x5CE07020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* asll<.f> RA,limm,RC 0101111000100000F111ccccccaaaaaa. */ +{ "asll", 0x5E207000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* asll<.f> RA,RB,limm 01011bbb00100000FBBB111110aaaaaa. */ +{ "asll", 0x58200F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* asll<.f> 0,limm,RC 0101111000100000F111cccccc111110. */ +{ "asll", 0x5E20703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* asll<.f> 0,RB,limm 01011bbb00100000FBBB111110111110. */ +{ "asll", 0x58200FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* asll<.f><.cc> 0,limm,RC 0101111011100000F111cccccc0QQQQQ. */ +{ "asll", 0x5EE07000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* asll<.f><.cc> RB,RB,limm 01011bbb11100000FBBB1111100QQQQQ. */ +{ "asll", 0x58E00F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* asll<.f> RB,limm 01011bbb00101111FBBB111110000000. */ +{ "asll", 0x582F0F80, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM }, { C_F }}, + +/* asll<.f> 0,limm 0101111000101111F111111110000000. */ +{ "asll", 0x5E2F7F80, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM }, { C_F }}, + +/* asll<.f> RA,limm,u6 0101111001100000F111uuuuuuaaaaaa. */ +{ "asll", 0x5E607000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* asll<.f> 0,limm,u6 0101111001100000F111uuuuuu111110. */ +{ "asll", 0x5E60703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* asll<.f><.cc> 0,limm,u6 0101111011100000F111uuuuuu1QQQQQ. */ +{ "asll", 0x5EE07020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* asll<.f> 0,ximm,s12 0101110010100000F111ssssssSSSSSS. */ +{ "asll", 0x5CA07000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* asll<.f> 0,limm,s12 0101111010100000F111ssssssSSSSSS. */ +{ "asll", 0x5EA07000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* asll<.f> RA,ximm,ximm 0101110000100000F111111100aaaaaa. */ +{ "asll", 0x5C207F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* asll<.f> 0,ximm,ximm 0101110000100000F111111100111110. */ +{ "asll", 0x5C207F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* asll<.f><.cc> 0,ximm,ximm 0101110011100000F1111111000QQQQQ. */ +{ "asll", 0x5CE07F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* asll<.f> RA,limm,limm 0101111000100000F111111110aaaaaa. */ +{ "asll", 0x5E207F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* asll<.f> 0,limm,limm 0101111000100000F111111110111110. */ +{ "asll", 0x5E207FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* asll<.f><.cc> 0,limm,limm 0101111011100000F1111111100QQQQQ. */ +{ "asll", 0x5EE07F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* asl_s b,c 01111bbbccc11011. */ +{ "asl_s", 0x0000781B, 0x0000F81F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB_S, RC_S }, { 0 }}, + +/* asl_s b,b,c 01111bbbccc11000. */ +{ "asl_s", 0x00007818, 0x0000F81F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RB_S, RB_Sdup, RC_S }, { 0 }}, + +/* asl_s c,b,u3 01101bbbccc10uuu. */ +{ "asl_s", 0x00006810, 0x0000F818,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RC_S, RB_S, UIMM3_13_S }, { 0 }}, + +/* asl_s b,b,u5 10111bbb000uuuuu. */ +{ "asl_s", 0x0000B800, 0x0000F8E0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RB_S, RB_Sdup, UIMM5_11_S }, { 0 }}, + +/* asr<.f> b,c 00100bbb00101111FBBBCCCCCC000001. */ +{ "asr", 0x202F0001, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RC }, { C_F }}, + +/* asr<.f> 0,c 0010011000101111F111CCCCCC000001. */ +{ "asr", 0x262F7001, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RC }, { C_F }}, + +/* asr<.f> a,b,c 00101bbb00000010FBBBCCCCCCAAAAAA. */ +{ "asr", 0x28020000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RA, RB, RC }, { C_F }}, + +/* asr<.f> 0,b,c 00101bbb00000010FBBBCCCCCC111110. */ +{ "asr", 0x2802003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, RB, RC }, { C_F }}, + +/* asr<.f><.cc> b,b,c 00101bbb11000010FBBBCCCCCC0QQQQQ. */ +{ "asr", 0x28C20000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* asr<.f> b,u6 00100bbb01101111FBBBuuuuuu000001. */ +{ "asr", 0x206F0001, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, UIMM6_20 }, { C_F }}, + +/* asr<.f> 0,u6 0010011001101111F111uuuuuu000001. */ +{ "asr", 0x266F7001, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, UIMM6_20 }, { C_F }}, + +/* asr<.f> a,b,u6 00101bbb01000010FBBBuuuuuuAAAAAA. */ +{ "asr", 0x28420000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RA, RB, UIMM6_20 }, { C_F }}, + +/* asr<.f> 0,b,u6 00101bbb01000010FBBBuuuuuu111110. */ +{ "asr", 0x2842003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* asr<.f><.cc> b,b,u6 00101bbb11000010FBBBuuuuuu1QQQQQ. */ +{ "asr", 0x28C20020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* asr<.f> b,b,s12 00101bbb10000010FBBBssssssSSSSSS. */ +{ "asr", 0x28820000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* asr<.f> b,limm 00100bbb00101111FBBB111110000001. */ +{ "asr", 0x202F0F81, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, LIMM }, { C_F }}, + +/* asr<.f> 0,limm 0010011000101111F111111110000001. */ +{ "asr", 0x262F7F81, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM }, { C_F }}, + +/* asr<.f> a,limm,c 0010111000000010F111CCCCCCAAAAAA. */ +{ "asr", 0x2E027000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RA, LIMM, RC }, { C_F }}, + +/* asr<.f> a,b,limm 00101bbb00000010FBBB111110AAAAAA. */ +{ "asr", 0x28020F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RA, RB, LIMM }, { C_F }}, + +/* asr<.f> 0,limm,c 0010111000000010F111CCCCCC111110. */ +{ "asr", 0x2E02703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, LIMM, RC }, { C_F }}, + +/* asr<.f> 0,b,limm 00101bbb00000010FBBB111110111110. */ +{ "asr", 0x28020FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, RB, LIMM }, { C_F }}, + +/* asr<.f><.cc> b,b,limm 00101bbb11000010FBBB1111100QQQQQ. */ +{ "asr", 0x28C20F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* asr<.f><.cc> 0,limm,c 0010111011000010F111CCCCCC0QQQQQ. */ +{ "asr", 0x2EC27000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* asr<.f> a,limm,u6 0010111001000010F111uuuuuuAAAAAA. */ +{ "asr", 0x2E427000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* asr<.f> 0,limm,u6 0010111001000010F111uuuuuu111110. */ +{ "asr", 0x2E42703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* asr<.f><.cc> 0,limm,u6 0010111011000010F111uuuuuu1QQQQQ. */ +{ "asr", 0x2EC27020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* asr<.f> 0,limm,s12 0010111010000010F111ssssssSSSSSS. */ +{ "asr", 0x2E827000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* asr<.f> a,limm,limm 0010111000000010F111111110AAAAAA. */ +{ "asr", 0x2E027F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RA, LIMM, LIMMdup }, { C_F }}, + +/* asr<.f> 0,limm,limm 0010111000000010F111111110111110. */ +{ "asr", 0x2E027FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* asr<.f><.cc> 0,limm,limm 0010111011000010F1111111100QQQQQ. */ +{ "asr", 0x2EC27F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* asr16<.f> b,c 00101bbb00101111FBBBCCCCCC001100. */ +{ "asr16", 0x282F000C, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT1, { RB, RC }, { C_F }}, + +/* asr16<.f> 0,c 0010111000101111F111CCCCCC001100. */ +{ "asr16", 0x2E2F700C, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT1, { ZA, RC }, { C_F }}, + +/* asr16<.f> b,u6 00101bbb01101111FBBBuuuuuu001100. */ +{ "asr16", 0x286F000C, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT1, { RB, UIMM6_20 }, { C_F }}, + +/* asr16<.f> 0,u6 0010111001101111F111uuuuuu001100. */ +{ "asr16", 0x2E6F700C, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT1, { ZA, UIMM6_20 }, { C_F }}, + +/* asr16<.f> b,limm 00101bbb00101111FBBB111110001100. */ +{ "asr16", 0x282F0F8C, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT1, { RB, LIMM }, { C_F }}, + +/* asr16<.f> 0,limm 0010111000101111F111111110001100. */ +{ "asr16", 0x2E2F7F8C, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT1, { ZA, LIMM }, { C_F }}, + +/* asr8<.f> b,c 00101bbb00101111FBBBCCCCCC001101. */ +{ "asr8", 0x282F000D, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT1, { RB, RC }, { C_F }}, + +/* asr8<.f> 0,c 0010111000101111F111CCCCCC001101. */ +{ "asr8", 0x2E2F700D, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT1, { ZA, RC }, { C_F }}, + +/* asr8<.f> b,u6 00101bbb01101111FBBBuuuuuu001101. */ +{ "asr8", 0x286F000D, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT1, { RB, UIMM6_20 }, { C_F }}, + +/* asr8<.f> 0,u6 0010111001101111F111uuuuuu001101. */ +{ "asr8", 0x2E6F700D, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT1, { ZA, UIMM6_20 }, { C_F }}, + +/* asr8<.f> b,limm 00101bbb00101111FBBB111110001101. */ +{ "asr8", 0x282F0F8D, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT1, { RB, LIMM }, { C_F }}, + +/* asr8<.f> 0,limm 0010111000101111F111111110001101. */ +{ "asr8", 0x2E2F7F8D, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT1, { ZA, LIMM }, { C_F }}, + +/* asrl<.f> RA,RB,RC 01011bbb00100010FBBBccccccaaaaaa. */ +{ "asrl", 0x58220000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* asrl<.f> 0,RB,RC 01011bbb00100010FBBBcccccc111110. */ +{ "asrl", 0x5822003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* asrl<.f><.cc> RB,RB,RC 01011bbb11100010FBBBcccccc0QQQQQ. */ +{ "asrl", 0x58E20000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* asrl<.f> RB,RC 01011bbb00101111FBBBcccccc000001. */ +{ "asrl", 0x582F0001, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { C_F }}, + +/* asrl<.f> 0,RC 0101111000101111F111cccccc000001. */ +{ "asrl", 0x5E2F7001, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RC }, { C_F }}, + +/* asrl<.f> RA,RB,u6 01011bbb01100010FBBBuuuuuuaaaaaa. */ +{ "asrl", 0x58620000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* asrl<.f> 0,RB,u6 01011bbb01100010FBBBuuuuuu111110. */ +{ "asrl", 0x5862003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* asrl<.f><.cc> RB,RB,u6 01011bbb11100010FBBBuuuuuu1QQQQQ. */ +{ "asrl", 0x58E20020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* asrl<.f> RB,u6 01011bbb01101111FBBBuuuuuu000001. */ +{ "asrl", 0x586F0001, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { C_F }}, + +/* asrl<.f> 0,u6 0101111001101111F111uuuuuu000001. */ +{ "asrl", 0x5E6F7001, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, UIMM6_20 }, { C_F }}, + +/* asrl<.f> RB,RB,s12 01011bbb10100010FBBBssssssSSSSSS. */ +{ "asrl", 0x58A20000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* asrl<.f> RA,ximm,RC 0101110000100010F111ccccccaaaaaa. */ +{ "asrl", 0x5C227000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* asrl<.f> RA,RB,ximm 01011bbb00100010FBBB111100aaaaaa. */ +{ "asrl", 0x58220F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* asrl<.f> 0,ximm,RC 0101110000100010F111cccccc111110. */ +{ "asrl", 0x5C22703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* asrl<.f> 0,RB,ximm 01011bbb00100010FBBB111100111110. */ +{ "asrl", 0x58220F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* asrl<.f><.cc> 0,ximm,RC 0101110011100010F111cccccc0QQQQQ. */ +{ "asrl", 0x5CE27000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* asrl<.f><.cc> RB,RB,ximm 01011bbb11100010FBBB1111000QQQQQ. */ +{ "asrl", 0x58E20F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* asrl<.f> RB,ximm 01011bbb00101111FBBB111100000001. */ +{ "asrl", 0x582F0F01, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, XIMM }, { C_F }}, + +/* asrl<.f> 0,ximm 0101111000101111F111111100000001. */ +{ "asrl", 0x5E2F7F01, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM }, { C_F }}, + +/* asrl<.f> RA,ximm,u6 0101110001100010F111uuuuuuaaaaaa. */ +{ "asrl", 0x5C627000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* asrl<.f> 0,ximm,u6 0101110001100010F111uuuuuu111110. */ +{ "asrl", 0x5C62703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* asrl<.f><.cc> 0,ximm,u6 0101110011100010F111uuuuuu1QQQQQ. */ +{ "asrl", 0x5CE27020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* asrl<.f> RA,limm,RC 0101111000100010F111ccccccaaaaaa. */ +{ "asrl", 0x5E227000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* asrl<.f> RA,RB,limm 01011bbb00100010FBBB111110aaaaaa. */ +{ "asrl", 0x58220F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* asrl<.f> 0,limm,RC 0101111000100010F111cccccc111110. */ +{ "asrl", 0x5E22703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* asrl<.f> 0,RB,limm 01011bbb00100010FBBB111110111110. */ +{ "asrl", 0x58220FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* asrl<.f><.cc> 0,limm,RC 0101111011100010F111cccccc0QQQQQ. */ +{ "asrl", 0x5EE27000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* asrl<.f><.cc> RB,RB,limm 01011bbb11100010FBBB1111100QQQQQ. */ +{ "asrl", 0x58E20F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* asrl<.f> RB,limm 01011bbb00101111FBBB111110000001. */ +{ "asrl", 0x582F0F81, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM }, { C_F }}, + +/* asrl<.f> 0,limm 0101111000101111F111111110000001. */ +{ "asrl", 0x5E2F7F81, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM }, { C_F }}, + +/* asrl<.f> RA,limm,u6 0101111001100010F111uuuuuuaaaaaa. */ +{ "asrl", 0x5E627000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* asrl<.f> 0,limm,u6 0101111001100010F111uuuuuu111110. */ +{ "asrl", 0x5E62703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* asrl<.f><.cc> 0,limm,u6 0101111011100010F111uuuuuu1QQQQQ. */ +{ "asrl", 0x5EE27020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* asrl<.f> 0,ximm,s12 0101110010100010F111ssssssSSSSSS. */ +{ "asrl", 0x5CA27000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* asrl<.f> 0,limm,s12 0101111010100010F111ssssssSSSSSS. */ +{ "asrl", 0x5EA27000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* asrl<.f> RA,ximm,ximm 0101110000100010F111111100aaaaaa. */ +{ "asrl", 0x5C227F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* asrl<.f> 0,ximm,ximm 0101110000100010F111111100111110. */ +{ "asrl", 0x5C227F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* asrl<.f><.cc> 0,ximm,ximm 0101110011100010F1111111000QQQQQ. */ +{ "asrl", 0x5CE27F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* asrl<.f> RA,limm,limm 0101111000100010F111111110aaaaaa. */ +{ "asrl", 0x5E227F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* asrl<.f> 0,limm,limm 0101111000100010F111111110111110. */ +{ "asrl", 0x5E227FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* asrl<.f><.cc> 0,limm,limm 0101111011100010F1111111100QQQQQ. */ +{ "asrl", 0x5EE27F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* asr_s b,c 01111bbbccc11100. */ +{ "asr_s", 0x0000781C, 0x0000F81F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB_S, RC_S }, { 0 }}, + +/* asr_s b,b,c 01111bbbccc11010. */ +{ "asr_s", 0x0000781A, 0x0000F81F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RB_S, RB_Sdup, RC_S }, { 0 }}, + +/* asr_s c,b,u3 01101bbbccc11uuu. */ +{ "asr_s", 0x00006818, 0x0000F818,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RC_S, RB_S, UIMM3_13_S }, { 0 }}, + +/* asr_s b,b,u5 10111bbb010uuuuu. */ +{ "asr_s", 0x0000B840, 0x0000F8E0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RB_S, RB_Sdup, UIMM5_11_S }, { 0 }}, + +/* atld<.op><.aq> RB,RC 00100bbb00101111FBBBcccccc110OOO. */ +{ "atld", 0x202F0030, 0xF8FF0038, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, BRAKET, RC, BRAKETdup }, { C_ATOP, C_AQ, C_RL }}, + +/* atldl_add<.aq> RB,RC 01011bbb00101111FBBBcccccc110000. */ +{ "atldl", 0x582F0030, 0xF8FF0038, ARC_OPCODE_ARC64, ARITH, NONE, { RB, BRAKET, RC, BRAKETdup }, { C_ATOP, C_AQ, C_RL }}, + +/* b<.d> s25 00000ssssssssss1SSSSSSSSSSNRtttt. */ +{ "b", 0x00010000, 0xF8010000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRANCH, NONE, { SIMM25_A16_5 }, { C_D }}, + +/* b<.d> s21 00000ssssssssss0SSSSSSSSSSNQQQQQ. */ +{ "b", 0x00000000, 0xF8010000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRANCH, NONE, { SIMM21_A16_5 }, { C_CC, C_D }}, + +/* bbit0<.d> b,c,s9 00001bbbsssssss1SBBBCCCCCCN00110. */ +{ "bbit0", 0x08010006, 0xF801001F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BBIT0, NONE, { RB, RC, SIMM9_A16_8 }, { C_D }}, + +/* bbit0<.d> b,u6,s9 00001bbbsssssss1SBBBuuuuuuN10110. */ +{ "bbit0", 0x08010016, 0xF801001F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BBIT0, NONE, { RB, UIMM6_8, SIMM9_A16_8 }, { C_D }}, + +/* bbit0 b,limm,s9 00001bbbsssssss1SBBB111110000110. */ +{ "bbit0", 0x08010F86, 0xF8010FFF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BBIT0, NONE, { RB, LIMM, SIMM9_A16_8 }, { 0 }}, + +/* bbit0 limm,c,s9 00001110sssssss1S111CCCCCC000110. */ +{ "bbit0", 0x0E017006, 0xFF01703F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BBIT0, NONE, { LIMM, RC, SIMM9_A16_8 }, { 0 }}, + +/* bbit0 limm,u6,s9 00001110sssssss1S111uuuuuu010110. */ +{ "bbit0", 0x0E017016, 0xFF01703F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BBIT0, NONE, { LIMM, UIMM6_8, SIMM9_A16_8 }, { 0 }}, + +/* bbit0 limm,limm,s9 00001110sssssss1S111111110000110. */ +{ "bbit0", 0x0E017F86, 0xFF017FFF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BBIT0, NONE, { LIMM, LIMMdup, SIMM9_A16_8 }, { 0 }}, + +/* bbit0l<.d> b,c,s9 00001bbbsssssss1SBBBCCCCCCN01110. */ +{ "bbit0l", 0x0801000E, 0xF801001F, ARC_OPCODE_ARC64, BBIT0, NONE, { RB, RC, SIMM9_A16_8 }, { C_D }}, + +/* bbit0l<.d> b,u6,s9 00001bbbsssssss1SBBBuuuuuuN11110. */ +{ "bbit0l", 0x0801001E, 0xF801001F, ARC_OPCODE_ARC64, BBIT0, NONE, { RB, UIMM6_8, SIMM9_A16_8 }, { C_D }}, + +/* bbit0l b,limm,s9 00001bbbsssssss1SBBB111110001110. */ +{ "bbit0l", 0x08010F8E, 0xF8010FFF, ARC_OPCODE_ARC64, BBIT0, NONE, { RB, LIMM, SIMM9_A16_8 }, { 0 }}, + +/* bbit0l limm,c,s9 00001110sssssss1S111CCCCCC001110. */ +{ "bbit0l", 0x0E01700E, 0xFF01703F, ARC_OPCODE_ARC64, BBIT0, NONE, { LIMM, RC, SIMM9_A16_8 }, { 0 }}, + +/* bbit0l limm,u6,s9 00001110sssssss1S111uuuuuu011110. */ +{ "bbit0l", 0x0E01701E, 0xFF01703F, ARC_OPCODE_ARC64, BBIT0, NONE, { LIMM, UIMM6_8, SIMM9_A16_8 }, { 0 }}, + +/* bbit0l limm,limm,s9 00001110sssssss1S111111110001110. */ +{ "bbit0l", 0x0E017F8E, 0xFF017FFF, ARC_OPCODE_ARC64, BBIT0, NONE, { LIMM, LIMMdup, SIMM9_A16_8 }, { 0 }}, + +/* bbit1<.d> b,c,s9 00001bbbsssssss1SBBBCCCCCCN00111. */ +{ "bbit1", 0x08010007, 0xF801001F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BBIT1, NONE, { RB, RC, SIMM9_A16_8 }, { C_D }}, + +/* bbit1<.d> b,u6,s9 00001bbbsssssss1SBBBuuuuuuN10111. */ +{ "bbit1", 0x08010017, 0xF801001F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BBIT1, NONE, { RB, UIMM6_8, SIMM9_A16_8 }, { C_D }}, + +/* bbit1 b,limm,s9 00001bbbsssssss1SBBB111110000111. */ +{ "bbit1", 0x08010F87, 0xF8010FFF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BBIT1, NONE, { RB, LIMM, SIMM9_A16_8 }, { 0 }}, + +/* bbit1 limm,c,s9 00001110sssssss1S111CCCCCC000111. */ +{ "bbit1", 0x0E017007, 0xFF01703F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BBIT1, NONE, { LIMM, RC, SIMM9_A16_8 }, { 0 }}, + +/* bbit1 limm,u6,s9 00001110sssssss1S111uuuuuu010111. */ +{ "bbit1", 0x0E017017, 0xFF01703F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BBIT1, NONE, { LIMM, UIMM6_8, SIMM9_A16_8 }, { 0 }}, + +/* bbit1 limm,limm,s9 00001110sssssss1S111111110000111. */ +{ "bbit1", 0x0E017F87, 0xFF017FFF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BBIT1, NONE, { LIMM, LIMMdup, SIMM9_A16_8 }, { 0 }}, + +/* bbit1l<.d> b,c,s9 00001bbbsssssss1SBBBCCCCCCN01111. */ +{ "bbit1l", 0x0801000F, 0xF801001F, ARC_OPCODE_ARC64, BBIT1, NONE, { RB, RC, SIMM9_A16_8 }, { C_D }}, + +/* bbit1l<.d> b,u6,s9 00001bbbsssssss1SBBBuuuuuuN11111. */ +{ "bbit1l", 0x0801001F, 0xF801001F, ARC_OPCODE_ARC64, BBIT1, NONE, { RB, UIMM6_8, SIMM9_A16_8 }, { C_D }}, + +/* bbit1l b,limm,s9 00001bbbsssssss1SBBB111110001111. */ +{ "bbit1l", 0x08010F8F, 0xF8010FFF, ARC_OPCODE_ARC64, BBIT1, NONE, { RB, LIMM, SIMM9_A16_8 }, { 0 }}, + +/* bbit1l limm,c,s9 00001110sssssss1S111CCCCCC001111. */ +{ "bbit1l", 0x0E01700F, 0xFF01703F, ARC_OPCODE_ARC64, BBIT1, NONE, { LIMM, RC, SIMM9_A16_8 }, { 0 }}, + +/* bbit1l limm,u6,s9 00001110sssssss1S111uuuuuu011111. */ +{ "bbit1l", 0x0E01701F, 0xFF01703F, ARC_OPCODE_ARC64, BBIT1, NONE, { LIMM, UIMM6_8, SIMM9_A16_8 }, { 0 }}, + +/* bbit1l limm,limm,s9 00001110sssssss1S111111110001111. */ +{ "bbit1l", 0x0E017F8F, 0xFF017FFF, ARC_OPCODE_ARC64, BBIT1, NONE, { LIMM, LIMMdup, SIMM9_A16_8 }, { 0 }}, + +/* bclr<.f> a,b,c 00100bbb00010000FBBBCCCCCCAAAAAA. */ +{ "bclr", 0x20100000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, RC }, { C_F }}, + +/* bclr<.f> 0,b,c 00100bbb00010000FBBBCCCCCC111110. */ +{ "bclr", 0x2010003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, RC }, { C_F }}, + +/* bclr<.f><.cc> b,b,c 00100bbb11010000FBBBCCCCCC0QQQQQ. */ +{ "bclr", 0x20D00000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* bclr<.f> a,b,u6 00100bbb01010000FBBBuuuuuuAAAAAA. */ +{ "bclr", 0x20500000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* bclr<.f> 0,b,u6 00100bbb01010000FBBBuuuuuu111110. */ +{ "bclr", 0x2050003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* bclr<.f><.cc> b,b,u6 00100bbb11010000FBBBuuuuuu1QQQQQ. */ +{ "bclr", 0x20D00020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* bclr<.f> b,b,s12 00100bbb10010000FBBBssssssSSSSSS. */ +{ "bclr", 0x20900000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* bclr<.f> a,limm,c 0010011000010000F111CCCCCCAAAAAA. */ +{ "bclr", 0x26107000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, RC }, { C_F }}, + +/* bclr<.f> a,b,limm 00100bbb00010000FBBB111110AAAAAA. */ +{ "bclr", 0x20100F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, LIMM }, { C_F }}, + +/* bclr<.f> 0,limm,c 0010011000010000F111CCCCCC111110. */ +{ "bclr", 0x2610703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* bclr<.f> 0,b,limm 00100bbb00010000FBBB111110111110. */ +{ "bclr", 0x20100FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* bclr<.f><.cc> b,b,limm 00100bbb11010000FBBB1111100QQQQQ. */ +{ "bclr", 0x20D00F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* bclr<.f><.cc> 0,limm,c 0010011011010000F111CCCCCC0QQQQQ. */ +{ "bclr", 0x26D07000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* bclr<.f> a,limm,u6 0010011001010000F111uuuuuuAAAAAA. */ +{ "bclr", 0x26507000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* bclr<.f> 0,limm,u6 0010011001010000F111uuuuuu111110. */ +{ "bclr", 0x2650703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* bclr<.f><.cc> 0,limm,u6 0010011011010000F111uuuuuu1QQQQQ. */ +{ "bclr", 0x26D07020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* bclr<.f> 0,limm,s12 0010011010010000F111ssssssSSSSSS. */ +{ "bclr", 0x26907000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* bclr<.f> a,limm,limm 0010011000010000F111111110AAAAAA. */ +{ "bclr", 0x26107F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* bclr<.f> 0,limm,limm 0010011000010000F111111110111110. */ +{ "bclr", 0x26107FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* bclr<.f><.cc> 0,limm,limm 0010011011010000F1111111100QQQQQ. */ +{ "bclr", 0x26D07F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* bclrl<.f> RA,RB,RC 01011bbb00010000FBBBccccccaaaaaa. */ +{ "bclrl", 0x58100000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* bclrl<.f> 0,RB,RC 01011bbb00010000FBBBcccccc111110. */ +{ "bclrl", 0x5810003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* bclrl<.f><.cc> RB,RB,RC 01011bbb11010000FBBBcccccc0QQQQQ. */ +{ "bclrl", 0x58D00000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* bclrl<.f> RA,RB,u6 01011bbb01010000FBBBuuuuuuaaaaaa. */ +{ "bclrl", 0x58500000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* bclrl<.f> 0,RB,u6 01011bbb01010000FBBBuuuuuu111110. */ +{ "bclrl", 0x5850003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* bclrl<.f><.cc> RB,RB,u6 01011bbb11010000FBBBuuuuuu1QQQQQ. */ +{ "bclrl", 0x58D00020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* bclrl<.f> RB,RB,s12 01011bbb10010000FBBBssssssSSSSSS. */ +{ "bclrl", 0x58900000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* bclrl<.f> RA,ximm,RC 0101110000010000F111ccccccaaaaaa. */ +{ "bclrl", 0x5C107000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* bclrl<.f> RA,RB,ximm 01011bbb00010000FBBB111100aaaaaa. */ +{ "bclrl", 0x58100F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* bclrl<.f> 0,ximm,RC 0101110000010000F111cccccc111110. */ +{ "bclrl", 0x5C10703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* bclrl<.f> 0,RB,ximm 01011bbb00010000FBBB111100111110. */ +{ "bclrl", 0x58100F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* bclrl<.f><.cc> 0,ximm,RC 0101110011010000F111cccccc0QQQQQ. */ +{ "bclrl", 0x5CD07000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* bclrl<.f><.cc> RB,RB,ximm 01011bbb11010000FBBB1111000QQQQQ. */ +{ "bclrl", 0x58D00F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* bclrl<.f> RA,ximm,u6 0101110001010000F111uuuuuuaaaaaa. */ +{ "bclrl", 0x5C507000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* bclrl<.f> 0,ximm,u6 0101110001010000F111uuuuuu111110. */ +{ "bclrl", 0x5C50703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* bclrl<.f><.cc> 0,ximm,u6 0101110011010000F111uuuuuu1QQQQQ. */ +{ "bclrl", 0x5CD07020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* bclrl<.f> RA,limm,RC 0101111000010000F111ccccccaaaaaa. */ +{ "bclrl", 0x5E107000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* bclrl<.f> RA,RB,limm 01011bbb00010000FBBB111110aaaaaa. */ +{ "bclrl", 0x58100F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* bclrl<.f> 0,limm,RC 0101111000010000F111cccccc111110. */ +{ "bclrl", 0x5E10703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* bclrl<.f> 0,RB,limm 01011bbb00010000FBBB111110111110. */ +{ "bclrl", 0x58100FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* bclrl<.f><.cc> 0,limm,RC 0101111011010000F111cccccc0QQQQQ. */ +{ "bclrl", 0x5ED07000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* bclrl<.f><.cc> RB,RB,limm 01011bbb11010000FBBB1111100QQQQQ. */ +{ "bclrl", 0x58D00F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* bclrl<.f> RA,limm,u6 0101111001010000F111uuuuuuaaaaaa. */ +{ "bclrl", 0x5E507000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* bclrl<.f> 0,limm,u6 0101111001010000F111uuuuuu111110. */ +{ "bclrl", 0x5E50703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* bclrl<.f><.cc> 0,limm,u6 0101111011010000F111uuuuuu1QQQQQ. */ +{ "bclrl", 0x5ED07020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* bclrl<.f> 0,ximm,s12 0101110010010000F111ssssssSSSSSS. */ +{ "bclrl", 0x5C907000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* bclrl<.f> 0,limm,s12 0101111010010000F111ssssssSSSSSS. */ +{ "bclrl", 0x5E907000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* bclrl<.f> RA,ximm,ximm 0101110000010000F111111100aaaaaa. */ +{ "bclrl", 0x5C107F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* bclrl<.f> 0,ximm,ximm 0101110000010000F111111100111110. */ +{ "bclrl", 0x5C107F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* bclrl<.f><.cc> 0,ximm,ximm 0101110011010000F1111111000QQQQQ. */ +{ "bclrl", 0x5CD07F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* bclrl<.f> RA,limm,limm 0101111000010000F111111110aaaaaa. */ +{ "bclrl", 0x5E107F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* bclrl<.f> 0,limm,limm 0101111000010000F111111110111110. */ +{ "bclrl", 0x5E107FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* bclrl<.f><.cc> 0,limm,limm 0101111011010000F1111111100QQQQQ. */ +{ "bclrl", 0x5ED07F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* bclr_s b,b,u5 10111bbb101uuuuu. */ +{ "bclr_s", 0x0000B8A0, 0x0000F8E0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB_S, RB_Sdup, UIMM5_11_S }, { 0 }}, + +/* beq_sCC_EQ s10 1111001sssssssss. */ +{ "beq_s", 0x0000F200, 0x0000FE00,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRANCH, COND, { SIMM10_A16_7_S }, { C_CC_EQ }}, + +/* bge_sCC_GE s7 1111011001ssssss. */ +{ "bge_s", 0x0000F640, 0x0000FFC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRANCH, COND, { SIMM7_A16_10_S }, { C_CC_GE }}, + +/* bgt_sCC_GT s7 1111011000ssssss. */ +{ "bgt_s", 0x0000F600, 0x0000FFC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRANCH, COND, { SIMM7_A16_10_S }, { C_CC_GT }}, + +/* bhi_sCC_HI s7 1111011100ssssss. */ +{ "bhi_s", 0x0000F700, 0x0000FFC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRANCH, COND, { SIMM7_A16_10_S }, { C_CC_HI }}, + +/* bhs_sCC_HS s7 1111011101ssssss. */ +{ "bhs_s", 0x0000F740, 0x0000FFC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRANCH, COND, { SIMM7_A16_10_S }, { C_CC_HS }}, + +/* bi c 00100RRR001001000RRRCCCCCCRRRRRR. */ +{ "bi", 0x20240000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BI, NONE, { BRAKET, RC, BRAKETdup }, { 0 }}, + +/* bi limm 00100RRR001001000RRR111110RRRRRR. */ +{ "bi", 0x20240F80, 0xF8FF8FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BI, NONE, { BRAKET, LIMM, BRAKETdup }, { 0 }}, + +/* bic<.f> a,b,c 00100bbb00000110FBBBCCCCCCAAAAAA. */ +{ "bic", 0x20060000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* bic<.f> 0,b,c 00100bbb00000110FBBBCCCCCC111110. */ +{ "bic", 0x2006003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* bic<.f><.cc> b,b,c 00100bbb11000110FBBBCCCCCC0QQQQQ. */ +{ "bic", 0x20C60000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* bic<.f> a,b,u6 00100bbb01000110FBBBuuuuuuAAAAAA. */ +{ "bic", 0x20460000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* bic<.f> 0,b,u6 00100bbb01000110FBBBuuuuuu111110. */ +{ "bic", 0x2046003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* bic<.f><.cc> b,b,u6 00100bbb11000110FBBBuuuuuu1QQQQQ. */ +{ "bic", 0x20C60020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* bic<.f> b,b,s12 00100bbb10000110FBBBssssssSSSSSS. */ +{ "bic", 0x20860000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* bic<.f> a,limm,c 0010011000000110F111CCCCCCAAAAAA. */ +{ "bic", 0x26067000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* bic<.f> a,b,limm 00100bbb00000110FBBB111110AAAAAA. */ +{ "bic", 0x20060F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* bic<.f> 0,limm,c 0010011000000110F111CCCCCC111110. */ +{ "bic", 0x2606703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* bic<.f> 0,b,limm 00100bbb00000110FBBB111110111110. */ +{ "bic", 0x20060FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* bic<.f><.cc> b,b,limm 00100bbb11000110FBBB1111100QQQQQ. */ +{ "bic", 0x20C60F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* bic<.f><.cc> 0,limm,c 0010011011000110F111CCCCCC0QQQQQ. */ +{ "bic", 0x26C67000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* bic<.f> a,limm,u6 0010011001000110F111uuuuuuAAAAAA. */ +{ "bic", 0x26467000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* bic<.f> 0,limm,u6 0010011001000110F111uuuuuu111110. */ +{ "bic", 0x2646703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* bic<.f><.cc> 0,limm,u6 0010011011000110F111uuuuuu1QQQQQ. */ +{ "bic", 0x26C67020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* bic<.f> 0,limm,s12 0010011010000110F111ssssssSSSSSS. */ +{ "bic", 0x26867000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* bic<.f> a,limm,limm 0010011000000110F111111110AAAAAA. */ +{ "bic", 0x26067F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* bic<.f> 0,limm,limm 0010011000000110F111111110111110. */ +{ "bic", 0x26067FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* bic<.f><.cc> 0,limm,limm 0010011011000110F1111111100QQQQQ. */ +{ "bic", 0x26C67F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* bicl<.f> RA,RB,RC 01011bbb00000110FBBBccccccaaaaaa. */ +{ "bicl", 0x58060000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* bicl<.f> 0,RB,RC 01011bbb00000110FBBBcccccc111110. */ +{ "bicl", 0x5806003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* bicl<.f><.cc> RB,RB,RC 01011bbb11000110FBBBcccccc0QQQQQ. */ +{ "bicl", 0x58C60000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* bicl<.f> RA,RB,u6 01011bbb01000110FBBBuuuuuuaaaaaa. */ +{ "bicl", 0x58460000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* bicl<.f> 0,RB,u6 01011bbb01000110FBBBuuuuuu111110. */ +{ "bicl", 0x5846003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* bicl<.f><.cc> RB,RB,u6 01011bbb11000110FBBBuuuuuu1QQQQQ. */ +{ "bicl", 0x58C60020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* bicl<.f> RB,RB,s12 01011bbb10000110FBBBssssssSSSSSS. */ +{ "bicl", 0x58860000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* bicl<.f> RA,ximm,RC 0101110000000110F111ccccccaaaaaa. */ +{ "bicl", 0x5C067000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* bicl<.f> RA,RB,ximm 01011bbb00000110FBBB111100aaaaaa. */ +{ "bicl", 0x58060F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* bicl<.f> 0,ximm,RC 0101110000000110F111cccccc111110. */ +{ "bicl", 0x5C06703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* bicl<.f> 0,RB,ximm 01011bbb00000110FBBB111100111110. */ +{ "bicl", 0x58060F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* bicl<.f><.cc> 0,ximm,RC 0101110011000110F111cccccc0QQQQQ. */ +{ "bicl", 0x5CC67000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* bicl<.f><.cc> RB,RB,ximm 01011bbb11000110FBBB1111000QQQQQ. */ +{ "bicl", 0x58C60F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* bicl<.f> RA,ximm,u6 0101110001000110F111uuuuuuaaaaaa. */ +{ "bicl", 0x5C467000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* bicl<.f> 0,ximm,u6 0101110001000110F111uuuuuu111110. */ +{ "bicl", 0x5C46703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* bicl<.f><.cc> 0,ximm,u6 0101110011000110F111uuuuuu1QQQQQ. */ +{ "bicl", 0x5CC67020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* bicl<.f> RA,limm,RC 0101111000000110F111ccccccaaaaaa. */ +{ "bicl", 0x5E067000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* bicl<.f> RA,RB,limm 01011bbb00000110FBBB111110aaaaaa. */ +{ "bicl", 0x58060F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* bicl<.f> 0,limm,RC 0101111000000110F111cccccc111110. */ +{ "bicl", 0x5E06703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* bicl<.f> 0,RB,limm 01011bbb00000110FBBB111110111110. */ +{ "bicl", 0x58060FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* bicl<.f><.cc> 0,limm,RC 0101111011000110F111cccccc0QQQQQ. */ +{ "bicl", 0x5EC67000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* bicl<.f><.cc> RB,RB,limm 01011bbb11000110FBBB1111100QQQQQ. */ +{ "bicl", 0x58C60F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* bicl<.f> RA,limm,u6 0101111001000110F111uuuuuuaaaaaa. */ +{ "bicl", 0x5E467000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* bicl<.f> 0,limm,u6 0101111001000110F111uuuuuu111110. */ +{ "bicl", 0x5E46703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* bicl<.f><.cc> 0,limm,u6 0101111011000110F111uuuuuu1QQQQQ. */ +{ "bicl", 0x5EC67020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* bicl<.f> 0,ximm,s12 0101110010000110F111ssssssSSSSSS. */ +{ "bicl", 0x5C867000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* bicl<.f> 0,limm,s12 0101111010000110F111ssssssSSSSSS. */ +{ "bicl", 0x5E867000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* bicl<.f> RA,ximm,ximm 0101110000000110F111111100aaaaaa. */ +{ "bicl", 0x5C067F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* bicl<.f> 0,ximm,ximm 0101110000000110F111111100111110. */ +{ "bicl", 0x5C067F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* bicl<.f><.cc> 0,ximm,ximm 0101110011000110F1111111000QQQQQ. */ +{ "bicl", 0x5CC67F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* bicl<.f> RA,limm,limm 0101111000000110F111111110aaaaaa. */ +{ "bicl", 0x5E067F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* bicl<.f> 0,limm,limm 0101111000000110F111111110111110. */ +{ "bicl", 0x5E067FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* bicl<.f><.cc> 0,limm,limm 0101111011000110F1111111100QQQQQ. */ +{ "bicl", 0x5EC67F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* bic_s b,b,c 01111bbbccc00110. */ +{ "bic_s", 0x00007806, 0x0000F81F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB_S, RB_Sdup, RC_S }, { 0 }}, + +/* bih c 00100RRR001001010RRRCCCCCCRRRRRR. */ +{ "bih", 0x20250000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BIH, NONE, { BRAKET, RC, BRAKETdup }, { 0 }}, + +/* bih limm 00100RRR001001010RRR111110RRRRRR. */ +{ "bih", 0x20250F80, 0xF8FF8FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BIH, NONE, { BRAKET, LIMM, BRAKETdup }, { 0 }}, + +/* bl<.d> s25 00001sssssssss10SSSSSSSSSSNRtttt. */ +{ "bl", 0x08020000, 0xF8030000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRANCH, NONE, { SIMM25_A32_5 }, { C_D }}, + +/* bl<.d><.cc> s21 00001sssssssss00SSSSSSSSSSNQQQQQ. */ +{ "bl", 0x08000000, 0xF8030000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRANCH, NONE, { SIMM21_A32_5 }, { C_CC, C_D }}, + +/* ble_sCC_LE s7 1111011011ssssss. */ +{ "ble_s", 0x0000F6C0, 0x0000FFC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRANCH, COND, { SIMM7_A16_10_S }, { C_CC_LE }}, + +/* blo_sCC_LO s7 1111011110ssssss. */ +{ "blo_s", 0x0000F780, 0x0000FFC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRANCH, COND, { SIMM7_A16_10_S }, { C_CC_LO }}, + +/* bls_sCC_LS s7 1111011111ssssss. */ +{ "bls_s", 0x0000F7C0, 0x0000FFC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRANCH, COND, { SIMM7_A16_10_S }, { C_CC_LS }}, + +/* blt_sCC_LT s7 1111011010ssssss. */ +{ "blt_s", 0x0000F680, 0x0000FFC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRANCH, COND, { SIMM7_A16_10_S }, { C_CC_LT }}, + +/* bl_s s13 11111sssssssssss. */ +{ "bl_s", 0x0000F800, 0x0000F800,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRANCH, NONE, { SIMM13_A32_5_S }, { 0 }}, + +/* bl_s LIMM 01111 011 111 00000. */ +{ "bl_s", 0x7BE0, 0xFFFF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRANCH, NONE, { LIMM34 }, { 0 }}, + +/* bmsk<.f> a,b,c 00100bbb00010011FBBBCCCCCCAAAAAA. */ +{ "bmsk", 0x20130000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, RC }, { C_F }}, + +/* bmsk<.f> 0,b,c 00100bbb00010011FBBBCCCCCC111110. */ +{ "bmsk", 0x2013003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, RC }, { C_F }}, + +/* bmsk<.f><.cc> b,b,c 00100bbb11010011FBBBCCCCCC0QQQQQ. */ +{ "bmsk", 0x20D30000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* bmsk<.f> a,b,u6 00100bbb01010011FBBBuuuuuuAAAAAA. */ +{ "bmsk", 0x20530000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* bmsk<.f> 0,b,u6 00100bbb01010011FBBBuuuuuu111110. */ +{ "bmsk", 0x2053003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* bmsk<.f><.cc> b,b,u6 00100bbb11010011FBBBuuuuuu1QQQQQ. */ +{ "bmsk", 0x20D30020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* bmsk<.f> b,b,s12 00100bbb10010011FBBBssssssSSSSSS. */ +{ "bmsk", 0x20930000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* bmsk<.f> a,limm,c 0010011000010011F111CCCCCCAAAAAA. */ +{ "bmsk", 0x26137000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, RC }, { C_F }}, + +/* bmsk<.f> a,b,limm 00100bbb00010011FBBB111110AAAAAA. */ +{ "bmsk", 0x20130F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, LIMM }, { C_F }}, + +/* bmsk<.f> 0,limm,c 0010011000010011F111CCCCCC111110. */ +{ "bmsk", 0x2613703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* bmsk<.f> 0,b,limm 00100bbb00010011FBBB111110111110. */ +{ "bmsk", 0x20130FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* bmsk<.f><.cc> b,b,limm 00100bbb11010011FBBB1111100QQQQQ. */ +{ "bmsk", 0x20D30F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* bmsk<.f><.cc> 0,limm,c 0010011011010011F111CCCCCC0QQQQQ. */ +{ "bmsk", 0x26D37000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* bmsk<.f> a,limm,u6 0010011001010011F111uuuuuuAAAAAA. */ +{ "bmsk", 0x26537000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* bmsk<.f> 0,limm,u6 0010011001010011F111uuuuuu111110. */ +{ "bmsk", 0x2653703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* bmsk<.f><.cc> 0,limm,u6 0010011011010011F111uuuuuu1QQQQQ. */ +{ "bmsk", 0x26D37020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* bmsk<.f> 0,limm,s12 0010011010010011F111ssssssSSSSSS. */ +{ "bmsk", 0x26937000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* bmsk<.f> a,limm,limm 0010011000010011F111111110AAAAAA. */ +{ "bmsk", 0x26137F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* bmsk<.f> 0,limm,limm 0010011000010011F111111110111110. */ +{ "bmsk", 0x26137FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* bmsk<.f><.cc> 0,limm,limm 0010011011010011F1111111100QQQQQ. */ +{ "bmsk", 0x26D37F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* bmskl<.f> RA,RB,RC 01011bbb00010011FBBBccccccaaaaaa. */ +{ "bmskl", 0x58130000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* bmskl<.f> 0,RB,RC 01011bbb00010011FBBBcccccc111110. */ +{ "bmskl", 0x5813003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* bmskl<.f><.cc> RB,RB,RC 01011bbb11010011FBBBcccccc0QQQQQ. */ +{ "bmskl", 0x58D30000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* bmskl<.f> RA,RB,u6 01011bbb01010011FBBBuuuuuuaaaaaa. */ +{ "bmskl", 0x58530000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* bmskl<.f> 0,RB,u6 01011bbb01010011FBBBuuuuuu111110. */ +{ "bmskl", 0x5853003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* bmskl<.f><.cc> RB,RB,u6 01011bbb11010011FBBBuuuuuu1QQQQQ. */ +{ "bmskl", 0x58D30020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* bmskl<.f> RB,RB,s12 01011bbb10010011FBBBssssssSSSSSS. */ +{ "bmskl", 0x58930000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* bmskl<.f> RA,ximm,RC 0101110000010011F111ccccccaaaaaa. */ +{ "bmskl", 0x5C137000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* bmskl<.f> RA,RB,ximm 01011bbb00010011FBBB111100aaaaaa. */ +{ "bmskl", 0x58130F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* bmskl<.f> 0,ximm,RC 0101110000010011F111cccccc111110. */ +{ "bmskl", 0x5C13703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* bmskl<.f> 0,RB,ximm 01011bbb00010011FBBB111100111110. */ +{ "bmskl", 0x58130F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* bmskl<.f><.cc> 0,ximm,RC 0101110011010011F111cccccc0QQQQQ. */ +{ "bmskl", 0x5CD37000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* bmskl<.f><.cc> RB,RB,ximm 01011bbb11010011FBBB1111000QQQQQ. */ +{ "bmskl", 0x58D30F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* bmskl<.f> RA,ximm,u6 0101110001010011F111uuuuuuaaaaaa. */ +{ "bmskl", 0x5C537000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* bmskl<.f> 0,ximm,u6 0101110001010011F111uuuuuu111110. */ +{ "bmskl", 0x5C53703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* bmskl<.f><.cc> 0,ximm,u6 0101110011010011F111uuuuuu1QQQQQ. */ +{ "bmskl", 0x5CD37020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* bmskl<.f> RA,limm,RC 0101111000010011F111ccccccaaaaaa. */ +{ "bmskl", 0x5E137000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* bmskl<.f> RA,RB,limm 01011bbb00010011FBBB111110aaaaaa. */ +{ "bmskl", 0x58130F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* bmskl<.f> 0,limm,RC 0101111000010011F111cccccc111110. */ +{ "bmskl", 0x5E13703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* bmskl<.f> 0,RB,limm 01011bbb00010011FBBB111110111110. */ +{ "bmskl", 0x58130FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* bmskl<.f><.cc> 0,limm,RC 0101111011010011F111cccccc0QQQQQ. */ +{ "bmskl", 0x5ED37000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* bmskl<.f><.cc> RB,RB,limm 01011bbb11010011FBBB1111100QQQQQ. */ +{ "bmskl", 0x58D30F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* bmskl<.f> RA,limm,u6 0101111001010011F111uuuuuuaaaaaa. */ +{ "bmskl", 0x5E537000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* bmskl<.f> 0,limm,u6 0101111001010011F111uuuuuu111110. */ +{ "bmskl", 0x5E53703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* bmskl<.f><.cc> 0,limm,u6 0101111011010011F111uuuuuu1QQQQQ. */ +{ "bmskl", 0x5ED37020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* bmskl<.f> 0,ximm,s12 0101110010010011F111ssssssSSSSSS. */ +{ "bmskl", 0x5C937000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* bmskl<.f> 0,limm,s12 0101111010010011F111ssssssSSSSSS. */ +{ "bmskl", 0x5E937000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* bmskl<.f> RA,ximm,ximm 0101110000010011F111111100aaaaaa. */ +{ "bmskl", 0x5C137F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* bmskl<.f> 0,ximm,ximm 0101110000010011F111111100111110. */ +{ "bmskl", 0x5C137F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* bmskl<.f><.cc> 0,ximm,ximm 0101110011010011F1111111000QQQQQ. */ +{ "bmskl", 0x5CD37F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* bmskl<.f> RA,limm,limm 0101111000010011F111111110aaaaaa. */ +{ "bmskl", 0x5E137F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* bmskl<.f> 0,limm,limm 0101111000010011F111111110111110. */ +{ "bmskl", 0x5E137FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* bmskl<.f><.cc> 0,limm,limm 0101111011010011F1111111100QQQQQ. */ +{ "bmskl", 0x5ED37F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* bmskn<.f> a,b,c 00100bbb00101100FBBBCCCCCCAAAAAA. */ +{ "bmskn", 0x202C0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, RC }, { C_F }}, + +/* bmskn<.f> 0,b,c 00100bbb00101100FBBBCCCCCC111110. */ +{ "bmskn", 0x202C003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, RC }, { C_F }}, + +/* bmskn<.f><.cc> b,b,c 00100bbb11101100FBBBCCCCCC0QQQQQ. */ +{ "bmskn", 0x20EC0000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* bmskn<.f> a,b,u6 00100bbb01101100FBBBuuuuuuAAAAAA. */ +{ "bmskn", 0x206C0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* bmskn<.f> 0,b,u6 00100bbb01101100FBBBuuuuuu111110. */ +{ "bmskn", 0x206C003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* bmskn<.f><.cc> b,b,u6 00100bbb11101100FBBBuuuuuu1QQQQQ. */ +{ "bmskn", 0x20EC0020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* bmskn<.f> b,b,s12 00100bbb10101100FBBBssssssSSSSSS. */ +{ "bmskn", 0x20AC0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* bmskn<.f> a,limm,c 0010011000101100F111CCCCCCAAAAAA. */ +{ "bmskn", 0x262C7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, RC }, { C_F }}, + +/* bmskn<.f> a,b,limm 00100bbb00101100FBBB111110AAAAAA. */ +{ "bmskn", 0x202C0F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, LIMM }, { C_F }}, + +/* bmskn<.f> 0,limm,c 0010011000101100F111CCCCCC111110. */ +{ "bmskn", 0x262C703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* bmskn<.f> 0,b,limm 00100bbb00101100FBBB111110111110. */ +{ "bmskn", 0x202C0FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* bmskn<.f><.cc> b,b,limm 00100bbb11101100FBBB1111100QQQQQ. */ +{ "bmskn", 0x20EC0F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* bmskn<.f><.cc> 0,limm,c 0010011011101100F111CCCCCC0QQQQQ. */ +{ "bmskn", 0x26EC7000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* bmskn<.f> a,limm,u6 0010011001101100F111uuuuuuAAAAAA. */ +{ "bmskn", 0x266C7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* bmskn<.f> 0,limm,u6 0010011001101100F111uuuuuu111110. */ +{ "bmskn", 0x266C703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* bmskn<.f><.cc> 0,limm,u6 0010011011101100F111uuuuuu1QQQQQ. */ +{ "bmskn", 0x26EC7020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* bmskn<.f> 0,limm,s12 0010011010101100F111ssssssSSSSSS. */ +{ "bmskn", 0x26AC7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* bmskn<.f> a,limm,limm 0010011000101100F111111110AAAAAA. */ +{ "bmskn", 0x262C7F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* bmskn<.f> 0,limm,limm 0010011000101100F111111110111110. */ +{ "bmskn", 0x262C7FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* bmskn<.f><.cc> 0,limm,limm 0010011011101100F1111111100QQQQQ. */ +{ "bmskn", 0x26EC7F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* bmsknl<.f> RA,RB,RC 01011bbb00101100FBBBccccccaaaaaa. */ +{ "bmsknl", 0x582C0000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* bmsknl<.f> 0,RB,RC 01011bbb00101100FBBBcccccc111110. */ +{ "bmsknl", 0x582C003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* bmsknl<.f><.cc> RB,RB,RC 01011bbb11101100FBBBcccccc0QQQQQ. */ +{ "bmsknl", 0x58EC0000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* bmsknl<.f> RA,RB,u6 01011bbb01101100FBBBuuuuuuaaaaaa. */ +{ "bmsknl", 0x586C0000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* bmsknl<.f> 0,RB,u6 01011bbb01101100FBBBuuuuuu111110. */ +{ "bmsknl", 0x586C003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* bmsknl<.f><.cc> RB,RB,u6 01011bbb11101100FBBBuuuuuu1QQQQQ. */ +{ "bmsknl", 0x58EC0020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* bmsknl<.f> RB,RB,s12 01011bbb10101100FBBBssssssSSSSSS. */ +{ "bmsknl", 0x58AC0000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* bmsknl<.f> RA,ximm,RC 0101110000101100F111ccccccaaaaaa. */ +{ "bmsknl", 0x5C2C7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* bmsknl<.f> RA,RB,ximm 01011bbb00101100FBBB111100aaaaaa. */ +{ "bmsknl", 0x582C0F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* bmsknl<.f> 0,ximm,RC 0101110000101100F111cccccc111110. */ +{ "bmsknl", 0x5C2C703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* bmsknl<.f> 0,RB,ximm 01011bbb00101100FBBB111100111110. */ +{ "bmsknl", 0x582C0F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* bmsknl<.f><.cc> 0,ximm,RC 0101110011101100F111cccccc0QQQQQ. */ +{ "bmsknl", 0x5CEC7000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* bmsknl<.f><.cc> RB,RB,ximm 01011bbb11101100FBBB1111000QQQQQ. */ +{ "bmsknl", 0x58EC0F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* bmsknl<.f> RA,ximm,u6 0101110001101100F111uuuuuuaaaaaa. */ +{ "bmsknl", 0x5C6C7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* bmsknl<.f> 0,ximm,u6 0101110001101100F111uuuuuu111110. */ +{ "bmsknl", 0x5C6C703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* bmsknl<.f><.cc> 0,ximm,u6 0101110011101100F111uuuuuu1QQQQQ. */ +{ "bmsknl", 0x5CEC7020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* bmsknl<.f> RA,limm,RC 0101111000101100F111ccccccaaaaaa. */ +{ "bmsknl", 0x5E2C7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* bmsknl<.f> RA,RB,limm 01011bbb00101100FBBB111110aaaaaa. */ +{ "bmsknl", 0x582C0F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* bmsknl<.f> 0,limm,RC 0101111000101100F111cccccc111110. */ +{ "bmsknl", 0x5E2C703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* bmsknl<.f> 0,RB,limm 01011bbb00101100FBBB111110111110. */ +{ "bmsknl", 0x582C0FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* bmsknl<.f><.cc> 0,limm,RC 0101111011101100F111cccccc0QQQQQ. */ +{ "bmsknl", 0x5EEC7000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* bmsknl<.f><.cc> RB,RB,limm 01011bbb11101100FBBB1111100QQQQQ. */ +{ "bmsknl", 0x58EC0F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* bmsknl<.f> RA,limm,u6 0101111001101100F111uuuuuuaaaaaa. */ +{ "bmsknl", 0x5E6C7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* bmsknl<.f> 0,limm,u6 0101111001101100F111uuuuuu111110. */ +{ "bmsknl", 0x5E6C703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* bmsknl<.f><.cc> 0,limm,u6 0101111011101100F111uuuuuu1QQQQQ. */ +{ "bmsknl", 0x5EEC7020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* bmsknl<.f> 0,ximm,s12 0101110010101100F111ssssssSSSSSS. */ +{ "bmsknl", 0x5CAC7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* bmsknl<.f> 0,limm,s12 0101111010101100F111ssssssSSSSSS. */ +{ "bmsknl", 0x5EAC7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* bmsknl<.f> RA,ximm,ximm 0101110000101100F111111100aaaaaa. */ +{ "bmsknl", 0x5C2C7F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* bmsknl<.f> 0,ximm,ximm 0101110000101100F111111100111110. */ +{ "bmsknl", 0x5C2C7F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* bmsknl<.f><.cc> 0,ximm,ximm 0101110011101100F1111111000QQQQQ. */ +{ "bmsknl", 0x5CEC7F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* bmsknl<.f> RA,limm,limm 0101111000101100F111111110aaaaaa. */ +{ "bmsknl", 0x5E2C7F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* bmsknl<.f> 0,limm,limm 0101111000101100F111111110111110. */ +{ "bmsknl", 0x5E2C7FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* bmsknl<.f><.cc> 0,limm,limm 0101111011101100F1111111100QQQQQ. */ +{ "bmsknl", 0x5EEC7F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* bmsk_s b,b,u5 10111bbb110uuuuu. */ +{ "bmsk_s", 0x0000B8C0, 0x0000F8E0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB_S, RB_Sdup, UIMM5_11_S }, { 0 }}, + +/* bne_sCC_NE s10 1111010sssssssss. */ +{ "bne_s", 0x0000F400, 0x0000FE00,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRANCH, COND, { SIMM10_A16_7_S }, { C_CC_NE }}, + +/* breq<.d>CC_EQ b,c,s9 00001bbbsssssss1SBBBCCCCCCN00000. */ +{ "breq", 0x08010000, 0xF801001F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRCC, NONE, { RB, RC, SIMM9_A16_8 }, { C_D, C_CC_EQ }}, + +/* breq<.d>CC_EQ b,u6,s9 00001bbbsssssss1SBBBuuuuuuN10000. */ +{ "breq", 0x08010010, 0xF801001F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRCC, NONE, { RB, UIMM6_8, SIMM9_A16_8 }, { C_D, C_CC_EQ }}, + +/* breqCC_EQ b,limm,s9 00001bbbsssssss1SBBB111110000000. */ +{ "breq", 0x08010F80, 0xF8010FFF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRCC, NONE, { RB, LIMM, SIMM9_A16_8 }, { C_CC_EQ }}, + +/* breqCC_EQ limm,c,s9 00001110sssssss1S111CCCCCC000000. */ +{ "breq", 0x0E017000, 0xFF01703F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRCC, NONE, { LIMM, RC, SIMM9_A16_8 }, { C_CC_EQ }}, + +/* breqCC_EQ limm,u6,s9 00001110sssssss1S111uuuuuu010000. */ +{ "breq", 0x0E017010, 0xFF01703F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRCC, NONE, { LIMM, UIMM6_8, SIMM9_A16_8 }, { C_CC_EQ }}, + +/* breqCC_EQ limm,limm,s9 00001110sssssss1S111111110000000. */ +{ "breq", 0x0E017F80, 0xFF017FFF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRCC, NONE, { LIMM, LIMMdup, SIMM9_A16_8 }, { C_CC_EQ }}, + +/* breql<.d> b,c,s9 00001bbbsssssss1SBBBCCCCCCN01000. */ +{ "breql", 0x08010008, 0xF801001F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC, SIMM9_A16_8 }, { C_D }}, + +/* breql<.d> b,u6,s9 00001bbbsssssss1SBBBuuuuuuN11000. */ +{ "breql", 0x08010018, 0xF801001F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_8, SIMM9_A16_8 }, { C_D }}, + +/* breql b,ximm,s9 00001bbbsssssss1SBBB111100001000. */ +{ "breql", 0x08010F08, 0xF8010FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, XIMM, SIMM9_A16_8 }, { 0 }}, + +/* breql ximm,c,s9 00001100sssssss1S111CCCCCC001000. */ +{ "breql", 0x0C017008, 0xFF01703F, ARC_OPCODE_ARC64, ARITH, NONE, { XIMM, RC, SIMM9_A16_8 }, { 0 }}, + +/* breql ximm,u6,s9 00001100sssssss1S111uuuuuu011000. */ +{ "breql", 0x0C017018, 0xFF01703F, ARC_OPCODE_ARC64, ARITH, NONE, { XIMM, UIMM6_8, SIMM9_A16_8 }, { 0 }}, + +/* breql b,limm,s9 00001bbbsssssss1SBBB111110001000. */ +{ "breql", 0x08010F88, 0xF8010FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM, SIMM9_A16_8 }, { 0 }}, + +/* breql limm,c,s9 00001110sssssss1S111CCCCCC001000. */ +{ "breql", 0x0E017008, 0xFF01703F, ARC_OPCODE_ARC64, ARITH, NONE, { LIMM, RC, SIMM9_A16_8 }, { 0 }}, + +/* breql limm,u6,s9 00001110sssssss1S111uuuuuu011000. */ +{ "breql", 0x0E017018, 0xFF01703F, ARC_OPCODE_ARC64, ARITH, NONE, { LIMM, UIMM6_8, SIMM9_A16_8 }, { 0 }}, + +/* breql_s b,0,s8 11101bbb0sssssss. */ +{ "breql_s", 0x0000E800, 0x0000F880, ARC_OPCODE_ARC64, ARITH, NONE, { RB_S, ZB_S, SIMM8_A16_9_S }, { 0 }}, + +/* breq_s b,0,s8 11101bbb0sssssss. */ +{ "breq_s", 0x0000E800, 0x0000F880, ARC_OPCODE_ARC32, ARITH, NONE, { RB_S, ZB_S, SIMM8_A16_9_S }, { 0 }}, + +/* brge<.d>CC_GE b,c,s9 00001bbbsssssss1SBBBCCCCCCN00011. */ +{ "brge", 0x08010003, 0xF801001F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRCC, NONE, { RB, RC, SIMM9_A16_8 }, { C_D, C_CC_GE }}, + +/* brge<.d>CC_GE b,u6,s9 00001bbbsssssss1SBBBuuuuuuN10011. */ +{ "brge", 0x08010013, 0xF801001F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRCC, NONE, { RB, UIMM6_8, SIMM9_A16_8 }, { C_D, C_CC_GE }}, + +/* brgeCC_GE b,limm,s9 00001bbbsssssss1SBBB111110000011. */ +{ "brge", 0x08010F83, 0xF8010FFF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRCC, NONE, { RB, LIMM, SIMM9_A16_8 }, { C_CC_GE }}, + +/* brgeCC_GE limm,c,s9 00001110sssssss1S111CCCCCC000011. */ +{ "brge", 0x0E017003, 0xFF01703F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRCC, NONE, { LIMM, RC, SIMM9_A16_8 }, { C_CC_GE }}, + +/* brgeCC_GE limm,u6,s9 00001110sssssss1S111uuuuuu010011. */ +{ "brge", 0x0E017013, 0xFF01703F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRCC, NONE, { LIMM, UIMM6_8, SIMM9_A16_8 }, { C_CC_GE }}, + +/* brgeCC_GE limm,limm,s9 00001110sssssss1S111111110000011. */ +{ "brge", 0x0E017F83, 0xFF017FFF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRCC, NONE, { LIMM, LIMMdup, SIMM9_A16_8 }, { C_CC_GE }}, + +/* brgel<.d> b,c,s9 00001bbbsssssss1SBBBCCCCCCN01011. */ +{ "brgel", 0x0801000B, 0xF801001F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC, SIMM9_A16_8 }, { C_D }}, + +/* brgel<.d> b,u6,s9 00001bbbsssssss1SBBBuuuuuuN11011. */ +{ "brgel", 0x0801001B, 0xF801001F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_8, SIMM9_A16_8 }, { C_D }}, + +/* brgel b,ximm,s9 00001bbbsssssss1SBBB111100001011. */ +{ "brgel", 0x08010F0B, 0xF8010FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, XIMM, SIMM9_A16_8 }, { 0 }}, + +/* brgel ximm,c,s9 00001100sssssss1S111CCCCCC001011. */ +{ "brgel", 0x0C01700B, 0xFF01703F, ARC_OPCODE_ARC64, ARITH, NONE, { XIMM, RC, SIMM9_A16_8 }, { 0 }}, + +/* brgel ximm,u6,s9 00001100sssssss1S111uuuuuu011011. */ +{ "brgel", 0x0C01701B, 0xFF01703F, ARC_OPCODE_ARC64, ARITH, NONE, { XIMM, UIMM6_8, SIMM9_A16_8 }, { 0 }}, + +/* brgel b,limm,s9 00001bbbsssssss1SBBB111110001011. */ +{ "brgel", 0x08010F8B, 0xF8010FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM, SIMM9_A16_8 }, { 0 }}, + +/* brgel limm,c,s9 00001110sssssss1S111CCCCCC001011. */ +{ "brgel", 0x0E01700B, 0xFF01703F, ARC_OPCODE_ARC64, ARITH, NONE, { LIMM, RC, SIMM9_A16_8 }, { 0 }}, + +/* brgel limm,u6,s9 00001110sssssss1S111uuuuuu011011. */ +{ "brgel", 0x0E01701B, 0xFF01703F, ARC_OPCODE_ARC64, ARITH, NONE, { LIMM, UIMM6_8, SIMM9_A16_8 }, { 0 }}, + +/* brhs<.d>CC_HS b,c,s9 00001bbbsssssss1SBBBCCCCCCN00101. */ +{ "brhs", 0x08010005, 0xF801001F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRCC, NONE, { RB, RC, SIMM9_A16_8 }, { C_D, C_CC_HS }}, + +/* brhs<.d>CC_HS b,u6,s9 00001bbbsssssss1SBBBuuuuuuN10101. */ +{ "brhs", 0x08010015, 0xF801001F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRCC, NONE, { RB, UIMM6_8, SIMM9_A16_8 }, { C_D, C_CC_HS }}, + +/* brhsCC_HS b,limm,s9 00001bbbsssssss1SBBB111110000101. */ +{ "brhs", 0x08010F85, 0xF8010FFF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRCC, NONE, { RB, LIMM, SIMM9_A16_8 }, { C_CC_HS }}, + +/* brhsCC_HS limm,c,s9 00001110sssssss1S111CCCCCC000101. */ +{ "brhs", 0x0E017005, 0xFF01703F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRCC, NONE, { LIMM, RC, SIMM9_A16_8 }, { C_CC_HS }}, + +/* brhsCC_HS limm,u6,s9 00001110sssssss1S111uuuuuu010101. */ +{ "brhs", 0x0E017015, 0xFF01703F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRCC, NONE, { LIMM, UIMM6_8, SIMM9_A16_8 }, { C_CC_HS }}, + +/* brhsCC_HS limm,limm,s9 00001110sssssss1S111111110000101. */ +{ "brhs", 0x0E017F85, 0xFF017FFF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRCC, NONE, { LIMM, LIMMdup, SIMM9_A16_8 }, { C_CC_HS }}, + +/* brhsl<.d> b,c,s9 00001bbbsssssss1SBBBCCCCCCN01101. */ +{ "brhsl", 0x0801000D, 0xF801001F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC, SIMM9_A16_8 }, { C_D }}, + +/* brhsl<.d> b,u6,s9 00001bbbsssssss1SBBBuuuuuuN11101. */ +{ "brhsl", 0x0801001D, 0xF801001F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_8, SIMM9_A16_8 }, { C_D }}, + +/* brhsl b,ximm,s9 00001bbbsssssss1SBBB111100001101. */ +{ "brhsl", 0x08010F0D, 0xF8010FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, XIMM, SIMM9_A16_8 }, { 0 }}, + +/* brhsl ximm,c,s9 00001100sssssss1S111CCCCCC001101. */ +{ "brhsl", 0x0C01700D, 0xFF01703F, ARC_OPCODE_ARC64, ARITH, NONE, { XIMM, RC, SIMM9_A16_8 }, { 0 }}, + +/* brhsl ximm,u6,s9 00001100sssssss1S111uuuuuu011101. */ +{ "brhsl", 0x0C01701D, 0xFF01703F, ARC_OPCODE_ARC64, ARITH, NONE, { XIMM, UIMM6_8, SIMM9_A16_8 }, { 0 }}, + +/* brhsl b,limm,s9 00001bbbsssssss1SBBB111110001101. */ +{ "brhsl", 0x08010F8D, 0xF8010FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM, SIMM9_A16_8 }, { 0 }}, + +/* brhsl limm,c,s9 00001110sssssss1S111CCCCCC001101. */ +{ "brhsl", 0x0E01700D, 0xFF01703F, ARC_OPCODE_ARC64, ARITH, NONE, { LIMM, RC, SIMM9_A16_8 }, { 0 }}, + +/* brhsl limm,u6,s9 00001110sssssss1S111uuuuuu011101. */ +{ "brhsl", 0x0E01701D, 0xFF01703F, ARC_OPCODE_ARC64, ARITH, NONE, { LIMM, UIMM6_8, SIMM9_A16_8 }, { 0 }}, + +/* brk 00100101011011110000000000111111. */ +{ "brk", 0x256F003F, 0xFFFFFFFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, KERNEL, NONE, { 0 }, { 0 }}, + +/* brk_s 0111111111111111. */ +{ "brk_s", 0x00007FFF, 0x0000FFFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, KERNEL, NONE, { 0 }, { 0 }}, + +/* brlo<.d>CC_LO b,c,s9 00001bbbsssssss1SBBBCCCCCCN00100. */ +{ "brlo", 0x08010004, 0xF801001F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRCC, NONE, { RB, RC, SIMM9_A16_8 }, { C_D, C_CC_LO }}, + +/* brlo<.d>CC_LO b,u6,s9 00001bbbsssssss1SBBBuuuuuuN10100. */ +{ "brlo", 0x08010014, 0xF801001F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRCC, NONE, { RB, UIMM6_8, SIMM9_A16_8 }, { C_D, C_CC_LO }}, + +/* brloCC_LO b,limm,s9 00001bbbsssssss1SBBB111110000100. */ +{ "brlo", 0x08010F84, 0xF8010FFF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRCC, NONE, { RB, LIMM, SIMM9_A16_8 }, { C_CC_LO }}, + +/* brloCC_LO limm,c,s9 00001110sssssss1S111CCCCCC000100. */ +{ "brlo", 0x0E017004, 0xFF01703F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRCC, NONE, { LIMM, RC, SIMM9_A16_8 }, { C_CC_LO }}, + +/* brloCC_LO limm,u6,s9 00001110sssssss1S111uuuuuu010100. */ +{ "brlo", 0x0E017014, 0xFF01703F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRCC, NONE, { LIMM, UIMM6_8, SIMM9_A16_8 }, { C_CC_LO }}, + +/* brloCC_LO limm,limm,s9 00001110sssssss1S111111110000100. */ +{ "brlo", 0x0E017F84, 0xFF017FFF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRCC, NONE, { LIMM, LIMMdup, SIMM9_A16_8 }, { C_CC_LO }}, + +/* brlol<.d> b,c,s9 00001bbbsssssss1SBBBCCCCCCN01100. */ +{ "brlol", 0x0801000C, 0xF801001F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC, SIMM9_A16_8 }, { C_D }}, + +/* brlol<.d> b,u6,s9 00001bbbsssssss1SBBBuuuuuuN11100. */ +{ "brlol", 0x0801001C, 0xF801001F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_8, SIMM9_A16_8 }, { C_D }}, + +/* brlol b,ximm,s9 00001bbbsssssss1SBBB111100001100. */ +{ "brlol", 0x08010F0C, 0xF8010FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, XIMM, SIMM9_A16_8 }, { 0 }}, + +/* brlol ximm,c,s9 00001100sssssss1S111CCCCCC001100. */ +{ "brlol", 0x0C01700C, 0xFF01703F, ARC_OPCODE_ARC64, ARITH, NONE, { XIMM, RC, SIMM9_A16_8 }, { 0 }}, + +/* brlol ximm,u6,s9 00001100sssssss1S111uuuuuu011100. */ +{ "brlol", 0x0C01701C, 0xFF01703F, ARC_OPCODE_ARC64, ARITH, NONE, { XIMM, UIMM6_8, SIMM9_A16_8 }, { 0 }}, + +/* brlol b,limm,s9 00001bbbsssssss1SBBB111110001100. */ +{ "brlol", 0x08010F8C, 0xF8010FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM, SIMM9_A16_8 }, { 0 }}, + +/* brlol limm,c,s9 00001110sssssss1S111CCCCCC001100. */ +{ "brlol", 0x0E01700C, 0xFF01703F, ARC_OPCODE_ARC64, ARITH, NONE, { LIMM, RC, SIMM9_A16_8 }, { 0 }}, + +/* brlol limm,u6,s9 00001110sssssss1S111uuuuuu011100. */ +{ "brlol", 0x0E01701C, 0xFF01703F, ARC_OPCODE_ARC64, ARITH, NONE, { LIMM, UIMM6_8, SIMM9_A16_8 }, { 0 }}, + +/* brlt<.d>CC_LT b,c,s9 00001bbbsssssss1SBBBCCCCCCN00010. */ +{ "brlt", 0x08010002, 0xF801001F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRCC, NONE, { RB, RC, SIMM9_A16_8 }, { C_D, C_CC_LT }}, + +/* brlt<.d>CC_LT b,u6,s9 00001bbbsssssss1SBBBuuuuuuN10010. */ +{ "brlt", 0x08010012, 0xF801001F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRCC, NONE, { RB, UIMM6_8, SIMM9_A16_8 }, { C_D, C_CC_LT }}, + +/* brltCC_LT b,limm,s9 00001bbbsssssss1SBBB111110000010. */ +{ "brlt", 0x08010F82, 0xF8010FFF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRCC, NONE, { RB, LIMM, SIMM9_A16_8 }, { C_CC_LT }}, + +/* brltCC_LT limm,c,s9 00001110sssssss1S111CCCCCC000010. */ +{ "brlt", 0x0E017002, 0xFF01703F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRCC, NONE, { LIMM, RC, SIMM9_A16_8 }, { C_CC_LT }}, + +/* brltCC_LT limm,u6,s9 00001110sssssss1S111uuuuuu010010. */ +{ "brlt", 0x0E017012, 0xFF01703F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRCC, NONE, { LIMM, UIMM6_8, SIMM9_A16_8 }, { C_CC_LT }}, + +/* brltCC_LT limm,limm,s9 00001110sssssss1S111111110000010. */ +{ "brlt", 0x0E017F82, 0xFF017FFF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRCC, NONE, { LIMM, LIMMdup, SIMM9_A16_8 }, { C_CC_LT }}, + +/* brltl<.d> b,c,s9 00001bbbsssssss1SBBBCCCCCCN01010. */ +{ "brltl", 0x0801000A, 0xF801001F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC, SIMM9_A16_8 }, { C_D }}, + +/* brltl<.d> b,u6,s9 00001bbbsssssss1SBBBuuuuuuN11010. */ +{ "brltl", 0x0801001A, 0xF801001F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_8, SIMM9_A16_8 }, { C_D }}, + +/* brltl b,ximm,s9 00001bbbsssssss1SBBB111100001010. */ +{ "brltl", 0x08010F0A, 0xF8010FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, XIMM, SIMM9_A16_8 }, { 0 }}, + +/* brltl ximm,c,s9 00001100sssssss1S111CCCCCC001010. */ +{ "brltl", 0x0C01700A, 0xFF01703F, ARC_OPCODE_ARC64, ARITH, NONE, { XIMM, RC, SIMM9_A16_8 }, { 0 }}, + +/* brltl ximm,u6,s9 00001100sssssss1S111uuuuuu011010. */ +{ "brltl", 0x0C01701A, 0xFF01703F, ARC_OPCODE_ARC64, ARITH, NONE, { XIMM, UIMM6_8, SIMM9_A16_8 }, { 0 }}, + +/* brltl b,limm,s9 00001bbbsssssss1SBBB111110001010. */ +{ "brltl", 0x08010F8A, 0xF8010FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM, SIMM9_A16_8 }, { 0 }}, + +/* brltl limm,c,s9 00001110sssssss1S111CCCCCC001010. */ +{ "brltl", 0x0E01700A, 0xFF01703F, ARC_OPCODE_ARC64, ARITH, NONE, { LIMM, RC, SIMM9_A16_8 }, { 0 }}, + +/* brltl limm,u6,s9 00001110sssssss1S111uuuuuu011010. */ +{ "brltl", 0x0E01701A, 0xFF01703F, ARC_OPCODE_ARC64, ARITH, NONE, { LIMM, UIMM6_8, SIMM9_A16_8 }, { 0 }}, + +/* brne<.d>CC_NE b,c,s9 00001bbbsssssss1SBBBCCCCCCN00001. */ +{ "brne", 0x08010001, 0xF801001F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRCC, NONE, { RB, RC, SIMM9_A16_8 }, { C_D, C_CC_NE }}, + +/* brne<.d>CC_NE b,u6,s9 00001bbbsssssss1SBBBuuuuuuN10001. */ +{ "brne", 0x08010011, 0xF801001F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRCC, NONE, { RB, UIMM6_8, SIMM9_A16_8 }, { C_D, C_CC_NE }}, + +/* brneCC_NE b,limm,s9 00001bbbsssssss1SBBB111110000001. */ +{ "brne", 0x08010F81, 0xF8010FFF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRCC, NONE, { RB, LIMM, SIMM9_A16_8 }, { C_CC_NE }}, + +/* brneCC_NE limm,c,s9 00001110sssssss1S111CCCCCC000001. */ +{ "brne", 0x0E017001, 0xFF01703F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRCC, NONE, { LIMM, RC, SIMM9_A16_8 }, { C_CC_NE }}, + +/* brneCC_NE limm,u6,s9 00001110sssssss1S111uuuuuu010001. */ +{ "brne", 0x0E017011, 0xFF01703F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRCC, NONE, { LIMM, UIMM6_8, SIMM9_A16_8 }, { C_CC_NE }}, + +/* brneCC_NE limm,limm,s9 00001110sssssss1S111111110000001. */ +{ "brne", 0x0E017F81, 0xFF017FFF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRCC, NONE, { LIMM, LIMMdup, SIMM9_A16_8 }, { C_CC_NE }}, + +/* brnel<.d> b,c,s9 00001bbbsssssss1SBBBCCCCCCN01001. */ +{ "brnel", 0x08010009, 0xF801001F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC, SIMM9_A16_8 }, { C_D }}, + +/* brnel<.d> b,u6,s9 00001bbbsssssss1SBBBUUUUUUN11001. */ +{ "brnel", 0x08010019, 0xF801001F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_8, SIMM9_A16_8 }, { C_D }}, + +/* brnel b,ximm,s9 00001bbbsssssss1SBBB111100001001. */ +{ "brnel", 0x08010F09, 0xF8010FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, XIMM, SIMM9_A16_8 }, { 0 }}, + +/* brnel ximm,c,s9 00001100sssssss1S111CCCCCC001001. */ +{ "brnel", 0x0C017009, 0xFF01703F, ARC_OPCODE_ARC64, ARITH, NONE, { XIMM, RC, SIMM9_A16_8 }, { 0 }}, + +/* brnel ximm,u6,s9 00001100sssssss1S111uuuuuu011001. */ +{ "brnel", 0x0C017019, 0xFF01703F, ARC_OPCODE_ARC64, ARITH, NONE, { XIMM, UIMM6_8, SIMM9_A16_8 }, { 0 }}, + +/* brnel b,limm,s9 00001bbbsssssss1SBBB111110001001. */ +{ "brnel", 0x08010F89, 0xF8010FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM, SIMM9_A16_8 }, { 0 }}, + +/* brnel limm,c,s9 00001110sssssss1S111CCCCCC001001. */ +{ "brnel", 0x0E017009, 0xFF01703F, ARC_OPCODE_ARC64, ARITH, NONE, { LIMM, RC, SIMM9_A16_8 }, { 0 }}, + +/* brnel limm,u6,s9 00001110sssssss1S111uuuuuu011001. */ +{ "brnel", 0x0E017019, 0xFF01703F, ARC_OPCODE_ARC64, ARITH, NONE, { LIMM, UIMM6_8, SIMM9_A16_8 }, { 0 }}, + +/* brnel_s b,0,s8 11101bbb1sssssss. */ +{ "brnel_s", 0x0000E880, 0x0000F880, ARC_OPCODE_ARC64, ARITH, NONE, { RB_S, ZB_S, SIMM8_A16_9_S }, { 0 }}, + +/* brne_s b,0,s8 11101bbb1sssssss. */ +{ "brne_s", 0x0000E880, 0x0000F880, ARC_OPCODE_ARC32, ARITH, NONE, { RB_S, ZB_S, SIMM8_A16_9_S }, { 0 }}, + +/* bset<.f> a,b,c 00100bbb00001111FBBBCCCCCCAAAAAA. */ +{ "bset", 0x200F0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, RC }, { C_F }}, + +/* bset<.f> 0,b,c 00100bbb00001111FBBBCCCCCC111110. */ +{ "bset", 0x200F003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, RC }, { C_F }}, + +/* bset<.f><.cc> b,b,c 00100bbb11001111FBBBCCCCCC0QQQQQ. */ +{ "bset", 0x20CF0000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* bset<.f> a,b,u6 00100bbb01001111FBBBuuuuuuAAAAAA. */ +{ "bset", 0x204F0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* bset<.f> 0,b,u6 00100bbb01001111FBBBuuuuuu111110. */ +{ "bset", 0x204F003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* bset<.f><.cc> b,b,u6 00100bbb11001111FBBBuuuuuu1QQQQQ. */ +{ "bset", 0x20CF0020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* bset<.f> b,b,s12 00100bbb10001111FBBBssssssSSSSSS. */ +{ "bset", 0x208F0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* bset<.f> a,limm,c 0010011000001111F111CCCCCCAAAAAA. */ +{ "bset", 0x260F7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, RC }, { C_F }}, + +/* bset<.f> a,b,limm 00100bbb00001111FBBB111110AAAAAA. */ +{ "bset", 0x200F0F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, LIMM }, { C_F }}, + +/* bset<.f> 0,limm,c 0010011000001111F111CCCCCC111110. */ +{ "bset", 0x260F703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* bset<.f> 0,b,limm 00100bbb00001111FBBB111110111110. */ +{ "bset", 0x200F0FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* bset<.f><.cc> b,b,limm 00100bbb11001111FBBB1111100QQQQQ. */ +{ "bset", 0x20CF0F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* bset<.f><.cc> 0,limm,c 0010011011001111F111CCCCCC0QQQQQ. */ +{ "bset", 0x26CF7000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* bset<.f> a,limm,u6 0010011001001111F111uuuuuuAAAAAA. */ +{ "bset", 0x264F7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* bset<.f> 0,limm,u6 0010011001001111F111uuuuuu111110. */ +{ "bset", 0x264F703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* bset<.f><.cc> 0,limm,u6 0010011011001111F111uuuuuu1QQQQQ. */ +{ "bset", 0x26CF7020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* bset<.f> 0,limm,s12 0010011010001111F111ssssssSSSSSS. */ +{ "bset", 0x268F7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* bset<.f> a,limm,limm 0010011000001111F111111110AAAAAA. */ +{ "bset", 0x260F7F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* bset<.f> 0,limm,limm 0010011000001111F111111110111110. */ +{ "bset", 0x260F7FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* bset<.f><.cc> 0,limm,limm 0010011011001111F1111111100QQQQQ. */ +{ "bset", 0x26CF7F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* bsetl<.f> RA,RB,RC 01011bbb00001111FBBBccccccaaaaaa. */ +{ "bsetl", 0x580F0000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* bsetl<.f> 0,RB,RC 01011bbb00001111FBBBcccccc111110. */ +{ "bsetl", 0x580F003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* bsetl<.f><.cc> RB,RB,RC 01011bbb11001111FBBBcccccc0QQQQQ. */ +{ "bsetl", 0x58CF0000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* bsetl<.f> RA,RB,u6 01011bbb01001111FBBBuuuuuuaaaaaa. */ +{ "bsetl", 0x584F0000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* bsetl<.f> 0,RB,u6 01011bbb01001111FBBBuuuuuu111110. */ +{ "bsetl", 0x584F003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* bsetl<.f><.cc> RB,RB,u6 01011bbb11001111FBBBuuuuuu1QQQQQ. */ +{ "bsetl", 0x58CF0020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* bsetl<.f> RB,RB,s12 01011bbb10001111FBBBssssssSSSSSS. */ +{ "bsetl", 0x588F0000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* bsetl<.f> RA,ximm,RC 0101110000001111F111ccccccaaaaaa. */ +{ "bsetl", 0x5C0F7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* bsetl<.f> RA,RB,ximm 01011bbb00001111FBBB111100aaaaaa. */ +{ "bsetl", 0x580F0F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* bsetl<.f> 0,ximm,RC 0101110000001111F111cccccc111110. */ +{ "bsetl", 0x5C0F703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* bsetl<.f> 0,RB,ximm 01011bbb00001111FBBB111100111110. */ +{ "bsetl", 0x580F0F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* bsetl<.f><.cc> 0,ximm,RC 0101110011001111F111cccccc0QQQQQ. */ +{ "bsetl", 0x5CCF7000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* bsetl<.f><.cc> RB,RB,ximm 01011bbb11001111FBBB1111000QQQQQ. */ +{ "bsetl", 0x58CF0F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* bsetl<.f> RA,ximm,u6 0101110001001111F111uuuuuuaaaaaa. */ +{ "bsetl", 0x5C4F7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* bsetl<.f> 0,ximm,u6 0101110001001111F111uuuuuu111110. */ +{ "bsetl", 0x5C4F703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* bsetl<.f><.cc> 0,ximm,u6 0101110011001111F111uuuuuu1QQQQQ. */ +{ "bsetl", 0x5CCF7020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* bsetl<.f> RA,limm,RC 0101111000001111F111ccccccaaaaaa. */ +{ "bsetl", 0x5E0F7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* bsetl<.f> RA,RB,limm 01011bbb00001111FBBB111110aaaaaa. */ +{ "bsetl", 0x580F0F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* bsetl<.f> 0,limm,RC 0101111000001111F111cccccc111110. */ +{ "bsetl", 0x5E0F703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* bsetl<.f> 0,RB,limm 01011bbb00001111FBBB111110111110. */ +{ "bsetl", 0x580F0FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* bsetl<.f><.cc> 0,limm,RC 0101111011001111F111cccccc0QQQQQ. */ +{ "bsetl", 0x5ECF7000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* bsetl<.f><.cc> RB,RB,limm 01011bbb11001111FBBB1111100QQQQQ. */ +{ "bsetl", 0x58CF0F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* bsetl<.f> RA,limm,u6 0101111001001111F111uuuuuuaaaaaa. */ +{ "bsetl", 0x5E4F7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* bsetl<.f> 0,limm,u6 0101111001001111F111uuuuuu111110. */ +{ "bsetl", 0x5E4F703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* bsetl<.f><.cc> 0,limm,u6 0101111011001111F111uuuuuu1QQQQQ. */ +{ "bsetl", 0x5ECF7020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* bsetl<.f> 0,ximm,s12 0101110010001111F111ssssssSSSSSS. */ +{ "bsetl", 0x5C8F7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* bsetl<.f> 0,limm,s12 0101111010001111F111ssssssSSSSSS. */ +{ "bsetl", 0x5E8F7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* bsetl<.f> RA,ximm,ximm 0101110000001111F111111100aaaaaa. */ +{ "bsetl", 0x5C0F7F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* bsetl<.f> 0,ximm,ximm 0101110000001111F111111100111110. */ +{ "bsetl", 0x5C0F7F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* bsetl<.f><.cc> 0,ximm,ximm 0101110011001111F1111111000QQQQQ. */ +{ "bsetl", 0x5CCF7F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* bsetl<.f> RA,limm,limm 0101111000001111F111111110aaaaaa. */ +{ "bsetl", 0x5E0F7F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* bsetl<.f> 0,limm,limm 0101111000001111F111111110111110. */ +{ "bsetl", 0x5E0F7FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* bsetl<.f><.cc> 0,limm,limm 0101111011001111F1111111100QQQQQ. */ +{ "bsetl", 0x5ECF7F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* bset_s b,b,u5 10111bbb100uuuuu. */ +{ "bset_s", 0x0000B880, 0x0000F8E0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB_S, RB_Sdup, UIMM5_11_S }, { 0 }}, + +/* btst b,c 00100bbb000100011BBBCCCCCCRRRRRR. */ +{ "btst", 0x20118000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RC }, { 0 }}, + +/* btst<.cc> b,c 00100bbb110100011BBBCCCCCC0QQQQQ. */ +{ "btst", 0x20D18000, 0xF8FF8020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RC }, { C_CC }}, + +/* btst b,u6 00100bbb010100011BBBuuuuuuRRRRRR. */ +{ "btst", 0x20518000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, UIMM6_20 }, { 0 }}, + +/* btst<.cc> b,u6 00100bbb110100011BBBuuuuuu1QQQQQ. */ +{ "btst", 0x20D18020, 0xF8FF8020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, UIMM6_20 }, { C_CC }}, + +/* btst b,s12 00100bbb100100011BBBssssssSSSSSS. */ +{ "btst", 0x20918000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, SIMM12_20 }, { 0 }}, + +/* btst limm,c 00100110000100011111CCCCCCRRRRRR. */ +{ "btst", 0x2611F000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { LIMM, RC }, { 0 }}, + +/* btst b,limm 00100bbb000100011BBB111110RRRRRR. */ +{ "btst", 0x20118F80, 0xF8FF8FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, LIMM }, { 0 }}, + +/* btst<.cc> b,limm 00100bbb110100011BBB1111100QQQQQ. */ +{ "btst", 0x20D18F80, 0xF8FF8FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, LIMM }, { C_CC }}, + +/* btst<.cc> limm,c 00100110110100011111CCCCCC0QQQQQ. */ +{ "btst", 0x26D1F000, 0xFFFFF020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { LIMM, RC }, { C_CC }}, + +/* btst limm,u6 00100110010100011111uuuuuuRRRRRR. */ +{ "btst", 0x2651F000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { LIMM, UIMM6_20 }, { 0 }}, + +/* btst<.cc> limm,u6 00100110110100011111uuuuuu1QQQQQ. */ +{ "btst", 0x26D1F020, 0xFFFFF020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { LIMM, UIMM6_20 }, { C_CC }}, + +/* btst limm,s12 00100110100100011111ssssssSSSSSS. */ +{ "btst", 0x2691F000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { LIMM, SIMM12_20 }, { 0 }}, + +/* btst limm,limm 00100110000100011111111110RRRRRR. */ +{ "btst", 0x2611FF80, 0xFFFFFFC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { LIMM, LIMMdup }, { 0 }}, + +/* btst<.cc> limm,limm 001001101101000111111111100QQQQQ. */ +{ "btst", 0x26D1FF80, 0xFFFFFFE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { LIMM, LIMMdup }, { C_CC }}, + +/* btstl RB,RC 01011bbb000100011BBBccccccRRRRRR. */ +{ "btstl", 0x58118000, 0xF8FF8000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { 0 }}, + +/* btstl<.cc> RB,RC 01011bbb110100011BBBcccccc0QQQQQ. */ +{ "btstl", 0x58D18000, 0xF8FF8020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { C_CC }}, + +/* btstl RB,u6 01011bbb010100011BBBuuuuuuRRRRRR. */ +{ "btstl", 0x58518000, 0xF8FF8000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { 0 }}, + +/* btstl<.cc> RB,u6 01011bbb110100011BBBuuuuuu1QQQQQ. */ +{ "btstl", 0x58D18020, 0xF8FF8020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { C_CC }}, + +/* btstl RB,s12 01011bbb100100011BBBssssssSSSSSS. */ +{ "btstl", 0x58918000, 0xF8FF8000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, SIMM12_20 }, { 0 }}, + +/* btstl ximm,RC 01011100000100011111ccccccRRRRRR. */ +{ "btstl", 0x5C11F000, 0xFFFFF000, ARC_OPCODE_ARC64, ARITH, NONE, { XIMM, RC }, { 0 }}, + +/* btstl RB,ximm 01011bbb000100011BBB111100RRRRRR. */ +{ "btstl", 0x58118F00, 0xF8FF8FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, XIMM }, { 0 }}, + +/* btstl<.cc> RB,ximm 01011bbb110100011BBB1111000QQQQQ. */ +{ "btstl", 0x58D18F00, 0xF8FF8FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, XIMM }, { C_CC }}, + +/* btstl limm,RC 01011110000100011111ccccccRRRRRR. */ +{ "btstl", 0x5E11F000, 0xFFFFF000, ARC_OPCODE_ARC64, ARITH, NONE, { LIMM, RC }, { 0 }}, + +/* btstl RB,limm 01011bbb000100011BBB111110RRRRRR. */ +{ "btstl", 0x58118F80, 0xF8FF8FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM }, { 0 }}, + +/* btstl<.cc> RB,limm 01011bbb110100011BBB1111100QQQQQ. */ +{ "btstl", 0x58D18F80, 0xF8FF8FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM }, { C_CC }}, + +/* btst_s b,u5 10111bbb111uuuuu. */ +{ "btst_s", 0x0000B8E0, 0x0000F8E0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB_S, UIMM5_11_S }, { 0 }}, + +/* bxor<.f> a,b,c 00100bbb00010010FBBBCCCCCCAAAAAA. */ +{ "bxor", 0x20120000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, RC }, { C_F }}, + +/* bxor<.f> 0,b,c 00100bbb00010010FBBBCCCCCC111110. */ +{ "bxor", 0x2012003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, RC }, { C_F }}, + +/* bxor<.f><.cc> b,b,c 00100bbb11010010FBBBCCCCCC0QQQQQ. */ +{ "bxor", 0x20D20000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* bxor<.f> a,b,u6 00100bbb01010010FBBBuuuuuuAAAAAA. */ +{ "bxor", 0x20520000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* bxor<.f> 0,b,u6 00100bbb01010010FBBBuuuuuu111110. */ +{ "bxor", 0x2052003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* bxor<.f><.cc> b,b,u6 00100bbb11010010FBBBuuuuuu1QQQQQ. */ +{ "bxor", 0x20D20020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* bxor<.f> b,b,s12 00100bbb10010010FBBBssssssSSSSSS. */ +{ "bxor", 0x20920000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* bxor<.f> a,limm,c 0010011000010010F111CCCCCCAAAAAA. */ +{ "bxor", 0x26127000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, RC }, { C_F }}, + +/* bxor<.f> a,b,limm 00100bbb00010010FBBB111110AAAAAA. */ +{ "bxor", 0x20120F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, LIMM }, { C_F }}, + +/* bxor<.f> 0,limm,c 0010011000010010F111CCCCCC111110. */ +{ "bxor", 0x2612703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* bxor<.f> 0,b,limm 00100bbb00010010FBBB111110111110. */ +{ "bxor", 0x20120FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* bxor<.f><.cc> b,b,limm 00100bbb11010010FBBB1111100QQQQQ. */ +{ "bxor", 0x20D20F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* bxor<.f><.cc> 0,limm,c 0010011011010010F111CCCCCC0QQQQQ. */ +{ "bxor", 0x26D27000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* bxor<.f> a,limm,u6 0010011001010010F111uuuuuuAAAAAA. */ +{ "bxor", 0x26527000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* bxor<.f> 0,limm,u6 0010011001010010F111uuuuuu111110. */ +{ "bxor", 0x2652703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* bxor<.f><.cc> 0,limm,u6 0010011011010010F111uuuuuu1QQQQQ. */ +{ "bxor", 0x26D27020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* bxor<.f> 0,limm,s12 0010011010010010F111ssssssSSSSSS. */ +{ "bxor", 0x26927000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* bxor<.f> a,limm,limm 0010011000010010F111111110AAAAAA. */ +{ "bxor", 0x26127F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* bxor<.f> 0,limm,limm 0010011000010010F111111110111110. */ +{ "bxor", 0x26127FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* bxor<.f><.cc> 0,limm,limm 0010011011010010F1111111100QQQQQ. */ +{ "bxor", 0x26D27F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* bxorl<.f> RA,RB,RC 01011bbb00010010FBBBccccccaaaaaa. */ +{ "bxorl", 0x58120000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* bxorl<.f> 0,RB,RC 01011bbb00010010FBBBcccccc111110. */ +{ "bxorl", 0x5812003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* bxorl<.f><.cc> RB,RB,RC 01011bbb11010010FBBBcccccc0QQQQQ. */ +{ "bxorl", 0x58D20000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* bxorl<.f> RA,RB,u6 01011bbb01010010FBBBuuuuuuaaaaaa. */ +{ "bxorl", 0x58520000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* bxorl<.f> 0,RB,u6 01011bbb01010010FBBBuuuuuu111110. */ +{ "bxorl", 0x5852003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* bxorl<.f><.cc> RB,RB,u6 01011bbb11010010FBBBuuuuuu1QQQQQ. */ +{ "bxorl", 0x58D20020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* bxorl<.f> RB,RB,s12 01011bbb10010010FBBBssssssSSSSSS. */ +{ "bxorl", 0x58920000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* bxorl<.f> RA,ximm,RC 0101110000010010F111ccccccaaaaaa. */ +{ "bxorl", 0x5C127000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* bxorl<.f> RA,RB,ximm 01011bbb00010010FBBB111100aaaaaa. */ +{ "bxorl", 0x58120F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* bxorl<.f> 0,ximm,RC 0101110000010010F111cccccc111110. */ +{ "bxorl", 0x5C12703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* bxorl<.f> 0,RB,ximm 01011bbb00010010FBBB111100111110. */ +{ "bxorl", 0x58120F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* bxorl<.f><.cc> 0,ximm,RC 0101110011010010F111cccccc0QQQQQ. */ +{ "bxorl", 0x5CD27000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* bxorl<.f><.cc> RB,RB,ximm 01011bbb11010010FBBB1111000QQQQQ. */ +{ "bxorl", 0x58D20F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* bxorl<.f> RA,ximm,u6 0101110001010010F111uuuuuuaaaaaa. */ +{ "bxorl", 0x5C527000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* bxorl<.f> 0,ximm,u6 0101110001010010F111uuuuuu111110. */ +{ "bxorl", 0x5C52703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* bxorl<.f><.cc> 0,ximm,u6 0101110011010010F111uuuuuu1QQQQQ. */ +{ "bxorl", 0x5CD27020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* bxorl<.f> RA,limm,RC 0101111000010010F111ccccccaaaaaa. */ +{ "bxorl", 0x5E127000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* bxorl<.f> RA,RB,limm 01011bbb00010010FBBB111110aaaaaa. */ +{ "bxorl", 0x58120F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* bxorl<.f> 0,limm,RC 0101111000010010F111cccccc111110. */ +{ "bxorl", 0x5E12703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* bxorl<.f> 0,RB,limm 01011bbb00010010FBBB111110111110. */ +{ "bxorl", 0x58120FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* bxorl<.f><.cc> 0,limm,RC 0101111011010010F111cccccc0QQQQQ. */ +{ "bxorl", 0x5ED27000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* bxorl<.f><.cc> RB,RB,limm 01011bbb11010010FBBB1111100QQQQQ. */ +{ "bxorl", 0x58D20F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* bxorl<.f> RA,limm,u6 0101111001010010F111uuuuuuaaaaaa. */ +{ "bxorl", 0x5E527000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* bxorl<.f> 0,limm,u6 0101111001010010F111uuuuuu111110. */ +{ "bxorl", 0x5E52703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* bxorl<.f><.cc> 0,limm,u6 0101111011010010F111uuuuuu1QQQQQ. */ +{ "bxorl", 0x5ED27020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* bxorl<.f> 0,ximm,s12 0101110010010010F111ssssssSSSSSS. */ +{ "bxorl", 0x5C927000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* bxorl<.f> 0,limm,s12 0101111010010010F111ssssssSSSSSS. */ +{ "bxorl", 0x5E927000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* bxorl<.f> RA,ximm,ximm 0101110000010010F111111100aaaaaa. */ +{ "bxorl", 0x5C127F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* bxorl<.f> 0,ximm,ximm 0101110000010010F111111100111110. */ +{ "bxorl", 0x5C127F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* bxorl<.f><.cc> 0,ximm,ximm 0101110011010010F1111111000QQQQQ. */ +{ "bxorl", 0x5CD27F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* bxorl<.f> RA,limm,limm 0101111000010010F111111110aaaaaa. */ +{ "bxorl", 0x5E127F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* bxorl<.f> 0,limm,limm 0101111000010010F111111110111110. */ +{ "bxorl", 0x5E127FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* bxorl<.f><.cc> 0,limm,limm 0101111011010010F1111111100QQQQQ. */ +{ "bxorl", 0x5ED27F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* b_s s10 1111000sssssssss. */ +{ "b_s", 0x0000F000, 0x0000FE00,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRANCH, NONE, { SIMM10_A16_7_S }, { 0 }}, + +/* clri c 00100111001011110000CCCCCC111111. */ +{ "clri", 0x272F003F, 0xFFFFF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, CONTROL, NONE, { RC }, { 0 }}, + +/* clri u6 00100111011011110000uuuuuu111111. */ +{ "clri", 0x276F003F, 0xFFFFF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, CONTROL, NONE, { UIMM6_20 }, { 0 }}, + +/* clri 00100111001011110000000000111111. */ +{ "clri", 0x276F003F, 0xFFFFFFFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, CONTROL, NONE, { 0 }, { 0 }}, + +/* cmp b,c 00100bbb000011001BBBCCCCCCRRRRRR. */ +{ "cmp", 0x200C8000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { 0 }}, + +/* cmp<.cc> b,c 00100bbb110011001BBBCCCCCC0QQQQQ. */ +{ "cmp", 0x20CC8000, 0xF8FF8020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { C_CC }}, + +/* cmp b,u6 00100bbb010011001BBBuuuuuuRRRRRR. */ +{ "cmp", 0x204C8000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { 0 }}, + +/* cmp<.cc> b,u6 00100bbb110011001BBBuuuuuu1QQQQQ. */ +{ "cmp", 0x20CC8020, 0xF8FF8020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { C_CC }}, + +/* cmp b,s12 00100bbb100011001BBBssssssSSSSSS. */ +{ "cmp", 0x208C8000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, SIMM12_20 }, { 0 }}, + +/* cmp limm,c 00100110000011001111CCCCCCRRRRRR. */ +{ "cmp", 0x260CF000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { LIMM, RC }, { 0 }}, + +/* cmp b,limm 00100bbb000011001BBB111110RRRRRR. */ +{ "cmp", 0x200C8F80, 0xF8FF8FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM }, { 0 }}, + +/* cmp<.cc> b,limm 00100bbb110011001BBB1111100QQQQQ. */ +{ "cmp", 0x20CC8F80, 0xF8FF8FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM }, { C_CC }}, + +/* cmp<.cc> limm,c 00100110110011001111CCCCCC0QQQQQ. */ +{ "cmp", 0x26CCF000, 0xFFFFF020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { LIMM, RC }, { C_CC }}, + +/* cmp limm,u6 00100110010011001111uuuuuuRRRRRR. */ +{ "cmp", 0x264CF000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { LIMM, UIMM6_20 }, { 0 }}, + +/* cmp<.cc> limm,u6 00100110110011001111uuuuuu1QQQQQ. */ +{ "cmp", 0x26CCF020, 0xFFFFF020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { LIMM, UIMM6_20 }, { C_CC }}, + +/* cmp limm,s12 00100110100011001111ssssssSSSSSS. */ +{ "cmp", 0x268CF000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { LIMM, SIMM12_20 }, { 0 }}, + +/* cmp limm,limm 00100110000011001111111110RRRRRR. */ +{ "cmp", 0x260CFF80, 0xFFFFFFC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { LIMM, LIMMdup }, { 0 }}, + +/* cmp<.cc> limm,limm 001001101100110011111111100QQQQQ. */ +{ "cmp", 0x26CCFF80, 0xFFFFFFE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { LIMM, LIMMdup }, { C_CC }}, + +/* cmpl RB,RC 01011bbb000011001BBBccccccRRRRRR. */ +{ "cmpl", 0x580C8000, 0xF8FF8000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { 0 }}, + +/* cmpl<.cc> RB,RC 01011bbb110011001BBBcccccc0QQQQQ. */ +{ "cmpl", 0x58CC8000, 0xF8FF8020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { C_CC }}, + +/* cmpl RB,u6 01011bbb010011001BBBuuuuuuRRRRRR. */ +{ "cmpl", 0x584C8000, 0xF8FF8000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { 0 }}, + +/* cmpl<.cc> RB,u6 01011bbb110011001BBBuuuuuu1QQQQQ. */ +{ "cmpl", 0x58CC8020, 0xF8FF8020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { C_CC }}, + +/* cmpl RB,s12 01011bbb100011001BBBssssssSSSSSS. */ +{ "cmpl", 0x588C8000, 0xF8FF8000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, SIMM12_20 }, { 0 }}, + +/* cmpl ximm,RC 01011100000011001111ccccccRRRRRR. */ +{ "cmpl", 0x5C0CF000, 0xFFFFF000, ARC_OPCODE_ARC64, ARITH, NONE, { XIMM, RC }, { 0 }}, + +/* cmpl RB,ximm 01011bbb000011001BBB111100RRRRRR. */ +{ "cmpl", 0x580C8F00, 0xF8FF8FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, XIMM }, { 0 }}, + +/* cmpl<.cc> RB,ximm 01011bbb110011001BBB1111000QQQQQ. */ +{ "cmpl", 0x58CC8F00, 0xF8FF8FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, XIMM }, { C_CC }}, + +/* cmpl limm,RC 01011110000011001111ccccccRRRRRR. */ +{ "cmpl", 0x5E0CF000, 0xFFFFF000, ARC_OPCODE_ARC64, ARITH, NONE, { LIMM, RC }, { 0 }}, + +/* cmpl RB,limm 01011bbb000011001BBB111110RRRRRR. */ +{ "cmpl", 0x580C8F80, 0xF8FF8FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM }, { 0 }}, + +/* cmpl<.cc> RB,limm 01011bbb110011001BBB1111100QQQQQ. */ +{ "cmpl", 0x58CC8F80, 0xF8FF8FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM }, { C_CC }}, + +/* cmp_s b,h 01110bbbhhh100HH. */ +{ "cmp_s", 0x00007010, 0x0000F81C,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB_S, RH_S }, { 0 }}, + +/* cmp_s h,s3 01110ssshhh101HH. */ +{ "cmp_s", 0x00007014, 0x0000F81C,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RH_S, SIMM3_5_S }, { 0 }}, + +/* cmp_s b,limm 01110bbb11010011. */ +{ "cmp_s", 0x000070D3, 0x0000F8FF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB_S, LIMM_S }, { 0 }}, + +/* cmp_s limm,s3 01110sss11010111. */ +{ "cmp_s", 0x000070D7, 0x0000F8FF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { LIMM_S, SIMM3_5_S }, { 0 }}, + +/* dbnz<.d> b,s13 00100bbb1000110N0BBBssssssSSSSSS. */ +{ "dbnz", 0x208C0000, 0xF8FE8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, BRANCH, NONE, { RB, SIMM13_A16_20 }, { C_DNZ_D }}, + +/* div<.f> a,b,c 00101bbb00000100FBBBCCCCCCAAAAAA. */ +{ "div", 0x28040000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RA_CHK, RB, RC }, { C_F }}, + +/* div<.f> 0,b,c 00101bbb00000100FBBBCCCCCC111110. */ +{ "div", 0x2804003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, RB, RC }, { C_F }}, + +/* div<.f><.cc> b,b,c 00101bbb11000100FBBBCCCCCC0QQQQQ. */ +{ "div", 0x28C40000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RB_CHK, RBdup, RC }, { C_F, C_CC }}, + +/* div<.f> a,b,u6 00101bbb01000100FBBBuuuuuuAAAAAA. */ +{ "div", 0x28440000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RA_CHK, RB, UIMM6_20 }, { C_F }}, + +/* div<.f> 0,b,u6 00101bbb01000100FBBBuuuuuu111110. */ +{ "div", 0x2844003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* div<.f><.cc> b,b,u6 00101bbb11000100FBBBuuuuuu1QQQQQ. */ +{ "div", 0x28C40020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RB_CHK, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* div<.f> b,b,s12 00101bbb10000100FBBBssssssSSSSSS. */ +{ "div", 0x28840000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RB_CHK, RBdup, SIMM12_20 }, { C_F }}, + +/* div<.f> a,limm,c 0010111000000100F111CCCCCCAAAAAA. */ +{ "div", 0x2E047000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RA_CHK, LIMM, RC }, { C_F }}, + +/* div<.f> a,b,limm 00101bbb00000100FBBB111110AAAAAA. */ +{ "div", 0x28040F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RA_CHK, RB, LIMM }, { C_F }}, + +/* div<.f> 0,limm,c 0010111000000100F111CCCCCC111110. */ +{ "div", 0x2E04703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, LIMM, RC }, { C_F }}, + +/* div<.f> 0,b,limm 00101bbb00000100FBBB111110111110. */ +{ "div", 0x28040FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, RB, LIMM }, { C_F }}, + +/* div<.f><.cc> b,b,limm 00101bbb11000100FBBB1111100QQQQQ. */ +{ "div", 0x28C40F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RB_CHK, RBdup, LIMM }, { C_F, C_CC }}, + +/* div<.f><.cc> 0,limm,c 0010111011000100F111CCCCCC0QQQQQ. */ +{ "div", 0x2EC47000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* div<.f> a,limm,u6 0010111001000100F111uuuuuuAAAAAA. */ +{ "div", 0x2E447000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RA_CHK, LIMM, UIMM6_20 }, { C_F }}, + +/* div<.f> 0,limm,u6 0010111001000100F111uuuuuu111110. */ +{ "div", 0x2E44703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* div<.f><.cc> 0,limm,u6 0010111011000100F111uuuuuu1QQQQQ. */ +{ "div", 0x2EC47020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* div<.f> 0,limm,s12 0010111010000100F111ssssssSSSSSS. */ +{ "div", 0x2E847000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* div<.f> a,limm,limm 0010111000000100F111111110AAAAAA. */ +{ "div", 0x2E047F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RA_CHK, LIMM, LIMMdup }, { C_F }}, + +/* div<.f> 0,limm,limm 0010111000000100F111111110111110. */ +{ "div", 0x2E047FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* div<.f><.cc> 0,limm,limm 0010111011000100F1111111100QQQQQ. */ +{ "div", 0x2EC47F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* divl<.f> RA,RB,RC 01011bbb00100100FBBBccccccaaaaaa. */ +{ "divl", 0x58240000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* divl<.f> 0,RB,RC 01011bbb00100100FBBBcccccc111110. */ +{ "divl", 0x5824003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* divl<.f><.cc> RB,RB,RC 01011bbb11100100FBBBcccccc0QQQQQ. */ +{ "divl", 0x58E40000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* divl<.f> RA,RB,u6 01011bbb01100100FBBBuuuuuuaaaaaa. */ +{ "divl", 0x58640000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* divl<.f> 0,RB,u6 01011bbb01100100FBBBuuuuuu111110. */ +{ "divl", 0x5864003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* divl<.f><.cc> RB,RB,u6 01011bbb11100100FBBBuuuuuu1QQQQQ. */ +{ "divl", 0x58E40020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* divl<.f> RB,RB,s12 01011bbb10100100FBBBssssssSSSSSS. */ +{ "divl", 0x58A40000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* divl<.f> RA,ximm,RC 0101110000100100F111ccccccaaaaaa. */ +{ "divl", 0x5C247000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* divl<.f> RA,RB,ximm 01011bbb00100100FBBB111100aaaaaa. */ +{ "divl", 0x58240F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* divl<.f> 0,ximm,RC 0101110000100100F111cccccc111110. */ +{ "divl", 0x5C24703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* divl<.f> 0,RB,ximm 01011bbb00100100FBBB111100111110. */ +{ "divl", 0x58240F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* divl<.f><.cc> 0,ximm,RC 0101110011100100F111cccccc0QQQQQ. */ +{ "divl", 0x5CE47000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* divl<.f><.cc> RB,RB,ximm 01011bbb11100100FBBB1111000QQQQQ. */ +{ "divl", 0x58E40F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* divl<.f> RA,ximm,u6 0101110001100100F111uuuuuuaaaaaa. */ +{ "divl", 0x5C647000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* divl<.f> 0,ximm,u6 0101110001100100F111uuuuuu111110. */ +{ "divl", 0x5C64703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* divl<.f><.cc> 0,ximm,u6 0101110011100100F111uuuuuu1QQQQQ. */ +{ "divl", 0x5CE47020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* divl<.f> RA,limm,RC 0101111000100100F111ccccccaaaaaa. */ +{ "divl", 0x5E247000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* divl<.f> RA,RB,limm 01011bbb00100100FBBB111110aaaaaa. */ +{ "divl", 0x58240F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* divl<.f> 0,limm,RC 0101111000100100F111cccccc111110. */ +{ "divl", 0x5E24703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* divl<.f> 0,RB,limm 01011bbb00100100FBBB111110111110. */ +{ "divl", 0x58240FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* divl<.f><.cc> 0,limm,RC 0101111011100100F111cccccc0QQQQQ. */ +{ "divl", 0x5EE47000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* divl<.f><.cc> RB,RB,limm 01011bbb11100100FBBB1111100QQQQQ. */ +{ "divl", 0x58E40F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* divl<.f> RA,limm,u6 0101111001100100F111uuuuuuaaaaaa. */ +{ "divl", 0x5E647000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* divl<.f> 0,limm,u6 0101111001100100F111uuuuuu111110. */ +{ "divl", 0x5E64703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* divl<.f><.cc> 0,limm,u6 0101111011100100F111uuuuuu1QQQQQ. */ +{ "divl", 0x5EE47020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* divl<.f> 0,ximm,s12 0101110010100100F111ssssssSSSSSS. */ +{ "divl", 0x5CA47000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* divl<.f> 0,limm,s12 0101111010100100F111ssssssSSSSSS. */ +{ "divl", 0x5EA47000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* divl<.f> RA,ximm,ximm 0101110000100100F111111100aaaaaa. */ +{ "divl", 0x5C247F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* divl<.f> 0,ximm,ximm 0101110000100100F111111100111110. */ +{ "divl", 0x5C247F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* divl<.f><.cc> 0,ximm,ximm 0101110011100100F1111111000QQQQQ. */ +{ "divl", 0x5CE47F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* divl<.f> RA,limm,limm 0101111000100100F111111110aaaaaa. */ +{ "divl", 0x5E247F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* divl<.f> 0,limm,limm 0101111000100100F111111110111110. */ +{ "divl", 0x5E247FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* divl<.f><.cc> 0,limm,limm 0101111011100100F1111111100QQQQQ. */ +{ "divl", 0x5EE47F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* divu<.f> a,b,c 00101bbb00000101FBBBCCCCCCAAAAAA. */ +{ "divu", 0x28050000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RA_CHK, RB, RC }, { C_F }}, + +/* divu<.f> 0,b,c 00101bbb00000101FBBBCCCCCC111110. */ +{ "divu", 0x2805003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, RB, RC }, { C_F }}, + +/* divu<.f><.cc> b,b,c 00101bbb11000101FBBBCCCCCC0QQQQQ. */ +{ "divu", 0x28C50000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RB_CHK, RBdup, RC }, { C_F, C_CC }}, + +/* divu<.f> a,b,u6 00101bbb01000101FBBBuuuuuuAAAAAA. */ +{ "divu", 0x28450000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RA_CHK, RB, UIMM6_20 }, { C_F }}, + +/* divu<.f> 0,b,u6 00101bbb01000101FBBBuuuuuu111110. */ +{ "divu", 0x2845003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* divu<.f><.cc> b,b,u6 00101bbb11000101FBBBuuuuuu1QQQQQ. */ +{ "divu", 0x28C50020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RB_CHK, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* divu<.f> b,b,s12 00101bbb10000101FBBBssssssSSSSSS. */ +{ "divu", 0x28850000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RB_CHK, RBdup, SIMM12_20 }, { C_F }}, + +/* divu<.f> a,limm,c 0010111000000101F111CCCCCCAAAAAA. */ +{ "divu", 0x2E057000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RA_CHK, LIMM, RC }, { C_F }}, + +/* divu<.f> a,b,limm 00101bbb00000101FBBB111110AAAAAA. */ +{ "divu", 0x28050F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RA_CHK, RB, LIMM }, { C_F }}, + +/* divu<.f> 0,limm,c 0010111000000101F111CCCCCC111110. */ +{ "divu", 0x2E05703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, LIMM, RC }, { C_F }}, + +/* divu<.f> 0,b,limm 00101bbb00000101FBBB111110111110. */ +{ "divu", 0x28050FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, RB, LIMM }, { C_F }}, + +/* divu<.f><.cc> b,b,limm 00101bbb11000101FBBB1111100QQQQQ. */ +{ "divu", 0x28C50F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RB_CHK, RBdup, LIMM }, { C_F, C_CC }}, + +/* divu<.f><.cc> 0,limm,c 0010111011000101F111CCCCCC0QQQQQ. */ +{ "divu", 0x2EC57000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* divu<.f> a,limm,u6 0010111001000101F111uuuuuuAAAAAA. */ +{ "divu", 0x2E457000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RA_CHK, LIMM, UIMM6_20 }, { C_F }}, + +/* divu<.f> 0,limm,u6 0010111001000101F111uuuuuu111110. */ +{ "divu", 0x2E45703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* divu<.f><.cc> 0,limm,u6 0010111011000101F111uuuuuu1QQQQQ. */ +{ "divu", 0x2EC57020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* divu<.f> 0,limm,s12 0010111010000101F111ssssssSSSSSS. */ +{ "divu", 0x2E857000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* divu<.f> a,limm,limm 0010111000000101F111111110AAAAAA. */ +{ "divu", 0x2E057F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RA_CHK, LIMM, LIMMdup }, { C_F }}, + +/* divu<.f> 0,limm,limm 0010111000000101F111111110111110. */ +{ "divu", 0x2E057FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* divu<.f><.cc> 0,limm,limm 0010111011000101F1111111100QQQQQ. */ +{ "divu", 0x2EC57F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* divul<.f> RA,RB,RC 01011bbb00100101FBBBccccccaaaaaa. */ +{ "divul", 0x58250000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* divul<.f> 0,RB,RC 01011bbb00100101FBBBcccccc111110. */ +{ "divul", 0x5825003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* divul<.f><.cc> RB,RB,RC 01011bbb11100101FBBBcccccc0QQQQQ. */ +{ "divul", 0x58E50000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* divul<.f> RA,RB,u6 01011bbb01100101FBBBuuuuuuaaaaaa. */ +{ "divul", 0x58650000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* divul<.f> 0,RB,u6 01011bbb01100101FBBBuuuuuu111110. */ +{ "divul", 0x5865003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* divul<.f><.cc> RB,RB,u6 01011bbb11100101FBBBuuuuuu1QQQQQ. */ +{ "divul", 0x58E50020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* divul<.f> RB,RB,s12 01011bbb10100101FBBBssssssSSSSSS. */ +{ "divul", 0x58A50000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* divul<.f> RA,ximm,RC 0101110000100101F111ccccccaaaaaa. */ +{ "divul", 0x5C257000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* divul<.f> RA,RB,ximm 01011bbb00100101FBBB111100aaaaaa. */ +{ "divul", 0x58250F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* divul<.f> 0,ximm,RC 0101110000100101F111cccccc111110. */ +{ "divul", 0x5C25703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* divul<.f> 0,RB,ximm 01011bbb00100101FBBB111100111110. */ +{ "divul", 0x58250F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* divul<.f><.cc> 0,ximm,RC 0101110011100101F111cccccc0QQQQQ. */ +{ "divul", 0x5CE57000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* divul<.f><.cc> RB,RB,ximm 01011bbb11100101FBBB1111000QQQQQ. */ +{ "divul", 0x58E50F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* divul<.f> RA,ximm,u6 0101110001100101F111uuuuuuaaaaaa. */ +{ "divul", 0x5C657000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* divul<.f> 0,ximm,u6 0101110001100101F111uuuuuu111110. */ +{ "divul", 0x5C65703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* divul<.f><.cc> 0,ximm,u6 0101110011100101F111uuuuuu1QQQQQ. */ +{ "divul", 0x5CE57020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* divul<.f> RA,limm,RC 0101111000100101F111ccccccaaaaaa. */ +{ "divul", 0x5E257000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* divul<.f> RA,RB,limm 01011bbb00100101FBBB111110aaaaaa. */ +{ "divul", 0x58250F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* divul<.f> 0,limm,RC 0101111000100101F111cccccc111110. */ +{ "divul", 0x5E25703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* divul<.f> 0,RB,limm 01011bbb00100101FBBB111110111110. */ +{ "divul", 0x58250FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* divul<.f><.cc> 0,limm,RC 0101111011100101F111cccccc0QQQQQ. */ +{ "divul", 0x5EE57000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* divul<.f><.cc> RB,RB,limm 01011bbb11100101FBBB1111100QQQQQ. */ +{ "divul", 0x58E50F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* divul<.f> RA,limm,u6 0101111001100101F111uuuuuuaaaaaa. */ +{ "divul", 0x5E657000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* divul<.f> 0,limm,u6 0101111001100101F111uuuuuu111110. */ +{ "divul", 0x5E65703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* divul<.f><.cc> 0,limm,u6 0101111011100101F111uuuuuu1QQQQQ. */ +{ "divul", 0x5EE57020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* divul<.f> 0,ximm,s12 0101110010100101F111ssssssSSSSSS. */ +{ "divul", 0x5CA57000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* divul<.f> 0,limm,s12 0101111010100101F111ssssssSSSSSS. */ +{ "divul", 0x5EA57000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* divul<.f> RA,ximm,ximm 0101110000100101F111111100aaaaaa. */ +{ "divul", 0x5C257F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* divul<.f> 0,ximm,ximm 0101110000100101F111111100111110. */ +{ "divul", 0x5C257F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* divul<.f><.cc> 0,ximm,ximm 0101110011100101F1111111000QQQQQ. */ +{ "divul", 0x5CE57F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* divul<.f> RA,limm,limm 0101111000100101F111111110aaaaaa. */ +{ "divul", 0x5E257F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* divul<.f> 0,limm,limm 0101111000100101F111111110111110. */ +{ "divul", 0x5E257FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* divul<.f><.cc> 0,limm,limm 0101111011100101F1111111100QQQQQ. */ +{ "divul", 0x5EE57F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* dmach<.f> a,b,c 00101bbb00010010FBBBCCCCCCAAAAAA. */ +{ "dmach", 0x28120000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, RB, RC }, { C_F }}, + +/* dmach<.f> 0,b,c 00101bbb00010010FBBBCCCCCC111110. */ +{ "dmach", 0x2812003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, RB, RC }, { C_F }}, + +/* dmach<.f><.cc> b,b,c 00101bbb11010010FBBBCCCCCC0QQQQQ. */ +{ "dmach", 0x28D20000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, RC }, { C_F, C_CC }}, + +/* dmach<.f> a,b,u6 00101bbb01010010FBBBuuuuuuAAAAAA. */ +{ "dmach", 0x28520000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, RB, UIMM6_20 }, { C_F }}, + +/* dmach<.f> 0,b,u6 00101bbb01010010FBBBuuuuuu111110. */ +{ "dmach", 0x2852003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* dmach<.f><.cc> b,b,u6 00101bbb11010010FBBBuuuuuu1QQQQQ. */ +{ "dmach", 0x28D20020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* dmach<.f> b,b,s12 00101bbb10010010FBBBssssssSSSSSS. */ +{ "dmach", 0x28920000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, SIMM12_20 }, { C_F }}, + +/* dmach<.f> a,limm,c 0010111000010010F111CCCCCCAAAAAA. */ +{ "dmach", 0x2E127000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, LIMM, RC }, { C_F }}, + +/* dmach<.f> a,b,limm 00101bbb00010010FBBB111110AAAAAA. */ +{ "dmach", 0x28120F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, RB, LIMM }, { C_F }}, + +/* dmach<.f> 0,limm,c 0010111000010010F111CCCCCC111110. */ +{ "dmach", 0x2E12703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, RC }, { C_F }}, + +/* dmach<.f> 0,b,limm 00101bbb00010010FBBB111110111110. */ +{ "dmach", 0x28120FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, RB, LIMM }, { C_F }}, + +/* dmach<.f><.cc> b,b,limm 00101bbb11010010FBBB1111100QQQQQ. */ +{ "dmach", 0x28D20F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, LIMM }, { C_F, C_CC }}, + +/* dmach<.f><.cc> 0,limm,c 0010111011010010F111CCCCCC0QQQQQ. */ +{ "dmach", 0x2ED27000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* dmach<.f> a,limm,u6 0010111001010010F111uuuuuuAAAAAA. */ +{ "dmach", 0x2E527000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, LIMM, UIMM6_20 }, { C_F }}, + +/* dmach<.f> 0,limm,u6 0010111001010010F111uuuuuu111110. */ +{ "dmach", 0x2E52703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* dmach<.f><.cc> 0,limm,u6 0010111011010010F111uuuuuu1QQQQQ. */ +{ "dmach", 0x2ED27020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* dmach<.f> 0,limm,s12 0010111010010010F111ssssssSSSSSS. */ +{ "dmach", 0x2E927000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* dmach<.f> a,limm,limm 0010111000010010F111111110AAAAAA. */ +{ "dmach", 0x2E127F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, LIMM, LIMMdup }, { C_F }}, + +/* dmach<.f> 0,limm,limm 0010111000010010F111111110111110. */ +{ "dmach", 0x2E127FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* dmach<.f><.cc> 0,limm,limm 0010111011010010F1111111100QQQQQ. */ +{ "dmach", 0x2ED27F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* dmachu<.f> a,b,c 00101bbb00010011FBBBCCCCCCAAAAAA. */ +{ "dmachu", 0x28130000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, RB, RC }, { C_F }}, + +/* dmachu<.f> 0,b,c 00101bbb00010011FBBBCCCCCC111110. */ +{ "dmachu", 0x2813003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, RB, RC }, { C_F }}, + +/* dmachu<.f><.cc> b,b,c 00101bbb11010011FBBBCCCCCC0QQQQQ. */ +{ "dmachu", 0x28D30000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, RC }, { C_F, C_CC }}, + +/* dmachu<.f> a,b,u6 00101bbb01010011FBBBuuuuuuAAAAAA. */ +{ "dmachu", 0x28530000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, RB, UIMM6_20 }, { C_F }}, + +/* dmachu<.f> 0,b,u6 00101bbb01010011FBBBuuuuuu111110. */ +{ "dmachu", 0x2853003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* dmachu<.f><.cc> b,b,u6 00101bbb11010011FBBBuuuuuu1QQQQQ. */ +{ "dmachu", 0x28D30020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* dmachu<.f> b,b,s12 00101bbb10010011FBBBssssssSSSSSS. */ +{ "dmachu", 0x28930000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, SIMM12_20 }, { C_F }}, + +/* dmachu<.f> a,limm,c 0010111000010011F111CCCCCCAAAAAA. */ +{ "dmachu", 0x2E137000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, LIMM, RC }, { C_F }}, + +/* dmachu<.f> a,b,limm 00101bbb00010011FBBB111110AAAAAA. */ +{ "dmachu", 0x28130F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, RB, LIMM }, { C_F }}, + +/* dmachu<.f> 0,limm,c 0010111000010011F111CCCCCC111110. */ +{ "dmachu", 0x2E13703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, RC }, { C_F }}, + +/* dmachu<.f> 0,b,limm 00101bbb00010011FBBB111110111110. */ +{ "dmachu", 0x28130FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, RB, LIMM }, { C_F }}, + +/* dmachu<.f><.cc> b,b,limm 00101bbb11010011FBBB1111100QQQQQ. */ +{ "dmachu", 0x28D30F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, LIMM }, { C_F, C_CC }}, + +/* dmachu<.f><.cc> 0,limm,c 0010111011010011F111CCCCCC0QQQQQ. */ +{ "dmachu", 0x2ED37000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* dmachu<.f> a,limm,u6 0010111001010011F111uuuuuuAAAAAA. */ +{ "dmachu", 0x2E537000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, LIMM, UIMM6_20 }, { C_F }}, + +/* dmachu<.f> 0,limm,u6 0010111001010011F111uuuuuu111110. */ +{ "dmachu", 0x2E53703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* dmachu<.f><.cc> 0,limm,u6 0010111011010011F111uuuuuu1QQQQQ. */ +{ "dmachu", 0x2ED37020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* dmachu<.f> 0,limm,s12 0010111010010011F111ssssssSSSSSS. */ +{ "dmachu", 0x2E937000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* dmachu<.f> a,limm,limm 0010111000010011F111111110AAAAAA. */ +{ "dmachu", 0x2E137F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, LIMM, LIMMdup }, { C_F }}, + +/* dmachu<.f> 0,limm,limm 0010111000010011F111111110111110. */ +{ "dmachu", 0x2E137FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* dmachu<.f><.cc> 0,limm,limm 0010111011010011F1111111100QQQQQ. */ +{ "dmachu", 0x2ED37F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* dmacwh<.f> a,b,c 00101bbb00110110FBBBCCCCCCAAAAAA. */ +{ "dmacwh", 0x28360000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, RC }, { C_F }}, + +/* dmacwh<.f> 0,b,c 00101bbb00110110FBBBCCCCCC111110. */ +{ "dmacwh", 0x2836003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, RC }, { C_F }}, + +/* dmacwh<.f><.cc> b,b,c 00101bbb11110110FBBBCCCCCC0QQQQQ. */ +{ "dmacwh", 0x28F60000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, RC }, { C_F, C_CC }}, + +/* dmacwh<.f> a,b,u6 00101bbb01110110FBBBuuuuuuAAAAAA. */ +{ "dmacwh", 0x28760000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, UIMM6_20 }, { C_F }}, + +/* dmacwh<.f> 0,b,u6 00101bbb01110110FBBBuuuuuu111110. */ +{ "dmacwh", 0x2876003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* dmacwh<.f><.cc> b,b,u6 00101bbb11110110FBBBuuuuuu1QQQQQ. */ +{ "dmacwh", 0x28F60020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* dmacwh<.f> b,b,s12 00101bbb10110110FBBBssssssSSSSSS. */ +{ "dmacwh", 0x28B60000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, SIMM12_20 }, { C_F }}, + +/* dmacwh<.f> a,limm,c 0010111000110110F111CCCCCCAAAAAA. */ +{ "dmacwh", 0x2E367000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, RC }, { C_F }}, + +/* dmacwh<.f> a,b,limm 00101bbb00110110FBBB111110AAAAAA. */ +{ "dmacwh", 0x28360F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, LIMM }, { C_F }}, + +/* dmacwh<.f> 0,limm,c 0010111000110110F111CCCCCC111110. */ +{ "dmacwh", 0x2E36703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, RC }, { C_F }}, + +/* dmacwh<.f> 0,b,limm 00101bbb00110110FBBB111110111110. */ +{ "dmacwh", 0x28360FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, LIMM }, { C_F }}, + +/* dmacwh<.f><.cc> b,b,limm 00101bbb11110110FBBB1111100QQQQQ. */ +{ "dmacwh", 0x28F60F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, LIMM }, { C_F, C_CC }}, + +/* dmacwh<.f><.cc> 0,limm,c 0010111011110110F111CCCCCC0QQQQQ. */ +{ "dmacwh", 0x2EF67000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* dmacwh<.f> a,limm,u6 0010111001110110F111uuuuuuAAAAAA. */ +{ "dmacwh", 0x2E767000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, UIMM6_20 }, { C_F }}, + +/* dmacwh<.f> 0,limm,u6 0010111001110110F111uuuuuu111110. */ +{ "dmacwh", 0x2E76703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* dmacwh<.f><.cc> 0,limm,u6 0010111011110110F111uuuuuu1QQQQQ. */ +{ "dmacwh", 0x2EF67020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* dmacwh<.f> 0,limm,s12 0010111010110110F111ssssssSSSSSS. */ +{ "dmacwh", 0x2EB67000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* dmacwh<.f> a,limm,limm 0010111000110110F111111110AAAAAA. */ +{ "dmacwh", 0x2E367F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, LIMMdup }, { C_F }}, + +/* dmacwh<.f> 0,limm,limm 0010111000110110F111111110111110. */ +{ "dmacwh", 0x2E367FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* dmacwh<.f><.cc> 0,limm,limm 0010111011110110F1111111100QQQQQ. */ +{ "dmacwh", 0x2EF67F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* dmacwhu<.f> a,b,c 00101bbb00110111FBBBCCCCCCAAAAAA. */ +{ "dmacwhu", 0x28370000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, RC }, { C_F }}, + +/* dmacwhu<.f> 0,b,c 00101bbb00110111FBBBCCCCCC111110. */ +{ "dmacwhu", 0x2837003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, RC }, { C_F }}, + +/* dmacwhu<.f><.cc> b,b,c 00101bbb11110111FBBBCCCCCC0QQQQQ. */ +{ "dmacwhu", 0x28F70000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, RC }, { C_F, C_CC }}, + +/* dmacwhu<.f> a,b,u6 00101bbb01110111FBBBuuuuuuAAAAAA. */ +{ "dmacwhu", 0x28770000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, UIMM6_20 }, { C_F }}, + +/* dmacwhu<.f> 0,b,u6 00101bbb01110111FBBBuuuuuu111110. */ +{ "dmacwhu", 0x2877003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* dmacwhu<.f><.cc> b,b,u6 00101bbb11110111FBBBuuuuuu1QQQQQ. */ +{ "dmacwhu", 0x28F70020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* dmacwhu<.f> b,b,s12 00101bbb10110111FBBBssssssSSSSSS. */ +{ "dmacwhu", 0x28B70000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, SIMM12_20 }, { C_F }}, + +/* dmacwhu<.f> a,limm,c 0010111000110111F111CCCCCCAAAAAA. */ +{ "dmacwhu", 0x2E377000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, RC }, { C_F }}, + +/* dmacwhu<.f> a,b,limm 00101bbb00110111FBBB111110AAAAAA. */ +{ "dmacwhu", 0x28370F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, LIMM }, { C_F }}, + +/* dmacwhu<.f> 0,limm,c 0010111000110111F111CCCCCC111110. */ +{ "dmacwhu", 0x2E37703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, RC }, { C_F }}, + +/* dmacwhu<.f> 0,b,limm 00101bbb00110111FBBB111110111110. */ +{ "dmacwhu", 0x28370FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, LIMM }, { C_F }}, + +/* dmacwhu<.f><.cc> b,b,limm 00101bbb11110111FBBB1111100QQQQQ. */ +{ "dmacwhu", 0x28F70F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, LIMM }, { C_F, C_CC }}, + +/* dmacwhu<.f><.cc> 0,limm,c 0010111011110111F111CCCCCC0QQQQQ. */ +{ "dmacwhu", 0x2EF77000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* dmacwhu<.f> a,limm,u6 0010111001110111F111uuuuuuAAAAAA. */ +{ "dmacwhu", 0x2E777000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, UIMM6_20 }, { C_F }}, + +/* dmacwhu<.f> 0,limm,u6 0010111001110111F111uuuuuu111110. */ +{ "dmacwhu", 0x2E77703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* dmacwhu<.f><.cc> 0,limm,u6 0010111011110111F111uuuuuu1QQQQQ. */ +{ "dmacwhu", 0x2EF77020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* dmacwhu<.f> 0,limm,s12 0010111010110111F111ssssssSSSSSS. */ +{ "dmacwhu", 0x2EB77000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* dmacwhu<.f> a,limm,limm 0010111000110111F111111110AAAAAA. */ +{ "dmacwhu", 0x2E377F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, LIMMdup }, { C_F }}, + +/* dmacwhu<.f> 0,limm,limm 0010111000110111F111111110111110. */ +{ "dmacwhu", 0x2E377FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* dmacwhu<.f><.cc> 0,limm,limm 0010111011110111F1111111100QQQQQ. */ +{ "dmacwhu", 0x2EF77F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* dmb 00100011011011110001RRR000111111. */ +{ "dmb", 0x236F103F, 0xFFFFF1FF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, CONTROL, NONE, { 0 }, { 0 }}, + +/* dmb u3 00100011011011110001RRRuuu111111. */ +{ "dmb", 0x236F103F, 0xFFFFF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, CONTROL, NONE, { UIMM3_23 }, { 0 }}, + +/* dmpyh<.f> a,b,c 00101bbb00010000FBBBCCCCCCAAAAAA. */ +{ "dmpyh", 0x28100000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, RB, RC }, { C_F }}, + +/* dmpyh<.f> 0,b,c 00101bbb00010000FBBBCCCCCC111110. */ +{ "dmpyh", 0x2810003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, RB, RC }, { C_F }}, + +/* dmpyh<.f><.cc> b,b,c 00101bbb11010000FBBBCCCCCC0QQQQQ. */ +{ "dmpyh", 0x28D00000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, RC }, { C_F, C_CC }}, + +/* dmpyh<.f> a,b,u6 00101bbb01010000FBBBuuuuuuAAAAAA. */ +{ "dmpyh", 0x28500000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, RB, UIMM6_20 }, { C_F }}, + +/* dmpyh<.f> 0,b,u6 00101bbb01010000FBBBuuuuuu111110. */ +{ "dmpyh", 0x2850003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* dmpyh<.f><.cc> b,b,u6 00101bbb11010000FBBBuuuuuu1QQQQQ. */ +{ "dmpyh", 0x28D00020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* dmpyh<.f> b,b,s12 00101bbb10010000FBBBssssssSSSSSS. */ +{ "dmpyh", 0x28900000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, SIMM12_20 }, { C_F }}, + +/* dmpyh<.f> a,limm,c 0010111000010000F111CCCCCCAAAAAA. */ +{ "dmpyh", 0x2E107000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, LIMM, RC }, { C_F }}, + +/* dmpyh<.f> a,b,limm 00101bbb00010000FBBB111110AAAAAA. */ +{ "dmpyh", 0x28100F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, RB, LIMM }, { C_F }}, + +/* dmpyh<.f> 0,limm,c 0010111000010000F111CCCCCC111110. */ +{ "dmpyh", 0x2E10703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, RC }, { C_F }}, + +/* dmpyh<.f> 0,b,limm 00101bbb00010000FBBB111110111110. */ +{ "dmpyh", 0x28100FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, RB, LIMM }, { C_F }}, + +/* dmpyh<.f><.cc> b,b,limm 00101bbb11010000FBBB1111100QQQQQ. */ +{ "dmpyh", 0x28D00F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, LIMM }, { C_F, C_CC }}, + +/* dmpyh<.f><.cc> 0,limm,c 0010111011010000F111CCCCCC0QQQQQ. */ +{ "dmpyh", 0x2ED07000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* dmpyh<.f> a,limm,u6 0010111001010000F111uuuuuuAAAAAA. */ +{ "dmpyh", 0x2E507000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, LIMM, UIMM6_20 }, { C_F }}, + +/* dmpyh<.f> 0,limm,u6 0010111001010000F111uuuuuu111110. */ +{ "dmpyh", 0x2E50703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* dmpyh<.f><.cc> 0,limm,u6 0010111011010000F111uuuuuu1QQQQQ. */ +{ "dmpyh", 0x2ED07020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* dmpyh<.f> 0,limm,s12 0010111010010000F111ssssssSSSSSS. */ +{ "dmpyh", 0x2E907000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* dmpyh<.f> a,limm,limm 0010111000010000F111111110AAAAAA. */ +{ "dmpyh", 0x2E107F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, LIMM, LIMMdup }, { C_F }}, + +/* dmpyh<.f> 0,limm,limm 0010111000010000F111111110111110. */ +{ "dmpyh", 0x2E107FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* dmpyh<.f><.cc> 0,limm,limm 0010111011010000F1111111100QQQQQ. */ +{ "dmpyh", 0x2ED07F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* dmpyhu<.f> a,b,c 00101bbb00010001FBBBCCCCCCAAAAAA. */ +{ "dmpyhu", 0x28110000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, RB, RC }, { C_F }}, + +/* dmpyhu<.f> 0,b,c 00101bbb00010001FBBBCCCCCC111110. */ +{ "dmpyhu", 0x2811003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, RB, RC }, { C_F }}, + +/* dmpyhu<.f><.cc> b,b,c 00101bbb11010001FBBBCCCCCC0QQQQQ. */ +{ "dmpyhu", 0x28D10000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, RC }, { C_F, C_CC }}, + +/* dmpyhu<.f> a,b,u6 00101bbb01010001FBBBuuuuuuAAAAAA. */ +{ "dmpyhu", 0x28510000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, RB, UIMM6_20 }, { C_F }}, + +/* dmpyhu<.f> 0,b,u6 00101bbb01010001FBBBuuuuuu111110. */ +{ "dmpyhu", 0x2851003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* dmpyhu<.f><.cc> b,b,u6 00101bbb11010001FBBBuuuuuu1QQQQQ. */ +{ "dmpyhu", 0x28D10020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* dmpyhu<.f> b,b,s12 00101bbb10010001FBBBssssssSSSSSS. */ +{ "dmpyhu", 0x28910000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, SIMM12_20 }, { C_F }}, + +/* dmpyhu<.f> a,limm,c 0010111000010001F111CCCCCCAAAAAA. */ +{ "dmpyhu", 0x2E117000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, LIMM, RC }, { C_F }}, + +/* dmpyhu<.f> a,b,limm 00101bbb00010001FBBB111110AAAAAA. */ +{ "dmpyhu", 0x28110F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, RB, LIMM }, { C_F }}, + +/* dmpyhu<.f> 0,limm,c 0010111000010001F111CCCCCC111110. */ +{ "dmpyhu", 0x2E11703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, RC }, { C_F }}, + +/* dmpyhu<.f> 0,b,limm 00101bbb00010001FBBB111110111110. */ +{ "dmpyhu", 0x28110FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, RB, LIMM }, { C_F }}, + +/* dmpyhu<.f><.cc> b,b,limm 00101bbb11010001FBBB1111100QQQQQ. */ +{ "dmpyhu", 0x28D10F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, LIMM }, { C_F, C_CC }}, + +/* dmpyhu<.f><.cc> 0,limm,c 0010111011010001F111CCCCCC0QQQQQ. */ +{ "dmpyhu", 0x2ED17000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* dmpyhu<.f> a,limm,u6 0010111001010001F111uuuuuuAAAAAA. */ +{ "dmpyhu", 0x2E517000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, LIMM, UIMM6_20 }, { C_F }}, + +/* dmpyhu<.f> 0,limm,u6 0010111001010001F111uuuuuu111110. */ +{ "dmpyhu", 0x2E51703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* dmpyhu<.f><.cc> 0,limm,u6 0010111011010001F111uuuuuu1QQQQQ. */ +{ "dmpyhu", 0x2ED17020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* dmpyhu<.f> 0,limm,s12 0010111010010001F111ssssssSSSSSS. */ +{ "dmpyhu", 0x2E917000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* dmpyhu<.f> a,limm,limm 0010111000010001F111111110AAAAAA. */ +{ "dmpyhu", 0x2E117F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, LIMM, LIMMdup }, { C_F }}, + +/* dmpyhu<.f> 0,limm,limm 0010111000010001F111111110111110. */ +{ "dmpyhu", 0x2E117FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* dmpyhu<.f><.cc> 0,limm,limm 0010111011010001F1111111100QQQQQ. */ +{ "dmpyhu", 0x2ED17F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* dmpywh<.f> a,b,c 00101bbb00110010FBBBCCCCCCAAAAAA. */ +{ "dmpywh", 0x28320000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, RC }, { C_F }}, + +/* dmpywh<.f> 0,b,c 00101bbb00110010FBBBCCCCCC111110. */ +{ "dmpywh", 0x2832003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, RC }, { C_F }}, + +/* dmpywh<.f><.cc> b,b,c 00101bbb11110010FBBBCCCCCC0QQQQQ. */ +{ "dmpywh", 0x28F20000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, RC }, { C_F, C_CC }}, + +/* dmpywh<.f> a,b,u6 00101bbb01110010FBBBuuuuuuAAAAAA. */ +{ "dmpywh", 0x28720000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, UIMM6_20 }, { C_F }}, + +/* dmpywh<.f> 0,b,u6 00101bbb01110010FBBBuuuuuu111110. */ +{ "dmpywh", 0x2872003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* dmpywh<.f><.cc> b,b,u6 00101bbb11110010FBBBuuuuuu1QQQQQ. */ +{ "dmpywh", 0x28F20020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* dmpywh<.f> b,b,s12 00101bbb10110010FBBBssssssSSSSSS. */ +{ "dmpywh", 0x28B20000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, SIMM12_20 }, { C_F }}, + +/* dmpywh<.f> a,limm,c 0010111000110010F111CCCCCCAAAAAA. */ +{ "dmpywh", 0x2E327000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, RC }, { C_F }}, + +/* dmpywh<.f> a,b,limm 00101bbb00110010FBBB111110AAAAAA. */ +{ "dmpywh", 0x28320F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, LIMM }, { C_F }}, + +/* dmpywh<.f> 0,limm,c 0010111000110010F111CCCCCC111110. */ +{ "dmpywh", 0x2E32703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, RC }, { C_F }}, + +/* dmpywh<.f> 0,b,limm 00101bbb00110010FBBB111110111110. */ +{ "dmpywh", 0x28320FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, LIMM }, { C_F }}, + +/* dmpywh<.f><.cc> b,b,limm 00101bbb11110010FBBB1111100QQQQQ. */ +{ "dmpywh", 0x28F20F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, LIMM }, { C_F, C_CC }}, + +/* dmpywh<.f><.cc> 0,limm,c 0010111011110010F111CCCCCC0QQQQQ. */ +{ "dmpywh", 0x2EF27000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* dmpywh<.f> a,limm,u6 0010111001110010F111uuuuuuAAAAAA. */ +{ "dmpywh", 0x2E727000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, UIMM6_20 }, { C_F }}, + +/* dmpywh<.f> 0,limm,u6 0010111001110010F111uuuuuu111110. */ +{ "dmpywh", 0x2E72703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* dmpywh<.f><.cc> 0,limm,u6 0010111011110010F111uuuuuu1QQQQQ. */ +{ "dmpywh", 0x2EF27020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* dmpywh<.f> 0,limm,s12 0010111010110010F111ssssssSSSSSS. */ +{ "dmpywh", 0x2EB27000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* dmpywh<.f> a,limm,limm 0010111000110010F111111110AAAAAA. */ +{ "dmpywh", 0x2E327F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, LIMMdup }, { C_F }}, + +/* dmpywh<.f> 0,limm,limm 0010111000110010F111111110111110. */ +{ "dmpywh", 0x2E327FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* dmpywh<.f><.cc> 0,limm,limm 0010111011110010F1111111100QQQQQ. */ +{ "dmpywh", 0x2EF27F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* dmpywhu<.f> a,b,c 00101bbb00110011FBBBCCCCCCAAAAAA. */ +{ "dmpywhu", 0x28330000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, RC }, { C_F }}, + +/* dmpywhu<.f> 0,b,c 00101bbb00110011FBBBCCCCCC111110. */ +{ "dmpywhu", 0x2833003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, RC }, { C_F }}, + +/* dmpywhu<.f><.cc> b,b,c 00101bbb11110011FBBBCCCCCC0QQQQQ. */ +{ "dmpywhu", 0x28F30000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, RC }, { C_F, C_CC }}, + +/* dmpywhu<.f> a,b,u6 00101bbb01110011FBBBuuuuuuAAAAAA. */ +{ "dmpywhu", 0x28730000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, UIMM6_20 }, { C_F }}, + +/* dmpywhu<.f> 0,b,u6 00101bbb01110011FBBBuuuuuu111110. */ +{ "dmpywhu", 0x2873003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* dmpywhu<.f><.cc> b,b,u6 00101bbb11110011FBBBuuuuuu1QQQQQ. */ +{ "dmpywhu", 0x28F30020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* dmpywhu<.f> b,b,s12 00101bbb10110011FBBBssssssSSSSSS. */ +{ "dmpywhu", 0x28B30000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, SIMM12_20 }, { C_F }}, + +/* dmpywhu<.f> a,limm,c 0010111000110011F111CCCCCCAAAAAA. */ +{ "dmpywhu", 0x2E337000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, RC }, { C_F }}, + +/* dmpywhu<.f> a,b,limm 00101bbb00110011FBBB111110AAAAAA. */ +{ "dmpywhu", 0x28330F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, LIMM }, { C_F }}, + +/* dmpywhu<.f> 0,limm,c 0010111000110011F111CCCCCC111110. */ +{ "dmpywhu", 0x2E33703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, RC }, { C_F }}, + +/* dmpywhu<.f> 0,b,limm 00101bbb00110011FBBB111110111110. */ +{ "dmpywhu", 0x28330FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, LIMM }, { C_F }}, + +/* dmpywhu<.f><.cc> b,b,limm 00101bbb11110011FBBB1111100QQQQQ. */ +{ "dmpywhu", 0x28F30F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, LIMM }, { C_F, C_CC }}, + +/* dmpywhu<.f><.cc> 0,limm,c 0010111011110011F111CCCCCC0QQQQQ. */ +{ "dmpywhu", 0x2EF37000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* dmpywhu<.f> a,limm,u6 0010111001110011F111uuuuuuAAAAAA. */ +{ "dmpywhu", 0x2E737000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, UIMM6_20 }, { C_F }}, + +/* dmpywhu<.f> 0,limm,u6 0010111001110011F111uuuuuu111110. */ +{ "dmpywhu", 0x2E73703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* dmpywhu<.f><.cc> 0,limm,u6 0010111011110011F111uuuuuu1QQQQQ. */ +{ "dmpywhu", 0x2EF37020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* dmpywhu<.f> 0,limm,s12 0010111010110011F111ssssssSSSSSS. */ +{ "dmpywhu", 0x2EB37000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* dmpywhu<.f> a,limm,limm 0010111000110011F111111110AAAAAA. */ +{ "dmpywhu", 0x2E337F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, LIMMdup }, { C_F }}, + +/* dmpywhu<.f> 0,limm,limm 0010111000110011F111111110111110. */ +{ "dmpywhu", 0x2E337FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* dmpywhu<.f><.cc> 0,limm,limm 0010111011110011F1111111100QQQQQ. */ +{ "dmpywhu", 0x2EF37F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* dsync 00100010011011110001RRRRRR111111. */ +{ "dsync", 0x226F103F, 0xFFFFF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, CONTROL, NONE, { 0 }, { 0 }}, + +/* ex<.di> b,c 00100bbb00101111DBBBCCCCCC001100. */ +{ "ex", 0x202F000C, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MEMORY, NONE, { RB, BRAKET, RC, BRAKETdup }, { C_DI16 }}, + +/* ex<.di> b,u6 00100bbb01101111DBBBuuuuuu001100. */ +{ "ex", 0x206F000C, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MEMORY, NONE, { RB, BRAKET, UIMM6_20, BRAKETdup }, { C_DI16 }}, + +/* ex<.di> b,limm 00100bbb00101111DBBB111110001100. */ +{ "ex", 0x202F0F8C, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MEMORY, NONE, { RB, BRAKET, LIMM, BRAKETdup }, { C_DI16 }}, + +/* ex<.di> limm,c 0010011000101111D111CCCCCC001100. */ +{ "ex", 0x262F700C, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MEMORY, NONE, { LIMM, BRAKET, RC, BRAKETdup }, { C_DI16 }}, + +/* ex<.di> limm,u6 0010011001101111D111uuuuuu001100. */ +{ "ex", 0x266F700C, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MEMORY, NONE, { LIMM, BRAKET, UIMM6_20, BRAKETdup }, { C_DI16 }}, + +/* ex<.di> limm,limm 0010011000101111D111111110001100. */ +{ "ex", 0x262F7F8C, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MEMORY, NONE, { LIMM, BRAKET, LIMMdup, BRAKETdup }, { C_DI16 }}, + +/* exl<.aq> RB,RC 01011bbb00101111FBBBcccccc001100. */ +{ "exl", 0x582F000C, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, BRAKET, RC, BRAKETdup }, { C_AQ, C_RL }}, + +/* extb<.f> b,c 00100bbb00101111FBBBCCCCCC000111. */ +{ "extb", 0x202F0007, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { C_F }}, + +/* extb<.f> 0,c 0010011000101111F111CCCCCC000111. */ +{ "extb", 0x262F7007, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RC }, { C_F }}, + +/* extb<.f> b,u6 00100bbb01101111FBBBuuuuuu000111. */ +{ "extb", 0x206F0007, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { C_F }}, + +/* extb<.f> 0,u6 0010011001101111F111uuuuuu000111. */ +{ "extb", 0x266F7007, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, UIMM6_20 }, { C_F }}, + +/* extb<.f> b,limm 00100bbb00101111FBBB111110000111. */ +{ "extb", 0x202F0F87, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM }, { C_F }}, + +/* extb<.f> 0,limm 0010011000101111F111111110000111. */ +{ "extb", 0x262F7F87, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM }, { C_F }}, + +/* extb_s b,c 01111bbbccc01111. */ +{ "extb_s", 0x0000780F, 0x0000F81F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB_S, RC_S }, { 0 }}, + +/* exth<.f> b,c 00100bbb00101111FBBBCCCCCC001000. */ +{ "exth", 0x202F0008, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { C_F }}, + +/* exth<.f> 0,c 0010011000101111F111CCCCCC001000. */ +{ "exth", 0x262F7008, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RC }, { C_F }}, + +/* exth<.f> b,u6 00100bbb01101111FBBBuuuuuu001000. */ +{ "exth", 0x206F0008, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { C_F }}, + +/* exth<.f> 0,u6 0010011001101111F111uuuuuu001000. */ +{ "exth", 0x266F7008, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, UIMM6_20 }, { C_F }}, + +/* exth<.f> b,limm 00100bbb00101111FBBB111110001000. */ +{ "exth", 0x202F0F88, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM }, { C_F }}, + +/* exth<.f> 0,limm 0010011000101111F111111110001000. */ +{ "exth", 0x262F7F88, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM }, { C_F }}, + +/* exth_s b,c 01111bbbccc10000. */ +{ "exth_s", 0x00007810, 0x0000F81F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB_S, RC_S }, { 0 }}, + +/* ffs<.f> b,c 00101bbb00101111FBBBCCCCCC010010. */ +{ "ffs", 0x282F0012, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { C_F }}, + +/* ffs<.f> 0,c 0010111000101111F111CCCCCC010010. */ +{ "ffs", 0x2E2F7012, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RC }, { C_F }}, + +/* ffs<.f> b,u6 00101bbb01101111FBBBuuuuuu010010. */ +{ "ffs", 0x286F0012, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { C_F }}, + +/* ffs<.f> 0,u6 0010111001101111F111uuuuuu010010. */ +{ "ffs", 0x2E6F7012, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, UIMM6_20 }, { C_F }}, + +/* ffs<.f> b,limm 00101bbb00101111FBBB111110010010. */ +{ "ffs", 0x282F0F92, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM }, { C_F }}, + +/* ffs<.f> 0,limm 0010111000101111F111111110010010. */ +{ "ffs", 0x2E2F7F92, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM }, { C_F }}, + +/* ffsl<.f> RB,RC 01011bbb00101111FBBBcccccc010010. */ +{ "ffsl", 0x582F0012, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { C_F }}, + +/* ffsl<.f> 0,RC 0101111000101111F111cccccc010010. */ +{ "ffsl", 0x5E2F7012, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RC }, { C_F }}, + +/* ffsl<.f> RB,u6 01011bbb01101111FBBBuuuuuu010010. */ +{ "ffsl", 0x586F0012, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { C_F }}, + +/* ffsl<.f> 0,u6 0101111001101111F111uuuuuu010010. */ +{ "ffsl", 0x5E6F7012, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, UIMM6_20 }, { C_F }}, + +/* ffsl<.f> RB,ximm 01011bbb00101111FBBB111100010010. */ +{ "ffsl", 0x582F0F12, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, XIMM }, { C_F }}, + +/* ffsl<.f> 0,ximm 0101111000101111F111111100010010. */ +{ "ffsl", 0x5E2F7F12, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM }, { C_F }}, + +/* ffsl<.f> RB,limm 01011bbb00101111FBBB111110010010. */ +{ "ffsl", 0x582F0F92, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM }, { C_F }}, + +/* ffsl<.f> 0,limm 0101111000101111F111111110010010. */ +{ "ffsl", 0x5E2F7F92, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM }, { C_F }}, + +/* flag c 00100RRR001010010RRRCCCCCCRRRRRR. */ +{ "flag", 0x20290000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, CONTROL, NONE, { RC }, { 0 }}, + +/* flag<.cc> c 00100RRR111010010RRRCCCCCC0QQQQQ. */ +{ "flag", 0x20E90000, 0xF8FF8020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, CONTROL, NONE, { RC }, { C_CC }}, + +/* flag u6 00100RRR011010010RRRuuuuuuRRRRRR. */ +{ "flag", 0x20690000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, CONTROL, NONE, { UIMM6_20 }, { 0 }}, + +/* flag<.cc> u6 00100RRR111010010RRRuuuuuu1QQQQQ. */ +{ "flag", 0x20E90020, 0xF8FF8020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, CONTROL, NONE, { UIMM6_20 }, { C_CC }}, + +/* flag s12 00100RRR101010010RRRssssssSSSSSS. */ +{ "flag", 0x20A90000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, CONTROL, NONE, { SIMM12_20 }, { 0 }}, + +/* flag limm 00100RRR001010010RRR111110RRRRRR. */ +{ "flag", 0x20290F80, 0xF8FF8FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, CONTROL, NONE, { LIMM }, { 0 }}, + +/* flag<.cc> limm 00100RRR111010010RRR1111100QQQQQ. */ +{ "flag", 0x20E90F80, 0xF8FF8FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, CONTROL, NONE, { LIMM }, { C_CC }}, + +/* fls<.f> b,c 00101bbb00101111FBBBCCCCCC010011. */ +{ "fls", 0x282F0013, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { C_F }}, + +/* fls<.f> 0,c 0010111000101111F111CCCCCC010011. */ +{ "fls", 0x2E2F7013, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RC }, { C_F }}, + +/* fls<.f> b,u6 00101bbb01101111FBBBuuuuuu010011. */ +{ "fls", 0x286F0013, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { C_F }}, + +/* fls<.f> 0,u6 0010111001101111F111uuuuuu010011. */ +{ "fls", 0x2E6F7013, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, UIMM6_20 }, { C_F }}, + +/* fls<.f> b,limm 00101bbb00101111FBBB111110010011. */ +{ "fls", 0x282F0F93, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM }, { C_F }}, + +/* fls<.f> 0,limm 0010111000101111F111111110010011. */ +{ "fls", 0x2E2F7F93, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM }, { C_F }}, + +/* flsl<.f> RB,RC 01011bbb00101111FBBBcccccc010011. */ +{ "flsl", 0x582F0013, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { C_F }}, + +/* flsl<.f> 0,RC 0101111000101111F111cccccc010011. */ +{ "flsl", 0x5E2F7013, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RC }, { C_F }}, + +/* flsl<.f> RB,u6 01011bbb01101111FBBBuuuuuu010011. */ +{ "flsl", 0x586F0013, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { C_F }}, + +/* flsl<.f> 0,u6 0101111001101111F111uuuuuu010011. */ +{ "flsl", 0x5E6F7013, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, UIMM6_20 }, { C_F }}, + +/* flsl<.f> RB,ximm 01011bbb00101111FBBB111100010011. */ +{ "flsl", 0x582F0F13, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, XIMM }, { C_F }}, + +/* flsl<.f> 0,ximm 0101111000101111F111111100010011. */ +{ "flsl", 0x5E2F7F13, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM }, { C_F }}, + +/* flsl<.f> RB,limm 01011bbb00101111FBBB111110010011. */ +{ "flsl", 0x582F0F93, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM }, { C_F }}, + +/* flsl<.f> 0,limm 0101111000101111F111111110010011. */ +{ "flsl", 0x5E2F7F93, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM }, { C_F }}, + +/* j c 00100RRR00100000RRRRCCCCCCRRRRRR. */ +{ "j", 0x20200000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JUMP, NONE, { BRAKET, RC, BRAKETdup }, { 0 }}, + +/* j BLINK 00100RRR00100000RRRR011111RRRRRR. */ +{ "j", 0x202007C0, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JUMP, NONE, { BRAKET, BLINK, BRAKETdup }, { 0 }}, + +/* jcc c 00100RRR11100000RRRRCCCCCC0QQQQQ. */ +{ "j", 0x20E00000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JUMP, COND, { BRAKET, RC, BRAKETdup }, { C_CC }}, + +/* jcc BLINK 00100RRR11100000RRRR0111110QQQQQ. */ +{ "j", 0x20E007C0, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JUMP, COND, { BRAKET, BLINK, BRAKETdup }, { C_CC }}, + +/* j.D c 00100RRR00100001RRRRCCCCCCRRRRRR. */ +{ "j", 0x20210000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JUMP, NONE, { BRAKET, RC, BRAKETdup }, { C_DHARD }}, + +/* j.D BLINK 00100RRR00100001RRRR011111RRRRRR. */ +{ "j", 0x202107C0, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JUMP, NONE, { BRAKET, BLINK, BRAKETdup }, { C_DHARD }}, + +/* j.Dcc c 00100RRR11100001RRRRCCCCCC0QQQQQ. */ +{ "j", 0x20E10000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JUMP, COND, { BRAKET, RC, BRAKETdup }, { C_CC, C_DHARD }}, + +/* j.Dcc BLINK 00100RRR11100001RRRR0111110QQQQQ. */ +{ "j", 0x20E107C0, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JUMP, COND, { BRAKET, BLINK, BRAKETdup }, { C_CC, C_DHARD }}, + +/* j s12 00100RRR10100000RRRRssssssSSSSSS. */ +{ "j", 0x20A00000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JUMP, NONE, { SIMM12_20 }, { 0 }}, + +/* j.D s12 00100RRR10100001RRRRssssssSSSSSS. */ +{ "j", 0x20A10000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JUMP, NONE, { SIMM12_20 }, { C_DHARD }}, + +/* j u6 00100RRR01100000RRRRuuuuuuRRRRRR. */ +{ "j", 0x20600000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JUMP, NONE, { UIMM6_20 }, { 0 }}, + +/* jcc u6 00100RRR11100000RRRRuuuuuu1QQQQQ. */ +{ "j", 0x20E00020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JUMP, COND, { UIMM6_20 }, { C_CC }}, + +/* j.D u6 00100RRR01100001RRRRuuuuuuRRRRRR. */ +{ "j", 0x20610000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JUMP, NONE, { UIMM6_20 }, { C_DHARD }}, + +/* j.Dcc u6 00100RRR11100001RRRRuuuuuu1QQQQQ. */ +{ "j", 0x20E10020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JUMP, COND, { UIMM6_20 }, { C_CC, C_DHARD }}, + +/* j limm 00100RRR00100000RRRR111110RRRRRR. */ +{ "j", 0x20200F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JUMP, NONE, { LIMM }, { 0 }}, + +/* jcc limm 00100RRR11100000RRRR1111100QQQQQ. */ +{ "j", 0x20E00F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JUMP, COND, { LIMM }, { C_CC }}, + +/* jeq_sCC_EQ BLINK 0111110011100000. */ +{ "jeq_s", 0x00007CE0, 0x0000FFFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JUMP, COND, { BRAKET, BLINK_S, BRAKETdup }, { C_CC_EQ }}, + +/* jl c 00100RRR00100010RRRRCCCCCCRRRRRR. */ +{ "jl", 0x20220000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JUMP, NONE, { BRAKET, RC, BRAKETdup }, { 0 }}, + +/* jlcc c 00100RRR11100010RRRRCCCCCC0QQQQQ. */ +{ "jl", 0x20E20000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JUMP, NONE, { BRAKET, RC, BRAKETdup }, { C_CC }}, + +/* jl.D c 00100RRR00100011RRRRCCCCCCRRRRRR. */ +{ "jl", 0x20230000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JUMP, NONE, { BRAKET, RC, BRAKETdup }, { C_DHARD }}, + +/* jl.Dcc c 00100RRR11100011RRRRCCCCCC0QQQQQ. */ +{ "jl", 0x20E30000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JUMP, NONE, { BRAKET, RC, BRAKETdup }, { C_CC, C_DHARD }}, + +/* jl s12 00100RRR10100010RRRRssssssSSSSSS. */ +{ "jl", 0x20A20000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JUMP, NONE, { SIMM12_20 }, { 0 }}, + +/* jl.D s12 00100RRR10100011RRRRssssssSSSSSS. */ +{ "jl", 0x20A30000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JUMP, NONE, { SIMM12_20 }, { C_DHARD }}, + +/* jl u6 00100RRR01100010RRRRuuuuuuRRRRRR. */ +{ "jl", 0x20620000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JUMP, NONE, { UIMM6_20 }, { 0 }}, + +/* jlcc u6 00100RRR11100010RRRRuuuuuu1QQQQQ. */ +{ "jl", 0x20E20020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JUMP, NONE, { UIMM6_20 }, { C_CC }}, + +/* jl.D u6 00100RRR01100011RRRRuuuuuuRRRRRR. */ +{ "jl", 0x20630000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JUMP, NONE, { UIMM6_20 }, { C_DHARD }}, + +/* jl.Dcc u6 00100RRR11100011RRRRuuuuuu1QQQQQ. */ +{ "jl", 0x20E30020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JUMP, NONE, { UIMM6_20 }, { C_CC, C_DHARD }}, + +/* jl limm 00100RRR00100010RRRR111110RRRRRR. */ +{ "jl", 0x20220F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JUMP, NONE, { LIMM }, { 0 }}, + +/* jlcc limm 00100RRR11100010RRRR1111100QQQQQ. */ +{ "jl", 0x20E20F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JUMP, NONE, { LIMM }, { C_CC }}, + +/* jli_s u10 01010UUUUUUU1uuu. */ +{ "jli_s", 0x00005008, 0x0000F808, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JLI, NONE, { UIMM10_13_S }, { 0 }}, + +/* jl_s b 01111bbb01000000. */ +{ "jl_s", 0x00007840, 0x0000F8FF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JUMP, NONE, { BRAKET, RB_S, BRAKETdup }, { 0 }}, + +/* jl_s.D b 01111bbb01100000. */ +{ "jl_s", 0x00007860, 0x0000F8FF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JUMP, NONE, { BRAKET, RB_S, BRAKETdup }, { C_DHARD }}, + +/* jne_sCC_NE BLINK 0111110111100000. */ +{ "jne_s", 0x00007DE0, 0x0000FFFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JUMP, COND, { BRAKET, BLINK_S, BRAKETdup }, { C_CC_NE }}, + +/* j_s b 01111bbb00000000. */ +{ "j_s", 0x00007800, 0x0000F8FF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JUMP, NONE, { BRAKET, RB_S, BRAKETdup }, { 0 }}, + +/* j_s.D b 01111bbb00100000. */ +{ "j_s", 0x00007820, 0x0000F8FF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JUMP, NONE, { BRAKET, RB_S, BRAKETdup }, { C_DHARD }}, + +/* j_s BLINK 0111111011100000. */ +{ "j_s", 0x00007EE0, 0x0000FFFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JUMP, NONE, { BRAKET, BLINK_S, BRAKETdup }, { 0 }}, + +/* j_s.D BLINK 0111111111100000. */ +{ "j_s", 0x00007FE0, 0x0000FFFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, JUMP, NONE, { BRAKET, BLINK_S, BRAKETdup }, { C_DHARD }}, + +/* kflag c 00100RRR001010011RRRCCCCCCRRRRRR. */ +{ "kflag", 0x20298000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, CONTROL, NONE, { RC }, { 0 }}, + +/* kflag<.cc> c 00100RRR111010011RRRCCCCCC0QQQQQ. */ +{ "kflag", 0x20E98000, 0xF8FF8020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, CONTROL, NONE, { RC }, { C_CC }}, + +/* kflag u6 00100RRR011010011RRRuuuuuuRRRRRR. */ +{ "kflag", 0x20698000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, CONTROL, NONE, { UIMM6_20 }, { 0 }}, + +/* kflag<.cc> u6 00100RRR111010011RRRuuuuuu1QQQQQ. */ +{ "kflag", 0x20E98020, 0xF8FF8020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, CONTROL, NONE, { UIMM6_20 }, { C_CC }}, + +/* kflag s12 00100RRR101010011RRRssssssSSSSSS. */ +{ "kflag", 0x20A98000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, CONTROL, NONE, { SIMM12_20 }, { 0 }}, + +/* kflag limm 00100RRR001010011RRR111110RRRRRR. */ +{ "kflag", 0x20298F80, 0xF8FF8FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, CONTROL, NONE, { LIMM }, { 0 }}, + +/* kflag<.cc> limm 00100RRR111010011RRR1111100QQQQQ. */ +{ "kflag", 0x20E98F80, 0xF8FF8FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, CONTROL, NONE, { LIMM }, { C_CC }}, + +/* ldZZ_W<.di><.aa> a,b 00010bbb000000000BBBDaa000AAAAAA. */ +{ "ld", 0x10000000, 0xF8FF81C0, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, RB, BRAKETdup }, { C_ZZ_W, C_DI20, C_AA21 }}, + +/* ldZZ_W<.di><.aa> a,b,c 00100bbbaa110000DBBBCCCCCCAAAAAA. */ +{ "ld", 0x20300000, 0xF83F0000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, RB, RC, BRAKETdup }, { C_ZZ_W, C_DI16, C_AA8 }}, + +/* ldZZ_W<.di><.aa> 0,b,c 00100bbbaa110000DBBBCCCCCC111110. */ +{ "ld", 0x2030003E, 0xF83F003F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { ZA, BRAKET, RB, RC, BRAKETdup }, { C_ZZ_W, C_DI16, C_AA8 }}, + +/* ldZZ_W<.x><.aa> a,b 00010bbb000000000BBB0aa00XAAAAAA. */ +{ "ld", 0x10000000, 0xF8FF8980, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, RB, BRAKETdup }, { C_ZZ_W, C_AA21, C_X25 }}, + +/* ldZZ_W<.x><.aa> a,b,c 00100bbbaa11000X0BBBCCCCCCAAAAAA. */ +{ "ld", 0x20300000, 0xF83E8000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, RB, RC, BRAKETdup }, { C_ZZ_W, C_AA8, C_X15 }}, + +/* ldZZ_W<.x><.aa> 0,b,c 00100bbbaa11000X0BBBCCCCCC111110. */ +{ "ld", 0x2030003E, 0xF83E803F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { ZA, BRAKET, RB, RC, BRAKETdup }, { C_ZZ_W, C_AA8, C_X15 }}, + +/* ldZZ_W<.di><.aa> a,b,s9 00010bbbssssssssSBBBDaa000AAAAAA. */ +{ "ld", 0x10000000, 0xF80001C0, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, RB, SIMM9_8, BRAKETdup }, { C_ZZ_W, C_DI20, C_AA21 }}, + +/* ldZZ_W<.di><.aa> 0,b,s9 00010bbbssssssssSBBBDaa000111110. */ +{ "ld", 0x1000003E, 0xF80001FF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { ZA, BRAKET, RB, SIMM9_8, BRAKETdup }, { C_ZZ_W, C_DI20, C_AA21 }}, + +/* ldZZ_W<.x><.aa> a,b,s9 00010bbbssssssssSBBB0aa00XAAAAAA. */ +{ "ld", 0x10000000, 0xF8000980, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, RB, SIMM9_8, BRAKETdup }, { C_ZZ_W, C_AA21, C_X25 }}, + +/* ldZZ_W<.x><.aa> 0,b,s9 00010bbbssssssssSBBB0aa00X111110. */ +{ "ld", 0x1000003E, 0xF80009BF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { ZA, BRAKET, RB, SIMM9_8, BRAKETdup }, { C_ZZ_W, C_AA21, C_X25 }}, + +/* ldZZ_W<.di> a,limm 00010110000000000111D00000AAAAAA. */ +{ "ld", 0x16007000, 0xFFFFF7C0, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, LIMM, BRAKETdup }, { C_ZZ_W, C_DI20 }}, + +/* ldZZ_W<.di> 0,limm 00010110000000000111D00000111110. */ +{ "ld", 0x1600703E, 0xFFFFF7FF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { ZA, BRAKET, LIMM, BRAKETdup }, { C_ZZ_W, C_DI20 }}, + +/* ldZZ_W<.di><.aa> a,b,ximm 00100bbbaa110000DBBB111100AAAAAA. */ +{ "ld", 0x20300F00, 0xF83F0FC0, ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, RB, XIMM, BRAKETdup }, { C_ZZ_W, C_DI16, C_AA8 }}, + +/* ldZZ_W<.di><.aa> a,b,limm 00100bbbaa110000DBBB111110AAAAAA. */ +{ "ld", 0x20300F80, 0xF83F0FC0, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, RB, LIMM, BRAKETdup }, { C_ZZ_W, C_DI16, C_AA8 }}, + +/* ldZZ_W<.di><.aa> a,ximm,c 00100100aa110000D111CCCCCCAAAAAA. */ +{ "ld", 0x24307000, 0xFF3F7000, ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, XIMM, RC, BRAKETdup }, { C_ZZ_W, C_DI16, C_AA8 }}, + +/* ldZZ_W<.di><.aa> a,limm,c 00100110aa110000D111CCCCCCAAAAAA. */ +{ "ld", 0x26307000, 0xFF3F7000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, LIMM, RC, BRAKETdup }, { C_ZZ_W, C_DI16, C_AA8 }}, + +/* ldZZ_W<.di><.aa> 0,b,limm 00100bbbaa110000DBBB111110111110. */ +{ "ld", 0x20300FBE, 0xF83F0FFF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { ZA, BRAKET, RB, LIMM, BRAKETdup }, { C_ZZ_W, C_DI16, C_AA8 }}, + +/* ldZZ_W<.di><.aa> 0,limm,c 00100110aa110000D111CCCCCC111110. */ +{ "ld", 0x2630703E, 0xFF3F703F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { ZA, BRAKET, LIMM, RC, BRAKETdup }, { C_ZZ_W, C_DI16, C_AA8 }}, + +/* ldZZ_W<.x> a,limm 0001011000000000011100000XAAAAAA. */ +{ "ld", 0x16007000, 0xFFFFFF80, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, LIMM, BRAKETdup }, { C_ZZ_W, C_X25 }}, + +/* ldZZ_W<.x> 0,limm 0001011000000000011100000X111110. */ +{ "ld", 0x1600703E, 0xFFFFFFBF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { ZA, BRAKET, LIMM, BRAKETdup }, { C_ZZ_W, C_X25 }}, + +/* ldZZ_W<.x><.aa> a,b,ximm 00100bbbaa11000X0BBB111100AAAAAA. */ +{ "ld", 0x20300F00, 0xF83E8FC0, ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, RB, XIMM, BRAKETdup }, { C_ZZ_W, C_AA8, C_X15 }}, + +/* ldZZ_W<.x><.aa> a,b,limm 00100bbbaa11000X0BBB111110AAAAAA. */ +{ "ld", 0x20300F80, 0xF83E8FC0, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, RB, LIMM, BRAKETdup }, { C_ZZ_W, C_AA8, C_X15 }}, + +/* ldZZ_W<.x><.aa> a,ximm,c 00100100aa11000X0111CCCCCCAAAAAA. */ +{ "ld", 0x24307000, 0xFF3EF000, ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, XIMM, RC, BRAKETdup }, { C_ZZ_W, C_AA8, C_X15 }}, + +/* ldZZ_W<.x><.aa> a,limm,c 00100110aa11000X0111CCCCCCAAAAAA. */ +{ "ld", 0x26307000, 0xFF3EF000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, LIMM, RC, BRAKETdup }, { C_ZZ_W, C_AA8, C_X15 }}, + +/* ldZZ_W<.x><.aa> 0,b,limm 00100bbbaa11000X0BBB111110111110. */ +{ "ld", 0x20300FBE, 0xF83E8FFF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { ZA, BRAKET, RB, LIMM, BRAKETdup }, { C_ZZ_W, C_AA8, C_X15 }}, + +/* ldZZ_W<.di><.aa> a,limm,s9 00010110ssssssssS111Daa000AAAAAA. */ +{ "ld", 0x16007000, 0xFF0071C0, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, LIMM, SIMM9_8, BRAKETdup }, { C_ZZ_W, C_DI20, C_AA21 }}, + +/* ldZZ_W<.di><.aa> 0,limm,s9 00010110ssssssssS111Daa000111110. */ +{ "ld", 0x1600703E, 0xFF0071FF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { ZA, BRAKET, LIMM, SIMM9_8, BRAKETdup }, { C_ZZ_W, C_DI20, C_AA21 }}, + +/* ldZZ_W<.x><.aa> a,limm,s9 00010110ssssssssS1110aa00XAAAAAA. */ +{ "ld", 0x16007000, 0xFF007980, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, LIMM, SIMM9_8, BRAKETdup }, { C_ZZ_W, C_AA21, C_X25 }}, + +/* ldZZ_W<.x><.aa> 0,limm,s9 00010110ssssssssS1110aa00X111110. */ +{ "ld", 0x1600703E, 0xFF0079BF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { ZA, BRAKET, LIMM, SIMM9_8, BRAKETdup }, { C_ZZ_W, C_AA21, C_X25 }}, + +/* ld ZZ_W<.x><.aa> 0,limm,c 00100110aa11000X0111CCCCCC111110. */ +{ "ld ", 0x2630703E, 0xFF3EF03F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { ZA, LIMM, RC }, { C_ZZ_W, C_AA8, C_X15 }}, + +/* ldbZZ_B<.x><.di><.aa> a,b 00010bbb000000000BBBDaa01XAAAAAA. */ +{ "ldb", 0x10000080, 0xF8FF8180, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, RB, BRAKETdup }, { C_ZZ_B, C_DI20, C_AAB21, C_X25 }}, + +/* ldbZZ_B<.x><.di><.aa> a,b,c 00100bbbaa11001XDBBBCCCCCCAAAAAA. */ +{ "ldb", 0x20320000, 0xF83E0000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, RB, RC, BRAKETdup }, { C_ZZ_B, C_DI16, C_AAB8, C_X15 }}, + +/* ldbZZ_B<.x><.di><.aa> 0,b,c 00100bbbaa11001XDBBBCCCCCC111110. */ +{ "ldb", 0x2032003E, 0xF83E003F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { ZA, BRAKET, RB, RC, BRAKETdup }, { C_ZZ_B, C_DI16, C_AAB8, C_X15 }}, + +/* ldbZZ_B<.x><.di><.aa> a,b,s9 00010bbbssssssssSBBBDaa01XAAAAAA. */ +{ "ldb", 0x10000080, 0xF8000180, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, RB, SIMM9_8, BRAKETdup }, { C_ZZ_B, C_DI20, C_AAB21, C_X25 }}, + +/* ldbZZ_B<.x><.di><.aa> 0,b,s9 00010bbbssssssssSBBBDaa01X111110. */ +{ "ldb", 0x100000BE, 0xF80001BF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { ZA, BRAKET, RB, SIMM9_8, BRAKETdup }, { C_ZZ_B, C_DI20, C_AAB21, C_X25 }}, + +/* ldbZZ_B<.x><.di> a,ximm 00010100000000000111D0001XAAAAAA. */ +{ "ldb", 0x14007080, 0xFFFFF780, ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, XIMM, BRAKETdup }, { C_ZZ_B, C_DI20, C_X25 }}, +/* ldbZZ_B<.x><.di> a,limm 00010110000000000111D0001XAAAAAA. */ +{ "ldb", 0x16007080, 0xFFFFF780, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, LIMM, BRAKETdup }, { C_ZZ_B, C_DI20, C_X25 }}, + +/* ldbZZ_B<.x><.di> 0,limm 00010110000000000111D0001X111110. */ +{ "ldb", 0x160070BE, 0xFFFFF7BF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { ZA, BRAKET, LIMM, BRAKETdup }, { C_ZZ_B, C_DI20, C_X25 }}, + +/* ldbZZ_B<.x><.di><.aa> a,b,ximm 00100bbbaa11001XDBBB111100AAAAAA. */ +{ "ldb", 0x20320F00, 0xF83E0FC0, ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, RB, XIMM, BRAKETdup }, { C_ZZ_B, C_DI16, C_AAB8, C_X15 }}, +/* ldbZZ_B<.x><.di><.aa> a,b,limm 00100bbbaa11001XDBBB111110AAAAAA. */ +{ "ldb", 0x20320F80, 0xF83E0FC0, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, RB, LIMM, BRAKETdup }, { C_ZZ_B, C_DI16, C_AAB8, C_X15 }}, + +/* ldbZZ_B<.x><.di><.aa> a,ximm,c 00100100aa11001XD111CCCCCCAAAAAA. */ +{ "ldb", 0x24327000, 0xFF3E7000, ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, XIMM, RC, BRAKETdup }, { C_ZZ_B, C_DI16, C_AAB8, C_X15 }}, +/* ldbZZ_B<.x><.di><.aa> a,limm,c 00100110aa11001XD111CCCCCCAAAAAA. */ +{ "ldb", 0x26327000, 0xFF3E7000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, LIMM, RC, BRAKETdup }, { C_ZZ_B, C_DI16, C_AAB8, C_X15 }}, + +/* ldbZZ_B<.x><.di><.aa> 0,b,limm 00100bbbaa11001XDBBB111110111110. */ +{ "ldb", 0x20320FBE, 0xF83E0FFF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { ZA, BRAKET, RB, LIMM, BRAKETdup }, { C_ZZ_B, C_DI16, C_AAB8, C_X15 }}, + +/* ldbZZ_B<.x><.di><.aa> 0,limm,c 00100110aa11001XD111CCCCCC111110. */ +{ "ldb", 0x2632703E, 0xFF3E703F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { ZA, BRAKET, LIMM, RC, BRAKETdup }, { C_ZZ_B, C_DI16, C_AAB8, C_X15 }}, + +/* ldbZZ_B<.x><.di><.aa> a,ximm,s9 00010100ssssssssS111Daa01XAAAAAA. */ +{ "ldb", 0x14007080, 0xFF007180, ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, XIMM, SIMM9_8, BRAKETdup }, { C_ZZ_B, C_DI20, C_AAB21, C_X25 }}, +/* ldbZZ_B<.x><.di><.aa> a,limm,s9 00010110ssssssssS111Daa01XAAAAAA. */ +{ "ldb", 0x16007080, 0xFF007180, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, LIMM, SIMM9_8, BRAKETdup }, { C_ZZ_B, C_DI20, C_AAB21, C_X25 }}, + +/* ldbZZ_B<.x><.di><.aa> 0,limm,s9 00010110ssssssssS111Daa01X111110. */ +{ "ldb", 0x160070BE, 0xFF0071BF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { ZA, BRAKET, LIMM, SIMM9_8, BRAKETdup }, { C_ZZ_B, C_DI20, C_AAB21, C_X25 }}, + +/* ldhZZ_H<.x><.di><.aa> a,b 00010bbb000000000BBBDaa10XAAAAAA. */ +{ "ldh", 0x10000100, 0xF8FF8180, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, RB, BRAKETdup }, { C_ZZ_H, C_DI20, C_AA21, C_X25 }}, + +/* ldhZZ_H<.x><.di><.aa> a,b,c 00100bbbaa11010XDBBBCCCCCCAAAAAA. */ +{ "ldh", 0x20340000, 0xF83E0000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, RB, RC, BRAKETdup }, { C_ZZ_H, C_DI16, C_AA8, C_X15 }}, + +/* ldhZZ_H<.x><.di><.aa> 0,b,c 00100bbbaa11010XDBBBCCCCCC111110. */ +{ "ldh", 0x2034003E, 0xF83E003F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { ZA, BRAKET, RB, RC, BRAKETdup }, { C_ZZ_H, C_DI16, C_AA8, C_X15 }}, + +/* ldhZZ_H<.x><.di><.aa> a,b,s9 00010bbbssssssssSBBBDaa10XAAAAAA. */ +{ "ldh", 0x10000100, 0xF8000180, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, RB, SIMM9_8, BRAKETdup }, { C_ZZ_H, C_DI20, C_AA21, C_X25 }}, + +/* ldhZZ_H<.x><.di><.aa> 0,b,s9 00010bbbssssssssSBBBDaa10X111110. */ +{ "ldh", 0x1000013E, 0xF80001BF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { ZA, BRAKET, RB, SIMM9_8, BRAKETdup }, { C_ZZ_H, C_DI20, C_AA21, C_X25 }}, + +/* ldhZZ_H<.x><.di> a,limm 00010110000000000111D0010XAAAAAA. */ +{ "ldh", 0x16007100, 0xFFFFF780, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, LIMM, BRAKETdup }, { C_ZZ_H, C_DI20, C_X25 }}, + +/* ldhZZ_H<.x><.di> 0,limm 00010110000000000111D0010X111110. */ +{ "ldh", 0x1600713E, 0xFFFFF7BF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { ZA, BRAKET, LIMM, BRAKETdup }, { C_ZZ_H, C_DI20, C_X25 }}, + +/* ldhZZ_H<.x><.di><.aa> a,b,ximm 00100bbbaa11010XDBBB111100AAAAAA. */ +{ "ldh", 0x20340F00, 0xF83E0FC0, ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, RB, XIMM, BRAKETdup }, { C_ZZ_H, C_DI16, C_AA8, C_X15 }}, + +/* ldhZZ_H<.x><.di><.aa> a,b,limm 00100bbbaa11010XDBBB111110AAAAAA. */ +{ "ldh", 0x20340F80, 0xF83E0FC0, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, RB, LIMM, BRAKETdup }, { C_ZZ_H, C_DI16, C_AA8, C_X15 }}, + +/* ldhZZ_H<.x><.di><.aa> a,ximm,c 00100100aa11010XD111CCCCCCAAAAAA. */ +{ "ldh", 0x24347000, 0xFF3E7000, ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, XIMM, RC, BRAKETdup }, { C_ZZ_H, C_DI16, C_AA8, C_X15 }}, + +/* ldhZZ_H<.x><.di><.aa> a,limm,c 00100110aa11010XD111CCCCCCAAAAAA. */ +{ "ldh", 0x26347000, 0xFF3E7000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, LIMM, RC, BRAKETdup }, { C_ZZ_H, C_DI16, C_AA8, C_X15 }}, + +/* ldhZZ_H<.x><.di><.aa> 0,b,limm 00100bbbaa11010XDBBB111110111110. */ +{ "ldh", 0x20340FBE, 0xF83E0FFF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { ZA, BRAKET, RB, LIMM, BRAKETdup }, { C_ZZ_H, C_DI16, C_AA8, C_X15 }}, + +/* ldhZZ_H<.x><.di><.aa> 0,limm,c 00100110aa11010XD111CCCCCC111110. */ +{ "ldh", 0x2634703E, 0xFF3E703F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { ZA, BRAKET, LIMM, RC, BRAKETdup }, { C_ZZ_H, C_DI16, C_AA8, C_X15 }}, + +/* ldhZZ_H<.x><.di><.aa> a,limm,s9 00010110ssssssssS111Daa10XAAAAAA. */ +{ "ldh", 0x16007100, 0xFF007180, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, LIMM, SIMM9_8, BRAKETdup }, { C_ZZ_H, C_DI20, C_AA21, C_X25 }}, + +/* ldhZZ_H<.x><.di><.aa> 0,limm,s9 00010110ssssssssS111Daa10X111110. */ +{ "ldh", 0x1600713E, 0xFF0071BF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { ZA, BRAKET, LIMM, SIMM9_8, BRAKETdup }, { C_ZZ_H, C_DI20, C_AA21, C_X25 }}, + + +/* ldhZZ_H<.x><.di><.aa> a,b 00010bbb000000000BBBDaa10XAAAAAA. */ +{ "ldw", 0x10000100, 0xF8FF8180, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, RB, BRAKETdup }, { C_ZZ_H, C_DI20, C_AA21, C_X25 }}, + +/* ldhZZ_H<.x><.di><.aa> a,b,c 00100bbbaa11010XDBBBCCCCCCAAAAAA. */ +{ "ldw", 0x20340000, 0xF83E0000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, RB, RC, BRAKETdup }, { C_ZZ_H, C_DI16, C_AA8, C_X15 }}, + +/* ldhZZ_H<.x><.di><.aa> 0,b,c 00100bbbaa11010XDBBBCCCCCC111110. */ +{ "ldw", 0x2034003E, 0xF83E003F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { ZA, BRAKET, RB, RC, BRAKETdup }, { C_ZZ_H, C_DI16, C_AA8, C_X15 }}, + +/* ldhZZ_H<.x><.di><.aa> a,b,s9 00010bbbssssssssSBBBDaa10XAAAAAA. */ +{ "ldw", 0x10000100, 0xF8000180, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, RB, SIMM9_8, BRAKETdup }, { C_ZZ_H, C_DI20, C_AA21, C_X25 }}, + +/* ldhZZ_H<.x><.di><.aa> 0,b,s9 00010bbbssssssssSBBBDaa10X111110. */ +{ "ldw", 0x1000013E, 0xF80001BF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { ZA, BRAKET, RB, SIMM9_8, BRAKETdup }, { C_ZZ_H, C_DI20, C_AA21, C_X25 }}, + +/* ldhZZ_H<.x><.di> a,limm 00010110000000000111D0010XAAAAAA. */ +{ "ldw", 0x16007100, 0xFFFFF780, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, LIMM, BRAKETdup }, { C_ZZ_H, C_DI20, C_X25 }}, + +/* ldhZZ_H<.x><.di> 0,limm 00010110000000000111D0010X111110. */ +{ "ldw", 0x1600713E, 0xFFFFF7BF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { ZA, BRAKET, LIMM, BRAKETdup }, { C_ZZ_H, C_DI20, C_X25 }}, + +/* ldhZZ_H<.x><.di><.aa> a,b,ximm 00100bbbaa11010XDBBB111100AAAAAA. */ +{ "ldw", 0x20340F00, 0xF83E0FC0, ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, RB, XIMM, BRAKETdup }, { C_ZZ_H, C_DI16, C_AA8, C_X15 }}, + +/* ldhZZ_H<.x><.di><.aa> a,b,limm 00100bbbaa11010XDBBB111110AAAAAA. */ +{ "ldw", 0x20340F80, 0xF83E0FC0, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, RB, LIMM, BRAKETdup }, { C_ZZ_H, C_DI16, C_AA8, C_X15 }}, + +/* ldhZZ_H<.x><.di><.aa> a,limm,c 00100100aa11010XD111CCCCCCAAAAAA. */ +{ "ldw", 0x24347000, 0xFF3E7000, ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, XIMM, RC, BRAKETdup }, { C_ZZ_H, C_DI16, C_AA8, C_X15 }}, + +/* ldhZZ_H<.x><.di><.aa> a,limm,c 00100110aa11010XD111CCCCCCAAAAAA. */ +{ "ldw", 0x26347000, 0xFF3E7000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, LIMM, RC, BRAKETdup }, { C_ZZ_H, C_DI16, C_AA8, C_X15 }}, + +/* ldhZZ_H<.x><.di><.aa> 0,b,limm 00100bbbaa11010XDBBB111110111110. */ +{ "ldw", 0x20340FBE, 0xF83E0FFF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { ZA, BRAKET, RB, LIMM, BRAKETdup }, { C_ZZ_H, C_DI16, C_AA8, C_X15 }}, + +/* ldhZZ_H<.x><.di><.aa> 0,limm,c 00100110aa11010XD111CCCCCC111110. */ +{ "ldw", 0x2634703E, 0xFF3E703F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { ZA, BRAKET, LIMM, RC, BRAKETdup }, { C_ZZ_H, C_DI16, C_AA8, C_X15 }}, + +/* ldhZZ_H<.x><.di><.aa> a,limm,s9 00010110ssssssssS111Daa10XAAAAAA. */ +{ "ldw", 0x16007100, 0xFF007180, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, LIMM, SIMM9_8, BRAKETdup }, { C_ZZ_H, C_DI20, C_AA21, C_X25 }}, + +/* ldhZZ_H<.x><.di><.aa> 0,limm,s9 00010110ssssssssS111Daa10X111110. */ +{ "ldw", 0x1600713E, 0xFF0071BF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { ZA, BRAKET, LIMM, SIMM9_8, BRAKETdup }, { C_ZZ_H, C_DI20, C_AA21, C_X25 }}, + +/* ldd<.aa><.di> a,b 00010bbb000000000BBBDaa110AAAAAA -> ldd a,[b,s9=0] */ +/* ldd<.aa><.di> a,b,s9 00010bbbssssssssSBBBDaa110AAAAAA -> ldd a,[b,s9] */ +/* ldd<.aa><.di> a,limm 00010110000000000111Daa110AAAAAA -> ldd a,[b=62,s9=0] */ +{ "ldd", 0x10000180, 0xF8FF81C0, ARC_OPCODE_ARC32, LOAD, NONE, { RAD, BRAKET, RB, BRAKETdup }, { C_DI20, C_AA21 }}, +{ "ldd", 0x10000180, 0xF80001C0, ARC_OPCODE_ARC32, LOAD, NONE, { RAD, BRAKET, RB, SIMM9_8, BRAKETdup }, { C_DI20, C_AA21 }}, +{ "ldd", 0x16007180, 0xFFFFF1C0, ARC_OPCODE_ARC32, LOAD, NONE, { RAD, BRAKET, LIMM, BRAKETdup }, { C_DI20, C_AA21 }}, + +/* ldd<.aa><.di> a,b,c 00100bbbaa110110DBBBCCCCCCAAAAAA -> ldd a,[b,c] */ +/* ldd<.aa><.di> a,b,limm 00100bbbaa110110DBBB111110AAAAAA -> ldd a,[b,c=62] */ +/* ldd<.aa><.di> a,limm,c 00100110aa110110D111CCCCCCAAAAAA -> ldd a,[b=62,c] */ +{ "ldd", 0x20360000, 0xF83F0000, ARC_OPCODE_ARC32, LOAD, NONE, { RAD, BRAKET, RB, RC, BRAKETdup }, { C_DI16, C_AA8 }}, +{ "ldd", 0x20360F80, 0xF83F0FC0, ARC_OPCODE_ARC32, LOAD, NONE, { RAD, BRAKET, RB, LIMM, BRAKETdup }, { C_DI16, C_AA8 }}, +{ "ldd", 0x26367000, 0xFF3F7000, ARC_OPCODE_ARC32, LOAD, NONE, { RAD, BRAKET, LIMM, RC, BRAKETdup }, { C_DI16, C_AA8 }}, + +/* lddl<.aa> a,b 00010bbb000000000BBBq1101QAAAAAA -> lddl a,[b,s9=0] */ +/* lddl<.aa> a,b,s9 00010bbbssssssssSBBBq1101QAAAAAA -> lddl a,[b,s9] */ +/* lddl<.as> a,ximm 00010100000000000111q1101QAAAAAA -> lddl a,[b=60,s9=0] */ +/* lddl<.as> a,limm 00010110000000000111q1101QAAAAAA -> lddl a,[b=62,s9=0] */ +{ "lddl", 0x10000680, 0xF8FF8780, ARC_OPCODE_ARC64, LOAD, NONE, { RAD, BRAKET, RB, BRAKETdup }, { C_AA_128S }}, +{ "lddl", 0x10000680, 0xF8000780, ARC_OPCODE_ARC64, LOAD, NONE, { RAD, BRAKET, RB, SIMM9_8, BRAKETdup }, { C_AA_128S }}, + +{ "lddl", 0x14007680, 0xFFFFF780, ARC_OPCODE_ARC64, LOAD, NONE, { RAD, BRAKET, XIMM, BRAKETdup }, { C_AS_128S }}, +{ "lddl", 0x16007680, 0xFFFFF780, ARC_OPCODE_ARC64, LOAD, NONE, { RAD, BRAKET, LIMM, BRAKETdup }, { C_AS_128S }}, + +/* lddl<.aa> a,b,c 00100bbb1111001QQBBBCCCCCCAAAAAA -> lddl a,[b,c] */ +/* lddl<.aa> a,b,ximm 00100bbb1111001QQBBB111100AAAAAA -> lddl a,[b,c=60] */ +/* lddl<.aa> a,b,limm 00100bbb1111001QQBBB111110AAAAAA -> lddl a,[b,c=62] */ +/* lddl<.as> a,ximm,c 001001001111001QQ111CCCCCCAAAAAA -> lddl a,[b=60,c] */ +/* lddl<.as> a,limm,c 001001101111001QQ111CCCCCCAAAAAA -> lddl a,[b=62,c] */ +{ "lddl", 0x20F20000, 0xF8FE0000, ARC_OPCODE_ARC64, LOAD, NONE, { RAD, BRAKET, RB, RC, BRAKETdup }, { C_AA_128 }}, + +{ "lddl", 0x20F20F00, 0xF8FE0FC0, ARC_OPCODE_ARC64, LOAD, NONE, { RAD, BRAKET, RB, XIMM, BRAKETdup }, { C_AA_128 }}, +{ "lddl", 0x20F20F80, 0xF8FE0FC0, ARC_OPCODE_ARC64, LOAD, NONE, { RAD, BRAKET, RB, LIMM, BRAKETdup }, { C_AA_128 }}, + +{ "lddl", 0x24F27000, 0xFFFE7000, ARC_OPCODE_ARC64, LOAD, NONE, { RAD, BRAKET, XIMM, RC, BRAKETdup }, { C_AS_128 }}, +{ "lddl", 0x26F27000, 0xFFFE7000, ARC_OPCODE_ARC64, LOAD, NONE, { RAD, BRAKET, LIMM, RC, BRAKETdup }, { C_AS_128 }}, + + +/* ldlZZ_L<.aa> a,b 00010bbb000000000BBB1aa001AAAAAA. */ +{ "ldl", 0x10000840, 0xF8FF89C0, ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, RB, BRAKETdup }, { C_ZZ_L, C_AA21 }}, + +/* ldlZZ_L<.aa> 0,b 00010bbb000000000BBB1aa001111110. */ +{ "ldl", 0x1000087E, 0xF8FF89FF, ARC_OPCODE_ARC64, LOAD, NONE, { ZA, BRAKET, RB, BRAKETdup }, { C_ZZ_L, C_AA21 }}, + +/* ldlZZ_L<.aa> a,b,c 00100bbbaa1100011BBBCCCCCCAAAAAA. */ +{ "ldl", 0x20318000, 0xF83F8000, ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, RB, RC, BRAKETdup }, { C_ZZ_L, C_AA8 }}, + +/* ldlZZ_L<.aa> 0,b,c 00100bbbaa1100011BBBCCCCCC111110. */ +{ "ldl", 0x2031803E, 0xF83F803F, ARC_OPCODE_ARC64, LOAD, NONE, { ZA, BRAKET, RB, RC, BRAKETdup }, { C_ZZ_L, C_AA8 }}, + +/* ldlZZ_L<.aa> a,b,s9 00010bbbssssssssSBBB1aa001AAAAAA. */ +{ "ldl", 0x10000840, 0xF80009C0, ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, RB, SIMM9_8, BRAKETdup }, { C_ZZ_L, C_AA21 }}, + +/* ldlZZ_L<.aa> 0,b,s9 00010bbbssssssssSBBB1aa001111110. */ +{ "ldl", 0x1000087E, 0xF80009FF, ARC_OPCODE_ARC64, LOAD, NONE, { ZA, BRAKET, RB, SIMM9_8, BRAKETdup }, { C_ZZ_L, C_AA21 }}, + +/* ldlZZ_L 0,limm 00010110000000000111100001111110. */ +{ "ldl", 0x1600787E, 0xFFFFFFFF, ARC_OPCODE_ARC64, LOAD, NONE, { ZA, BRAKET, LIMM, BRAKETdup }, { C_ZZ_L }}, + +/* ldlZZ_L a,limm 00010110000000000111100001AAAAAA. */ +{ "ldl", 0x16007840, 0xFFFFFFC0, ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, LIMM, BRAKETdup }, { C_ZZ_L }}, + +/* ldlZZ_L<.aa> a,b,ximm 00100bbbaa1100011BBB111100AAAAAA. */ +{ "ldl", 0x20318F00, 0xF83F8FC0, ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, RB, XIMM, BRAKETdup }, { C_ZZ_L, C_AA8 }}, + +/* ldlZZ_L<.aa> a,b,limm 00100bbbaa1100011BBB111110AAAAAA. */ +{ "ldl", 0x20318F80, 0xF83F8FC0, ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, RB, LIMM, BRAKETdup }, { C_ZZ_L, C_AA8 }}, + +/* ldlZZ_L<.aa> 0,b,limm 00100bbbaa1100011BBB111110111110. */ +{ "ldl", 0x20318FBE, 0xF83F8FFF, ARC_OPCODE_ARC64, LOAD, NONE, { ZA, BRAKET, RB, LIMM, BRAKETdup }, { C_ZZ_L, C_AA8 }}, + +/* ldlZZ_L 0,limm,c 00100110001100011111CCCCCC111110. */ +{ "ldl", 0x2631F03E, 0xFFFFF03F, ARC_OPCODE_ARC64, LOAD, NONE, { ZA, BRAKET, LIMM, RC, BRAKETdup }, { C_ZZ_L }}, + +/* ldlZZ_L<.aa> a,ximm,c 00100100aa1100011111CCCCCCAAAAAA. */ +{ "ldl", 0x2431F000, 0xFF3FF000, ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, XIMM, RC, BRAKETdup }, { C_ZZ_L , C_AA8 }}, + +/* ldlZZ_L a,limm,c 00100110aa1100011111CCCCCCAAAAAA. */ +{ "ldl", 0x2631F000, 0xFF3FF000, ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, LO32, RC, BRAKETdup }, { C_ZZ_L, C_AA8 }}, + +/* ldlZZ_L<.aa> a,limm,s9 00010110ssssssssS1111aa001AAAAAA. */ +{ "ldl", 0x16007840, 0xFF0079C0, ARC_OPCODE_ARC64, LOAD, NONE, { RA_CHK, BRAKET, LO32, SIMM9_8, BRAKETdup }, { C_ZZ_L, C_AA21 }}, + +/* ldlZZ_L<.aa> 0,limm,s9 00010110ssssssssS1111aa001111110. */ +{ "ldl", 0x1600787E, 0xFF0079FF, ARC_OPCODE_ARC64, LOAD, NONE, { ZA, BRAKET, LIMM, SIMM9_8, BRAKETdup }, { C_ZZ_L, C_AA21 }}, + +/* ldb_sZZ_B a,b,c 01100bbbccc01aaa. */ +{ "ldb_s", 0x00006008, 0x0000F818,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_S, BRAKET, RB_S, RC_S, BRAKETdup }, { C_ZZ_B }}, + +/* ldb_sZZ_B c,b,u5 10001bbbcccuuuuu. */ +{ "ldb_s", 0x00008800, 0x0000F800,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RC_S, BRAKET, RB_S, UIMM5_11_S, BRAKETdup }, { C_ZZ_B }}, + +/* ldb_sZZ_B b,SP,u7 11000bbb001uuuuu. */ +{ "ldb_s", 0x0000C020, 0x0000F8E0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RB_S, BRAKET, SP_S, UIMM7_A32_11_S, BRAKETdup }, { C_ZZ_B }}, + +/* ldb_sZZ_B R0,GP,s9 1100101sssssssss. */ +{ "ldb_s", 0x0000CA00, 0x0000FE00,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { R0_S, BRAKET, GP_S, SIMM9_7_S, BRAKETdup }, { C_ZZ_B }}, + +/* ldh_sZZ_H a,b,c 01100bbbccc10aaa. */ +{ "ldh_s", 0x00006010, 0x0000F818,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_S, BRAKET, RB_S, RC_S, BRAKETdup }, { C_ZZ_H }}, + +/* ldh_sZZ_H c,b,u6 10010bbbcccuuuuu. */ +{ "ldh_s", 0x00009000, 0x0000F800,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RC_S, BRAKET, RB_S, UIMM6_A16_11_S, BRAKETdup }, { C_ZZ_H }}, + +/* ldh_sZZ_H.X c,b,u6 10011bbbcccuuuuu. */ +{ "ldh_s", 0x00009800, 0x0000F800,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RC_S, BRAKET, RB_S, UIMM6_A16_11_S, BRAKETdup }, { C_ZZ_H, C_XHARD }}, + +/* ldh_sZZ_H R0,GP,s10 1100110sssssssss. */ +{ "ldh_s", 0x0000CC00, 0x0000FE00,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { R0_S, BRAKET, GP_S, SIMM10_A16_7_Sbis, BRAKETdup }, { C_ZZ_H }}, + +/* ld_s a,b,c 01100bbbccc00aaa. */ +{ "ld_s", 0x00006000, 0x0000F818,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RA_S, BRAKET, RB_S, RC_S, BRAKETdup }, { 0 }}, + +/* ld_s.AS a,b,c 01001bbbccc00aaa. */ +{ "ld_s", 0x00004800, 0x0000F818,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, CD2, { RA_S, BRAKET, RB_S, RC_S, BRAKETdup }, { C_AS }}, + +/* ld_s b,SP,u7 11000bbb000uuuuu. */ +{ "ld_s", 0x0000C000, 0x0000F8E0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RB_S, BRAKET, SP_S, UIMM7_A32_11_S, BRAKETdup }, { 0 }}, + +/* ld_s c,b,u7 10000bbbcccuuuuu. */ +{ "ld_s", 0x00008000, 0x0000F800,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RC_S, BRAKET, RB_S, UIMM7_A32_11_S, BRAKETdup }, { 0 }}, + +/* ld_s b,PCL,u10 11010bbbuuuuuuuu. */ +{ "ld_s", 0x0000D000, 0x0000F800,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { RB_S, BRAKET, PCL_S, UIMM10_A32_8_S, BRAKETdup }, { 0 }}, + +/* ld_s R0,GP,s11 1100100sssssssss. */ +{ "ld_s", 0x0000C800, 0x0000FE00,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, NONE, { R0_S, BRAKET, GP_S, SIMM11_A32_7_S, BRAKETdup }, { 0 }}, + +/* ld_s R1,GP,s11 01010SSSSSS00sss. */ +{ "ld_s", 0x00005000, 0x0000F818,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOAD, CD2, { R1_S, BRAKET, GP_S, SIMM11_A32_13_S, BRAKETdup }, { 0 }}, + +/* llock<.di> b,c 00100bbb00101111DBBBCCCCCC010000. */ +{ "llock", 0x202F0010, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LLOCK, NONE, { RB, BRAKET, RC, BRAKETdup }, { C_DI16 }}, + +/* llock<.di> 0,c 0010011000101111D111CCCCCC010000. */ +{ "llock", 0x262F7010, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LLOCK, NONE, { ZA, BRAKET, RC, BRAKETdup }, { C_DI16 }}, + +/* llock<.di> b,u6 00100bbb01101111DBBBuuuuuu010000. */ +{ "llock", 0x206F0010, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LLOCK, NONE, { RB, BRAKET, UIMM6_20, BRAKETdup }, { C_DI16 }}, + +/* llock<.di> 0,u6 0010011001101111D111uuuuuu010000. */ +{ "llock", 0x266F7010, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LLOCK, NONE, { ZA, BRAKET, UIMM6_20, BRAKETdup }, { C_DI16 }}, + +/* llock<.di> b,limm 00100bbb00101111DBBB111110010000. */ +{ "llock", 0x202F0F90, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LLOCK, NONE, { RB, BRAKET, LIMM, BRAKETdup }, { C_DI16 }}, + +/* llock<.di> 0,limm 0010011000101111D111111110010000. */ +{ "llock", 0x262F7F90, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LLOCK, NONE, { ZA, BRAKET, LIMM, BRAKETdup }, { C_DI16 }}, + +/* llockl<.aq> RB,RC 01011bbb00101111FBBBcccccc010000. */ +{ "llockl", 0x582F0010, 0xF8FF003F, ARC_OPCODE_ARC64, LLOCK, NONE, { RB, BRAKET, RC, BRAKETdup }, { C_AQ }}, + +/* lr b,c 00100bbb00101010RBBBCCCCCCRRRRRR. */ +{ "lr", 0x202A0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, AUXREG, NONE, { RB_CHK, BRAKET, RC, BRAKETdup }, { 0 }}, + +/* lr 0,c 0010011000101010R111CCCCCCRRRRRR. */ +{ "lr", 0x262A7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, AUXREG, NONE, { ZA, BRAKET, RC, BRAKETdup }, { 0 }}, + +/* lr b,u6 00100bbb01101010RBBBuuuuuu000000. */ +{ "lr", 0x206A0000, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, AUXREG, NONE, { RB_CHK, BRAKET, UIMM6_20, BRAKETdup }, { 0 }}, + +/* lr 0,u6 0010011001101010R111uuuuuu000000. */ +{ "lr", 0x266A7000, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, AUXREG, NONE, { ZA, BRAKET, UIMM6_20, BRAKETdup }, { 0 }}, + +/* lr b,s12 00100bbb10101010RBBBssssssSSSSSS. */ +{ "lr", 0x20AA0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, AUXREG, NONE, { RB_CHK, BRAKET, SIMM12_20, BRAKETdup }, { 0 }}, + +/* lr 0,s12 0010011010101010R111ssssssSSSSSS. */ +{ "lr", 0x26AA7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, AUXREG, NONE, { ZA, BRAKET, SIMM12_20, BRAKETdup }, { 0 }}, + +/* lr b,limm 00100bbb00101010RBBB111110RRRRRR. */ +{ "lr", 0x202A0F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, AUXREG, NONE, { RB_CHK, BRAKET, LIMM, BRAKETdup }, { 0 }}, + +/* lr 0,limm 0010011000101010R111111110RRRRRR. */ +{ "lr", 0x262A7F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, AUXREG, NONE, { ZA, BRAKET, LIMM, BRAKETdup }, { 0 }}, + +/* lrl RB,RC 01011bbb001010100BBBccccccRRRRRR. */ +{ "lrl", 0x582A0000, 0xF8FF8000, ARC_OPCODE_ARC64, AUXREG, NONE, { RB_CHK, BRAKET, RC, BRAKETdup }, { 0 }}, + +/* lrl RB,u6 01011bbb011010100BBBuuuuuuRRRRRR. */ +{ "lrl", 0x586A0000, 0xF8FF8000, ARC_OPCODE_ARC64, AUXREG, NONE, { RB_CHK, BRAKET, UIMM6_20, BRAKETdup }, { 0 }}, + +/* lrl RB,s12 01011bbb101010100BBBssssssSSSSSS. */ +{ "lrl", 0x58AA0000, 0xF8FF8000, ARC_OPCODE_ARC64, AUXREG, NONE, { RB_CHK, BRAKET, SIMM12_20, BRAKETdup }, { 0 }}, + +/* lrl RB,ximm 01011bbb001010100BBB111100RRRRRR. */ +{ "lrl", 0x582A0F00, 0xF8FF8FC0, ARC_OPCODE_ARC64, AUXREG, NONE, { RB_CHK, BRAKET, XIMM, BRAKETdup }, { 0 }}, + +/* lrl RB,limm 01011bbb001010100BBB111110RRRRRR. */ +{ "lrl", 0x582A0F80, 0xF8FF8FC0, ARC_OPCODE_ARC64, AUXREG, NONE, { RB_CHK, BRAKET, LIMM, BRAKETdup }, { 0 }}, + +/* lsl16<.f> b,c 00101bbb00101111FBBBCCCCCC001010. */ +{ "lsl16", 0x282F000A, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SWAP, { RB, RC }, { C_F }}, + +/* lsl16<.f> 0,c 0010111000101111F111CCCCCC001010. */ +{ "lsl16", 0x2E2F700A, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SWAP, { ZA, RC }, { C_F }}, + +/* lsl16<.f> b,u6 00101bbb01101111FBBBuuuuuu001010. */ +{ "lsl16", 0x286F000A, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SWAP, { RB, UIMM6_20 }, { C_F }}, + +/* lsl16<.f> 0,u6 0010111001101111F111uuuuuu001010. */ +{ "lsl16", 0x2E6F700A, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SWAP, { ZA, UIMM6_20 }, { C_F }}, + +/* lsl16<.f> b,limm 00101bbb00101111FBBB111110001010. */ +{ "lsl16", 0x282F0F8A, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SWAP, { RB, LIMM }, { C_F }}, + +/* lsl16<.f> 0,limm 0010111000101111F111111110001010. */ +{ "lsl16", 0x2E2F7F8A, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SWAP, { ZA, LIMM }, { C_F }}, + +/* lsl8<.f> b,c 00101bbb00101111FBBBCCCCCC001111. */ +{ "lsl8", 0x282F000F, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT1, { RB, RC }, { C_F }}, + +/* lsl8<.f> 0,c 0010111000101111F111CCCCCC001111. */ +{ "lsl8", 0x2E2F700F, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT1, { ZA, RC }, { C_F }}, + +/* lsl8<.f> b,u6 00101bbb01101111FBBBuuuuuu001111. */ +{ "lsl8", 0x286F000F, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT1, { RB, UIMM6_20 }, { C_F }}, + +/* lsl8<.f> 0,u6 0010111001101111F111uuuuuu001111. */ +{ "lsl8", 0x2E6F700F, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT1, { ZA, UIMM6_20 }, { C_F }}, + +/* lsl8<.f> b,limm 00101bbb00101111FBBB111110001111. */ +{ "lsl8", 0x282F0F8F, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT1, { RB, LIMM }, { C_F }}, + +/* lsl8<.f> 0,limm 0010111000101111F111111110001111. */ +{ "lsl8", 0x2E2F7F8F, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT1, { ZA, LIMM }, { C_F }}, + +/* lsr<.f> b,c 00100bbb00101111FBBBCCCCCC000010. */ +{ "lsr", 0x202F0002, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RC }, { C_F }}, + +/* lsr<.f> 0,c 0010011000101111F111CCCCCC000010. */ +{ "lsr", 0x262F7002, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RC }, { C_F }}, + +/* lsr<.f> a,b,c 00101bbb00000001FBBBCCCCCCAAAAAA. */ +{ "lsr", 0x28010000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RA, RB, RC }, { C_F }}, + +/* lsr<.f> 0,b,c 00101bbb00000001FBBBCCCCCC111110. */ +{ "lsr", 0x2801003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, RB, RC }, { C_F }}, + +/* lsr<.f><.cc> b,b,c 00101bbb11000001FBBBCCCCCC0QQQQQ. */ +{ "lsr", 0x28C10000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* lsr<.f> b,u6 00100bbb01101111FBBBuuuuuu000010. */ +{ "lsr", 0x206F0002, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, UIMM6_20 }, { C_F }}, + +/* lsr<.f> 0,u6 0010011001101111F111uuuuuu000010. */ +{ "lsr", 0x266F7002, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, UIMM6_20 }, { C_F }}, + +/* lsr<.f> a,b,u6 00101bbb01000001FBBBuuuuuuAAAAAA. */ +{ "lsr", 0x28410000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RA, RB, UIMM6_20 }, { C_F }}, + +/* lsr<.f> 0,b,u6 00101bbb01000001FBBBuuuuuu111110. */ +{ "lsr", 0x2841003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* lsr<.f><.cc> b,b,u6 00101bbb11000001FBBBuuuuuu1QQQQQ. */ +{ "lsr", 0x28C10020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* lsr<.f> b,b,s12 00101bbb10000001FBBBssssssSSSSSS. */ +{ "lsr", 0x28810000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* lsr<.f> b,limm 00100bbb00101111FBBB111110000010. */ +{ "lsr", 0x202F0F82, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, LIMM }, { C_F }}, + +/* lsr<.f> 0,limm 0010011000101111F111111110000010. */ +{ "lsr", 0x262F7F82, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM }, { C_F }}, + +/* lsr<.f> a,limm,c 0010111000000001F111CCCCCCAAAAAA. */ +{ "lsr", 0x2E017000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RA, LIMM, RC }, { C_F }}, + +/* lsr<.f> a,b,limm 00101bbb00000001FBBB111110AAAAAA. */ +{ "lsr", 0x28010F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RA, RB, LIMM }, { C_F }}, + +/* lsr<.f> 0,limm,c 0010111000000001F111CCCCCC111110. */ +{ "lsr", 0x2E01703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, LIMM, RC }, { C_F }}, + +/* lsr<.f> 0,b,limm 00101bbb00000001FBBB111110111110. */ +{ "lsr", 0x28010FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, RB, LIMM }, { C_F }}, + +/* lsr<.f><.cc> b,b,limm 00101bbb11000001FBBB1111100QQQQQ. */ +{ "lsr", 0x28C10F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* lsr<.f><.cc> 0,limm,c 0010111011000001F111CCCCCC0QQQQQ. */ +{ "lsr", 0x2EC17000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* lsr<.f> a,limm,u6 0010111001000001F111uuuuuuAAAAAA. */ +{ "lsr", 0x2E417000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* lsr<.f> 0,limm,u6 0010111001000001F111uuuuuu111110. */ +{ "lsr", 0x2E41703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* lsr<.f><.cc> 0,limm,u6 0010111011000001F111uuuuuu1QQQQQ. */ +{ "lsr", 0x2EC17020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* lsr<.f> 0,limm,s12 0010111010000001F111ssssssSSSSSS. */ +{ "lsr", 0x2E817000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* lsr<.f> a,limm,limm 0010111000000001F111111110AAAAAA. */ +{ "lsr", 0x2E017F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RA, LIMM, LIMMdup }, { C_F }}, + +/* lsr<.f> 0,limm,limm 0010111000000001F111111110111110. */ +{ "lsr", 0x2E017FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* lsr<.f><.cc> 0,limm,limm 0010111011000001F1111111100QQQQQ. */ +{ "lsr", 0x2EC17F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* lsr16<.f> b,c 00101bbb00101111FBBBCCCCCC001011. */ +{ "lsr16", 0x282F000B, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SWAP, { RB, RC }, { C_F }}, + +/* lsr16<.f> 0,c 0010111000101111F111CCCCCC001011. */ +{ "lsr16", 0x2E2F700B, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SWAP, { ZA, RC }, { C_F }}, + +/* lsr16<.f> b,u6 00101bbb01101111FBBBuuuuuu001011. */ +{ "lsr16", 0x286F000B, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SWAP, { RB, UIMM6_20 }, { C_F }}, + +/* lsr16<.f> 0,u6 0010111001101111F111uuuuuu001011. */ +{ "lsr16", 0x2E6F700B, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SWAP, { ZA, UIMM6_20 }, { C_F }}, + +/* lsr16<.f> b,limm 00101bbb00101111FBBB111110001011. */ +{ "lsr16", 0x282F0F8B, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SWAP, { RB, LIMM }, { C_F }}, + +/* lsr16<.f> 0,limm 0010111000101111F111111110001011. */ +{ "lsr16", 0x2E2F7F8B, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SWAP, { ZA, LIMM }, { C_F }}, + +/* lsr8<.f> b,c 00101bbb00101111FBBBCCCCCC001110. */ +{ "lsr8", 0x282F000E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT1, { RB, RC }, { C_F }}, + +/* lsr8<.f> 0,c 0010111000101111F111CCCCCC001110. */ +{ "lsr8", 0x2E2F700E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT1, { ZA, RC }, { C_F }}, + +/* lsr8<.f> b,u6 00101bbb01101111FBBBuuuuuu001110. */ +{ "lsr8", 0x286F000E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT1, { RB, UIMM6_20 }, { C_F }}, + +/* lsr8<.f> 0,u6 0010111001101111F111uuuuuu001110. */ +{ "lsr8", 0x2E6F700E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT1, { ZA, UIMM6_20 }, { C_F }}, + +/* lsr8<.f> b,limm 00101bbb00101111FBBB111110001110. */ +{ "lsr8", 0x282F0F8E, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT1, { RB, LIMM }, { C_F }}, + +/* lsr8<.f> 0,limm 0010111000101111F111111110001110. */ +{ "lsr8", 0x2E2F7F8E, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT1, { ZA, LIMM }, { C_F }}, + +/* lsrl<.f> RA,RB,RC 01011bbb00100001FBBBccccccaaaaaa. */ +{ "lsrl", 0x58210000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* lsrl<.f> 0,RB,RC 01011bbb00100001FBBBcccccc111110. */ +{ "lsrl", 0x5821003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* lsrl<.f><.cc> RB,RB,RC 01011bbb11100001FBBBcccccc0QQQQQ. */ +{ "lsrl", 0x58E10000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* lsrl<.f> RA,RB,u6 01011bbb01100001FBBBuuuuuuaaaaaa. */ +{ "lsrl", 0x58610000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* lsrl<.f> 0,RB,u6 01011bbb01100001FBBBuuuuuu111110. */ +{ "lsrl", 0x5861003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* lsrl<.f><.cc> RB,RB,u6 01011bbb11100001FBBBuuuuuu1QQQQQ. */ +{ "lsrl", 0x58E10020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* lsrl<.f> RB,RB,s12 01011bbb10100001FBBBssssssSSSSSS. */ +{ "lsrl", 0x58A10000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* lsrl<.f> RA,ximm,RC 0101110000100001F111ccccccaaaaaa. */ +{ "lsrl", 0x5C217000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* lsrl<.f> RA,RB,ximm 01011bbb00100001FBBB111100aaaaaa. */ +{ "lsrl", 0x58210F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* lsrl<.f> 0,ximm,RC 0101110000100001F111cccccc111110. */ +{ "lsrl", 0x5C21703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* lsrl<.f> 0,RB,ximm 01011bbb00100001FBBB111100111110. */ +{ "lsrl", 0x58210F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* lsrl<.f><.cc> 0,ximm,RC 0101110011100001F111cccccc0QQQQQ. */ +{ "lsrl", 0x5CE17000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* lsrl<.f><.cc> RB,RB,ximm 01011bbb11100001FBBB1111000QQQQQ. */ +{ "lsrl", 0x58E10F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* lsrl<.f> RA,ximm,u6 0101110001100001F111uuuuuuaaaaaa. */ +{ "lsrl", 0x5C617000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* lsrl<.f> 0,ximm,u6 0101110001100001F111uuuuuu111110. */ +{ "lsrl", 0x5C61703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* lsrl<.f><.cc> 0,ximm,u6 0101110011100001F111uuuuuu1QQQQQ. */ +{ "lsrl", 0x5CE17020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* lsrl<.f> RA,limm,RC 0101111000100001F111ccccccaaaaaa. */ +{ "lsrl", 0x5E217000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* lsrl<.f> RA,RB,limm 01011bbb00100001FBBB111110aaaaaa. */ +{ "lsrl", 0x58210F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* lsrl<.f> 0,limm,RC 0101111000100001F111cccccc111110. */ +{ "lsrl", 0x5E21703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* lsrl<.f> 0,RB,limm 01011bbb00100001FBBB111110111110. */ +{ "lsrl", 0x58210FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* lsrl<.f><.cc> 0,limm,RC 0101111011100001F111cccccc0QQQQQ. */ +{ "lsrl", 0x5EE17000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* lsrl<.f><.cc> RB,RB,limm 01011bbb11100001FBBB1111100QQQQQ. */ +{ "lsrl", 0x58E10F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* lsrl<.f> RA,limm,u6 0101111001100001F111uuuuuuaaaaaa. */ +{ "lsrl", 0x5E617000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* lsrl<.f> 0,limm,u6 0101111001100001F111uuuuuu111110. */ +{ "lsrl", 0x5E61703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* lsrl<.f><.cc> 0,limm,u6 0101111011100001F111uuuuuu1QQQQQ. */ +{ "lsrl", 0x5EE17020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* lsrl<.f> 0,ximm,s12 0101110010100001F111ssssssSSSSSS. */ +{ "lsrl", 0x5CA17000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* lsrl<.f> 0,limm,s12 0101111010100001F111ssssssSSSSSS. */ +{ "lsrl", 0x5EA17000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* lsrl<.f> RA,ximm,ximm 0101110000100001F111111100aaaaaa. */ +{ "lsrl", 0x5C217F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* lsrl<.f> 0,ximm,ximm 0101110000100001F111111100111110. */ +{ "lsrl", 0x5C217F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* lsrl<.f><.cc> 0,ximm,ximm 0101110011100001F1111111000QQQQQ. */ +{ "lsrl", 0x5CE17F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* lsrl<.f> RA,limm,limm 0101111000100001F111111110aaaaaa. */ +{ "lsrl", 0x5E217F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* lsrl<.f> 0,limm,limm 0101111000100001F111111110111110. */ +{ "lsrl", 0x5E217FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* lsrl<.f><.cc> 0,limm,limm 0101111011100001F1111111100QQQQQ. */ +{ "lsrl", 0x5EE17F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* lsr_s b,c 01111bbbccc11101. */ +{ "lsr_s", 0x0000781D, 0x0000F81F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB_S, RC_S }, { 0 }}, + +/* lsr_s b,b,c 01111bbbccc11001. */ +{ "lsr_s", 0x00007819, 0x0000F81F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RB_S, RB_Sdup, RC_S }, { 0 }}, + +/* lsr_s b,b,u5 10111bbb001uuuuu. */ +{ "lsr_s", 0x0000B820, 0x0000F8E0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RB_S, RB_Sdup, UIMM5_11_S }, { 0 }}, + +/* lstl<.f> RB,RC 01011bbb00101111FBBBcccccc000010. */ +{ "lstl", 0x582F0002, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { C_F }}, + +/* lstl<.f> 0,RC 0101111000101111F111cccccc000010. */ +{ "lstl", 0x5E2F7002, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RC }, { C_F }}, + +/* lstl<.f> RB,u6 01011bbb01101111FBBBuuuuuu000010. */ +{ "lstl", 0x586F0002, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { C_F }}, + +/* lstl<.f> 0,u6 0101111001101111F111uuuuuu000010. */ +{ "lstl", 0x5E6F7002, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, UIMM6_20 }, { C_F }}, + +/* lstl<.f> RB,ximm 01011bbb00101111FBBB111100000010. */ +{ "lstl", 0x582F0F02, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, XIMM }, { C_F }}, + +/* lstl<.f> 0,ximm 0101111000101111F111111100000010. */ +{ "lstl", 0x5E2F7F02, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM }, { C_F }}, + +/* lstl<.f> RB,limm 01011bbb00101111FBBB111110000010. */ +{ "lstl", 0x582F0F82, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM }, { C_F }}, + +/* lstl<.f> 0,limm 0101111000101111F111111110000010. */ +{ "lstl", 0x5E2F7F82, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM }, { C_F }}, + +/* mac<.f> a,b,c 00101bbb00001110FBBBCCCCCCAAAAAA. */ +{ "mac", 0x280E0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, RB, RC }, { C_F }}, + +/* mac<.f> 0,b,c 00101bbb00001110FBBBCCCCCC111110. */ +{ "mac", 0x280E003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, RB, RC }, { C_F }}, + +/* mac<.f><.cc> b,b,c 00101bbb11001110FBBBCCCCCC0QQQQQ. */ +{ "mac", 0x28CE0000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, RC }, { C_F, C_CC }}, + +/* mac<.f> a,b,u6 00101bbb01001110FBBBuuuuuuAAAAAA. */ +{ "mac", 0x284E0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, RB, UIMM6_20 }, { C_F }}, + +/* mac<.f> 0,b,u6 00101bbb01001110FBBBuuuuuu111110. */ +{ "mac", 0x284E003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* mac<.f><.cc> b,b,u6 00101bbb11001110FBBBuuuuuu1QQQQQ. */ +{ "mac", 0x28CE0020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* mac<.f> b,b,s12 00101bbb10001110FBBBssssssSSSSSS. */ +{ "mac", 0x288E0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, SIMM12_20 }, { C_F }}, + +/* mac<.f> a,limm,c 0010111000001110F111CCCCCCAAAAAA. */ +{ "mac", 0x2E0E7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, LIMM, RC }, { C_F }}, + +/* mac<.f> a,b,limm 00101bbb00001110FBBB111110AAAAAA. */ +{ "mac", 0x280E0F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, RB, LIMM }, { C_F }}, + +/* mac<.f> 0,limm,c 0010111000001110F111CCCCCC111110. */ +{ "mac", 0x2E0E703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, RC }, { C_F }}, + +/* mac<.f> 0,b,limm 00101bbb00001110FBBB111110111110. */ +{ "mac", 0x280E0FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, RB, LIMM }, { C_F }}, + +/* mac<.f><.cc> b,b,limm 00101bbb11001110FBBB1111100QQQQQ. */ +{ "mac", 0x28CE0F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, LIMM }, { C_F, C_CC }}, + +/* mac<.f><.cc> 0,limm,c 0010111011001110F111CCCCCC0QQQQQ. */ +{ "mac", 0x2ECE7000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* mac<.f> a,limm,u6 0010111001001110F111uuuuuuAAAAAA. */ +{ "mac", 0x2E4E7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, LIMM, UIMM6_20 }, { C_F }}, + +/* mac<.f> 0,limm,u6 0010111001001110F111uuuuuu111110. */ +{ "mac", 0x2E4E703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* mac<.f><.cc> 0,limm,u6 0010111011001110F111uuuuuu1QQQQQ. */ +{ "mac", 0x2ECE7020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* mac<.f> 0,limm,s12 0010111010001110F111ssssssSSSSSS. */ +{ "mac", 0x2E8E7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* mac<.f> a,limm,limm 0010111000001110F111111110AAAAAA. */ +{ "mac", 0x2E0E7F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, LIMM, LIMMdup }, { C_F }}, + +/* mac<.f> 0,limm,limm 0010111000001110F111111110111110. */ +{ "mac", 0x2E0E7FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* mac<.f><.cc> 0,limm,limm 0010111011001110F1111111100QQQQQ. */ +{ "mac", 0x2ECE7F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* macd<.f> a,b,c 00101bbb00011010FBBBCCCCCCAAAAAA. */ +{ "macd", 0x281A0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RA_CHK, RB, RC }, { C_F }}, + +/* macd<.f> 0,b,c 00101bbb00011010FBBBCCCCCC111110. */ +{ "macd", 0x281A003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, RB, RC }, { C_F }}, + +/* macd<.f><.cc> b,b,c 00101bbb11011010FBBBCCCCCC0QQQQQ. */ +{ "macd", 0x28DA0000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RB_CHK, RBdup, RC }, { C_F, C_CC }}, + +/* macd<.f> a,b,u6 00101bbb01011010FBBBuuuuuuAAAAAA. */ +{ "macd", 0x285A0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RA_CHK, RB, UIMM6_20 }, { C_F }}, + +/* macd<.f> 0,b,u6 00101bbb01011010FBBBuuuuuu111110. */ +{ "macd", 0x285A003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* macd<.f><.cc> b,b,u6 00101bbb11011010FBBBuuuuuu1QQQQQ. */ +{ "macd", 0x28DA0020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RB_CHK, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* macd<.f> b,b,s12 00101bbb10011010FBBBssssssSSSSSS. */ +{ "macd", 0x289A0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RB_CHK, RBdup, SIMM12_20 }, { C_F }}, + +/* macd<.f> a,limm,c 0010111000011010F111CCCCCCAAAAAA. */ +{ "macd", 0x2E1A7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RA_CHK, LIMM, RC }, { C_F }}, + +/* macd<.f> a,b,limm 00101bbb00011010FBBB111110AAAAAA. */ +{ "macd", 0x281A0F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RA_CHK, RB, LIMM }, { C_F }}, + +/* macd<.f> 0,limm,c 0010111000011010F111CCCCCC111110. */ +{ "macd", 0x2E1A703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, RC }, { C_F }}, + +/* macd<.f> 0,b,limm 00101bbb00011010FBBB111110111110. */ +{ "macd", 0x281A0FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, RB, LIMM }, { C_F }}, + +/* macd<.f><.cc> b,b,limm 00101bbb11011010FBBB1111100QQQQQ. */ +{ "macd", 0x28DA0F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RB_CHK, RBdup, LIMM }, { C_F, C_CC }}, + +/* macd<.f><.cc> 0,limm,c 0010111011011010F111CCCCCC0QQQQQ. */ +{ "macd", 0x2EDA7000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* macd<.f> a,limm,u6 0010111001011010F111uuuuuuAAAAAA. */ +{ "macd", 0x2E5A7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RA_CHK, LIMM, UIMM6_20 }, { C_F }}, + +/* macd<.f> 0,limm,u6 0010111001011010F111uuuuuu111110. */ +{ "macd", 0x2E5A703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* macd<.f><.cc> 0,limm,u6 0010111011011010F111uuuuuu1QQQQQ. */ +{ "macd", 0x2EDA7020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* macd<.f> 0,limm,s12 0010111010011010F111ssssssSSSSSS. */ +{ "macd", 0x2E9A7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* macd<.f> a,limm,limm 0010111000011010F111111110AAAAAA. */ +{ "macd", 0x2E1A7F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RA_CHK, LIMM, LIMMdup }, { C_F }}, + +/* macd<.f> 0,limm,limm 0010111000011010F111111110111110. */ +{ "macd", 0x2E1A7FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* macd<.f><.cc> 0,limm,limm 0010111011011010F1111111100QQQQQ. */ +{ "macd", 0x2EDA7F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* macdu<.f> a,b,c 00101bbb00011011FBBBCCCCCCAAAAAA. */ +{ "macdu", 0x281B0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RA_CHK, RB, RC }, { C_F }}, + +/* macdu<.f> 0,b,c 00101bbb00011011FBBBCCCCCC111110. */ +{ "macdu", 0x281B003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, RB, RC }, { C_F }}, + +/* macdu<.f><.cc> b,b,c 00101bbb11011011FBBBCCCCCC0QQQQQ. */ +{ "macdu", 0x28DB0000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RB_CHK, RBdup, RC }, { C_F, C_CC }}, + +/* macdu<.f> a,b,u6 00101bbb01011011FBBBuuuuuuAAAAAA. */ +{ "macdu", 0x285B0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RA_CHK, RB, UIMM6_20 }, { C_F }}, + +/* macdu<.f> 0,b,u6 00101bbb01011011FBBBuuuuuu111110. */ +{ "macdu", 0x285B003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* macdu<.f><.cc> b,b,u6 00101bbb11011011FBBBuuuuuu1QQQQQ. */ +{ "macdu", 0x28DB0020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RB_CHK, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* macdu<.f> b,b,s12 00101bbb10011011FBBBssssssSSSSSS. */ +{ "macdu", 0x289B0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RB_CHK, RBdup, SIMM12_20 }, { C_F }}, + +/* macdu<.f> a,limm,c 0010111000011011F111CCCCCCAAAAAA. */ +{ "macdu", 0x2E1B7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RA_CHK, LIMM, RC }, { C_F }}, + +/* macdu<.f> a,b,limm 00101bbb00011011FBBB111110AAAAAA. */ +{ "macdu", 0x281B0F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RA_CHK, RB, LIMM }, { C_F }}, + +/* macdu<.f> 0,limm,c 0010111000011011F111CCCCCC111110. */ +{ "macdu", 0x2E1B703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, RC }, { C_F }}, + +/* macdu<.f> 0,b,limm 00101bbb00011011FBBB111110111110. */ +{ "macdu", 0x281B0FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, RB, LIMM }, { C_F }}, + +/* macdu<.f><.cc> b,b,limm 00101bbb11011011FBBB1111100QQQQQ. */ +{ "macdu", 0x28DB0F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RB_CHK, RBdup, LIMM }, { C_F, C_CC }}, + +/* macdu<.f><.cc> 0,limm,c 0010111011011011F111CCCCCC0QQQQQ. */ +{ "macdu", 0x2EDB7000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* macdu<.f> a,limm,u6 0010111001011011F111uuuuuuAAAAAA. */ +{ "macdu", 0x2E5B7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RA_CHK, LIMM, UIMM6_20 }, { C_F }}, + +/* macdu<.f> 0,limm,u6 0010111001011011F111uuuuuu111110. */ +{ "macdu", 0x2E5B703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* macdu<.f><.cc> 0,limm,u6 0010111011011011F111uuuuuu1QQQQQ. */ +{ "macdu", 0x2EDB7020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* macdu<.f> 0,limm,s12 0010111010011011F111ssssssSSSSSS. */ +{ "macdu", 0x2E9B7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* macdu<.f> a,limm,limm 0010111000011011F111111110AAAAAA. */ +{ "macdu", 0x2E1B7F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RA_CHK, LIMM, LIMMdup }, { C_F }}, + +/* macdu<.f> 0,limm,limm 0010111000011011F111111110111110. */ +{ "macdu", 0x2E1B7FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* macdu<.f><.cc> 0,limm,limm 0010111011011011F1111111100QQQQQ. */ +{ "macdu", 0x2EDB7F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* macu<.f> a,b,c 00101bbb00001111FBBBCCCCCCAAAAAA. */ +{ "macu", 0x280F0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, RB, RC }, { C_F }}, + +/* macu<.f> 0,b,c 00101bbb00001111FBBBCCCCCC111110. */ +{ "macu", 0x280F003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, RB, RC }, { C_F }}, + +/* macu<.f><.cc> b,b,c 00101bbb11001111FBBBCCCCCC0QQQQQ. */ +{ "macu", 0x28CF0000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, RC }, { C_F, C_CC }}, + +/* macu<.f> a,b,u6 00101bbb01001111FBBBuuuuuuAAAAAA. */ +{ "macu", 0x284F0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, RB, UIMM6_20 }, { C_F }}, + +/* macu<.f> 0,b,u6 00101bbb01001111FBBBuuuuuu111110. */ +{ "macu", 0x284F003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* macu<.f><.cc> b,b,u6 00101bbb11001111FBBBuuuuuu1QQQQQ. */ +{ "macu", 0x28CF0020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* macu<.f> b,b,s12 00101bbb10001111FBBBssssssSSSSSS. */ +{ "macu", 0x288F0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, SIMM12_20 }, { C_F }}, + +/* macu<.f> a,limm,c 0010111000001111F111CCCCCCAAAAAA. */ +{ "macu", 0x2E0F7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, LIMM, RC }, { C_F }}, + +/* macu<.f> a,b,limm 00101bbb00001111FBBB111110AAAAAA. */ +{ "macu", 0x280F0F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, RB, LIMM }, { C_F }}, + +/* macu<.f> 0,limm,c 0010111000001111F111CCCCCC111110. */ +{ "macu", 0x2E0F703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, RC }, { C_F }}, + +/* macu<.f> 0,b,limm 00101bbb00001111FBBB111110111110. */ +{ "macu", 0x280F0FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, RB, LIMM }, { C_F }}, + +/* macu<.f><.cc> b,b,limm 00101bbb11001111FBBB1111100QQQQQ. */ +{ "macu", 0x28CF0F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, LIMM }, { C_F, C_CC }}, + +/* macu<.f><.cc> 0,limm,c 0010111011001111F111CCCCCC0QQQQQ. */ +{ "macu", 0x2ECF7000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* macu<.f> a,limm,u6 0010111001001111F111uuuuuuAAAAAA. */ +{ "macu", 0x2E4F7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, LIMM, UIMM6_20 }, { C_F }}, + +/* macu<.f> 0,limm,u6 0010111001001111F111uuuuuu111110. */ +{ "macu", 0x2E4F703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* macu<.f><.cc> 0,limm,u6 0010111011001111F111uuuuuu1QQQQQ. */ +{ "macu", 0x2ECF7020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* macu<.f> 0,limm,s12 0010111010001111F111ssssssSSSSSS. */ +{ "macu", 0x2E8F7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* macu<.f> a,limm,limm 0010111000001111F111111110AAAAAA. */ +{ "macu", 0x2E0F7F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, LIMM, LIMMdup }, { C_F }}, + +/* macu<.f> 0,limm,limm 0010111000001111F111111110111110. */ +{ "macu", 0x2E0F7FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* macu<.f><.cc> 0,limm,limm 0010111011001111F1111111100QQQQQ. */ +{ "macu", 0x2ECF7F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* max<.f> a,b,c 00100bbb00001000FBBBCCCCCCAAAAAA. */ +{ "max", 0x20080000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* max<.f> 0,b,c 00100bbb00001000FBBBCCCCCC111110. */ +{ "max", 0x2008003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* max<.f><.cc> b,b,c 00100bbb11001000FBBBCCCCCC0QQQQQ. */ +{ "max", 0x20C80000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* max<.f> a,b,u6 00100bbb01001000FBBBuuuuuuAAAAAA. */ +{ "max", 0x20480000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* max<.f> 0,b,u6 00100bbb01001000FBBBuuuuuu111110. */ +{ "max", 0x2048003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* max<.f><.cc> b,b,u6 00100bbb11001000FBBBuuuuuu1QQQQQ. */ +{ "max", 0x20C80020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* max<.f> b,b,s12 00100bbb10001000FBBBssssssSSSSSS. */ +{ "max", 0x20880000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* max<.f> a,limm,c 0010011000001000F111CCCCCCAAAAAA. */ +{ "max", 0x26087000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* max<.f> a,b,limm 00100bbb00001000FBBB111110AAAAAA. */ +{ "max", 0x20080F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* max<.f> 0,limm,c 0010011000001000F111CCCCCC111110. */ +{ "max", 0x2608703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* max<.f> 0,b,limm 00100bbb00001000FBBB111110111110. */ +{ "max", 0x20080FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* max<.f><.cc> b,b,limm 00100bbb11001000FBBB1111100QQQQQ. */ +{ "max", 0x20C80F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* max<.f><.cc> 0,limm,c 0010011011001000F111CCCCCC0QQQQQ. */ +{ "max", 0x26C87000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* max<.f> a,limm,u6 0010011001001000F111uuuuuuAAAAAA. */ +{ "max", 0x26487000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* max<.f> 0,limm,u6 0010011001001000F111uuuuuu111110. */ +{ "max", 0x2648703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* max<.f><.cc> 0,limm,u6 0010011011001000F111uuuuuu1QQQQQ. */ +{ "max", 0x26C87020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* max<.f> 0,limm,s12 0010011010001000F111ssssssSSSSSS. */ +{ "max", 0x26887000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* max<.f> a,limm,limm 0010011000001000F111111110AAAAAA. */ +{ "max", 0x26087F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* max<.f> 0,limm,limm 0010011000001000F111111110111110. */ +{ "max", 0x26087FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* max<.f><.cc> 0,limm,limm 0010011011001000F1111111100QQQQQ. */ +{ "max", 0x26C87F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* maxl<.f> RA,RB,RC 01011bbb00001000FBBBccccccaaaaaa. */ +{ "maxl", 0x58080000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* maxl<.f> 0,RB,RC 01011bbb00001000FBBBcccccc111110. */ +{ "maxl", 0x5808003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* maxl<.f><.cc> RB,RB,RC 01011bbb11001000FBBBcccccc0QQQQQ. */ +{ "maxl", 0x58C80000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* maxl<.f> RA,RB,u6 01011bbb01001000FBBBuuuuuuaaaaaa. */ +{ "maxl", 0x58480000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* maxl<.f> 0,RB,u6 01011bbb01001000FBBBuuuuuu111110. */ +{ "maxl", 0x5848003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* maxl<.f><.cc> RB,RB,u6 01011bbb11001000FBBBuuuuuu1QQQQQ. */ +{ "maxl", 0x58C80020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* maxl<.f> RB,RB,s12 01011bbb10001000FBBBssssssSSSSSS. */ +{ "maxl", 0x58880000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* maxl<.f> RA,ximm,RC 0101110000001000F111ccccccaaaaaa. */ +{ "maxl", 0x5C087000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* maxl<.f> RA,RB,ximm 01011bbb00001000FBBB111100aaaaaa. */ +{ "maxl", 0x58080F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* maxl<.f> 0,ximm,RC 0101110000001000F111cccccc111110. */ +{ "maxl", 0x5C08703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* maxl<.f> 0,RB,ximm 01011bbb00001000FBBB111100111110. */ +{ "maxl", 0x58080F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* maxl<.f><.cc> 0,ximm,RC 0101110011001000F111cccccc0QQQQQ. */ +{ "maxl", 0x5CC87000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* maxl<.f><.cc> RB,RB,ximm 01011bbb11001000FBBB1111000QQQQQ. */ +{ "maxl", 0x58C80F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* maxl<.f> RA,ximm,u6 0101110001001000F111uuuuuuaaaaaa. */ +{ "maxl", 0x5C487000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* maxl<.f> 0,ximm,u6 0101110001001000F111uuuuuu111110. */ +{ "maxl", 0x5C48703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* maxl<.f><.cc> 0,ximm,u6 0101110011001000F111uuuuuu1QQQQQ. */ +{ "maxl", 0x5CC87020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* maxl<.f> RA,limm,RC 0101111000001000F111ccccccaaaaaa. */ +{ "maxl", 0x5E087000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* maxl<.f> RA,RB,limm 01011bbb00001000FBBB111110aaaaaa. */ +{ "maxl", 0x58080F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* maxl<.f> 0,limm,RC 0101111000001000F111cccccc111110. */ +{ "maxl", 0x5E08703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* maxl<.f> 0,RB,limm 01011bbb00001000FBBB111110111110. */ +{ "maxl", 0x58080FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* maxl<.f><.cc> 0,limm,RC 0101111011001000F111cccccc0QQQQQ. */ +{ "maxl", 0x5EC87000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* maxl<.f><.cc> RB,RB,limm 01011bbb11001000FBBB1111100QQQQQ. */ +{ "maxl", 0x58C80F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* maxl<.f> RA,limm,u6 0101111001001000F111uuuuuuaaaaaa. */ +{ "maxl", 0x5E487000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* maxl<.f> 0,limm,u6 0101111001001000F111uuuuuu111110. */ +{ "maxl", 0x5E48703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* maxl<.f><.cc> 0,limm,u6 0101111011001000F111uuuuuu1QQQQQ. */ +{ "maxl", 0x5EC87020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* maxl<.f> 0,ximm,s12 0101110010001000F111ssssssSSSSSS. */ +{ "maxl", 0x5C887000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* maxl<.f> 0,limm,s12 0101111010001000F111ssssssSSSSSS. */ +{ "maxl", 0x5E887000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* maxl<.f> RA,ximm,ximm 0101110000001000F111111100aaaaaa. */ +{ "maxl", 0x5C087F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* maxl<.f> 0,ximm,ximm 0101110000001000F111111100111110. */ +{ "maxl", 0x5C087F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* maxl<.f><.cc> 0,ximm,ximm 0101110011001000F1111111000QQQQQ. */ +{ "maxl", 0x5CC87F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* maxl<.f> RA,limm,limm 0101111000001000F111111110aaaaaa. */ +{ "maxl", 0x5E087F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* maxl<.f> 0,limm,limm 0101111000001000F111111110111110. */ +{ "maxl", 0x5E087FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* maxl<.f><.cc> 0,limm,limm 0101111011001000F1111111100QQQQQ. */ +{ "maxl", 0x5EC87F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* min<.f> a,b,c 00100bbb00001001FBBBCCCCCCAAAAAA. */ +{ "min", 0x20090000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* min<.f> 0,b,c 00100bbb00001001FBBBCCCCCC111110. */ +{ "min", 0x2009003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* min<.f><.cc> b,b,c 00100bbb11001001FBBBCCCCCC0QQQQQ. */ +{ "min", 0x20C90000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* min<.f> a,b,u6 00100bbb01001001FBBBuuuuuuAAAAAA. */ +{ "min", 0x20490000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* min<.f> 0,b,u6 00100bbb01001001FBBBuuuuuu111110. */ +{ "min", 0x2049003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* min<.f><.cc> b,b,u6 00100bbb11001001FBBBuuuuuu1QQQQQ. */ +{ "min", 0x20C90020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* min<.f> b,b,s12 00100bbb10001001FBBBssssssSSSSSS. */ +{ "min", 0x20890000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* min<.f> a,limm,c 0010011000001001F111CCCCCCAAAAAA. */ +{ "min", 0x26097000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* min<.f> a,b,limm 00100bbb00001001FBBB111110AAAAAA. */ +{ "min", 0x20090F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* min<.f> 0,limm,c 0010011000001001F111CCCCCC111110. */ +{ "min", 0x2609703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* min<.f> 0,b,limm 00100bbb00001001FBBB111110111110. */ +{ "min", 0x20090FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* min<.f><.cc> b,b,limm 00100bbb11001001FBBB1111100QQQQQ. */ +{ "min", 0x20C90F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* min<.f><.cc> 0,limm,c 0010011011001001F111CCCCCC0QQQQQ. */ +{ "min", 0x26C97000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* min<.f> a,limm,u6 0010011001001001F111uuuuuuAAAAAA. */ +{ "min", 0x26497000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* min<.f> 0,limm,u6 0010011001001001F111uuuuuu111110. */ +{ "min", 0x2649703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* min<.f><.cc> 0,limm,u6 0010011011001001F111uuuuuu1QQQQQ. */ +{ "min", 0x26C97020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* min<.f> 0,limm,s12 0010011010001001F111ssssssSSSSSS. */ +{ "min", 0x26897000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* min<.f> a,limm,limm 0010011000001001F111111110AAAAAA. */ +{ "min", 0x26097F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* min<.f> 0,limm,limm 0010011000001001F111111110111110. */ +{ "min", 0x26097FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* min<.f><.cc> 0,limm,limm 0010011011001001F1111111100QQQQQ. */ +{ "min", 0x26C97F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* minl<.f> RA,RB,RC 01011bbb00001001FBBBccccccaaaaaa. */ +{ "minl", 0x58090000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* minl<.f> 0,RB,RC 01011bbb00001001FBBBcccccc111110. */ +{ "minl", 0x5809003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* minl<.f><.cc> RB,RB,RC 01011bbb11001001FBBBcccccc0QQQQQ. */ +{ "minl", 0x58C90000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* minl<.f> RA,RB,u6 01011bbb01001001FBBBuuuuuuaaaaaa. */ +{ "minl", 0x58490000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* minl<.f> 0,RB,u6 01011bbb01001001FBBBuuuuuu111110. */ +{ "minl", 0x5849003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* minl<.f><.cc> RB,RB,u6 01011bbb11001001FBBBuuuuuu1QQQQQ. */ +{ "minl", 0x58C90020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* minl<.f> RB,RB,s12 01011bbb10001001FBBBssssssSSSSSS. */ +{ "minl", 0x58890000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* minl<.f> RA,ximm,RC 0101110000001001F111ccccccaaaaaa. */ +{ "minl", 0x5C097000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* minl<.f> RA,RB,ximm 01011bbb00001001FBBB111100aaaaaa. */ +{ "minl", 0x58090F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* minl<.f> 0,ximm,RC 0101110000001001F111cccccc111110. */ +{ "minl", 0x5C09703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* minl<.f> 0,RB,ximm 01011bbb00001001FBBB111100111110. */ +{ "minl", 0x58090F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* minl<.f><.cc> 0,ximm,RC 0101110011001001F111cccccc0QQQQQ. */ +{ "minl", 0x5CC97000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* minl<.f><.cc> RB,RB,ximm 01011bbb11001001FBBB1111000QQQQQ. */ +{ "minl", 0x58C90F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* minl<.f> RA,ximm,u6 0101110001001001F111uuuuuuaaaaaa. */ +{ "minl", 0x5C497000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* minl<.f> 0,ximm,u6 0101110001001001F111uuuuuu111110. */ +{ "minl", 0x5C49703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* minl<.f><.cc> 0,ximm,u6 0101110011001001F111uuuuuu1QQQQQ. */ +{ "minl", 0x5CC97020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* minl<.f> RA,limm,RC 0101111000001001F111ccccccaaaaaa. */ +{ "minl", 0x5E097000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* minl<.f> RA,RB,limm 01011bbb00001001FBBB111110aaaaaa. */ +{ "minl", 0x58090F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* minl<.f> 0,limm,RC 0101111000001001F111cccccc111110. */ +{ "minl", 0x5E09703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* minl<.f> 0,RB,limm 01011bbb00001001FBBB111110111110. */ +{ "minl", 0x58090FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* minl<.f><.cc> 0,limm,RC 0101111011001001F111cccccc0QQQQQ. */ +{ "minl", 0x5EC97000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* minl<.f><.cc> RB,RB,limm 01011bbb11001001FBBB1111100QQQQQ. */ +{ "minl", 0x58C90F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* minl<.f> RA,limm,u6 0101111001001001F111uuuuuuaaaaaa. */ +{ "minl", 0x5E497000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* minl<.f> 0,limm,u6 0101111001001001F111uuuuuu111110. */ +{ "minl", 0x5E49703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* minl<.f><.cc> 0,limm,u6 0101111011001001F111uuuuuu1QQQQQ. */ +{ "minl", 0x5EC97020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* minl<.f> 0,ximm,s12 0101110010001001F111ssssssSSSSSS. */ +{ "minl", 0x5C897000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* minl<.f> 0,limm,s12 0101111010001001F111ssssssSSSSSS. */ +{ "minl", 0x5E897000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* minl<.f> RA,ximm,ximm 0101110000001001F111111100aaaaaa. */ +{ "minl", 0x5C097F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* minl<.f> 0,ximm,ximm 0101110000001001F111111100111110. */ +{ "minl", 0x5C097F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* minl<.f><.cc> 0,ximm,ximm 0101110011001001F1111111000QQQQQ. */ +{ "minl", 0x5CC97F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* minl<.f> RA,limm,limm 0101111000001001F111111110aaaaaa. */ +{ "minl", 0x5E097F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* minl<.f> 0,limm,limm 0101111000001001F111111110111110. */ +{ "minl", 0x5E097FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* minl<.f><.cc> 0,limm,limm 0101111011001001F1111111100QQQQQ. */ +{ "minl", 0x5EC97F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* nop 00100110010010100111000000000000. */ +{ "nop", 0x264A7000, 0xFFFFFFFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, CONTROL, NONE, { 0 }, { 0 }}, + +/* mov<.f> b,c 00100bbb00001010FBBBCCCCCCRRRRRR. */ +{ "mov", 0x200A0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { RB, RC }, { C_F }}, + +/* mov<.f> 0,c 0010011000001010F111CCCCCCRRRRRR. */ +{ "mov", 0x260A7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { ZA, RC }, { C_F }}, + +/* mov<.f><.cc> b,c 00100bbb11001010FBBBCCCCCC0QQQQQ. */ +{ "mov", 0x20CA0000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { RB, RC }, { C_F, C_CC }}, + +/* mov<.f><.cc> 0,c 0010011011001010F111CCCCCC0QQQQQ. */ +{ "mov", 0x26CA7000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { ZA, RC }, { C_F, C_CC }}, + +/* mov<.f> b,u6 00100bbb01001010FBBBuuuuuuRRRRRR. */ +{ "mov", 0x204A0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { RB, UIMM6_20 }, { C_F }}, + +/* mov<.f> 0,u6 0010011001001010F111uuuuuuRRRRRR. */ +{ "mov", 0x264A7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { ZA, UIMM6_20 }, { C_F }}, + +/* mov<.f><.cc> b,u6 00100bbb11001010FBBBuuuuuu1QQQQQ. */ +{ "mov", 0x20CA0020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { RB, UIMM6_20 }, { C_F, C_CC }}, + +/* mov<.f><.cc> 0,u6 0010011011001010F111uuuuuu1QQQQQ. */ +{ "mov", 0x26CA7020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { ZA, UIMM6_20 }, { C_F, C_CC }}, + +/* mov<.f> b,s12 00100bbb10001010FBBBssssssSSSSSS. */ +{ "mov", 0x208A0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { RB, SIMM12_20 }, { C_F }}, + +/* mov<.f> 0,s12 0010011010001010F111ssssssSSSSSS. */ +{ "mov", 0x268A7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { ZA, SIMM12_20 }, { C_F }}, + +/* mov<.f> b,limm 00100bbb00001010FBBB111110RRRRRR. */ +{ "mov", 0x200A0F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { RB, LIMM }, { C_F }}, + +/* mov<.f> 0,limm 0010011000001010F111111110RRRRRR. */ +{ "mov", 0x260A7F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { ZA, LIMM }, { C_F }}, + +/* mov<.f><.cc> b,limm 00100bbb11001010FBBB1111100QQQQQ. */ +{ "mov", 0x20CA0F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { RB, LIMM }, { C_F, C_CC }}, + +/* mov<.f><.cc> 0,limm 0010011011001010F1111111100QQQQQ. */ +{ "mov", 0x26CA7F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { ZA, LIMM }, { C_F, C_CC }}, + +/* movhl RB,RC 01011bbb000010110BBBccccccRRRRRR. */ +{ "movhl", 0x580B0000, 0xF8FF8000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { 0 }}, + +/* movhl<.cc> RB,RC 01011bbb110010110BBBcccccc0QQQQQ. */ +{ "movhl", 0x58CB0000, 0xF8FF8020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { C_CC }}, + +/* movhl RB,u6 01011bbb010010110BBBuuuuuuRRRRRR. */ +{ "movhl", 0x584B0000, 0xF8FF8000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { 0 }}, + +/* movhl<.cc> RB,u6 01011bbb110010110BBBuuuuuu1QQQQQ. */ +{ "movhl", 0x58CB0020, 0xF8FF8020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { C_CC }}, + +/* movhl RB,s12 01011bbb100010110BBBssssssSSSSSS. */ +{ "movhl", 0x588B0000, 0xF8FF8000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, SIMM12_20 }, { 0 }}, + +/* movhl RB,limm 01011bbb000010110BBB111110RRRRRR. */ +{ "movhl", 0x580B0F80, 0xF8FF8FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, HI32 }, { 0 }}, + +/* movhl<.cc> RB,limm 01011bbb110010110BBB1111100QQQQQ. */ +{ "movhl", 0x58CB0F80, 0xF8FF8FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, HI32 }, { C_CC }}, + +/* movhl_s h,limm 01110000hhh010HH. */ +{ "movhl_s", 0x00007008, 0x0000FF1C, ARC_OPCODE_ARC64, ARITH, NONE, { RH_S, HI32 }, { 0 }}, + +/* movl<.f> RB,RC 01011bbb00001010FBBBccccccRRRRRR. */ +{ "movl", 0x580A0000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { C_F }}, + +/* movl<.f><.cc> RB,RC 01011bbb11001010FBBBcccccc0QQQQQ. */ +{ "movl", 0x58CA0000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { C_F, C_CC }}, + +/* movl<.f> RB,u6 01011bbb01001010FBBBuuuuuuRRRRRR. */ +{ "movl", 0x584A0000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { C_F }}, + +/* movl<.f><.cc> RB,u6 01011bbb11001010FBBBuuuuuu1QQQQQ. */ +{ "movl", 0x58CA0020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { C_F, C_CC }}, + +/* movl<.f> RB,s12 01011bbb10001010FBBBssssssSSSSSS. */ +{ "movl", 0x588A0000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, SIMM12_20 }, { C_F }}, + +/* movl<.f> RB,ximm 01011bbb00001010FBBB111100RRRRRR. */ +{ "movl", 0x580A0F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, XIMM }, { C_F }}, + +/* movl<.f><.cc> RB,ximm 01011bbb11001010FBBB1111000QQQQQ. */ +{ "movl", 0x58CA0F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, XIMM }, { C_F, C_CC }}, + +/* movl<.f> RB,limm 01011bbb00001010FBBB111110RRRRRR. */ +{ "movl", 0x580A0F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM }, { C_F }}, + +/* movl<.f><.cc> RB,limm 01011bbb11001010FBBB1111100QQQQQ. */ +{ "movl", 0x58CA0F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM }, { C_F, C_CC }}, + +/* movl_s g,h 01000ggghhhGG1HH. */ +{ "movl_s", 0x00004004, 0x0000F804, ARC_OPCODE_ARC64, ARITH, NONE, { G_S, RH_S }, { 0 }}, + +/* movl_s b,u8 11011bbbuuuuuuuu. */ +{ "movl_s", 0x0000D800, 0x0000F800, ARC_OPCODE_ARC64, ARITH, NONE, { RB_S, UIMM8_8_S }, { 0 }}, + +/* movl_s g,limm 01000ggg110GG111. */ +{ "movl_s", 0x000040C7, 0x0000F8E7, ARC_OPCODE_ARC64, MOVE, NONE, { G_S, LIMM_S }, { 0 }}, + +/* mov_s.NE b,h 01110bbbhhh111HH. */ +{ "mov_s", 0x0000701C, 0x0000F81C,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { RB_S, RH_S }, { C_NE, C_CC_NE}}, + +/* mov_s g,h 01000ggghhhGG0HH. */ +{ "mov_s", 0x00004000, 0x0000F804,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { G_S, RH_S }, { 0 }}, + +/* mov_s 0,h 01000110hhh110HH. */ +{ "mov_s", 0x00004618, 0x0000FF1C,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { ZA_S, RH_S }, { 0 }}, + +/* mov_s h,s3 01110ssshhh011HH. */ +{ "mov_s", 0x0000700C, 0x0000F81C,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { RH_S, SIMM3_5_S }, { 0 }}, + +/* mov_s 0,s3 01110sss11001111. */ +{ "mov_s", 0x000070CF, 0x0000F8FF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { ZA_S, SIMM3_5_S }, { 0 }}, + +/* mov_s b,u8 11011bbbuuuuuuuu. */ +{ "mov_s", 0x0000D800, 0x0000F800,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { RB_S, UIMM8_8_S }, { 0 }}, + +/* mov_s.NE b,limm 01110bbb11011111. */ +{ "mov_s", 0x000070DF, 0x0000F8FF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { RB_S, LIMM_S }, { C_NE, C_CC_NE}}, + +/* mov_s g,limm 01000ggg110GG011. */ +{ "mov_s", 0x000040C3, 0x0000F8E7,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { G_S, LIMM_S }, { 0 }}, + +/* mov_s 0,limm 0100011011011011. */ +{ "mov_s", 0x000046DB, 0x0000FFFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { ZA_S, LIMM_S }, { 0 }}, + +/* mpy<.f> a,b,c 00100bbb00011010FBBBCCCCCCAAAAAA. */ +{ "mpy", 0x201A0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RA_CHK, RB, RC }, { C_F }}, + +/* mpy<.f> 0,b,c 00100bbb00011010FBBBCCCCCC111110. */ +{ "mpy", 0x201A003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, RB, RC }, { C_F }}, + +/* mpy<.f><.cc> b,b,c 00100bbb11011010FBBBCCCCCC0QQQQQ. */ +{ "mpy", 0x20DA0000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RB_CHK, RBdup, RC }, { C_F, C_CC }}, + +/* mpy<.f> a,b,u6 00100bbb01011010FBBBuuuuuuAAAAAA. */ +{ "mpy", 0x205A0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RA_CHK, RB, UIMM6_20 }, { C_F }}, + +/* mpy<.f> 0,b,u6 00100bbb01011010FBBBuuuuuu111110. */ +{ "mpy", 0x205A003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* mpy<.f><.cc> b,b,u6 00100bbb11011010FBBBuuuuuu1QQQQQ. */ +{ "mpy", 0x20DA0020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RB_CHK, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* mpy<.f> b,b,s12 00100bbb10011010FBBBssssssSSSSSS. */ +{ "mpy", 0x209A0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RB_CHK, RBdup, SIMM12_20 }, { C_F }}, + +/* mpy<.f> a,limm,c 0010011000011010F111CCCCCCAAAAAA. */ +{ "mpy", 0x261A7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RA_CHK, LIMM, RC }, { C_F }}, + +/* mpy<.f> a,b,limm 00100bbb00011010FBBB111110AAAAAA. */ +{ "mpy", 0x201A0F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RA_CHK, RB, LIMM }, { C_F }}, + +/* mpy<.f> 0,limm,c 0010011000011010F111CCCCCC111110. */ +{ "mpy", 0x261A703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, LIMM, RC }, { C_F }}, + +/* mpy<.f> 0,b,limm 00100bbb00011010FBBB111110111110. */ +{ "mpy", 0x201A0FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, RB, LIMM }, { C_F }}, + +/* mpy<.f><.cc> b,b,limm 00100bbb11011010FBBB1111100QQQQQ. */ +{ "mpy", 0x20DA0F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RB_CHK, RBdup, LIMM }, { C_F, C_CC }}, + +/* mpy<.f><.cc> 0,limm,c 0010011011011010F111CCCCCC0QQQQQ. */ +{ "mpy", 0x26DA7000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* mpy<.f> a,limm,u6 0010011001011010F111uuuuuuAAAAAA. */ +{ "mpy", 0x265A7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RA_CHK, LIMM, UIMM6_20 }, { C_F }}, + +/* mpy<.f> 0,limm,u6 0010011001011010F111uuuuuu111110. */ +{ "mpy", 0x265A703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* mpy<.f><.cc> 0,limm,u6 0010011011011010F111uuuuuu1QQQQQ. */ +{ "mpy", 0x26DA7020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* mpy<.f> 0,limm,s12 0010011010011010F111ssssssSSSSSS. */ +{ "mpy", 0x269A7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* mpy<.f> a,limm,limm 0010011000011010F111111110AAAAAA. */ +{ "mpy", 0x261A7F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RA_CHK, LIMM, LIMMdup }, { C_F }}, + +/* mpy<.f> 0,limm,limm 0010011000011010F111111110111110. */ +{ "mpy", 0x261A7FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* mpy<.f><.cc> 0,limm,limm 0010011011011010F1111111100QQQQQ. */ +{ "mpy", 0x26DA7F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* mpyd<.f> a,b,c 00101bbb00011000FBBBCCCCCCAAAAAA. */ +{ "mpyd", 0x28180000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RA_CHK, RB, RC }, { C_F }}, + +/* mpyd<.f> 0,b,c 00101bbb00011000FBBBCCCCCC111110. */ +{ "mpyd", 0x2818003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, RB, RC }, { C_F }}, + +/* mpyd<.f><.cc> b,b,c 00101bbb11011000FBBBCCCCCC0QQQQQ. */ +{ "mpyd", 0x28D80000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RB_CHK, RBdup, RC }, { C_F, C_CC }}, + +/* mpyd<.f> a,b,u6 00101bbb01011000FBBBuuuuuuAAAAAA. */ +{ "mpyd", 0x28580000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RA_CHK, RB, UIMM6_20 }, { C_F }}, + +/* mpyd<.f> 0,b,u6 00101bbb01011000FBBBuuuuuu111110. */ +{ "mpyd", 0x2858003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* mpyd<.f><.cc> b,b,u6 00101bbb11011000FBBBuuuuuu1QQQQQ. */ +{ "mpyd", 0x28D80020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RB_CHK, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* mpyd<.f> b,b,s12 00101bbb10011000FBBBssssssSSSSSS. */ +{ "mpyd", 0x28980000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RB_CHK, RBdup, SIMM12_20 }, { C_F }}, + +/* mpyd<.f> a,limm,c 0010111000011000F111CCCCCCAAAAAA. */ +{ "mpyd", 0x2E187000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RA_CHK, LIMM, RC }, { C_F }}, + +/* mpyd<.f> a,b,limm 00101bbb00011000FBBB111110AAAAAA. */ +{ "mpyd", 0x28180F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RA_CHK, RB, LIMM }, { C_F }}, + +/* mpyd<.f> 0,limm,c 0010111000011000F111CCCCCC111110. */ +{ "mpyd", 0x2E18703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, RC }, { C_F }}, + +/* mpyd<.f> 0,b,limm 00101bbb00011000FBBB111110111110. */ +{ "mpyd", 0x28180FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, RB, LIMM }, { C_F }}, + +/* mpyd<.f><.cc> b,b,limm 00101bbb11011000FBBB1111100QQQQQ. */ +{ "mpyd", 0x28D80F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RB_CHK, RBdup, LIMM }, { C_F, C_CC }}, + +/* mpyd<.f><.cc> 0,limm,c 0010111011011000F111CCCCCC0QQQQQ. */ +{ "mpyd", 0x2ED87000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* mpyd<.f> a,limm,u6 0010111001011000F111uuuuuuAAAAAA. */ +{ "mpyd", 0x2E587000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RA_CHK, LIMM, UIMM6_20 }, { C_F }}, + +/* mpyd<.f> 0,limm,u6 0010111001011000F111uuuuuu111110. */ +{ "mpyd", 0x2E58703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* mpyd<.f><.cc> 0,limm,u6 0010111011011000F111uuuuuu1QQQQQ. */ +{ "mpyd", 0x2ED87020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* mpyd<.f> 0,limm,s12 0010111010011000F111ssssssSSSSSS. */ +{ "mpyd", 0x2E987000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* mpyd<.f> a,limm,limm 0010111000011000F111111110AAAAAA. */ +{ "mpyd", 0x2E187F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RA_CHK, LIMM, LIMMdup }, { C_F }}, + +/* mpyd<.f> 0,limm,limm 0010111000011000F111111110111110. */ +{ "mpyd", 0x2E187FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* mpyd<.f><.cc> 0,limm,limm 0010111011011000F1111111100QQQQQ. */ +{ "mpyd", 0x2ED87F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* mpydf<.f> a,b,c 00110bbb00010010FBBBCCCCCCAAAAAA. */ +{ "mpydf", 0x30120000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { RA_CHK, RB, RC }, { C_F }}, + +/* mpydf<.f> 0,b,c 00110bbb00010010FBBBCCCCCC111110. */ +{ "mpydf", 0x3012003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { ZA, RB, RC }, { C_F }}, + +/* mpydf<.f><.cc> b,b,c 00110bbb11010010FBBBCCCCCC0QQQQQ. */ +{ "mpydf", 0x30D20000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { RB_CHK, RBdup, RC }, { C_F, C_CC }}, + +/* mpydf<.f> a,b,u6 00110bbb01010010FBBBuuuuuuAAAAAA. */ +{ "mpydf", 0x30520000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { RA_CHK, RB, UIMM6_20 }, { C_F }}, + +/* mpydf<.f> 0,b,u6 00110bbb01010010FBBBuuuuuu111110. */ +{ "mpydf", 0x3052003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* mpydf<.f><.cc> b,b,u6 00110bbb11010010FBBBuuuuuu1QQQQQ. */ +{ "mpydf", 0x30D20020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { RB_CHK, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* mpydf<.f> b,b,s12 00110bbb10010010FBBBssssssSSSSSS. */ +{ "mpydf", 0x30920000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { RB_CHK, RBdup, SIMM12_20 }, { C_F }}, + +/* mpydf<.f> a,limm,c 0011011000010010F111CCCCCCAAAAAA. */ +{ "mpydf", 0x36127000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { RA_CHK, LIMM, RC }, { C_F }}, + +/* mpydf<.f> a,b,limm 00110bbb00010010FBBB111110AAAAAA. */ +{ "mpydf", 0x30120F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { RA_CHK, RB, LIMM }, { C_F }}, + +/* mpydf<.f> 0,limm,c 0011011000010010F111CCCCCC111110. */ +{ "mpydf", 0x3612703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* mpydf<.f> 0,b,limm 00110bbb00010010FBBB111110111110. */ +{ "mpydf", 0x30120FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* mpydf<.f><.cc> b,b,limm 00110bbb11010010FBBB1111100QQQQQ. */ +{ "mpydf", 0x30D20F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { RB_CHK, RBdup, LIMM }, { C_F, C_CC }}, + +/* mpydf<.f><.cc> 0,limm,c 0011011011010010F111CCCCCC0QQQQQ. */ +{ "mpydf", 0x36D27000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* mpydf<.f> a,limm,u6 0011011001010010F111uuuuuuAAAAAA. */ +{ "mpydf", 0x36527000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { RA_CHK, LIMM, UIMM6_20 }, { C_F }}, + +/* mpydf<.f> 0,limm,u6 0011011001010010F111uuuuuu111110. */ +{ "mpydf", 0x3652703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* mpydf<.f><.cc> 0,limm,u6 0011011011010010F111uuuuuu1QQQQQ. */ +{ "mpydf", 0x36D27020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* mpydf<.f> 0,limm,s12 0011011010010010F111ssssssSSSSSS. */ +{ "mpydf", 0x36927000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* mpydf<.f> a,limm,limm 0011011000010010F111111110AAAAAA. */ +{ "mpydf", 0x36127F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { RA_CHK, LIMM, LIMMdup }, { C_F }}, + +/* mpydf<.f> 0,limm,limm 0011011000010010F111111110111110. */ +{ "mpydf", 0x36127FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* mpydf<.f><.cc> 0,limm,limm 0011011011010010F1111111100QQQQQ. */ +{ "mpydf", 0x36D27F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* mpydu<.f> a,b,c 00101bbb00011001FBBBCCCCCCAAAAAA. */ +{ "mpydu", 0x28190000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RA_CHK, RB, RC }, { C_F }}, + +/* mpydu<.f> 0,b,c 00101bbb00011001FBBBCCCCCC111110. */ +{ "mpydu", 0x2819003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, RB, RC }, { C_F }}, + +/* mpydu<.f><.cc> b,b,c 00101bbb11011001FBBBCCCCCC0QQQQQ. */ +{ "mpydu", 0x28D90000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RB_CHK, RBdup, RC }, { C_F, C_CC }}, + +/* mpydu<.f> a,b,u6 00101bbb01011001FBBBuuuuuuAAAAAA. */ +{ "mpydu", 0x28590000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RA_CHK, RB, UIMM6_20 }, { C_F }}, + +/* mpydu<.f> 0,b,u6 00101bbb01011001FBBBuuuuuu111110. */ +{ "mpydu", 0x2859003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* mpydu<.f><.cc> b,b,u6 00101bbb11011001FBBBuuuuuu1QQQQQ. */ +{ "mpydu", 0x28D90020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RB_CHK, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* mpydu<.f> b,b,s12 00101bbb10011001FBBBssssssSSSSSS. */ +{ "mpydu", 0x28990000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RB_CHK, RBdup, SIMM12_20 }, { C_F }}, + +/* mpydu<.f> a,limm,c 0010111000011001F111CCCCCCAAAAAA. */ +{ "mpydu", 0x2E197000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RA_CHK, LIMM, RC }, { C_F }}, + +/* mpydu<.f> a,b,limm 00101bbb00011001FBBB111110AAAAAA. */ +{ "mpydu", 0x28190F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RA_CHK, RB, LIMM }, { C_F }}, + +/* mpydu<.f> 0,limm,c 0010111000011001F111CCCCCC111110. */ +{ "mpydu", 0x2E19703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, RC }, { C_F }}, + +/* mpydu<.f> 0,b,limm 00101bbb00011001FBBB111110111110. */ +{ "mpydu", 0x28190FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, RB, LIMM }, { C_F }}, + +/* mpydu<.f><.cc> b,b,limm 00101bbb11011001FBBB1111100QQQQQ. */ +{ "mpydu", 0x28D90F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RB_CHK, RBdup, LIMM }, { C_F, C_CC }}, + +/* mpydu<.f><.cc> 0,limm,c 0010111011011001F111CCCCCC0QQQQQ. */ +{ "mpydu", 0x2ED97000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* mpydu<.f> a,limm,u6 0010111001011001F111uuuuuuAAAAAA. */ +{ "mpydu", 0x2E597000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RA_CHK, LIMM, UIMM6_20 }, { C_F }}, + +/* mpydu<.f> 0,limm,u6 0010111001011001F111uuuuuu111110. */ +{ "mpydu", 0x2E59703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* mpydu<.f><.cc> 0,limm,u6 0010111011011001F111uuuuuu1QQQQQ. */ +{ "mpydu", 0x2ED97020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* mpydu<.f> 0,limm,s12 0010111010011001F111ssssssSSSSSS. */ +{ "mpydu", 0x2E997000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* mpydu<.f> a,limm,limm 0010111000011001F111111110AAAAAA. */ +{ "mpydu", 0x2E197F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RA_CHK, LIMM, LIMMdup }, { C_F }}, + +/* mpydu<.f> 0,limm,limm 0010111000011001F111111110111110. */ +{ "mpydu", 0x2E197FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* mpydu<.f><.cc> 0,limm,limm 0010111011011001F1111111100QQQQQ. */ +{ "mpydu", 0x2ED97F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* mpyl<.f> RA,RB,RC 01011bbb00110000FBBBccccccaaaaaa. */ +{ "mpyl", 0x58300000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* mpyl<.f> 0,RB,RC 01011bbb00110000FBBBcccccc111110. */ +{ "mpyl", 0x5830003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* mpyl<.f><.cc> RB,RB,RC 01011bbb11110000FBBBcccccc0QQQQQ. */ +{ "mpyl", 0x58F00000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* mpyl<.f> RA,RB,u6 01011bbb01110000FBBBuuuuuuaaaaaa. */ +{ "mpyl", 0x58700000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* mpyl<.f> 0,RB,u6 01011bbb01110000FBBBuuuuuu111110. */ +{ "mpyl", 0x5870003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* mpyl<.f><.cc> RB,RB,u6 01011bbb11110000FBBBuuuuuu1QQQQQ. */ +{ "mpyl", 0x58F00020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* mpyl<.f> RB,RB,s12 01011bbb10110000FBBBssssssSSSSSS. */ +{ "mpyl", 0x58B00000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* mpyl<.f> RA,ximm,RC 0101110000110000F111ccccccaaaaaa. */ +{ "mpyl", 0x5C307000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* mpyl<.f> RA,RB,ximm 01011bbb00110000FBBB111100aaaaaa. */ +{ "mpyl", 0x58300F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* mpyl<.f> 0,ximm,RC 0101110000110000F111cccccc111110. */ +{ "mpyl", 0x5C30703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* mpyl<.f> 0,RB,ximm 01011bbb00110000FBBB111100111110. */ +{ "mpyl", 0x58300F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* mpyl<.f><.cc> 0,ximm,RC 0101110011110000F111cccccc0QQQQQ. */ +{ "mpyl", 0x5CF07000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* mpyl<.f><.cc> RB,RB,ximm 01011bbb11110000FBBB1111000QQQQQ. */ +{ "mpyl", 0x58F00F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* mpyl<.f> RA,ximm,u6 0101110001110000F111uuuuuuaaaaaa. */ +{ "mpyl", 0x5C707000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* mpyl<.f> 0,ximm,u6 0101110001110000F111uuuuuu111110. */ +{ "mpyl", 0x5C70703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* mpyl<.f><.cc> 0,ximm,u6 0101110011110000F111uuuuuu1QQQQQ. */ +{ "mpyl", 0x5CF07020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* mpyl<.f> RA,limm,RC 0101111000110000F111ccccccaaaaaa. */ +{ "mpyl", 0x5E307000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* mpyl<.f> RA,RB,limm 01011bbb00110000FBBB111110aaaaaa. */ +{ "mpyl", 0x58300F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* mpyl<.f> 0,limm,RC 0101111000110000F111cccccc111110. */ +{ "mpyl", 0x5E30703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* mpyl<.f> 0,RB,limm 01011bbb00110000FBBB111110111110. */ +{ "mpyl", 0x58300FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* mpyl<.f><.cc> 0,limm,RC 0101111011110000F111cccccc0QQQQQ. */ +{ "mpyl", 0x5EF07000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* mpyl<.f><.cc> RB,RB,limm 01011bbb11110000FBBB1111100QQQQQ. */ +{ "mpyl", 0x58F00F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* mpyl<.f> RA,limm,u6 0101111001110000F111uuuuuuaaaaaa. */ +{ "mpyl", 0x5E707000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* mpyl<.f> 0,limm,u6 0101111001110000F111uuuuuu111110. */ +{ "mpyl", 0x5E70703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* mpyl<.f><.cc> 0,limm,u6 0101111011110000F111uuuuuu1QQQQQ. */ +{ "mpyl", 0x5EF07020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* mpyl<.f> 0,ximm,s12 0101110010110000F111ssssssSSSSSS. */ +{ "mpyl", 0x5CB07000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* mpyl<.f> 0,limm,s12 0101111010110000F111ssssssSSSSSS. */ +{ "mpyl", 0x5EB07000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* mpyl<.f> RA,ximm,ximm 0101110000110000F111111100aaaaaa. */ +{ "mpyl", 0x5C307F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* mpyl<.f> 0,ximm,ximm 0101110000110000F111111100111110. */ +{ "mpyl", 0x5C307F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* mpyl<.f><.cc> 0,ximm,ximm 0101110011110000F1111111000QQQQQ. */ +{ "mpyl", 0x5CF07F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* mpyl<.f> RA,limm,limm 0101111000110000F111111110aaaaaa. */ +{ "mpyl", 0x5E307F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* mpyl<.f> 0,limm,limm 0101111000110000F111111110111110. */ +{ "mpyl", 0x5E307FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* mpyl<.f><.cc> 0,limm,limm 0101111011110000F1111111100QQQQQ. */ +{ "mpyl", 0x5EF07F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* mpym<.f> a,b,c 00100bbb00011011FBBBCCCCCCAAAAAA. */ +{ "mpym", 0x201B0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RA_CHK, RB, RC }, { C_F }}, + +/* mpym<.f> 0,b,c 00100bbb00011011FBBBCCCCCC111110. */ +{ "mpym", 0x201B003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, RB, RC }, { C_F }}, + +/* mpym<.f><.cc> b,b,c 00100bbb11011011FBBBCCCCCC0QQQQQ. */ +{ "mpym", 0x20DB0000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RB_CHK, RBdup, RC }, { C_F, C_CC }}, + +/* mpym<.f> a,b,u6 00100bbb01011011FBBBuuuuuuAAAAAA. */ +{ "mpym", 0x205B0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RA_CHK, RB, UIMM6_20 }, { C_F }}, + +/* mpym<.f> 0,b,u6 00100bbb01011011FBBBuuuuuu111110. */ +{ "mpym", 0x205B003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* mpym<.f><.cc> b,b,u6 00100bbb11011011FBBBuuuuuu1QQQQQ. */ +{ "mpym", 0x20DB0020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RB_CHK, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* mpym<.f> b,b,s12 00100bbb10011011FBBBssssssSSSSSS. */ +{ "mpym", 0x209B0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RB_CHK, RBdup, SIMM12_20 }, { C_F }}, + +/* mpym<.f> a,limm,c 0010011000011011F111CCCCCCAAAAAA. */ +{ "mpym", 0x261B7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RA_CHK, LIMM, RC }, { C_F }}, + +/* mpym<.f> a,b,limm 00100bbb00011011FBBB111110AAAAAA. */ +{ "mpym", 0x201B0F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RA_CHK, RB, LIMM }, { C_F }}, + +/* mpym<.f> 0,limm,c 0010011000011011F111CCCCCC111110. */ +{ "mpym", 0x261B703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, LIMM, RC }, { C_F }}, + +/* mpym<.f> 0,b,limm 00100bbb00011011FBBB111110111110. */ +{ "mpym", 0x201B0FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, RB, LIMM }, { C_F }}, + +/* mpym<.f><.cc> b,b,limm 00100bbb11011011FBBB1111100QQQQQ. */ +{ "mpym", 0x20DB0F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RB_CHK, RBdup, LIMM }, { C_F, C_CC }}, + +/* mpym<.f><.cc> 0,limm,c 0010011011011011F111CCCCCC0QQQQQ. */ +{ "mpym", 0x26DB7000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* mpym<.f> a,limm,u6 0010011001011011F111uuuuuuAAAAAA. */ +{ "mpym", 0x265B7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RA_CHK, LIMM, UIMM6_20 }, { C_F }}, + +/* mpym<.f> 0,limm,u6 0010011001011011F111uuuuuu111110. */ +{ "mpym", 0x265B703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* mpym<.f><.cc> 0,limm,u6 0010011011011011F111uuuuuu1QQQQQ. */ +{ "mpym", 0x26DB7020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* mpym<.f> 0,limm,s12 0010011010011011F111ssssssSSSSSS. */ +{ "mpym", 0x269B7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* mpym<.f> a,limm,limm 0010011000011011F111111110AAAAAA. */ +{ "mpym", 0x261B7F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RA_CHK, LIMM, LIMMdup }, { C_F }}, + +/* mpym<.f> 0,limm,limm 0010011000011011F111111110111110. */ +{ "mpym", 0x261B7FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* mpym<.f><.cc> 0,limm,limm 0010011011011011F1111111100QQQQQ. */ +{ "mpym", 0x26DB7F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* mpyml RA,RB,RC 01011bbb001100010BBBccccccaaaaaa. */ +{ "mpyml", 0x58310000, 0xF8FF8000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { 0 }}, + +/* mpyml 0,RB,RC 01011bbb001100010BBBcccccc111110. */ +{ "mpyml", 0x5831003E, 0xF8FF803F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { 0 }}, + +/* mpyml<.cc> RB,RB,RC 01011bbb111100010BBBcccccc0QQQQQ. */ +{ "mpyml", 0x58F10000, 0xF8FF8020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_CC }}, + +/* mpyml RA,RB,u6 01011bbb011100010BBBuuuuuuaaaaaa. */ +{ "mpyml", 0x58710000, 0xF8FF8000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { 0 }}, + +/* mpyml 0,RB,u6 01011bbb011100010BBBuuuuuu111110. */ +{ "mpyml", 0x5871003E, 0xF8FF803F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { 0 }}, + +/* mpyml<.cc> RB,RB,u6 01011bbb111100010BBBuuuuuu1QQQQQ. */ +{ "mpyml", 0x58F10020, 0xF8FF8020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_CC }}, + +/* mpyml RB,RB,s12 01011bbb101100010BBBssssssSSSSSS. */ +{ "mpyml", 0x58B10000, 0xF8FF8000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { 0 }}, + +/* mpyml RA,ximm,RC 01011100001100010111ccccccaaaaaa. */ +{ "mpyml", 0x5C317000, 0xFFFFF000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { 0 }}, + +/* mpyml RA,RB,ximm 01011bbb001100010BBB111100aaaaaa. */ +{ "mpyml", 0x58310F00, 0xF8FF8FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { 0 }}, + +/* mpyml 0,ximm,RC 01011100001100010111cccccc111110. */ +{ "mpyml", 0x5C31703E, 0xFFFFF03F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { 0 }}, + +/* mpyml 0,RB,ximm 01011bbb001100010BBB111100111110. */ +{ "mpyml", 0x58310F3E, 0xF8FF8FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { 0 }}, + +/* mpyml<.cc> 0,ximm,RC 01011100111100010111cccccc0QQQQQ. */ +{ "mpyml", 0x5CF17000, 0xFFFFF020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_CC }}, + +/* mpyml<.cc> RB,RB,ximm 01011bbb111100010BBB1111000QQQQQ. */ +{ "mpyml", 0x58F10F00, 0xF8FF8FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_CC }}, + +/* mpyml RA,ximm,u6 01011100011100010111uuuuuuaaaaaa. */ +{ "mpyml", 0x5C717000, 0xFFFFF000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { 0 }}, + +/* mpyml 0,ximm,u6 01011100011100010111uuuuuu111110. */ +{ "mpyml", 0x5C71703E, 0xFFFFF03F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { 0 }}, + +/* mpyml<.cc> 0,ximm,u6 01011100111100010111uuuuuu1QQQQQ. */ +{ "mpyml", 0x5CF17020, 0xFFFFF020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_CC }}, + +/* mpyml RA,limm,RC 01011110001100010111ccccccaaaaaa. */ +{ "mpyml", 0x5E317000, 0xFFFFF000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { 0 }}, + +/* mpyml RA,RB,limm 01011bbb001100010BBB111110aaaaaa. */ +{ "mpyml", 0x58310F80, 0xF8FF8FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { 0 }}, + +/* mpyml 0,limm,RC 01011110001100010111cccccc111110. */ +{ "mpyml", 0x5E31703E, 0xFFFFF03F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { 0 }}, + +/* mpyml 0,RB,limm 01011bbb001100010BBB111110111110. */ +{ "mpyml", 0x58310FBE, 0xF8FF8FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { 0 }}, + +/* mpyml<.cc> 0,limm,RC 01011110111100010111cccccc0QQQQQ. */ +{ "mpyml", 0x5EF17000, 0xFFFFF020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_CC }}, + +/* mpyml<.cc> RB,RB,limm 01011bbb111100010BBB1111100QQQQQ. */ +{ "mpyml", 0x58F10F80, 0xF8FF8FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_CC }}, + +/* mpyml RA,limm,u6 01011110011100010111uuuuuuaaaaaa. */ +{ "mpyml", 0x5E717000, 0xFFFFF000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { 0 }}, + +/* mpyml 0,limm,u6 01011110011100010111uuuuuu111110. */ +{ "mpyml", 0x5E71703E, 0xFFFFF03F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { 0 }}, + +/* mpyml<.cc> 0,limm,u6 01011110111100010111uuuuuu1QQQQQ. */ +{ "mpyml", 0x5EF17020, 0xFFFFF020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_CC }}, + +/* mpyml 0,ximm,s12 01011100101100010111ssssssSSSSSS. */ +{ "mpyml", 0x5CB17000, 0xFFFFF000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { 0 }}, + +/* mpyml 0,limm,s12 01011110101100010111ssssssSSSSSS. */ +{ "mpyml", 0x5EB17000, 0xFFFFF000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { 0 }}, + +/* mpyml RA,ximm,ximm 01011100001100010111111100aaaaaa. */ +{ "mpyml", 0x5C317F00, 0xFFFFFFC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { 0 }}, + +/* mpyml 0,ximm,ximm 01011100001100010111111100111110. */ +{ "mpyml", 0x5C317F3E, 0xFFFFFFFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { 0 }}, + +/* mpyml<.cc> 0,ximm,ximm 010111001111000101111111000QQQQQ. */ +{ "mpyml", 0x5CF17F00, 0xFFFFFFE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_CC }}, + +/* mpyml RA,limm,limm 01011110001100010111111110aaaaaa. */ +{ "mpyml", 0x5E317F80, 0xFFFFFFC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { 0 }}, + +/* mpyml 0,limm,limm 01011110001100010111111110111110. */ +{ "mpyml", 0x5E317FBE, 0xFFFFFFFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { 0 }}, + +/* mpyml<.cc> 0,limm,limm 010111101111000101111111100QQQQQ. */ +{ "mpyml", 0x5EF17F80, 0xFFFFFFE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_CC }}, + +/* mpymsul RA,RB,RC 01011bbb001100110BBBccccccaaaaaa. */ +{ "mpymsul", 0x58330000, 0xF8FF8000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { 0 }}, + +/* mpymsul 0,RB,RC 01011bbb001100110BBBcccccc111110. */ +{ "mpymsul", 0x5833003E, 0xF8FF803F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { 0 }}, + +/* mpymsul<.cc> RB,RB,RC 01011bbb111100110BBBcccccc0QQQQQ. */ +{ "mpymsul", 0x58F30000, 0xF8FF8020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_CC }}, + +/* mpymsul RA,RB,u6 01011bbb011100110BBBuuuuuuaaaaaa. */ +{ "mpymsul", 0x58730000, 0xF8FF8000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { 0 }}, + +/* mpymsul 0,RB,u6 01011bbb011100110BBBuuuuuu111110. */ +{ "mpymsul", 0x5873003E, 0xF8FF803F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { 0 }}, + +/* mpymsul<.cc> RB,RB,u6 01011bbb111100110BBBuuuuuu1QQQQQ. */ +{ "mpymsul", 0x58F30020, 0xF8FF8020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_CC }}, + +/* mpymsul RB,RB,s12 01011bbb101100110BBBssssssSSSSSS. */ +{ "mpymsul", 0x58B30000, 0xF8FF8000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { 0 }}, + +/* mpymsul RA,ximm,RC 01011100001100110111ccccccaaaaaa. */ +{ "mpymsul", 0x5C337000, 0xFFFFF000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { 0 }}, + +/* mpymsul RA,RB,ximm 01011bbb001100110BBB111100aaaaaa. */ +{ "mpymsul", 0x58330F00, 0xF8FF8FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { 0 }}, + +/* mpymsul 0,ximm,RC 01011100001100110111cccccc111110. */ +{ "mpymsul", 0x5C33703E, 0xFFFFF03F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { 0 }}, + +/* mpymsul 0,RB,ximm 01011bbb001100110BBB111100111110. */ +{ "mpymsul", 0x58330F3E, 0xF8FF8FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { 0 }}, + +/* mpymsul<.cc> 0,ximm,RC 01011100111100110111cccccc0QQQQQ. */ +{ "mpymsul", 0x5CF37000, 0xFFFFF020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_CC }}, + +/* mpymsul<.cc> RB,RB,ximm 01011bbb111100110BBB1111000QQQQQ. */ +{ "mpymsul", 0x58F30F00, 0xF8FF8FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_CC }}, + +/* mpymsul RA,ximm,u6 01011100011100110111uuuuuuaaaaaa. */ +{ "mpymsul", 0x5C737000, 0xFFFFF000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { 0 }}, + +/* mpymsul 0,ximm,u6 01011100011100110111uuuuuu111110. */ +{ "mpymsul", 0x5C73703E, 0xFFFFF03F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { 0 }}, + +/* mpymsul<.cc> 0,ximm,u6 01011100111100110111uuuuuu1QQQQQ. */ +{ "mpymsul", 0x5CF37020, 0xFFFFF020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_CC }}, + +/* mpymsul RA,limm,RC 01011110001100110111ccccccaaaaaa. */ +{ "mpymsul", 0x5E337000, 0xFFFFF000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { 0 }}, + +/* mpymsul RA,RB,limm 01011bbb001100110BBB111110aaaaaa. */ +{ "mpymsul", 0x58330F80, 0xF8FF8FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { 0 }}, + +/* mpymsul 0,limm,RC 01011110001100110111cccccc111110. */ +{ "mpymsul", 0x5E33703E, 0xFFFFF03F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { 0 }}, + +/* mpymsul 0,RB,limm 01011bbb001100110BBB111110111110. */ +{ "mpymsul", 0x58330FBE, 0xF8FF8FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { 0 }}, + +/* mpymsul<.cc> 0,limm,RC 01011110111100110111cccccc0QQQQQ. */ +{ "mpymsul", 0x5EF37000, 0xFFFFF020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_CC }}, + +/* mpymsul<.cc> RB,RB,limm 01011bbb111100110BBB1111100QQQQQ. */ +{ "mpymsul", 0x58F30F80, 0xF8FF8FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_CC }}, + +/* mpymsul RA,limm,u6 01011110011100110111uuuuuuaaaaaa. */ +{ "mpymsul", 0x5E737000, 0xFFFFF000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { 0 }}, + +/* mpymsul 0,limm,u6 01011110011100110111uuuuuu111110. */ +{ "mpymsul", 0x5E73703E, 0xFFFFF03F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { 0 }}, + +/* mpymsul<.cc> 0,limm,u6 01011110111100110111uuuuuu1QQQQQ. */ +{ "mpymsul", 0x5EF37020, 0xFFFFF020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_CC }}, + +/* mpymsul 0,ximm,s12 01011100101100110111ssssssSSSSSS. */ +{ "mpymsul", 0x5CB37000, 0xFFFFF000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { 0 }}, + +/* mpymsul 0,limm,s12 01011110101100110111ssssssSSSSSS. */ +{ "mpymsul", 0x5EB37000, 0xFFFFF000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { 0 }}, + +/* mpymsul RA,ximm,ximm 01011100001100110111111100aaaaaa. */ +{ "mpymsul", 0x5C337F00, 0xFFFFFFC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { 0 }}, + +/* mpymsul 0,ximm,ximm 01011100001100110111111100111110. */ +{ "mpymsul", 0x5C337F3E, 0xFFFFFFFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { 0 }}, + +/* mpymsul<.cc> 0,ximm,ximm 010111001111001101111111000QQQQQ. */ +{ "mpymsul", 0x5CF37F00, 0xFFFFFFE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_CC }}, + +/* mpymsul RA,limm,limm 01011110001100110111111110aaaaaa. */ +{ "mpymsul", 0x5E337F80, 0xFFFFFFC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { 0 }}, + +/* mpymsul 0,limm,limm 01011110001100110111111110111110. */ +{ "mpymsul", 0x5E337FBE, 0xFFFFFFFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { 0 }}, + +/* mpymsul<.cc> 0,limm,limm 010111101111001101111111100QQQQQ. */ +{ "mpymsul", 0x5EF37F80, 0xFFFFFFE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_CC }}, + +/* mpymu<.f> a,b,c 00100bbb00011100FBBBCCCCCCAAAAAA. */ +{ "mpymu", 0x201C0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RA_CHK, RB, RC }, { C_F }}, + +/* mpymu<.f> 0,b,c 00100bbb00011100FBBBCCCCCC111110. */ +{ "mpymu", 0x201C003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, RB, RC }, { C_F }}, + +/* mpymu<.f><.cc> b,b,c 00100bbb11011100FBBBCCCCCC0QQQQQ. */ +{ "mpymu", 0x20DC0000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RB_CHK, RBdup, RC }, { C_F, C_CC }}, + +/* mpymu<.f> a,b,u6 00100bbb01011100FBBBuuuuuuAAAAAA. */ +{ "mpymu", 0x205C0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RA_CHK, RB, UIMM6_20 }, { C_F }}, + +/* mpymu<.f> 0,b,u6 00100bbb01011100FBBBuuuuuu111110. */ +{ "mpymu", 0x205C003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* mpymu<.f><.cc> b,b,u6 00100bbb11011100FBBBuuuuuu1QQQQQ. */ +{ "mpymu", 0x20DC0020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RB_CHK, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* mpymu<.f> b,b,s12 00100bbb10011100FBBBssssssSSSSSS. */ +{ "mpymu", 0x209C0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RB_CHK, RBdup, SIMM12_20 }, { C_F }}, + +/* mpymu<.f> a,limm,c 0010011000011100F111CCCCCCAAAAAA. */ +{ "mpymu", 0x261C7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RA_CHK, LIMM, RC }, { C_F }}, + +/* mpymu<.f> a,b,limm 00100bbb00011100FBBB111110AAAAAA. */ +{ "mpymu", 0x201C0F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RA_CHK, RB, LIMM }, { C_F }}, + +/* mpymu<.f> 0,limm,c 0010011000011100F111CCCCCC111110. */ +{ "mpymu", 0x261C703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, LIMM, RC }, { C_F }}, + +/* mpymu<.f> 0,b,limm 00100bbb00011100FBBB111110111110. */ +{ "mpymu", 0x201C0FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, RB, LIMM }, { C_F }}, + +/* mpymu<.f><.cc> b,b,limm 00100bbb11011100FBBB1111100QQQQQ. */ +{ "mpymu", 0x20DC0F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RB_CHK, RBdup, LIMM }, { C_F, C_CC }}, + +/* mpymu<.f><.cc> 0,limm,c 0010011011011100F111CCCCCC0QQQQQ. */ +{ "mpymu", 0x26DC7000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* mpymu<.f> a,limm,u6 0010011001011100F111uuuuuuAAAAAA. */ +{ "mpymu", 0x265C7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RA_CHK, LIMM, UIMM6_20 }, { C_F }}, + +/* mpymu<.f> 0,limm,u6 0010011001011100F111uuuuuu111110. */ +{ "mpymu", 0x265C703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* mpymu<.f><.cc> 0,limm,u6 0010011011011100F111uuuuuu1QQQQQ. */ +{ "mpymu", 0x26DC7020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* mpymu<.f> 0,limm,s12 0010011010011100F111ssssssSSSSSS. */ +{ "mpymu", 0x269C7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* mpymu<.f> a,limm,limm 0010011000011100F111111110AAAAAA. */ +{ "mpymu", 0x261C7F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RA_CHK, LIMM, LIMMdup }, { C_F }}, + +/* mpymu<.f> 0,limm,limm 0010011000011100F111111110111110. */ +{ "mpymu", 0x261C7FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* mpymu<.f><.cc> 0,limm,limm 0010011011011100F1111111100QQQQQ. */ +{ "mpymu", 0x26DC7F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* mpymul RA,RB,RC 01011bbb001100100BBBccccccaaaaaa. */ +{ "mpymul", 0x58320000, 0xF8FF8000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { 0 }}, + +/* mpymul 0,RB,RC 01011bbb001100100BBBcccccc111110. */ +{ "mpymul", 0x5832003E, 0xF8FF803F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { 0 }}, + +/* mpymul<.cc> RB,RB,RC 01011bbb111100100BBBcccccc0QQQQQ. */ +{ "mpymul", 0x58F20000, 0xF8FF8020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_CC }}, + +/* mpymul RA,RB,u6 01011bbb011100100BBBuuuuuuaaaaaa. */ +{ "mpymul", 0x58720000, 0xF8FF8000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { 0 }}, + +/* mpymul 0,RB,u6 01011bbb011100100BBBuuuuuu111110. */ +{ "mpymul", 0x5872003E, 0xF8FF803F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { 0 }}, + +/* mpymul<.cc> RB,RB,u6 01011bbb111100100BBBuuuuuu1QQQQQ. */ +{ "mpymul", 0x58F20020, 0xF8FF8020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_CC }}, + +/* mpymul RB,RB,s12 01011bbb101100100BBBssssssSSSSSS. */ +{ "mpymul", 0x58B20000, 0xF8FF8000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { 0 }}, + +/* mpymul RA,ximm,RC 01011100001100100111ccccccaaaaaa. */ +{ "mpymul", 0x5C327000, 0xFFFFF000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { 0 }}, + +/* mpymul RA,RB,ximm 01011bbb001100100BBB111100aaaaaa. */ +{ "mpymul", 0x58320F00, 0xF8FF8FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { 0 }}, + +/* mpymul 0,ximm,RC 01011100001100100111cccccc111110. */ +{ "mpymul", 0x5C32703E, 0xFFFFF03F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { 0 }}, + +/* mpymul 0,RB,ximm 01011bbb001100100BBB111100111110. */ +{ "mpymul", 0x58320F3E, 0xF8FF8FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { 0 }}, + +/* mpymul<.cc> 0,ximm,RC 01011100111100100111cccccc0QQQQQ. */ +{ "mpymul", 0x5CF27000, 0xFFFFF020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_CC }}, + +/* mpymul<.cc> RB,RB,ximm 01011bbb111100100BBB1111000QQQQQ. */ +{ "mpymul", 0x58F20F00, 0xF8FF8FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_CC }}, + +/* mpymul RA,ximm,u6 01011100011100100111uuuuuuaaaaaa. */ +{ "mpymul", 0x5C727000, 0xFFFFF000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { 0 }}, + +/* mpymul 0,ximm,u6 01011100011100100111uuuuuu111110. */ +{ "mpymul", 0x5C72703E, 0xFFFFF03F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { 0 }}, + +/* mpymul<.cc> 0,ximm,u6 01011100111100100111uuuuuu1QQQQQ. */ +{ "mpymul", 0x5CF27020, 0xFFFFF020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_CC }}, + +/* mpymul RA,limm,RC 01011110001100100111ccccccaaaaaa. */ +{ "mpymul", 0x5E327000, 0xFFFFF000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { 0 }}, + +/* mpymul RA,RB,limm 01011bbb001100100BBB111110aaaaaa. */ +{ "mpymul", 0x58320F80, 0xF8FF8FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { 0 }}, + +/* mpymul 0,limm,RC 01011110001100100111cccccc111110. */ +{ "mpymul", 0x5E32703E, 0xFFFFF03F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { 0 }}, + +/* mpymul 0,RB,limm 01011bbb001100100BBB111110111110. */ +{ "mpymul", 0x58320FBE, 0xF8FF8FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { 0 }}, + +/* mpymul<.cc> 0,limm,RC 01011110111100100111cccccc0QQQQQ. */ +{ "mpymul", 0x5EF27000, 0xFFFFF020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_CC }}, + +/* mpymul<.cc> RB,RB,limm 01011bbb111100100BBB1111100QQQQQ. */ +{ "mpymul", 0x58F20F80, 0xF8FF8FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_CC }}, + +/* mpymul RA,limm,u6 01011110011100100111uuuuuuaaaaaa. */ +{ "mpymul", 0x5E727000, 0xFFFFF000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { 0 }}, + +/* mpymul 0,limm,u6 01011110011100100111uuuuuu111110. */ +{ "mpymul", 0x5E72703E, 0xFFFFF03F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { 0 }}, + +/* mpymul<.cc> 0,limm,u6 01011110111100100111uuuuuu1QQQQQ. */ +{ "mpymul", 0x5EF27020, 0xFFFFF020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_CC }}, + +/* mpymul 0,ximm,s12 01011100101100100111ssssssSSSSSS. */ +{ "mpymul", 0x5CB27000, 0xFFFFF000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { 0 }}, + +/* mpymul 0,limm,s12 01011110101100100111ssssssSSSSSS. */ +{ "mpymul", 0x5EB27000, 0xFFFFF000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { 0 }}, + +/* mpymul RA,ximm,ximm 01011100001100100111111100aaaaaa. */ +{ "mpymul", 0x5C327F00, 0xFFFFFFC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { 0 }}, + +/* mpymul 0,ximm,ximm 01011100001100100111111100111110. */ +{ "mpymul", 0x5C327F3E, 0xFFFFFFFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { 0 }}, + +/* mpymul<.cc> 0,ximm,ximm 010111001111001001111111000QQQQQ. */ +{ "mpymul", 0x5CF27F00, 0xFFFFFFE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_CC }}, + +/* mpymul RA,limm,limm 01011110001100100111111110aaaaaa. */ +{ "mpymul", 0x5E327F80, 0xFFFFFFC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { 0 }}, + +/* mpymul 0,limm,limm 01011110001100100111111110111110. */ +{ "mpymul", 0x5E327FBE, 0xFFFFFFFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { 0 }}, + +/* mpymul<.cc> 0,limm,limm 010111101111001001111111100QQQQQ. */ +{ "mpymul", 0x5EF27F80, 0xFFFFFFE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_CC }}, + +/* mpyu<.f> a,b,c 00100bbb00011101FBBBCCCCCCAAAAAA. */ +{ "mpyu", 0x201D0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RA_CHK, RB, RC }, { C_F }}, + +/* mpyu<.f> 0,b,c 00100bbb00011101FBBBCCCCCC111110. */ +{ "mpyu", 0x201D003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, RB, RC }, { C_F }}, + +/* mpyu<.f><.cc> b,b,c 00100bbb11011101FBBBCCCCCC0QQQQQ. */ +{ "mpyu", 0x20DD0000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RB_CHK, RBdup, RC }, { C_F, C_CC }}, + +/* mpyu<.f> a,b,u6 00100bbb01011101FBBBuuuuuuAAAAAA. */ +{ "mpyu", 0x205D0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RA_CHK, RB, UIMM6_20 }, { C_F }}, + +/* mpyu<.f> 0,b,u6 00100bbb01011101FBBBuuuuuu111110. */ +{ "mpyu", 0x205D003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* mpyu<.f><.cc> b,b,u6 00100bbb11011101FBBBuuuuuu1QQQQQ. */ +{ "mpyu", 0x20DD0020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RB_CHK, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* mpyu<.f> b,b,s12 00100bbb10011101FBBBssssssSSSSSS. */ +{ "mpyu", 0x209D0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RB_CHK, RBdup, SIMM12_20 }, { C_F }}, + +/* mpyu<.f> a,limm,c 0010011000011101F111CCCCCCAAAAAA. */ +{ "mpyu", 0x261D7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RA_CHK, LIMM, RC }, { C_F }}, + +/* mpyu<.f> a,b,limm 00100bbb00011101FBBB111110AAAAAA. */ +{ "mpyu", 0x201D0F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RA_CHK, RB, LIMM }, { C_F }}, + +/* mpyu<.f> 0,limm,c 0010011000011101F111CCCCCC111110. */ +{ "mpyu", 0x261D703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, LIMM, RC }, { C_F }}, + +/* mpyu<.f> 0,b,limm 00100bbb00011101FBBB111110111110. */ +{ "mpyu", 0x201D0FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, RB, LIMM }, { C_F }}, + +/* mpyu<.f><.cc> b,b,limm 00100bbb11011101FBBB1111100QQQQQ. */ +{ "mpyu", 0x20DD0F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RB_CHK, RBdup, LIMM }, { C_F, C_CC }}, + +/* mpyu<.f><.cc> 0,limm,c 0010011011011101F111CCCCCC0QQQQQ. */ +{ "mpyu", 0x26DD7000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* mpyu<.f> a,limm,u6 0010011001011101F111uuuuuuAAAAAA. */ +{ "mpyu", 0x265D7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RA_CHK, LIMM, UIMM6_20 }, { C_F }}, + +/* mpyu<.f> 0,limm,u6 0010011001011101F111uuuuuu111110. */ +{ "mpyu", 0x265D703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* mpyu<.f><.cc> 0,limm,u6 0010011011011101F111uuuuuu1QQQQQ. */ +{ "mpyu", 0x26DD7020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* mpyu<.f> 0,limm,s12 0010011010011101F111ssssssSSSSSS. */ +{ "mpyu", 0x269D7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* mpyu<.f> a,limm,limm 0010011000011101F111111110AAAAAA. */ +{ "mpyu", 0x261D7F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RA_CHK, LIMM, LIMMdup }, { C_F }}, + +/* mpyu<.f> 0,limm,limm 0010011000011101F111111110111110. */ +{ "mpyu", 0x261D7FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* mpyu<.f><.cc> 0,limm,limm 0010011011011101F1111111100QQQQQ. */ +{ "mpyu", 0x26DD7F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* mpyuw<.f> a,b,c 00100bbb00011111FBBBCCCCCCAAAAAA. */ +{ "mpyuw", 0x201F0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { RA_CHK, RB, RC }, { C_F }}, + +/* mpyuw<.f> 0,b,c 00100bbb00011111FBBBCCCCCC111110. */ +{ "mpyuw", 0x201F003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { ZA, RB, RC }, { C_F }}, + +/* mpyuw<.f><.cc> b,b,c 00100bbb11011111FBBBCCCCCC0QQQQQ. */ +{ "mpyuw", 0x20DF0000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { RB_CHK, RBdup, RC }, { C_F, C_CC }}, + +/* mpyuw<.f> a,b,u6 00100bbb01011111FBBBuuuuuuAAAAAA. */ +{ "mpyuw", 0x205F0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { RA_CHK, RB, UIMM6_20 }, { C_F }}, + +/* mpyuw<.f> 0,b,u6 00100bbb01011111FBBBuuuuuu111110. */ +{ "mpyuw", 0x205F003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* mpyuw<.f><.cc> b,b,u6 00100bbb11011111FBBBuuuuuu1QQQQQ. */ +{ "mpyuw", 0x20DF0020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { RB_CHK, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* mpyuw<.f> b,b,s12 00100bbb10011111FBBBssssssSSSSSS. */ +{ "mpyuw", 0x209F0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { RB_CHK, RBdup, SIMM12_20 }, { C_F }}, + +/* mpyuw<.f> a,limm,c 0010011000011111F111CCCCCCAAAAAA. */ +{ "mpyuw", 0x261F7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { RA_CHK, LIMM, RC }, { C_F }}, + +/* mpyuw<.f> a,b,limm 00100bbb00011111FBBB111110AAAAAA. */ +{ "mpyuw", 0x201F0F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { RA_CHK, RB, LIMM }, { C_F }}, + +/* mpyuw<.f> 0,limm,c 0010011000011111F111CCCCCC111110. */ +{ "mpyuw", 0x261F703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { ZA, LIMM, RC }, { C_F }}, + +/* mpyuw<.f> 0,b,limm 00100bbb00011111FBBB111110111110. */ +{ "mpyuw", 0x201F0FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { ZA, RB, LIMM }, { C_F }}, + +/* mpyuw<.f><.cc> b,b,limm 00100bbb11011111FBBB1111100QQQQQ. */ +{ "mpyuw", 0x20DF0F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { RB_CHK, RBdup, LIMM }, { C_F, C_CC }}, + +/* mpyuw<.f><.cc> 0,limm,c 0010011011011111F111CCCCCC0QQQQQ. */ +{ "mpyuw", 0x26DF7000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* mpyuw<.f> a,limm,u6 0010011001011111F111uuuuuuAAAAAA. */ +{ "mpyuw", 0x265F7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { RA_CHK, LIMM, UIMM6_20 }, { C_F }}, + +/* mpyuw<.f> 0,limm,u6 0010011001011111F111uuuuuu111110. */ +{ "mpyuw", 0x265F703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* mpyuw<.f><.cc> 0,limm,u6 0010011011011111F111uuuuuu1QQQQQ. */ +{ "mpyuw", 0x26DF7020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* mpyuw<.f> 0,limm,s12 0010011010011111F111ssssssSSSSSS. */ +{ "mpyuw", 0x269F7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* mpyuw<.f> a,limm,limm 0010011000011111F111111110AAAAAA. */ +{ "mpyuw", 0x261F7F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { RA_CHK, LIMM, LIMMdup }, { C_F }}, + +/* mpyuw<.f> 0,limm,limm 0010011000011111F111111110111110. */ +{ "mpyuw", 0x261F7FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* mpyuw<.f><.cc> 0,limm,limm 0010011011011111F1111111100QQQQQ. */ +{ "mpyuw", 0x26DF7F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* mpyuw_s b,b,c 01111bbbccc01010. */ +{ "mpyuw_s", 0x0000780A, 0x0000F81F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { RB_S, RB_Sdup, RC_S }, { 0 }}, + +/* mpyw<.f> a,b,c 00100bbb00011110FBBBCCCCCCAAAAAA. */ +{ "mpyw", 0x201E0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { RA_CHK, RB, RC }, { C_F }}, + +/* mpyw<.f> 0,b,c 00100bbb00011110FBBBCCCCCC111110. */ +{ "mpyw", 0x201E003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { ZA, RB, RC }, { C_F }}, + +/* mpyw<.f><.cc> b,b,c 00100bbb11011110FBBBCCCCCC0QQQQQ. */ +{ "mpyw", 0x20DE0000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { RB_CHK, RBdup, RC }, { C_F, C_CC }}, + +/* mpyw<.f> a,b,u6 00100bbb01011110FBBBuuuuuuAAAAAA. */ +{ "mpyw", 0x205E0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { RA_CHK, RB, UIMM6_20 }, { C_F }}, + +/* mpyw<.f> 0,b,u6 00100bbb01011110FBBBuuuuuu111110. */ +{ "mpyw", 0x205E003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* mpyw<.f><.cc> b,b,u6 00100bbb11011110FBBBuuuuuu1QQQQQ. */ +{ "mpyw", 0x20DE0020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { RB_CHK, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* mpyw<.f> b,b,s12 00100bbb10011110FBBBssssssSSSSSS. */ +{ "mpyw", 0x209E0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { RB_CHK, RBdup, SIMM12_20 }, { C_F }}, + +/* mpyw<.f> a,limm,c 0010011000011110F111CCCCCCAAAAAA. */ +{ "mpyw", 0x261E7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { RA_CHK, LIMM, RC }, { C_F }}, + +/* mpyw<.f> a,b,limm 00100bbb00011110FBBB111110AAAAAA. */ +{ "mpyw", 0x201E0F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { RA_CHK, RB, LIMM }, { C_F }}, + +/* mpyw<.f> 0,limm,c 0010011000011110F111CCCCCC111110. */ +{ "mpyw", 0x261E703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { ZA, LIMM, RC }, { C_F }}, + +/* mpyw<.f> 0,b,limm 00100bbb00011110FBBB111110111110. */ +{ "mpyw", 0x201E0FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { ZA, RB, LIMM }, { C_F }}, + +/* mpyw<.f><.cc> b,b,limm 00100bbb11011110FBBB1111100QQQQQ. */ +{ "mpyw", 0x20DE0F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { RB_CHK, RBdup, LIMM }, { C_F, C_CC }}, + +/* mpyw<.f><.cc> 0,limm,c 0010011011011110F111CCCCCC0QQQQQ. */ +{ "mpyw", 0x26DE7000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* mpyw<.f> a,limm,u6 0010011001011110F111uuuuuuAAAAAA. */ +{ "mpyw", 0x265E7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { RA_CHK, LIMM, UIMM6_20 }, { C_F }}, + +/* mpyw<.f> 0,limm,u6 0010011001011110F111uuuuuu111110. */ +{ "mpyw", 0x265E703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* mpyw<.f><.cc> 0,limm,u6 0010011011011110F111uuuuuu1QQQQQ. */ +{ "mpyw", 0x26DE7020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* mpyw<.f> 0,limm,s12 0010011010011110F111ssssssSSSSSS. */ +{ "mpyw", 0x269E7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* mpyw<.f> a,limm,limm 0010011000011110F111111110AAAAAA. */ +{ "mpyw", 0x261E7F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { RA_CHK, LIMM, LIMMdup }, { C_F }}, + +/* mpyw<.f> 0,limm,limm 0010011000011110F111111110111110. */ +{ "mpyw", 0x261E7FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* mpyw<.f><.cc> 0,limm,limm 0010011011011110F1111111100QQQQQ. */ +{ "mpyw", 0x26DE7F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* mpyw_s b,b,c 01111bbbccc01001. */ +{ "mpyw_s", 0x00007809, 0x0000F81F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY1E, { RB_S, RB_Sdup, RC_S }, { 0 }}, + +/* mpy_s b,b,c 01111bbbccc01100. */ +{ "mpy_s", 0x0000780C, 0x0000F81F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY6E, { RB_S, RB_Sdup, RC_S }, { 0 }}, + +/* neg<.f> a,b 00100bbb01001110FBBB000000AAAAAA. */ +{ "neg", 0x204E0000, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB }, { C_F }}, + +/* neg<.f><.cc> b,b 00100bbb11001110FBBB0000001QQQQQ. */ +{ "neg", 0x20CE0020, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup }, { C_F, C_CC }}, + +/* neg<.f> a,limm 0010011001001110F111000000AAAAAA. */ +{ "neg", 0x264E7000, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM }, { C_F }}, + +/* neg<.f><.cc> 0,limm 0010011011001110F1110000001QQQQQ. */ +{ "neg", 0x26CE7020, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM }, { C_F, C_CC }}, + + + + + + + + + + + + + +/* neg_s b,c 01111bbbccc10011. */ +{ "neg_s", 0x00007813, 0x0000F81F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB_S, RC_S }, { 0 }}, + +/* nop_s 0111100011100000. */ +{ "nop_s", 0x000078E0, 0x0000FFFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, CONTROL, NONE, { 0 }, { 0 }}, + +/* norm<.f> b,c 00101bbb00101111FBBBCCCCCC000001. */ +{ "norm", 0x282F0001, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { C_F }}, + +/* norm<.f> 0,c 0010111000101111F111CCCCCC000001. */ +{ "norm", 0x2E2F7001, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RC }, { C_F }}, + +/* norm<.f> b,u6 00101bbb01101111FBBBuuuuuu000001. */ +{ "norm", 0x286F0001, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { C_F }}, + +/* norm<.f> 0,u6 0010111001101111F111uuuuuu000001. */ +{ "norm", 0x2E6F7001, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, UIMM6_20 }, { C_F }}, + +/* norm<.f> b,limm 00101bbb00101111FBBB111110000001. */ +{ "norm", 0x282F0F81, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM }, { C_F }}, + +/* norm<.f> 0,limm 0010111000101111F111111110000001. */ +{ "norm", 0x2E2F7F81, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM }, { C_F }}, + +/* normh<.f> b,c 00101bbb00101111FBBBCCCCCC001000. */ +{ "normh", 0x282F0008, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { C_F }}, + +/* normh<.f> 0,c 0010111000101111F111CCCCCC001000. */ +{ "normh", 0x2E2F7008, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RC }, { C_F }}, + +/* normh<.f> b,u6 00101bbb01101111FBBBuuuuuu001000. */ +{ "normh", 0x286F0008, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { C_F }}, + +/* normh<.f> 0,u6 0010111001101111F111uuuuuu001000. */ +{ "normh", 0x2E6F7008, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, UIMM6_20 }, { C_F }}, + +/* normh<.f> b,limm 00101bbb00101111FBBB111110001000. */ +{ "normh", 0x282F0F88, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM }, { C_F }}, + +/* normh<.f> 0,limm 0010111000101111F111111110001000. */ +{ "normh", 0x2E2F7F88, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM }, { C_F }}, + +/* norml<.f> RB,RC 01011bbb00101111FBBBcccccc100001. */ +{ "norml", 0x582F0021, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { C_F }}, + +/* norml<.f> 0,RC 0101111000101111F111cccccc100001. */ +{ "norml", 0x5E2F7021, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RC }, { C_F }}, + +/* norml<.f> RB,u6 01011bbb01101111FBBBuuuuuu100001. */ +{ "norml", 0x586F0021, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { C_F }}, + +/* norml<.f> 0,u6 0101111001101111F111uuuuuu100001. */ +{ "norml", 0x5E6F7021, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, UIMM6_20 }, { C_F }}, + +/* norml<.f> RB,ximm 01011bbb00101111FBBB111100100001. */ +{ "norml", 0x582F0F21, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, XIMM }, { C_F }}, + +/* norml<.f> 0,ximm 0101111000101111F111111100100001. */ +{ "norml", 0x5E2F7F21, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM }, { C_F }}, + +/* norml<.f> RB,limm 01011bbb00101111FBBB111110100001. */ +{ "norml", 0x582F0FA1, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM }, { C_F }}, + +/* norml<.f> 0,limm 0101111000101111F111111110100001. */ +{ "norml", 0x5E2F7FA1, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM }, { C_F }}, + +/* not<.f> b,c 00100bbb00101111FBBBCCCCCC001010. */ +{ "not", 0x202F000A, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RC }, { C_F }}, + +/* not<.f> 0,c 0010011000101111F111CCCCCC001010. */ +{ "not", 0x262F700A, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RC }, { C_F }}, + +/* not<.f> b,u6 00100bbb01101111FBBBuuuuuu001010. */ +{ "not", 0x206F000A, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, UIMM6_20 }, { C_F }}, + +/* not<.f> 0,u6 0010011001101111F111uuuuuu001010. */ +{ "not", 0x266F700A, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, UIMM6_20 }, { C_F }}, + +/* not<.f> b,limm 00100bbb00101111FBBB111110001010. */ +{ "not", 0x202F0F8A, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, LIMM }, { C_F }}, + +/* not<.f> 0,limm 0010011000101111F111111110001010. */ +{ "not", 0x262F7F8A, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM }, { C_F }}, + +/* notl<.f> RB,RC 01011bbb00101111FBBBcccccc001010. */ +{ "notl", 0x582F000A, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { C_F }}, + +/* notl<.f> 0,RC 0101111000101111F111cccccc001010. */ +{ "notl", 0x5E2F700A, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RC }, { C_F }}, + +/* notl<.f> RB,u6 01011bbb01101111FBBBuuuuuu001010. */ +{ "notl", 0x586F000A, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { C_F }}, + +/* notl<.f> 0,u6 0101111001101111F111uuuuuu001010. */ +{ "notl", 0x5E6F700A, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, UIMM6_20 }, { C_F }}, + +/* notl<.f> RB,ximm 01011bbb00101111FBBB111100001010. */ +{ "notl", 0x582F0F0A, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, XIMM }, { C_F }}, + +/* notl<.f> 0,ximm 0101111000101111F111111100001010. */ +{ "notl", 0x5E2F7F0A, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM }, { C_F }}, + +/* notl<.f> RB,limm 01011bbb00101111FBBB111110001010. */ +{ "notl", 0x582F0F8A, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM }, { C_F }}, + +/* notl<.f> 0,limm 0101111000101111F111111110001010. */ +{ "notl", 0x5E2F7F8A, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM }, { C_F }}, + +/* not_s b,c 01111bbbccc10010. */ +{ "not_s", 0x00007812, 0x0000F81F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB_S, RC_S }, { 0 }}, + +/* or<.f> a,b,c 00100bbb00000101FBBBCCCCCCAAAAAA. */ +{ "or", 0x20050000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, RC }, { C_F }}, + +/* or<.f> 0,b,c 00100bbb00000101FBBBCCCCCC111110. */ +{ "or", 0x2005003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, RC }, { C_F }}, + +/* or<.f><.cc> b,b,c 00100bbb11000101FBBBCCCCCC0QQQQQ. */ +{ "or", 0x20C50000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* or<.f> a,b,u6 00100bbb01000101FBBBuuuuuuAAAAAA. */ +{ "or", 0x20450000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* or<.f> 0,b,u6 00100bbb01000101FBBBuuuuuu111110. */ +{ "or", 0x2045003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* or<.f><.cc> b,b,u6 00100bbb11000101FBBBuuuuuu1QQQQQ. */ +{ "or", 0x20C50020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* or<.f> b,b,s12 00100bbb10000101FBBBssssssSSSSSS. */ +{ "or", 0x20850000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* or<.f> a,limm,c 0010011000000101F111CCCCCCAAAAAA. */ +{ "or", 0x26057000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, RC }, { C_F }}, + +/* or<.f> a,b,limm 00100bbb00000101FBBB111110AAAAAA. */ +{ "or", 0x20050F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, LIMM }, { C_F }}, + +/* or<.f> 0,limm,c 0010011000000101F111CCCCCC111110. */ +{ "or", 0x2605703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* or<.f> 0,b,limm 00100bbb00000101FBBB111110111110. */ +{ "or", 0x20050FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* or<.f><.cc> b,b,limm 00100bbb11000101FBBB1111100QQQQQ. */ +{ "or", 0x20C50F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* or<.f><.cc> 0,limm,c 0010011011000101F111CCCCCC0QQQQQ. */ +{ "or", 0x26C57000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* or<.f> a,limm,u6 0010011001000101F111uuuuuuAAAAAA. */ +{ "or", 0x26457000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* or<.f> 0,limm,u6 0010011001000101F111uuuuuu111110. */ +{ "or", 0x2645703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* or<.f><.cc> 0,limm,u6 0010011011000101F111uuuuuu1QQQQQ. */ +{ "or", 0x26C57020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* or<.f> 0,limm,s12 0010011010000101F111ssssssSSSSSS. */ +{ "or", 0x26857000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* or<.f> a,limm,limm 0010011000000101F111111110AAAAAA. */ +{ "or", 0x26057F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* or<.f> 0,limm,limm 0010011000000101F111111110111110. */ +{ "or", 0x26057FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* or<.f><.cc> 0,limm,limm 0010011011000101F1111111100QQQQQ. */ +{ "or", 0x26C57F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* orl<.f> RA,RB,RC 01011bbb00000101FBBBccccccaaaaaa. */ +{ "orl", 0x58050000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* orl<.f> 0,RB,RC 01011bbb00000101FBBBcccccc111110. */ +{ "orl", 0x5805003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* orl<.f><.cc> RB,RB,RC 01011bbb11000101FBBBcccccc0QQQQQ. */ +{ "orl", 0x58C50000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* orl<.f> RA,RB,u6 01011bbb01000101FBBBuuuuuuaaaaaa. */ +{ "orl", 0x58450000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* orl<.f> 0,RB,u6 01011bbb01000101FBBBuuuuuu111110. */ +{ "orl", 0x5845003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* orl<.f><.cc> RB,RB,u6 01011bbb11000101FBBBuuuuuu1QQQQQ. */ +{ "orl", 0x58C50020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* orl<.f> RB,RB,s12 01011bbb10000101FBBBssssssSSSSSS. */ +{ "orl", 0x58850000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* orl<.f> RA,ximm,RC 0101110000000101F111ccccccaaaaaa. */ +{ "orl", 0x5C057000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* orl<.f> RA,RB,ximm 01011bbb00000101FBBB111100aaaaaa. */ +{ "orl", 0x58050F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* orl<.f> 0,ximm,RC 0101110000000101F111cccccc111110. */ +{ "orl", 0x5C05703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* orl<.f> 0,RB,ximm 01011bbb00000101FBBB111100111110. */ +{ "orl", 0x58050F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* orl<.f><.cc> 0,ximm,RC 0101110011000101F111cccccc0QQQQQ. */ +{ "orl", 0x5CC57000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* orl<.f><.cc> RB,RB,ximm 01011bbb11000101FBBB1111000QQQQQ. */ +{ "orl", 0x58C50F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* orl<.f> RA,ximm,u6 0101110001000101F111uuuuuuaaaaaa. */ +{ "orl", 0x5C457000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* orl<.f> 0,ximm,u6 0101110001000101F111uuuuuu111110. */ +{ "orl", 0x5C45703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* orl<.f><.cc> 0,ximm,u6 0101110011000101F111uuuuuu1QQQQQ. */ +{ "orl", 0x5CC57020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* orl<.f> RA,limm,RC 0101111000000101F111ccccccaaaaaa. */ +{ "orl", 0x5E057000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* orl<.f> RA,RB,limm 01011bbb00000101FBBB111110aaaaaa. */ +{ "orl", 0x58050F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LO32 }, { C_F }}, +{ "orl", 0x58050F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* orl<.f> 0,limm,RC 0101111000000101F111cccccc111110. */ +{ "orl", 0x5E05703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* orl<.f> 0,RB,limm 01011bbb00000101FBBB111110111110. */ +{ "orl", 0x58050FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* orl<.f><.cc> 0,limm,RC 0101111011000101F111cccccc0QQQQQ. */ +{ "orl", 0x5EC57000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* orl<.f><.cc> RB,RB,limm 01011bbb11000101FBBB1111100QQQQQ. */ +{ "orl", 0x58C50F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* orl<.f> RA,limm,u6 0101111001000101F111uuuuuuaaaaaa. */ +{ "orl", 0x5E457000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* orl<.f> 0,limm,u6 0101111001000101F111uuuuuu111110. */ +{ "orl", 0x5E45703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* orl<.f><.cc> 0,limm,u6 0101111011000101F111uuuuuu1QQQQQ. */ +{ "orl", 0x5EC57020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* orl<.f> 0,ximm,s12 0101110010000101F111ssssssSSSSSS. */ +{ "orl", 0x5C857000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* orl<.f> 0,limm,s12 0101111010000101F111ssssssSSSSSS. */ +{ "orl", 0x5E857000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* orl<.f> RA,ximm,ximm 0101110000000101F111111100aaaaaa. */ +{ "orl", 0x5C057F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* orl<.f> 0,ximm,ximm 0101110000000101F111111100111110. */ +{ "orl", 0x5C057F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* orl<.f><.cc> 0,ximm,ximm 0101110011000101F1111111000QQQQQ. */ +{ "orl", 0x5CC57F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* orl<.f> RA,limm,limm 0101111000000101F111111110aaaaaa. */ +{ "orl", 0x5E057F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* orl<.f> 0,limm,limm 0101111000000101F111111110111110. */ +{ "orl", 0x5E057FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* orl<.f><.cc> 0,limm,limm 0101111011000101F1111111100QQQQQ. */ +{ "orl", 0x5EC57F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* orl_s b,b,c 01111bbbccc10111. */ +{ "orl_s", 0x00007817, 0x0000F81F, ARC_OPCODE_ARC64, ARITH, NONE, { RB_S, RB_Sdup, RC_S }, { 0 }}, + +/* orl_s h,h,ximm 01110000hhh110HH. */ +{ "orl_s", 0x00007018, 0x0000FF1C, ARC_OPCODE_ARC64, ARITH, NONE, { RH_S, RH_Sdup, LO32 }, { 0 }}, + +/* orl_s h,PCL,ximm 01110010hhh110HH. */ +{ "orl_s", 0x00007218, 0x0000FF1C, ARC_OPCODE_ARC64, ARITH, NONE, { RH_S, PCL_S, LO32 }, { 0 }}, + +/* or_s b,b,c 01111bbbccc00101. */ +{ "or_s", 0x00007805, 0x0000F81F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB_S, RB_Sdup, RC_S }, { 0 }}, + +/* popdl_s b 11000bbb1101BBB1. */ +{ "popdl_s", 0x0000C0D1, 0x0000F8F1, ARC_OPCODE_ARC64, ARITH, NONE, { RBB_S }, { 0 }}, + +/* popl_s b 11000bbb1100BBB1. */ +{ "popl_s", 0x0000C0C1, 0x0000F8F1, ARC_OPCODE_ARC64, ARITH, NONE, { RBB_S }, { 0 }}, + +/* prealloc<.aa> b,c 00100bbbaa1100010BBBCCCCCC111110. */ +{ "prealloc", 0x2031003E, 0xF83F803F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MEMORY, NONE, { BRAKET, RB, RC, BRAKETdup }, { C_AA8 }}, + +/* prealloc<.aa> b,s9 00010bbbssssssssSBBB0aa001111110. */ +{ "prealloc", 0x1000007E, 0xF80009FF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MEMORY, NONE, { BRAKET, RB, SIMM9_8, BRAKETdup }, { C_AA21 }}, + +/* prealloc<.aa> b,limm 00100bbbaa1100010BBB111110111110. */ +{ "prealloc", 0x20310FBE, 0xF83F8FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MEMORY, NONE, { BRAKET, RB, LIMM, BRAKETdup }, { C_AA8 }}, + +/* prealloc limm,c 00100110RR1100010111CCCCCC111110. */ +{ "prealloc", 0x2631703E, 0xFF3FF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MEMORY, NONE, { BRAKET, LIMM, RC, BRAKETdup }, { 0 }}, + +/* prealloc limm 000101100000000001110RR001111110. */ +{ "prealloc", 0x1600707E, 0xFFFFF9FF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MEMORY, NONE, { BRAKET, LIMM, BRAKETdup }, { 0 }}, + +/* prealloc limm,s9 00010110ssssssssS1110RR001111110. */ +{ "prealloc", 0x1600707E, 0xFF0079FF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MEMORY, NONE, { BRAKET, LIMM, SIMM9_8, BRAKETdup }, { 0 }}, + +/* prefetch<.aa> b,c 00100bbbaa1100000BBBCCCCCC111110. */ +{ "prefetch", 0x2030003E, 0xF83F803F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MEMORY, NONE, { BRAKET, RB, RC, BRAKETdup }, { C_AA8 }}, + +/* prefetch<.aa> b,s9 00010bbbssssssssSBBB0aa000111110. */ +{ "prefetch", 0x1000003E, 0xF80009FF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MEMORY, NONE, { BRAKET, RB, SIMM9_8, BRAKETdup }, { C_AA21 }}, + +/* prefetch<.aa> b,limm 00100bbbaa1100000BBB111110111110. */ +{ "prefetch", 0x20300FBE, 0xF83F8FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MEMORY, NONE, { BRAKET, RB, LIMM, BRAKETdup }, { C_AA8 }}, + +/* prefetch limm,c 00100110RR1100000111CCCCCC111110. */ +{ "prefetch", 0x2630703E, 0xFF3FF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MEMORY, NONE, { BRAKET, LIMM, RC, BRAKETdup }, { 0 }}, + +/* prefetch limm 000101100000000001110RR000111110. */ +{ "prefetch", 0x1600703E, 0xFFFFF9FF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MEMORY, NONE, { BRAKET, LIMM, BRAKETdup }, { 0 }}, + +/* prefetch limm,s9 00010110ssssssssS1110RR000111110. */ +{ "prefetch", 0x1600703E, 0xFF0079FF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MEMORY, NONE, { BRAKET, LIMM, SIMM9_8, BRAKETdup }, { 0 }}, + +/* prefetchw<.aa> b,c 00100bbbaa1100001BBBCCCCCC111110. */ +{ "prefetchw", 0x2030803E, 0xF83F803F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MEMORY, NONE, { BRAKET, RB, RC, BRAKETdup }, { C_AA8 }}, + +/* prefetchw<.aa> b,s9 00010bbbssssssssSBBB1aa000111110. */ +{ "prefetchw", 0x1000083E, 0xF80009FF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MEMORY, NONE, { BRAKET, RB, SIMM9_8, BRAKETdup }, { C_AA21 }}, + +/* prefetchw<.aa> b,limm 00100bbbaa1100001BBB111110111110. */ +{ "prefetchw", 0x20308FBE, 0xF83F8FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MEMORY, NONE, { BRAKET, RB, LIMM, BRAKETdup }, { C_AA8 }}, + +/* prefetchw limm,c 00100110RR1100001111CCCCCC111110. */ +{ "prefetchw", 0x2630F03E, 0xFF3FF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MEMORY, NONE, { BRAKET, LIMM, RC, BRAKETdup }, { 0 }}, + +/* prefetchw limm 000101100000000001111RR000111110. */ +{ "prefetchw", 0x1600783E, 0xFFFFF9FF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MEMORY, NONE, { BRAKET, LIMM, BRAKETdup }, { 0 }}, + +/* prefetchw limm,s9 00010110ssssssssS1111RR000111110. */ +{ "prefetchw", 0x1600783E, 0xFF0079FF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MEMORY, NONE, { BRAKET, LIMM, SIMM9_8, BRAKETdup }, { 0 }}, + +/* pushdl_s b 11000bbb1111BBB1. */ +{ "pushdl_s", 0x0000C0F1, 0x0000F8F1, ARC_OPCODE_ARC64, ARITH, NONE, { RBB_S }, { 0 }}, + +/* pushl_s b 11000bbb1110BBB1. */ +{ "pushl_s", 0x0000C0E1, 0x0000F8F1, ARC_OPCODE_ARC64, ARITH, NONE, { RBB_S }, { 0 }}, + +/* qmach<.f> a,b,c 00101bbb00110100FBBBCCCCCCAAAAAA. */ +{ "qmach", 0x28340000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, RC }, { C_F }}, + +/* qmach<.f> 0,b,c 00101bbb00110100FBBBCCCCCC111110. */ +{ "qmach", 0x2834003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, RC }, { C_F }}, + +/* qmach<.f><.cc> b,b,c 00101bbb11110100FBBBCCCCCC0QQQQQ. */ +{ "qmach", 0x28F40000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, RC }, { C_F, C_CC }}, + +/* qmach<.f> a,b,u6 00101bbb01110100FBBBuuuuuuAAAAAA. */ +{ "qmach", 0x28740000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, UIMM6_20 }, { C_F }}, + +/* qmach<.f> 0,b,u6 00101bbb01110100FBBBuuuuuu111110. */ +{ "qmach", 0x2874003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* qmach<.f><.cc> b,b,u6 00101bbb11110100FBBBuuuuuu1QQQQQ. */ +{ "qmach", 0x28F40020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* qmach<.f> b,b,s12 00101bbb10110100FBBBssssssSSSSSS. */ +{ "qmach", 0x28B40000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, SIMM12_20 }, { C_F }}, + +/* qmach<.f> a,limm,c 0010111000110100F111CCCCCCAAAAAA. */ +{ "qmach", 0x2E347000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, RC }, { C_F }}, + +/* qmach<.f> a,b,limm 00101bbb00110100FBBB111110AAAAAA. */ +{ "qmach", 0x28340F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, LIMM }, { C_F }}, + +/* qmach<.f> 0,limm,c 0010111000110100F111CCCCCC111110. */ +{ "qmach", 0x2E34703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, RC }, { C_F }}, + +/* qmach<.f> 0,b,limm 00101bbb00110100FBBB111110111110. */ +{ "qmach", 0x28340FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, LIMM }, { C_F }}, + +/* qmach<.f><.cc> b,b,limm 00101bbb11110100FBBB1111100QQQQQ. */ +{ "qmach", 0x28F40F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, LIMM }, { C_F, C_CC }}, + +/* qmach<.f><.cc> 0,limm,c 0010111011110100F111CCCCCC0QQQQQ. */ +{ "qmach", 0x2EF47000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* qmach<.f> a,limm,u6 0010111001110100F111uuuuuuAAAAAA. */ +{ "qmach", 0x2E747000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, UIMM6_20 }, { C_F }}, + +/* qmach<.f> 0,limm,u6 0010111001110100F111uuuuuu111110. */ +{ "qmach", 0x2E74703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* qmach<.f><.cc> 0,limm,u6 0010111011110100F111uuuuuu1QQQQQ. */ +{ "qmach", 0x2EF47020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* qmach<.f> 0,limm,s12 0010111010110100F111ssssssSSSSSS. */ +{ "qmach", 0x2EB47000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* qmach<.f> a,limm,limm 0010111000110100F111111110AAAAAA. */ +{ "qmach", 0x2E347F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, LIMMdup }, { C_F }}, + +/* qmach<.f> 0,limm,limm 0010111000110100F111111110111110. */ +{ "qmach", 0x2E347FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* qmach<.f><.cc> 0,limm,limm 0010111011110100F1111111100QQQQQ. */ +{ "qmach", 0x2EF47F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* qmachu<.f> a,b,c 00101bbb00110101FBBBCCCCCCAAAAAA. */ +{ "qmachu", 0x28350000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, RC }, { C_F }}, + +/* qmachu<.f> 0,b,c 00101bbb00110101FBBBCCCCCC111110. */ +{ "qmachu", 0x2835003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, RC }, { C_F }}, + +/* qmachu<.f><.cc> b,b,c 00101bbb11110101FBBBCCCCCC0QQQQQ. */ +{ "qmachu", 0x28F50000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, RC }, { C_F, C_CC }}, + +/* qmachu<.f> a,b,u6 00101bbb01110101FBBBuuuuuuAAAAAA. */ +{ "qmachu", 0x28750000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, UIMM6_20 }, { C_F }}, + +/* qmachu<.f> 0,b,u6 00101bbb01110101FBBBuuuuuu111110. */ +{ "qmachu", 0x2875003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* qmachu<.f><.cc> b,b,u6 00101bbb11110101FBBBuuuuuu1QQQQQ. */ +{ "qmachu", 0x28F50020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* qmachu<.f> b,b,s12 00101bbb10110101FBBBssssssSSSSSS. */ +{ "qmachu", 0x28B50000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, SIMM12_20 }, { C_F }}, + +/* qmachu<.f> a,limm,c 0010111000110101F111CCCCCCAAAAAA. */ +{ "qmachu", 0x2E357000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, RC }, { C_F }}, + +/* qmachu<.f> a,b,limm 00101bbb00110101FBBB111110AAAAAA. */ +{ "qmachu", 0x28350F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, LIMM }, { C_F }}, + +/* qmachu<.f> 0,limm,c 0010111000110101F111CCCCCC111110. */ +{ "qmachu", 0x2E35703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, RC }, { C_F }}, + +/* qmachu<.f> 0,b,limm 00101bbb00110101FBBB111110111110. */ +{ "qmachu", 0x28350FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, LIMM }, { C_F }}, + +/* qmachu<.f><.cc> b,b,limm 00101bbb11110101FBBB1111100QQQQQ. */ +{ "qmachu", 0x28F50F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, LIMM }, { C_F, C_CC }}, + +/* qmachu<.f><.cc> 0,limm,c 0010111011110101F111CCCCCC0QQQQQ. */ +{ "qmachu", 0x2EF57000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* qmachu<.f> a,limm,u6 0010111001110101F111uuuuuuAAAAAA. */ +{ "qmachu", 0x2E757000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, UIMM6_20 }, { C_F }}, + +/* qmachu<.f> 0,limm,u6 0010111001110101F111uuuuuu111110. */ +{ "qmachu", 0x2E75703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* qmachu<.f><.cc> 0,limm,u6 0010111011110101F111uuuuuu1QQQQQ. */ +{ "qmachu", 0x2EF57020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* qmachu<.f> 0,limm,s12 0010111010110101F111ssssssSSSSSS. */ +{ "qmachu", 0x2EB57000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* qmachu<.f> a,limm,limm 0010111000110101F111111110AAAAAA. */ +{ "qmachu", 0x2E357F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, LIMMdup }, { C_F }}, + +/* qmachu<.f> 0,limm,limm 0010111000110101F111111110111110. */ +{ "qmachu", 0x2E357FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* qmachu<.f><.cc> 0,limm,limm 0010111011110101F1111111100QQQQQ. */ +{ "qmachu", 0x2EF57F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* qmpyh<.f> a,b,c 00101bbb00110000FBBBCCCCCCAAAAAA. */ +{ "qmpyh", 0x28300000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, RC }, { C_F }}, + +/* qmpyh<.f> 0,b,c 00101bbb00110000FBBBCCCCCC111110. */ +{ "qmpyh", 0x2830003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, RC }, { C_F }}, + +/* qmpyh<.f><.cc> b,b,c 00101bbb11110000FBBBCCCCCC0QQQQQ. */ +{ "qmpyh", 0x28F00000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, RC }, { C_F, C_CC }}, + +/* qmpyh<.f> a,b,u6 00101bbb01110000FBBBuuuuuuAAAAAA. */ +{ "qmpyh", 0x28700000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, UIMM6_20 }, { C_F }}, + +/* qmpyh<.f> 0,b,u6 00101bbb01110000FBBBuuuuuu111110. */ +{ "qmpyh", 0x2870003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* qmpyh<.f><.cc> b,b,u6 00101bbb11110000FBBBuuuuuu1QQQQQ. */ +{ "qmpyh", 0x28F00020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* qmpyh<.f> b,b,s12 00101bbb10110000FBBBssssssSSSSSS. */ +{ "qmpyh", 0x28B00000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, SIMM12_20 }, { C_F }}, + +/* qmpyh<.f> a,limm,c 0010111000110000F111CCCCCCAAAAAA. */ +{ "qmpyh", 0x2E307000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, RC }, { C_F }}, + +/* qmpyh<.f> a,b,limm 00101bbb00110000FBBB111110AAAAAA. */ +{ "qmpyh", 0x28300F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, LIMM }, { C_F }}, + +/* qmpyh<.f> 0,limm,c 0010111000110000F111CCCCCC111110. */ +{ "qmpyh", 0x2E30703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, RC }, { C_F }}, + +/* qmpyh<.f> 0,b,limm 00101bbb00110000FBBB111110111110. */ +{ "qmpyh", 0x28300FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, LIMM }, { C_F }}, + +/* qmpyh<.f><.cc> b,b,limm 00101bbb11110000FBBB1111100QQQQQ. */ +{ "qmpyh", 0x28F00F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, LIMM }, { C_F, C_CC }}, + +/* qmpyh<.f><.cc> 0,limm,c 0010111011110000F111CCCCCC0QQQQQ. */ +{ "qmpyh", 0x2EF07000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* qmpyh<.f> a,limm,u6 0010111001110000F111uuuuuuAAAAAA. */ +{ "qmpyh", 0x2E707000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, UIMM6_20 }, { C_F }}, + +/* qmpyh<.f> 0,limm,u6 0010111001110000F111uuuuuu111110. */ +{ "qmpyh", 0x2E70703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* qmpyh<.f><.cc> 0,limm,u6 0010111011110000F111uuuuuu1QQQQQ. */ +{ "qmpyh", 0x2EF07020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* qmpyh<.f> 0,limm,s12 0010111010110000F111ssssssSSSSSS. */ +{ "qmpyh", 0x2EB07000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* qmpyh<.f> a,limm,limm 0010111000110000F111111110AAAAAA. */ +{ "qmpyh", 0x2E307F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, LIMMdup }, { C_F }}, + +/* qmpyh<.f> 0,limm,limm 0010111000110000F111111110111110. */ +{ "qmpyh", 0x2E307FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* qmpyh<.f><.cc> 0,limm,limm 0010111011110000F1111111100QQQQQ. */ +{ "qmpyh", 0x2EF07F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* qmpyhu<.f> a,b,c 00101bbb00110001FBBBCCCCCCAAAAAA. */ +{ "qmpyhu", 0x28310000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, RC }, { C_F }}, + +/* qmpyhu<.f> 0,b,c 00101bbb00110001FBBBCCCCCC111110. */ +{ "qmpyhu", 0x2831003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, RC }, { C_F }}, + +/* qmpyhu<.f><.cc> b,b,c 00101bbb11110001FBBBCCCCCC0QQQQQ. */ +{ "qmpyhu", 0x28F10000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, RC }, { C_F, C_CC }}, + +/* qmpyhu<.f> a,b,u6 00101bbb01110001FBBBuuuuuuAAAAAA. */ +{ "qmpyhu", 0x28710000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, UIMM6_20 }, { C_F }}, + +/* qmpyhu<.f> 0,b,u6 00101bbb01110001FBBBuuuuuu111110. */ +{ "qmpyhu", 0x2871003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* qmpyhu<.f><.cc> b,b,u6 00101bbb11110001FBBBuuuuuu1QQQQQ. */ +{ "qmpyhu", 0x28F10020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* qmpyhu<.f> b,b,s12 00101bbb10110001FBBBssssssSSSSSS. */ +{ "qmpyhu", 0x28B10000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, SIMM12_20 }, { C_F }}, + +/* qmpyhu<.f> a,limm,c 0010111000110001F111CCCCCCAAAAAA. */ +{ "qmpyhu", 0x2E317000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, RC }, { C_F }}, + +/* qmpyhu<.f> a,b,limm 00101bbb00110001FBBB111110AAAAAA. */ +{ "qmpyhu", 0x28310F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, LIMM }, { C_F }}, + +/* qmpyhu<.f> 0,limm,c 0010111000110001F111CCCCCC111110. */ +{ "qmpyhu", 0x2E31703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, RC }, { C_F }}, + +/* qmpyhu<.f> 0,b,limm 00101bbb00110001FBBB111110111110. */ +{ "qmpyhu", 0x28310FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, LIMM }, { C_F }}, + +/* qmpyhu<.f><.cc> b,b,limm 00101bbb11110001FBBB1111100QQQQQ. */ +{ "qmpyhu", 0x28F10F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, LIMM }, { C_F, C_CC }}, + +/* qmpyhu<.f><.cc> 0,limm,c 0010111011110001F111CCCCCC0QQQQQ. */ +{ "qmpyhu", 0x2EF17000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* qmpyhu<.f> a,limm,u6 0010111001110001F111uuuuuuAAAAAA. */ +{ "qmpyhu", 0x2E717000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, UIMM6_20 }, { C_F }}, + +/* qmpyhu<.f> 0,limm,u6 0010111001110001F111uuuuuu111110. */ +{ "qmpyhu", 0x2E71703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* qmpyhu<.f><.cc> 0,limm,u6 0010111011110001F111uuuuuu1QQQQQ. */ +{ "qmpyhu", 0x2EF17020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* qmpyhu<.f> 0,limm,s12 0010111010110001F111ssssssSSSSSS. */ +{ "qmpyhu", 0x2EB17000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* qmpyhu<.f> a,limm,limm 0010111000110001F111111110AAAAAA. */ +{ "qmpyhu", 0x2E317F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, LIMMdup }, { C_F }}, + +/* qmpyhu<.f> 0,limm,limm 0010111000110001F111111110111110. */ +{ "qmpyhu", 0x2E317FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* qmpyhu<.f><.cc> 0,limm,limm 0010111011110001F1111111100QQQQQ. */ +{ "qmpyhu", 0x2EF17F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* rcmp b,c 00100bbb000011011BBBCCCCCCRRRRRR. */ +{ "rcmp", 0x200D8000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { 0 }}, + +/* rcmp<.cc> b,c 00100bbb110011011BBBCCCCCC0QQQQQ. */ +{ "rcmp", 0x20CD8000, 0xF8FF8020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { C_CC }}, + +/* rcmp b,u6 00100bbb010011011BBBuuuuuuRRRRRR. */ +{ "rcmp", 0x204D8000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { 0 }}, + +/* rcmp<.cc> b,u6 00100bbb110011011BBBuuuuuu1QQQQQ. */ +{ "rcmp", 0x20CD8020, 0xF8FF8020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { C_CC }}, + +/* rcmp b,s12 00100bbb100011011BBBssssssSSSSSS. */ +{ "rcmp", 0x208D8000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, SIMM12_20 }, { 0 }}, + +/* rcmp limm,c 00100110000011011111CCCCCCRRRRRR. */ +{ "rcmp", 0x260DF000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { LIMM, RC }, { 0 }}, + +/* rcmp b,limm 00100bbb000011011BBB111110RRRRRR. */ +{ "rcmp", 0x200D8F80, 0xF8FF8FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM }, { 0 }}, + +/* rcmp<.cc> limm,c 00100110110011011111CCCCCC0QQQQQ. */ +{ "rcmp", 0x26CDF000, 0xFFFFF020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { LIMM, RC }, { C_CC }}, + +/* rcmp<.cc> b,limm 00100bbb110011011BBB1111100QQQQQ. */ +{ "rcmp", 0x20CD8F80, 0xF8FF8FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM }, { C_CC }}, + +/* rcmp limm,u6 00100110010011011111uuuuuuRRRRRR. */ +{ "rcmp", 0x264DF000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { LIMM, UIMM6_20 }, { 0 }}, + +/* rcmp<.cc> limm,u6 00100110110011011111uuuuuu1QQQQQ. */ +{ "rcmp", 0x26CDF020, 0xFFFFF020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { LIMM, UIMM6_20 }, { C_CC }}, + +/* rcmp limm,s12 00100110100011011111ssssssSSSSSS. */ +{ "rcmp", 0x268DF000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { LIMM, SIMM12_20 }, { 0 }}, + +/* rcmp limm,limm 00100110000011011111111110RRRRRR. */ +{ "rcmp", 0x260DFF80, 0xFFFFFFC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { LIMM, LIMMdup }, { 0 }}, + +/* rcmp<.cc> limm,limm 001001101100110111111111100QQQQQ. */ +{ "rcmp", 0x26CDFF80, 0xFFFFFFE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { LIMM, LIMMdup }, { C_CC }}, + +/* rcmpl RB,RC 01011bbb000011011BBBccccccRRRRRR. */ +{ "rcmpl", 0x580D8000, 0xF8FF8000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { 0 }}, + +/* rcmpl<.cc> RB,RC 01011bbb110011011BBBcccccc0QQQQQ. */ +{ "rcmpl", 0x58CD8000, 0xF8FF8020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { C_CC }}, + +/* rcmpl RB,u6 01011bbb010011011BBBuuuuuuRRRRRR. */ +{ "rcmpl", 0x584D8000, 0xF8FF8000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { 0 }}, + +/* rcmpl<.cc> RB,u6 01011bbb110011011BBBuuuuuu1QQQQQ. */ +{ "rcmpl", 0x58CD8020, 0xF8FF8020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { C_CC }}, + +/* rcmpl RB,s12 01011bbb100011011BBBssssssSSSSSS. */ +{ "rcmpl", 0x588D8000, 0xF8FF8000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, SIMM12_20 }, { 0 }}, + +/* rcmpl ximm,RC 01011100000011011111ccccccRRRRRR. */ +{ "rcmpl", 0x5C0DF000, 0xFFFFF000, ARC_OPCODE_ARC64, ARITH, NONE, { XIMM, RC }, { 0 }}, + +/* rcmpl RB,ximm 01011bbb000011011BBB111100RRRRRR. */ +{ "rcmpl", 0x580D8F00, 0xF8FF8FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, XIMM }, { 0 }}, + +/* rcmpl<.cc> RB,ximm 01011bbb110011011BBB1111000QQQQQ. */ +{ "rcmpl", 0x58CD8F00, 0xF8FF8FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, XIMM }, { C_CC }}, + +/* rcmpl limm,RC 01011110000011011111ccccccRRRRRR. */ +{ "rcmpl", 0x5E0DF000, 0xFFFFF000, ARC_OPCODE_ARC64, ARITH, NONE, { LIMM, RC }, { 0 }}, + +/* rcmpl RB,limm 01011bbb000011011BBB111110RRRRRR. */ +{ "rcmpl", 0x580D8F80, 0xF8FF8FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM }, { 0 }}, + +/* rcmpl<.cc> RB,limm 01011bbb110011011BBB1111100QQQQQ. */ +{ "rcmpl", 0x58CD8F80, 0xF8FF8FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM }, { C_CC }}, + +/* rcmpl limm,u6 01011110010011011111uuuuuuRRRRRR. */ +{ "rcmpl", 0x5E4DF000, 0xFFFFF000, ARC_OPCODE_ARC64, ARITH, NONE, { LIMM, UIMM6_20 }, { 0 }}, + +/* rem<.f> a,b,c 00101bbb00001000FBBBCCCCCCAAAAAA. */ +{ "rem", 0x28080000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RA_CHK, RB, RC }, { C_F }}, + +/* rem<.f> 0,b,c 00101bbb00001000FBBBCCCCCC111110. */ +{ "rem", 0x2808003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, RB, RC }, { C_F }}, + +/* rem<.f><.cc> b,b,c 00101bbb11001000FBBBCCCCCC0QQQQQ. */ +{ "rem", 0x28C80000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RB_CHK, RBdup, RC }, { C_F, C_CC }}, + +/* rem<.f> a,b,u6 00101bbb01001000FBBBuuuuuuAAAAAA. */ +{ "rem", 0x28480000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RA_CHK, RB, UIMM6_20 }, { C_F }}, + +/* rem<.f> 0,b,u6 00101bbb01001000FBBBuuuuuu111110. */ +{ "rem", 0x2848003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* rem<.f><.cc> b,b,u6 00101bbb11001000FBBBuuuuuu1QQQQQ. */ +{ "rem", 0x28C80020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RB_CHK, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* rem<.f> b,b,s12 00101bbb10001000FBBBssssssSSSSSS. */ +{ "rem", 0x28880000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RB_CHK, RBdup, SIMM12_20 }, { C_F }}, + +/* rem<.f> a,limm,c 0010111000001000F111CCCCCCAAAAAA. */ +{ "rem", 0x2E087000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RA_CHK, LIMM, RC }, { C_F }}, + +/* rem<.f> a,b,limm 00101bbb00001000FBBB111110AAAAAA. */ +{ "rem", 0x28080F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RA_CHK, RB, LIMM }, { C_F }}, + +/* rem<.f> 0,limm,c 0010111000001000F111CCCCCC111110. */ +{ "rem", 0x2E08703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, LIMM, RC }, { C_F }}, + +/* rem<.f> 0,b,limm 00101bbb00001000FBBB111110111110. */ +{ "rem", 0x28080FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, RB, LIMM }, { C_F }}, + +/* rem<.f><.cc> b,b,limm 00101bbb11001000FBBB1111100QQQQQ. */ +{ "rem", 0x28C80F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RB_CHK, RBdup, LIMM }, { C_F, C_CC }}, + +/* rem<.f><.cc> 0,limm,c 0010111011001000F111CCCCCC0QQQQQ. */ +{ "rem", 0x2EC87000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* rem<.f> a,limm,u6 0010111001001000F111uuuuuuAAAAAA. */ +{ "rem", 0x2E487000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RA_CHK, LIMM, UIMM6_20 }, { C_F }}, + +/* rem<.f> 0,limm,u6 0010111001001000F111uuuuuu111110. */ +{ "rem", 0x2E48703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* rem<.f><.cc> 0,limm,u6 0010111011001000F111uuuuuu1QQQQQ. */ +{ "rem", 0x2EC87020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* rem<.f> 0,limm,s12 0010111010001000F111ssssssSSSSSS. */ +{ "rem", 0x2E887000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* rem<.f> a,limm,limm 0010111000001000F111111110AAAAAA. */ +{ "rem", 0x2E087F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RA_CHK, LIMM, LIMMdup }, { C_F }}, + +/* rem<.f> 0,limm,limm 0010111000001000F111111110111110. */ +{ "rem", 0x2E087FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* rem<.f><.cc> 0,limm,limm 0010111011001000F1111111100QQQQQ. */ +{ "rem", 0x2EC87F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* reml<.f> RA,RB,RC 01011bbb00101000FBBBccccccaaaaaa. */ +{ "reml", 0x58280000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* reml<.f> 0,RB,RC 01011bbb00101000FBBBcccccc111110. */ +{ "reml", 0x5828003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* reml<.f><.cc> RB,RB,RC 01011bbb11101000FBBBcccccc0QQQQQ. */ +{ "reml", 0x58E80000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* reml<.f> RA,RB,u6 01011bbb01101000FBBBuuuuuuaaaaaa. */ +{ "reml", 0x58680000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* reml<.f> 0,RB,u6 01011bbb01101000FBBBuuuuuu111110. */ +{ "reml", 0x5868003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* reml<.f><.cc> RB,RB,u6 01011bbb11101000FBBBuuuuuu1QQQQQ. */ +{ "reml", 0x58E80020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* reml<.f> RB,RB,s12 01011bbb10101000FBBBssssssSSSSSS. */ +{ "reml", 0x58A80000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* reml<.f> RA,ximm,RC 0101110000101000F111ccccccaaaaaa. */ +{ "reml", 0x5C287000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* reml<.f> RA,RB,ximm 01011bbb00101000FBBB111100aaaaaa. */ +{ "reml", 0x58280F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* reml<.f> 0,ximm,RC 0101110000101000F111cccccc111110. */ +{ "reml", 0x5C28703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* reml<.f> 0,RB,ximm 01011bbb00101000FBBB111100111110. */ +{ "reml", 0x58280F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* reml<.f><.cc> 0,ximm,RC 0101110011101000F111cccccc0QQQQQ. */ +{ "reml", 0x5CE87000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* reml<.f><.cc> RB,RB,ximm 01011bbb11101000FBBB1111000QQQQQ. */ +{ "reml", 0x58E80F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* reml<.f> RA,ximm,u6 0101110001101000F111uuuuuuaaaaaa. */ +{ "reml", 0x5C687000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* reml<.f> 0,ximm,u6 0101110001101000F111uuuuuu111110. */ +{ "reml", 0x5C68703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* reml<.f><.cc> 0,ximm,u6 0101110011101000F111uuuuuu1QQQQQ. */ +{ "reml", 0x5CE87020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* reml<.f> RA,limm,RC 0101111000101000F111ccccccaaaaaa. */ +{ "reml", 0x5E287000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* reml<.f> RA,RB,limm 01011bbb00101000FBBB111110aaaaaa. */ +{ "reml", 0x58280F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* reml<.f> 0,limm,RC 0101111000101000F111cccccc111110. */ +{ "reml", 0x5E28703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* reml<.f> 0,RB,limm 01011bbb00101000FBBB111110111110. */ +{ "reml", 0x58280FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* reml<.f><.cc> 0,limm,RC 0101111011101000F111cccccc0QQQQQ. */ +{ "reml", 0x5EE87000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* reml<.f><.cc> RB,RB,limm 01011bbb11101000FBBB1111100QQQQQ. */ +{ "reml", 0x58E80F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* reml<.f> RA,limm,u6 0101111001101000F111uuuuuuaaaaaa. */ +{ "reml", 0x5E687000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* reml<.f> 0,limm,u6 0101111001101000F111uuuuuu111110. */ +{ "reml", 0x5E68703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* reml<.f><.cc> 0,limm,u6 0101111011101000F111uuuuuu1QQQQQ. */ +{ "reml", 0x5EE87020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* reml<.f> 0,ximm,s12 0101110010101000F111ssssssSSSSSS. */ +{ "reml", 0x5CA87000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* reml<.f> 0,limm,s12 0101111010101000F111ssssssSSSSSS. */ +{ "reml", 0x5EA87000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* reml<.f> RA,ximm,ximm 0101110000101000F111111100aaaaaa. */ +{ "reml", 0x5C287F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* reml<.f> 0,ximm,ximm 0101110000101000F111111100111110. */ +{ "reml", 0x5C287F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* reml<.f><.cc> 0,ximm,ximm 0101110011101000F1111111000QQQQQ. */ +{ "reml", 0x5CE87F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* reml<.f> RA,limm,limm 0101111000101000F111111110aaaaaa. */ +{ "reml", 0x5E287F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* reml<.f> 0,limm,limm 0101111000101000F111111110111110. */ +{ "reml", 0x5E287FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* reml<.f><.cc> 0,limm,limm 0101111011101000F1111111100QQQQQ. */ +{ "reml", 0x5EE87F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* remu<.f> a,b,c 00101bbb00001001FBBBCCCCCCAAAAAA. */ +{ "remu", 0x28090000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RA_CHK, RB, RC }, { C_F }}, + +/* remu<.f> 0,b,c 00101bbb00001001FBBBCCCCCC111110. */ +{ "remu", 0x2809003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, RB, RC }, { C_F }}, + +/* remu<.f><.cc> b,b,c 00101bbb11001001FBBBCCCCCC0QQQQQ. */ +{ "remu", 0x28C90000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RB_CHK, RBdup, RC }, { C_F, C_CC }}, + +/* remu<.f> a,b,u6 00101bbb01001001FBBBuuuuuuAAAAAA. */ +{ "remu", 0x28490000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RA_CHK, RB, UIMM6_20 }, { C_F }}, + +/* remu<.f> 0,b,u6 00101bbb01001001FBBBuuuuuu111110. */ +{ "remu", 0x2849003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* remu<.f><.cc> b,b,u6 00101bbb11001001FBBBuuuuuu1QQQQQ. */ +{ "remu", 0x28C90020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RB_CHK, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* remu<.f> b,b,s12 00101bbb10001001FBBBssssssSSSSSS. */ +{ "remu", 0x28890000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RB_CHK, RBdup, SIMM12_20 }, { C_F }}, + +/* remu<.f> a,limm,c 0010111000001001F111CCCCCCAAAAAA. */ +{ "remu", 0x2E097000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RA_CHK, LIMM, RC }, { C_F }}, + +/* remu<.f> a,b,limm 00101bbb00001001FBBB111110AAAAAA. */ +{ "remu", 0x28090F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RA_CHK, RB, LIMM }, { C_F }}, + +/* remu<.f> 0,limm,c 0010111000001001F111CCCCCC111110. */ +{ "remu", 0x2E09703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, LIMM, RC }, { C_F }}, + +/* remu<.f> 0,b,limm 00101bbb00001001FBBB111110111110. */ +{ "remu", 0x28090FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, RB, LIMM }, { C_F }}, + +/* remu<.f><.cc> b,b,limm 00101bbb11001001FBBB1111100QQQQQ. */ +{ "remu", 0x28C90F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RB_CHK, RBdup, LIMM }, { C_F, C_CC }}, + +/* remu<.f><.cc> 0,limm,c 0010111011001001F111CCCCCC0QQQQQ. */ +{ "remu", 0x2EC97000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* remu<.f> a,limm,u6 0010111001001001F111uuuuuuAAAAAA. */ +{ "remu", 0x2E497000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RA_CHK, LIMM, UIMM6_20 }, { C_F }}, + +/* remu<.f> 0,limm,u6 0010111001001001F111uuuuuu111110. */ +{ "remu", 0x2E49703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* remu<.f><.cc> 0,limm,u6 0010111011001001F111uuuuuu1QQQQQ. */ +{ "remu", 0x2EC97020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* remu<.f> 0,limm,s12 0010111010001001F111ssssssSSSSSS. */ +{ "remu", 0x2E897000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* remu<.f> a,limm,limm 0010111000001001F111111110AAAAAA. */ +{ "remu", 0x2E097F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { RA_CHK, LIMM, LIMMdup }, { C_F }}, + +/* remu<.f> 0,limm,limm 0010111000001001F111111110111110. */ +{ "remu", 0x2E097FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* remu<.f><.cc> 0,limm,limm 0010111011001001F1111111100QQQQQ. */ +{ "remu", 0x2EC97F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, DIVREM, DIV, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* remul<.f> RA,RB,RC 01011bbb00101001FBBBccccccaaaaaa. */ +{ "remul", 0x58290000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* remul<.f> 0,RB,RC 01011bbb00101001FBBBcccccc111110. */ +{ "remul", 0x5829003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* remul<.f><.cc> RB,RB,RC 01011bbb11101001FBBBcccccc0QQQQQ. */ +{ "remul", 0x58E90000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* remul<.f> RA,RB,u6 01011bbb01101001FBBBuuuuuuaaaaaa. */ +{ "remul", 0x58690000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* remul<.f> 0,RB,u6 01011bbb01101001FBBBuuuuuu111110. */ +{ "remul", 0x5869003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* remul<.f><.cc> RB,RB,u6 01011bbb11101001FBBBuuuuuu1QQQQQ. */ +{ "remul", 0x58E90020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* remul<.f> RB,RB,s12 01011bbb10101001FBBBssssssSSSSSS. */ +{ "remul", 0x58A90000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* remul<.f> RA,ximm,RC 0101110000101001F111ccccccaaaaaa. */ +{ "remul", 0x5C297000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* remul<.f> RA,RB,ximm 01011bbb00101001FBBB111100aaaaaa. */ +{ "remul", 0x58290F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* remul<.f> 0,ximm,RC 0101110000101001F111cccccc111110. */ +{ "remul", 0x5C29703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* remul<.f> 0,RB,ximm 01011bbb00101001FBBB111100111110. */ +{ "remul", 0x58290F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* remul<.f><.cc> 0,ximm,RC 0101110011101001F111cccccc0QQQQQ. */ +{ "remul", 0x5CE97000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* remul<.f><.cc> RB,RB,ximm 01011bbb11101001FBBB1111000QQQQQ. */ +{ "remul", 0x58E90F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* remul<.f> RA,ximm,u6 0101110001101001F111uuuuuuaaaaaa. */ +{ "remul", 0x5C697000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* remul<.f> 0,ximm,u6 0101110001101001F111uuuuuu111110. */ +{ "remul", 0x5C69703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* remul<.f><.cc> 0,ximm,u6 0101110011101001F111uuuuuu1QQQQQ. */ +{ "remul", 0x5CE97020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* remul<.f> RA,limm,RC 0101111000101001F111ccccccaaaaaa. */ +{ "remul", 0x5E297000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* remul<.f> RA,RB,limm 01011bbb00101001FBBB111110aaaaaa. */ +{ "remul", 0x58290F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* remul<.f> 0,limm,RC 0101111000101001F111cccccc111110. */ +{ "remul", 0x5E29703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* remul<.f> 0,RB,limm 01011bbb00101001FBBB111110111110. */ +{ "remul", 0x58290FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* remul<.f><.cc> 0,limm,RC 0101111011101001F111cccccc0QQQQQ. */ +{ "remul", 0x5EE97000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* remul<.f><.cc> RB,RB,limm 01011bbb11101001FBBB1111100QQQQQ. */ +{ "remul", 0x58E90F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* remul<.f> RA,limm,u6 0101111001101001F111uuuuuuaaaaaa. */ +{ "remul", 0x5E697000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* remul<.f> 0,limm,u6 0101111001101001F111uuuuuu111110. */ +{ "remul", 0x5E69703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* remul<.f><.cc> 0,limm,u6 0101111011101001F111uuuuuu1QQQQQ. */ +{ "remul", 0x5EE97020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* remul<.f> 0,ximm,s12 0101110010101001F111ssssssSSSSSS. */ +{ "remul", 0x5CA97000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* remul<.f> 0,limm,s12 0101111010101001F111ssssssSSSSSS. */ +{ "remul", 0x5EA97000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* remul<.f> RA,ximm,ximm 0101110000101001F111111100aaaaaa. */ +{ "remul", 0x5C297F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* remul<.f> 0,ximm,ximm 0101110000101001F111111100111110. */ +{ "remul", 0x5C297F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* remul<.f><.cc> 0,ximm,ximm 0101110011101001F1111111000QQQQQ. */ +{ "remul", 0x5CE97F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* remul<.f> RA,limm,limm 0101111000101001F111111110aaaaaa. */ +{ "remul", 0x5E297F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* remul<.f> 0,limm,limm 0101111000101001F111111110111110. */ +{ "remul", 0x5E297FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* remul<.f><.cc> 0,limm,limm 0101111011101001F1111111100QQQQQ. */ +{ "remul", 0x5EE97F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* rlc<.f> b,c 00100bbb00101111FBBBCCCCCC001011. */ +{ "rlc", 0x202F000B, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RC }, { C_F }}, + +/* rlc<.f> 0,c 0010011000101111F111CCCCCC001011. */ +{ "rlc", 0x262F700B, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RC }, { C_F }}, + +/* rlc<.f> b,u6 00100bbb01101111FBBBuuuuuu001011. */ +{ "rlc", 0x206F000B, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, UIMM6_20 }, { C_F }}, + +/* rlc<.f> 0,u6 0010011001101111F111uuuuuu001011. */ +{ "rlc", 0x266F700B, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, UIMM6_20 }, { C_F }}, + +/* rlc<.f> b,limm 00100bbb00101111FBBB111110001011. */ +{ "rlc", 0x202F0F8B, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, LIMM }, { C_F }}, + +/* rlc<.f> 0,limm 0010011000101111F111111110001011. */ +{ "rlc", 0x262F7F8B, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM }, { C_F }}, + +/* rol<.f> b,c 00100bbb00101111FBBBCCCCCC001101. */ +{ "rol", 0x202F000D, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RC }, { C_F }}, + +/* rol<.f> 0,c 0010011000101111F111CCCCCC001101. */ +{ "rol", 0x262F700D, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RC }, { C_F }}, + +/* rol<.f> b,u6 00100bbb01101111FBBBuuuuuu001101. */ +{ "rol", 0x206F000D, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, UIMM6_20 }, { C_F }}, + +/* rol<.f> 0,u6 0010011001101111F111uuuuuu001101. */ +{ "rol", 0x266F700D, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, UIMM6_20 }, { C_F }}, + +/* rol<.f> b,limm 00100bbb00101111FBBB111110001101. */ +{ "rol", 0x202F0F8D, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, LIMM }, { C_F }}, + +/* rol<.f> 0,limm 0010011000101111F111111110001101. */ +{ "rol", 0x262F7F8D, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM }, { C_F }}, + +/* rol8<.f> b,c 00101bbb00101111FBBBCCCCCC010000. */ +{ "rol8", 0x282F0010, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT1, { RB, RC }, { C_F }}, + +/* rol8<.f> 0,c 0010111000101111F111CCCCCC010000. */ +{ "rol8", 0x2E2F7010, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT1, { ZA, RC }, { C_F }}, + +/* rol8<.f> b,u6 00101bbb01101111FBBBuuuuuu010000. */ +{ "rol8", 0x286F0010, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT1, { RB, UIMM6_20 }, { C_F }}, + +/* rol8<.f> 0,u6 0010111001101111F111uuuuuu010000. */ +{ "rol8", 0x2E6F7010, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT1, { ZA, UIMM6_20 }, { C_F }}, + +/* rol8<.f> b,limm 00101bbb00101111FBBB111110010000. */ +{ "rol8", 0x282F0F90, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT1, { RB, LIMM }, { C_F }}, + +/* rol8<.f> 0,limm 0010111000101111F111111110010000. */ +{ "rol8", 0x2E2F7F90, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT1, { ZA, LIMM }, { C_F }}, + +/* ror<.f> b,c 00100bbb00101111FBBBCCCCCC000011. */ +{ "ror", 0x202F0003, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RC }, { C_F }}, + +/* ror<.f> 0,c 0010011000101111F111CCCCCC000011. */ +{ "ror", 0x262F7003, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RC }, { C_F }}, + +/* ror<.f> a,b,c 00101bbb00000011FBBBCCCCCCAAAAAA. */ +{ "ror", 0x28030000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RA, RB, RC }, { C_F }}, + +/* ror<.f> 0,b,c 00101bbb00000011FBBBCCCCCC111110. */ +{ "ror", 0x2803003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, RB, RC }, { C_F }}, + +/* ror<.f><.cc> b,b,c 00101bbb11000011FBBBCCCCCC0QQQQQ. */ +{ "ror", 0x28C30000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* ror<.f> b,u6 00100bbb01101111FBBBuuuuuu000011. */ +{ "ror", 0x206F0003, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, UIMM6_20 }, { C_F }}, + +/* ror<.f> 0,u6 0010011001101111F111uuuuuu000011. */ +{ "ror", 0x266F7003, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, UIMM6_20 }, { C_F }}, + +/* ror<.f> a,b,u6 00101bbb01000011FBBBuuuuuuAAAAAA. */ +{ "ror", 0x28430000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RA, RB, UIMM6_20 }, { C_F }}, + +/* ror<.f> 0,b,u6 00101bbb01000011FBBBuuuuuu111110. */ +{ "ror", 0x2843003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* ror<.f><.cc> b,b,u6 00101bbb11000011FBBBuuuuuu1QQQQQ. */ +{ "ror", 0x28C30020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* ror<.f> b,b,s12 00101bbb10000011FBBBssssssSSSSSS. */ +{ "ror", 0x28830000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* ror<.f> b,limm 00100bbb00101111FBBB111110000011. */ +{ "ror", 0x202F0F83, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, LIMM }, { C_F }}, + +/* ror<.f> 0,limm 0010011000101111F111111110000011. */ +{ "ror", 0x262F7F83, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM }, { C_F }}, + +/* ror<.f> a,limm,c 0010111000000011F111CCCCCCAAAAAA. */ +{ "ror", 0x2E037000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RA, LIMM, RC }, { C_F }}, + +/* ror<.f> a,b,limm 00101bbb00000011FBBB111110AAAAAA. */ +{ "ror", 0x28030F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RA, RB, LIMM }, { C_F }}, + +/* ror<.f> 0,limm,c 0010111000000011F111CCCCCC111110. */ +{ "ror", 0x2E03703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, LIMM, RC }, { C_F }}, + +/* ror<.f> 0,b,limm 00101bbb00000011FBBB111110111110. */ +{ "ror", 0x28030FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, RB, LIMM }, { C_F }}, + +/* ror<.f><.cc> b,b,limm 00101bbb11000011FBBB1111100QQQQQ. */ +{ "ror", 0x28C30F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* ror<.f><.cc> 0,limm,c 0010111011000011F111CCCCCC0QQQQQ. */ +{ "ror", 0x2EC37000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* ror<.f> a,limm,u6 0010111001000011F111uuuuuuAAAAAA. */ +{ "ror", 0x2E437000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* ror<.f> 0,limm,u6 0010111001000011F111uuuuuu111110. */ +{ "ror", 0x2E43703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* ror<.f><.cc> 0,limm,u6 0010111011000011F111uuuuuu1QQQQQ. */ +{ "ror", 0x2EC37020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* ror<.f> 0,limm,s12 0010111010000011F111ssssssSSSSSS. */ +{ "ror", 0x2E837000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* ror<.f> a,limm,limm 0010111000000011F111111110AAAAAA. */ +{ "ror", 0x2E037F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { RA, LIMM, LIMMdup }, { C_F }}, + +/* ror<.f> 0,limm,limm 0010111000000011F111111110111110. */ +{ "ror", 0x2E037FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* ror<.f><.cc> 0,limm,limm 0010111011000011F1111111100QQQQQ. */ +{ "ror", 0x2EC37F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT2, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* ror8<.f> b,c 00101bbb00101111FBBBCCCCCC010001. */ +{ "ror8", 0x282F0011, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT1, { RB, RC }, { C_F }}, + +/* ror8<.f> 0,c 0010111000101111F111CCCCCC010001. */ +{ "ror8", 0x2E2F7011, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT1, { ZA, RC }, { C_F }}, + +/* ror8<.f> b,u6 00101bbb01101111FBBBuuuuuu010001. */ +{ "ror8", 0x286F0011, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT1, { RB, UIMM6_20 }, { C_F }}, + +/* ror8<.f> 0,u6 0010111001101111F111uuuuuu010001. */ +{ "ror8", 0x2E6F7011, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT1, { ZA, UIMM6_20 }, { C_F }}, + +/* ror8<.f> b,limm 00101bbb00101111FBBB111110010001. */ +{ "ror8", 0x282F0F91, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT1, { RB, LIMM }, { C_F }}, + +/* ror8<.f> 0,limm 0010111000101111F111111110010001. */ +{ "ror8", 0x2E2F7F91, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, SHFT1, { ZA, LIMM }, { C_F }}, + +/* rrc<.f> b,c 00100bbb00101111FBBBCCCCCC000100. */ +{ "rrc", 0x202F0004, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RC }, { C_F }}, + +/* rrc<.f> 0,c 0010011000101111F111CCCCCC000100. */ +{ "rrc", 0x262F7004, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RC }, { C_F }}, + +/* rrc<.f> b,u6 00100bbb01101111FBBBuuuuuu000100. */ +{ "rrc", 0x206F0004, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, UIMM6_20 }, { C_F }}, + +/* rrc<.f> 0,u6 0010011001101111F111uuuuuu000100. */ +{ "rrc", 0x266F7004, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, UIMM6_20 }, { C_F }}, + +/* rrc<.f> b,limm 00100bbb00101111FBBB111110000100. */ +{ "rrc", 0x202F0F84, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, LIMM }, { C_F }}, + +/* rrc<.f> 0,limm 0010011000101111F111111110000100. */ +{ "rrc", 0x262F7F84, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM }, { C_F }}, + +/* rsub<.f> a,b,c 00100bbb00001110FBBBCCCCCCAAAAAA. */ +{ "rsub", 0x200E0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* rsub<.f> 0,b,c 00100bbb00001110FBBBCCCCCC111110. */ +{ "rsub", 0x200E003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* rsub<.f><.cc> b,b,c 00100bbb11001110FBBBCCCCCC0QQQQQ. */ +{ "rsub", 0x20CE0000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* rsub<.f> a,b,u6 00100bbb01001110FBBBuuuuuuAAAAAA. */ +{ "rsub", 0x204E0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* rsub<.f> 0,b,u6 00100bbb01001110FBBBuuuuuu111110. */ +{ "rsub", 0x204E003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* rsub<.f><.cc> b,b,u6 00100bbb11001110FBBBuuuuuu1QQQQQ. */ +{ "rsub", 0x20CE0020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* rsub<.f> b,b,s12 00100bbb10001110FBBBssssssSSSSSS. */ +{ "rsub", 0x208E0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* rsub<.f> a,limm,c 0010011000001110F111CCCCCCAAAAAA. */ +{ "rsub", 0x260E7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* rsub<.f> a,b,limm 00100bbb00001110FBBB111110AAAAAA. */ +{ "rsub", 0x200E0F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* rsub<.f> 0,limm,c 0010011000001110F111CCCCCC111110. */ +{ "rsub", 0x260E703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* rsub<.f> 0,b,limm 00100bbb00001110FBBB111110111110. */ +{ "rsub", 0x200E0FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* rsub<.f><.cc> b,b,limm 00100bbb11001110FBBB1111100QQQQQ. */ +{ "rsub", 0x20CE0F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* rsub<.f><.cc> 0,limm,c 0010011011001110F111CCCCCC0QQQQQ. */ +{ "rsub", 0x26CE7000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* rsub<.f> a,limm,u6 0010011001001110F111uuuuuuAAAAAA. */ +{ "rsub", 0x264E7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* rsub<.f> 0,limm,u6 0010011001001110F111uuuuuu111110. */ +{ "rsub", 0x264E703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* rsub<.f><.cc> 0,limm,u6 0010011011001110F111uuuuuu1QQQQQ. */ +{ "rsub", 0x26CE7020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* rsub<.f> 0,limm,s12 0010011010001110F111ssssssSSSSSS. */ +{ "rsub", 0x268E7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* rsub<.f> a,limm,limm 0010011000001110F111111110AAAAAA. */ +{ "rsub", 0x260E7F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* rsub<.f> 0,limm,limm 0010011000001110F111111110111110. */ +{ "rsub", 0x260E7FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* rsub<.f><.cc> 0,limm,limm 0010011011001110F1111111100QQQQQ. */ +{ "rsub", 0x26CE7F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* rsubl<.f> RA,RB,RC 01011bbb00001110FBBBccccccaaaaaa. */ +{ "rsubl", 0x580E0000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* rsubl<.f> 0,RB,RC 01011bbb00001110FBBBcccccc111110. */ +{ "rsubl", 0x580E003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* rsubl<.f><.cc> RB,RB,RC 01011bbb11001110FBBBcccccc0QQQQQ. */ +{ "rsubl", 0x58CE0000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* rsubl<.f> RA,RB,u6 01011bbb01001110FBBBuuuuuuaaaaaa. */ +{ "rsubl", 0x584E0000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* rsubl<.f> 0,RB,u6 01011bbb01001110FBBBuuuuuu111110. */ +{ "rsubl", 0x584E003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* rsubl<.f><.cc> RB,RB,u6 01011bbb11001110FBBBuuuuuu1QQQQQ. */ +{ "rsubl", 0x58CE0020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* rsubl<.f> RB,RB,s12 01011bbb10001110FBBBssssssSSSSSS. */ +{ "rsubl", 0x588E0000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* rsubl<.f> RA,ximm,RC 0101110000001110F111ccccccaaaaaa. */ +{ "rsubl", 0x5C0E7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* rsubl<.f> RA,RB,ximm 01011bbb00001110FBBB111100aaaaaa. */ +{ "rsubl", 0x580E0F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* rsubl<.f> 0,ximm,RC 0101110000001110F111cccccc111110. */ +{ "rsubl", 0x5C0E703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* rsubl<.f> 0,RB,ximm 01011bbb00001110FBBB111100111110. */ +{ "rsubl", 0x580E0F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* rsubl<.f><.cc> 0,ximm,RC 0101110011001110F111cccccc0QQQQQ. */ +{ "rsubl", 0x5CCE7000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* rsubl<.f><.cc> RB,RB,ximm 01011bbb11001110FBBB1111000QQQQQ. */ +{ "rsubl", 0x58CE0F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* rsubl<.f> RA,ximm,u6 0101110001001110F111uuuuuuaaaaaa. */ +{ "rsubl", 0x5C4E7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* rsubl<.f> 0,ximm,u6 0101110001001110F111uuuuuu111110. */ +{ "rsubl", 0x5C4E703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* rsubl<.f><.cc> 0,ximm,u6 0101110011001110F111uuuuuu1QQQQQ. */ +{ "rsubl", 0x5CCE7020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* rsubl<.f> RA,limm,RC 0101111000001110F111ccccccaaaaaa. */ +{ "rsubl", 0x5E0E7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* rsubl<.f> RA,RB,limm 01011bbb00001110FBBB111110aaaaaa. */ +{ "rsubl", 0x580E0F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* rsubl<.f> 0,limm,RC 0101111000001110F111cccccc111110. */ +{ "rsubl", 0x5E0E703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* rsubl<.f> 0,RB,limm 01011bbb00001110FBBB111110111110. */ +{ "rsubl", 0x580E0FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* rsubl<.f><.cc> 0,limm,RC 0101111011001110F111cccccc0QQQQQ. */ +{ "rsubl", 0x5ECE7000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* rsubl<.f><.cc> RB,RB,limm 01011bbb11001110FBBB1111100QQQQQ. */ +{ "rsubl", 0x58CE0F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* rsubl<.f> RA,limm,u6 0101111001001110F111uuuuuuaaaaaa. */ +{ "rsubl", 0x5E4E7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* rsubl<.f> 0,limm,u6 0101111001001110F111uuuuuu111110. */ +{ "rsubl", 0x5E4E703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* rsubl<.f><.cc> 0,limm,u6 0101111011001110F111uuuuuu1QQQQQ. */ +{ "rsubl", 0x5ECE7020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* rsubl<.f> 0,ximm,s12 0101110010001110F111ssssssSSSSSS. */ +{ "rsubl", 0x5C8E7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* rsubl<.f> 0,limm,s12 0101111010001110F111ssssssSSSSSS. */ +{ "rsubl", 0x5E8E7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* rsubl<.f> RA,ximm,ximm 0101110000001110F111111100aaaaaa. */ +{ "rsubl", 0x5C0E7F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* rsubl<.f> 0,ximm,ximm 0101110000001110F111111100111110. */ +{ "rsubl", 0x5C0E7F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* rsubl<.f><.cc> 0,ximm,ximm 0101110011001110F1111111000QQQQQ. */ +{ "rsubl", 0x5CCE7F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* rsubl<.f> RA,limm,limm 0101111000001110F111111110aaaaaa. */ +{ "rsubl", 0x5E0E7F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* rsubl<.f> 0,limm,limm 0101111000001110F111111110111110. */ +{ "rsubl", 0x5E0E7FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* rsubl<.f><.cc> 0,limm,limm 0101111011001110F1111111100QQQQQ. */ +{ "rsubl", 0x5ECE7F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* rtie 00100100011011110000000000111111. */ +{ "rtie", 0x246F003F, 0xFFFFFFFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, KERNEL, NONE, { 0 }, { 0 }}, + +/* sbc<.f> a,b,c 00100bbb00000011FBBBCCCCCCAAAAAA. */ +{ "sbc", 0x20030000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* sbc<.f> 0,b,c 00100bbb00000011FBBBCCCCCC111110. */ +{ "sbc", 0x2003003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* sbc<.f><.cc> b,b,c 00100bbb11000011FBBBCCCCCC0QQQQQ. */ +{ "sbc", 0x20C30000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* sbc<.f> a,b,u6 00100bbb01000011FBBBuuuuuuAAAAAA. */ +{ "sbc", 0x20430000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* sbc<.f> 0,b,u6 00100bbb01000011FBBBuuuuuu111110. */ +{ "sbc", 0x2043003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* sbc<.f><.cc> b,b,u6 00100bbb11000011FBBBuuuuuu1QQQQQ. */ +{ "sbc", 0x20C30020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* sbc<.f> b,b,s12 00100bbb10000011FBBBssssssSSSSSS. */ +{ "sbc", 0x20830000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* sbc<.f> a,limm,c 0010011000000011F111CCCCCCAAAAAA. */ +{ "sbc", 0x26037000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* sbc<.f> a,b,limm 00100bbb00000011FBBB111110AAAAAA. */ +{ "sbc", 0x20030F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* sbc<.f> 0,limm,c 0010011000000011F111CCCCCC111110. */ +{ "sbc", 0x2603703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* sbc<.f> 0,b,limm 00100bbb00000011FBBB111110111110. */ +{ "sbc", 0x20030FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* sbc<.f><.cc> b,b,limm 00100bbb11000011FBBB1111100QQQQQ. */ +{ "sbc", 0x20C30F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* sbc<.f><.cc> 0,limm,c 0010011011000011F111CCCCCC0QQQQQ. */ +{ "sbc", 0x26C37000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* sbc<.f> a,limm,u6 0010011001000011F111uuuuuuAAAAAA. */ +{ "sbc", 0x26437000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* sbc<.f> 0,limm,u6 0010011001000011F111uuuuuu111110. */ +{ "sbc", 0x2643703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* sbc<.f><.cc> 0,limm,u6 0010011011000011F111uuuuuu1QQQQQ. */ +{ "sbc", 0x26C37020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* sbc<.f> 0,limm,s12 0010011010000011F111ssssssSSSSSS. */ +{ "sbc", 0x26837000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* sbc<.f> a,limm,limm 0010011000000011F111111110AAAAAA. */ +{ "sbc", 0x26037F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* sbc<.f> 0,limm,limm 0010011000000011F111111110111110. */ +{ "sbc", 0x26037FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* sbc<.f><.cc> 0,limm,limm 0010011011000011F1111111100QQQQQ. */ +{ "sbc", 0x26C37F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* sbcl<.f> RA,RB,RC 01011bbb00000011FBBBccccccaaaaaa. */ +{ "sbcl", 0x58030000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* sbcl<.f> 0,RB,RC 01011bbb00000011FBBBcccccc111110. */ +{ "sbcl", 0x5803003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* sbcl<.f><.cc> RB,RB,RC 01011bbb11000011FBBBcccccc0QQQQQ. */ +{ "sbcl", 0x58C30000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* sbcl<.f> RA,RB,u6 01011bbb01000011FBBBuuuuuuaaaaaa. */ +{ "sbcl", 0x58430000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* sbcl<.f> 0,RB,u6 01011bbb01000011FBBBuuuuuu111110. */ +{ "sbcl", 0x5843003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* sbcl<.f><.cc> RB,RB,u6 01011bbb11000011FBBBuuuuuu1QQQQQ. */ +{ "sbcl", 0x58C30020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* sbcl<.f> RB,RB,s12 01011bbb10000011FBBBssssssSSSSSS. */ +{ "sbcl", 0x58830000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* sbcl<.f> RA,ximm,RC 0101110000000011F111ccccccaaaaaa. */ +{ "sbcl", 0x5C037000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* sbcl<.f> RA,RB,ximm 01011bbb00000011FBBB111100aaaaaa. */ +{ "sbcl", 0x58030F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* sbcl<.f> 0,ximm,RC 0101110000000011F111cccccc111110. */ +{ "sbcl", 0x5C03703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* sbcl<.f> 0,RB,ximm 01011bbb00000011FBBB111100111110. */ +{ "sbcl", 0x58030F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* sbcl<.f><.cc> 0,ximm,RC 0101110011000011F111cccccc0QQQQQ. */ +{ "sbcl", 0x5CC37000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* sbcl<.f><.cc> RB,RB,ximm 01011bbb11000011FBBB1111000QQQQQ. */ +{ "sbcl", 0x58C30F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* sbcl<.f> RA,ximm,u6 0101110001000011F111uuuuuuaaaaaa. */ +{ "sbcl", 0x5C437000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* sbcl<.f> 0,ximm,u6 0101110001000011F111uuuuuu111110. */ +{ "sbcl", 0x5C43703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* sbcl<.f><.cc> 0,ximm,u6 0101110011000011F111uuuuuu1QQQQQ. */ +{ "sbcl", 0x5CC37020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* sbcl<.f> RA,limm,RC 0101111000000011F111ccccccaaaaaa. */ +{ "sbcl", 0x5E037000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* sbcl<.f> RA,RB,limm 01011bbb00000011FBBB111110aaaaaa. */ +{ "sbcl", 0x58030F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* sbcl<.f> 0,limm,RC 0101111000000011F111cccccc111110. */ +{ "sbcl", 0x5E03703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* sbcl<.f> 0,RB,limm 01011bbb00000011FBBB111110111110. */ +{ "sbcl", 0x58030FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* sbcl<.f><.cc> 0,limm,RC 0101111011000011F111cccccc0QQQQQ. */ +{ "sbcl", 0x5EC37000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* sbcl<.f><.cc> RB,RB,limm 01011bbb11000011FBBB1111100QQQQQ. */ +{ "sbcl", 0x58C30F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* sbcl<.f> RA,limm,u6 0101111001000011F111uuuuuuaaaaaa. */ +{ "sbcl", 0x5E437000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* sbcl<.f> 0,limm,u6 0101111001000011F111uuuuuu111110. */ +{ "sbcl", 0x5E43703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* sbcl<.f><.cc> 0,limm,u6 0101111011000011F111uuuuuu1QQQQQ. */ +{ "sbcl", 0x5EC37020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* sbcl<.f> 0,ximm,s12 0101110010000011F111ssssssSSSSSS. */ +{ "sbcl", 0x5C837000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* sbcl<.f> 0,limm,s12 0101111010000011F111ssssssSSSSSS. */ +{ "sbcl", 0x5E837000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* sbcl<.f> RA,ximm,ximm 0101110000000011F111111100aaaaaa. */ +{ "sbcl", 0x5C037F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* sbcl<.f> 0,ximm,ximm 0101110000000011F111111100111110. */ +{ "sbcl", 0x5C037F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* sbcl<.f><.cc> 0,ximm,ximm 0101110011000011F1111111000QQQQQ. */ +{ "sbcl", 0x5CC37F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* sbcl<.f> RA,limm,limm 0101111000000011F111111110aaaaaa. */ +{ "sbcl", 0x5E037F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* sbcl<.f> 0,limm,limm 0101111000000011F111111110111110. */ +{ "sbcl", 0x5E037FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* sbcl<.f><.cc> 0,limm,limm 0101111011000011F1111111100QQQQQ. */ +{ "sbcl", 0x5EC37F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* scond<.di> b,c 00100bbb00101111DBBBCCCCCC010001. */ +{ "scond", 0x202F0011, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SCOND, NONE, { RB, BRAKET, RC, BRAKETdup }, { C_DI16 }}, + +/* scond<.di> b,u6 00100bbb01101111DBBBuuuuuu010001. */ +{ "scond", 0x206F0011, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SCOND, NONE, { RB, BRAKET, UIMM6_20, BRAKETdup }, { C_DI16 }}, + +/* scond<.di> b,limm 00100bbb00101111DBBB111110010001. */ +{ "scond", 0x202F0F91, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SCOND, NONE, { RB, BRAKET, LIMM, BRAKETdup }, { C_DI16 }}, + +/* scondl<.aq> RB,RC 01011bbb00101111FBBBcccccc010001. */ +{ "scondl", 0x582F0011, 0xF8FF003F, ARC_OPCODE_ARC64, SCOND, NONE, { RB, BRAKET, RC, BRAKETdup }, { C_RL }}, + +/* seteq<.f> a,b,c 00100bbb00111000FBBBCCCCCCAAAAAA. */ +{ "seteq", 0x20380000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, RC }, { C_F }}, + +/* seteq<.f> 0,b,c 00100bbb00111000FBBBCCCCCC111110. */ +{ "seteq", 0x2038003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, RC }, { C_F }}, + +/* seteq<.f><.cc> b,b,c 00100bbb11111000FBBBCCCCCC0QQQQQ. */ +{ "seteq", 0x20F80000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* seteq<.f> a,b,u6 00100bbb01111000FBBBuuuuuuAAAAAA. */ +{ "seteq", 0x20780000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* seteq<.f> 0,b,u6 00100bbb01111000FBBBuuuuuu111110. */ +{ "seteq", 0x2078003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* seteq<.f><.cc> b,b,u6 00100bbb11111000FBBBuuuuuu1QQQQQ. */ +{ "seteq", 0x20F80020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* seteq<.f> b,b,s12 00100bbb10111000FBBBssssssSSSSSS. */ +{ "seteq", 0x20B80000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* seteq<.f> a,limm,c 0010011000111000F111CCCCCCAAAAAA. */ +{ "seteq", 0x26387000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, RC }, { C_F }}, + +/* seteq<.f> a,b,limm 00100bbb00111000FBBB111110AAAAAA. */ +{ "seteq", 0x20380F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, LIMM }, { C_F }}, + +/* seteq<.f> 0,limm,c 0010011000111000F111CCCCCC111110. */ +{ "seteq", 0x2638703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* seteq<.f> 0,b,limm 00100bbb00111000FBBB111110111110. */ +{ "seteq", 0x20380FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* seteq<.f><.cc> b,b,limm 00100bbb11111000FBBB1111100QQQQQ. */ +{ "seteq", 0x20F80F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* seteq<.f><.cc> 0,limm,c 0010011011111000F111CCCCCC0QQQQQ. */ +{ "seteq", 0x26F87000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* seteq<.f> a,limm,u6 0010011001111000F111uuuuuuAAAAAA. */ +{ "seteq", 0x26787000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* seteq<.f> 0,limm,u6 0010011001111000F111uuuuuu111110. */ +{ "seteq", 0x2678703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* seteq<.f><.cc> 0,limm,u6 0010011011111000F111uuuuuu1QQQQQ. */ +{ "seteq", 0x26F87020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* seteq<.f> 0,limm,s12 0010011010111000F111ssssssSSSSSS. */ +{ "seteq", 0x26B87000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* seteq<.f> a,limm,limm 0010011000111000F111111110AAAAAA. */ +{ "seteq", 0x26387F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* seteq<.f> 0,limm,limm 0010011000111000F111111110111110. */ +{ "seteq", 0x26387FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* seteq<.f><.cc> 0,limm,limm 0010011011111000F1111111100QQQQQ. */ +{ "seteq", 0x26F87F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* seteql<.f> RA,RB,RC 01011bbb00111000FBBBccccccaaaaaa. */ +{ "seteql", 0x58380000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* seteql<.f> 0,RB,RC 01011bbb00111000FBBBcccccc111110. */ +{ "seteql", 0x5838003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* seteql<.f><.cc> RB,RB,RC 01011bbb11111000FBBBcccccc0QQQQQ. */ +{ "seteql", 0x58F80000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* seteql<.f> RA,RB,u6 01011bbb01111000FBBBuuuuuuaaaaaa. */ +{ "seteql", 0x58780000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* seteql<.f> 0,RB,u6 01011bbb01111000FBBBuuuuuu111110. */ +{ "seteql", 0x5878003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* seteql<.f><.cc> RB,RB,u6 01011bbb11111000FBBBuuuuuu1QQQQQ. */ +{ "seteql", 0x58F80020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* seteql<.f> RB,RB,s12 01011bbb10111000FBBBssssssSSSSSS. */ +{ "seteql", 0x58B80000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* seteql<.f> RA,ximm,RC 0101110000111000F111ccccccaaaaaa. */ +{ "seteql", 0x5C387000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* seteql<.f> RA,RB,ximm 01011bbb00111000FBBB111100aaaaaa. */ +{ "seteql", 0x58380F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* seteql<.f> 0,ximm,RC 0101110000111000F111cccccc111110. */ +{ "seteql", 0x5C38703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* seteql<.f> 0,RB,ximm 01011bbb00111000FBBB111100111110. */ +{ "seteql", 0x58380F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* seteql<.f><.cc> 0,ximm,RC 0101110011111000F111cccccc0QQQQQ. */ +{ "seteql", 0x5CF87000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* seteql<.f><.cc> RB,RB,ximm 01011bbb11111000FBBB1111000QQQQQ. */ +{ "seteql", 0x58F80F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* seteql<.f> RA,ximm,u6 0101110001111000F111uuuuuuaaaaaa. */ +{ "seteql", 0x5C787000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* seteql<.f> 0,ximm,u6 0101110001111000F111uuuuuu111110. */ +{ "seteql", 0x5C78703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* seteql<.f><.cc> 0,ximm,u6 0101110011111000F111uuuuuu1QQQQQ. */ +{ "seteql", 0x5CF87020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* seteql<.f> RA,limm,RC 0101111000111000F111ccccccaaaaaa. */ +{ "seteql", 0x5E387000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* seteql<.f> RA,RB,limm 01011bbb00111000FBBB111110aaaaaa. */ +{ "seteql", 0x58380F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* seteql<.f> 0,limm,RC 0101111000111000F111cccccc111110. */ +{ "seteql", 0x5E38703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* seteql<.f> 0,RB,limm 01011bbb00111000FBBB111110111110. */ +{ "seteql", 0x58380FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* seteql<.f><.cc> 0,limm,RC 0101111011111000F111cccccc0QQQQQ. */ +{ "seteql", 0x5EF87000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* seteql<.f><.cc> RB,RB,limm 01011bbb11111000FBBB1111100QQQQQ. */ +{ "seteql", 0x58F80F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* seteql<.f> RA,limm,u6 0101111001111000F111uuuuuuaaaaaa. */ +{ "seteql", 0x5E787000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* seteql<.f> 0,limm,u6 0101111001111000F111uuuuuu111110. */ +{ "seteql", 0x5E78703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* seteql<.f><.cc> 0,limm,u6 0101111011111000F111uuuuuu1QQQQQ. */ +{ "seteql", 0x5EF87020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* seteql<.f> 0,ximm,s12 0101110010111000F111ssssssSSSSSS. */ +{ "seteql", 0x5CB87000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* seteql<.f> 0,limm,s12 0101111010111000F111ssssssSSSSSS. */ +{ "seteql", 0x5EB87000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* seteql<.f> RA,ximm,ximm 0101110000111000F111111100aaaaaa. */ +{ "seteql", 0x5C387F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* seteql<.f> 0,ximm,ximm 0101110000111000F111111100111110. */ +{ "seteql", 0x5C387F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* seteql<.f><.cc> 0,ximm,ximm 0101110011111000F1111111000QQQQQ. */ +{ "seteql", 0x5CF87F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* seteql<.f> RA,limm,limm 0101111000111000F111111110aaaaaa. */ +{ "seteql", 0x5E387F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* seteql<.f> 0,limm,limm 0101111000111000F111111110111110. */ +{ "seteql", 0x5E387FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* seteql<.f><.cc> 0,limm,limm 0101111011111000F1111111100QQQQQ. */ +{ "seteql", 0x5EF87F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* setge<.f> a,b,c 00100bbb00111011FBBBCCCCCCAAAAAA. */ +{ "setge", 0x203B0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, RC }, { C_F }}, + +/* setge<.f> 0,b,c 00100bbb00111011FBBBCCCCCC111110. */ +{ "setge", 0x203B003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, RC }, { C_F }}, + +/* setge<.f><.cc> b,b,c 00100bbb11111011FBBBCCCCCC0QQQQQ. */ +{ "setge", 0x20FB0000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* setge<.f> a,b,u6 00100bbb01111011FBBBuuuuuuAAAAAA. */ +{ "setge", 0x207B0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* setge<.f> 0,b,u6 00100bbb01111011FBBBuuuuuu111110. */ +{ "setge", 0x207B003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* setge<.f><.cc> b,b,u6 00100bbb11111011FBBBuuuuuu1QQQQQ. */ +{ "setge", 0x20FB0020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* setge<.f> b,b,s12 00100bbb10111011FBBBssssssSSSSSS. */ +{ "setge", 0x20BB0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* setge<.f> a,limm,c 0010011000111011F111CCCCCCAAAAAA. */ +{ "setge", 0x263B7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, RC }, { C_F }}, + +/* setge<.f> a,b,limm 00100bbb00111011FBBB111110AAAAAA. */ +{ "setge", 0x203B0F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, LIMM }, { C_F }}, + +/* setge<.f> 0,limm,c 0010011000111011F111CCCCCC111110. */ +{ "setge", 0x263B703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* setge<.f> 0,b,limm 00100bbb00111011FBBB111110111110. */ +{ "setge", 0x203B0FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* setge<.f><.cc> b,b,limm 00100bbb11111011FBBB1111100QQQQQ. */ +{ "setge", 0x20FB0F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* setge<.f><.cc> 0,limm,c 0010011011111011F111CCCCCC0QQQQQ. */ +{ "setge", 0x26FB7000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* setge<.f> a,limm,u6 0010011001111011F111uuuuuuAAAAAA. */ +{ "setge", 0x267B7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* setge<.f> 0,limm,u6 0010011001111011F111uuuuuu111110. */ +{ "setge", 0x267B703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* setge<.f><.cc> 0,limm,u6 0010011011111011F111uuuuuu1QQQQQ. */ +{ "setge", 0x26FB7020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* setge<.f> 0,limm,s12 0010011010111011F111ssssssSSSSSS. */ +{ "setge", 0x26BB7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* setge<.f> a,limm,limm 0010011000111011F111111110AAAAAA. */ +{ "setge", 0x263B7F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* setge<.f> 0,limm,limm 0010011000111011F111111110111110. */ +{ "setge", 0x263B7FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* setge<.f><.cc> 0,limm,limm 0010011011111011F1111111100QQQQQ. */ +{ "setge", 0x26FB7F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* setgel<.f> RA,RB,RC 01011bbb00111011FBBBccccccaaaaaa. */ +{ "setgel", 0x583B0000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* setgel<.f> 0,RB,RC 01011bbb00111011FBBBcccccc111110. */ +{ "setgel", 0x583B003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* setgel<.f><.cc> RB,RB,RC 01011bbb11111011FBBBcccccc0QQQQQ. */ +{ "setgel", 0x58FB0000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* setgel<.f> RA,RB,u6 01011bbb01111011FBBBuuuuuuaaaaaa. */ +{ "setgel", 0x587B0000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* setgel<.f> 0,RB,u6 01011bbb01111011FBBBuuuuuu111110. */ +{ "setgel", 0x587B003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* setgel<.f><.cc> RB,RB,u6 01011bbb11111011FBBBuuuuuu1QQQQQ. */ +{ "setgel", 0x58FB0020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* setgel<.f> RB,RB,s12 01011bbb10111011FBBBssssssSSSSSS. */ +{ "setgel", 0x58BB0000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* setgel<.f> RA,ximm,RC 0101110000111011F111ccccccaaaaaa. */ +{ "setgel", 0x5C3B7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* setgel<.f> RA,RB,ximm 01011bbb00111011FBBB111100aaaaaa. */ +{ "setgel", 0x583B0F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* setgel<.f> 0,ximm,RC 0101110000111011F111cccccc111110. */ +{ "setgel", 0x5C3B703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* setgel<.f> 0,RB,ximm 01011bbb00111011FBBB111100111110. */ +{ "setgel", 0x583B0F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* setgel<.f><.cc> 0,ximm,RC 0101110011111011F111cccccc0QQQQQ. */ +{ "setgel", 0x5CFB7000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* setgel<.f><.cc> RB,RB,ximm 01011bbb11111011FBBB1111000QQQQQ. */ +{ "setgel", 0x58FB0F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* setgel<.f> RA,ximm,u6 0101110001111011F111uuuuuuaaaaaa. */ +{ "setgel", 0x5C7B7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* setgel<.f> 0,ximm,u6 0101110001111011F111uuuuuu111110. */ +{ "setgel", 0x5C7B703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* setgel<.f><.cc> 0,ximm,u6 0101110011111011F111uuuuuu1QQQQQ. */ +{ "setgel", 0x5CFB7020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* setgel<.f> RA,limm,RC 0101111000111011F111ccccccaaaaaa. */ +{ "setgel", 0x5E3B7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* setgel<.f> RA,RB,limm 01011bbb00111011FBBB111110aaaaaa. */ +{ "setgel", 0x583B0F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* setgel<.f> 0,limm,RC 0101111000111011F111cccccc111110. */ +{ "setgel", 0x5E3B703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* setgel<.f> 0,RB,limm 01011bbb00111011FBBB111110111110. */ +{ "setgel", 0x583B0FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* setgel<.f><.cc> 0,limm,RC 0101111011111011F111cccccc0QQQQQ. */ +{ "setgel", 0x5EFB7000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* setgel<.f><.cc> RB,RB,limm 01011bbb11111011FBBB1111100QQQQQ. */ +{ "setgel", 0x58FB0F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* setgel<.f> RA,limm,u6 0101111001111011F111uuuuuuaaaaaa. */ +{ "setgel", 0x5E7B7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* setgel<.f> 0,limm,u6 0101111001111011F111uuuuuu111110. */ +{ "setgel", 0x5E7B703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* setgel<.f><.cc> 0,limm,u6 0101111011111011F111uuuuuu1QQQQQ. */ +{ "setgel", 0x5EFB7020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* setgel<.f> 0,ximm,s12 0101110010111011F111ssssssSSSSSS. */ +{ "setgel", 0x5CBB7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* setgel<.f> 0,limm,s12 0101111010111011F111ssssssSSSSSS. */ +{ "setgel", 0x5EBB7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* setgel<.f> RA,ximm,ximm 0101110000111011F111111100aaaaaa. */ +{ "setgel", 0x5C3B7F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* setgel<.f> 0,ximm,ximm 0101110000111011F111111100111110. */ +{ "setgel", 0x5C3B7F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* setgel<.f><.cc> 0,ximm,ximm 0101110011111011F1111111000QQQQQ. */ +{ "setgel", 0x5CFB7F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* setgel<.f> RA,limm,limm 0101111000111011F111111110aaaaaa. */ +{ "setgel", 0x5E3B7F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* setgel<.f> 0,limm,limm 0101111000111011F111111110111110. */ +{ "setgel", 0x5E3B7FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* setgel<.f><.cc> 0,limm,limm 0101111011111011F1111111100QQQQQ. */ +{ "setgel", 0x5EFB7F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* setgt<.f> a,b,c 00100bbb00111111FBBBCCCCCCAAAAAA. */ +{ "setgt", 0x203F0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, RC }, { C_F }}, + +/* setgt<.f> 0,b,c 00100bbb00111111FBBBCCCCCC111110. */ +{ "setgt", 0x203F003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, RC }, { C_F }}, + +/* setgt<.f><.cc> b,b,c 00100bbb11111111FBBBCCCCCC0QQQQQ. */ +{ "setgt", 0x20FF0000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* setgt<.f> a,b,u6 00100bbb01111111FBBBuuuuuuAAAAAA. */ +{ "setgt", 0x207F0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* setgt<.f> 0,b,u6 00100bbb01111111FBBBuuuuuu111110. */ +{ "setgt", 0x207F003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* setgt<.f><.cc> b,b,u6 00100bbb11111111FBBBuuuuuu1QQQQQ. */ +{ "setgt", 0x20FF0020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* setgt<.f> b,b,s12 00100bbb10111111FBBBssssssSSSSSS. */ +{ "setgt", 0x20BF0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* setgt<.f> a,limm,c 0010011000111111F111CCCCCCAAAAAA. */ +{ "setgt", 0x263F7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, RC }, { C_F }}, + +/* setgt<.f> a,b,limm 00100bbb00111111FBBB111110AAAAAA. */ +{ "setgt", 0x203F0F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, LIMM }, { C_F }}, + +/* setgt<.f> 0,limm,c 0010011000111111F111CCCCCC111110. */ +{ "setgt", 0x263F703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* setgt<.f> 0,b,limm 00100bbb00111111FBBB111110111110. */ +{ "setgt", 0x203F0FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* setgt<.f><.cc> b,b,limm 00100bbb11111111FBBB1111100QQQQQ. */ +{ "setgt", 0x20FF0F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* setgt<.f><.cc> 0,limm,c 0010011011111111F111CCCCCC0QQQQQ. */ +{ "setgt", 0x26FF7000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* setgt<.f> a,limm,u6 0010011001111111F111uuuuuuAAAAAA. */ +{ "setgt", 0x267F7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* setgt<.f> 0,limm,u6 0010011001111111F111uuuuuu111110. */ +{ "setgt", 0x267F703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* setgt<.f><.cc> 0,limm,u6 0010011011111111F111uuuuuu1QQQQQ. */ +{ "setgt", 0x26FF7020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* setgt<.f> 0,limm,s12 0010011010111111F111ssssssSSSSSS. */ +{ "setgt", 0x26BF7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* setgt<.f> a,limm,limm 0010011000111111F111111110AAAAAA. */ +{ "setgt", 0x263F7F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* setgt<.f> 0,limm,limm 0010011000111111F111111110111110. */ +{ "setgt", 0x263F7FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* setgt<.f><.cc> 0,limm,limm 0010011011111111F1111111100QQQQQ. */ +{ "setgt", 0x26FF7F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* setgtl<.f> RA,RB,RC 01011bbb00111111FBBBccccccaaaaaa. */ +{ "setgtl", 0x583F0000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* setgtl<.f> 0,RB,RC 01011bbb00111111FBBBcccccc111110. */ +{ "setgtl", 0x583F003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* setgtl<.f><.cc> RB,RB,RC 01011bbb11111111FBBBcccccc0QQQQQ. */ +{ "setgtl", 0x58FF0000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* setgtl<.f> RA,RB,u6 01011bbb01111111FBBBuuuuuuaaaaaa. */ +{ "setgtl", 0x587F0000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* setgtl<.f> 0,RB,u6 01011bbb01111111FBBBuuuuuu111110. */ +{ "setgtl", 0x587F003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* setgtl<.f><.cc> RB,RB,u6 01011bbb11111111FBBBuuuuuu1QQQQQ. */ +{ "setgtl", 0x58FF0020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* setgtl<.f> RB,RB,s12 01011bbb10111111FBBBssssssSSSSSS. */ +{ "setgtl", 0x58BF0000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* setgtl<.f> RA,ximm,RC 0101110000111111F111ccccccaaaaaa. */ +{ "setgtl", 0x5C3F7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* setgtl<.f> RA,RB,ximm 01011bbb00111111FBBB111100aaaaaa. */ +{ "setgtl", 0x583F0F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* setgtl<.f> 0,ximm,RC 0101110000111111F111cccccc111110. */ +{ "setgtl", 0x5C3F703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* setgtl<.f> 0,RB,ximm 01011bbb00111111FBBB111100111110. */ +{ "setgtl", 0x583F0F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* setgtl<.f><.cc> 0,ximm,RC 0101110011111111F111cccccc0QQQQQ. */ +{ "setgtl", 0x5CFF7000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* setgtl<.f><.cc> RB,RB,ximm 01011bbb11111111FBBB1111000QQQQQ. */ +{ "setgtl", 0x58FF0F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* setgtl<.f> RA,ximm,u6 0101110001111111F111uuuuuuaaaaaa. */ +{ "setgtl", 0x5C7F7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* setgtl<.f> 0,ximm,u6 0101110001111111F111uuuuuu111110. */ +{ "setgtl", 0x5C7F703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* setgtl<.f><.cc> 0,ximm,u6 0101110011111111F111uuuuuu1QQQQQ. */ +{ "setgtl", 0x5CFF7020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* setgtl<.f> RA,limm,RC 0101111000111111F111ccccccaaaaaa. */ +{ "setgtl", 0x5E3F7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* setgtl<.f> RA,RB,limm 01011bbb00111111FBBB111110aaaaaa. */ +{ "setgtl", 0x583F0F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* setgtl<.f> 0,limm,RC 0101111000111111F111cccccc111110. */ +{ "setgtl", 0x5E3F703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* setgtl<.f> 0,RB,limm 01011bbb00111111FBBB111110111110. */ +{ "setgtl", 0x583F0FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* setgtl<.f><.cc> 0,limm,RC 0101111011111111F111cccccc0QQQQQ. */ +{ "setgtl", 0x5EFF7000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* setgtl<.f><.cc> RB,RB,limm 01011bbb11111111FBBB1111100QQQQQ. */ +{ "setgtl", 0x58FF0F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* setgtl<.f> RA,limm,u6 0101111001111111F111uuuuuuaaaaaa. */ +{ "setgtl", 0x5E7F7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* setgtl<.f> 0,limm,u6 0101111001111111F111uuuuuu111110. */ +{ "setgtl", 0x5E7F703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* setgtl<.f><.cc> 0,limm,u6 0101111011111111F111uuuuuu1QQQQQ. */ +{ "setgtl", 0x5EFF7020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* setgtl<.f> 0,ximm,s12 0101110010111111F111ssssssSSSSSS. */ +{ "setgtl", 0x5CBF7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* setgtl<.f> 0,limm,s12 0101111010111111F111ssssssSSSSSS. */ +{ "setgtl", 0x5EBF7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* setgtl<.f> RA,ximm,ximm 0101110000111111F111111100aaaaaa. */ +{ "setgtl", 0x5C3F7F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* setgtl<.f> 0,ximm,ximm 0101110000111111F111111100111110. */ +{ "setgtl", 0x5C3F7F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* setgtl<.f><.cc> 0,ximm,ximm 0101110011111111F1111111000QQQQQ. */ +{ "setgtl", 0x5CFF7F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* setgtl<.f> RA,limm,limm 0101111000111111F111111110aaaaaa. */ +{ "setgtl", 0x5E3F7F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* setgtl<.f> 0,limm,limm 0101111000111111F111111110111110. */ +{ "setgtl", 0x5E3F7FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* setgtl<.f><.cc> 0,limm,limm 0101111011111111F1111111100QQQQQ. */ +{ "setgtl", 0x5EFF7F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* seths<.f> a,b,c 00100bbb00111101FBBBCCCCCCAAAAAA. */ +{ "seths", 0x203D0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, RC }, { C_F }}, + +/* seths<.f> 0,b,c 00100bbb00111101FBBBCCCCCC111110. */ +{ "seths", 0x203D003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, RC }, { C_F }}, + +/* seths<.f><.cc> b,b,c 00100bbb11111101FBBBCCCCCC0QQQQQ. */ +{ "seths", 0x20FD0000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* seths<.f> a,b,u6 00100bbb01111101FBBBuuuuuuAAAAAA. */ +{ "seths", 0x207D0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* seths<.f> 0,b,u6 00100bbb01111101FBBBuuuuuu111110. */ +{ "seths", 0x207D003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* seths<.f><.cc> b,b,u6 00100bbb11111101FBBBuuuuuu1QQQQQ. */ +{ "seths", 0x20FD0020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* seths<.f> b,b,s12 00100bbb10111101FBBBssssssSSSSSS. */ +{ "seths", 0x20BD0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* seths<.f> a,limm,c 0010011000111101F111CCCCCCAAAAAA. */ +{ "seths", 0x263D7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, RC }, { C_F }}, + +/* seths<.f> a,b,limm 00100bbb00111101FBBB111110AAAAAA. */ +{ "seths", 0x203D0F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, LIMM }, { C_F }}, + +/* seths<.f> 0,limm,c 0010011000111101F111CCCCCC111110. */ +{ "seths", 0x263D703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* seths<.f> 0,b,limm 00100bbb00111101FBBB111110111110. */ +{ "seths", 0x203D0FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* seths<.f><.cc> b,b,limm 00100bbb11111101FBBB1111100QQQQQ. */ +{ "seths", 0x20FD0F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* seths<.f><.cc> 0,limm,c 0010011011111101F111CCCCCC0QQQQQ. */ +{ "seths", 0x26FD7000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* seths<.f> a,limm,u6 0010011001111101F111uuuuuuAAAAAA. */ +{ "seths", 0x267D7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* seths<.f> 0,limm,u6 0010011001111101F111uuuuuu111110. */ +{ "seths", 0x267D703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* seths<.f><.cc> 0,limm,u6 0010011011111101F111uuuuuu1QQQQQ. */ +{ "seths", 0x26FD7020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* seths<.f> 0,limm,s12 0010011010111101F111ssssssSSSSSS. */ +{ "seths", 0x26BD7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* seths<.f> a,limm,limm 0010011000111101F111111110AAAAAA. */ +{ "seths", 0x263D7F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* seths<.f> 0,limm,limm 0010011000111101F111111110111110. */ +{ "seths", 0x263D7FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* seths<.f><.cc> 0,limm,limm 0010011011111101F1111111100QQQQQ. */ +{ "seths", 0x26FD7F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* sethsl<.f> RA,RB,RC 01011bbb00111101FBBBccccccaaaaaa. */ +{ "sethsl", 0x583D0000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* sethsl<.f> 0,RB,RC 01011bbb00111101FBBBcccccc111110. */ +{ "sethsl", 0x583D003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* sethsl<.f><.cc> RB,RB,RC 01011bbb11111101FBBBcccccc0QQQQQ. */ +{ "sethsl", 0x58FD0000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* sethsl<.f> RA,RB,u6 01011bbb01111101FBBBuuuuuuaaaaaa. */ +{ "sethsl", 0x587D0000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* sethsl<.f> 0,RB,u6 01011bbb01111101FBBBuuuuuu111110. */ +{ "sethsl", 0x587D003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* sethsl<.f><.cc> RB,RB,u6 01011bbb11111101FBBBuuuuuu1QQQQQ. */ +{ "sethsl", 0x58FD0020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* sethsl<.f> RB,RB,s12 01011bbb10111101FBBBssssssSSSSSS. */ +{ "sethsl", 0x58BD0000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* sethsl<.f> RA,ximm,RC 0101110000111101F111ccccccaaaaaa. */ +{ "sethsl", 0x5C3D7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* sethsl<.f> RA,RB,ximm 01011bbb00111101FBBB111100aaaaaa. */ +{ "sethsl", 0x583D0F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* sethsl<.f> 0,ximm,RC 0101110000111101F111cccccc111110. */ +{ "sethsl", 0x5C3D703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* sethsl<.f> 0,RB,ximm 01011bbb00111101FBBB111100111110. */ +{ "sethsl", 0x583D0F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* sethsl<.f><.cc> 0,ximm,RC 0101110011111101F111cccccc0QQQQQ. */ +{ "sethsl", 0x5CFD7000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* sethsl<.f><.cc> RB,RB,ximm 01011bbb11111101FBBB1111000QQQQQ. */ +{ "sethsl", 0x58FD0F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* sethsl<.f> RA,ximm,u6 0101110001111101F111uuuuuuaaaaaa. */ +{ "sethsl", 0x5C7D7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* sethsl<.f> 0,ximm,u6 0101110001111101F111uuuuuu111110. */ +{ "sethsl", 0x5C7D703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* sethsl<.f><.cc> 0,ximm,u6 0101110011111101F111uuuuuu1QQQQQ. */ +{ "sethsl", 0x5CFD7020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* sethsl<.f> RA,limm,RC 0101111000111101F111ccccccaaaaaa. */ +{ "sethsl", 0x5E3D7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* sethsl<.f> RA,RB,limm 01011bbb00111101FBBB111110aaaaaa. */ +{ "sethsl", 0x583D0F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* sethsl<.f> 0,limm,RC 0101111000111101F111cccccc111110. */ +{ "sethsl", 0x5E3D703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* sethsl<.f> 0,RB,limm 01011bbb00111101FBBB111110111110. */ +{ "sethsl", 0x583D0FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* sethsl<.f><.cc> 0,limm,RC 0101111011111101F111cccccc0QQQQQ. */ +{ "sethsl", 0x5EFD7000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* sethsl<.f><.cc> RB,RB,limm 01011bbb11111101FBBB1111100QQQQQ. */ +{ "sethsl", 0x58FD0F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* sethsl<.f> RA,limm,u6 0101111001111101F111uuuuuuaaaaaa. */ +{ "sethsl", 0x5E7D7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* sethsl<.f> 0,limm,u6 0101111001111101F111uuuuuu111110. */ +{ "sethsl", 0x5E7D703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* sethsl<.f><.cc> 0,limm,u6 0101111011111101F111uuuuuu1QQQQQ. */ +{ "sethsl", 0x5EFD7020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* sethsl<.f> 0,ximm,s12 0101110010111101F111ssssssSSSSSS. */ +{ "sethsl", 0x5CBD7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* sethsl<.f> 0,limm,s12 0101111010111101F111ssssssSSSSSS. */ +{ "sethsl", 0x5EBD7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* sethsl<.f> RA,ximm,ximm 0101110000111101F111111100aaaaaa. */ +{ "sethsl", 0x5C3D7F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* sethsl<.f> 0,ximm,ximm 0101110000111101F111111100111110. */ +{ "sethsl", 0x5C3D7F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* sethsl<.f><.cc> 0,ximm,ximm 0101110011111101F1111111000QQQQQ. */ +{ "sethsl", 0x5CFD7F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* sethsl<.f> RA,limm,limm 0101111000111101F111111110aaaaaa. */ +{ "sethsl", 0x5E3D7F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* sethsl<.f> 0,limm,limm 0101111000111101F111111110111110. */ +{ "sethsl", 0x5E3D7FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* sethsl<.f><.cc> 0,limm,limm 0101111011111101F1111111100QQQQQ. */ +{ "sethsl", 0x5EFD7F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* seti c 00100110001011110000CCCCCC111111. */ +{ "seti", 0x262F003F, 0xFFFFF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, CONTROL, NONE, { RC }, { 0 }}, + +/* seti u6 00100110011011110000uuuuuu111111. */ +{ "seti", 0x266F003F, 0xFFFFF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, CONTROL, NONE, { UIMM6_20 }, { 0 }}, + +/* seti limm 00100110001011110000111110111111. */ +{ "seti", 0x262F0FBF, 0xFFFFFFFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, CONTROL, NONE, { LIMM }, { 0 }}, + +/* seti 00100110011011110000000000111111. */ +{ "seti", 0x266F003F, 0xFFFFFFFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, CONTROL, NONE, { 0 }, { 0 }}, + +/* setle<.f> a,b,c 00100bbb00111110FBBBCCCCCCAAAAAA. */ +{ "setle", 0x203E0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, RC }, { C_F }}, + +/* setle<.f> 0,b,c 00100bbb00111110FBBBCCCCCC111110. */ +{ "setle", 0x203E003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, RC }, { C_F }}, + +/* setle<.f><.cc> b,b,c 00100bbb11111110FBBBCCCCCC0QQQQQ. */ +{ "setle", 0x20FE0000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* setle<.f> a,b,u6 00100bbb01111110FBBBuuuuuuAAAAAA. */ +{ "setle", 0x207E0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* setle<.f> 0,b,u6 00100bbb01111110FBBBuuuuuu111110. */ +{ "setle", 0x207E003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* setle<.f><.cc> b,b,u6 00100bbb11111110FBBBuuuuuu1QQQQQ. */ +{ "setle", 0x20FE0020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* setle<.f> b,b,s12 00100bbb10111110FBBBssssssSSSSSS. */ +{ "setle", 0x20BE0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* setle<.f> a,limm,c 0010011000111110F111CCCCCCAAAAAA. */ +{ "setle", 0x263E7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, RC }, { C_F }}, + +/* setle<.f> a,b,limm 00100bbb00111110FBBB111110AAAAAA. */ +{ "setle", 0x203E0F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, LIMM }, { C_F }}, + +/* setle<.f> 0,limm,c 0010011000111110F111CCCCCC111110. */ +{ "setle", 0x263E703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* setle<.f> 0,b,limm 00100bbb00111110FBBB111110111110. */ +{ "setle", 0x203E0FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* setle<.f><.cc> b,b,limm 00100bbb11111110FBBB1111100QQQQQ. */ +{ "setle", 0x20FE0F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* setle<.f><.cc> 0,limm,c 0010011011111110F111CCCCCC0QQQQQ. */ +{ "setle", 0x26FE7000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* setle<.f> a,limm,u6 0010011001111110F111uuuuuuAAAAAA. */ +{ "setle", 0x267E7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* setle<.f> 0,limm,u6 0010011001111110F111uuuuuu111110. */ +{ "setle", 0x267E703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* setle<.f><.cc> 0,limm,u6 0010011011111110F111uuuuuu1QQQQQ. */ +{ "setle", 0x26FE7020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* setle<.f> 0,limm,s12 0010011010111110F111ssssssSSSSSS. */ +{ "setle", 0x26BE7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* setle<.f> a,limm,limm 0010011000111110F111111110AAAAAA. */ +{ "setle", 0x263E7F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* setle<.f> 0,limm,limm 0010011000111110F111111110111110. */ +{ "setle", 0x263E7FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* setle<.f><.cc> 0,limm,limm 0010011011111110F1111111100QQQQQ. */ +{ "setle", 0x26FE7F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* setlel<.f> RA,RB,RC 01011bbb00111110FBBBccccccaaaaaa. */ +{ "setlel", 0x583E0000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* setlel<.f> 0,RB,RC 01011bbb00111110FBBBcccccc111110. */ +{ "setlel", 0x583E003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* setlel<.f><.cc> RB,RB,RC 01011bbb11111110FBBBcccccc0QQQQQ. */ +{ "setlel", 0x58FE0000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* setlel<.f> RA,RB,u6 01011bbb01111110FBBBuuuuuuaaaaaa. */ +{ "setlel", 0x587E0000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* setlel<.f> 0,RB,u6 01011bbb01111110FBBBuuuuuu111110. */ +{ "setlel", 0x587E003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* setlel<.f><.cc> RB,RB,u6 01011bbb11111110FBBBuuuuuu1QQQQQ. */ +{ "setlel", 0x58FE0020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* setlel<.f> RB,RB,s12 01011bbb10111110FBBBssssssSSSSSS. */ +{ "setlel", 0x58BE0000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* setlel<.f> RA,ximm,RC 0101110000111110F111ccccccaaaaaa. */ +{ "setlel", 0x5C3E7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* setlel<.f> RA,RB,ximm 01011bbb00111110FBBB111100aaaaaa. */ +{ "setlel", 0x583E0F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* setlel<.f> 0,ximm,RC 0101110000111110F111cccccc111110. */ +{ "setlel", 0x5C3E703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* setlel<.f> 0,RB,ximm 01011bbb00111110FBBB111100111110. */ +{ "setlel", 0x583E0F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* setlel<.f><.cc> 0,ximm,RC 0101110011111110F111cccccc0QQQQQ. */ +{ "setlel", 0x5CFE7000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* setlel<.f><.cc> RB,RB,ximm 01011bbb11111110FBBB1111000QQQQQ. */ +{ "setlel", 0x58FE0F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* setlel<.f> RA,ximm,u6 0101110001111110F111uuuuuuaaaaaa. */ +{ "setlel", 0x5C7E7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* setlel<.f> 0,ximm,u6 0101110001111110F111uuuuuu111110. */ +{ "setlel", 0x5C7E703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* setlel<.f><.cc> 0,ximm,u6 0101110011111110F111uuuuuu1QQQQQ. */ +{ "setlel", 0x5CFE7020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* setlel<.f> RA,limm,RC 0101111000111110F111ccccccaaaaaa. */ +{ "setlel", 0x5E3E7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* setlel<.f> RA,RB,limm 01011bbb00111110FBBB111110aaaaaa. */ +{ "setlel", 0x583E0F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* setlel<.f> 0,limm,RC 0101111000111110F111cccccc111110. */ +{ "setlel", 0x5E3E703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* setlel<.f> 0,RB,limm 01011bbb00111110FBBB111110111110. */ +{ "setlel", 0x583E0FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* setlel<.f><.cc> 0,limm,RC 0101111011111110F111cccccc0QQQQQ. */ +{ "setlel", 0x5EFE7000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* setlel<.f><.cc> RB,RB,limm 01011bbb11111110FBBB1111100QQQQQ. */ +{ "setlel", 0x58FE0F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* setlel<.f> RA,limm,u6 0101111001111110F111uuuuuuaaaaaa. */ +{ "setlel", 0x5E7E7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* setlel<.f> 0,limm,u6 0101111001111110F111uuuuuu111110. */ +{ "setlel", 0x5E7E703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* setlel<.f><.cc> 0,limm,u6 0101111011111110F111uuuuuu1QQQQQ. */ +{ "setlel", 0x5EFE7020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* setlel<.f> 0,ximm,s12 0101110010111110F111ssssssSSSSSS. */ +{ "setlel", 0x5CBE7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* setlel<.f> 0,limm,s12 0101111010111110F111ssssssSSSSSS. */ +{ "setlel", 0x5EBE7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* setlel<.f> RA,ximm,ximm 0101110000111110F111111100aaaaaa. */ +{ "setlel", 0x5C3E7F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* setlel<.f> 0,ximm,ximm 0101110000111110F111111100111110. */ +{ "setlel", 0x5C3E7F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* setlel<.f><.cc> 0,ximm,ximm 0101110011111110F1111111000QQQQQ. */ +{ "setlel", 0x5CFE7F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* setlel<.f> RA,limm,limm 0101111000111110F111111110aaaaaa. */ +{ "setlel", 0x5E3E7F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* setlel<.f> 0,limm,limm 0101111000111110F111111110111110. */ +{ "setlel", 0x5E3E7FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* setlel<.f><.cc> 0,limm,limm 0101111011111110F1111111100QQQQQ. */ +{ "setlel", 0x5EFE7F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* setlo<.f> a,b,c 00100bbb00111100FBBBCCCCCCAAAAAA. */ +{ "setlo", 0x203C0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, RC }, { C_F }}, + +/* setlo<.f> 0,b,c 00100bbb00111100FBBBCCCCCC111110. */ +{ "setlo", 0x203C003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, RC }, { C_F }}, + +/* setlo<.f><.cc> b,b,c 00100bbb11111100FBBBCCCCCC0QQQQQ. */ +{ "setlo", 0x20FC0000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* setlo<.f> a,b,u6 00100bbb01111100FBBBuuuuuuAAAAAA. */ +{ "setlo", 0x207C0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* setlo<.f> 0,b,u6 00100bbb01111100FBBBuuuuuu111110. */ +{ "setlo", 0x207C003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* setlo<.f><.cc> b,b,u6 00100bbb11111100FBBBuuuuuu1QQQQQ. */ +{ "setlo", 0x20FC0020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* setlo<.f> b,b,s12 00100bbb10111100FBBBssssssSSSSSS. */ +{ "setlo", 0x20BC0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* setlo<.f> a,limm,c 0010011000111100F111CCCCCCAAAAAA. */ +{ "setlo", 0x263C7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, RC }, { C_F }}, + +/* setlo<.f> a,b,limm 00100bbb00111100FBBB111110AAAAAA. */ +{ "setlo", 0x203C0F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, LIMM }, { C_F }}, + +/* setlo<.f> 0,limm,c 0010011000111100F111CCCCCC111110. */ +{ "setlo", 0x263C703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* setlo<.f> 0,b,limm 00100bbb00111100FBBB111110111110. */ +{ "setlo", 0x203C0FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* setlo<.f><.cc> b,b,limm 00100bbb11111100FBBB1111100QQQQQ. */ +{ "setlo", 0x20FC0F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* setlo<.f><.cc> 0,limm,c 0010011011111100F111CCCCCC0QQQQQ. */ +{ "setlo", 0x26FC7000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* setlo<.f> a,limm,u6 0010011001111100F111uuuuuuAAAAAA. */ +{ "setlo", 0x267C7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* setlo<.f> 0,limm,u6 0010011001111100F111uuuuuu111110. */ +{ "setlo", 0x267C703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* setlo<.f><.cc> 0,limm,u6 0010011011111100F111uuuuuu1QQQQQ. */ +{ "setlo", 0x26FC7020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* setlo<.f> 0,limm,s12 0010011010111100F111ssssssSSSSSS. */ +{ "setlo", 0x26BC7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* setlo<.f> a,limm,limm 0010011000111100F111111110AAAAAA. */ +{ "setlo", 0x263C7F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* setlo<.f> 0,limm,limm 0010011000111100F111111110111110. */ +{ "setlo", 0x263C7FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* setlo<.f><.cc> 0,limm,limm 0010011011111100F1111111100QQQQQ. */ +{ "setlo", 0x26FC7F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* setlol<.f> RA,RB,RC 01011bbb00111100FBBBccccccaaaaaa. */ +{ "setlol", 0x583C0000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* setlol<.f> 0,RB,RC 01011bbb00111100FBBBcccccc111110. */ +{ "setlol", 0x583C003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* setlol<.f><.cc> RB,RB,RC 01011bbb11111100FBBBcccccc0QQQQQ. */ +{ "setlol", 0x58FC0000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* setlol<.f> RA,RB,u6 01011bbb01111100FBBBuuuuuuaaaaaa. */ +{ "setlol", 0x587C0000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* setlol<.f> 0,RB,u6 01011bbb01111100FBBBuuuuuu111110. */ +{ "setlol", 0x587C003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* setlol<.f><.cc> RB,RB,u6 01011bbb11111100FBBBuuuuuu1QQQQQ. */ +{ "setlol", 0x58FC0020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* setlol<.f> RB,RB,s12 01011bbb10111100FBBBssssssSSSSSS. */ +{ "setlol", 0x58BC0000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* setlol<.f> RA,ximm,RC 0101110000111100F111ccccccaaaaaa. */ +{ "setlol", 0x5C3C7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* setlol<.f> RA,RB,ximm 01011bbb00111100FBBB111100aaaaaa. */ +{ "setlol", 0x583C0F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* setlol<.f> 0,ximm,RC 0101110000111100F111cccccc111110. */ +{ "setlol", 0x5C3C703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* setlol<.f> 0,RB,ximm 01011bbb00111100FBBB111100111110. */ +{ "setlol", 0x583C0F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* setlol<.f><.cc> 0,ximm,RC 0101110011111100F111cccccc0QQQQQ. */ +{ "setlol", 0x5CFC7000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* setlol<.f><.cc> RB,RB,ximm 01011bbb11111100FBBB1111000QQQQQ. */ +{ "setlol", 0x58FC0F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* setlol<.f> RA,ximm,u6 0101110001111100F111uuuuuuaaaaaa. */ +{ "setlol", 0x5C7C7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* setlol<.f> 0,ximm,u6 0101110001111100F111uuuuuu111110. */ +{ "setlol", 0x5C7C703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* setlol<.f><.cc> 0,ximm,u6 0101110011111100F111uuuuuu1QQQQQ. */ +{ "setlol", 0x5CFC7020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* setlol<.f> RA,limm,RC 0101111000111100F111ccccccaaaaaa. */ +{ "setlol", 0x5E3C7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* setlol<.f> RA,RB,limm 01011bbb00111100FBBB111110aaaaaa. */ +{ "setlol", 0x583C0F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* setlol<.f> 0,limm,RC 0101111000111100F111cccccc111110. */ +{ "setlol", 0x5E3C703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* setlol<.f> 0,RB,limm 01011bbb00111100FBBB111110111110. */ +{ "setlol", 0x583C0FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* setlol<.f><.cc> 0,limm,RC 0101111011111100F111cccccc0QQQQQ. */ +{ "setlol", 0x5EFC7000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* setlol<.f><.cc> RB,RB,limm 01011bbb11111100FBBB1111100QQQQQ. */ +{ "setlol", 0x58FC0F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* setlol<.f> RA,limm,u6 0101111001111100F111uuuuuuaaaaaa. */ +{ "setlol", 0x5E7C7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* setlol<.f> 0,limm,u6 0101111001111100F111uuuuuu111110. */ +{ "setlol", 0x5E7C703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* setlol<.f><.cc> 0,limm,u6 0101111011111100F111uuuuuu1QQQQQ. */ +{ "setlol", 0x5EFC7020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* setlol<.f> 0,ximm,s12 0101110010111100F111ssssssSSSSSS. */ +{ "setlol", 0x5CBC7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* setlol<.f> 0,limm,s12 0101111010111100F111ssssssSSSSSS. */ +{ "setlol", 0x5EBC7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* setlol<.f> RA,ximm,ximm 0101110000111100F111111100aaaaaa. */ +{ "setlol", 0x5C3C7F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* setlol<.f> 0,ximm,ximm 0101110000111100F111111100111110. */ +{ "setlol", 0x5C3C7F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* setlol<.f><.cc> 0,ximm,ximm 0101110011111100F1111111000QQQQQ. */ +{ "setlol", 0x5CFC7F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* setlol<.f> RA,limm,limm 0101111000111100F111111110aaaaaa. */ +{ "setlol", 0x5E3C7F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* setlol<.f> 0,limm,limm 0101111000111100F111111110111110. */ +{ "setlol", 0x5E3C7FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* setlol<.f><.cc> 0,limm,limm 0101111011111100F1111111100QQQQQ. */ +{ "setlol", 0x5EFC7F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* setlt<.f> a,b,c 00100bbb00111010FBBBCCCCCCAAAAAA. */ +{ "setlt", 0x203A0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, RC }, { C_F }}, + +/* setlt<.f> 0,b,c 00100bbb00111010FBBBCCCCCC111110. */ +{ "setlt", 0x203A003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, RC }, { C_F }}, + +/* setlt<.f><.cc> b,b,c 00100bbb11111010FBBBCCCCCC0QQQQQ. */ +{ "setlt", 0x20FA0000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* setlt<.f> a,b,u6 00100bbb01111010FBBBuuuuuuAAAAAA. */ +{ "setlt", 0x207A0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* setlt<.f> 0,b,u6 00100bbb01111010FBBBuuuuuu111110. */ +{ "setlt", 0x207A003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* setlt<.f><.cc> b,b,u6 00100bbb11111010FBBBuuuuuu1QQQQQ. */ +{ "setlt", 0x20FA0020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* setlt<.f> b,b,s12 00100bbb10111010FBBBssssssSSSSSS. */ +{ "setlt", 0x20BA0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* setlt<.f> a,limm,c 0010011000111010F111CCCCCCAAAAAA. */ +{ "setlt", 0x263A7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, RC }, { C_F }}, + +/* setlt<.f> a,b,limm 00100bbb00111010FBBB111110AAAAAA. */ +{ "setlt", 0x203A0F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, LIMM }, { C_F }}, + +/* setlt<.f> 0,limm,c 0010011000111010F111CCCCCC111110. */ +{ "setlt", 0x263A703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* setlt<.f> 0,b,limm 00100bbb00111010FBBB111110111110. */ +{ "setlt", 0x203A0FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* setlt<.f><.cc> b,b,limm 00100bbb11111010FBBB1111100QQQQQ. */ +{ "setlt", 0x20FA0F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* setlt<.f><.cc> 0,limm,c 0010011011111010F111CCCCCC0QQQQQ. */ +{ "setlt", 0x26FA7000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* setlt<.f> a,limm,u6 0010011001111010F111uuuuuuAAAAAA. */ +{ "setlt", 0x267A7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* setlt<.f> 0,limm,u6 0010011001111010F111uuuuuu111110. */ +{ "setlt", 0x267A703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* setlt<.f><.cc> 0,limm,u6 0010011011111010F111uuuuuu1QQQQQ. */ +{ "setlt", 0x26FA7020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* setlt<.f> 0,limm,s12 0010011010111010F111ssssssSSSSSS. */ +{ "setlt", 0x26BA7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* setlt<.f> a,limm,limm 0010011000111010F111111110AAAAAA. */ +{ "setlt", 0x263A7F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* setlt<.f> 0,limm,limm 0010011000111010F111111110111110. */ +{ "setlt", 0x263A7FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* setlt<.f><.cc> 0,limm,limm 0010011011111010F1111111100QQQQQ. */ +{ "setlt", 0x26FA7F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* setltl<.f> RA,RB,RC 01011bbb00111010FBBBccccccaaaaaa. */ +{ "setltl", 0x583A0000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* setltl<.f> 0,RB,RC 01011bbb00111010FBBBcccccc111110. */ +{ "setltl", 0x583A003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* setltl<.f><.cc> RB,RB,RC 01011bbb11111010FBBBcccccc0QQQQQ. */ +{ "setltl", 0x58FA0000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* setltl<.f> RA,RB,u6 01011bbb01111010FBBBuuuuuuaaaaaa. */ +{ "setltl", 0x587A0000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* setltl<.f> 0,RB,u6 01011bbb01111010FBBBuuuuuu111110. */ +{ "setltl", 0x587A003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* setltl<.f><.cc> RB,RB,u6 01011bbb11111010FBBBuuuuuu1QQQQQ. */ +{ "setltl", 0x58FA0020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* setltl<.f> RB,RB,s12 01011bbb10111010FBBBssssssSSSSSS. */ +{ "setltl", 0x58BA0000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* setltl<.f> RA,ximm,RC 0101110000111010F111ccccccaaaaaa. */ +{ "setltl", 0x5C3A7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* setltl<.f> RA,RB,ximm 01011bbb00111010FBBB111100aaaaaa. */ +{ "setltl", 0x583A0F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* setltl<.f> 0,ximm,RC 0101110000111010F111cccccc111110. */ +{ "setltl", 0x5C3A703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* setltl<.f> 0,RB,ximm 01011bbb00111010FBBB111100111110. */ +{ "setltl", 0x583A0F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* setltl<.f><.cc> 0,ximm,RC 0101110011111010F111cccccc0QQQQQ. */ +{ "setltl", 0x5CFA7000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* setltl<.f><.cc> RB,RB,ximm 01011bbb11111010FBBB1111000QQQQQ. */ +{ "setltl", 0x58FA0F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* setltl<.f> RA,ximm,u6 0101110001111010F111uuuuuuaaaaaa. */ +{ "setltl", 0x5C7A7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* setltl<.f> 0,ximm,u6 0101110001111010F111uuuuuu111110. */ +{ "setltl", 0x5C7A703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* setltl<.f><.cc> 0,ximm,u6 0101110011111010F111uuuuuu1QQQQQ. */ +{ "setltl", 0x5CFA7020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* setltl<.f> RA,limm,RC 0101111000111010F111ccccccaaaaaa. */ +{ "setltl", 0x5E3A7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* setltl<.f> RA,RB,limm 01011bbb00111010FBBB111110aaaaaa. */ +{ "setltl", 0x583A0F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* setltl<.f> 0,limm,RC 0101111000111010F111cccccc111110. */ +{ "setltl", 0x5E3A703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* setltl<.f> 0,RB,limm 01011bbb00111010FBBB111110111110. */ +{ "setltl", 0x583A0FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* setltl<.f><.cc> 0,limm,RC 0101111011111010F111cccccc0QQQQQ. */ +{ "setltl", 0x5EFA7000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* setltl<.f><.cc> RB,RB,limm 01011bbb11111010FBBB1111100QQQQQ. */ +{ "setltl", 0x58FA0F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* setltl<.f> RA,limm,u6 0101111001111010F111uuuuuuaaaaaa. */ +{ "setltl", 0x5E7A7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* setltl<.f> 0,limm,u6 0101111001111010F111uuuuuu111110. */ +{ "setltl", 0x5E7A703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* setltl<.f><.cc> 0,limm,u6 0101111011111010F111uuuuuu1QQQQQ. */ +{ "setltl", 0x5EFA7020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* setltl<.f> 0,ximm,s12 0101110010111010F111ssssssSSSSSS. */ +{ "setltl", 0x5CBA7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* setltl<.f> 0,limm,s12 0101111010111010F111ssssssSSSSSS. */ +{ "setltl", 0x5EBA7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* setltl<.f> RA,ximm,ximm 0101110000111010F111111100aaaaaa. */ +{ "setltl", 0x5C3A7F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* setltl<.f> 0,ximm,ximm 0101110000111010F111111100111110. */ +{ "setltl", 0x5C3A7F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* setltl<.f><.cc> 0,ximm,ximm 0101110011111010F1111111000QQQQQ. */ +{ "setltl", 0x5CFA7F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* setltl<.f> RA,limm,limm 0101111000111010F111111110aaaaaa. */ +{ "setltl", 0x5E3A7F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* setltl<.f> 0,limm,limm 0101111000111010F111111110111110. */ +{ "setltl", 0x5E3A7FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* setltl<.f><.cc> 0,limm,limm 0101111011111010F1111111100QQQQQ. */ +{ "setltl", 0x5EFA7F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* setne<.f> a,b,c 00100bbb00111001FBBBCCCCCCAAAAAA. */ +{ "setne", 0x20390000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, RC }, { C_F }}, + +/* setne<.f> 0,b,c 00100bbb00111001FBBBCCCCCC111110. */ +{ "setne", 0x2039003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, RC }, { C_F }}, + +/* setne<.f><.cc> b,b,c 00100bbb11111001FBBBCCCCCC0QQQQQ. */ +{ "setne", 0x20F90000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* setne<.f> a,b,u6 00100bbb01111001FBBBuuuuuuAAAAAA. */ +{ "setne", 0x20790000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* setne<.f> 0,b,u6 00100bbb01111001FBBBuuuuuu111110. */ +{ "setne", 0x2079003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* setne<.f><.cc> b,b,u6 00100bbb11111001FBBBuuuuuu1QQQQQ. */ +{ "setne", 0x20F90020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* setne<.f> b,b,s12 00100bbb10111001FBBBssssssSSSSSS. */ +{ "setne", 0x20B90000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* setne<.f> a,limm,c 0010011000111001F111CCCCCCAAAAAA. */ +{ "setne", 0x26397000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, RC }, { C_F }}, + +/* setne<.f> a,b,limm 00100bbb00111001FBBB111110AAAAAA. */ +{ "setne", 0x20390F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, LIMM }, { C_F }}, + +/* setne<.f> 0,limm,c 0010011000111001F111CCCCCC111110. */ +{ "setne", 0x2639703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* setne<.f> 0,b,limm 00100bbb00111001FBBB111110111110. */ +{ "setne", 0x20390FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* setne<.f><.cc> b,b,limm 00100bbb11111001FBBB1111100QQQQQ. */ +{ "setne", 0x20F90F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* setne<.f><.cc> 0,limm,c 0010011011111001F111CCCCCC0QQQQQ. */ +{ "setne", 0x26F97000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* setne<.f> a,limm,u6 0010011001111001F111uuuuuuAAAAAA. */ +{ "setne", 0x26797000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* setne<.f> 0,limm,u6 0010011001111001F111uuuuuu111110. */ +{ "setne", 0x2679703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* setne<.f><.cc> 0,limm,u6 0010011011111001F111uuuuuu1QQQQQ. */ +{ "setne", 0x26F97020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* setne<.f> 0,limm,s12 0010011010111001F111ssssssSSSSSS. */ +{ "setne", 0x26B97000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* setne<.f> a,limm,limm 0010011000111001F111111110AAAAAA. */ +{ "setne", 0x26397F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* setne<.f> 0,limm,limm 0010011000111001F111111110111110. */ +{ "setne", 0x26397FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* setne<.f><.cc> 0,limm,limm 0010011011111001F1111111100QQQQQ. */ +{ "setne", 0x26F97F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* setnel<.f> RA,RB,RC 01011bbb00111001FBBBccccccaaaaaa. */ +{ "setnel", 0x58390000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* setnel<.f> 0,RB,RC 01011bbb00111001FBBBcccccc111110. */ +{ "setnel", 0x5839003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* setnel<.f><.cc> RB,RB,RC 01011bbb11111001FBBBcccccc0QQQQQ. */ +{ "setnel", 0x58F90000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* setnel<.f> RA,RB,u6 01011bbb01111001FBBBuuuuuuaaaaaa. */ +{ "setnel", 0x58790000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* setnel<.f> 0,RB,u6 01011bbb01111001FBBBuuuuuu111110. */ +{ "setnel", 0x5879003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* setnel<.f><.cc> RB,RB,u6 01011bbb11111001FBBBuuuuuu1QQQQQ. */ +{ "setnel", 0x58F90020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* setnel<.f> RB,RB,s12 01011bbb10111001FBBBssssssSSSSSS. */ +{ "setnel", 0x58B90000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* setnel<.f> RA,ximm,RC 0101110000111001F111ccccccaaaaaa. */ +{ "setnel", 0x5C397000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* setnel<.f> RA,RB,ximm 01011bbb00111001FBBB111100aaaaaa. */ +{ "setnel", 0x58390F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* setnel<.f> 0,ximm,RC 0101110000111001F111cccccc111110. */ +{ "setnel", 0x5C39703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* setnel<.f> 0,RB,ximm 01011bbb00111001FBBB111100111110. */ +{ "setnel", 0x58390F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* setnel<.f><.cc> 0,ximm,RC 0101110011111001F111cccccc0QQQQQ. */ +{ "setnel", 0x5CF97000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* setnel<.f><.cc> RB,RB,ximm 01011bbb11111001FBBB1111000QQQQQ. */ +{ "setnel", 0x58F90F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* setnel<.f> RA,ximm,u6 0101110001111001F111uuuuuuaaaaaa. */ +{ "setnel", 0x5C797000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* setnel<.f> 0,ximm,u6 0101110001111001F111uuuuuu111110. */ +{ "setnel", 0x5C79703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* setnel<.f><.cc> 0,ximm,u6 0101110011111001F111uuuuuu1QQQQQ. */ +{ "setnel", 0x5CF97020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* setnel<.f> RA,limm,RC 0101111000111001F111ccccccaaaaaa. */ +{ "setnel", 0x5E397000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* setnel<.f> RA,RB,limm 01011bbb00111001FBBB111110aaaaaa. */ +{ "setnel", 0x58390F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* setnel<.f> 0,limm,RC 0101111000111001F111cccccc111110. */ +{ "setnel", 0x5E39703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* setnel<.f> 0,RB,limm 01011bbb00111001FBBB111110111110. */ +{ "setnel", 0x58390FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* setnel<.f><.cc> 0,limm,RC 0101111011111001F111cccccc0QQQQQ. */ +{ "setnel", 0x5EF97000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* setnel<.f><.cc> RB,RB,limm 01011bbb11111001FBBB1111100QQQQQ. */ +{ "setnel", 0x58F90F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* setnel<.f> RA,limm,u6 0101111001111001F111uuuuuuaaaaaa. */ +{ "setnel", 0x5E797000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* setnel<.f> 0,limm,u6 0101111001111001F111uuuuuu111110. */ +{ "setnel", 0x5E79703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* setnel<.f><.cc> 0,limm,u6 0101111011111001F111uuuuuu1QQQQQ. */ +{ "setnel", 0x5EF97020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* setnel<.f> 0,ximm,s12 0101110010111001F111ssssssSSSSSS. */ +{ "setnel", 0x5CB97000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* setnel<.f> 0,limm,s12 0101111010111001F111ssssssSSSSSS. */ +{ "setnel", 0x5EB97000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* setnel<.f> RA,ximm,ximm 0101110000111001F111111100aaaaaa. */ +{ "setnel", 0x5C397F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* setnel<.f> 0,ximm,ximm 0101110000111001F111111100111110. */ +{ "setnel", 0x5C397F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* setnel<.f><.cc> 0,ximm,ximm 0101110011111001F1111111000QQQQQ. */ +{ "setnel", 0x5CF97F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* setnel<.f> RA,limm,limm 0101111000111001F111111110aaaaaa. */ +{ "setnel", 0x5E397F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* setnel<.f> 0,limm,limm 0101111000111001F111111110111110. */ +{ "setnel", 0x5E397FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* setnel<.f><.cc> 0,limm,limm 0101111011111001F1111111100QQQQQ. */ +{ "setnel", 0x5EF97F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* sexb<.f> b,c 00100bbb00101111FBBBCCCCCC000101. */ +{ "sexb", 0x202F0005, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { C_F }}, + +/* sexb<.f> 0,c 0010011000101111F111CCCCCC000101. */ +{ "sexb", 0x262F7005, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RC }, { C_F }}, + +/* sexb<.f> b,u6 00100bbb01101111FBBBuuuuuu000101. */ +{ "sexb", 0x206F0005, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { C_F }}, + +/* sexb<.f> 0,u6 0010011001101111F111uuuuuu000101. */ +{ "sexb", 0x266F7005, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, UIMM6_20 }, { C_F }}, + +/* sexb<.f> b,limm 00100bbb00101111FBBB111110000101. */ +{ "sexb", 0x202F0F85, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM }, { C_F }}, + +/* sexb<.f> 0,limm 0010011000101111F111111110000101. */ +{ "sexb", 0x262F7F85, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM }, { C_F }}, + +/* sexbl<.f> RB,RC 01011bbb00101111FBBBcccccc000101. */ +{ "sexbl", 0x582F0005, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { C_F }}, + +/* sexbl<.f> 0,RC 0101111000101111F111cccccc000101. */ +{ "sexbl", 0x5E2F7005, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RC }, { C_F }}, + +/* sexbl<.f> RB,u6 01011bbb01101111FBBBuuuuuu000101. */ +{ "sexbl", 0x586F0005, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { C_F }}, + +/* sexbl<.f> 0,u6 0101111001101111F111uuuuuu000101. */ +{ "sexbl", 0x5E6F7005, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, UIMM6_20 }, { C_F }}, + +/* sexbl<.f> RB,ximm 01011bbb00101111FBBB111100000101. */ +{ "sexbl", 0x582F0F05, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, XIMM }, { C_F }}, + +/* sexbl<.f> 0,ximm 0101111000101111F111111100000101. */ +{ "sexbl", 0x5E2F7F05, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM }, { C_F }}, + +/* sexbl<.f> RB,limm 01011bbb00101111FBBB111110000101. */ +{ "sexbl", 0x582F0F85, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM }, { C_F }}, + +/* sexbl<.f> 0,limm 0101111000101111F111111110000101. */ +{ "sexbl", 0x5E2F7F85, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM }, { C_F }}, + +/* sexb_s b,c 01111bbbccc01101. */ +{ "sexb_s", 0x0000780D, 0x0000F81F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB_S, RC_S }, { 0 }}, + +/* sexh<.f> b,c 00100bbb00101111FBBBCCCCCC000110. */ +{ "sexh", 0x202F0006, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { C_F }}, + +/* sexh<.f> 0,c 0010011000101111F111CCCCCC000110. */ +{ "sexh", 0x262F7006, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RC }, { C_F }}, + +/* sexh<.f> b,u6 00100bbb01101111FBBBuuuuuu000110. */ +{ "sexh", 0x206F0006, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { C_F }}, + +/* sexh<.f> 0,u6 0010011001101111F111uuuuuu000110. */ +{ "sexh", 0x266F7006, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, UIMM6_20 }, { C_F }}, + +/* sexh<.f> b,limm 00100bbb00101111FBBB111110000110. */ +{ "sexh", 0x202F0F86, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM }, { C_F }}, + +/* sexh<.f> 0,limm 0010011000101111F111111110000110. */ +{ "sexh", 0x262F7F86, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM }, { C_F }}, + +/* sexhl<.f> RB,RC 01011bbb00101111FBBBcccccc000110. */ +{ "sexhl", 0x582F0006, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { C_F }}, + +/* sexhl<.f> 0,RC 0101111000101111F111cccccc000110. */ +{ "sexhl", 0x5E2F7006, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RC }, { C_F }}, + +/* sexhl<.f> RB,u6 01011bbb01101111FBBBuuuuuu000110. */ +{ "sexhl", 0x586F0006, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { C_F }}, + +/* sexhl<.f> 0,u6 0101111001101111F111uuuuuu000110. */ +{ "sexhl", 0x5E6F7006, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, UIMM6_20 }, { C_F }}, + +/* sexhl<.f> RB,ximm 01011bbb00101111FBBB111100000110. */ +{ "sexhl", 0x582F0F06, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, XIMM }, { C_F }}, + +/* sexhl<.f> 0,ximm 0101111000101111F111111100000110. */ +{ "sexhl", 0x5E2F7F06, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM }, { C_F }}, + +/* sexhl<.f> RB,limm 01011bbb00101111FBBB111110000110. */ +{ "sexhl", 0x582F0F86, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM }, { C_F }}, + +/* sexhl<.f> 0,limm 0101111000101111F111111110000110. */ +{ "sexhl", 0x5E2F7F86, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM }, { C_F }}, + +/* sexh_s b,c 01111bbbccc01110. */ +{ "sexh_s", 0x0000780E, 0x0000F81F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, NONE, { RB_S, RC_S }, { 0 }}, + +/* sexwl<.f> RB,RC 01011bbb00101111FBBBcccccc000111. */ +{ "sexwl", 0x582F0007, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { C_F }}, + +/* sexwl<.f> 0,RC 0101111000101111F111cccccc000111. */ +{ "sexwl", 0x5E2F7007, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RC }, { C_F }}, + +/* sexwl<.f> RB,u6 01011bbb01101111FBBBuuuuuu000111. */ +{ "sexwl", 0x586F0007, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { C_F }}, + +/* sexwl<.f> 0,u6 0101111001101111F111uuuuuu000111. */ +{ "sexwl", 0x5E6F7007, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, UIMM6_20 }, { C_F }}, + +/* sexwl<.f> RB,ximm 01011bbb00101111FBBB111100000111. */ +{ "sexwl", 0x582F0F07, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, XIMM }, { C_F }}, + +/* sexwl<.f> 0,ximm 0101111000101111F111111100000111. */ +{ "sexwl", 0x5E2F7F07, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM }, { C_F }}, + +/* sexwl<.f> RB,limm 01011bbb00101111FBBB111110000111. */ +{ "sexwl", 0x582F0F87, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM }, { C_F }}, + +/* sexwl<.f> 0,limm 0101111000101111F111111110000111. */ +{ "sexwl", 0x5E2F7F87, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM }, { C_F }}, + +/* sleep c 00100001001011110000CCCCCC111111. */ +{ "sleep", 0x212F003F, 0xFFFFF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, KERNEL, NONE, { RC }, { 0 }}, + +/* sleep u6 00100001011011110000uuuuuu111111. */ +{ "sleep", 0x216F003F, 0xFFFFF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, KERNEL, NONE, { UIMM6_20 }, { 0 }}, + +/* sleep limm 00100001001011110000111110111111. */ +{ "sleep", 0x212F0FBF, 0xFFFFFFFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, KERNEL, NONE, { LIMM }, { 0 }}, + +/* sleep 00100001011011110000000000111111. */ +{ "sleep", 0x216F003F, 0xFFFFFFFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, KERNEL, NONE, { 0 }, { 0 }}, + +/* sr b,c 00100bbb00101011RBBBCCCCCCRRRRRR. */ +{ "sr", 0x202B0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, AUXREG, NONE, { RB_CHK, BRAKET, RC, BRAKETdup }, { 0 }}, + +/* sr b,u6 00100bbb01101011RBBBuuuuuu000000. */ +{ "sr", 0x206B0000, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, AUXREG, NONE, { RB_CHK, BRAKET, UIMM6_20, BRAKETdup }, { 0 }}, + +/* sr b,s12 00100bbb10101011RBBBssssssSSSSSS. */ +{ "sr", 0x20AB0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, AUXREG, NONE, { RB_CHK, BRAKET, SIMM12_20, BRAKETdup }, { 0 }}, + +/* sr limm,c 0010011000101011R111CCCCCCRRRRRR. */ +{ "sr", 0x262B7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, AUXREG, NONE, { LIMM, BRAKET, RC, BRAKETdup }, { 0 }}, + +/* sr b,limm 00100bbb00101011RBBB111110RRRRRR. */ +{ "sr", 0x202B0F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, AUXREG, NONE, { RB_CHK, BRAKET, LIMM, BRAKETdup }, { 0 }}, + +/* sr limm,u6 0010011001101011R111uuuuuu000000. */ +{ "sr", 0x266B7000, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, AUXREG, NONE, { LIMM, BRAKET, UIMM6_20, BRAKETdup }, { 0 }}, + +/* sr limm,s12 0010011010101011R111ssssssSSSSSS. */ +{ "sr", 0x26AB7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, AUXREG, NONE, { LIMM, BRAKET, SIMM12_20, BRAKETdup }, { 0 }}, + +/* sr limm,limm 0010011000101011R111111110RRRRRR. */ +{ "sr", 0x262B7F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, AUXREG, NONE, { LIMM, BRAKET, LIMMdup, BRAKETdup }, { 0 }}, + +/* srl RB,RC 01011bbb001010110BBBccccccRRRRRR. */ +{ "srl", 0x582B0000, 0xF8FF8000, ARC_OPCODE_ARC64, AUXREG, NONE, { RB_CHK, BRAKET, RC, BRAKETdup }, { 0 }}, + +/* srl RB,u6 01011bbb011010110BBBuuuuuuRRRRRR. */ +{ "srl", 0x586B0000, 0xF8FF8000, ARC_OPCODE_ARC64, AUXREG, NONE, { RB_CHK, BRAKET, UIMM6_20, BRAKETdup }, { 0 }}, + +/* srl RB,s12 01011bbb101010110BBBssssssSSSSSS. */ +{ "srl", 0x58AB0000, 0xF8FF8000, ARC_OPCODE_ARC64, AUXREG, NONE, { RB_CHK, BRAKET, SIMM12_20, BRAKETdup }, { 0 }}, + +/* srl RB,ximm 01011bbb001010110BBB111100RRRRRR. */ +{ "srl", 0x582B0F00, 0xF8FF8FC0, ARC_OPCODE_ARC64, AUXREG, NONE, { RB_CHK, BRAKET, XIMM, BRAKETdup }, { 0 }}, + +/* srl RB,limm 01011bbb001010110BBB111110RRRRRR. */ +{ "srl", 0x582B0F80, 0xF8FF8FC0, ARC_OPCODE_ARC64, AUXREG, NONE, { RB_CHK, BRAKET, LIMM, BRAKETdup }, { 0 }}, + +/* st<.di><.aa> c,b 00011bbb000000000BBBCCCCCCDaaZZ0 -> st c ,[b,s9=0] */ +/* st<.di><.aa> w6,b 00011bbb000000000BBBwwwwwwDaaZZ1 -> st w6 ,[b,s9=0] */ +/* st<.di><.aa> limm,b 00011bbb000000000BBB111110DaaZZ0 -> st c=62,[b,s9=0] */ +/* st<.di> c,limm 00011110000000000111CCCCCCDRRZZ0 -> st c ,[b=62,s9=0] */ +/* st<.di> w6,limm 00011110000000000111wwwwwwDRRZZ1 -> st w6 ,[b=62,s9=0] */ +/* st<.di> limm,limm 00011110000000000111111110DRRZZ0 -> st c=62,[b=62,s9=0] */ +{ "st", 0x18000000, 0xF8FF8001, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, STORE, NONE, { RC, BRAKET, RB, BRAKETdup }, { C_ZZ29, C_DI26, C_AA27 }}, +{ "st", 0x18000001, 0xF8FF8001, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, STORE, NONE, { W6, BRAKET, RB, BRAKETdup }, { C_ZZ29, C_DI26, C_AA27 }}, +{ "st", 0x18000F80, 0xF8FF8FC1, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, STORE, NONE, { LIMM, BRAKET, RB, BRAKETdup }, { C_ZZ29, C_DI26, C_AA27 }}, +{ "st", 0x1E007000, 0xFFFFF001, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, STORE, NONE, { RC, BRAKET, LIMM, BRAKETdup }, { C_ZZ29, C_DI26 }}, +{ "st", 0x1E007001, 0xFFFFF001, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, STORE, NONE, { W6, BRAKET, LIMM, BRAKETdup }, { C_ZZ29, C_DI26 }}, +{ "st", 0x1E007F80, 0xFFFFFFC1, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, STORE, NONE, { LIMM, BRAKET, LIMMdup, BRAKETdup }, { C_ZZ29, C_DI26 }}, + +/* st<.di><.aa> c,b,s9 00011bbbssssssssSBBBCCCCCCDaaZZ0 -> st c ,[b,s9] */ +/* st<.di><.aa> w6,b,s9 00011bbbssssssssSBBBwwwwwwDaaZZ1 -> st w6 ,[b,s9] */ +/* st<.di><.aa> limm,b,s9 00011bbbssssssssSBBB111110DaaZZ0 -> st c=62,[b,s9] */ +/* st<.di><.aa> c,limm,s9 00011110ssssssssS111CCCCCCDRRZZ0 -> st c ,[b=62,s9] */ +/* st<.di><.aa> w6,limm,s9 00011110ssssssssS111wwwwwwDRRZZ1 -> st w6 ,[b=62,s9] */ +/* st<.di><.aa> limm,limm,s9 00011110ssssssssS111111110DRRZZ0 -> st c=62,[b=62,s9] */ +{ "st", 0x18000000, 0xF8000001, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, STORE, NONE, { RC, BRAKET, RB, SIMM9_8, BRAKETdup }, { C_ZZ29, C_DI26, C_AA27 }}, +{ "st", 0x18000001, 0xF8000001, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, STORE, NONE, { W6, BRAKET, RB, SIMM9_8, BRAKETdup }, { C_ZZ29, C_DI26, C_AA27 }}, +{ "st", 0x18000F80, 0xF8000FC1, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, STORE, NONE, { LIMM, BRAKET, RB, SIMM9_8, BRAKETdup }, { C_ZZ29, C_DI26, C_AA27 }}, +{ "st", 0x1E007000, 0xFF007001, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, STORE, NONE, { RC, BRAKET, LIMM, SIMM9_8, BRAKETdup }, { C_ZZ29, C_DI26 }}, +{ "st", 0x1E007001, 0xFF007001, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, STORE, NONE, { W6, BRAKET, LIMM, SIMM9_8, BRAKETdup }, { C_ZZ29, C_DI26 }}, +{ "st", 0x1E007F80, 0xFF007FC1, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, STORE, NONE, { LIMM, BRAKET, LIMMdup, SIMM9_8, BRAKETdup }, { C_ZZ29, C_DI26 }}, + +/* stb_sZZ_B c,b,u5 10101bbbcccuuuuu. */ +{ "stb_s", 0x0000A800, 0x0000F800,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, STORE, NONE, { RC_S, BRAKET, RB_S, UIMM5_11_S, BRAKETdup }, { C_ZZ_B }}, + +/* stb_sZZ_B b,SP,u7 11000bbb011uuuuu. */ +{ "stb_s", 0x0000C060, 0x0000F8E0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, STORE, NONE, { RB_S, BRAKET, SP_S, UIMM7_A32_11_S, BRAKETdup }, { C_ZZ_B }}, + +/* std<.aa>. c,b 00011bbb000000000BBBCCCCCCDaa110 -> std c,[b,s9=0] */ +/* std<.aa>. w6,b 00011bbb000000000BBBwwwwwwDaa111 -> std w6,[b,s9=0] */ +/* std<.aa>. limm,b 00011bbb000000000BBB111110Daa110 -> std c=62,[b,s9=0] */ +/* std<.aa>. c,limm 00011110000000000111CCCCCCDaa110 -> std c,[b=62,s9=0] */ +/* std<.aa>. w6,limm 00011110000000000111wwwwwwDaa111 -> std w6,[b=62,s9=0] */ +/* std<.aa>. limm,limm 00011110000000000111111110Daa110 -> std c=62,[b=62,s9=0] */ +{ "std", 0x18000006, 0xF8FF8007, ARC_OPCODE_ARC32, STORE, NONE, { RCD, BRAKET, RB, BRAKETdup }, { C_DI26, C_AA27 }}, +{ "std", 0x18000007, 0xF8FF8007, ARC_OPCODE_ARC32, STORE, NONE, { W6, BRAKET, RB, BRAKETdup }, { C_DI26, C_AA27 }}, +{ "std", 0x18000F86, 0xF8FF8FC7, ARC_OPCODE_ARC32, STORE, NONE, { LIMM, BRAKET, RB, BRAKETdup }, { C_DI26, C_AA27 }}, +{ "std", 0x1E007006, 0xFFFFF007, ARC_OPCODE_ARC32, STORE, NONE, { RCD, BRAKET, LIMM, BRAKETdup }, { C_DI26, C_AA27 }}, +{ "std", 0x1E007007, 0xFFFFF007, ARC_OPCODE_ARC32, STORE, NONE, { W6, BRAKET, LIMM, BRAKETdup }, { C_DI26, C_AA27 }}, +{ "std", 0x1E007F86, 0xFFFFFFC7, ARC_OPCODE_ARC32, STORE, NONE, { LIMM, BRAKET, LIMMdup, BRAKETdup }, { C_DI26, C_AA27 }}, + +/* std<.aa>. c,b,s9 00011bbbssssssssSBBBCCCCCCDaa110 -> std c,[b,s9] */ +/* std<.aa>. w6,b,s9 00011bbbssssssssSBBBwwwwwwDaa111 -> std w6,[b,s9] */ +/* std<.aa>. limm,b,s9 00011bbbssssssssSBBB111110Daa110 -> std c=62,[b,s9] */ +/* std<.aa>. c,limm,s9 00011110ssssssssS111CCCCCCDaa110 -> std c,[b=62,s9] */ +/* std<.aa>. w6,limm,s9 00011110ssssssssS111wwwwwwDaa111 -> std w6,[b=62,s9] */ +/* std<.aa>. limm,limm,s9 00011110ssssssssS111111110Daa110 -> std c=62,[b=62,s9] */ +{ "std", 0x18000006, 0xF8000007, ARC_OPCODE_ARC32, STORE, NONE, { RCD, BRAKET, RB, SIMM9_8, BRAKETdup }, { C_DI26, C_AA27 }}, +{ "std", 0x18000007, 0xF8000007, ARC_OPCODE_ARC32, STORE, NONE, { W6, BRAKET, RB, SIMM9_8, BRAKETdup }, { C_DI26, C_AA27 }}, +{ "std", 0x18000F86, 0xF8000FC7, ARC_OPCODE_ARC32, STORE, NONE, { LIMM, BRAKET, RB, SIMM9_8, BRAKETdup }, { C_DI26, C_AA27 }}, +{ "std", 0x1E007006, 0xFF007007, ARC_OPCODE_ARC32, STORE, NONE, { RCD, BRAKET, LIMM, SIMM9_8, BRAKETdup }, { C_DI26, C_AA27 }}, +{ "std", 0x1E007007, 0xFF007007, ARC_OPCODE_ARC32, STORE, NONE, { W6, BRAKET, LIMM, SIMM9_8, BRAKETdup }, { C_DI26, C_AA27 }}, +{ "std", 0x1E007F86, 0xFF007FC7, ARC_OPCODE_ARC32, STORE, NONE, { LIMM, BRAKET, LIMMdup, SIMM9_8, BRAKETdup }, { C_DI26, C_AA27 }}, + +/* stdl<.aa> c,b 00011bbb000000000BBBCCCCCC1aa111 -> stdl c , [b, s9=0] */ +/* stdl<.aa> ximm,b 00011bbb000000000BBB1111001aa111 -> stdl c=60, [b, s9=0] */ +/* stdl<.aa> limm,b 00011bbb000000000BBB1111101aa111 -> stdl c=62, [b, s9=0] */ +/* stdl<.as> c,ximm 00011100000000000111CCCCCC1aa111 -> stdl c , [b=60, s9=0] */ +/* stdl<.as> c,limm 00011110000000000111CCCCCC1aa111 -> stdl c , [b=62, s9=0] */ +/* stdl<.as> ximm,ximm 000111000000000001111111001aa111 -> stdl c=60, [b=60, s9=0] */ +/* stdl<.as> limm,limm 000111100000000001111111101aa111 -> stdl c=62, [b=62, s9=0] */ +{ "stdl", 0x18000027, 0xF8FF8027, ARC_OPCODE_ARC64, STORE, NONE, { RCD, BRAKET, RB, BRAKETdup }, { C_AA27 }}, +{ "stdl", 0x18000F27, 0xF8FF8FE7, ARC_OPCODE_ARC64, STORE, NONE, { XIMM, BRAKET, RB, BRAKETdup }, { C_AA27 }}, +{ "stdl", 0x18000FA7, 0xF8FF8FE7, ARC_OPCODE_ARC64, STORE, NONE, { LIMM, BRAKET, RB, BRAKETdup }, { C_AA27 }}, +{ "stdl", 0x1C007027, 0xFFFFF027, ARC_OPCODE_ARC64, STORE, NONE, { RCD, BRAKET, XIMM, BRAKETdup }, { C_AS27 }}, +{ "stdl", 0x1E007027, 0xFFFFF027, ARC_OPCODE_ARC64, STORE, NONE, { RCD, BRAKET, LIMM, BRAKETdup }, { C_AS27 }}, +{ "stdl", 0x1C007F27, 0xFFFFFFE7, ARC_OPCODE_ARC64, STORE, NONE, { XIMM, BRAKET, XIMMdup, BRAKETdup }, { C_AA27 }}, +{ "stdl", 0x1E007FA7, 0xFFFFFFE7, ARC_OPCODE_ARC64, STORE, NONE, { LIMM, BRAKET, LIMMdup, BRAKETdup }, { C_AA27 }}, + +/* stdl<.aa> c,b,s9 00011bbbssssssssSBBBCCCCCC1aa111 -> stdl c , [b, s9] */ +/* stdl<.aa> ximm,b,s9 00011bbbssssssssSBBB1111001aa111 -> stdl c=60, [b, s9] */ +/* stdl<.aa> limm,b,s9 00011bbbssssssssSBBB1111101aa111 -> stdl c=62, [b, s9] */ +/* stdl<.as> c,ximm,s9 00011100ssssssssS111CCCCCC1aa111 -> stdl c , [b=60, s9] */ +/* stdl<.as> c,limm,s9 00011110ssssssssS111CCCCCC1aa111 -> stdl c , [b=62, s9] */ +/* stdl<.as> ximm,ximm,s9 00011100ssssssssS1111111001aa111 -> stdl c=60, [b=60, s9] */ +/* stdl<.as> limm,limm,s9 00011110ssssssssS1111111101aa111 -> stdl c=62, [b=62, s9] */ +{ "stdl", 0x18000027, 0xF8000027, ARC_OPCODE_ARC64, STORE, NONE, { RCD, BRAKET, RB, SIMM9_8, BRAKETdup }, { C_AA27 }}, +{ "stdl", 0x18000F27, 0xF8000FE7, ARC_OPCODE_ARC64, STORE, NONE, { XIMM, BRAKET, RB, SIMM9_8, BRAKETdup }, { C_AA27 }}, +{ "stdl", 0x18000FA7, 0xF8000FE7, ARC_OPCODE_ARC64, STORE, NONE, { LIMM, BRAKET, RB, SIMM9_8, BRAKETdup }, { C_AA27 }}, +{ "stdl", 0x1C007027, 0xFF007027, ARC_OPCODE_ARC64, STORE, NONE, { RCD, BRAKET, XIMM, SIMM9_8, BRAKETdup }, { C_AS27 }}, +{ "stdl", 0x1E007027, 0xFF007027, ARC_OPCODE_ARC64, STORE, NONE, { RCD, BRAKET, LIMM, SIMM9_8, BRAKETdup }, { C_AS27 }}, +{ "stdl", 0x1C007F27, 0xFF007FE7, ARC_OPCODE_ARC64, STORE, NONE, { XIMM, BRAKET, XIMMdup, SIMM9_8, BRAKETdup }, { C_AS27 }}, +{ "stdl", 0x1E007FA7, 0xFF007FE7, ARC_OPCODE_ARC64, STORE, NONE, { LIMM, BRAKET, LIMMdup, SIMM9_8, BRAKETdup }, { C_AS27 }}, + +/* sth_sZZ_H c,b,u6 10110bbbcccuuuuu. */ +{ "sth_s", 0x0000B000, 0x0000F800,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, STORE, NONE, { RC_S, BRAKET, RB_S, UIMM6_A16_11_S, BRAKETdup }, { C_ZZ_H }}, + +/* stl c,b 00011bbb000000000BBBCCCCCC0aa111 -> stl c , [b , s9=0] */ +/* stl w6,b 00011bbb000000000BBBwwwwww0aa110 -> stl w6 , [b , s9=0] */ +/* stl ximm,b 00011bbb000000000BBB1111000aa111 -> stl c=60, [b , s9=0] */ +/* stl limm,b 00011bbb000000000BBB1111100aa111 -> stl c=62, [b , s9=0] */ +/* stl c,ximm 00011100000000000111CCCCCC0RR111 -> stl c , [b=60, s9=0] */ +/* stl w6,ximm 00011100000000000111wwwwww0RR110 -> stl w6 , [b=60, s9=0] */ +/* stl c,limm 00011110000000000111CCCCCC0RR111 -> stl c , [b=62, s9=0] */ +/* stl w6,limm 00011110000000000111wwwwww0RR110 -> stl w6 , [b=62, s9=0] */ +/* stl ximm,ximm 000111000000000001111111000RR111 -> stl c=60, [b=60, s9=0] */ +/* stl limm,limm 000111100000000001111111100RR111 -> stl c=62, [b=62, s9=0] */ +{ "stl", 0x18000007, 0xF8FF8027, ARC_OPCODE_ARC64, STORE, NONE, { RC, BRAKET, RB, BRAKETdup }, { C_ZZ_L }}, +//{ "stl", 0x18000006, 0xF8FF8027, ARC_OPCODE_ARC64, STORE, NONE, { W6, BRAKET, RB, BRAKETdup }, { C_ZZ_L }}, +{ "stl", 0x18000F07, 0xF8FF8FE7, ARC_OPCODE_ARC64, STORE, NONE, { XIMM, BRAKET, RB, BRAKETdup }, { C_ZZ_L }}, +{ "stl", 0x18000F87, 0xF8FF8FE7, ARC_OPCODE_ARC64, STORE, NONE, { LIMM, BRAKET, RB, BRAKETdup }, { C_ZZ_L }}, +{ "stl", 0x1C007007, 0xFFFFF03F, ARC_OPCODE_ARC64, STORE, NONE, { RC, BRAKET, XIMM, BRAKETdup }, { C_ZZ_L }}, +{ "stl", 0x1C007006, 0xFFFFF03F, ARC_OPCODE_ARC64, STORE, NONE, { W6, BRAKET, XIMM, BRAKETdup }, { C_ZZ_L }}, +{ "stl", 0x1E007007, 0xFFFFF03F, ARC_OPCODE_ARC64, STORE, NONE, { RC, BRAKET, LIMM, BRAKETdup }, { C_ZZ_L }}, +{ "stl", 0x1E007006, 0xFFFFF03F, ARC_OPCODE_ARC64, STORE, NONE, { W6, BRAKET, LIMM, BRAKETdup }, { C_ZZ_L }}, +{ "stl", 0x1C007F07, 0xFFFFFFE7, ARC_OPCODE_ARC64, STORE, NONE, { XIMM, BRAKET, XIMMdup, BRAKETdup }, { C_ZZ_L }}, +{ "stl", 0x1E007F87, 0xFFFFFFE7, ARC_OPCODE_ARC64, STORE, NONE, { LIMM, BRAKET, LIMMdup, BRAKETdup }, { C_ZZ_L }}, + +/* stl<.aa> c,b,s9 00011bbbssssssssSBBBCCCCCC0aa111 -> stl c , [b , s9] */ +/* stl<.aa> w6,b,s9 00011bbbssssssssSBBBwwwwww0aa110 -> stl w6 , [b , s9] */ +/* stl<.aa> ximm,b,s9 00011bbbssssssssSBBB1111000aa111 -> stl c=60, [b , s9] */ +/* stl<.aa> limm,b,s9 00011bbbssssssssSBBB1111100aa111 -> stl c=62, [b , s9] */ +/* stl<.aa> c,ximm,s9 00011100ssssssssS111CCCCCC0aa111 -> stl c , [b=60, s9] */ +/* stl<.aa> w6,ximm,s9 00011100ssssssssS111wwwwww0aa110 -> stl w6 , [b=60, s9] */ +/* stl<.aa> c,limm,s9 00011110ssssssssS111CCCCCC0aa111 -> stl c , [b=62, s9] */ +/* stl<.aa> w6,limm,s9 00011110ssssssssS111wwwwww0aa110 -> stl w6 , [b=62, s9] */ +/* stl<.aa> ximm,ximm,s9 00011100ssssssssS1111111000aa111 -> stl c=60, [b=60, s9] */ +/* stl<.aa> limm,limm,s9 00011110ssssssssS1111111100aa111 -> stl c=62, [b=62, s9] */ +{ "stl", 0x18000007, 0xF8000027, ARC_OPCODE_ARC64, STORE, NONE, { RC, BRAKET, RB, SIMM9_8, BRAKETdup }, { C_ZZ_L, C_AA27 }}, +//{ "stl", 0x18000006, 0xF8000027, ARC_OPCODE_ARC64, STORE, NONE, { W6, BRAKET, RB, SIMM9_8, BRAKETdup }, { C_ZZ_L, C_AA27 }}, +{ "stl", 0x18000F07, 0xF8000FE7, ARC_OPCODE_ARC64, STORE, NONE, { XIMM, BRAKET, RB, SIMM9_8, BRAKETdup }, { C_ZZ_L, C_AA27 }}, +{ "stl", 0x18000F87, 0xF8000FE7, ARC_OPCODE_ARC64, STORE, NONE, { LIMM, BRAKET, RB, SIMM9_8, BRAKETdup }, { C_ZZ_L, C_AA27 }}, +{ "stl", 0x1C007007, 0xFF007027, ARC_OPCODE_ARC64, STORE, NONE, { RC, BRAKET, XIMM, SIMM9_8, BRAKETdup }, { C_ZZ_L, C_AA27 }}, +{ "stl", 0x1C007006, 0xFF007027, ARC_OPCODE_ARC64, STORE, NONE, { W6, BRAKET, XIMM, SIMM9_8, BRAKETdup }, { C_ZZ_L, C_AA27 }}, +{ "stl", 0x1E007007, 0xFF007027, ARC_OPCODE_ARC64, STORE, NONE, { RC, BRAKET, LIMM, SIMM9_8, BRAKETdup }, { C_ZZ_L, C_AA27 }}, +{ "stl", 0x1E007006, 0xFF007027, ARC_OPCODE_ARC64, STORE, NONE, { W6, BRAKET, LIMM, SIMM9_8, BRAKETdup }, { C_ZZ_L, C_AA27 }}, +{ "stl", 0x1C007F07, 0xFF007FE7, ARC_OPCODE_ARC64, STORE, NONE, { XIMM, BRAKET, XIMMdup, SIMM9_8, BRAKETdup }, { C_ZZ_L, C_AA27 }}, +{ "stl", 0x1E007F87, 0xFF007FE7, ARC_OPCODE_ARC64, STORE, NONE, { LIMM, BRAKET, LIMMdup, SIMM9_8, BRAKETdup }, { C_ZZ_L, C_AA27 }}, + +/* st_s b,SP,u7 11000bbb010uuuuu. */ +{ "st_s", 0x0000C040, 0x0000F8E0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, STORE, NONE, { RB_S, BRAKET, SP_S, UIMM7_A32_11_S, BRAKETdup }, { 0 }}, + +/* st_s c,b,u7 10100bbbcccuuuuu. */ +{ "st_s", 0x0000A000, 0x0000F800,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, STORE, NONE, { RC_S, BRAKET, RB_S, UIMM7_A32_11_S, BRAKETdup }, { 0 }}, + +/* st_s R0,GP,s11 01010SSSSSS10sss. */ +{ "st_s", 0x00005010, 0x0000F818,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, STORE, CD2, { R0_S, BRAKET, GP_S, SIMM11_A32_13_S, BRAKETdup }, { 0 }}, + +/* sub<.f> a,b,c 00100bbb00000010FBBBCCCCCCAAAAAA. */ +{ "sub", 0x20020000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RA, RB, RC }, { C_F }}, + +/* sub<.f> 0,b,c 00100bbb00000010FBBBCCCCCC111110. */ +{ "sub", 0x2002003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, RB, RC }, { C_F }}, + +/* sub<.f><.cc> b,b,c 00100bbb11000010FBBBCCCCCC0QQQQQ. */ +{ "sub", 0x20C20000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* sub<.f> a,b,u6 00100bbb01000010FBBBuuuuuuAAAAAA. */ +{ "sub", 0x20420000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* sub<.f> 0,b,u6 00100bbb01000010FBBBuuuuuu111110. */ +{ "sub", 0x2042003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* sub<.f><.cc> b,b,u6 00100bbb11000010FBBBuuuuuu1QQQQQ. */ +{ "sub", 0x20C20020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* sub<.f> b,b,s12 00100bbb10000010FBBBssssssSSSSSS. */ +{ "sub", 0x20820000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* sub<.f> a,limm,c 0010011000000010F111CCCCCCAAAAAA. */ +{ "sub", 0x26027000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RA, LIMM, RC }, { C_F }}, + +/* sub<.f> a,b,limm 00100bbb00000010FBBB111110AAAAAA. */ +{ "sub", 0x20020F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RA, RB, LIMM }, { C_F }}, + +/* sub<.f> 0,limm,c 0010011000000010F111CCCCCC111110. */ +{ "sub", 0x2602703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* sub<.f> 0,b,limm 00100bbb00000010FBBB111110111110. */ +{ "sub", 0x20020FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* sub<.f><.cc> b,b,limm 00100bbb11000010FBBB1111100QQQQQ. */ +{ "sub", 0x20C20F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* sub<.f><.cc> 0,limm,c 0010011011000010F111CCCCCC0QQQQQ. */ +{ "sub", 0x26C27000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* sub<.f> a,limm,u6 0010011001000010F111uuuuuuAAAAAA. */ +{ "sub", 0x26427000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* sub<.f> 0,limm,u6 0010011001000010F111uuuuuu111110. */ +{ "sub", 0x2642703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* sub<.f><.cc> 0,limm,u6 0010011011000010F111uuuuuu1QQQQQ. */ +{ "sub", 0x26C27020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* sub<.f> 0,limm,s12 0010011010000010F111ssssssSSSSSS. */ +{ "sub", 0x26827000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* sub<.f> a,limm,limm 0010011000000010F111111110AAAAAA. */ +{ "sub", 0x26027F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* sub<.f> 0,limm,limm 0010011000000010F111111110111110. */ +{ "sub", 0x26027FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* sub<.f><.cc> 0,limm,limm 0010011011000010F1111111100QQQQQ. */ +{ "sub", 0x26C27F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* sub1<.f> a,b,c 00100bbb00010111FBBBCCCCCCAAAAAA. */ +{ "sub1", 0x20170000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RA, RB, RC }, { C_F }}, + +/* sub1<.f> 0,b,c 00100bbb00010111FBBBCCCCCC111110. */ +{ "sub1", 0x2017003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, RB, RC }, { C_F }}, + +/* sub1<.f><.cc> b,b,c 00100bbb11010111FBBBCCCCCC0QQQQQ. */ +{ "sub1", 0x20D70000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* sub1<.f> a,b,u6 00100bbb01010111FBBBuuuuuuAAAAAA. */ +{ "sub1", 0x20570000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* sub1<.f> 0,b,u6 00100bbb01010111FBBBuuuuuu111110. */ +{ "sub1", 0x2057003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* sub1<.f><.cc> b,b,u6 00100bbb11010111FBBBuuuuuu1QQQQQ. */ +{ "sub1", 0x20D70020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* sub1<.f> b,b,s12 00100bbb10010111FBBBssssssSSSSSS. */ +{ "sub1", 0x20970000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* sub1<.f> a,limm,c 0010011000010111F111CCCCCCAAAAAA. */ +{ "sub1", 0x26177000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RA, LIMM, RC }, { C_F }}, + +/* sub1<.f> a,b,limm 00100bbb00010111FBBB111110AAAAAA. */ +{ "sub1", 0x20170F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RA, RB, LIMM }, { C_F }}, + +/* sub1<.f> 0,limm,c 0010011000010111F111CCCCCC111110. */ +{ "sub1", 0x2617703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* sub1<.f> 0,b,limm 00100bbb00010111FBBB111110111110. */ +{ "sub1", 0x20170FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* sub1<.f><.cc> b,b,limm 00100bbb11010111FBBB1111100QQQQQ. */ +{ "sub1", 0x20D70F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* sub1<.f><.cc> 0,limm,c 0010011011010111F111CCCCCC0QQQQQ. */ +{ "sub1", 0x26D77000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* sub1<.f> a,limm,u6 0010011001010111F111uuuuuuAAAAAA. */ +{ "sub1", 0x26577000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* sub1<.f> 0,limm,u6 0010011001010111F111uuuuuu111110. */ +{ "sub1", 0x2657703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* sub1<.f><.cc> 0,limm,u6 0010011011010111F111uuuuuu1QQQQQ. */ +{ "sub1", 0x26D77020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* sub1<.f> 0,limm,s12 0010011010010111F111ssssssSSSSSS. */ +{ "sub1", 0x26977000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* sub1<.f> a,limm,limm 0010011000010111F111111110AAAAAA. */ +{ "sub1", 0x26177F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* sub1<.f> 0,limm,limm 0010011000010111F111111110111110. */ +{ "sub1", 0x26177FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* sub1<.f><.cc> 0,limm,limm 0010011011010111F1111111100QQQQQ. */ +{ "sub1", 0x26D77F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* sub1l<.f> RA,RB,RC 01011bbb00010111FBBBccccccaaaaaa. */ +{ "sub1l", 0x58170000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* sub1l<.f> 0,RB,RC 01011bbb00010111FBBBcccccc111110. */ +{ "sub1l", 0x5817003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* sub1l<.f><.cc> RB,RB,RC 01011bbb11010111FBBBcccccc0QQQQQ. */ +{ "sub1l", 0x58D70000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* sub1l<.f> RA,RB,u6 01011bbb01010111FBBBuuuuuuaaaaaa. */ +{ "sub1l", 0x58570000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* sub1l<.f> 0,RB,u6 01011bbb01010111FBBBuuuuuu111110. */ +{ "sub1l", 0x5857003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* sub1l<.f><.cc> RB,RB,u6 01011bbb11010111FBBBuuuuuu1QQQQQ. */ +{ "sub1l", 0x58D70020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* sub1l<.f> RB,RB,s12 01011bbb10010111FBBBssssssSSSSSS. */ +{ "sub1l", 0x58970000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* sub1l<.f> RA,ximm,RC 0101110000010111F111ccccccaaaaaa. */ +{ "sub1l", 0x5C177000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* sub1l<.f> RA,RB,ximm 01011bbb00010111FBBB111100aaaaaa. */ +{ "sub1l", 0x58170F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* sub1l<.f> 0,ximm,RC 0101110000010111F111cccccc111110. */ +{ "sub1l", 0x5C17703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* sub1l<.f> 0,RB,ximm 01011bbb00010111FBBB111100111110. */ +{ "sub1l", 0x58170F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* sub1l<.f><.cc> 0,ximm,RC 0101110011010111F111cccccc0QQQQQ. */ +{ "sub1l", 0x5CD77000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* sub1l<.f><.cc> RB,RB,ximm 01011bbb11010111FBBB1111000QQQQQ. */ +{ "sub1l", 0x58D70F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* sub1l<.f> RA,ximm,u6 0101110001010111F111uuuuuuaaaaaa. */ +{ "sub1l", 0x5C577000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* sub1l<.f> 0,ximm,u6 0101110001010111F111uuuuuu111110. */ +{ "sub1l", 0x5C57703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* sub1l<.f><.cc> 0,ximm,u6 0101110011010111F111uuuuuu1QQQQQ. */ +{ "sub1l", 0x5CD77020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* sub1l<.f> RA,limm,RC 0101111000010111F111ccccccaaaaaa. */ +{ "sub1l", 0x5E177000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* sub1l<.f> RA,RB,limm 01011bbb00010111FBBB111110aaaaaa. */ +{ "sub1l", 0x58170F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* sub1l<.f> 0,limm,RC 0101111000010111F111cccccc111110. */ +{ "sub1l", 0x5E17703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* sub1l<.f> 0,RB,limm 01011bbb00010111FBBB111110111110. */ +{ "sub1l", 0x58170FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* sub1l<.f><.cc> 0,limm,RC 0101111011010111F111cccccc0QQQQQ. */ +{ "sub1l", 0x5ED77000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* sub1l<.f><.cc> RB,RB,limm 01011bbb11010111FBBB1111100QQQQQ. */ +{ "sub1l", 0x58D70F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* sub1l<.f> RA,limm,u6 0101111001010111F111uuuuuuaaaaaa. */ +{ "sub1l", 0x5E577000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* sub1l<.f> 0,limm,u6 0101111001010111F111uuuuuu111110. */ +{ "sub1l", 0x5E57703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* sub1l<.f><.cc> 0,limm,u6 0101111011010111F111uuuuuu1QQQQQ. */ +{ "sub1l", 0x5ED77020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* sub1l<.f> 0,ximm,s12 0101110010010111F111ssssssSSSSSS. */ +{ "sub1l", 0x5C977000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* sub1l<.f> 0,limm,s12 0101111010010111F111ssssssSSSSSS. */ +{ "sub1l", 0x5E977000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* sub1l<.f> RA,ximm,ximm 0101110000010111F111111100aaaaaa. */ +{ "sub1l", 0x5C177F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* sub1l<.f> 0,ximm,ximm 0101110000010111F111111100111110. */ +{ "sub1l", 0x5C177F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* sub1l<.f><.cc> 0,ximm,ximm 0101110011010111F1111111000QQQQQ. */ +{ "sub1l", 0x5CD77F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* sub1l<.f> RA,limm,limm 0101111000010111F111111110aaaaaa. */ +{ "sub1l", 0x5E177F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* sub1l<.f> 0,limm,limm 0101111000010111F111111110111110. */ +{ "sub1l", 0x5E177FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* sub1l<.f><.cc> 0,limm,limm 0101111011010111F1111111100QQQQQ. */ +{ "sub1l", 0x5ED77F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* sub2<.f> a,b,c 00100bbb00011000FBBBCCCCCCAAAAAA. */ +{ "sub2", 0x20180000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RA, RB, RC }, { C_F }}, + +/* sub2<.f> 0,b,c 00100bbb00011000FBBBCCCCCC111110. */ +{ "sub2", 0x2018003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, RB, RC }, { C_F }}, + +/* sub2<.f><.cc> b,b,c 00100bbb11011000FBBBCCCCCC0QQQQQ. */ +{ "sub2", 0x20D80000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* sub2<.f> a,b,u6 00100bbb01011000FBBBuuuuuuAAAAAA. */ +{ "sub2", 0x20580000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* sub2<.f> 0,b,u6 00100bbb01011000FBBBuuuuuu111110. */ +{ "sub2", 0x2058003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* sub2<.f><.cc> b,b,u6 00100bbb11011000FBBBuuuuuu1QQQQQ. */ +{ "sub2", 0x20D80020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* sub2<.f> b,b,s12 00100bbb10011000FBBBssssssSSSSSS. */ +{ "sub2", 0x20980000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* sub2<.f> a,limm,c 0010011000011000F111CCCCCCAAAAAA. */ +{ "sub2", 0x26187000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RA, LIMM, RC }, { C_F }}, + +/* sub2<.f> a,b,limm 00100bbb00011000FBBB111110AAAAAA. */ +{ "sub2", 0x20180F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RA, RB, LIMM }, { C_F }}, + +/* sub2<.f> 0,limm,c 0010011000011000F111CCCCCC111110. */ +{ "sub2", 0x2618703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* sub2<.f> 0,b,limm 00100bbb00011000FBBB111110111110. */ +{ "sub2", 0x20180FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* sub2<.f><.cc> b,b,limm 00100bbb11011000FBBB1111100QQQQQ. */ +{ "sub2", 0x20D80F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* sub2<.f><.cc> 0,limm,c 0010011011011000F111CCCCCC0QQQQQ. */ +{ "sub2", 0x26D87000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* sub2<.f> a,limm,u6 0010011001011000F111uuuuuuAAAAAA. */ +{ "sub2", 0x26587000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* sub2<.f> 0,limm,u6 0010011001011000F111uuuuuu111110. */ +{ "sub2", 0x2658703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* sub2<.f><.cc> 0,limm,u6 0010011011011000F111uuuuuu1QQQQQ. */ +{ "sub2", 0x26D87020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* sub2<.f> 0,limm,s12 0010011010011000F111ssssssSSSSSS. */ +{ "sub2", 0x26987000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* sub2<.f> a,limm,limm 0010011000011000F111111110AAAAAA. */ +{ "sub2", 0x26187F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* sub2<.f> 0,limm,limm 0010011000011000F111111110111110. */ +{ "sub2", 0x26187FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* sub2<.f><.cc> 0,limm,limm 0010011011011000F1111111100QQQQQ. */ +{ "sub2", 0x26D87F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* sub2l<.f> RA,RB,RC 01011bbb00011000FBBBccccccaaaaaa. */ +{ "sub2l", 0x58180000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* sub2l<.f> 0,RB,RC 01011bbb00011000FBBBcccccc111110. */ +{ "sub2l", 0x5818003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* sub2l<.f><.cc> RB,RB,RC 01011bbb11011000FBBBcccccc0QQQQQ. */ +{ "sub2l", 0x58D80000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* sub2l<.f> RA,RB,u6 01011bbb01011000FBBBuuuuuuaaaaaa. */ +{ "sub2l", 0x58580000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* sub2l<.f> 0,RB,u6 01011bbb01011000FBBBuuuuuu111110. */ +{ "sub2l", 0x5858003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* sub2l<.f><.cc> RB,RB,u6 01011bbb11011000FBBBuuuuuu1QQQQQ. */ +{ "sub2l", 0x58D80020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* sub2l<.f> RB,RB,s12 01011bbb10011000FBBBssssssSSSSSS. */ +{ "sub2l", 0x58980000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* sub2l<.f> RA,ximm,RC 0101110000011000F111ccccccaaaaaa. */ +{ "sub2l", 0x5C187000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* sub2l<.f> RA,RB,ximm 01011bbb00011000FBBB111100aaaaaa. */ +{ "sub2l", 0x58180F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* sub2l<.f> 0,ximm,RC 0101110000011000F111cccccc111110. */ +{ "sub2l", 0x5C18703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* sub2l<.f> 0,RB,ximm 01011bbb00011000FBBB111100111110. */ +{ "sub2l", 0x58180F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* sub2l<.f><.cc> 0,ximm,RC 0101110011011000F111cccccc0QQQQQ. */ +{ "sub2l", 0x5CD87000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* sub2l<.f><.cc> RB,RB,ximm 01011bbb11011000FBBB1111000QQQQQ. */ +{ "sub2l", 0x58D80F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* sub2l<.f> RA,ximm,u6 0101110001011000F111uuuuuuaaaaaa. */ +{ "sub2l", 0x5C587000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* sub2l<.f> 0,ximm,u6 0101110001011000F111uuuuuu111110. */ +{ "sub2l", 0x5C58703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* sub2l<.f><.cc> 0,ximm,u6 0101110011011000F111uuuuuu1QQQQQ. */ +{ "sub2l", 0x5CD87020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* sub2l<.f> RA,limm,RC 0101111000011000F111ccccccaaaaaa. */ +{ "sub2l", 0x5E187000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* sub2l<.f> RA,RB,limm 01011bbb00011000FBBB111110aaaaaa. */ +{ "sub2l", 0x58180F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* sub2l<.f> 0,limm,RC 0101111000011000F111cccccc111110. */ +{ "sub2l", 0x5E18703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* sub2l<.f> 0,RB,limm 01011bbb00011000FBBB111110111110. */ +{ "sub2l", 0x58180FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* sub2l<.f><.cc> 0,limm,RC 0101111011011000F111cccccc0QQQQQ. */ +{ "sub2l", 0x5ED87000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* sub2l<.f><.cc> RB,RB,limm 01011bbb11011000FBBB1111100QQQQQ. */ +{ "sub2l", 0x58D80F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* sub2l<.f> RA,limm,u6 0101111001011000F111uuuuuuaaaaaa. */ +{ "sub2l", 0x5E587000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* sub2l<.f> 0,limm,u6 0101111001011000F111uuuuuu111110. */ +{ "sub2l", 0x5E58703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* sub2l<.f><.cc> 0,limm,u6 0101111011011000F111uuuuuu1QQQQQ. */ +{ "sub2l", 0x5ED87020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* sub2l<.f> 0,ximm,s12 0101110010011000F111ssssssSSSSSS. */ +{ "sub2l", 0x5C987000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* sub2l<.f> 0,limm,s12 0101111010011000F111ssssssSSSSSS. */ +{ "sub2l", 0x5E987000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* sub2l<.f> RA,ximm,ximm 0101110000011000F111111100aaaaaa. */ +{ "sub2l", 0x5C187F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* sub2l<.f> 0,ximm,ximm 0101110000011000F111111100111110. */ +{ "sub2l", 0x5C187F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* sub2l<.f><.cc> 0,ximm,ximm 0101110011011000F1111111000QQQQQ. */ +{ "sub2l", 0x5CD87F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* sub2l<.f> RA,limm,limm 0101111000011000F111111110aaaaaa. */ +{ "sub2l", 0x5E187F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* sub2l<.f> 0,limm,limm 0101111000011000F111111110111110. */ +{ "sub2l", 0x5E187FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* sub2l<.f><.cc> 0,limm,limm 0101111011011000F1111111100QQQQQ. */ +{ "sub2l", 0x5ED87F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* sub3<.f> a,b,c 00100bbb00011001FBBBCCCCCCAAAAAA. */ +{ "sub3", 0x20190000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RA, RB, RC }, { C_F }}, + +/* sub3<.f> 0,b,c 00100bbb00011001FBBBCCCCCC111110. */ +{ "sub3", 0x2019003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, RB, RC }, { C_F }}, + +/* sub3<.f><.cc> b,b,c 00100bbb11011001FBBBCCCCCC0QQQQQ. */ +{ "sub3", 0x20D90000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* sub3<.f> a,b,u6 00100bbb01011001FBBBuuuuuuAAAAAA. */ +{ "sub3", 0x20590000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* sub3<.f> 0,b,u6 00100bbb01011001FBBBuuuuuu111110. */ +{ "sub3", 0x2059003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* sub3<.f><.cc> b,b,u6 00100bbb11011001FBBBuuuuuu1QQQQQ. */ +{ "sub3", 0x20D90020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* sub3<.f> b,b,s12 00100bbb10011001FBBBssssssSSSSSS. */ +{ "sub3", 0x20990000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* sub3<.f> a,limm,c 0010011000011001F111CCCCCCAAAAAA. */ +{ "sub3", 0x26197000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RA, LIMM, RC }, { C_F }}, + +/* sub3<.f> a,b,limm 00100bbb00011001FBBB111110AAAAAA. */ +{ "sub3", 0x20190F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RA, RB, LIMM }, { C_F }}, + +/* sub3<.f> 0,limm,c 0010011000011001F111CCCCCC111110. */ +{ "sub3", 0x2619703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* sub3<.f> 0,b,limm 00100bbb00011001FBBB111110111110. */ +{ "sub3", 0x20190FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* sub3<.f><.cc> b,b,limm 00100bbb11011001FBBB1111100QQQQQ. */ +{ "sub3", 0x20D90F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* sub3<.f><.cc> 0,limm,c 0010011011011001F111CCCCCC0QQQQQ. */ +{ "sub3", 0x26D97000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* sub3<.f> a,limm,u6 0010011001011001F111uuuuuuAAAAAA. */ +{ "sub3", 0x26597000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* sub3<.f> 0,limm,u6 0010011001011001F111uuuuuu111110. */ +{ "sub3", 0x2659703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* sub3<.f><.cc> 0,limm,u6 0010011011011001F111uuuuuu1QQQQQ. */ +{ "sub3", 0x26D97020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* sub3<.f> 0,limm,s12 0010011010011001F111ssssssSSSSSS. */ +{ "sub3", 0x26997000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* sub3<.f> a,limm,limm 0010011000011001F111111110AAAAAA. */ +{ "sub3", 0x26197F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* sub3<.f> 0,limm,limm 0010011000011001F111111110111110. */ +{ "sub3", 0x26197FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* sub3<.f><.cc> 0,limm,limm 0010011011011001F1111111100QQQQQ. */ +{ "sub3", 0x26D97F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* sub3l<.f> RA,RB,RC 01011bbb00011001FBBBccccccaaaaaa. */ +{ "sub3l", 0x58190000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* sub3l<.f> 0,RB,RC 01011bbb00011001FBBBcccccc111110. */ +{ "sub3l", 0x5819003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* sub3l<.f><.cc> RB,RB,RC 01011bbb11011001FBBBcccccc0QQQQQ. */ +{ "sub3l", 0x58D90000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* sub3l<.f> RA,RB,u6 01011bbb01011001FBBBuuuuuuaaaaaa. */ +{ "sub3l", 0x58590000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* sub3l<.f> 0,RB,u6 01011bbb01011001FBBBuuuuuu111110. */ +{ "sub3l", 0x5859003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* sub3l<.f><.cc> RB,RB,u6 01011bbb11011001FBBBuuuuuu1QQQQQ. */ +{ "sub3l", 0x58D90020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* sub3l<.f> RB,RB,s12 01011bbb10011001FBBBssssssSSSSSS. */ +{ "sub3l", 0x58990000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* sub3l<.f> RA,ximm,RC 0101110000011001F111ccccccaaaaaa. */ +{ "sub3l", 0x5C197000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* sub3l<.f> RA,RB,ximm 01011bbb00011001FBBB111100aaaaaa. */ +{ "sub3l", 0x58190F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* sub3l<.f> 0,ximm,RC 0101110000011001F111cccccc111110. */ +{ "sub3l", 0x5C19703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* sub3l<.f> 0,RB,ximm 01011bbb00011001FBBB111100111110. */ +{ "sub3l", 0x58190F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* sub3l<.f><.cc> 0,ximm,RC 0101110011011001F111cccccc0QQQQQ. */ +{ "sub3l", 0x5CD97000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* sub3l<.f><.cc> RB,RB,ximm 01011bbb11011001FBBB1111000QQQQQ. */ +{ "sub3l", 0x58D90F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* sub3l<.f> RA,ximm,u6 0101110001011001F111uuuuuuaaaaaa. */ +{ "sub3l", 0x5C597000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* sub3l<.f> 0,ximm,u6 0101110001011001F111uuuuuu111110. */ +{ "sub3l", 0x5C59703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* sub3l<.f><.cc> 0,ximm,u6 0101110011011001F111uuuuuu1QQQQQ. */ +{ "sub3l", 0x5CD97020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* sub3l<.f> RA,limm,RC 0101111000011001F111ccccccaaaaaa. */ +{ "sub3l", 0x5E197000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* sub3l<.f> RA,RB,limm 01011bbb00011001FBBB111110aaaaaa. */ +{ "sub3l", 0x58190F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* sub3l<.f> 0,limm,RC 0101111000011001F111cccccc111110. */ +{ "sub3l", 0x5E19703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* sub3l<.f> 0,RB,limm 01011bbb00011001FBBB111110111110. */ +{ "sub3l", 0x58190FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* sub3l<.f><.cc> 0,limm,RC 0101111011011001F111cccccc0QQQQQ. */ +{ "sub3l", 0x5ED97000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* sub3l<.f><.cc> RB,RB,limm 01011bbb11011001FBBB1111100QQQQQ. */ +{ "sub3l", 0x58D90F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* sub3l<.f> RA,limm,u6 0101111001011001F111uuuuuuaaaaaa. */ +{ "sub3l", 0x5E597000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* sub3l<.f> 0,limm,u6 0101111001011001F111uuuuuu111110. */ +{ "sub3l", 0x5E59703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* sub3l<.f><.cc> 0,limm,u6 0101111011011001F111uuuuuu1QQQQQ. */ +{ "sub3l", 0x5ED97020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* sub3l<.f> 0,ximm,s12 0101110010011001F111ssssssSSSSSS. */ +{ "sub3l", 0x5C997000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* sub3l<.f> 0,limm,s12 0101111010011001F111ssssssSSSSSS. */ +{ "sub3l", 0x5E997000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* sub3l<.f> RA,ximm,ximm 0101110000011001F111111100aaaaaa. */ +{ "sub3l", 0x5C197F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* sub3l<.f> 0,ximm,ximm 0101110000011001F111111100111110. */ +{ "sub3l", 0x5C197F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* sub3l<.f><.cc> 0,ximm,ximm 0101110011011001F1111111000QQQQQ. */ +{ "sub3l", 0x5CD97F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* sub3l<.f> RA,limm,limm 0101111000011001F111111110aaaaaa. */ +{ "sub3l", 0x5E197F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* sub3l<.f> 0,limm,limm 0101111000011001F111111110111110. */ +{ "sub3l", 0x5E197FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* sub3l<.f><.cc> 0,limm,limm 0101111011011001F1111111100QQQQQ. */ +{ "sub3l", 0x5ED97F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* subl<.f> RA,RB,RC 01011bbb00000010FBBBccccccaaaaaa. */ +{ "subl", 0x58020000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* subl<.f> 0,RB,RC 01011bbb00000010FBBBcccccc111110. */ +{ "subl", 0x5802003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* subl<.f><.cc> RB,RB,RC 01011bbb11000010FBBBcccccc0QQQQQ. */ +{ "subl", 0x58C20000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* subl<.f> RA,RB,u6 01011bbb01000010FBBBuuuuuuaaaaaa. */ +{ "subl", 0x58420000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* subl<.f> 0,RB,u6 01011bbb01000010FBBBuuuuuu111110. */ +{ "subl", 0x5842003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* subl<.f><.cc> RB,RB,u6 01011bbb11000010FBBBuuuuuu1QQQQQ. */ +{ "subl", 0x58C20020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* subl<.f> RB,RB,s12 01011bbb10000010FBBBssssssSSSSSS. */ +{ "subl", 0x58820000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* subl<.f> RA,ximm,RC 0101110000000010F111ccccccaaaaaa. */ +{ "subl", 0x5C027000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* subl<.f> RA,RB,ximm 01011bbb00000010FBBB111100aaaaaa. */ +{ "subl", 0x58020F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* subl<.f> 0,ximm,RC 0101110000000010F111cccccc111110. */ +{ "subl", 0x5C02703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* subl<.f> 0,RB,ximm 01011bbb00000010FBBB111100111110. */ +{ "subl", 0x58020F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* subl<.f><.cc> 0,ximm,RC 0101110011000010F111cccccc0QQQQQ. */ +{ "subl", 0x5CC27000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* subl<.f><.cc> RB,RB,ximm 01011bbb11000010FBBB1111000QQQQQ. */ +{ "subl", 0x58C20F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* subl<.f> RA,ximm,u6 0101110001000010F111uuuuuuaaaaaa. */ +{ "subl", 0x5C427000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* subl<.f> 0,ximm,u6 0101110001000010F111uuuuuu111110. */ +{ "subl", 0x5C42703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* subl<.f><.cc> 0,ximm,u6 0101110011000010F111uuuuuu1QQQQQ. */ +{ "subl", 0x5CC27020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* subl<.f> RA,limm,RC 0101111000000010F111ccccccaaaaaa. */ +{ "subl", 0x5E027000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* subl<.f> RA,RB,limm 01011bbb00000010FBBB111110aaaaaa. */ +{ "subl", 0x58020F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* subl<.f> 0,limm,RC 0101111000000010F111cccccc111110. */ +{ "subl", 0x5E02703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* subl<.f> 0,RB,limm 01011bbb00000010FBBB111110111110. */ +{ "subl", 0x58020FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* subl<.f><.cc> 0,limm,RC 0101111011000010F111cccccc0QQQQQ. */ +{ "subl", 0x5EC27000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* subl<.f><.cc> RB,RB,limm 01011bbb11000010FBBB1111100QQQQQ. */ +{ "subl", 0x58C20F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* subl<.f> RA,limm,u6 0101111001000010F111uuuuuuaaaaaa. */ +{ "subl", 0x5E427000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* subl<.f> 0,limm,u6 0101111001000010F111uuuuuu111110. */ +{ "subl", 0x5E42703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* subl<.f><.cc> 0,limm,u6 0101111011000010F111uuuuuu1QQQQQ. */ +{ "subl", 0x5EC27020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* subl<.f> 0,ximm,s12 0101110010000010F111ssssssSSSSSS. */ +{ "subl", 0x5C827000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* subl<.f> 0,limm,s12 0101111010000010F111ssssssSSSSSS. */ +{ "subl", 0x5E827000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* subl<.f> RA,ximm,ximm 0101110000000010F111111100aaaaaa. */ +{ "subl", 0x5C027F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* subl<.f> 0,ximm,ximm 0101110000000010F111111100111110. */ +{ "subl", 0x5C027F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* subl<.f><.cc> 0,ximm,ximm 0101110011000010F1111111000QQQQQ. */ +{ "subl", 0x5CC27F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* subl<.f> RA,limm,limm 0101111000000010F111111110aaaaaa. */ +{ "subl", 0x5E027F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* subl<.f> 0,limm,limm 0101111000000010F111111110111110. */ +{ "subl", 0x5E027FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* subl<.f><.cc> 0,limm,limm 0101111011000010F1111111100QQQQQ. */ +{ "subl", 0x5EC27F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* subl_s SP,SP,u9 11000UU1101uuuuu. */ +{ "subl_s", 0x0000C1A0, 0x0000F9E0, ARC_OPCODE_ARC64, ARITH, NONE, { SP_S, SP_Sdup, UIMM9_A32_11_S }, { 0 }}, + +/* subl_s b,b,c 01111bbbccc00011. */ +{ "subl_s", 0x00007803, 0x0000F81F, ARC_OPCODE_ARC64, ARITH, NONE, { RB_S, RB_Sdup, RC_S }, { 0 }}, + +/* sub_s.NE b,b,b 01111bbb11000000. */ +{ "sub_s", 0x000078C0, 0x0000F8FF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RB_S, RB_Sdup, RB_Sdup }, { C_NE }}, + +/* sub_s b,b,c 01111bbbccc00010. */ +{ "sub_s", 0x00007802, 0x0000F81F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RB_S, RB_Sdup, RC_S }, { 0 }}, + +/* sub_s a,b,c 01001bbbccc10aaa. */ +{ "sub_s", 0x00004810, 0x0000F818,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, CD2, { RA_S, RB_S, RC_S }, { 0 }}, + +/* sub_s c,b,u3 01101bbbccc01uuu. */ +{ "sub_s", 0x00006808, 0x0000F818,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RC_S, RB_S, UIMM3_13_S }, { 0 }}, + +/* sub_s b,b,u5 10111bbb011uuuuu. */ +{ "sub_s", 0x0000B860, 0x0000F8E0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, SUB, NONE, { RB_S, RB_Sdup, UIMM5_11_S }, { 0 }}, + +/* swap<.f> b,c 00101bbb00101111FBBBCCCCCC000000. */ +{ "swap", 0x282F0000, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SWAP, { RB, RC }, { C_F }}, + +/* swap<.f> 0,c 0010111000101111F111CCCCCC000000. */ +{ "swap", 0x2E2F7000, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SWAP, { ZA, RC }, { C_F }}, + +/* swap<.f> b,u6 00101bbb01101111FBBBuuuuuu000000. */ +{ "swap", 0x286F0000, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SWAP, { RB, UIMM6_20 }, { C_F }}, + +/* swap<.f> 0,u6 0010111001101111F111uuuuuu000000. */ +{ "swap", 0x2E6F7000, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SWAP, { ZA, UIMM6_20 }, { C_F }}, + +/* swap<.f> b,limm 00101bbb00101111FBBB111110000000. */ +{ "swap", 0x282F0F80, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SWAP, { RB, LIMM }, { C_F }}, + +/* swap<.f> 0,limm 0010111000101111F111111110000000. */ +{ "swap", 0x2E2F7F80, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SWAP, { ZA, LIMM }, { C_F }}, + +/* swape<.f> b,c 00101bbb00101111FBBBCCCCCC001001. */ +{ "swape", 0x282F0009, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SWAP, { RB, RC }, { C_F }}, + +/* swape<.f> 0,c 0010111000101111F111CCCCCC001001. */ +{ "swape", 0x2E2F7009, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SWAP, { ZA, RC }, { C_F }}, + +/* swape<.f> b,u6 00101bbb01101111FBBBuuuuuu001001. */ +{ "swape", 0x286F0009, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SWAP, { RB, UIMM6_20 }, { C_F }}, + +/* swape<.f> 0,u6 0010111001101111F111uuuuuu001001. */ +{ "swape", 0x2E6F7009, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SWAP, { ZA, UIMM6_20 }, { C_F }}, + +/* swape<.f> b,limm 00101bbb00101111FBBB111110001001. */ +{ "swape", 0x282F0F89, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SWAP, { RB, LIMM }, { C_F }}, + +/* swape<.f> 0,limm 0010111000101111F111111110001001. */ +{ "swape", 0x2E2F7F89, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SWAP, { ZA, LIMM }, { C_F }}, + +/* swapel<.f> RB,RC 01011bbb00101111FBBBcccccc101001. */ +{ "swapel", 0x582F0029, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { C_F }}, + +/* swapel<.f> 0,RC 0101111000101111F111cccccc101001. */ +{ "swapel", 0x5E2F7029, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RC }, { C_F }}, + +/* swapel<.f> RB,u6 01011bbb01101111FBBBuuuuuu101001. */ +{ "swapel", 0x586F0029, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { C_F }}, + +/* swapel<.f> 0,u6 0101111001101111F111uuuuuu101001. */ +{ "swapel", 0x5E6F7029, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, UIMM6_20 }, { C_F }}, + +/* swapel<.f> RB,ximm 01011bbb00101111FBBB111100101001. */ +{ "swapel", 0x582F0F29, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, XIMM }, { C_F }}, + +/* swapel<.f> 0,ximm 0101111000101111F111111100101001. */ +{ "swapel", 0x5E2F7F29, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM }, { C_F }}, + +/* swapel<.f> RB,limm 01011bbb00101111FBBB111110101001. */ +{ "swapel", 0x582F0FA9, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM }, { C_F }}, + +/* swapel<.f> 0,limm 0101111000101111F111111110101001. */ +{ "swapel", 0x5E2F7FA9, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM }, { C_F }}, + +/* swapl<.f> RB,RC 01011bbb00101111FBBBcccccc100000. */ +{ "swapl", 0x582F0020, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { C_F }}, + +/* swapl<.f> 0,RC 0101111000101111F111cccccc100000. */ +{ "swapl", 0x5E2F7020, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RC }, { C_F }}, + +/* swapl<.f> RB,u6 01011bbb01101111FBBBuuuuuu100000. */ +{ "swapl", 0x586F0020, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { C_F }}, + +/* swapl<.f> 0,u6 0101111001101111F111uuuuuu100000. */ +{ "swapl", 0x5E6F7020, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, UIMM6_20 }, { C_F }}, + +/* swapl<.f> RB,ximm 01011bbb00101111FBBB111100100000. */ +{ "swapl", 0x582F0F20, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, XIMM }, { C_F }}, + +/* swapl<.f> 0,ximm 0101111000101111F111111100100000. */ +{ "swapl", 0x5E2F7F20, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM }, { C_F }}, + +/* swapl<.f> RB,limm 01011bbb00101111FBBB111110100000. */ +{ "swapl", 0x582F0FA0, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM }, { C_F }}, + +/* swapl<.f> 0,limm 0101111000101111F111111110100000. */ +{ "swapl", 0x5E2F7FA0, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM }, { C_F }}, + +/* swi 00100010011011110000000000111111. */ +{ "swi", 0x226F003F, 0xFFFFFFFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, KERNEL, NONE, { 0 }, { 0 }}, + +/* swi_s 0111101011100000. */ +{ "swi_s", 0x00007AE0, 0x0000FFFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, KERNEL, NONE, { 0 }, { 0 }}, + +/* swi_s u6 01111uuuuuu11111. */ +{ "swi_s", 0x0000781F, 0x0000F81F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, KERNEL, NONE, { UIMM6_5_S }, { 0 }}, + +/* sync 00100011011011110000000000111111. */ +{ "sync", 0x236F003F, 0xFFFFFFFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, CONTROL, NONE, { 0 }, { 0 }}, + +/* trap_s u6 01111uuuuuu11110. */ +{ "trap_s", 0x0000781E, 0x0000F81F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, KERNEL, NONE, { UIMM6_5_S }, { 0 }}, + +/* tst b,c 00100bbb000010111BBBCCCCCCRRRRRR. */ +{ "tst", 0x200B8000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RC }, { 0 }}, + +/* tst<.cc> b,c 00100bbb110010111BBBCCCCCC0QQQQQ. */ +{ "tst", 0x20CB8000, 0xF8FF8020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RC }, { C_CC }}, + +/* tst b,u6 00100bbb010010111BBBuuuuuuRRRRRR. */ +{ "tst", 0x204B8000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, UIMM6_20 }, { 0 }}, + +/* tst<.cc> b,u6 00100bbb110010111BBBuuuuuu1QQQQQ. */ +{ "tst", 0x20CB8020, 0xF8FF8020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, UIMM6_20 }, { C_CC }}, + +/* tst b,s12 00100bbb100010111BBBssssssSSSSSS. */ +{ "tst", 0x208B8000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, SIMM12_20 }, { 0 }}, + +/* tst limm,c 00100110000010111111CCCCCCRRRRRR. */ +{ "tst", 0x260BF000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { LIMM, RC }, { 0 }}, + +/* tst b,limm 00100bbb000010111BBB111110RRRRRR. */ +{ "tst", 0x200B8F80, 0xF8FF8FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, LIMM }, { 0 }}, + +/* tst<.cc> b,limm 00100bbb110010111BBB1111100QQQQQ. */ +{ "tst", 0x20CB8F80, 0xF8FF8FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, LIMM }, { C_CC }}, + +/* tst<.cc> limm,c 00100110110010111111CCCCCC0QQQQQ. */ +{ "tst", 0x26CBF000, 0xFFFFF020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { LIMM, RC }, { C_CC }}, + +/* tst limm,u6 00100110010010111111uuuuuuRRRRRR. */ +{ "tst", 0x264BF000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { LIMM, UIMM6_20 }, { 0 }}, + +/* tst<.cc> limm,u6 00100110110010111111uuuuuu1QQQQQ. */ +{ "tst", 0x26CBF020, 0xFFFFF020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { LIMM, UIMM6_20 }, { C_CC }}, + +/* tst limm,s12 00100110100010111111ssssssSSSSSS. */ +{ "tst", 0x268BF000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { LIMM, SIMM12_20 }, { 0 }}, + +/* tst limm,limm 00100110000010111111111110RRRRRR. */ +{ "tst", 0x260BFF80, 0xFFFFFFC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { LIMM, LIMMdup }, { 0 }}, + +/* tst<.cc> limm,limm 001001101100101111111111100QQQQQ. */ +{ "tst", 0x26CBFF80, 0xFFFFFFE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { LIMM, LIMMdup }, { C_CC }}, + +/* tstl RB,RC 01011bbb000010111BBBccccccRRRRRR. */ +{ "tstl", 0x580B8000, 0xF8FF8000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { 0 }}, + +/* tstl<.cc> RB,RC 01011bbb110010111BBBcccccc0QQQQQ. */ +{ "tstl", 0x58CB8000, 0xF8FF8020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RC }, { C_CC }}, + +/* tstl RB,u6 01011bbb010010111BBBuuuuuuRRRRRR. */ +{ "tstl", 0x584B8000, 0xF8FF8000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { 0 }}, + +/* tstl<.cc> RB,u6 01011bbb110010111BBBuuuuuu1QQQQQ. */ +{ "tstl", 0x58CB8020, 0xF8FF8020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, UIMM6_20 }, { C_CC }}, + +/* tstl RB,s12 01011bbb100010111BBBssssssSSSSSS. */ +{ "tstl", 0x588B8000, 0xF8FF8000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, SIMM12_20 }, { 0 }}, + +/* tstl RB,ximm 01011bbb000010111BBB111100RRRRRR. */ +{ "tstl", 0x580B8F00, 0xF8FF8FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, XIMM }, { 0 }}, + +/* tstl<.cc> RB,ximm 01011bbb110010111BBB1111000QQQQQ. */ +{ "tstl", 0x58CB8F00, 0xF8FF8FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, XIMM }, { C_CC }}, + +/* tstl RB,limm 01011bbb000010111BBB111110RRRRRR. */ +{ "tstl", 0x580B8F80, 0xF8FF8FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM }, { 0 }}, + +/* tstl<.cc> RB,limm 01011bbb110010111BBB1111100QQQQQ. */ +{ "tstl", 0x58CB8F80, 0xF8FF8FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, LIMM }, { C_CC }}, + +/* tst_s b,c 01111bbbccc01011. */ +{ "tst_s", 0x0000780B, 0x0000F81F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB_S, RC_S }, { 0 }}, + +/* unimp_s 0111100111100000. */ +{ "unimp_s", 0x000079E0, 0x0000FFFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, KERNEL, NONE, { 0 }, { 0 }}, + +/* vadd2 a,b,c 00101bbb001111000BBBCCCCCCAAAAAA. */ +{ "vadd2", 0x283C0000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, RC }, { 0 }}, + +/* vadd2 0,b,c 00101bbb001111000BBBCCCCCC111110. */ +{ "vadd2", 0x283C003E, 0xF8FF803F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, RC }, { 0 }}, + +/* vadd2<.cc> b,b,c 00101bbb111111000BBBCCCCCC0QQQQQ. */ +{ "vadd2", 0x28FC0000, 0xF8FF8020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, RC }, { C_CC }}, + +/* vadd2 a,b,u6 00101bbb011111000BBBuuuuuuAAAAAA. */ +{ "vadd2", 0x287C0000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, UIMM6_20 }, { 0 }}, + +/* vadd2 0,b,u6 00101bbb011111000BBBuuuuuu111110. */ +{ "vadd2", 0x287C003E, 0xF8FF803F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, UIMM6_20 }, { 0 }}, + +/* vadd2<.cc> b,b,u6 00101bbb111111000BBBuuuuuu1QQQQQ. */ +{ "vadd2", 0x28FC0020, 0xF8FF8020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, UIMM6_20 }, { C_CC }}, + +/* vadd2 b,b,s12 00101bbb101111000BBBssssssSSSSSS. */ +{ "vadd2", 0x28BC0000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, SIMM12_20 }, { 0 }}, + +/* vadd2 a,limm,c 00101110001111000111CCCCCCAAAAAA. */ +{ "vadd2", 0x2E3C7000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, RC }, { 0 }}, + +/* vadd2 a,b,limm 00101bbb001111000BBB111110AAAAAA. */ +{ "vadd2", 0x283C0F80, 0xF8FF8FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, LIMM }, { 0 }}, + +/* vadd2 0,limm,c 00101110001111000111CCCCCC111110. */ +{ "vadd2", 0x2E3C703E, 0xFFFFF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, RC }, { 0 }}, + +/* vadd2 0,b,limm 00101bbb001111000BBB111110111110. */ +{ "vadd2", 0x283C0FBE, 0xF8FF8FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, LIMM }, { 0 }}, + +/* vadd2<.cc> b,b,limm 00101bbb111111000BBB1111100QQQQQ. */ +{ "vadd2", 0x28FC0F80, 0xF8FF8FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, LIMM }, { C_CC }}, + +/* vadd2<.cc> 0,limm,c 00101110111111000111CCCCCC0QQQQQ. */ +{ "vadd2", 0x2EFC7000, 0xFFFFF020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, RC }, { C_CC }}, + +/* vadd2 a,limm,u6 00101110011111000111uuuuuuAAAAAA. */ +{ "vadd2", 0x2E7C7000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, UIMM6_20 }, { 0 }}, + +/* vadd2 0,limm,u6 00101110011111000111uuuuuu111110. */ +{ "vadd2", 0x2E7C703E, 0xFFFFF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, UIMM6_20 }, { 0 }}, + +/* vadd2<.cc> 0,limm,u6 00101110111111000111uuuuuu1QQQQQ. */ +{ "vadd2", 0x2EFC7020, 0xFFFFF020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, UIMM6_20 }, { C_CC }}, + +/* vadd2 0,limm,s12 00101110101111000111ssssssSSSSSS. */ +{ "vadd2", 0x2EBC7000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, SIMM12_20 }, { 0 }}, + +/* vadd2 a,limm,limm 00101110001111000111111110AAAAAA. */ +{ "vadd2", 0x2E3C7F80, 0xFFFFFFC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, LIMMdup }, { 0 }}, + +/* vadd2 0,limm,limm 00101110001111000111111110111110. */ +{ "vadd2", 0x2E3C7FBE, 0xFFFFFFFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, LIMMdup }, { 0 }}, + +/* vadd2<.cc> 0,limm,limm 001011101111110001111111100QQQQQ. */ +{ "vadd2", 0x2EFC7F80, 0xFFFFFFE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, LIMMdup }, { C_CC }}, + +/* vadd2h a,b,c 00101bbb000101000BBBCCCCCCAAAAAA. */ +{ "vadd2h", 0x28140000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, RB, RC }, { 0 }}, + +/* vadd2h 0,b,c 00101bbb000101000BBBCCCCCC111110. */ +{ "vadd2h", 0x2814003E, 0xF8FF803F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, RB, RC }, { 0 }}, + +/* vadd2h<.cc> b,b,c 00101bbb110101000BBBCCCCCC0QQQQQ. */ +{ "vadd2h", 0x28D40000, 0xF8FF8020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, RC }, { C_CC }}, + +/* vadd2h a,b,u6 00101bbb010101000BBBuuuuuuAAAAAA. */ +{ "vadd2h", 0x28540000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, RB, UIMM6_20 }, { 0 }}, + +/* vadd2h 0,b,u6 00101bbb010101000BBBuuuuuu111110. */ +{ "vadd2h", 0x2854003E, 0xF8FF803F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, RB, UIMM6_20 }, { 0 }}, + +/* vadd2h<.cc> b,b,u6 00101bbb110101000BBBuuuuuu1QQQQQ. */ +{ "vadd2h", 0x28D40020, 0xF8FF8020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, UIMM6_20 }, { C_CC }}, + +/* vadd2h b,b,s12 00101bbb100101000BBBssssssSSSSSS. */ +{ "vadd2h", 0x28940000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, SIMM12_20 }, { 0 }}, + +/* vadd2h a,limm,c 00101110000101000111CCCCCCAAAAAA. */ +{ "vadd2h", 0x2E147000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, LIMM, RC }, { 0 }}, + +/* vadd2h a,b,limm 00101bbb000101000BBB111110AAAAAA. */ +{ "vadd2h", 0x28140F80, 0xF8FF8FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, RB, LIMM }, { 0 }}, + +/* vadd2h 0,limm,c 00101110000101000111CCCCCC111110. */ +{ "vadd2h", 0x2E14703E, 0xFFFFF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, RC }, { 0 }}, + +/* vadd2h 0,b,limm 00101bbb000101000BBB111110111110. */ +{ "vadd2h", 0x28140FBE, 0xF8FF8FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, RB, LIMM }, { 0 }}, + +/* vadd2h<.cc> b,b,limm 00101bbb110101000BBB1111100QQQQQ. */ +{ "vadd2h", 0x28D40F80, 0xF8FF8FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, LIMM }, { C_CC }}, + +/* vadd2h<.cc> 0,limm,c 00101110110101000111CCCCCC0QQQQQ. */ +{ "vadd2h", 0x2ED47000, 0xFFFFF020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, RC }, { C_CC }}, + +/* vadd2h a,limm,u6 00101110010101000111uuuuuuAAAAAA. */ +{ "vadd2h", 0x2E547000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, LIMM, UIMM6_20 }, { 0 }}, + +/* vadd2h 0,limm,u6 00101110010101000111uuuuuu111110. */ +{ "vadd2h", 0x2E54703E, 0xFFFFF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, UIMM6_20 }, { 0 }}, + +/* vadd2h<.cc> 0,limm,u6 00101110110101000111uuuuuu1QQQQQ. */ +{ "vadd2h", 0x2ED47020, 0xFFFFF020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, UIMM6_20 }, { C_CC }}, + +/* vadd2h 0,limm,s12 00101110100101000111ssssssSSSSSS. */ +{ "vadd2h", 0x2E947000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, SIMM12_20 }, { 0 }}, + +/* vadd2h a,limm,limm 00101110000101000111111110AAAAAA. */ +{ "vadd2h", 0x2E147F80, 0xFFFFFFC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, LIMM, LIMMdup }, { 0 }}, + +/* vadd2h 0,limm,limm 00101110000101000111111110111110. */ +{ "vadd2h", 0x2E147FBE, 0xFFFFFFFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, LIMMdup }, { 0 }}, + +/* vadd2h<.cc> 0,limm,limm 001011101101010001111111100QQQQQ. */ +{ "vadd2h", 0x2ED47F80, 0xFFFFFFE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, LIMMdup }, { C_CC }}, + +/* vadd4h a,b,c 00101bbb001110000BBBCCCCCCAAAAAA. */ +{ "vadd4h", 0x28380000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, RC }, { 0 }}, + +/* vadd4h 0,b,c 00101bbb001110000BBBCCCCCC111110. */ +{ "vadd4h", 0x2838003E, 0xF8FF803F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, RC }, { 0 }}, + +/* vadd4h<.cc> b,b,c 00101bbb111110000BBBCCCCCC0QQQQQ. */ +{ "vadd4h", 0x28F80000, 0xF8FF8020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, RC }, { C_CC }}, + +/* vadd4h a,b,u6 00101bbb011110000BBBuuuuuuAAAAAA. */ +{ "vadd4h", 0x28780000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, UIMM6_20 }, { 0 }}, + +/* vadd4h 0,b,u6 00101bbb011110000BBBuuuuuu111110. */ +{ "vadd4h", 0x2878003E, 0xF8FF803F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, UIMM6_20 }, { 0 }}, + +/* vadd4h<.cc> b,b,u6 00101bbb111110000BBBuuuuuu1QQQQQ. */ +{ "vadd4h", 0x28F80020, 0xF8FF8020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, UIMM6_20 }, { C_CC }}, + +/* vadd4h b,b,s12 00101bbb101110000BBBssssssSSSSSS. */ +{ "vadd4h", 0x28B80000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, SIMM12_20 }, { 0 }}, + +/* vadd4h a,limm,c 00101110001110000111CCCCCCAAAAAA. */ +{ "vadd4h", 0x2E387000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, RC }, { 0 }}, + +/* vadd4h a,b,limm 00101bbb001110000BBB111110AAAAAA. */ +{ "vadd4h", 0x28380F80, 0xF8FF8FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, LIMM }, { 0 }}, + +/* vadd4h 0,limm,c 00101110001110000111CCCCCC111110. */ +{ "vadd4h", 0x2E38703E, 0xFFFFF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, RC }, { 0 }}, + +/* vadd4h 0,b,limm 00101bbb001110000BBB111110111110. */ +{ "vadd4h", 0x28380FBE, 0xF8FF8FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, LIMM }, { 0 }}, + +/* vadd4h<.cc> b,b,limm 00101bbb111110000BBB1111100QQQQQ. */ +{ "vadd4h", 0x28F80F80, 0xF8FF8FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, LIMM }, { C_CC }}, + +/* vadd4h<.cc> 0,limm,c 00101110111110000111CCCCCC0QQQQQ. */ +{ "vadd4h", 0x2EF87000, 0xFFFFF020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, RC }, { C_CC }}, + +/* vadd4h a,limm,u6 00101110011110000111uuuuuuAAAAAA. */ +{ "vadd4h", 0x2E787000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, UIMM6_20 }, { 0 }}, + +/* vadd4h 0,limm,u6 00101110011110000111uuuuuu111110. */ +{ "vadd4h", 0x2E78703E, 0xFFFFF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, UIMM6_20 }, { 0 }}, + +/* vadd4h<.cc> 0,limm,u6 00101110111110000111uuuuuu1QQQQQ. */ +{ "vadd4h", 0x2EF87020, 0xFFFFF020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, UIMM6_20 }, { C_CC }}, + +/* vadd4h 0,limm,s12 00101110101110000111ssssssSSSSSS. */ +{ "vadd4h", 0x2EB87000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, SIMM12_20 }, { 0 }}, + +/* vadd4h a,limm,limm 00101110001110000111111110AAAAAA. */ +{ "vadd4h", 0x2E387F80, 0xFFFFFFC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, LIMMdup }, { 0 }}, + +/* vadd4h 0,limm,limm 00101110001110000111111110111110. */ +{ "vadd4h", 0x2E387FBE, 0xFFFFFFFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, LIMMdup }, { 0 }}, + +/* vadd4h<.cc> 0,limm,limm 001011101111100001111111100QQQQQ. */ +{ "vadd4h", 0x2EF87F80, 0xFFFFFFE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, LIMMdup }, { C_CC }}, + +/* vaddsub a,b,c 00101bbb001111100BBBCCCCCCAAAAAA. */ +{ "vaddsub", 0x283E0000, 0xF8FF8000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, RC }, { 0 }}, + +/* vaddsub 0,b,c 00101bbb001111100BBBCCCCCC111110. */ +{ "vaddsub", 0x283E003E, 0xF8FF803F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, RC }, { 0 }}, + +/* vaddsub<.cc> b,b,c 00101bbb111111100BBBCCCCCC0QQQQQ. */ +{ "vaddsub", 0x28FE0000, 0xF8FF8020, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, RC }, { C_CC }}, + +/* vaddsub a,b,u6 00101bbb011111100BBBuuuuuuAAAAAA. */ +{ "vaddsub", 0x287E0000, 0xF8FF8000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, UIMM6_20 }, { 0 }}, + +/* vaddsub 0,b,u6 00101bbb011111100BBBuuuuuu111110. */ +{ "vaddsub", 0x287E003E, 0xF8FF803F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, UIMM6_20 }, { 0 }}, + +/* vaddsub<.cc> b,b,u6 00101bbb111111100BBBuuuuuu1QQQQQ. */ +{ "vaddsub", 0x28FE0020, 0xF8FF8020, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, UIMM6_20 }, { C_CC }}, + +/* vaddsub b,b,s12 00101bbb101111100BBBssssssSSSSSS. */ +{ "vaddsub", 0x28BE0000, 0xF8FF8000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, SIMM12_20 }, { 0 }}, + +/* vaddsub a,limm,c 00101110001111100111CCCCCCAAAAAA. */ +{ "vaddsub", 0x2E3E7000, 0xFFFFF000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, RC }, { 0 }}, + +/* vaddsub a,b,limm 00101bbb001111100BBB111110AAAAAA. */ +{ "vaddsub", 0x283E0F80, 0xF8FF8FC0, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, LIMM }, { 0 }}, + +/* vaddsub 0,limm,c 00101110001111100111CCCCCC111110. */ +{ "vaddsub", 0x2E3E703E, 0xFFFFF03F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, RC }, { 0 }}, + +/* vaddsub 0,b,limm 00101bbb001111100BBB111110111110. */ +{ "vaddsub", 0x283E0FBE, 0xF8FF8FFF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, LIMM }, { 0 }}, + +/* vaddsub<.cc> b,b,limm 00101bbb111111100BBB1111100QQQQQ. */ +{ "vaddsub", 0x28FE0F80, 0xF8FF8FE0, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, LIMM }, { C_CC }}, + +/* vaddsub<.cc> 0,limm,c 00101110111111100111CCCCCC0QQQQQ. */ +{ "vaddsub", 0x2EFE7000, 0xFFFFF020, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, RC }, { C_CC }}, + +/* vaddsub a,limm,u6 00101110011111100111uuuuuuAAAAAA. */ +{ "vaddsub", 0x2E7E7000, 0xFFFFF000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, UIMM6_20 }, { 0 }}, + +/* vaddsub 0,limm,u6 00101110011111100111uuuuuu111110. */ +{ "vaddsub", 0x2E7E703E, 0xFFFFF03F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, UIMM6_20 }, { 0 }}, + +/* vaddsub<.cc> 0,limm,u6 00101110111111100111uuuuuu1QQQQQ. */ +{ "vaddsub", 0x2EFE7020, 0xFFFFF020, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, UIMM6_20 }, { C_CC }}, + +/* vaddsub 0,limm,s12 00101110101111100111ssssssSSSSSS. */ +{ "vaddsub", 0x2EBE7000, 0xFFFFF000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, SIMM12_20 }, { 0 }}, + +/* vaddsub a,limm,limm 00101110001111100111111110AAAAAA. */ +{ "vaddsub", 0x2E3E7F80, 0xFFFFFFC0, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, LIMMdup }, { 0 }}, + +/* vaddsub 0,limm,limm 00101110001111100111111110111110. */ +{ "vaddsub", 0x2E3E7FBE, 0xFFFFFFFF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, LIMMdup }, { 0 }}, + +/* vaddsub<.cc> 0,limm,limm 001011101111111001111111100QQQQQ. */ +{ "vaddsub", 0x2EFE7F80, 0xFFFFFFE0, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, LIMMdup }, { C_CC }}, + +/* vaddsub2h a,b,c 00101bbb000101100BBBCCCCCCAAAAAA. */ +{ "vaddsub2h", 0x28160000, 0xF8FF8000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, RB, RC }, { 0 }}, + +/* vaddsub2h 0,b,c 00101bbb000101100BBBCCCCCC111110. */ +{ "vaddsub2h", 0x2816003E, 0xF8FF803F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, RB, RC }, { 0 }}, + +/* vaddsub2h<.cc> b,b,c 00101bbb110101100BBBCCCCCC0QQQQQ. */ +{ "vaddsub2h", 0x28D60000, 0xF8FF8020, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, RC }, { C_CC }}, + +/* vaddsub2h a,b,u6 00101bbb010101100BBBuuuuuuAAAAAA. */ +{ "vaddsub2h", 0x28560000, 0xF8FF8000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, RB, UIMM6_20 }, { 0 }}, + +/* vaddsub2h 0,b,u6 00101bbb010101100BBBuuuuuu111110. */ +{ "vaddsub2h", 0x2856003E, 0xF8FF803F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, RB, UIMM6_20 }, { 0 }}, + +/* vaddsub2h<.cc> b,b,u6 00101bbb110101100BBBuuuuuu1QQQQQ. */ +{ "vaddsub2h", 0x28D60020, 0xF8FF8020, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, UIMM6_20 }, { C_CC }}, + +/* vaddsub2h b,b,s12 00101bbb100101100BBBssssssSSSSSS. */ +{ "vaddsub2h", 0x28960000, 0xF8FF8000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, SIMM12_20 }, { 0 }}, + +/* vaddsub2h a,limm,c 00101110000101100111CCCCCCAAAAAA. */ +{ "vaddsub2h", 0x2E167000, 0xFFFFF000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, LIMM, RC }, { 0 }}, + +/* vaddsub2h a,b,limm 00101bbb000101100BBB111110AAAAAA. */ +{ "vaddsub2h", 0x28160F80, 0xF8FF8FC0, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, RB, LIMM }, { 0 }}, + +/* vaddsub2h 0,limm,c 00101110000101100111CCCCCC111110. */ +{ "vaddsub2h", 0x2E16703E, 0xFFFFF03F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, RC }, { 0 }}, + +/* vaddsub2h 0,b,limm 00101bbb000101100BBB111110111110. */ +{ "vaddsub2h", 0x28160FBE, 0xF8FF8FFF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, RB, LIMM }, { 0 }}, + +/* vaddsub2h<.cc> b,b,limm 00101bbb110101100BBB1111100QQQQQ. */ +{ "vaddsub2h", 0x28D60F80, 0xF8FF8FE0, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, LIMM }, { C_CC }}, + +/* vaddsub2h<.cc> 0,limm,c 00101110110101100111CCCCCC0QQQQQ. */ +{ "vaddsub2h", 0x2ED67000, 0xFFFFF020, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, RC }, { C_CC }}, + +/* vaddsub2h a,limm,u6 00101110010101100111uuuuuuAAAAAA. */ +{ "vaddsub2h", 0x2E567000, 0xFFFFF000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, LIMM, UIMM6_20 }, { 0 }}, + +/* vaddsub2h 0,limm,u6 00101110010101100111uuuuuu111110. */ +{ "vaddsub2h", 0x2E56703E, 0xFFFFF03F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, UIMM6_20 }, { 0 }}, + +/* vaddsub2h<.cc> 0,limm,u6 00101110110101100111uuuuuu1QQQQQ. */ +{ "vaddsub2h", 0x2ED67020, 0xFFFFF020, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, UIMM6_20 }, { C_CC }}, + +/* vaddsub2h 0,limm,s12 00101110100101100111ssssssSSSSSS. */ +{ "vaddsub2h", 0x2E967000, 0xFFFFF000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, SIMM12_20 }, { 0 }}, + +/* vaddsub2h a,limm,limm 00101110000101100111111110AAAAAA. */ +{ "vaddsub2h", 0x2E167F80, 0xFFFFFFC0, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, LIMM, LIMMdup }, { 0 }}, + +/* vaddsub2h 0,limm,limm 00101110000101100111111110111110. */ +{ "vaddsub2h", 0x2E167FBE, 0xFFFFFFFF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, LIMMdup }, { 0 }}, + +/* vaddsub2h<.cc> 0,limm,limm 001011101101011001111111100QQQQQ. */ +{ "vaddsub2h", 0x2ED67F80, 0xFFFFFFE0, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, LIMMdup }, { C_CC }}, + +/* vaddsub4h a,b,c 00101bbb001110100BBBCCCCCCAAAAAA. */ +{ "vaddsub4h", 0x283A0000, 0xF8FF8000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, RC }, { 0 }}, + +/* vaddsub4h 0,b,c 00101bbb001110100BBBCCCCCC111110. */ +{ "vaddsub4h", 0x283A003E, 0xF8FF803F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, RC }, { 0 }}, + +/* vaddsub4h<.cc> b,b,c 00101bbb111110100BBBCCCCCC0QQQQQ. */ +{ "vaddsub4h", 0x28FA0000, 0xF8FF8020, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, RC }, { C_CC }}, + +/* vaddsub4h a,b,u6 00101bbb011110100BBBuuuuuuAAAAAA. */ +{ "vaddsub4h", 0x287A0000, 0xF8FF8000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, UIMM6_20 }, { 0 }}, + +/* vaddsub4h 0,b,u6 00101bbb011110100BBBuuuuuu111110. */ +{ "vaddsub4h", 0x287A003E, 0xF8FF803F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, UIMM6_20 }, { 0 }}, + +/* vaddsub4h<.cc> b,b,u6 00101bbb111110100BBBuuuuuu1QQQQQ. */ +{ "vaddsub4h", 0x28FA0020, 0xF8FF8020, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, UIMM6_20 }, { C_CC }}, + +/* vaddsub4h b,b,s12 00101bbb101110100BBBssssssSSSSSS. */ +{ "vaddsub4h", 0x28BA0000, 0xF8FF8000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, SIMM12_20 }, { 0 }}, + +/* vaddsub4h a,limm,c 00101110001110100111CCCCCCAAAAAA. */ +{ "vaddsub4h", 0x2E3A7000, 0xFFFFF000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, RC }, { 0 }}, + +/* vaddsub4h a,b,limm 00101bbb001110100BBB111110AAAAAA. */ +{ "vaddsub4h", 0x283A0F80, 0xF8FF8FC0, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, LIMM }, { 0 }}, + +/* vaddsub4h 0,limm,c 00101110001110100111CCCCCC111110. */ +{ "vaddsub4h", 0x2E3A703E, 0xFFFFF03F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, RC }, { 0 }}, + +/* vaddsub4h 0,b,limm 00101bbb001110100BBB111110111110. */ +{ "vaddsub4h", 0x283A0FBE, 0xF8FF8FFF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, LIMM }, { 0 }}, + +/* vaddsub4h<.cc> b,b,limm 00101bbb111110100BBB1111100QQQQQ. */ +{ "vaddsub4h", 0x28FA0F80, 0xF8FF8FE0, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, LIMM }, { C_CC }}, + +/* vaddsub4h<.cc> 0,limm,c 00101110111110100111CCCCCC0QQQQQ. */ +{ "vaddsub4h", 0x2EFA7000, 0xFFFFF020, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, RC }, { C_CC }}, + +/* vaddsub4h a,limm,u6 00101110011110100111uuuuuuAAAAAA. */ +{ "vaddsub4h", 0x2E7A7000, 0xFFFFF000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, UIMM6_20 }, { 0 }}, + +/* vaddsub4h 0,limm,u6 00101110011110100111uuuuuu111110. */ +{ "vaddsub4h", 0x2E7A703E, 0xFFFFF03F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, UIMM6_20 }, { 0 }}, + +/* vaddsub4h<.cc> 0,limm,u6 00101110111110100111uuuuuu1QQQQQ. */ +{ "vaddsub4h", 0x2EFA7020, 0xFFFFF020, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, UIMM6_20 }, { C_CC }}, + +/* vaddsub4h 0,limm,s12 00101110101110100111ssssssSSSSSS. */ +{ "vaddsub4h", 0x2EBA7000, 0xFFFFF000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, SIMM12_20 }, { 0 }}, + +/* vaddsub4h a,limm,limm 00101110001110100111111110AAAAAA. */ +{ "vaddsub4h", 0x2E3A7F80, 0xFFFFFFC0, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, LIMMdup }, { 0 }}, + +/* vaddsub4h 0,limm,limm 00101110001110100111111110111110. */ +{ "vaddsub4h", 0x2E3A7FBE, 0xFFFFFFFF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, LIMMdup }, { 0 }}, + +/* vaddsub4h<.cc> 0,limm,limm 001011101111101001111111100QQQQQ. */ +{ "vaddsub4h", 0x2EFA7F80, 0xFFFFFFE0, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, LIMMdup }, { C_CC }}, + +/* vmac2h a,b,c 00101bbb000111100BBBCCCCCCAAAAAA. */ +{ "vmac2h", 0x281E0000, 0xF8FF8000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { RA_CHK, RB, RC }, { 0 }}, + +/* vmac2h 0,b,c 00101bbb000111100BBBCCCCCC111110. */ +{ "vmac2h", 0x281E003E, 0xF8FF803F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { ZA, RB, RC }, { 0 }}, + +/* vmac2h<.cc> b,b,c 00101bbb110111100BBBCCCCCC0QQQQQ. */ +{ "vmac2h", 0x28DE0000, 0xF8FF8020, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { RB_CHK, RBdup, RC }, { C_CC }}, + +/* vmac2h a,b,u6 00101bbb010111100BBBuuuuuuAAAAAA. */ +{ "vmac2h", 0x285E0000, 0xF8FF8000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { RA_CHK, RB, UIMM6_20 }, { 0 }}, + +/* vmac2h 0,b,u6 00101bbb010111100BBBuuuuuu111110. */ +{ "vmac2h", 0x285E003E, 0xF8FF803F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { ZA, RB, UIMM6_20 }, { 0 }}, + +/* vmac2h<.cc> b,b,u6 00101bbb110111100BBBuuuuuu1QQQQQ. */ +{ "vmac2h", 0x28DE0020, 0xF8FF8020, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { RB_CHK, RBdup, UIMM6_20 }, { C_CC }}, + +/* vmac2h b,b,s12 00101bbb100111100BBBssssssSSSSSS. */ +{ "vmac2h", 0x289E0000, 0xF8FF8000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { RB_CHK, RBdup, SIMM12_20 }, { 0 }}, + +/* vmac2h a,limm,c 00101110000111100111CCCCCCAAAAAA. */ +{ "vmac2h", 0x2E1E7000, 0xFFFFF000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { RA_CHK, LIMM, RC }, { 0 }}, + +/* vmac2h a,b,limm 00101bbb000111100BBB111110AAAAAA. */ +{ "vmac2h", 0x281E0F80, 0xF8FF8FC0, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { RA_CHK, RB, LIMM }, { 0 }}, + +/* vmac2h 0,limm,c 00101110000111100111CCCCCC111110. */ +{ "vmac2h", 0x2E1E703E, 0xFFFFF03F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { ZA, LIMM, RC }, { 0 }}, + +/* vmac2h 0,b,limm 00101bbb000111100BBB111110111110. */ +{ "vmac2h", 0x281E0FBE, 0xF8FF8FFF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { ZA, RB, LIMM }, { 0 }}, + +/* vmac2h<.cc> b,b,limm 00101bbb110111100BBB1111100QQQQQ. */ +{ "vmac2h", 0x28DE0F80, 0xF8FF8FE0, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { RB_CHK, RBdup, LIMM }, { C_CC }}, + +/* vmac2h<.cc> 0,limm,c 00101110110111100111CCCCCC0QQQQQ. */ +{ "vmac2h", 0x2EDE7000, 0xFFFFF020, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { ZA, LIMM, RC }, { C_CC }}, + +/* vmac2h a,limm,u6 00101110010111100111uuuuuuAAAAAA. */ +{ "vmac2h", 0x2E5E7000, 0xFFFFF000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { RA_CHK, LIMM, UIMM6_20 }, { 0 }}, + +/* vmac2h 0,limm,u6 00101110010111100111uuuuuu111110. */ +{ "vmac2h", 0x2E5E703E, 0xFFFFF03F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { ZA, LIMM, UIMM6_20 }, { 0 }}, + +/* vmac2h<.cc> 0,limm,u6 00101110110111100111uuuuuu1QQQQQ. */ +{ "vmac2h", 0x2EDE7020, 0xFFFFF020, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { ZA, LIMM, UIMM6_20 }, { C_CC }}, + +/* vmac2h 0,limm,s12 00101110100111100111ssssssSSSSSS. */ +{ "vmac2h", 0x2E9E7000, 0xFFFFF000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { ZA, LIMM, SIMM12_20 }, { 0 }}, + +/* vmac2h a,limm,limm 00101110000111100111111110AAAAAA. */ +{ "vmac2h", 0x2E1E7F80, 0xFFFFFFC0, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { RA_CHK, LIMM, LIMMdup }, { 0 }}, + +/* vmac2h 0,limm,limm 00101110000111100111111110111110. */ +{ "vmac2h", 0x2E1E7FBE, 0xFFFFFFFF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { ZA, LIMM, LIMMdup }, { 0 }}, + +/* vmac2h<.cc> 0,limm,limm 001011101101111001111111100QQQQQ. */ +{ "vmac2h", 0x2EDE7F80, 0xFFFFFFE0, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { ZA, LIMM, LIMMdup }, { C_CC }}, + +/* vmac2hu a,b,c 00101bbb000111110BBBCCCCCCAAAAAA. */ +{ "vmac2hu", 0x281F0000, 0xF8FF8000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { RA_CHK, RB, RC }, { 0 }}, + +/* vmac2hu 0,b,c 00101bbb000111110BBBCCCCCC111110. */ +{ "vmac2hu", 0x281F003E, 0xF8FF803F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { ZA, RB, RC }, { 0 }}, + +/* vmac2hu<.cc> b,b,c 00101bbb110111110BBBCCCCCC0QQQQQ. */ +{ "vmac2hu", 0x28DF0000, 0xF8FF8020, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { RB_CHK, RBdup, RC }, { C_CC }}, + +/* vmac2hu a,b,u6 00101bbb010111110BBBuuuuuuAAAAAA. */ +{ "vmac2hu", 0x285F0000, 0xF8FF8000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { RA_CHK, RB, UIMM6_20 }, { 0 }}, + +/* vmac2hu 0,b,u6 00101bbb010111110BBBuuuuuu111110. */ +{ "vmac2hu", 0x285F003E, 0xF8FF803F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { ZA, RB, UIMM6_20 }, { 0 }}, + +/* vmac2hu<.cc> b,b,u6 00101bbb110111110BBBuuuuuu1QQQQQ. */ +{ "vmac2hu", 0x28DF0020, 0xF8FF8020, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { RB_CHK, RBdup, UIMM6_20 }, { C_CC }}, + +/* vmac2hu b,b,s12 00101bbb100111110BBBssssssSSSSSS. */ +{ "vmac2hu", 0x289F0000, 0xF8FF8000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { RB_CHK, RBdup, SIMM12_20 }, { 0 }}, + +/* vmac2hu a,limm,c 00101110000111110111CCCCCCAAAAAA. */ +{ "vmac2hu", 0x2E1F7000, 0xFFFFF000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { RA_CHK, LIMM, RC }, { 0 }}, + +/* vmac2hu a,b,limm 00101bbb000111110BBB111110AAAAAA. */ +{ "vmac2hu", 0x281F0F80, 0xF8FF8FC0, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { RA_CHK, RB, LIMM }, { 0 }}, + +/* vmac2hu 0,limm,c 00101110000111110111CCCCCC111110. */ +{ "vmac2hu", 0x2E1F703E, 0xFFFFF03F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { ZA, LIMM, RC }, { 0 }}, + +/* vmac2hu 0,b,limm 00101bbb000111110BBB111110111110. */ +{ "vmac2hu", 0x281F0FBE, 0xF8FF8FFF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { ZA, RB, LIMM }, { 0 }}, + +/* vmac2hu<.cc> b,b,limm 00101bbb110111110BBB1111100QQQQQ. */ +{ "vmac2hu", 0x28DF0F80, 0xF8FF8FE0, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { RB_CHK, RBdup, LIMM }, { C_CC }}, + +/* vmac2hu<.cc> 0,limm,c 00101110110111110111CCCCCC0QQQQQ. */ +{ "vmac2hu", 0x2EDF7000, 0xFFFFF020, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { ZA, LIMM, RC }, { C_CC }}, + +/* vmac2hu a,limm,u6 00101110010111110111uuuuuuAAAAAA. */ +{ "vmac2hu", 0x2E5F7000, 0xFFFFF000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { RA_CHK, LIMM, UIMM6_20 }, { 0 }}, + +/* vmac2hu 0,limm,u6 00101110010111110111uuuuuu111110. */ +{ "vmac2hu", 0x2E5F703E, 0xFFFFF03F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { ZA, LIMM, UIMM6_20 }, { 0 }}, + +/* vmac2hu<.cc> 0,limm,u6 00101110110111110111uuuuuu1QQQQQ. */ +{ "vmac2hu", 0x2EDF7020, 0xFFFFF020, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { ZA, LIMM, UIMM6_20 }, { C_CC }}, + +/* vmac2hu 0,limm,s12 00101110100111110111ssssssSSSSSS. */ +{ "vmac2hu", 0x2E9F7000, 0xFFFFF000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { ZA, LIMM, SIMM12_20 }, { 0 }}, + +/* vmac2hu a,limm,limm 00101110000111110111111110AAAAAA. */ +{ "vmac2hu", 0x2E1F7F80, 0xFFFFFFC0, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { RA_CHK, LIMM, LIMMdup }, { 0 }}, + +/* vmac2hu 0,limm,limm 00101110000111110111111110111110. */ +{ "vmac2hu", 0x2E1F7FBE, 0xFFFFFFFF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { ZA, LIMM, LIMMdup }, { 0 }}, + +/* vmac2hu<.cc> 0,limm,limm 001011101101111101111111100QQQQQ. */ +{ "vmac2hu", 0x2EDF7F80, 0xFFFFFFE0, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, NONE, { ZA, LIMM, LIMMdup }, { C_CC }}, + +/* vmpy2h a,b,c 00101bbb000111000BBBCCCCCCAAAAAA. */ +{ "vmpy2h", 0x281C0000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RA_CHK, RB, RC }, { 0 }}, + +/* vmpy2h 0,b,c 00101bbb000111000BBBCCCCCC111110. */ +{ "vmpy2h", 0x281C003E, 0xF8FF803F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, RB, RC }, { 0 }}, + +/* vmpy2h<.cc> b,b,c 00101bbb110111000BBBCCCCCC0QQQQQ. */ +{ "vmpy2h", 0x28DC0000, 0xF8FF8020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RB_CHK, RBdup, RC }, { C_CC }}, + +/* vmpy2h a,b,u6 00101bbb010111000BBBuuuuuuAAAAAA. */ +{ "vmpy2h", 0x285C0000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RA_CHK, RB, UIMM6_20 }, { 0 }}, + +/* vmpy2h 0,b,u6 00101bbb010111000BBBuuuuuu111110. */ +{ "vmpy2h", 0x285C003E, 0xF8FF803F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, RB, UIMM6_20 }, { 0 }}, + +/* vmpy2h<.cc> b,b,u6 00101bbb110111000BBBuuuuuu1QQQQQ. */ +{ "vmpy2h", 0x28DC0020, 0xF8FF8020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RB_CHK, RBdup, UIMM6_20 }, { C_CC }}, + +/* vmpy2h b,b,s12 00101bbb100111000BBBssssssSSSSSS. */ + +/* vmpy2h b,b,s12 00101bbb100111000BBBssssssSSSSSS. */ +{ "vmpy2h", 0x289C0000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RB_CHK, RBdup, SIMM12_20 }, { 0 }}, + +/* vmpy2h a,limm,c 00101110000111000111CCCCCCAAAAAA. */ +{ "vmpy2h", 0x2E1C7000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RA_CHK, LIMM, RC }, { 0 }}, + +/* vmpy2h a,b,limm 00101bbb000111000BBB111110AAAAAA. */ +{ "vmpy2h", 0x281C0F80, 0xF8FF8FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RA_CHK, RB, LIMM }, { 0 }}, + +/* vmpy2h 0,limm,c 00101110000111000111CCCCCC111110. */ +{ "vmpy2h", 0x2E1C703E, 0xFFFFF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, RC }, { 0 }}, + +/* vmpy2h 0,b,limm 00101bbb000111000BBB111110111110. */ +{ "vmpy2h", 0x281C0FBE, 0xF8FF8FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, RB, LIMM }, { 0 }}, + +/* vmpy2h<.cc> b,b,limm 00101bbb110111000BBB1111100QQQQQ. */ +{ "vmpy2h", 0x28DC0F80, 0xF8FF8FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RB_CHK, RBdup, LIMM }, { C_CC }}, + +/* vmpy2h<.cc> 0,limm,c 00101110110111000111CCCCCC0QQQQQ. */ +{ "vmpy2h", 0x2EDC7000, 0xFFFFF020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, RC }, { C_CC }}, + +/* vmpy2h a,limm,u6 00101110010111000111uuuuuuAAAAAA. */ +{ "vmpy2h", 0x2E5C7000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RA_CHK, LIMM, UIMM6_20 }, { 0 }}, + +/* vmpy2h 0,limm,u6 00101110010111000111uuuuuu111110. */ +{ "vmpy2h", 0x2E5C703E, 0xFFFFF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, UIMM6_20 }, { 0 }}, + +/* vmpy2h<.cc> 0,limm,u6 00101110110111000111uuuuuu1QQQQQ. */ +{ "vmpy2h", 0x2EDC7020, 0xFFFFF020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, UIMM6_20 }, { C_CC }}, + +/* vmpy2h 0,limm,s12 00101110100111000111ssssssSSSSSS. */ +{ "vmpy2h", 0x2E9C7000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, SIMM12_20 }, { 0 }}, + +/* vmpy2h a,limm,limm 00101110000111000111111110AAAAAA. */ +{ "vmpy2h", 0x2E1C7F80, 0xFFFFFFC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RA_CHK, LIMM, LIMMdup }, { 0 }}, + +/* vmpy2h 0,limm,limm 00101110000111000111111110111110. */ +{ "vmpy2h", 0x2E1C7FBE, 0xFFFFFFFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, LIMMdup }, { 0 }}, + +/* vmpy2h<.cc> 0,limm,limm 001011101101110001111111100QQQQQ. */ +{ "vmpy2h", 0x2EDC7F80, 0xFFFFFFE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, LIMMdup }, { C_CC }}, + +/* vmpy2hu a,b,c 00101bbb000111010BBBCCCCCCAAAAAA. */ +{ "vmpy2hu", 0x281D0000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RA_CHK, RB, RC }, { 0 }}, + +/* vmpy2hu 0,b,c 00101bbb000111010BBBCCCCCC111110. */ +{ "vmpy2hu", 0x281D003E, 0xF8FF803F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, RB, RC }, { 0 }}, + +/* vmpy2hu<.cc> b,b,c 00101bbb110111010BBBCCCCCC0QQQQQ. */ +{ "vmpy2hu", 0x28DD0000, 0xF8FF8020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RB_CHK, RBdup, RC }, { C_CC }}, + +/* vmpy2hu a,b,u6 00101bbb010111010BBBuuuuuuAAAAAA. */ +{ "vmpy2hu", 0x285D0000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RA_CHK, RB, UIMM6_20 }, { 0 }}, + +/* vmpy2hu 0,b,u6 00101bbb010111010BBBuuuuuu111110. */ +{ "vmpy2hu", 0x285D003E, 0xF8FF803F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, RB, UIMM6_20 }, { 0 }}, + +/* vmpy2hu<.cc> b,b,u6 00101bbb110111010BBBuuuuuu1QQQQQ. */ +{ "vmpy2hu", 0x28DD0020, 0xF8FF8020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RB_CHK, RBdup, UIMM6_20 }, { C_CC }}, + +/* vmpy2hu b,b,s12 00101bbb100111010BBBssssssSSSSSS. */ +{ "vmpy2hu", 0x289D0000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RB_CHK, RBdup, SIMM12_20 }, { 0 }}, + +/* vmpy2hu a,limm,c 00101110000111010111CCCCCCAAAAAA. */ +{ "vmpy2hu", 0x2E1D7000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RA_CHK, LIMM, RC }, { 0 }}, + +/* vmpy2hu a,b,limm 00101bbb000111010BBB111110AAAAAA. */ +{ "vmpy2hu", 0x281D0F80, 0xF8FF8FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RA_CHK, RB, LIMM }, { 0 }}, + +/* vmpy2hu 0,limm,c 00101110000111010111CCCCCC111110. */ +{ "vmpy2hu", 0x2E1D703E, 0xFFFFF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, RC }, { 0 }}, + +/* vmpy2hu 0,b,limm 00101bbb000111010BBB111110111110. */ +{ "vmpy2hu", 0x281D0FBE, 0xF8FF8FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, RB, LIMM }, { 0 }}, + +/* vmpy2hu<.cc> b,b,limm 00101bbb110111010BBB1111100QQQQQ. */ +{ "vmpy2hu", 0x28DD0F80, 0xF8FF8FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RB_CHK, RBdup, LIMM }, { C_CC }}, + +/* vmpy2hu<.cc> 0,limm,c 00101110110111010111CCCCCC0QQQQQ. */ +{ "vmpy2hu", 0x2EDD7000, 0xFFFFF020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, RC }, { C_CC }}, + +/* vmpy2hu a,limm,u6 00101110010111010111uuuuuuAAAAAA. */ +{ "vmpy2hu", 0x2E5D7000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RA_CHK, LIMM, UIMM6_20 }, { 0 }}, + +/* vmpy2hu 0,limm,u6 00101110010111010111uuuuuu111110. */ +{ "vmpy2hu", 0x2E5D703E, 0xFFFFF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, UIMM6_20 }, { 0 }}, + +/* vmpy2hu<.cc> 0,limm,u6 00101110110111010111uuuuuu1QQQQQ. */ +{ "vmpy2hu", 0x2EDD7020, 0xFFFFF020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, UIMM6_20 }, { C_CC }}, + +/* vmpy2hu 0,limm,s12 00101110100111010111ssssssSSSSSS. */ +{ "vmpy2hu", 0x2E9D7000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, SIMM12_20 }, { 0 }}, + +/* vmpy2hu a,limm,limm 00101110000111010111111110AAAAAA. */ +{ "vmpy2hu", 0x2E1D7F80, 0xFFFFFFC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { RA_CHK, LIMM, LIMMdup }, { 0 }}, + +/* vmpy2hu 0,limm,limm 00101110000111010111111110111110. */ +{ "vmpy2hu", 0x2E1D7FBE, 0xFFFFFFFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, LIMMdup }, { 0 }}, + +/* vmpy2hu<.cc> 0,limm,limm 001011101101110101111111100QQQQQ. */ +{ "vmpy2hu", 0x2EDD7F80, 0xFFFFFFE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY8E, { ZA, LIMM, LIMMdup }, { C_CC }}, + +/* vpack4hl a,b,c 00101bbb001010010BBBCCCCCCAAAAAA. */ +{ "vpack4hl", 0x28290000, 0xF8FF8000, ARC_OPCODE_ARC64, MOVE, NONE, { RA_CHK, RB, RC }, { 0 }}, + +/* vpack4hl 0,b,c 00101bbb001010010BBBCCCCCC111110. */ +{ "vpack4hl", 0x2829003E, 0xF8FF803F, ARC_OPCODE_ARC64, MOVE, NONE, { ZA, RB, RC }, { 0 }}, + +/* vpack4hl<.cc> b,b,c 00101bbb111010010BBBCCCCCC0QQQQQ. */ +{ "vpack4hl", 0x28E90000, 0xF8FF8020, ARC_OPCODE_ARC64, MOVE, NONE, { RB_CHK, RBdup, RC }, { C_CC }}, + +/* vpack4hl a,b,u6 00101bbb011010010BBBuuuuuuAAAAAA. */ +{ "vpack4hl", 0x28690000, 0xF8FF8000, ARC_OPCODE_ARC64, MOVE, NONE, { RA_CHK, RB, UIMM6_20 }, { 0 }}, + +/* vpack4hl 0,b,u6 00101bbb011010010BBBuuuuuu111110. */ +{ "vpack4hl", 0x2869003E, 0xF8FF803F, ARC_OPCODE_ARC64, MOVE, NONE, { ZA, RB, UIMM6_20 }, { 0 }}, + +/* vpack4hl<.cc> b,b,u6 00101bbb111010010BBBuuuuuu1QQQQQ. */ +{ "vpack4hl", 0x28E90020, 0xF8FF8020, ARC_OPCODE_ARC64, MOVE, NONE, { RB_CHK, RBdup, UIMM6_20 }, { C_CC }}, + +/* vpack4hl b,b,s12 00101bbb101010010BBBssssssSSSSSS. */ +{ "vpack4hl", 0x28A90000, 0xF8FF8000, ARC_OPCODE_ARC64, MOVE, NONE, { RB_CHK, RBdup, SIMM12_20 }, { 0 }}, + +/* vpack4hl a,limm,c 00101110001010010111CCCCCCAAAAAA. */ +{ "vpack4hl", 0x2E297000, 0xFFFFF000, ARC_OPCODE_ARC64, MOVE, NONE, { RA_CHK, LIMM, RC }, { 0 }}, + +/* vpack4hl a,b,limm 00101bbb001010010BBB111110AAAAAA. */ +{ "vpack4hl", 0x28290F80, 0xF8FF8FC0, ARC_OPCODE_ARC64, MOVE, NONE, { RA_CHK, RB, LIMM }, { 0 }}, + +/* vpack4hl 0,limm,c 00101110011010010111CCCCCC111110. */ +{ "vpack4hl", 0x2E69703E, 0xFFFFF03F, ARC_OPCODE_ARC64, MOVE, NONE, { ZA, LIMM, RC }, { 0 }}, + +/* vpack4hl 0,b,limm 00101bbb001010010BBB111110111110. */ +{ "vpack4hl", 0x28290FBE, 0xF8FF8FFF, ARC_OPCODE_ARC64, MOVE, NONE, { ZA, RB, LIMM }, { 0 }}, + +/* vpack4hl<.cc> b,b,limm 00101bbb111010010BBB1111100QQQQQ. */ +{ "vpack4hl", 0x28E90F80, 0xF8FF8FE0, ARC_OPCODE_ARC64, MOVE, NONE, { RB_CHK, RBdup, LIMM }, { C_CC }}, + +/* vpack4hl<.cc> 0,limm,c 00101110111010010111CCCCCC0QQQQQ. */ +{ "vpack4hl", 0x2EE97000, 0xFFFFF020, ARC_OPCODE_ARC64, MOVE, NONE, { ZA, LIMM, RC }, { C_CC }}, + +/* vpack4hl a,limm,u6 00101110011010010111uuuuuuAAAAAA. */ +{ "vpack4hl", 0x2E697000, 0xFFFFF000, ARC_OPCODE_ARC64, MOVE, NONE, { RA_CHK, LIMM, UIMM6_20 }, { 0 }}, + +/* vpack4hl 0,limm,u6 00101110011010010111uuuuuu111110. */ +{ "vpack4hl", 0x2E69703E, 0xFFFFF03F, ARC_OPCODE_ARC64, MOVE, NONE, { ZA, LIMM, UIMM6_20 }, { 0 }}, + +/* vpack4hl<.cc> 0,limm,u6 00101110111010010111uuuuuu1QQQQQ. */ +{ "vpack4hl", 0x2EE97020, 0xFFFFF020, ARC_OPCODE_ARC64, MOVE, NONE, { ZA, LIMM, UIMM6_20 }, { C_CC }}, + +/* vpack4hl 0,limm,s12 00101110101010010111ssssssSSSSSS. */ +{ "vpack4hl", 0x2EA97000, 0xFFFFF000, ARC_OPCODE_ARC64, MOVE, NONE, { ZA, LIMM, SIMM12_20 }, { 0 }}, + +/* vpack4hl a,limm,limm 00101110001010010111111110AAAAAA. */ +{ "vpack4hl", 0x2E297F80, 0xFFFFFFC0, ARC_OPCODE_ARC64, MOVE, NONE, { RA_CHK, LIMM, LIMMdup }, { 0 }}, + +/* vpack4hl 0,limm,limm 00101110001010010111111110111110. */ +{ "vpack4hl", 0x2E297FBE, 0xFFFFFFFF, ARC_OPCODE_ARC64, MOVE, NONE, { ZA, LIMM, LIMMdup }, { 0 }}, + +/* vpack4hl<.cc> 0,limm,limm 001011101110100101111111100QQQQQ. */ +{ "vpack4hl", 0x2EE97F80, 0xFFFFFFE0, ARC_OPCODE_ARC64, MOVE, NONE, { ZA, LIMM, LIMMdup }, { C_CC }}, + +/* vpack4hm a,b,c 00101bbb001010011BBBCCCCCCAAAAAA. */ +{ "vpack4hm", 0x28298000, 0xF8FF8000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { RA_CHK, RB, RC }, { 0 }}, + +/* vpack4hm 0,b,c 00101bbb001010011BBBCCCCCC111110. */ +{ "vpack4hm", 0x2829803E, 0xF8FF803F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { ZA, RB, RC }, { 0 }}, + +/* vpack4hm<.cc> b,b,c 00101bbb111010011BBBCCCCCC0QQQQQ. */ +{ "vpack4hm", 0x28E98000, 0xF8FF8020, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { RB_CHK, RBdup, RC }, { C_CC }}, + +/* vpack4hm a,b,u6 00101bbb011010011BBBuuuuuuAAAAAA. */ +{ "vpack4hm", 0x28698000, 0xF8FF8000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { RA_CHK, RB, UIMM6_20 }, { 0 }}, + +/* vpack4hm 0,b,u6 00101bbb011010011BBBuuuuuu111110. */ +{ "vpack4hm", 0x2869803E, 0xF8FF803F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { ZA, RB, UIMM6_20 }, { 0 }}, + +/* vpack4hm<.cc> b,b,u6 00101bbb111010011BBBuuuuuu1QQQQQ. */ +{ "vpack4hm", 0x28E98020, 0xF8FF8020, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { RB_CHK, RBdup, UIMM6_20 }, { C_CC }}, + +/* vpack4hm b,b,s12 00101bbb101010011BBBssssssSSSSSS. */ +{ "vpack4hm", 0x28A98000, 0xF8FF8000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { RB_CHK, RBdup, SIMM12_20 }, { 0 }}, + +/* vpack4hm a,limm,c 00101110001010011111CCCCCCAAAAAA. */ +{ "vpack4hm", 0x2E29F000, 0xFFFFF000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { RA_CHK, LIMM, RC }, { 0 }}, + +/* vpack4hm a,b,limm 00101bbb001010011BBB111110AAAAAA. */ +{ "vpack4hm", 0x28298F80, 0xF8FF8FC0, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { RA_CHK, RB, LIMM }, { 0 }}, + +/* vpack4hm 0,limm,c 00101110011010011111CCCCCC111110. */ +{ "vpack4hm", 0x2E69F03E, 0xFFFFF03F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { ZA, LIMM, RC }, { 0 }}, + +/* vpack4hm 0,b,limm 00101bbb001010011BBB111110111110. */ +{ "vpack4hm", 0x28298FBE, 0xF8FF8FFF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { ZA, RB, LIMM }, { 0 }}, + +/* vpack4hm<.cc> b,b,limm 00101bbb111010011BBB1111100QQQQQ. */ +{ "vpack4hm", 0x28E98F80, 0xF8FF8FE0, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { RB_CHK, RBdup, LIMM }, { C_CC }}, + +/* vpack4hm<.cc> 0,limm,c 00101110111010011111CCCCCC0QQQQQ. */ +{ "vpack4hm", 0x2EE9F000, 0xFFFFF020, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { ZA, LIMM, RC }, { C_CC }}, + +/* vpack4hm a,limm,u6 00101110011010011111uuuuuuAAAAAA. */ +{ "vpack4hm", 0x2E69F000, 0xFFFFF000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { RA_CHK, LIMM, UIMM6_20 }, { 0 }}, + +/* vpack4hm 0,limm,u6 00101110011010011111uuuuuu111110. */ +{ "vpack4hm", 0x2E69F03E, 0xFFFFF03F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { ZA, LIMM, UIMM6_20 }, { 0 }}, + +/* vpack4hm<.cc> 0,limm,u6 00101110111010011111uuuuuu1QQQQQ. */ +{ "vpack4hm", 0x2EE9F020, 0xFFFFF020, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { ZA, LIMM, UIMM6_20 }, { C_CC }}, + +/* vpack4hm 0,limm,s12 00101110101010011111ssssssSSSSSS. */ +{ "vpack4hm", 0x2EA9F000, 0xFFFFF000, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { ZA, LIMM, SIMM12_20 }, { 0 }}, + +/* vpack4hm a,limm,limm 00101110001010011111111110AAAAAA. */ +{ "vpack4hm", 0x2E29FF80, 0xFFFFFFC0, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { RA_CHK, LIMM, LIMMdup }, { 0 }}, + +/* vpack4hm 0,limm,limm 00101110001010011111111110111110. */ +{ "vpack4hm", 0x2E29FFBE, 0xFFFFFFFF, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { ZA, LIMM, LIMMdup }, { 0 }}, + +/* vpack4hm<.cc> 0,limm,limm 001011101110100111111111100QQQQQ. */ +{ "vpack4hm", 0x2EE9FF80, 0xFFFFFFE0, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MOVE, NONE, { ZA, LIMM, LIMMdup }, { C_CC }}, + +/* vsub2 a,b,c 00101bbb001111010BBBCCCCCCAAAAAA. */ +{ "vsub2", 0x283D0000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, RC }, { 0 }}, + +/* vsub2 0,b,c 00101bbb001111010BBBCCCCCC111110. */ +{ "vsub2", 0x283D003E, 0xF8FF803F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, RC }, { 0 }}, + +/* vsub2<.cc> b,b,c 00101bbb111111010BBBCCCCCC0QQQQQ. */ +{ "vsub2", 0x28FD0000, 0xF8FF8020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, RC }, { C_CC }}, + +/* vsub2 a,b,u6 00101bbb011111010BBBuuuuuuAAAAAA. */ +{ "vsub2", 0x287D0000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, UIMM6_20 }, { 0 }}, + +/* vsub2 0,b,u6 00101bbb011111010BBBuuuuuu111110. */ +{ "vsub2", 0x287D003E, 0xF8FF803F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, UIMM6_20 }, { 0 }}, + +/* vsub2<.cc> b,b,u6 00101bbb111111010BBBuuuuuu1QQQQQ. */ +{ "vsub2", 0x28FD0020, 0xF8FF8020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, UIMM6_20 }, { C_CC }}, + +/* vsub2 b,b,s12 00101bbb101111010BBBssssssSSSSSS. */ +{ "vsub2", 0x28BD0000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, SIMM12_20 }, { 0 }}, + +/* vsub2 a,limm,c 00101110001111010111CCCCCCAAAAAA. */ +{ "vsub2", 0x2E3D7000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, RC }, { 0 }}, + +/* vsub2 a,b,limm 00101bbb001111010BBB111110AAAAAA. */ +{ "vsub2", 0x283D0F80, 0xF8FF8FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, LIMM }, { 0 }}, + +/* vsub2 0,limm,c 00101110001111010111CCCCCC111110. */ +{ "vsub2", 0x2E3D703E, 0xFFFFF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, RC }, { 0 }}, + +/* vsub2 0,b,limm 00101bbb001111010BBB111110111110. */ +{ "vsub2", 0x283D0FBE, 0xF8FF8FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, LIMM }, { 0 }}, + +/* vsub2<.cc> b,b,limm 00101bbb111111010BBB1111100QQQQQ. */ +{ "vsub2", 0x28FD0F80, 0xF8FF8FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, LIMM }, { C_CC }}, + +/* vsub2<.cc> 0,limm,c 00101110111111010111CCCCCC0QQQQQ. */ +{ "vsub2", 0x2EFD7000, 0xFFFFF020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, RC }, { C_CC }}, + +/* vsub2 a,limm,u6 00101110011111010111uuuuuuAAAAAA. */ +{ "vsub2", 0x2E7D7000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, UIMM6_20 }, { 0 }}, + +/* vsub2 0,limm,u6 00101110011111010111uuuuuu111110. */ +{ "vsub2", 0x2E7D703E, 0xFFFFF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, UIMM6_20 }, { 0 }}, + +/* vsub2<.cc> 0,limm,u6 00101110111111010111uuuuuu1QQQQQ. */ +{ "vsub2", 0x2EFD7020, 0xFFFFF020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, UIMM6_20 }, { C_CC }}, + +/* vsub2 0,limm,s12 00101110101111010111ssssssSSSSSS. */ +{ "vsub2", 0x2EBD7000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, SIMM12_20 }, { 0 }}, + +/* vsub2 a,limm,limm 00101110001111010111111110AAAAAA. */ +{ "vsub2", 0x2E3D7F80, 0xFFFFFFC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, LIMMdup }, { 0 }}, + +/* vsub2 0,limm,limm 00101110001111010111111110111110. */ +{ "vsub2", 0x2E3D7FBE, 0xFFFFFFFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, LIMMdup }, { 0 }}, + +/* vsub2<.cc> 0,limm,limm 001011101111110101111111100QQQQQ. */ +{ "vsub2", 0x2EFD7F80, 0xFFFFFFE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, LIMMdup }, { C_CC }}, + +/* vsub2h a,b,c 00101bbb000101010BBBCCCCCCAAAAAA. */ +{ "vsub2h", 0x28150000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, RB, RC }, { 0 }}, + +/* vsub2h 0,b,c 00101bbb000101010BBBCCCCCC111110. */ +{ "vsub2h", 0x2815003E, 0xF8FF803F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, RB, RC }, { 0 }}, + +/* vsub2h<.cc> b,b,c 00101bbb110101010BBBCCCCCC0QQQQQ. */ +{ "vsub2h", 0x28D50000, 0xF8FF8020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, RC }, { C_CC }}, + +/* vsub2h a,b,u6 00101bbb010101010BBBuuuuuuAAAAAA. */ +{ "vsub2h", 0x28550000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, RB, UIMM6_20 }, { 0 }}, + +/* vsub2h 0,b,u6 00101bbb010101010BBBuuuuuu111110. */ +{ "vsub2h", 0x2855003E, 0xF8FF803F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, RB, UIMM6_20 }, { 0 }}, + +/* vsub2h<.cc> b,b,u6 00101bbb110101010BBBuuuuuu1QQQQQ. */ +{ "vsub2h", 0x28D50020, 0xF8FF8020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, UIMM6_20 }, { C_CC }}, + +/* vsub2h b,b,s12 00101bbb100101010BBBssssssSSSSSS. */ +{ "vsub2h", 0x28950000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, SIMM12_20 }, { 0 }}, + +/* vsub2h a,limm,c 00101110000101010111CCCCCCAAAAAA. */ +{ "vsub2h", 0x2E157000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, LIMM, RC }, { 0 }}, + +/* vsub2h a,b,limm 00101bbb000101010BBB111110AAAAAA. */ +{ "vsub2h", 0x28150F80, 0xF8FF8FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, RB, LIMM }, { 0 }}, + +/* vsub2h 0,limm,c 00101110000101010111CCCCCC111110. */ +{ "vsub2h", 0x2E15703E, 0xFFFFF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, RC }, { 0 }}, + +/* vsub2h 0,b,limm 00101bbb000101010BBB111110111110. */ +{ "vsub2h", 0x28150FBE, 0xF8FF8FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, RB, LIMM }, { 0 }}, + +/* vsub2h<.cc> b,b,limm 00101bbb110101010BBB1111100QQQQQ. */ +{ "vsub2h", 0x28D50F80, 0xF8FF8FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, LIMM }, { C_CC }}, + +/* vsub2h<.cc> 0,limm,c 00101110110101010111CCCCCC0QQQQQ. */ +{ "vsub2h", 0x2ED57000, 0xFFFFF020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, RC }, { C_CC }}, + +/* vsub2h a,limm,u6 00101110010101010111uuuuuuAAAAAA. */ +{ "vsub2h", 0x2E557000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, LIMM, UIMM6_20 }, { 0 }}, + +/* vsub2h 0,limm,u6 00101110010101010111uuuuuu111110. */ +{ "vsub2h", 0x2E55703E, 0xFFFFF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, UIMM6_20 }, { 0 }}, + +/* vsub2h<.cc> 0,limm,u6 00101110110101010111uuuuuu1QQQQQ. */ +{ "vsub2h", 0x2ED57020, 0xFFFFF020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, UIMM6_20 }, { C_CC }}, + +/* vsub2h 0,limm,s12 00101110100101010111ssssssSSSSSS. */ +{ "vsub2h", 0x2E957000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, SIMM12_20 }, { 0 }}, + +/* vsub2h a,limm,limm 00101110000101010111111110AAAAAA. */ +{ "vsub2h", 0x2E157F80, 0xFFFFFFC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, LIMM, LIMMdup }, { 0 }}, + +/* vsub2h 0,limm,limm 00101110000101010111111110111110. */ +{ "vsub2h", 0x2E157FBE, 0xFFFFFFFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, LIMMdup }, { 0 }}, + +/* vsub2h<.cc> 0,limm,limm 001011101101010101111111100QQQQQ. */ +{ "vsub2h", 0x2ED57F80, 0xFFFFFFE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, LIMMdup }, { C_CC }}, + +/* vsub4h a,b,c 00101bbb001110010BBBCCCCCCAAAAAA. */ +{ "vsub4h", 0x28390000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, RC }, { 0 }}, + +/* vsub4h 0,b,c 00101bbb001110010BBBCCCCCC111110. */ +{ "vsub4h", 0x2839003E, 0xF8FF803F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, RC }, { 0 }}, + +/* vsub4h<.cc> b,b,c 00101bbb111110010BBBCCCCCC0QQQQQ. */ +{ "vsub4h", 0x28F90000, 0xF8FF8020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, RC }, { C_CC }}, + +/* vsub4h a,b,u6 00101bbb011110010BBBuuuuuuAAAAAA. */ +{ "vsub4h", 0x28790000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, UIMM6_20 }, { 0 }}, + +/* vsub4h 0,b,u6 00101bbb011110010BBBuuuuuu111110. */ +{ "vsub4h", 0x2879003E, 0xF8FF803F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, UIMM6_20 }, { 0 }}, + +/* vsub4h<.cc> b,b,u6 00101bbb111110010BBBuuuuuu1QQQQQ. */ +{ "vsub4h", 0x28F90020, 0xF8FF8020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, UIMM6_20 }, { C_CC }}, + +/* vsub4h b,b,s12 00101bbb101110010BBBssssssSSSSSS. */ +{ "vsub4h", 0x28B90000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, SIMM12_20 }, { 0 }}, + +/* vsub4h a,limm,c 00101110001110010111CCCCCCAAAAAA. */ +{ "vsub4h", 0x2E397000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, RC }, { 0 }}, + +/* vsub4h a,b,limm 00101bbb001110010BBB111110AAAAAA. */ +{ "vsub4h", 0x28390F80, 0xF8FF8FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, LIMM }, { 0 }}, + +/* vsub4h 0,limm,c 00101110001110010111CCCCCC111110. */ +{ "vsub4h", 0x2E39703E, 0xFFFFF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, RC }, { 0 }}, + +/* vsub4h 0,b,limm 00101bbb001110010BBB111110111110. */ +{ "vsub4h", 0x28390FBE, 0xF8FF8FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, LIMM }, { 0 }}, + +/* vsub4h<.cc> b,b,limm 00101bbb111110010BBB1111100QQQQQ. */ +{ "vsub4h", 0x28F90F80, 0xF8FF8FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, LIMM }, { C_CC }}, + +/* vsub4h<.cc> 0,limm,c 00101110111110010111CCCCCC0QQQQQ. */ +{ "vsub4h", 0x2EF97000, 0xFFFFF020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, RC }, { C_CC }}, + +/* vsub4h a,limm,u6 00101110011110010111uuuuuuAAAAAA. */ +{ "vsub4h", 0x2E797000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, UIMM6_20 }, { 0 }}, + +/* vsub4h 0,limm,u6 00101110011110010111uuuuuu111110. */ +{ "vsub4h", 0x2E79703E, 0xFFFFF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, UIMM6_20 }, { 0 }}, + +/* vsub4h<.cc> 0,limm,u6 00101110111110010111uuuuuu1QQQQQ. */ +{ "vsub4h", 0x2EF97020, 0xFFFFF020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, UIMM6_20 }, { C_CC }}, + +/* vsub4h 0,limm,s12 00101110101110010111ssssssSSSSSS. */ +{ "vsub4h", 0x2EB97000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, SIMM12_20 }, { 0 }}, + +/* vsub4h a,limm,limm 00101110001110010111111110AAAAAA. */ +{ "vsub4h", 0x2E397F80, 0xFFFFFFC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, LIMMdup }, { 0 }}, + +/* vsub4h 0,limm,limm 00101110001110010111111110111110. */ +{ "vsub4h", 0x2E397FBE, 0xFFFFFFFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, LIMMdup }, { 0 }}, + +/* vsub4h<.cc> 0,limm,limm 001011101111100101111111100QQQQQ. */ +{ "vsub4h", 0x2EF97F80, 0xFFFFFFE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, LIMMdup }, { C_CC }}, + +/* vsubadd a,b,c 00101bbb001111110BBBCCCCCCAAAAAA. */ +{ "vsubadd", 0x283F0000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, RC }, { 0 }}, + +/* vsubadd 0,b,c 00101bbb001111110BBBCCCCCC111110. */ +{ "vsubadd", 0x283F003E, 0xF8FF803F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, RC }, { 0 }}, + +/* vsubadd<.cc> b,b,c 00101bbb111111110BBBCCCCCC0QQQQQ. */ +{ "vsubadd", 0x28FF0000, 0xF8FF8020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, RC }, { C_CC }}, + +/* vsubadd a,b,u6 00101bbb011111110BBBuuuuuuAAAAAA. */ +{ "vsubadd", 0x287F0000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, UIMM6_20 }, { 0 }}, + +/* vsubadd 0,b,u6 00101bbb011111110BBBuuuuuu111110. */ +{ "vsubadd", 0x287F003E, 0xF8FF803F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, UIMM6_20 }, { 0 }}, + +/* vsubadd<.cc> b,b,u6 00101bbb111111110BBBuuuuuu1QQQQQ. */ +{ "vsubadd", 0x28FF0020, 0xF8FF8020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, UIMM6_20 }, { C_CC }}, + +/* vsubadd b,b,s12 00101bbb101111110BBBssssssSSSSSS. */ +{ "vsubadd", 0x28BF0000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, SIMM12_20 }, { 0 }}, + +/* vsubadd a,limm,c 00101110001111110111CCCCCCAAAAAA. */ +{ "vsubadd", 0x2E3F7000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, RC }, { 0 }}, + +/* vsubadd a,b,limm 00101bbb001111110BBB111110AAAAAA. */ +{ "vsubadd", 0x283F0F80, 0xF8FF8FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, LIMM }, { 0 }}, + +/* vsubadd 0,limm,c 00101110001111110111CCCCCC111110. */ +{ "vsubadd", 0x2E3F703E, 0xFFFFF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, RC }, { 0 }}, + +/* vsubadd 0,b,limm 00101bbb001111110BBB111110111110. */ +{ "vsubadd", 0x283F0FBE, 0xF8FF8FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, LIMM }, { 0 }}, + +/* vsubadd<.cc> b,b,limm 00101bbb111111110BBB1111100QQQQQ. */ +{ "vsubadd", 0x28FF0F80, 0xF8FF8FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, LIMM }, { C_CC }}, + +/* vsubadd<.cc> 0,limm,c 00101110111111110111CCCCCC0QQQQQ. */ +{ "vsubadd", 0x2EFF7000, 0xFFFFF020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, RC }, { C_CC }}, + +/* vsubadd a,limm,u6 00101110011111110111uuuuuuAAAAAA. */ +{ "vsubadd", 0x2E7F7000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, UIMM6_20 }, { 0 }}, + +/* vsubadd 0,limm,u6 00101110011111110111uuuuuu111110. */ +{ "vsubadd", 0x2E7F703E, 0xFFFFF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, UIMM6_20 }, { 0 }}, + +/* vsubadd<.cc> 0,limm,u6 00101110111111110111uuuuuu1QQQQQ. */ +{ "vsubadd", 0x2EFF7020, 0xFFFFF020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, UIMM6_20 }, { C_CC }}, + +/* vsubadd 0,limm,s12 00101110101111110111ssssssSSSSSS. */ +{ "vsubadd", 0x2EBF7000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, SIMM12_20 }, { 0 }}, + +/* vsubadd a,limm,limm 00101110001111110111111110AAAAAA. */ +{ "vsubadd", 0x2E3F7F80, 0xFFFFFFC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, LIMMdup }, { 0 }}, + +/* vsubadd 0,limm,limm 00101110001111110111111110111110. */ +{ "vsubadd", 0x2E3F7FBE, 0xFFFFFFFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, LIMMdup }, { 0 }}, + +/* vsubadd<.cc> 0,limm,limm 001011101111111101111111100QQQQQ. */ +{ "vsubadd", 0x2EFF7F80, 0xFFFFFFE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, LIMMdup }, { C_CC }}, + +/* vsubadd2h a,b,c 00101bbb000101110BBBCCCCCCAAAAAA. */ +{ "vsubadd2h", 0x28170000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, RB, RC }, { 0 }}, + +/* vsubadd2h 0,b,c 00101bbb000101110BBBCCCCCC111110. */ +{ "vsubadd2h", 0x2817003E, 0xF8FF803F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, RB, RC }, { 0 }}, + +/* vsubadd2h<.cc> b,b,c 00101bbb110101110BBBCCCCCC0QQQQQ. */ +{ "vsubadd2h", 0x28D70000, 0xF8FF8020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, RC }, { C_CC }}, + +/* vsubadd2h a,b,u6 00101bbb010101110BBBuuuuuuAAAAAA. */ +{ "vsubadd2h", 0x28570000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, RB, UIMM6_20 }, { 0 }}, + +/* vsubadd2h 0,b,u6 00101bbb010101110BBBuuuuuu111110. */ +{ "vsubadd2h", 0x2857003E, 0xF8FF803F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, RB, UIMM6_20 }, { 0 }}, + +/* vsubadd2h<.cc> b,b,u6 00101bbb110101110BBBuuuuuu1QQQQQ. */ +{ "vsubadd2h", 0x28D70020, 0xF8FF8020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, UIMM6_20 }, { C_CC }}, + +/* vsubadd2h b,b,s12 00101bbb100101110BBBssssssSSSSSS. */ +{ "vsubadd2h", 0x28970000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, SIMM12_20 }, { 0 }}, + +/* vsubadd2h a,limm,c 00101110000101110111CCCCCCAAAAAA. */ +{ "vsubadd2h", 0x2E177000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, LIMM, RC }, { 0 }}, + +/* vsubadd2h a,b,limm 00101bbb000101110BBB111110AAAAAA. */ +{ "vsubadd2h", 0x28170F80, 0xF8FF8FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, RB, LIMM }, { 0 }}, + +/* vsubadd2h 0,limm,c 00101110000101110111CCCCCC111110. */ +{ "vsubadd2h", 0x2E17703E, 0xFFFFF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, RC }, { 0 }}, + +/* vsubadd2h 0,b,limm 00101bbb000101110BBB111110111110. */ +{ "vsubadd2h", 0x28170FBE, 0xF8FF8FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, RB, LIMM }, { 0 }}, + +/* vsubadd2h<.cc> b,b,limm 00101bbb110101110BBB1111100QQQQQ. */ +{ "vsubadd2h", 0x28D70F80, 0xF8FF8FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RB_CHK, RBdup, LIMM }, { C_CC }}, + +/* vsubadd2h<.cc> 0,limm,c 00101110110101110111CCCCCC0QQQQQ. */ +{ "vsubadd2h", 0x2ED77000, 0xFFFFF020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, RC }, { C_CC }}, + +/* vsubadd2h a,limm,u6 00101110010101110111uuuuuuAAAAAA. */ +{ "vsubadd2h", 0x2E577000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, LIMM, UIMM6_20 }, { 0 }}, + +/* vsubadd2h 0,limm,u6 00101110010101110111uuuuuu111110. */ +{ "vsubadd2h", 0x2E57703E, 0xFFFFF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, UIMM6_20 }, { 0 }}, + +/* vsubadd2h<.cc> 0,limm,u6 00101110110101110111uuuuuu1QQQQQ. */ +{ "vsubadd2h", 0x2ED77020, 0xFFFFF020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, UIMM6_20 }, { C_CC }}, + +/* vsubadd2h 0,limm,s12 00101110100101110111ssssssSSSSSS. */ +{ "vsubadd2h", 0x2E977000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, SIMM12_20 }, { 0 }}, + +/* vsubadd2h a,limm,limm 00101110000101110111111110AAAAAA. */ +{ "vsubadd2h", 0x2E177F80, 0xFFFFFFC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { RA_CHK, LIMM, LIMMdup }, { 0 }}, + +/* vsubadd2h 0,limm,limm 00101110000101110111111110111110. */ +{ "vsubadd2h", 0x2E177FBE, 0xFFFFFFFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, LIMMdup }, { 0 }}, + +/* vsubadd2h<.cc> 0,limm,limm 001011101101011101111111100QQQQQ. */ +{ "vsubadd2h", 0x2ED77F80, 0xFFFFFFE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY7E, { ZA, LIMM, LIMMdup }, { C_CC }}, + +/* vsubadd4h a,b,c 00101bbb001110110BBBCCCCCCAAAAAA. */ +{ "vsubadd4h", 0x283B0000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, RC }, { 0 }}, + +/* vsubadd4h 0,b,c 00101bbb001110110BBBCCCCCC111110. */ +{ "vsubadd4h", 0x283B003E, 0xF8FF803F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, RC }, { 0 }}, + +/* vsubadd4h<.cc> b,b,c 00101bbb111110110BBBCCCCCC0QQQQQ. */ +{ "vsubadd4h", 0x28FB0000, 0xF8FF8020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, RC }, { C_CC }}, + +/* vsubadd4h a,b,u6 00101bbb011110110BBBuuuuuuAAAAAA. */ +{ "vsubadd4h", 0x287B0000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, UIMM6_20 }, { 0 }}, + +/* vsubadd4h 0,b,u6 00101bbb011110110BBBuuuuuu111110. */ +{ "vsubadd4h", 0x287B003E, 0xF8FF803F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, UIMM6_20 }, { 0 }}, + +/* vsubadd4h<.cc> b,b,u6 00101bbb111110110BBBuuuuuu1QQQQQ. */ +{ "vsubadd4h", 0x28FB0020, 0xF8FF8020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, UIMM6_20 }, { C_CC }}, + +/* vsubadd4h b,b,s12 00101bbb101110110BBBssssssSSSSSS. */ +{ "vsubadd4h", 0x28BB0000, 0xF8FF8000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, SIMM12_20 }, { 0 }}, + +/* vsubadd4h a,limm,c 00101110001110110111CCCCCCAAAAAA. */ +{ "vsubadd4h", 0x2E3B7000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, RC }, { 0 }}, + +/* vsubadd4h a,b,limm 00101bbb001110110BBB111110AAAAAA. */ +{ "vsubadd4h", 0x283B0F80, 0xF8FF8FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, RB, LIMM }, { 0 }}, + +/* vsubadd4h 0,limm,c 00101110001110110111CCCCCC111110. */ +{ "vsubadd4h", 0x2E3B703E, 0xFFFFF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, RC }, { 0 }}, + +/* vsubadd4h 0,b,limm 00101bbb001110110BBB111110111110. */ +{ "vsubadd4h", 0x283B0FBE, 0xF8FF8FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, RB, LIMM }, { 0 }}, + +/* vsubadd4h<.cc> b,b,limm 00101bbb111110110BBB1111100QQQQQ. */ +{ "vsubadd4h", 0x28FB0F80, 0xF8FF8FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RB_CHK, RBdup, LIMM }, { C_CC }}, + +/* vsubadd4h<.cc> 0,limm,c 00101110111110110111CCCCCC0QQQQQ. */ +{ "vsubadd4h", 0x2EFB7000, 0xFFFFF020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, RC }, { C_CC }}, + +/* vsubadd4h a,limm,u6 00101110011110110111uuuuuuAAAAAA. */ +{ "vsubadd4h", 0x2E7B7000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, UIMM6_20 }, { 0 }}, + +/* vsubadd4h 0,limm,u6 00101110011110110111uuuuuu111110. */ +{ "vsubadd4h", 0x2E7B703E, 0xFFFFF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, UIMM6_20 }, { 0 }}, + +/* vsubadd4h<.cc> 0,limm,u6 00101110111110110111uuuuuu1QQQQQ. */ +{ "vsubadd4h", 0x2EFB7020, 0xFFFFF020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, UIMM6_20 }, { C_CC }}, + +/* vsubadd4h 0,limm,s12 00101110101110110111ssssssSSSSSS. */ +{ "vsubadd4h", 0x2EBB7000, 0xFFFFF000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, SIMM12_20 }, { 0 }}, + +/* vsubadd4h a,limm,limm 00101110001110110111111110AAAAAA. */ +{ "vsubadd4h", 0x2E3B7F80, 0xFFFFFFC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { RA_CHK, LIMM, LIMMdup }, { 0 }}, + +/* vsubadd4h 0,limm,limm 00101110001110110111111110111110. */ +{ "vsubadd4h", 0x2E3B7FBE, 0xFFFFFFFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, LIMMdup }, { 0 }}, + +/* vsubadd4h<.cc> 0,limm,limm 001011101111101101111111100QQQQQ. */ +{ "vsubadd4h", 0x2EFB7F80, 0xFFFFFFE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, MPY, MPY9E, { ZA, LIMM, LIMMdup }, { C_CC }}, + +/* wevt c 00100000001011110001CCCCCC111111. */ +{ "wevt", 0x202F103F, 0xFFFFF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, KERNEL, NONE, { RC }, { 0 }}, + +/* wevt 00100000011011110001000000111111. */ +{ "wevt", 0x206F103F, 0xFFFFFFFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, KERNEL, NONE, { 0 }, { 0 }}, + +/* wevt u6 00100000011011110001uuuuuu111111. */ +{ "wevt", 0x206F103F, 0xFFFFF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, KERNEL, NONE, { UIMM6_20 }, { 0 }}, + +/* wlfc c 00100001001011110001CCCCCC111111. */ +{ "wlfc", 0x212F103F, 0xFFFFF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, KERNEL, NONE, { RC }, { 0 }}, + +/* wlfc u6 00100001011011110001uuuuuu111111. */ +{ "wlfc", 0x216F103F, 0xFFFFF03F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, KERNEL, NONE, { UIMM6_20 }, { 0 }}, + +/* xbfu<.f> a,b,c 00100bbb00101101FBBBCCCCCCAAAAAA. */ +{ "xbfu", 0x202D0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT2, { RA, RB, RC }, { C_F }}, + +/* xbfu<.f> 0,b,c 00100bbb00101101FBBBCCCCCC111110. */ +{ "xbfu", 0x202D003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT2, { ZA, RB, RC }, { C_F }}, + +/* xbfu<.f><.cc> b,b,c 00100bbb11101101FBBBCCCCCC0QQQQQ. */ +{ "xbfu", 0x20ED0000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT2, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* xbfu<.f> a,b,u6 00100bbb01101101FBBBuuuuuuAAAAAA. */ +{ "xbfu", 0x206D0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT2, { RA, RB, UIMM6_20 }, { C_F }}, + +/* xbfu<.f> 0,b,u6 00100bbb01101101FBBBuuuuuu111110. */ +{ "xbfu", 0x206D003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT2, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* xbfu<.f><.cc> b,b,u6 00100bbb11101101FBBBuuuuuu1QQQQQ. */ +{ "xbfu", 0x20ED0020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT2, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* xbfu<.f> b,b,s12 00100bbb10101101FBBBssssssSSSSSS. */ +{ "xbfu", 0x20AD0000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT2, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* xbfu<.f> a,limm,c 0010011000101101F111CCCCCCAAAAAA. */ +{ "xbfu", 0x262D7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT2, { RA, LIMM, RC }, { C_F }}, + +/* xbfu<.f> a,b,limm 00100bbb00101101FBBB111110AAAAAA. */ +{ "xbfu", 0x202D0F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT2, { RA, RB, LIMM }, { C_F }}, + +/* xbfu<.f> 0,limm,c 0010011000101101F111CCCCCC111110. */ +{ "xbfu", 0x262D703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT2, { ZA, LIMM, RC }, { C_F }}, + +/* xbfu<.f> 0,b,limm 00100bbb00101101FBBB111110111110. */ +{ "xbfu", 0x202D0FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT2, { ZA, RB, LIMM }, { C_F }}, + +/* xbfu<.f><.cc> b,b,limm 00100bbb11101101FBBB1111100QQQQQ. */ +{ "xbfu", 0x20ED0F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT2, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* xbfu<.f><.cc> 0,limm,c 0010011011101101F111CCCCCC0QQQQQ. */ +{ "xbfu", 0x26ED7000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT2, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* xbfu<.f> a,limm,u6 0010011001101101F111uuuuuuAAAAAA. */ +{ "xbfu", 0x266D7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT2, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* xbfu<.f> 0,limm,u6 0010011001101101F111uuuuuu111110. */ +{ "xbfu", 0x266D703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT2, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* xbfu<.f><.cc> 0,limm,u6 0010011011101101F111uuuuuu1QQQQQ. */ +{ "xbfu", 0x26ED7020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT2, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* xbfu<.f> 0,limm,s12 0010011010101101F111ssssssSSSSSS. */ +{ "xbfu", 0x26AD7000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT2, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* xbfu<.f> a,limm,limm 0010011000101101F111111110AAAAAA. */ +{ "xbfu", 0x262D7F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT2, { RA, LIMM, LIMMdup }, { C_F }}, + +/* xbfu<.f> 0,limm,limm 0010011000101101F111111110111110. */ +{ "xbfu", 0x262D7FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT2, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* xbfu<.f><.cc> 0,limm,limm 0010011011101101F1111111100QQQQQ. */ +{ "xbfu", 0x26ED7F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, ARITH, SHFT2, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* xbful<.f> RA,RB,RC 01011bbb00101101FBBBccccccaaaaaa. */ +{ "xbful", 0x582D0000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* xbful<.f> 0,RB,RC 01011bbb00101101FBBBcccccc111110. */ +{ "xbful", 0x582D003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* xbful<.f><.cc> RB,RB,RC 01011bbb11101101FBBBcccccc0QQQQQ. */ +{ "xbful", 0x58ED0000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* xbful<.f> RA,RB,u6 01011bbb01101101FBBBuuuuuuaaaaaa. */ +{ "xbful", 0x586D0000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* xbful<.f> 0,RB,u6 01011bbb01101101FBBBuuuuuu111110. */ +{ "xbful", 0x586D003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* xbful<.f><.cc> RB,RB,u6 01011bbb11101101FBBBuuuuuu1QQQQQ. */ +{ "xbful", 0x58ED0020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* xbful<.f> RB,RB,s12 01011bbb10101101FBBBssssssSSSSSS. */ +{ "xbful", 0x58AD0000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* xbful<.f> RA,ximm,RC 0101110000101101F111ccccccaaaaaa. */ +{ "xbful", 0x5C2D7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* xbful<.f> RA,RB,ximm 01011bbb00101101FBBB111100aaaaaa. */ +{ "xbful", 0x582D0F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* xbful<.f> 0,ximm,RC 0101110000101101F111cccccc111110. */ +{ "xbful", 0x5C2D703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* xbful<.f> 0,RB,ximm 01011bbb00101101FBBB111100111110. */ +{ "xbful", 0x582D0F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* xbful<.f><.cc> 0,ximm,RC 0101110011101101F111cccccc0QQQQQ. */ +{ "xbful", 0x5CED7000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* xbful<.f><.cc> RB,RB,ximm 01011bbb11101101FBBB1111000QQQQQ. */ +{ "xbful", 0x58ED0F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* xbful<.f> RA,ximm,u6 0101110001101101F111uuuuuuaaaaaa. */ +{ "xbful", 0x5C6D7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* xbful<.f> 0,ximm,u6 0101110001101101F111uuuuuu111110. */ +{ "xbful", 0x5C6D703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* xbful<.f><.cc> 0,ximm,u6 0101110011101101F111uuuuuu1QQQQQ. */ +{ "xbful", 0x5CED7020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* xbful<.f> RA,limm,RC 0101111000101101F111ccccccaaaaaa. */ +{ "xbful", 0x5E2D7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* xbful<.f> RA,RB,limm 01011bbb00101101FBBB111110aaaaaa. */ +{ "xbful", 0x582D0F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* xbful<.f> 0,limm,RC 0101111000101101F111cccccc111110. */ +{ "xbful", 0x5E2D703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* xbful<.f> 0,RB,limm 01011bbb00101101FBBB111110111110. */ +{ "xbful", 0x582D0FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* xbful<.f><.cc> 0,limm,RC 0101111011101101F111cccccc0QQQQQ. */ +{ "xbful", 0x5EED7000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* xbful<.f><.cc> RB,RB,limm 01011bbb11101101FBBB1111100QQQQQ. */ +{ "xbful", 0x58ED0F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* xbful<.f> RA,limm,u6 0101111001101101F111uuuuuuaaaaaa. */ +{ "xbful", 0x5E6D7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* xbful<.f> 0,limm,u6 0101111001101101F111uuuuuu111110. */ +{ "xbful", 0x5E6D703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* xbful<.f><.cc> 0,limm,u6 0101111011101101F111uuuuuu1QQQQQ. */ +{ "xbful", 0x5EED7020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* xbful<.f> 0,ximm,s12 0101110010101101F111ssssssSSSSSS. */ +{ "xbful", 0x5CAD7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* xbful<.f> 0,limm,s12 0101111010101101F111ssssssSSSSSS. */ +{ "xbful", 0x5EAD7000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* xbful<.f> RA,ximm,ximm 0101110000101101F111111100aaaaaa. */ +{ "xbful", 0x5C2D7F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* xbful<.f> 0,ximm,ximm 0101110000101101F111111100111110. */ +{ "xbful", 0x5C2D7F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* xbful<.f><.cc> 0,ximm,ximm 0101110011101101F1111111000QQQQQ. */ +{ "xbful", 0x5CED7F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* xbful<.f> RA,limm,limm 0101111000101101F111111110aaaaaa. */ +{ "xbful", 0x5E2D7F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* xbful<.f> 0,limm,limm 0101111000101101F111111110111110. */ +{ "xbful", 0x5E2D7FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* xbful<.f><.cc> 0,limm,limm 0101111011101101F1111111100QQQQQ. */ +{ "xbful", 0x5EED7F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* xor<.f> a,b,c 00100bbb00000111FBBBCCCCCCAAAAAA. */ +{ "xor", 0x20070000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, RC }, { C_F }}, + +/* xor<.f> 0,b,c 00100bbb00000111FBBBCCCCCC111110. */ +{ "xor", 0x2007003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, RC }, { C_F }}, + +/* xor<.f><.cc> b,b,c 00100bbb11000111FBBBCCCCCC0QQQQQ. */ +{ "xor", 0x20C70000, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* xor<.f> a,b,u6 00100bbb01000111FBBBuuuuuuAAAAAA. */ +{ "xor", 0x20470000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* xor<.f> 0,b,u6 00100bbb01000111FBBBuuuuuu111110. */ +{ "xor", 0x2047003E, 0xF8FF003F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* xor<.f><.cc> b,b,u6 00100bbb11000111FBBBuuuuuu1QQQQQ. */ +{ "xor", 0x20C70020, 0xF8FF0020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* xor<.f> b,b,s12 00100bbb10000111FBBBssssssSSSSSS. */ +{ "xor", 0x20870000, 0xF8FF0000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* xor<.f> a,limm,c 0010011000000111F111CCCCCCAAAAAA. */ +{ "xor", 0x26077000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, RC }, { C_F }}, + +/* xor<.f> a,b,limm 00100bbb00000111FBBB111110AAAAAA. */ +{ "xor", 0x20070F80, 0xF8FF0FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, RB, LIMM }, { C_F }}, + +/* xor<.f> 0,limm,c 0010011000000111F111CCCCCC111110. */ +{ "xor", 0x2607703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* xor<.f> 0,b,limm 00100bbb00000111FBBB111110111110. */ +{ "xor", 0x20070FBE, 0xF8FF0FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* xor<.f><.cc> 0,limm,c 0010011011000111F111CCCCCC0QQQQQ. */ +{ "xor", 0x26C77000, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* xor<.f><.cc> b,b,limm 00100bbb11000111FBBB1111100QQQQQ. */ +{ "xor", 0x20C70F80, 0xF8FF0FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* xor<.f> a,limm,u6 0010011001000111F111uuuuuuAAAAAA. */ +{ "xor", 0x26477000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* xor<.f> 0,limm,u6 0010011001000111F111uuuuuu111110. */ +{ "xor", 0x2647703E, 0xFFFF703F,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* xor<.f><.cc> 0,limm,u6 0010011011000111F111uuuuuu1QQQQQ. */ +{ "xor", 0x26C77020, 0xFFFF7020,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* xor<.f> 0,limm,s12 0010011010000111F111ssssssSSSSSS. */ +{ "xor", 0x26877000, 0xFFFF7000,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* xor<.f> a,limm,limm 0010011000000111F111111110AAAAAA. */ +{ "xor", 0x26077F80, 0xFFFF7FC0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* xor<.f> 0,limm,limm 0010011000000111F111111110111110. */ +{ "xor", 0x26077FBE, 0xFFFF7FFF,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* xor<.f><.cc> 0,limm,limm 0010011011000111F1111111100QQQQQ. */ +{ "xor", 0x26C77F80, 0xFFFF7FE0,ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* xorl<.f> RA,RB,RC 01011bbb00000111FBBBccccccaaaaaa. */ +{ "xorl", 0x58070000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, RC }, { C_F }}, + +/* xorl<.f> 0,RB,RC 01011bbb00000111FBBBcccccc111110. */ +{ "xorl", 0x5807003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, RC }, { C_F }}, + +/* xorl<.f><.cc> RB,RB,RC 01011bbb11000111FBBBcccccc0QQQQQ. */ +{ "xorl", 0x58C70000, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, RC }, { C_F, C_CC }}, + +/* xorl<.f> RA,RB,u6 01011bbb01000111FBBBuuuuuuaaaaaa. */ +{ "xorl", 0x58470000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, UIMM6_20 }, { C_F }}, + +/* xorl<.f> 0,RB,u6 01011bbb01000111FBBBuuuuuu111110. */ +{ "xorl", 0x5847003E, 0xF8FF003F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, UIMM6_20 }, { C_F }}, + +/* xorl<.f><.cc> RB,RB,u6 01011bbb11000111FBBBuuuuuu1QQQQQ. */ +{ "xorl", 0x58C70020, 0xF8FF0020, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, UIMM6_20 }, { C_F, C_CC }}, + +/* xorl<.f> RB,RB,s12 01011bbb10000111FBBBssssssSSSSSS. */ +{ "xorl", 0x58870000, 0xF8FF0000, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, SIMM12_20 }, { C_F }}, + +/* xorl<.f> RA,ximm,RC 0101110000000111F111ccccccaaaaaa. */ +{ "xorl", 0x5C077000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, RC }, { C_F }}, + +/* xorl<.f> RA,RB,ximm 01011bbb00000111FBBB111100aaaaaa. */ +{ "xorl", 0x58070F00, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, XIMM }, { C_F }}, + +/* xorl<.f> 0,ximm,RC 0101110000000111F111cccccc111110. */ +{ "xorl", 0x5C07703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F }}, + +/* xorl<.f> 0,RB,ximm 01011bbb00000111FBBB111100111110. */ +{ "xorl", 0x58070F3E, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, XIMM }, { C_F }}, + +/* xorl<.f><.cc> 0,ximm,RC 0101110011000111F111cccccc0QQQQQ. */ +{ "xorl", 0x5CC77000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, RC }, { C_F, C_CC }}, + +/* xorl<.f><.cc> RB,RB,ximm 01011bbb11000111FBBB1111000QQQQQ. */ +{ "xorl", 0x58C70F00, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, XIMM }, { C_F, C_CC }}, + +/* xorl<.f> RA,ximm,u6 0101110001000111F111uuuuuuaaaaaa. */ +{ "xorl", 0x5C477000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, UIMM6_20 }, { C_F }}, + +/* xorl<.f> 0,ximm,u6 0101110001000111F111uuuuuu111110. */ +{ "xorl", 0x5C47703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F }}, + +/* xorl<.f><.cc> 0,ximm,u6 0101110011000111F111uuuuuu1QQQQQ. */ +{ "xorl", 0x5CC77020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* xorl<.f> RA,limm,RC 0101111000000111F111ccccccaaaaaa. */ +{ "xorl", 0x5E077000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, RC }, { C_F }}, + +/* xorl<.f> RA,RB,limm 01011bbb00000111FBBB111110aaaaaa. */ +{ "xorl", 0x58070F80, 0xF8FF0FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, RB, LIMM }, { C_F }}, + +/* xorl<.f> 0,limm,RC 0101111000000111F111cccccc111110. */ +{ "xorl", 0x5E07703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F }}, + +/* xorl<.f> 0,RB,limm 01011bbb00000111FBBB111110111110. */ +{ "xorl", 0x58070FBE, 0xF8FF0FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, RB, LIMM }, { C_F }}, + +/* xorl<.f><.cc> 0,limm,RC 0101111011000111F111cccccc0QQQQQ. */ +{ "xorl", 0x5EC77000, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, RC }, { C_F, C_CC }}, + +/* xorl<.f><.cc> RB,RB,limm 01011bbb11000111FBBB1111100QQQQQ. */ +{ "xorl", 0x58C70F80, 0xF8FF0FE0, ARC_OPCODE_ARC64, ARITH, NONE, { RB, RBdup, LIMM }, { C_F, C_CC }}, + +/* xorl<.f> RA,limm,u6 0101111001000111F111uuuuuuaaaaaa. */ +{ "xorl", 0x5E477000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, UIMM6_20 }, { C_F }}, + +/* xorl<.f> 0,limm,u6 0101111001000111F111uuuuuu111110. */ +{ "xorl", 0x5E47703E, 0xFFFF703F, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F }}, + +/* xorl<.f><.cc> 0,limm,u6 0101111011000111F111uuuuuu1QQQQQ. */ +{ "xorl", 0x5EC77020, 0xFFFF7020, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, UIMM6_20 }, { C_F, C_CC }}, + +/* xorl<.f> 0,ximm,s12 0101110010000111F111ssssssSSSSSS. */ +{ "xorl", 0x5C877000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, SIMM12_20 }, { C_F }}, + +/* xorl<.f> 0,limm,s12 0101111010000111F111ssssssSSSSSS. */ +{ "xorl", 0x5E877000, 0xFFFF7000, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, SIMM12_20 }, { C_F }}, + +/* xorl<.f> RA,ximm,ximm 0101110000000111F111111100aaaaaa. */ +{ "xorl", 0x5C077F00, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, XIMM, XIMMdup }, { C_F }}, + +/* xorl<.f> 0,ximm,ximm 0101110000000111F111111100111110. */ +{ "xorl", 0x5C077F3E, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F }}, + +/* xorl<.f><.cc> 0,ximm,ximm 0101110011000111F1111111000QQQQQ. */ +{ "xorl", 0x5CC77F00, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, XIMM, XIMMdup }, { C_F, C_CC }}, + +/* xorl<.f> RA,limm,limm 0101111000000111F111111110aaaaaa. */ +{ "xorl", 0x5E077F80, 0xFFFF7FC0, ARC_OPCODE_ARC64, ARITH, NONE, { RA, LIMM, LIMMdup }, { C_F }}, + +/* xorl<.f> 0,limm,limm 0101111000000111F111111110111110. */ +{ "xorl", 0x5E077FBE, 0xFFFF7FFF, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F }}, + +/* xorl<.f><.cc> 0,limm,limm 0101111011000111F1111111100QQQQQ. */ +{ "xorl", 0x5EC77F80, 0xFFFF7FE0, ARC_OPCODE_ARC64, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, + +/* xor_s b,b,c 01111bbbccc00111. */ +{ "xor_s", 0x00007807, 0x0000F81F, ARC_OPCODE_ARC32 | ARC_OPCODE_ARC64, LOGICAL, NONE, { RB_S, RB_Sdup, RC_S }, { 0 }}, + +/* vrep2hl b,c 00101bbb001011110BBBCCCCCC100010. */ +{ "vrep2hl", 0x282F0022, 0xF8FF803F, ARC_OPCODE_ARC32, MOVE, NONE, { RB_CHK, RC }, { 0 }}, + +/* vrep2hl 0,c 00101110001011110111CCCCCC100010. */ +{ "vrep2hl", 0x2E2F7022, 0xFFFFF03F, ARC_OPCODE_ARC32, MOVE, NONE, { ZA, RC }, { 0 }}, + +/* vrep2hl b,u6 00101bbb011011110BBBuuuuuu100010. */ +{ "vrep2hl", 0x286F0022, 0xF8FF803F, ARC_OPCODE_ARC32, MOVE, NONE, { RB_CHK, UIMM6_20 }, { 0 }}, + +/* vrep2hl 0,u6 00101110011011110111uuuuuu100010. */ +{ "vrep2hl", 0x2E6F7022, 0xFFFFF03F, ARC_OPCODE_ARC32, MOVE, NONE, { ZA, UIMM6_20 }, { 0 }}, + +/* vrep2hl b,limm 00101bbb001011110BBB111110100010. */ +{ "vrep2hl", 0x282F0FA2, 0xF8FF8FFF, ARC_OPCODE_ARC32, MOVE, NONE, { RB_CHK, LIMM }, { 0 }}, + +/* vrep2hl 0,limm 00101110001011110111111110100010. */ +{ "vrep2hl", 0x2E2F7FA2, 0xFFFFFFFF, ARC_OPCODE_ARC32, MOVE, NONE, { ZA, LIMM }, { 0 }}, + +/* vpack2hl a,b,c 00101bbb001010010BBBCCCCCCAAAAAA. */ +{ "vpack2hl", 0x28290000, 0xF8FF8000, ARC_OPCODE_ARC32, MOVE, NONE, { RA_CHK, RB, RC }, { 0 }}, + +/* vpack2hl 0,b,c 00101bbb001010010BBBCCCCCC111110. */ +{ "vpack2hl", 0x2829003E, 0xF8FF803F, ARC_OPCODE_ARC32, MOVE, NONE, { ZA, RB, RC }, { 0 }}, + +/* vpack2hl<.cc> b,b,c 00101bbb111010010BBBCCCCCC0QQQQQ. */ +{ "vpack2hl", 0x28E90000, 0xF8FF8020, ARC_OPCODE_ARC32, MOVE, NONE, { RB_CHK, RBdup, RC }, { C_CC }}, + +/* vpack2hl a,b,u6 00101bbb011010010BBBuuuuuuAAAAAA. */ +{ "vpack2hl", 0x28690000, 0xF8FF8000, ARC_OPCODE_ARC32, MOVE, NONE, { RA_CHK, RB, UIMM6_20 }, { 0 }}, + +/* vpack2hl 0,b,u6 00101bbb011010010BBBuuuuuu111110. */ +{ "vpack2hl", 0x2869003E, 0xF8FF803F, ARC_OPCODE_ARC32, MOVE, NONE, { ZA, RB, UIMM6_20 }, { 0 }}, + +/* vpack2hl<.cc> b,b,u6 00101bbb111010010BBBuuuuuu1QQQQQ. */ +{ "vpack2hl", 0x28E90020, 0xF8FF8020, ARC_OPCODE_ARC32, MOVE, NONE, { RB_CHK, RBdup, UIMM6_20 }, { C_CC }}, + +/* vpack2hl b,b,s12 00101bbb101010010BBBssssssSSSSSS. */ +{ "vpack2hl", 0x28A90000, 0xF8FF8000, ARC_OPCODE_ARC32, MOVE, NONE, { RB_CHK, RBdup, SIMM12_20 }, { 0 }}, + +/* vpack2hl a,limm,c 00101110001010010111CCCCCCAAAAAA. */ +{ "vpack2hl", 0x2E297000, 0xFFFFF000, ARC_OPCODE_ARC32, MOVE, NONE, { RA_CHK, LIMM, RC }, { 0 }}, + +/* vpack2hl a,b,limm 00101bbb001010010BBB111110AAAAAA. */ +{ "vpack2hl", 0x28290F80, 0xF8FF8FC0, ARC_OPCODE_ARC32, MOVE, NONE, { RA_CHK, RB, LIMM }, { 0 }}, + +/* vpack2hl 0,limm,c 00101110011010010111CCCCCC111110. */ +{ "vpack2hl", 0x2E69703E, 0xFFFFF03F, ARC_OPCODE_ARC32, MOVE, NONE, { ZA, LIMM, RC }, { 0 }}, + +/* vpack2hl 0,b,limm 00101bbb001010010BBB111110111110. */ +{ "vpack2hl", 0x28290FBE, 0xF8FF8FFF, ARC_OPCODE_ARC32, MOVE, NONE, { ZA, RB, LIMM }, { 0 }}, + +/* vpack2hl<.cc> b,b,limm 00101bbb111010010BBB1111100QQQQQ. */ +{ "vpack2hl", 0x28E90F80, 0xF8FF8FE0, ARC_OPCODE_ARC32, MOVE, NONE, { RB_CHK, RBdup, LIMM }, { C_CC }}, + +/* vpack2hl<.cc> 0,limm,c 00101110111010010111CCCCCC0QQQQQ. */ +{ "vpack2hl", 0x2EE97000, 0xFFFFF020, ARC_OPCODE_ARC32, MOVE, NONE, { ZA, LIMM, RC }, { C_CC }}, + +/* vpack2hl a,limm,u6 00101110011010010111uuuuuuAAAAAA. */ +{ "vpack2hl", 0x2E697000, 0xFFFFF000, ARC_OPCODE_ARC32, MOVE, NONE, { RA_CHK, LIMM, UIMM6_20 }, { 0 }}, + +/* vpack2hl 0,limm,u6 00101110011010010111uuuuuu111110. */ +{ "vpack2hl", 0x2E69703E, 0xFFFFF03F, ARC_OPCODE_ARC32, MOVE, NONE, { ZA, LIMM, UIMM6_20 }, { 0 }}, + +/* vpack2hl<.cc> 0,limm,u6 00101110111010010111uuuuuu1QQQQQ. */ +{ "vpack2hl", 0x2EE97020, 0xFFFFF020, ARC_OPCODE_ARC32, MOVE, NONE, { ZA, LIMM, UIMM6_20 }, { C_CC }}, + +/* vpack2hl 0,limm,s12 00101110101010010111ssssssSSSSSS. */ +{ "vpack2hl", 0x2EA97000, 0xFFFFF000, ARC_OPCODE_ARC32, MOVE, NONE, { ZA, LIMM, SIMM12_20 }, { 0 }}, + +/* vpack2hl a,limm,limm 00101110001010010111111110AAAAAA. */ +{ "vpack2hl", 0x2E297F80, 0xFFFFFFC0, ARC_OPCODE_ARC32, MOVE, NONE, { RA_CHK, LIMM, LIMMdup }, { 0 }}, + +/* vpack2hl 0,limm,limm 00101110001010010111111110111110. */ +{ "vpack2hl", 0x2E297FBE, 0xFFFFFFFF, ARC_OPCODE_ARC32, MOVE, NONE, { ZA, LIMM, LIMMdup }, { 0 }}, + +/* vpack2hl<.cc> 0,limm,limm 001011101110100101111111100QQQQQ. */ +{ "vpack2hl", 0x2EE97F80, 0xFFFFFFE0, ARC_OPCODE_ARC32, MOVE, NONE, { ZA, LIMM, LIMMdup }, { C_CC }}, diff --git a/opcodes/arcxx-opc.inc b/opcodes/arcxx-opc.inc new file mode 100644 index 000000000000..69e4e1c41ff1 --- /dev/null +++ b/opcodes/arcxx-opc.inc @@ -0,0 +1,3143 @@ +/* Opcode table for the ARC. + Copyright (C) 1994-2022 Free Software Foundation, Inc. + + Contributed by Claudiu Zissulescu (claziss@synopsys.com) + + This file is part of libopcodes. + + This library is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + It is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ + +#include "sysdep.h" +#include +#include "bfd.h" +#include "opcode/arc.h" +#include "opintl.h" +#include "libiberty.h" + +/* ARC NPS400 Support: The ARC NPS400 core is an ARC700 with some + custom instructions. All NPS400 features are built into all ARC + target builds as this reduces the chances that regressions might + creep in. */ + +/* Insert RA register into a 32-bit opcode, with checks. */ + +static unsigned long long +insert_ra_chk (unsigned long long insn, + long long value, + const char **errmsg) +{ + if (value == 60) + *errmsg = _("LP_COUNT register cannot be used as destination register"); + + return insn | (value & 0x3F); +} + +/* Insert RB register into a 32-bit opcode. */ + +static unsigned long long +insert_rb (unsigned long long insn, + long long value, + const char **errmsg ATTRIBUTE_UNUSED) +{ + return insn | ((value & 0x07) << 24) | (((value >> 3) & 0x07) << 12); +} + +/* Insert RB register into a push(d)l/pop(d)l instruction. */ + +static unsigned long long +insert_rbb (unsigned long long insn, + long long value, + const char **errmsg ATTRIBUTE_UNUSED) +{ + return insn | ((value & 0x07) << 8) | (((value >> 3) & 0x07) << 1); +} + +/* Insert RB register with checks. */ + +static unsigned long long +insert_rb_chk (unsigned long long insn, + long long value, + const char **errmsg) +{ + if (value == 60) + *errmsg = _("LP_COUNT register cannot be used as destination register"); + + return insn | ((value & 0x07) << 24) | (((value >> 3) & 0x07) << 12); +} + +/* Insert a floating point register into fs2 slot. */ + +static unsigned long long +insert_fs2 (unsigned long long insn, + long long value, + const char **errmsg ATTRIBUTE_UNUSED) +{ + return insn | ((value & 0x07) << 24) | (((value >> 3) & 0x03) << 12); +} + +/* Insert address writeback mode for 128-bit loads. */ + +static unsigned long long +insert_qq (unsigned long long insn, + long long value, + const char **errmsg ATTRIBUTE_UNUSED) +{ + return insn | ((value & 0x01) << 11) | ((value & 0x02) << (6-1)); +} + +static long long +extract_rb (unsigned long long insn, + bool *invalid) +{ + int value = (((insn >> 12) & 0x07) << 3) | ((insn >> 24) & 0x07); + + if (value == 0x3e && invalid) + *invalid = true; /* A limm operand, it should be extracted in a + different way. */ + + return value; +} + +static long long +extract_rbb (unsigned long long insn, + bool *invalid) +{ + int value = (((insn >> 1) & 0x07) << 3) | ((insn >> 8) & 0x07); + + if (value == 0x3e && invalid) + *invalid = true; /* A limm operand, it should be extracted in a + different way. */ + + return value; +} + +/* Extract the floating point register number from fs2 slot. */ + +static long long +extract_fs2 (unsigned long long insn, + bool *invalid ATTRIBUTE_UNUSED) +{ + long long value; + value = (((insn >> 12) & 0x03) << 3) | ((insn >> 24) & 0x07); + return value; +} + +/* Extract address writeback mode for 128-bit loads. */ + +static long long +extract_qq (unsigned long long insn, + bool * invalid ATTRIBUTE_UNUSED) +{ + long long value; + value = ((insn & 0x800) >> 11) | ((insn & 0x40) >> (6 - 1)); + return value; +} + +static unsigned long long +insert_rad (unsigned long long insn, + long long value, + const char **errmsg) +{ + if (value & 0x01) + *errmsg = _("cannot use odd number destination register"); + if (value == 60) + *errmsg = _("LP_COUNT register cannot be used as destination register"); + + return insn | (value & 0x3F); +} + +static unsigned long long +insert_rcd (unsigned long long insn, + long long value, + const char **errmsg) +{ + if (value & 0x01) + *errmsg = _("cannot use odd number source register"); + + return insn | ((value & 0x3F) << 6); +} + +static unsigned long long +insert_rbd (unsigned long long insn, + long long value, + const char **errmsg) +{ + if (value & 0x01) + *errmsg = _("cannot use odd number source register"); + if (value == 60) + *errmsg = _("LP_COUNT register cannot be used as destination register"); + + return insn | ((value & 0x07) << 24) | (((value >> 3) & 0x07) << 12); +} + +/* Dummy insert ZERO operand function. */ + +static unsigned long long +insert_za (unsigned long long insn, + long long value, + const char **errmsg) +{ + if (value) + *errmsg = _("operand is not zero"); + return insn; +} + +/* Insert Y-bit in bbit/br instructions. This function is called only + when solving fixups. */ + +static unsigned long long +insert_Ybit (unsigned long long insn, + long long value, + const char **errmsg ATTRIBUTE_UNUSED) +{ + if (value > 0) + insn |= 0x08; + + return insn; +} + +/* Insert Y-bit in bbit/br instructions. This function is called only + when solving fixups. */ + +static unsigned long long +insert_NYbit (unsigned long long insn, + long long value, + const char **errmsg ATTRIBUTE_UNUSED) +{ + if (value < 0) + insn |= 0x08; + + return insn; +} + +/* Insert H register into a 16-bit opcode. */ + +static unsigned long long +insert_rhv1 (unsigned long long insn, + long long value, + const char **errmsg ATTRIBUTE_UNUSED) +{ + return insn |= ((value & 0x07) << 5) | ((value >> 3) & 0x07); +} + +static long long +extract_rhv1 (unsigned long long insn, + bool *invalid ATTRIBUTE_UNUSED) +{ + int value = ((insn & 0x7) << 3) | ((insn >> 5) & 0x7); + + return value; +} + +/* Insert H register into a 16-bit opcode. */ + +static unsigned long long +insert_rhv2 (unsigned long long insn, + long long value, + const char **errmsg) +{ + if (value == 0x1E) + *errmsg = _("register R30 is a limm indicator"); + else if (value < 0 || value > 31) + *errmsg = _("register out of range"); + return insn |= ((value & 0x07) << 5) | ((value >> 3) & 0x03); +} + +static long long +extract_rhv2 (unsigned long long insn, + bool *invalid ATTRIBUTE_UNUSED) +{ + int value = ((insn >> 5) & 0x07) | ((insn & 0x03) << 3); + + return value; +} + +static unsigned long long +insert_r0 (unsigned long long insn, + long long value, + const char **errmsg) +{ + if (value != 0) + *errmsg = _("register must be R0"); + return insn; +} + +static long long +extract_r0 (unsigned long long insn ATTRIBUTE_UNUSED, + bool *invalid ATTRIBUTE_UNUSED) +{ + return 0; +} + + +static unsigned long long +insert_r1 (unsigned long long insn, + long long value, + const char **errmsg) +{ + if (value != 1) + *errmsg = _("register must be R1"); + return insn; +} + +static long long +extract_r1 (unsigned long long insn ATTRIBUTE_UNUSED, + bool* invalid ATTRIBUTE_UNUSED) +{ + return 1; +} + +static unsigned long long +insert_r2 (unsigned long long insn, + long long value, + const char **errmsg) +{ + if (value != 2) + *errmsg = _("register must be R2"); + return insn; +} + +static long long +extract_r2 (unsigned long long insn ATTRIBUTE_UNUSED, + bool *invalid ATTRIBUTE_UNUSED) +{ + return 2; +} + +static unsigned long long +insert_r3 (unsigned long long insn, + long long value, + const char **errmsg) +{ + if (value != 3) + *errmsg = _("register must be R3"); + return insn; +} + +static long long +extract_r3 (unsigned long long insn ATTRIBUTE_UNUSED, + bool *invalid ATTRIBUTE_UNUSED) +{ + return 3; +} + +static unsigned long long +insert_sp (unsigned long long insn, + long long value, + const char **errmsg) +{ + if (value != 28) + *errmsg = _("register must be SP"); + return insn; +} + +static long long +extract_sp (unsigned long long insn ATTRIBUTE_UNUSED, + bool *invalid ATTRIBUTE_UNUSED) +{ + return 28; +} + +static unsigned long long +insert_gp (unsigned long long insn, + long long value, + const char **errmsg) +{ + if (value != 26 + && value != 30) + *errmsg = _("register must be GP"); + return insn; +} + +static long long +extract_gp (unsigned long long insn ATTRIBUTE_UNUSED, + bool *invalid ATTRIBUTE_UNUSED) +{ + return 26; +} + +static unsigned long long +insert_pcl (unsigned long long insn, + long long value, + const char **errmsg) +{ + if (value != 63) + *errmsg = _("register must be PCL"); + return insn; +} + +static long long +extract_pcl (unsigned long long insn ATTRIBUTE_UNUSED, + bool *invalid ATTRIBUTE_UNUSED) +{ + return 63; +} + +static unsigned long long +insert_blink (unsigned long long insn, + long long value, + const char **errmsg) +{ + if (value != 31) + *errmsg = _("register must be BLINK"); + return insn; +} + +static long long +extract_blink (unsigned long long insn ATTRIBUTE_UNUSED, + bool *invalid ATTRIBUTE_UNUSED) +{ + return 31; +} + +static unsigned long long +insert_ilink1 (unsigned long long insn, + long long value, + const char **errmsg) +{ + if (value != 29) + *errmsg = _("register must be ILINK1"); + return insn; +} + +static long long +extract_ilink1 (unsigned long long insn ATTRIBUTE_UNUSED, + bool *invalid ATTRIBUTE_UNUSED) +{ + return 29; +} + +static unsigned long long +insert_ilink2 (unsigned long long insn, + long long value, + const char **errmsg) +{ + if (value != 30) + *errmsg = _("register must be ILINK2"); + return insn; +} + +static long long +extract_ilink2 (unsigned long long insn ATTRIBUTE_UNUSED, + bool *invalid ATTRIBUTE_UNUSED) +{ + return 30; +} + +static unsigned long long +insert_ras (unsigned long long insn, + long long value, + const char **errmsg) +{ + switch (value) + { + case 0: + case 1: + case 2: + case 3: + insn |= value; + break; + case 12: + case 13: + case 14: + case 15: + insn |= (value - 8); + break; + default: + *errmsg = _("register must be either r0-r3 or r12-r15"); + break; + } + return insn; +} + +static long long +extract_ras (unsigned long long insn, + bool *invalid ATTRIBUTE_UNUSED) +{ + int value = insn & 0x07; + + if (value > 3) + return (value + 8); + else + return value; +} + +static unsigned long long +insert_rbs (unsigned long long insn, + long long value, + const char **errmsg) +{ + switch (value) + { + case 0: + case 1: + case 2: + case 3: + insn |= value << 8; + break; + case 12: + case 13: + case 14: + case 15: + insn |= ((value - 8)) << 8; + break; + default: + *errmsg = _("register must be either r0-r3 or r12-r15"); + break; + } + return insn; +} + +static long long +extract_rbs (unsigned long long insn, + bool *invalid ATTRIBUTE_UNUSED) +{ + int value = (insn >> 8) & 0x07; + + if (value > 3) + return (value + 8); + else + return value; +} + +static unsigned long long +insert_rcs (unsigned long long insn, + long long value, + const char **errmsg) +{ + switch (value) + { + case 0: + case 1: + case 2: + case 3: + insn |= value << 5; + break; + case 12: + case 13: + case 14: + case 15: + insn |= ((value - 8)) << 5; + break; + default: + *errmsg = _("register must be either r0-r3 or r12-r15"); + break; + } + return insn; +} + +static long long +extract_rcs (unsigned long long insn, + bool *invalid ATTRIBUTE_UNUSED) +{ + int value = (insn >> 5) & 0x07; + + if (value > 3) + return (value + 8); + else + return value; +} + +static unsigned long long +insert_simm3s (unsigned long long insn, + long long value, + const char **errmsg) +{ + int tmp = 0; + switch (value) + { + case -1: + tmp = 0x07; + break; + case 0: + tmp = 0x00; + break; + case 1: + tmp = 0x01; + break; + case 2: + tmp = 0x02; + break; + case 3: + tmp = 0x03; + break; + case 4: + tmp = 0x04; + break; + case 5: + tmp = 0x05; + break; + case 6: + tmp = 0x06; + break; + default: + *errmsg = _("accepted values are from -1 to 6"); + break; + } + + insn |= tmp << 8; + return insn; +} + +static long long +extract_simm3s (unsigned long long insn, + bool *invalid ATTRIBUTE_UNUSED) +{ + int value = (insn >> 8) & 0x07; + + if (value == 7) + return -1; + else + return value; +} + +static unsigned long long +insert_rrange (unsigned long long insn, + long long value, + const char **errmsg) +{ + int reg1 = (value >> 16) & 0xFFFF; + int reg2 = value & 0xFFFF; + + if (reg1 != 13) + *errmsg = _("first register of the range should be r13"); + else if (reg2 < 13 || reg2 > 26) + *errmsg = _("last register of the range doesn't fit"); + else + insn |= ((reg2 - 12) & 0x0F) << 1; + return insn; +} + +static long long +extract_rrange (unsigned long long insn, + bool *invalid ATTRIBUTE_UNUSED) +{ + return (insn >> 1) & 0x0F; +} + +static unsigned long long +insert_r13el (unsigned long long insn, + long long int value, + const char **errmsg) +{ + if (value != 13) + { + *errmsg = _("invalid register number, should be fp"); + return insn; + } + + insn |= 0x02; + return insn; +} + +static unsigned long long +insert_fpel (unsigned long long insn, + long long value, + const char **errmsg) +{ + if (value != 27) + { + *errmsg = _("invalid register number, should be fp"); + return insn; + } + + insn |= 0x0100; + return insn; +} + +static long long +extract_fpel (unsigned long long insn, + bool *invalid ATTRIBUTE_UNUSED) +{ + return (insn & 0x0100) ? 27 : -1; +} + +static unsigned long long +insert_blinkel (unsigned long long insn, + long long value, + const char **errmsg) +{ + if (value != 31) + { + *errmsg = _("invalid register number, should be blink"); + return insn; + } + + insn |= 0x0200; + return insn; +} + +static long long +extract_blinkel (unsigned long long insn, + bool *invalid ATTRIBUTE_UNUSED) +{ + return (insn & 0x0200) ? 31 : -1; +} + +static unsigned long long +insert_pclel (unsigned long long insn, + long long value, + const char **errmsg) +{ + if (value != 63) + { + *errmsg = _("invalid register number, should be pcl"); + return insn; + } + + insn |= 0x0400; + return insn; +} + +static long long +extract_pclel (unsigned long long insn, + bool *invalid ATTRIBUTE_UNUSED) +{ + return (insn & 0x0400) ? 63 : -1; +} + +#define INSERT_W6 + +/* mask = 00000000000000000000111111000000 + insn = 00011bbb000000000BBBwwwwwwDaaZZ1. */ + +static unsigned long long +insert_w6 (unsigned long long insn, + long long value, + const char **errmsg ATTRIBUTE_UNUSED) +{ + insn |= ((value >> 0) & 0x003f) << 6; + + return insn; +} + +#define EXTRACT_W6 + +/* mask = 00000000000000000000111111000000. */ + +static long long +extract_w6 (unsigned long long insn, + bool *invalid ATTRIBUTE_UNUSED) +{ + int value = 0; + + value |= ((insn >> 6) & 0x003f) << 0; + + /* Extend the sign. */ + int signbit = 1 << 5; + value = (value ^ signbit) - signbit; + + return value; +} + +#define INSERT_G_S + +/* mask = 0000011100022000 + insn = 01000ggghhhGG0HH. */ + +static unsigned long long +insert_g_s (unsigned long long insn, + long long value, + const char **errmsg ATTRIBUTE_UNUSED) +{ + insn |= ((value >> 0) & 0x0007) << 8; + insn |= ((value >> 3) & 0x0003) << 3; + + return insn; +} + +#define EXTRACT_G_S + +/* mask = 0000011100022000. */ + +static long long +extract_g_s (unsigned long long insn, + bool *invalid ATTRIBUTE_UNUSED) +{ + int value = 0; + int signbit = 1 << (6 - 1); + + value |= ((insn >> 8) & 0x0007) << 0; + value |= ((insn >> 3) & 0x0003) << 3; + + /* Extend the sign. */ + value = (value ^ signbit) - signbit; + + return value; +} + +/* ARC NPS400 Support: See comment near head of file. */ +#define MAKE_3BIT_REG_INSERT_EXTRACT_FUNCS(NAME,OFFSET) \ +static unsigned long long \ + insert_nps_3bit_reg_at_##OFFSET##_##NAME \ + (unsigned long long insn, \ + long long value, \ + const char **errmsg) \ +{ \ + switch (value) \ + { \ + case 0: \ + case 1: \ + case 2: \ + case 3: \ + insn |= value << (OFFSET); \ + break; \ + case 12: \ + case 13: \ + case 14: \ + case 15: \ + insn |= (value - 8) << (OFFSET); \ + break; \ + default: \ + *errmsg = _("register must be either r0-r3 or r12-r15"); \ + break; \ + } \ + return insn; \ +} \ + \ +static long long \ +extract_nps_3bit_reg_at_##OFFSET##_##NAME \ + (unsigned long long insn, \ + bool *invalid ATTRIBUTE_UNUSED) \ +{ \ + int value = (insn >> (OFFSET)) & 0x07; \ + if (value > 3) \ + value += 8; \ + return value; \ +} \ + +MAKE_3BIT_REG_INSERT_EXTRACT_FUNCS(dst,8) +MAKE_3BIT_REG_INSERT_EXTRACT_FUNCS(dst,24) +MAKE_3BIT_REG_INSERT_EXTRACT_FUNCS(dst,40) +MAKE_3BIT_REG_INSERT_EXTRACT_FUNCS(dst,56) + +MAKE_3BIT_REG_INSERT_EXTRACT_FUNCS(src2,5) +MAKE_3BIT_REG_INSERT_EXTRACT_FUNCS(src2,21) +MAKE_3BIT_REG_INSERT_EXTRACT_FUNCS(src2,37) +MAKE_3BIT_REG_INSERT_EXTRACT_FUNCS(src2,53) + +static unsigned long long +insert_nps_bitop_size_2b (unsigned long long insn, + long long value, + const char **errmsg) +{ + switch (value) + { + case 1: + value = 0; + break; + case 2: + value = 1; + break; + case 4: + value = 2; + break; + case 8: + value = 3; + break; + default: + value = 0; + *errmsg = _("invalid size, should be 1, 2, 4, or 8"); + break; + } + + insn |= value << 10; + return insn; +} + +static long long +extract_nps_bitop_size_2b (unsigned long long insn, + bool *invalid ATTRIBUTE_UNUSED) +{ + return 1 << ((insn >> 10) & 0x3); +} + +static unsigned long long +insert_nps_bitop_uimm8 (unsigned long long insn, + long long value, + const char **errmsg ATTRIBUTE_UNUSED) +{ + insn |= ((value >> 5) & 7) << 12; + insn |= (value & 0x1f); + return insn; +} + +static long long +extract_nps_bitop_uimm8 (unsigned long long insn, + bool *invalid ATTRIBUTE_UNUSED) +{ + return (((insn >> 12) & 0x7) << 5) | (insn & 0x1f); +} + +static unsigned long long +insert_nps_rflt_uimm6 (unsigned long long insn, + long long value, + const char **errmsg) +{ + switch (value) + { + case 1: + case 2: + case 4: + break; + + default: + *errmsg = _("invalid immediate, must be 1, 2, or 4"); + value = 0; + } + + insn |= (value << 6); + return insn; +} + +static long long +extract_nps_rflt_uimm6 (unsigned long long insn, + bool *invalid ATTRIBUTE_UNUSED) +{ + return (insn >> 6) & 0x3f; +} + +static unsigned long long +insert_nps_dst_pos_and_size (unsigned long long insn, + long long value, + const char **errmsg ATTRIBUTE_UNUSED) +{ + insn |= ((value & 0x1f) | (((32 - value - 1) & 0x1f) << 10)); + return insn; +} + +static long long +extract_nps_dst_pos_and_size (unsigned long long insn, + bool *invalid ATTRIBUTE_UNUSED) +{ + return (insn & 0x1f); +} + +static unsigned long long +insert_nps_cmem_uimm16 (unsigned long long insn, + long long value, + const char **errmsg) +{ + int top = (value >> 16) & 0xffff; + + if (top != 0x0 && top != NPS_CMEM_HIGH_VALUE) + *errmsg = _("invalid value for CMEM ld/st immediate"); + insn |= (value & 0xffff); + return insn; +} + +static long long +extract_nps_cmem_uimm16 (unsigned long long insn, + bool *invalid ATTRIBUTE_UNUSED) +{ + return (NPS_CMEM_HIGH_VALUE << 16) | (insn & 0xffff); +} + +static unsigned long long +insert_nps_imm_offset (unsigned long long insn, + long long value, + const char **errmsg) +{ + switch (value) + { + case 0: + case 16: + case 32: + case 48: + case 64: + value = value >> 4; + break; + default: + *errmsg = _("invalid position, should be 0, 16, 32, 48 or 64."); + value = 0; + } + insn |= (value << 10); + return insn; +} + +static long long +extract_nps_imm_offset (unsigned long long insn, + bool *invalid ATTRIBUTE_UNUSED) +{ + return ((insn >> 10) & 0x7) * 16; +} + +static unsigned long long +insert_nps_imm_entry (unsigned long long insn, + long long value, + const char **errmsg) +{ + switch (value) + { + case 16: + value = 0; + break; + case 32: + value = 1; + break; + case 64: + value = 2; + break; + case 128: + value = 3; + break; + default: + *errmsg = _("invalid position, should be 16, 32, 64 or 128."); + value = 0; + } + insn |= (value << 2); + return insn; +} + +static long long +extract_nps_imm_entry (unsigned long long insn, + bool *invalid ATTRIBUTE_UNUSED) +{ + int imm_entry = ((insn >> 2) & 0x7); + return (1 << (imm_entry + 4)); +} + +static unsigned long long +insert_nps_size_16bit (unsigned long long insn, + long long value, + const char **errmsg) +{ + if ((value < 1) || (value > 64)) + { + *errmsg = _("invalid size value must be on range 1-64."); + value = 0; + } + value = value & 0x3f; + insn |= (value << 6); + return insn; +} + +static long long +extract_nps_size_16bit (unsigned long long insn, + bool *invalid ATTRIBUTE_UNUSED) +{ + return ((insn & 0xfc0) >> 6) ? ((insn & 0xfc0) >> 6) : 64; +} + + +#define MAKE_SRC_POS_INSERT_EXTRACT_FUNCS(NAME,SHIFT) \ + static unsigned long long \ + insert_nps_##NAME##_pos (unsigned long long insn, \ + long long value, \ + const char **errmsg) \ +{ \ + switch (value) \ + { \ + case 0: \ + case 8: \ + case 16: \ + case 24: \ + value = value / 8; \ + break; \ + default: \ + *errmsg = _("invalid position, should be 0, 8, 16, or 24"); \ + value = 0; \ + } \ + insn |= (value << SHIFT); \ + return insn; \ +} \ + \ + static long long \ + extract_nps_##NAME##_pos (unsigned long long insn, \ + bool *invalid ATTRIBUTE_UNUSED) \ + { \ + return ((insn >> SHIFT) & 0x3) * 8; \ + } + +MAKE_SRC_POS_INSERT_EXTRACT_FUNCS (src2, 12) +MAKE_SRC_POS_INSERT_EXTRACT_FUNCS (src1, 10) + +#define MAKE_BIAS_INSERT_EXTRACT_FUNCS(NAME,LOWER,UPPER,BITS,BIAS,SHIFT) \ +static unsigned long long \ +insert_nps_##NAME (unsigned long long insn, \ + long long value, \ + const char **errmsg) \ +{ \ + if (value < LOWER || value > UPPER) \ + { \ + *errmsg = _("invalid size, value must be " \ + #LOWER " to " #UPPER "."); \ + return insn; \ + } \ + value -= BIAS; \ + insn |= (value << SHIFT); \ + return insn; \ +} \ + \ +static long long \ +extract_nps_##NAME (unsigned long long insn, \ + bool *invalid ATTRIBUTE_UNUSED) \ +{ \ + return ((insn >> SHIFT) & ((1 << BITS) - 1)) + BIAS; \ +} + +MAKE_BIAS_INSERT_EXTRACT_FUNCS (addb_size,2,32,5,1,5) +MAKE_BIAS_INSERT_EXTRACT_FUNCS (andb_size,1,32,5,1,5) +MAKE_BIAS_INSERT_EXTRACT_FUNCS (fxorb_size,8,32,5,8,5) +MAKE_BIAS_INSERT_EXTRACT_FUNCS (wxorb_size,16,32,5,16,5) +MAKE_BIAS_INSERT_EXTRACT_FUNCS (bitop_size,1,32,5,1,10) +MAKE_BIAS_INSERT_EXTRACT_FUNCS (qcmp_size,1,8,3,1,9) +MAKE_BIAS_INSERT_EXTRACT_FUNCS (bitop1_size,1,32,5,1,20) +MAKE_BIAS_INSERT_EXTRACT_FUNCS (bitop2_size,1,32,5,1,25) +MAKE_BIAS_INSERT_EXTRACT_FUNCS (hash_width,1,32,5,1,6) +MAKE_BIAS_INSERT_EXTRACT_FUNCS (hash_len,1,8,3,1,2) +MAKE_BIAS_INSERT_EXTRACT_FUNCS (index3,4,7,2,4,0) + +static long long +extract_nps_qcmp_m3 (unsigned long long insn, + bool *invalid) +{ + int m3 = (insn >> 5) & 0xf; + if (m3 == 0xf) + *invalid = true; + return m3; +} + +static long long +extract_nps_qcmp_m2 (unsigned long long insn, + bool *invalid) +{ + bool tmp_invalid = false; + int m2 = (insn >> 15) & 0x1; + int m3 = extract_nps_qcmp_m3 (insn, &tmp_invalid); + + if (m2 == 0 && m3 == 0xf) + *invalid = true; + return m2; +} + +static long long +extract_nps_qcmp_m1 (unsigned long long insn, + bool *invalid) +{ + bool tmp_invalid = false; + int m1 = (insn >> 14) & 0x1; + int m2 = extract_nps_qcmp_m2 (insn, &tmp_invalid); + int m3 = extract_nps_qcmp_m3 (insn, &tmp_invalid); + + if (m1 == 0 && m2 == 0 && m3 == 0xf) + *invalid = true; + return m1; +} + +static unsigned long long +insert_nps_calc_entry_size (unsigned long long insn, + long long value, + const char **errmsg) +{ + unsigned pwr; + + if (value < 1 || value > 256) + { + *errmsg = _("value out of range 1 - 256"); + return 0; + } + + for (pwr = 0; (value & 1) == 0; value >>= 1) + ++pwr; + + if (value != 1) + { + *errmsg = _("value must be power of 2"); + return 0; + } + + return insn | (pwr << 8); +} + +static long long +extract_nps_calc_entry_size (unsigned long long insn, + bool *invalid ATTRIBUTE_UNUSED) +{ + unsigned entry_size = (insn >> 8) & 0xf; + return 1 << entry_size; +} + +static unsigned long long +insert_nps_bitop_mod4 (unsigned long long insn, + long long value, + const char **errmsg ATTRIBUTE_UNUSED) +{ + return insn | ((value & 0x2) << 30) | ((value & 0x1) << 47); +} + +static long long +extract_nps_bitop_mod4 (unsigned long long insn, + bool *invalid ATTRIBUTE_UNUSED) +{ + return ((insn >> 30) & 0x2) | ((insn >> 47) & 0x1); +} + +static unsigned long long +insert_nps_bitop_dst_pos3_pos4 (unsigned long long insn, + long long value, + const char **errmsg ATTRIBUTE_UNUSED) +{ + return insn | (value << 42) | (value << 37); +} + +static long long +extract_nps_bitop_dst_pos3_pos4 (unsigned long long insn, + bool *invalid) +{ + if (((insn >> 42) & 0x1f) != ((insn >> 37) & 0x1f)) + *invalid = true; + return ((insn >> 37) & 0x1f); +} + +static unsigned long long +insert_nps_bitop_ins_ext (unsigned long long insn, + long long value, + const char **errmsg) +{ + if (value < 0 || value > 28) + *errmsg = _("value must be in the range 0 to 28"); + return insn | (value << 20); +} + +static long long +extract_nps_bitop_ins_ext (unsigned long long insn, + bool *invalid) +{ + int value = (insn >> 20) & 0x1f; + + if (value > 28) + *invalid = true; + return value; +} + +#define MAKE_1BASED_INSERT_EXTRACT_FUNCS(NAME,SHIFT,UPPER,BITS) \ +static unsigned long long \ +insert_nps_##NAME (unsigned long long insn, \ + long long value, \ + const char **errmsg) \ +{ \ + if (value < 1 || value > UPPER) \ + *errmsg = _("value must be in the range 1 to " #UPPER); \ + if (value == UPPER) \ + value = 0; \ + return insn | (value << SHIFT); \ +} \ + \ +static long long \ +extract_nps_##NAME (unsigned long long insn, \ + bool *invalid ATTRIBUTE_UNUSED) \ +{ \ + int value = (insn >> SHIFT) & ((1 << BITS) - 1); \ + if (value == 0) \ + value = UPPER; \ + return value; \ +} + +MAKE_1BASED_INSERT_EXTRACT_FUNCS (field_size, 6, 8, 3) +MAKE_1BASED_INSERT_EXTRACT_FUNCS (shift_factor, 9, 8, 3) +MAKE_1BASED_INSERT_EXTRACT_FUNCS (bits_to_scramble, 12, 8, 3) +MAKE_1BASED_INSERT_EXTRACT_FUNCS (bdlen_max_len, 5, 256, 8) +MAKE_1BASED_INSERT_EXTRACT_FUNCS (bd_num_buff, 6, 8, 3) +MAKE_1BASED_INSERT_EXTRACT_FUNCS (pmu_num_job, 6, 4, 2) +MAKE_1BASED_INSERT_EXTRACT_FUNCS (proto_size, 16, 64, 6) + +static unsigned long long +insert_nps_min_hofs (unsigned long long insn, + long long value, + const char **errmsg) +{ + if (value < 0 || value > 240) + *errmsg = _("value must be in the range 0 to 240"); + if ((value % 16) != 0) + *errmsg = _("value must be a multiple of 16"); + value = value / 16; + return insn | (value << 6); +} + +static long long +extract_nps_min_hofs (unsigned long long insn, + bool *invalid ATTRIBUTE_UNUSED) +{ + int value = (insn >> 6) & 0xF; + return value * 16; +} + +#define MAKE_INSERT_NPS_ADDRTYPE(NAME, VALUE) \ + static unsigned long long \ +insert_nps_##NAME (unsigned long long insn, \ + long long value, \ + const char **errmsg) \ +{ \ + if (value != ARC_NPS400_ADDRTYPE_##VALUE) \ + *errmsg = _("invalid address type for operand"); \ + return insn; \ +} \ + \ +static long long \ +extract_nps_##NAME (unsigned long long insn ATTRIBUTE_UNUSED, \ + bool *invalid ATTRIBUTE_UNUSED) \ +{ \ + return ARC_NPS400_ADDRTYPE_##VALUE; \ +} + +MAKE_INSERT_NPS_ADDRTYPE (bd, BD) +MAKE_INSERT_NPS_ADDRTYPE (jid, JID) +MAKE_INSERT_NPS_ADDRTYPE (lbd, LBD) +MAKE_INSERT_NPS_ADDRTYPE (mbd, MBD) +MAKE_INSERT_NPS_ADDRTYPE (sd, SD) +MAKE_INSERT_NPS_ADDRTYPE (sm, SM) +MAKE_INSERT_NPS_ADDRTYPE (xa, XA) +MAKE_INSERT_NPS_ADDRTYPE (xd, XD) +MAKE_INSERT_NPS_ADDRTYPE (cd, CD) +MAKE_INSERT_NPS_ADDRTYPE (cbd, CBD) +MAKE_INSERT_NPS_ADDRTYPE (cjid, CJID) +MAKE_INSERT_NPS_ADDRTYPE (clbd, CLBD) +MAKE_INSERT_NPS_ADDRTYPE (cm, CM) +MAKE_INSERT_NPS_ADDRTYPE (csd, CSD) +MAKE_INSERT_NPS_ADDRTYPE (cxa, CXA) +MAKE_INSERT_NPS_ADDRTYPE (cxd, CXD) + +static unsigned long long +insert_nps_rbdouble_64 (unsigned long long insn, + long long value, + const char **errmsg) +{ + if (value < 0 || value > 31) + *errmsg = _("value must be in the range 0 to 31"); + return insn | (value << 43) | (value << 48); +} + + +static long long +extract_nps_rbdouble_64 (unsigned long long insn, + bool *invalid) +{ + int value1 = (insn >> 43) & 0x1F; + int value2 = (insn >> 48) & 0x1F; + + if (value1 != value2) + *invalid = true; + + return value1; +} + +static unsigned long long +insert_nps_misc_imm_offset (unsigned long long insn, + long long value, + const char **errmsg) +{ + if (value & 0x3) + { + *errmsg = _("invalid position, should be one of: 0,4,8,...124."); + value = 0; + } + insn |= (value << 6); + return insn; +} + +static long long int +extract_nps_misc_imm_offset (unsigned long long insn, + bool *invalid ATTRIBUTE_UNUSED) +{ + return ((insn >> 8) & 0x1f) * 4; +} + +static long long int +extract_uimm12_20 (unsigned long long insn ATTRIBUTE_UNUSED, + bool *invalid ATTRIBUTE_UNUSED) +{ + int value = 0; + + value |= ((insn >> 6) & 0x003f) << 0; + value |= ((insn >> 0) & 0x003f) << 6; + + return value; +} + +/* Include the generic extract/insert functions. Order is important + as some of the functions present in the .h may be disabled via + defines. */ +#include "arc-fxi.h" + +/* The flag operands table. + + The format of the table is + NAME CODE BITS SHIFT FAVAIL. */ +const struct arc_flag_operand arc_flag_operands[] = +{ +#define F_NULL 0 + { 0, 0, 0, 0, 0}, +#define F_ALWAYS (F_NULL + 1) + { "al", 0, 0, 0, 0 }, +#define F_RA (F_ALWAYS + 1) + { "ra", 0, 0, 0, 0 }, +#define F_EQUAL (F_RA + 1) + { "eq", 1, 5, 0, 1 }, +#define F_ZERO (F_EQUAL + 1) + { "z", 1, 5, 0, 0 }, +#define F_NOTEQUAL (F_ZERO + 1) + { "ne", 2, 5, 0, 1 }, +#define F_NOTZERO (F_NOTEQUAL + 1) + { "nz", 2, 5, 0, 0 }, +#define F_POZITIVE (F_NOTZERO + 1) + { "p", 3, 5, 0, 1 }, +#define F_PL (F_POZITIVE + 1) + { "pl", 3, 5, 0, 0 }, +#define F_NEGATIVE (F_PL + 1) + { "n", 4, 5, 0, 1 }, +#define F_MINUS (F_NEGATIVE + 1) + { "mi", 4, 5, 0, 0 }, +#define F_CARRY (F_MINUS + 1) + { "c", 5, 5, 0, 1 }, +#define F_CARRYSET (F_CARRY + 1) + { "cs", 5, 5, 0, 0 }, +#define F_LOWER (F_CARRYSET + 1) + { "lo", 5, 5, 0, 0 }, +#define F_CARRYCLR (F_LOWER + 1) + { "cc", 6, 5, 0, 0 }, +#define F_NOTCARRY (F_CARRYCLR + 1) + { "nc", 6, 5, 0, 1 }, +#define F_HIGHER (F_NOTCARRY + 1) + { "hs", 6, 5, 0, 0 }, +#define F_OVERFLOWSET (F_HIGHER + 1) + { "vs", 7, 5, 0, 0 }, +#define F_OVERFLOW (F_OVERFLOWSET + 1) + { "v", 7, 5, 0, 1 }, +#define F_NOTOVERFLOW (F_OVERFLOW + 1) + { "nv", 8, 5, 0, 1 }, +#define F_OVERFLOWCLR (F_NOTOVERFLOW + 1) + { "vc", 8, 5, 0, 0 }, +#define F_GT (F_OVERFLOWCLR + 1) + { "gt", 9, 5, 0, 1 }, +#define F_GE (F_GT + 1) + { "ge", 10, 5, 0, 1 }, +#define F_LT (F_GE + 1) + { "lt", 11, 5, 0, 1 }, +#define F_LE (F_LT + 1) + { "le", 12, 5, 0, 1 }, +#define F_HI (F_LE + 1) + { "hi", 13, 5, 0, 1 }, +#define F_LS (F_HI + 1) + { "ls", 14, 5, 0, 1 }, +#define F_PNZ (F_LS + 1) + { "pnz", 15, 5, 0, 1 }, +#define F_NJ (F_PNZ + 1) + { "nj", 21, 5, 0, 1 }, +#define F_NM (F_NJ + 1) + { "nm", 23, 5, 0, 1 }, +#define F_NO_T (F_NM + 1) + { "nt", 24, 5, 0, 1 }, + + /* FLAG. */ +#define F_FLAG (F_NO_T + 1) + { "f", 1, 1, 15, 1 }, +#define F_FFAKE (F_FLAG + 1) + { "f", 0, 0, 0, 1 }, +#define F_AQ (F_FFAKE + 1) + { "aq", 1, 1, 15, 1 }, +#define F_RL (F_AQ + 1) + { "rl", 1, 1, 15, 1 }, + + /* Atomic operations. */ +#define F_ATO_ADD (F_RL + 1) + { "add", 0, 3, 0, 1 }, +#define F_ATO_OR (F_ATO_ADD + 1) + { "or", 1, 3, 0, 1 }, +#define F_ATO_AND (F_ATO_OR + 1) + { "and", 2, 3, 0, 1 }, +#define F_ATO_XOR (F_ATO_AND + 1) + { "xor", 3, 3, 0, 1 }, +#define F_ATO_MINU (F_ATO_XOR + 1) + { "minu", 4, 3, 0, 1 }, +#define F_ATO_MAXU (F_ATO_MINU + 1) + { "maxu", 5, 3, 0, 1 }, +#define F_ATO_MIN (F_ATO_MAXU + 1) + { "min", 6, 3, 0, 1 }, +#define F_ATO_MAX (F_ATO_MIN + 1) + { "max", 7, 3, 0, 1 }, + + /* Delay slot. */ +#define F_ND (F_ATO_MAX + 1) + { "nd", 0, 1, 5, 0 }, +#define F_D (F_ND + 1) + { "d", 1, 1, 5, 1 }, +#define F_DFAKE (F_D + 1) + { "d", 0, 0, 0, 1 }, +#define F_DNZ_ND (F_DFAKE + 1) + { "nd", 0, 1, 16, 0 }, +#define F_DNZ_D (F_DNZ_ND + 1) + { "d", 1, 1, 16, 1 }, + + /* Data size. */ +#define F_SIZEB1 (F_DNZ_D + 1) + { "b", 1, 2, 1, 1 }, +#define F_SIZEB7 (F_SIZEB1 + 1) + { "b", 1, 2, 7, 1 }, +#define F_SIZEB17 (F_SIZEB7 + 1) + { "b", 1, 2, 17, 1 }, +#define F_SIZEW1 (F_SIZEB17 + 1) + { "w", 2, 2, 1, 0 }, +#define F_SIZEW7 (F_SIZEW1 + 1) + { "w", 2, 2, 7, 0 }, +#define F_SIZEW17 (F_SIZEW7 + 1) + { "w", 2, 2, 17, 0 }, + + /* Sign extension. */ +#define F_SIGN6 (F_SIZEW17 + 1) + { "x", 1, 1, 6, 1 }, +#define F_SIGN16 (F_SIGN6 + 1) + { "x", 1, 1, 16, 1 }, +#define F_SIGNX (F_SIGN16 + 1) + { "x", 0, 0, 0, 1 }, + + /* Address write-back modes. */ +#define F_A3 (F_SIGNX + 1) + { "a", 1, 2, 3, 0 }, +#define F_A9 (F_A3 + 1) + { "a", 1, 2, 9, 0 }, +#define F_A22 (F_A9 + 1) + { "a", 1, 2, 22, 0 }, +#define F_AW3 (F_A22 + 1) + { "aw", 1, 2, 3, 1 }, +#define F_AW9 (F_AW3 + 1) + { "aw", 1, 2, 9, 1 }, +#define F_AW22 (F_AW9 + 1) + { "aw", 1, 2, 22, 1 }, +#define F_AB3 (F_AW22 + 1) + { "ab", 2, 2, 3, 1 }, +#define F_AB9 (F_AB3 + 1) + { "ab", 2, 2, 9, 1 }, +#define F_AB22 (F_AB9 + 1) + { "ab", 2, 2, 22, 1 }, +#define F_AS3 (F_AB22 + 1) + { "as", 3, 2, 3, 1 }, +#define F_AS9 (F_AS3 + 1) + { "as", 3, 2, 9, 1 }, +#define F_AS22 (F_AS9 + 1) + { "as", 3, 2, 22, 1 }, +#define F_ASFAKE (F_AS22 + 1) + { "as", 0, 0, 0, 1 }, +/* address writebacks for 128-bit loads. + ,---.---.----------. + | X | D | mnemonic | + |---+---+----------| + | 0 | 0 | none | + | 0 | 1 | as | + | 1 | 0 | a/aw | + | 1 | 1 | ab | + `---^---^----------' */ +#define F_AA128 (F_ASFAKE + 1) + { "a", 2, 2, 15, 0 }, +#define F_AA128W (F_AA128 + 1) + { "aw", 2, 2, 15, 1 }, +#define F_AA128B (F_AA128W + 1) + { "ab", 3, 2, 15, 1 }, +#define F_AA128S (F_AA128B + 1) + { "as", 1, 2, 15, 1 }, + + /* Cache bypass. */ +#define F_DI5 (F_AA128S + 1) + { "di", 1, 1, 5, 1 }, +#define F_DI11 (F_DI5 + 1) + { "di", 1, 1, 11, 1 }, +#define F_DI14 (F_DI11 + 1) + { "di", 1, 1, 14, 1 }, +#define F_DI15 (F_DI14 + 1) + { "di", 1, 1, 15, 1 }, + + /* ARCv2 specific. */ +#define F_NT (F_DI15 + 1) + { "nt", 0, 1, 3, 1}, +#define F_T (F_NT + 1) + { "t", 1, 1, 3, 1}, +#define F_H1 (F_T + 1) + { "h", 2, 2, 1, 1 }, +#define F_H7 (F_H1 + 1) + { "h", 2, 2, 7, 1 }, +#define F_H17 (F_H7 + 1) + { "h", 2, 2, 17, 1 }, +#define F_SIZED (F_H17 + 1) + { "dd", 8, 0, 0, 0 }, /* Fake. */ +#define F_SIZEL (F_SIZED + 1) + { "dl", 8, 0, 0, 0 }, /* Fake. */ +#define F_SIZEW (F_SIZEL + 1) + { "xx", 4, 0, 0, 0 }, /* Fake. */ + + /* Fake Flags. */ +#define F_NE (F_SIZEW + 1) + { "ne", 0, 0, 0, 1 }, + + /* ARC NPS400 Support: See comment near head of file. */ +#define F_NPS_CL (F_NE + 1) + { "cl", 0, 0, 0, 1 }, + +#define F_NPS_NA (F_NPS_CL + 1) + { "na", 1, 1, 9, 1 }, + +#define F_NPS_SR (F_NPS_NA + 1) + { "s", 1, 1, 13, 1 }, + +#define F_NPS_M (F_NPS_SR + 1) + { "m", 1, 1, 7, 1 }, + +#define F_NPS_FLAG (F_NPS_M + 1) + { "f", 1, 1, 20, 1 }, + +#define F_NPS_R (F_NPS_FLAG + 1) + { "r", 1, 1, 15, 1 }, + +#define F_NPS_RW (F_NPS_R + 1) + { "rw", 0, 1, 7, 1 }, + +#define F_NPS_RD (F_NPS_RW + 1) + { "rd", 1, 1, 7, 1 }, + +#define F_NPS_WFT (F_NPS_RD + 1) + { "wft", 0, 0, 0, 1 }, + +#define F_NPS_IE1 (F_NPS_WFT + 1) + { "ie1", 1, 2, 8, 1 }, + +#define F_NPS_IE2 (F_NPS_IE1 + 1) + { "ie2", 2, 2, 8, 1 }, + +#define F_NPS_IE12 (F_NPS_IE2 + 1) + { "ie12", 3, 2, 8, 1 }, + +#define F_NPS_SYNC_RD (F_NPS_IE12 + 1) + { "rd", 0, 1, 6, 1 }, + +#define F_NPS_SYNC_WR (F_NPS_SYNC_RD + 1) + { "wr", 1, 1, 6, 1 }, + +#define F_NPS_HWS_OFF (F_NPS_SYNC_WR + 1) + { "off", 0, 0, 0, 1 }, + +#define F_NPS_HWS_RESTORE (F_NPS_HWS_OFF + 1) + { "restore", 0, 0, 0, 1 }, + +#define F_NPS_SX (F_NPS_HWS_RESTORE + 1) + { "sx", 1, 1, 14, 1 }, + +#define F_NPS_AR (F_NPS_SX + 1) + { "ar", 0, 1, 0, 1 }, + +#define F_NPS_AL (F_NPS_AR + 1) + { "al", 1, 1, 0, 1 }, + +#define F_NPS_S (F_NPS_AL + 1) + { "s", 0, 0, 0, 1 }, + +#define F_NPS_ZNCV_RD (F_NPS_S + 1) + { "rd", 0, 1, 15, 1 }, + +#define F_NPS_ZNCV_WR (F_NPS_ZNCV_RD + 1) + { "wr", 1, 1, 15, 1 }, + +#define F_NPS_P0 (F_NPS_ZNCV_WR + 1) + { "p0", 0, 0, 0, 1 }, + +#define F_NPS_P1 (F_NPS_P0 + 1) + { "p1", 0, 0, 0, 1 }, + +#define F_NPS_P2 (F_NPS_P1 + 1) + { "p2", 0, 0, 0, 1 }, + +#define F_NPS_P3 (F_NPS_P2 + 1) + { "p3", 0, 0, 0, 1 }, + +#define F_NPS_LDBIT_DI (F_NPS_P3 + 1) + { "di", 0, 0, 0, 1 }, + +#define F_NPS_LDBIT_CL1 (F_NPS_LDBIT_DI + 1) + { "cl", 1, 1, 6, 1 }, + +#define F_NPS_LDBIT_CL2 (F_NPS_LDBIT_CL1 + 1) + { "cl", 1, 1, 16, 1 }, + +#define F_NPS_LDBIT_X2_1 (F_NPS_LDBIT_CL2 + 1) + { "x2", 1, 2, 9, 1 }, + +#define F_NPS_LDBIT_X2_2 (F_NPS_LDBIT_X2_1 + 1) + { "x2", 1, 2, 22, 1 }, + +#define F_NPS_LDBIT_X4_1 (F_NPS_LDBIT_X2_2 + 1) + { "x4", 2, 2, 9, 1 }, + +#define F_NPS_LDBIT_X4_2 (F_NPS_LDBIT_X4_1 + 1) + { "x4", 2, 2, 22, 1 }, + +#define F_NPS_CORE (F_NPS_LDBIT_X4_2 + 1) + { "core", 1, 3, 6, 1 }, + +#define F_NPS_CLSR (F_NPS_CORE + 1) + { "clsr", 2, 3, 6, 1 }, + +#define F_NPS_ALL (F_NPS_CLSR + 1) + { "all", 3, 3, 6, 1 }, + +#define F_NPS_GIC (F_NPS_ALL + 1) + { "gic", 4, 3, 6, 1 }, + +#define F_NPS_RSPI_GIC (F_NPS_GIC + 1) + { "gic", 5, 3, 6, 1 }, +}; + +const unsigned arc_num_flag_operands = ARRAY_SIZE (arc_flag_operands); + +/* Table of the flag classes. + + The format of the table is + CLASS {FLAG_CODE}. */ +const struct arc_flag_class arc_flag_classes[] = +{ +#define C_EMPTY 0 + { F_CLASS_NONE, { F_NULL }, 0, 0 }, + +#define C_CC_EQ (C_EMPTY + 1) + {F_CLASS_IMPLICIT | F_CLASS_COND, {F_EQUAL, F_NULL}, 0, 0 }, + +#define C_CC_GE (C_CC_EQ + 1) + {F_CLASS_IMPLICIT | F_CLASS_COND, {F_GE, F_NULL}, 0, 0 }, + +#define C_CC_GT (C_CC_GE + 1) + {F_CLASS_IMPLICIT | F_CLASS_COND, {F_GT, F_NULL}, 0, 0}, + +#define C_CC_HI (C_CC_GT + 1) + {F_CLASS_IMPLICIT | F_CLASS_COND, {F_HI, F_NULL}, 0, 0}, + +#define C_CC_HS (C_CC_HI + 1) + {F_CLASS_IMPLICIT | F_CLASS_COND, {F_NOTCARRY, F_NULL}, 0, 0}, + +#define C_CC_LE (C_CC_HS + 1) + {F_CLASS_IMPLICIT | F_CLASS_COND, {F_LE, F_NULL}, 0, 0}, + +#define C_CC_LO (C_CC_LE + 1) + {F_CLASS_IMPLICIT | F_CLASS_COND, {F_CARRY, F_NULL}, 0, 0}, + +#define C_CC_LS (C_CC_LO + 1) + {F_CLASS_IMPLICIT | F_CLASS_COND, {F_LS, F_NULL}, 0, 0}, + +#define C_CC_LT (C_CC_LS + 1) + {F_CLASS_IMPLICIT | F_CLASS_COND, {F_LT, F_NULL}, 0, 0}, + +#define C_CC_NE (C_CC_LT + 1) + {F_CLASS_IMPLICIT | F_CLASS_COND, {F_NOTEQUAL, F_NULL}, 0, 0}, + +#define C_AA_AB (C_CC_NE + 1) + {F_CLASS_IMPLICIT | F_CLASS_WB, {F_AB3, F_NULL}, 0, 0}, + +#define C_AA_AW (C_AA_AB + 1) + {F_CLASS_IMPLICIT | F_CLASS_WB, {F_AW3, F_NULL}, 0, 0}, + +#define C_ZZ_D (C_AA_AW + 1) + {F_CLASS_IMPLICIT | F_CLASS_ZZ, {F_SIZED, F_NULL}, 0, 0}, + +#define C_ZZ_L (C_ZZ_D + 1) + {F_CLASS_IMPLICIT | F_CLASS_ZZ, {F_SIZEL, F_NULL}, 0, 0}, + +#define C_ZZ_W (C_ZZ_L + 1) + {F_CLASS_IMPLICIT | F_CLASS_ZZ, {F_SIZEW, F_NULL}, 0, 0}, + +#define C_ZZ_H (C_ZZ_W + 1) + {F_CLASS_IMPLICIT | F_CLASS_ZZ, {F_H1, F_NULL}, 0, 0}, + +#define C_ZZ_B (C_ZZ_H + 1) + {F_CLASS_IMPLICIT | F_CLASS_ZZ, {F_SIZEB1, F_NULL}, 0, 0}, + +#define C_CC (C_ZZ_B + 1) + { F_CLASS_OPTIONAL | F_CLASS_EXTEND | F_CLASS_COND, + { F_ALWAYS, F_RA, F_EQUAL, F_ZERO, F_NOTEQUAL, + F_NOTZERO, F_POZITIVE, F_PL, F_NEGATIVE, F_MINUS, + F_CARRY, F_CARRYSET, F_LOWER, F_CARRYCLR, + F_NOTCARRY, F_HIGHER, F_OVERFLOWSET, F_OVERFLOW, + F_NOTOVERFLOW, F_OVERFLOWCLR, F_GT, F_GE, F_LT, + F_LE, F_HI, F_LS, F_PNZ, F_NJ, F_NM, F_NO_T, F_NULL }, 0, 0}, + +#define C_AA_ADDR3 (C_CC + 1) +#define C_AA27 (C_CC + 1) + { F_CLASS_OPTIONAL | F_CLASS_WB, { F_A3, F_AW3, F_AB3, F_AS3, F_NULL }, 0, 0}, +#define C_AS27 (C_AA_ADDR3 + 1) + { F_CLASS_OPTIONAL, { F_AS3, F_NULL }, 0, 0}, +#define C_AA_ADDR9 (C_AS27 + 1) +#define C_AA21 (C_AS27 + 1) + { F_CLASS_OPTIONAL | F_CLASS_WB, { F_A9, F_AW9, F_AB9, F_AS9, F_NULL }, 0, 0}, +#define C_AAB21 (C_AA21 + 1) + { F_CLASS_OPTIONAL | F_CLASS_WB, { F_A9, F_AW9, F_AB9, F_NULL }, 0, 0}, +#define C_AA_ADDR22 (C_AAB21 + 1) +#define C_AA8 (C_AAB21 + 1) + { F_CLASS_OPTIONAL | F_CLASS_WB, + { F_A22, F_AW22, F_AB22, F_AS22, F_NULL }, 0, 0}, +#define C_AAB8 (C_AA8 + 1) + { F_CLASS_OPTIONAL | F_CLASS_WB, + { F_A22, F_AW22, F_AB22, F_NULL }, 0, 0}, + +#define C_F (C_AAB8 + 1) + { F_CLASS_OPTIONAL, { F_FLAG, F_NULL }, 0, 0}, +#define C_FHARD (C_F + 1) + { F_CLASS_OPTIONAL, { F_FFAKE, F_NULL }, 0, 0}, + +#define C_RL (C_FHARD + 1) + { F_CLASS_OPTIONAL, { F_RL, F_NULL }, 0, 0}, +#define C_AQ (C_RL + 1) + { F_CLASS_OPTIONAL, { F_AQ, F_NULL }, 0, 0}, + +#define C_ATOP (C_AQ + 1) + { F_CLASS_REQUIRED, {F_ATO_ADD, F_ATO_OR, F_ATO_AND, F_ATO_XOR, F_ATO_MINU, + F_ATO_MAXU, F_ATO_MIN, F_ATO_MAX, F_NULL}, 0, 0}, + +#define C_T (C_ATOP + 1) + { F_CLASS_OPTIONAL, { F_NT, F_T, F_NULL }, 0, 0}, +#define C_D (C_T + 1) + { F_CLASS_OPTIONAL, { F_ND, F_D, F_NULL }, 0, 0}, +#define C_DNZ_D (C_D + 1) + { F_CLASS_OPTIONAL, { F_DNZ_ND, F_DNZ_D, F_NULL }, 0, 0}, + +#define C_DHARD (C_DNZ_D + 1) + { F_CLASS_OPTIONAL, { F_DFAKE, F_NULL }, 0, 0}, + +#define C_DI20 (C_DHARD + 1) + { F_CLASS_OPTIONAL, { F_DI11, F_NULL }, 0, 0}, +#define C_DI14 (C_DI20 + 1) + { F_CLASS_OPTIONAL, { F_DI14, F_NULL }, 0, 0}, +#define C_DI16 (C_DI14 + 1) + { F_CLASS_OPTIONAL, { F_DI15, F_NULL }, 0, 0}, +#define C_DI26 (C_DI16 + 1) + { F_CLASS_OPTIONAL, { F_DI5, F_NULL }, 0, 0}, + +#define C_X25 (C_DI26 + 1) + { F_CLASS_OPTIONAL, { F_SIGN6, F_NULL }, 0, 0}, +#define C_X15 (C_X25 + 1) + { F_CLASS_OPTIONAL, { F_SIGN16, F_NULL }, 0, 0}, +#define C_XHARD (C_X15 + 1) +#define C_X (C_X15 + 1) + { F_CLASS_OPTIONAL, { F_SIGNX, F_NULL }, 0, 0}, + +#define C_ZZ13 (C_X + 1) + { F_CLASS_OPTIONAL, { F_SIZEB17, F_SIZEW17, F_H17, F_NULL}, 0, 0}, +#define C_ZZ23 (C_ZZ13 + 1) + { F_CLASS_OPTIONAL, { F_SIZEB7, F_SIZEW7, F_H7, F_NULL}, 0, 0}, +#define C_ZZ29 (C_ZZ23 + 1) + { F_CLASS_OPTIONAL, { F_SIZEB1, F_SIZEW1, F_H1, F_NULL}, 0, 0}, + +#define C_AS (C_ZZ29 + 1) +#define C_AAHARD13 (C_ZZ29 + 1) + { F_CLASS_OPTIONAL, { F_ASFAKE, F_NULL}, 0, 0}, + +#define C_NE (C_AS + 1) + { F_CLASS_REQUIRED, { F_NE, F_NULL}, 0, 0}, + + /* ARC NPS400 Support: See comment near head of file. */ +#define C_NPS_CL (C_NE + 1) + { F_CLASS_REQUIRED, { F_NPS_CL, F_NULL}, 0, 0}, + +#define C_NPS_NA (C_NPS_CL + 1) + { F_CLASS_OPTIONAL, { F_NPS_NA, F_NULL}, 0, 0}, + +#define C_NPS_SR (C_NPS_NA + 1) + { F_CLASS_OPTIONAL, { F_NPS_SR, F_NULL}, 0, 0}, + +#define C_NPS_M (C_NPS_SR + 1) + { F_CLASS_OPTIONAL, { F_NPS_M, F_NULL}, 0, 0}, + +#define C_NPS_F (C_NPS_M + 1) + { F_CLASS_OPTIONAL, { F_NPS_FLAG, F_NULL}, 0, 0}, + +#define C_NPS_R (C_NPS_F + 1) + { F_CLASS_OPTIONAL, { F_NPS_R, F_NULL}, 0, 0}, + +#define C_NPS_SCHD_RW (C_NPS_R + 1) + { F_CLASS_REQUIRED, { F_NPS_RW, F_NPS_RD, F_NULL}, 0, 0}, + +#define C_NPS_SCHD_TRIG (C_NPS_SCHD_RW + 1) + { F_CLASS_REQUIRED, { F_NPS_WFT, F_NULL}, 0, 0}, + +#define C_NPS_SCHD_IE (C_NPS_SCHD_TRIG + 1) + { F_CLASS_OPTIONAL, { F_NPS_IE1, F_NPS_IE2, F_NPS_IE12, F_NULL}, 0, 0}, + +#define C_NPS_SYNC (C_NPS_SCHD_IE + 1) + { F_CLASS_REQUIRED, { F_NPS_SYNC_RD, F_NPS_SYNC_WR, F_NULL}, 0, 0}, + +#define C_NPS_HWS_OFF (C_NPS_SYNC + 1) + { F_CLASS_REQUIRED, { F_NPS_HWS_OFF, F_NULL}, 0, 0}, + +#define C_NPS_HWS_RESTORE (C_NPS_HWS_OFF + 1) + { F_CLASS_REQUIRED, { F_NPS_HWS_RESTORE, F_NULL}, 0, 0}, + +#define C_NPS_SX (C_NPS_HWS_RESTORE + 1) + { F_CLASS_OPTIONAL, { F_NPS_SX, F_NULL}, 0, 0}, + +#define C_NPS_AR_AL (C_NPS_SX + 1) + { F_CLASS_REQUIRED, { F_NPS_AR, F_NPS_AL, F_NULL}, 0, 0}, + +#define C_NPS_S (C_NPS_AR_AL + 1) + { F_CLASS_REQUIRED, { F_NPS_S, F_NULL}, 0, 0}, + +#define C_NPS_ZNCV (C_NPS_S + 1) + { F_CLASS_REQUIRED, { F_NPS_ZNCV_RD, F_NPS_ZNCV_WR, F_NULL}, 0, 0}, + +#define C_NPS_P0 (C_NPS_ZNCV + 1) + { F_CLASS_REQUIRED, { F_NPS_P0, F_NULL }, 0, 0}, + +#define C_NPS_P1 (C_NPS_P0 + 1) + { F_CLASS_REQUIRED, { F_NPS_P1, F_NULL }, 0, 0}, + +#define C_NPS_P2 (C_NPS_P1 + 1) + { F_CLASS_REQUIRED, { F_NPS_P2, F_NULL }, 0, 0}, + +#define C_NPS_P3 (C_NPS_P2 + 1) + { F_CLASS_REQUIRED, { F_NPS_P3, F_NULL }, 0, 0}, + +#define C_NPS_LDBIT_DI (C_NPS_P3 + 1) + { F_CLASS_REQUIRED, { F_NPS_LDBIT_DI, F_NULL }, 0, 0}, + +#define C_NPS_LDBIT_CL1 (C_NPS_LDBIT_DI + 1) + { F_CLASS_OPTIONAL, { F_NPS_LDBIT_CL1, F_NULL }, 0, 0}, + +#define C_NPS_LDBIT_CL2 (C_NPS_LDBIT_CL1 + 1) + { F_CLASS_OPTIONAL, { F_NPS_LDBIT_CL2, F_NULL }, 0, 0}, + +#define C_NPS_LDBIT_X_1 (C_NPS_LDBIT_CL2 + 1) + { F_CLASS_OPTIONAL, { F_NPS_LDBIT_X2_1, F_NPS_LDBIT_X4_1, F_NULL }, 0, 0}, + +#define C_NPS_LDBIT_X_2 (C_NPS_LDBIT_X_1 + 1) + { F_CLASS_OPTIONAL, { F_NPS_LDBIT_X2_2, F_NPS_LDBIT_X4_2, F_NULL }, 0, 0}, + +#define C_NPS_CORE (C_NPS_LDBIT_X_2 + 1) + { F_CLASS_REQUIRED, { F_NPS_CORE, F_NULL}, 0, 0}, + +#define C_NPS_CLSR (C_NPS_CORE + 1) + { F_CLASS_REQUIRED, { F_NPS_CLSR, F_NULL}, 0, 0}, + +#define C_NPS_ALL (C_NPS_CLSR + 1) + { F_CLASS_REQUIRED, { F_NPS_ALL, F_NULL}, 0, 0}, + +#define C_NPS_GIC (C_NPS_ALL + 1) + { F_CLASS_REQUIRED, { F_NPS_GIC, F_NULL}, 0, 0}, + +#define C_NPS_RSPI_GIC (C_NPS_GIC + 1) + { F_CLASS_REQUIRED, { F_NPS_RSPI_GIC, F_NULL}, 0, 0}, + + /* Conditinal Flags used by floating point conditional move + instruction. */ +#define C_FPCC (C_NPS_RSPI_GIC + 1) + { F_CLASS_OPTIONAL | F_CLASS_EXTEND | F_CLASS_COND, + { F_ALWAYS, F_RA, F_EQUAL, F_ZERO, F_NOTEQUAL, + F_NOTZERO, F_POZITIVE, F_PL, F_NEGATIVE, F_MINUS, + F_CARRY, F_CARRYSET, F_LOWER, F_CARRYCLR, + F_NOTCARRY, F_HIGHER, F_OVERFLOWSET, F_OVERFLOW, + F_NOTOVERFLOW, F_OVERFLOWCLR, F_GT, F_GE, F_LT, + F_LE, F_HI, F_LS, F_PNZ, F_NJ, F_NM, F_NO_T, F_NULL }, + insert_fs2, extract_fs2}, + +/* The address writeback for 128-bit loads. */ +#define C_AA_128 (C_FPCC + 1) + { F_CLASS_OPTIONAL | F_CLASS_WB, { F_AA128, F_AA128W, F_AA128B, F_AA128S, F_NULL }, 0, 0}, + + /* The address scaling for 128-bit loads. */ +#define C_AS_128 (C_AA_128 + 1) + { F_CLASS_OPTIONAL, { F_AA128S, F_NULL }, 0, 0}, + +/* The scattered version of address writeback for 128-bit loads. */ +#define C_AA_128S (C_AS_128 + 1) + { F_CLASS_OPTIONAL | F_CLASS_WB, { F_AA128, F_AA128W, F_AA128B, F_AA128S, F_NULL }, insert_qq, extract_qq}, + +/* The scattered version of address sacling for 128-bit loads. */ +#define C_AS_128S (C_AA_128S + 1) + { F_CLASS_OPTIONAL, { F_AA128S, F_NULL }, insert_qq, extract_qq}, + +}; + +const unsigned char flags_none[] = { 0 }; +const unsigned char flags_f[] = { C_F }; +const unsigned char flags_cc[] = { C_CC }; +const unsigned char flags_ccf[] = { C_CC, C_F }; + +/* The operands table. + + The format of the operands table is: + + BITS SHIFT DEFAULT_RELOC FLAGS INSERT_FUN EXTRACT_FUN. */ +const struct arc_operand arc_operands[] = +{ + /* The fields are bits, shift, insert, extract, flags. The zero + index is used to indicate end-of-list. */ +#define UNUSED 0 + { 0, 0, 0, 0, 0, 0 }, + +#define IGNORED (UNUSED + 1) + { 0, 0, 0, ARC_OPERAND_IGNORE | ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, 0, 0 }, + + /* The plain integer register fields. Used by 32 bit + instructions. */ +#define RA (IGNORED + 1) + { 6, 0, 0, ARC_OPERAND_IR, 0, 0 }, +#define RA_CHK (RA + 1) + { 6, 0, 0, ARC_OPERAND_IR, insert_ra_chk, 0 }, +#define RB (RA_CHK + 1) + { 6, 12, 0, ARC_OPERAND_IR, insert_rb, extract_rb }, +#define RB_CHK (RB + 1) + { 6, 12, 0, ARC_OPERAND_IR, insert_rb_chk, extract_rb }, +#define RBB_S (RB_CHK + 1) + { 6, 12, 0, ARC_OPERAND_IR, insert_rbb, extract_rbb }, +#define RC (RBB_S + 1) +#define RC_CHK (RBB_S + 1) + { 6, 6, 0, ARC_OPERAND_IR, 0, 0 }, +#define RBdup (RC + 1) + { 6, 12, 0, ARC_OPERAND_IR | ARC_OPERAND_DUPLICATE, insert_rb, extract_rb }, + +#define RAD (RBdup + 1) + { 6, 0, 0, ARC_OPERAND_IR | ARC_OPERAND_TRUNCATE, insert_rad, 0 }, +#define RAD_CHK (RAD + 1) + { 6, 0, 0, ARC_OPERAND_IR | ARC_OPERAND_TRUNCATE, insert_rad, 0 }, +#define RCD (RAD_CHK + 1) + { 6, 6, 0, ARC_OPERAND_IR | ARC_OPERAND_TRUNCATE, insert_rcd, 0 }, +#define RBD (RCD + 1) + { 6, 6, 0, ARC_OPERAND_IR | ARC_OPERAND_TRUNCATE, insert_rbd, extract_rb }, +#define RBDdup (RBD + 1) + { 6, 12, 0, ARC_OPERAND_IR | ARC_OPERAND_DUPLICATE | ARC_OPERAND_TRUNCATE, + insert_rbd, extract_rb }, + + /* The plain integer register fields. Used by short + instructions. */ +#define RA16 (RBDdup + 1) +#define RA_S (RBDdup + 1) + { 4, 0, 0, ARC_OPERAND_IR, insert_ras, extract_ras }, +#define RB16 (RA16 + 1) +#define RB_S (RA16 + 1) + { 4, 8, 0, ARC_OPERAND_IR, insert_rbs, extract_rbs }, +#define RB16dup (RB16 + 1) +#define RB_Sdup (RB16 + 1) + { 4, 8, 0, ARC_OPERAND_IR | ARC_OPERAND_DUPLICATE, insert_rbs, extract_rbs }, +#define RC16 (RB16dup + 1) +#define RC_S (RB16dup + 1) + { 4, 5, 0, ARC_OPERAND_IR, insert_rcs, extract_rcs }, +#define R6H (RC16 + 1) /* 6bit register field 'h' used + by V1 cpus. */ + { 6, 5, 0, ARC_OPERAND_IR, insert_rhv1, extract_rhv1 }, +#define R5H (R6H + 1) /* 5bit register field 'h' used + by V2 cpus. */ +#define RH_S (R6H + 1) /* 5bit register field 'h' used + by V2 cpus. */ + { 5, 5, 0, ARC_OPERAND_IR, insert_rhv2, extract_rhv2 }, +#define R5Hdup (R5H + 1) +#define RH_Sdup (R5H + 1) + { 5, 5, 0, ARC_OPERAND_IR | ARC_OPERAND_DUPLICATE, + insert_rhv2, extract_rhv2 }, + +#define RG (R5Hdup + 1) +#define G_S (R5Hdup + 1) + { 5, 5, 0, ARC_OPERAND_IR, insert_g_s, extract_g_s }, + + /* Fix registers. */ +#define R0 (RG + 1) +#define R0_S (RG + 1) + { 0, 0, 0, ARC_OPERAND_IR, insert_r0, extract_r0 }, +#define R1 (R0 + 1) +#define R1_S (R0 + 1) + { 1, 0, 0, ARC_OPERAND_IR, insert_r1, extract_r1 }, +#define R2 (R1 + 1) +#define R2_S (R1 + 1) + { 2, 0, 0, ARC_OPERAND_IR, insert_r2, extract_r2 }, +#define R3 (R2 + 1) +#define R3_S (R2 + 1) + { 2, 0, 0, ARC_OPERAND_IR, insert_r3, extract_r3 }, +#define RSP (R3 + 1) +#define SP_S (R3 + 1) + { 5, 0, 0, ARC_OPERAND_IR, insert_sp, extract_sp }, +#define SPdup (RSP + 1) +#define SP_Sdup (RSP + 1) + { 5, 0, 0, ARC_OPERAND_IR | ARC_OPERAND_DUPLICATE, insert_sp, extract_sp }, +#define GP (SPdup + 1) +#define GP_S (SPdup + 1) + { 5, 0, 0, ARC_OPERAND_IR, insert_gp, extract_gp }, + +#define PCL_S (GP + 1) + { 1, 0, 0, ARC_OPERAND_IR | ARC_OPERAND_NCHK, insert_pcl, extract_pcl }, + +#define BLINK (PCL_S + 1) +#define BLINK_S (PCL_S + 1) + { 5, 0, 0, ARC_OPERAND_IR, insert_blink, extract_blink }, + +#define ILINK1 (BLINK + 1) + { 5, 0, 0, ARC_OPERAND_IR, insert_ilink1, extract_ilink1 }, +#define ILINK2 (ILINK1 + 1) + { 5, 0, 0, ARC_OPERAND_IR, insert_ilink2, extract_ilink2 }, + + /* Long immediate. */ +#define LIMM (ILINK2 + 1) +#define LIMM_S (ILINK2 + 1) + { 32, 0, BFD_RELOC_ARC_32_ME, ARC_OPERAND_LIMM, insert_limm, 0 }, +#define LO32 (LIMM + 1) + { 32, 0, BFD_RELOC_ARC_LO32_ME, ARC_OPERAND_LIMM, insert_limm, 0 }, +#define HI32 (LO32 + 1) + { 32, 0, BFD_RELOC_ARC_HI32_ME, ARC_OPERAND_LIMM, insert_limm, 0 }, +#define LIMM34 (HI32 + 1) + { 34, 0, BFD_RELOC_ARC_PCLO32_ME_2, + ARC_OPERAND_LIMM | ARC_OPERAND_SIGNED | ARC_OPERAND_ALIGNED32 + | ARC_OPERAND_TRUNCATE | ARC_OPERAND_PCREL, + insert_limm, 0 }, +#define XIMM_S (LIMM34 + 1) +#define XIMM (LIMM34 + 1) + { 32, 0, BFD_RELOC_ARC_LO32_ME, ARC_OPERAND_LIMM | ARC_OPERAND_SIGNED, + insert_limm, 0 }, +#define LIMMdup (XIMM + 1) + { 32, 0, 0, ARC_OPERAND_LIMM | ARC_OPERAND_DUPLICATE, insert_limm, 0 }, +#define XIMMdup (LIMMdup + 1) + { 32, 0, 0, ARC_OPERAND_LIMM | ARC_OPERAND_DUPLICATE | ARC_OPERAND_SIGNED, + insert_limm, 0 }, + + /* Special operands. */ +#define ZA (XIMMdup + 1) +#define ZB (XIMMdup + 1) +#define ZA_S (XIMMdup + 1) +#define ZB_S (XIMMdup + 1) +#define ZC_S (XIMMdup + 1) + { 0, 0, 0, ARC_OPERAND_UNSIGNED, insert_za, 0 }, + +#define RRANGE_EL (ZA + 1) + { 4, 0, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK | ARC_OPERAND_TRUNCATE, + insert_rrange, extract_rrange}, +#define R13_EL (RRANGE_EL + 1) + { 1, 0, 0, ARC_OPERAND_IR | ARC_OPERAND_IGNORE | ARC_OPERAND_NCHK, + insert_r13el, extract_rrange }, +#define FP_EL (R13_EL + 1) + { 1, 0, 0, ARC_OPERAND_IR | ARC_OPERAND_IGNORE | ARC_OPERAND_NCHK, + insert_fpel, extract_fpel }, +#define BLINK_EL (FP_EL + 1) + { 1, 0, 0, ARC_OPERAND_IR | ARC_OPERAND_IGNORE | ARC_OPERAND_NCHK, + insert_blinkel, extract_blinkel }, +#define PCL_EL (BLINK_EL + 1) + { 1, 0, 0, ARC_OPERAND_IR | ARC_OPERAND_IGNORE | ARC_OPERAND_NCHK, + insert_pclel, extract_pclel }, + + /* Fake operand to handle the T flag. */ +#define BRAKET (PCL_EL + 1) +#define BRAKETdup (PCL_EL + 1) + { 0, 0, 0, ARC_OPERAND_FAKE | ARC_OPERAND_BRAKET, 0, 0 }, + + /* Fake operand to handle the T flag. */ +#define FKT_T (BRAKET + 1) + { 1, 3, 0, ARC_OPERAND_FAKE, insert_Ybit, 0 }, + /* Fake operand to handle the T flag. */ +#define FKT_NT (FKT_T + 1) + { 1, 3, 0, ARC_OPERAND_FAKE, insert_NYbit, 0 }, + + /* UIMM6_20 mask = 00000000000000000000111111000000. */ +#define UIMM6_20 (FKT_NT + 1) + {6, 0, 0, ARC_OPERAND_UNSIGNED, insert_uimm6_20, extract_uimm6_20}, + + /* Exactly like the above but used by relaxation. */ +#define UIMM6_20R (UIMM6_20 + 1) + {6, 0, -UIMM6_20R, ARC_OPERAND_UNSIGNED | ARC_OPERAND_PCREL, + insert_uimm6_20, extract_uimm6_20}, + + /* SIMM12_20 mask = 00000000000000000000111111222222. */ +#define SIMM12_20 (UIMM6_20R + 1) + {12, 0, 0, ARC_OPERAND_SIGNED, insert_simm12_20, extract_simm12_20}, + + /* Exactly like the above but used by relaxation. */ +#define SIMM12_20R (SIMM12_20 + 1) + {12, 0, -SIMM12_20R, ARC_OPERAND_SIGNED | ARC_OPERAND_PCREL, + insert_simm12_20, extract_simm12_20}, + + /* UIMM12_20 mask = 00000000000000000000111111222222. */ +#define UIMM12_20 (SIMM12_20R + 1) + {12, 0, 0, ARC_OPERAND_UNSIGNED, insert_simm12_20, extract_uimm12_20}, + + /* SIMM3_5_S mask = 0000011100000000. */ +#define SIMM3_5_S (UIMM12_20 + 1) + {3, 0, 0, ARC_OPERAND_SIGNED | ARC_OPERAND_NCHK, + insert_simm3s, extract_simm3s}, + + /* UIMM7_A32_11_S mask = 0000000000011111. */ +#define UIMM7_A32_11_S (SIMM3_5_S + 1) + {7, 0, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_ALIGNED32 + | ARC_OPERAND_TRUNCATE | ARC_OPERAND_IGNORE, insert_uimm7_a32_11_s, + extract_uimm7_a32_11_s}, + + /* The same as above but used by relaxation. */ +#define UIMM7_A32_11R_S (UIMM7_A32_11_S + 1) + {7, 0, -UIMM7_A32_11R_S, ARC_OPERAND_UNSIGNED | ARC_OPERAND_ALIGNED32 + | ARC_OPERAND_TRUNCATE | ARC_OPERAND_IGNORE | ARC_OPERAND_PCREL, + insert_uimm7_a32_11_s, extract_uimm7_a32_11_s}, + +#define UIMM9_A32_11_S (UIMM7_A32_11R_S + 1) + {9, 0, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_ALIGNED32 + | ARC_OPERAND_TRUNCATE | ARC_OPERAND_IGNORE, insert_uimm9_a32_11_s, + extract_uimm9_a32_11_s}, + + /* UIMM7_9_S mask = 0000000001111111. */ +#define UIMM7_9_S (UIMM9_A32_11_S + 1) + {7, 0, 0, ARC_OPERAND_UNSIGNED, insert_uimm7_9_s, extract_uimm7_9_s}, + + /* UIMM3_13_S mask = 0000000000000111. */ +#define UIMM3_13_S (UIMM7_9_S + 1) + {3, 0, 0, ARC_OPERAND_UNSIGNED, insert_uimm3_13_s, extract_uimm3_13_s}, + + /* Exactly like the above but used for relaxation. */ +#define UIMM3_13R_S (UIMM3_13_S + 1) + {3, 0, -UIMM3_13R_S, ARC_OPERAND_UNSIGNED | ARC_OPERAND_PCREL, + insert_uimm3_13_s, extract_uimm3_13_s}, + + /* SIMM11_A32_7_S mask = 0000000111111111. */ +#define SIMM11_A32_7_S (UIMM3_13R_S + 1) + {11, 0, BFD_RELOC_ARC_SDA16_LD2, ARC_OPERAND_SIGNED | ARC_OPERAND_ALIGNED32 + | ARC_OPERAND_TRUNCATE, insert_simm11_a32_7_s, extract_simm11_a32_7_s}, + + /* UIMM6_13_S mask = 0000000002220111. */ +#define UIMM6_13_S (SIMM11_A32_7_S + 1) + {6, 0, 0, ARC_OPERAND_UNSIGNED, insert_uimm6_13_s, extract_uimm6_13_s}, + /* UIMM5_11_S mask = 0000000000011111. */ +#define UIMM5_11_S (UIMM6_13_S + 1) + {5, 0, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_IGNORE, insert_uimm5_11_s, + extract_uimm5_11_s}, + + /* SIMM9_A16_8 mask = 00000000111111102000000000000000. */ +#define SIMM9_A16_8 (UIMM5_11_S + 1) + {9, 0, BFD_RELOC_ARC_S9H_PCREL, ARC_OPERAND_SIGNED | ARC_OPERAND_ALIGNED16 + | ARC_OPERAND_PCREL | ARC_OPERAND_TRUNCATE, insert_simm9_a16_8, + extract_simm9_a16_8}, + + /* UIMM6_8 mask = 00000000000000000000111111000000. */ +#define UIMM6_8 (SIMM9_A16_8 + 1) + {6, 0, 0, ARC_OPERAND_UNSIGNED, insert_uimm6_8, extract_uimm6_8}, + + /* SIMM21_A16_5 mask = 00000111111111102222222222000000. */ +#define SIMM21_A16_5 (UIMM6_8 + 1) + {21, 0, BFD_RELOC_ARC_S21H_PCREL, ARC_OPERAND_SIGNED + | ARC_OPERAND_ALIGNED16 | ARC_OPERAND_TRUNCATE | ARC_OPERAND_PCREL, + insert_simm21_a16_5, extract_simm21_a16_5}, + + /* SIMM25_A16_5 mask = 00000111111111102222222222003333. */ +#define SIMM25_A16_5 (SIMM21_A16_5 + 1) + {25, 0, BFD_RELOC_ARC_S25H_PCREL, ARC_OPERAND_SIGNED + | ARC_OPERAND_ALIGNED16 | ARC_OPERAND_TRUNCATE | ARC_OPERAND_PCREL, + insert_simm25_a16_5, extract_simm25_a16_5}, + + /* SIMM10_A16_7_S mask = 0000000111111111. */ +#define SIMM10_A16_7_S (SIMM25_A16_5 + 1) + {10, 0, BFD_RELOC_ARC_S10H_PCREL, ARC_OPERAND_SIGNED | ARC_OPERAND_ALIGNED16 + | ARC_OPERAND_TRUNCATE | ARC_OPERAND_PCREL, insert_simm10_a16_7_s, + extract_simm10_a16_7_s}, + +#define SIMM10_A16_7_Sbis (SIMM10_A16_7_S + 1) + {10, 0, -SIMM10_A16_7_Sbis, ARC_OPERAND_SIGNED | ARC_OPERAND_ALIGNED16 + | ARC_OPERAND_TRUNCATE, insert_simm10_a16_7_s, extract_simm10_a16_7_s}, + + /* SIMM7_A16_10_S mask = 0000000000111111. */ +#define SIMM7_A16_10_S (SIMM10_A16_7_Sbis + 1) + {7, 0, BFD_RELOC_ARC_S7H_PCREL, ARC_OPERAND_SIGNED | ARC_OPERAND_ALIGNED16 + | ARC_OPERAND_TRUNCATE | ARC_OPERAND_PCREL, insert_simm7_a16_10_s, + extract_simm7_a16_10_s}, + + /* SIMM21_A32_5 mask = 00000111111111002222222222000000. */ +#define SIMM21_A32_5 (SIMM7_A16_10_S + 1) + {21, 0, BFD_RELOC_ARC_S21W_PCREL, ARC_OPERAND_SIGNED | ARC_OPERAND_ALIGNED32 + | ARC_OPERAND_TRUNCATE | ARC_OPERAND_PCREL, insert_simm21_a32_5, + extract_simm21_a32_5}, + + /* SIMM25_A32_5 mask = 00000111111111002222222222003333. */ +#define SIMM25_A32_5 (SIMM21_A32_5 + 1) + {25, 0, BFD_RELOC_ARC_S25W_PCREL, ARC_OPERAND_SIGNED | ARC_OPERAND_ALIGNED32 + | ARC_OPERAND_TRUNCATE | ARC_OPERAND_PCREL, insert_simm25_a32_5, + extract_simm25_a32_5}, + + /* SIMM13_A32_5_S mask = 0000011111111111. */ +#define SIMM13_A32_5_S (SIMM25_A32_5 + 1) + {13, 0, BFD_RELOC_ARC_S13_PCREL, ARC_OPERAND_SIGNED | ARC_OPERAND_ALIGNED32 + | ARC_OPERAND_TRUNCATE | ARC_OPERAND_PCREL, insert_simm13_a32_5_s, + extract_simm13_a32_5_s}, + + /* SIMM8_A16_9_S mask = 0000000001111111. */ +#define SIMM8_A16_9_S (SIMM13_A32_5_S + 1) + {8, 0, BFD_RELOC_ARC_S8H_PCREL, ARC_OPERAND_SIGNED | ARC_OPERAND_ALIGNED16 + | ARC_OPERAND_TRUNCATE | ARC_OPERAND_PCREL, insert_simm8_a16_9_s, + extract_simm8_a16_9_s}, + +/* UIMM10_6_S_JLIOFF mask = 0000001111111111. */ +#define UIMM10_6_S_JLIOFF (SIMM8_A16_9_S + 1) + {12, 0, BFD_RELOC_ARC_JLI_SECTOFF, ARC_OPERAND_UNSIGNED + | ARC_OPERAND_ALIGNED32 | ARC_OPERAND_TRUNCATE, insert_uimm10_6_s, + extract_uimm10_6_s}, + + /* UIMM3_23 mask = 00000000000000000000000111000000. */ +#define UIMM3_23 (UIMM10_6_S_JLIOFF + 1) + {3, 0, 0, ARC_OPERAND_UNSIGNED, insert_uimm3_23, extract_uimm3_23}, + + /* UIMM10_6_S mask = 0000001111111111. */ +#define UIMM10_6_S (UIMM3_23 + 1) + {10, 0, 0, ARC_OPERAND_UNSIGNED, insert_uimm10_6_s, extract_uimm10_6_s}, + +#define UIMM10_13_S (UIMM10_6_S+ 1) + {10, 0, 0, ARC_OPERAND_UNSIGNED, insert_uimm10_13_s, extract_uimm10_13_s}, + + /* UIMM6_11_S mask = 0000002200011110. */ +#define UIMM6_11_S (UIMM10_13_S + 1) + {6, 0, 0, ARC_OPERAND_UNSIGNED, insert_uimm6_11_s, extract_uimm6_11_s}, + + /* SIMM9_8 mask = 00000000111111112000000000000000. */ +#define SIMM9_8 (UIMM6_11_S + 1) + {9, 0, BFD_RELOC_ARC_SDA_LDST, ARC_OPERAND_SIGNED | ARC_OPERAND_IGNORE, + insert_simm9_8, extract_simm9_8}, + + /* The same as above but used by relaxation. */ +#define SIMM9_8R (SIMM9_8 + 1) + {9, 0, -SIMM9_8R, ARC_OPERAND_SIGNED | ARC_OPERAND_IGNORE + | ARC_OPERAND_PCREL, insert_simm9_8, extract_simm9_8}, + + /* UIMM10_A32_8_S mask = 0000000011111111. */ +#define UIMM10_A32_8_S (SIMM9_8R + 1) + {10, 0, -UIMM10_A32_8_S, ARC_OPERAND_UNSIGNED | ARC_OPERAND_ALIGNED32 + | ARC_OPERAND_TRUNCATE | ARC_OPERAND_PCREL, insert_uimm10_a32_8_s, + extract_uimm10_a32_8_s}, + + /* SIMM9_7_S mask = 0000000111111111. */ +#define SIMM9_7_S (UIMM10_A32_8_S + 1) + {9, 0, BFD_RELOC_ARC_SDA16_LD, ARC_OPERAND_SIGNED, insert_simm9_7_s, + extract_simm9_7_s}, + + /* UIMM6_A16_11_S mask = 0000000000011111. */ +#define UIMM6_A16_11_S (SIMM9_7_S + 1) + {6, 0, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_ALIGNED16 + | ARC_OPERAND_TRUNCATE | ARC_OPERAND_IGNORE, insert_uimm6_a16_11_s, + extract_uimm6_a16_11_s}, + + /* UIMM5_A32_11_S mask = 0000020000011000. */ +#define UIMM5_A32_11_S (UIMM6_A16_11_S + 1) + {5, 0, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_ALIGNED32 + | ARC_OPERAND_TRUNCATE | ARC_OPERAND_IGNORE, insert_uimm5_a32_11_s, + extract_uimm5_a32_11_s}, + + /* SIMM11_A32_13_S mask = 0000022222200111. */ +#define SIMM11_A32_13_S (UIMM5_A32_11_S + 1) + {11, 0, BFD_RELOC_ARC_SDA16_ST2, ARC_OPERAND_SIGNED | ARC_OPERAND_ALIGNED32 + | ARC_OPERAND_TRUNCATE, insert_simm11_a32_13_s, extract_simm11_a32_13_s}, + + /* UIMM7_13_S mask = 0000000022220111. */ +#define UIMM7_13_S (SIMM11_A32_13_S + 1) + {7, 0, 0, ARC_OPERAND_UNSIGNED, insert_uimm7_13_s, extract_uimm7_13_s}, + + /* UIMM6_A16_21 mask = 00000000000000000000011111000000. */ +#define UIMM6_A16_21 (UIMM7_13_S + 1) + {6, 0, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_ALIGNED16 + | ARC_OPERAND_TRUNCATE, insert_uimm6_a16_21, extract_uimm6_a16_21}, + + /* UIMM7_11_S mask = 0000022200011110. */ +#define UIMM7_11_S (UIMM6_A16_21 + 1) + {7, 0, 0, ARC_OPERAND_UNSIGNED, insert_uimm7_11_s, extract_uimm7_11_s}, + + /* UIMM7_A16_20 mask = 00000000000000000000111111000000. */ +#define UIMM7_A16_20 (UIMM7_11_S + 1) + {7, 0, -UIMM7_A16_20, ARC_OPERAND_UNSIGNED | ARC_OPERAND_ALIGNED16 + | ARC_OPERAND_TRUNCATE | ARC_OPERAND_PCREL, insert_uimm7_a16_20, + extract_uimm7_a16_20}, + + /* SIMM13_A16_20 mask = 00000000000000000000111111222222. */ +#define SIMM13_A16_20 (UIMM7_A16_20 + 1) + {13, 0, BFD_RELOC_ARC_S13H_PCREL, ARC_OPERAND_SIGNED | ARC_OPERAND_ALIGNED16 + | ARC_OPERAND_TRUNCATE | ARC_OPERAND_PCREL, insert_simm13_a16_20, + extract_simm13_a16_20}, + + /* UIMM8_8_S mask = 0000000011111111. */ +#define UIMM8_8_S (SIMM13_A16_20 + 1) + {8, 0, 0, ARC_OPERAND_UNSIGNED, insert_uimm8_8_s, extract_uimm8_8_s}, + + /* The same as above but used for relaxation. */ +#define UIMM8_8R_S (UIMM8_8_S + 1) + {8, 0, -UIMM8_8R_S, ARC_OPERAND_UNSIGNED | ARC_OPERAND_PCREL, + insert_uimm8_8_s, extract_uimm8_8_s}, + + /* W6 mask = 00000000000000000000111111000000. */ +#define W6 (UIMM8_8R_S + 1) + {6, 0, 0, ARC_OPERAND_SIGNED, insert_w6, extract_w6}, + + /* UIMM6_5_S mask = 0000011111100000. */ +#define UIMM6_5_S (W6 + 1) + {6, 0, 0, ARC_OPERAND_UNSIGNED, insert_uimm6_5_s, extract_uimm6_5_s}, + + /* ARC NPS400 Support: See comment near head of file. */ +#define NPS_R_DST_3B (UIMM6_5_S + 1) + { 3, 24, 0, ARC_OPERAND_IR | ARC_OPERAND_NCHK, + insert_nps_3bit_reg_at_24_dst, extract_nps_3bit_reg_at_24_dst }, + +#define NPS_R_SRC1_3B (NPS_R_DST_3B + 1) + { 3, 24, 0, ARC_OPERAND_IR | ARC_OPERAND_DUPLICATE | ARC_OPERAND_NCHK, + insert_nps_3bit_reg_at_24_dst, extract_nps_3bit_reg_at_24_dst }, + +#define NPS_R_SRC2_3B (NPS_R_SRC1_3B + 1) + { 3, 21, 0, ARC_OPERAND_IR | ARC_OPERAND_NCHK, + insert_nps_3bit_reg_at_21_src2, extract_nps_3bit_reg_at_21_src2 }, + +#define NPS_R_DST (NPS_R_SRC2_3B + 1) + { 6, 21, 0, ARC_OPERAND_IR, NULL, NULL }, + +#define NPS_R_SRC1 (NPS_R_DST + 1) + { 6, 21, 0, ARC_OPERAND_IR | ARC_OPERAND_DUPLICATE, NULL, NULL }, + +#define NPS_BITOP_DST_POS (NPS_R_SRC1 + 1) + { 5, 5, 0, ARC_OPERAND_UNSIGNED, 0, 0 }, + +#define NPS_BITOP_SRC_POS (NPS_BITOP_DST_POS + 1) + { 5, 0, 0, ARC_OPERAND_UNSIGNED, 0, 0 }, + +#define NPS_BITOP_SIZE (NPS_BITOP_SRC_POS + 1) + { 5, 10, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, + insert_nps_bitop_size, extract_nps_bitop_size }, + +#define NPS_BITOP_DST_POS_SZ (NPS_BITOP_SIZE + 1) + { 5, 0, 0, ARC_OPERAND_UNSIGNED, + insert_nps_dst_pos_and_size, extract_nps_dst_pos_and_size }, + +#define NPS_BITOP_SIZE_2B (NPS_BITOP_DST_POS_SZ + 1) + { 0, 0, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, + insert_nps_bitop_size_2b, extract_nps_bitop_size_2b }, + +#define NPS_BITOP_UIMM8 (NPS_BITOP_SIZE_2B + 1) + { 8, 0, 0, ARC_OPERAND_UNSIGNED, + insert_nps_bitop_uimm8, extract_nps_bitop_uimm8 }, + +#define NPS_UIMM16 (NPS_BITOP_UIMM8 + 1) + { 16, 0, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, + +#define NPS_SIMM16 (NPS_UIMM16 + 1) + { 16, 0, 0, ARC_OPERAND_SIGNED, NULL, NULL }, + +#define NPS_RFLT_UIMM6 (NPS_SIMM16 + 1) + { 6, 6, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, + insert_nps_rflt_uimm6, extract_nps_rflt_uimm6 }, + +#define NPS_XLDST_UIMM16 (NPS_RFLT_UIMM6 + 1) + { 16, 0, BFD_RELOC_ARC_NPS_CMEM16, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, + insert_nps_cmem_uimm16, extract_nps_cmem_uimm16 }, + +#define NPS_SRC2_POS (NPS_XLDST_UIMM16 + 1) + { 0, 0, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, + insert_nps_src2_pos, extract_nps_src2_pos }, + +#define NPS_SRC1_POS (NPS_SRC2_POS + 1) + { 0, 0, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, + insert_nps_src1_pos, extract_nps_src1_pos }, + +#define NPS_ADDB_SIZE (NPS_SRC1_POS + 1) + { 0, 0, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, + insert_nps_addb_size, extract_nps_addb_size }, + +#define NPS_ANDB_SIZE (NPS_ADDB_SIZE + 1) + { 0, 0, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, + insert_nps_andb_size, extract_nps_andb_size }, + +#define NPS_FXORB_SIZE (NPS_ANDB_SIZE + 1) + { 0, 0, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, + insert_nps_fxorb_size, extract_nps_fxorb_size }, + +#define NPS_WXORB_SIZE (NPS_FXORB_SIZE + 1) + { 0, 0, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, + insert_nps_wxorb_size, extract_nps_wxorb_size }, + +#define NPS_R_XLDST (NPS_WXORB_SIZE + 1) + { 6, 5, 0, ARC_OPERAND_IR, NULL, NULL }, + +#define NPS_DIV_UIMM4 (NPS_R_XLDST + 1) + { 4, 5, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, + +#define NPS_QCMP_SIZE (NPS_DIV_UIMM4 + 1) + { 0, 0, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, + insert_nps_qcmp_size, extract_nps_qcmp_size }, + +#define NPS_QCMP_M1 (NPS_QCMP_SIZE + 1) + { 1, 14, 0, ARC_OPERAND_UNSIGNED, NULL, extract_nps_qcmp_m1 }, + +#define NPS_QCMP_M2 (NPS_QCMP_M1 + 1) + { 1, 15, 0, ARC_OPERAND_UNSIGNED, NULL, extract_nps_qcmp_m2 }, + +#define NPS_QCMP_M3 (NPS_QCMP_M2 + 1) + { 4, 5, 0, ARC_OPERAND_UNSIGNED, NULL, extract_nps_qcmp_m3 }, + +#define NPS_CALC_ENTRY_SIZE (NPS_QCMP_M3 + 1) + { 0, 0, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, + insert_nps_calc_entry_size, extract_nps_calc_entry_size }, + +#define NPS_R_DST_3B_SHORT (NPS_CALC_ENTRY_SIZE + 1) + { 3, 8, 0, ARC_OPERAND_IR | ARC_OPERAND_NCHK, + insert_nps_3bit_reg_at_8_dst, extract_nps_3bit_reg_at_8_dst }, + +#define NPS_R_SRC1_3B_SHORT (NPS_R_DST_3B_SHORT + 1) + { 3, 8, 0, ARC_OPERAND_IR | ARC_OPERAND_DUPLICATE | ARC_OPERAND_NCHK, + insert_nps_3bit_reg_at_8_dst, extract_nps_3bit_reg_at_8_dst }, + +#define NPS_R_SRC2_3B_SHORT (NPS_R_SRC1_3B_SHORT + 1) + { 3, 5, 0, ARC_OPERAND_IR | ARC_OPERAND_NCHK, + insert_nps_3bit_reg_at_5_src2, extract_nps_3bit_reg_at_5_src2 }, + +#define NPS_BITOP_SIZE2 (NPS_R_SRC2_3B_SHORT + 1) + { 5, 25, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, + insert_nps_bitop2_size, extract_nps_bitop2_size }, + +#define NPS_BITOP_SIZE1 (NPS_BITOP_SIZE2 + 1) + { 5, 20, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, + insert_nps_bitop1_size, extract_nps_bitop1_size }, + +#define NPS_BITOP_DST_POS3_POS4 (NPS_BITOP_SIZE1 + 1) + { 5, 0, 0, ARC_OPERAND_UNSIGNED, + insert_nps_bitop_dst_pos3_pos4, extract_nps_bitop_dst_pos3_pos4 }, + +#define NPS_BITOP_DST_POS4 (NPS_BITOP_DST_POS3_POS4 + 1) + { 5, 42, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, + +#define NPS_BITOP_DST_POS3 (NPS_BITOP_DST_POS4 + 1) + { 5, 37, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, + +#define NPS_BITOP_DST_POS2 (NPS_BITOP_DST_POS3 + 1) + { 5, 15, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, + +#define NPS_BITOP_DST_POS1 (NPS_BITOP_DST_POS2 + 1) + { 5, 10, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, + +#define NPS_BITOP_SRC_POS4 (NPS_BITOP_DST_POS1 + 1) + { 5, 32, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, + +#define NPS_BITOP_SRC_POS3 (NPS_BITOP_SRC_POS4 + 1) + { 5, 20, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, + +#define NPS_BITOP_SRC_POS2 (NPS_BITOP_SRC_POS3 + 1) + { 5, 5, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, + +#define NPS_BITOP_SRC_POS1 (NPS_BITOP_SRC_POS2 + 1) + { 5, 0, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, + +#define NPS_BITOP_MOD4 (NPS_BITOP_SRC_POS1 + 1) + { 2, 0, 0, ARC_OPERAND_UNSIGNED, + insert_nps_bitop_mod4, extract_nps_bitop_mod4 }, + +#define NPS_BITOP_MOD3 (NPS_BITOP_MOD4 + 1) + { 2, 29, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, + +#define NPS_BITOP_MOD2 (NPS_BITOP_MOD3 + 1) + { 2, 27, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, + +#define NPS_BITOP_MOD1 (NPS_BITOP_MOD2 + 1) + { 2, 25, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, + +#define NPS_BITOP_INS_EXT (NPS_BITOP_MOD1 + 1) + { 5, 20, 0, ARC_OPERAND_UNSIGNED, + insert_nps_bitop_ins_ext, extract_nps_bitop_ins_ext }, + +#define NPS_FIELD_START_POS (NPS_BITOP_INS_EXT + 1) + { 3, 3, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, + +#define NPS_FIELD_SIZE (NPS_FIELD_START_POS + 1) + { 3, 6, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, + insert_nps_field_size, extract_nps_field_size }, + +#define NPS_SHIFT_FACTOR (NPS_FIELD_SIZE + 1) + { 3, 9, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, + insert_nps_shift_factor, extract_nps_shift_factor }, + +#define NPS_BITS_TO_SCRAMBLE (NPS_SHIFT_FACTOR + 1) + { 3, 12, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, + insert_nps_bits_to_scramble, extract_nps_bits_to_scramble }, + +#define NPS_SRC2_POS_5B (NPS_BITS_TO_SCRAMBLE + 1) + { 5, 5, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, + +#define NPS_BDLEN_MAX_LEN (NPS_SRC2_POS_5B + 1) + { 8, 5, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, + insert_nps_bdlen_max_len, extract_nps_bdlen_max_len }, + +#define NPS_MIN_HOFS (NPS_BDLEN_MAX_LEN + 1) + { 4, 6, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, + insert_nps_min_hofs, extract_nps_min_hofs }, + +#define NPS_PSBC (NPS_MIN_HOFS + 1) + { 1, 11, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, + +#define NPS_DPI_DST (NPS_PSBC + 1) + { 5, 11, 0, ARC_OPERAND_IR, NULL, NULL }, + + /* NPS_DPI_SRC1_3B is similar to NPS_R_SRC1_3B + but doesn't duplicate an operand. */ +#define NPS_DPI_SRC1_3B (NPS_DPI_DST + 1) + { 3, 24, 0, ARC_OPERAND_IR | ARC_OPERAND_NCHK, + insert_nps_3bit_reg_at_24_dst, extract_nps_3bit_reg_at_24_dst }, + +#define NPS_HASH_WIDTH (NPS_DPI_SRC1_3B + 1) + { 5, 6, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, + insert_nps_hash_width, extract_nps_hash_width }, + +#define NPS_HASH_PERM (NPS_HASH_WIDTH + 1) + { 3, 2, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, + +#define NPS_HASH_NONLINEAR (NPS_HASH_PERM + 1) + { 1, 5, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, + +#define NPS_HASH_BASEMAT (NPS_HASH_NONLINEAR + 1) + { 2, 0, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, + +#define NPS_HASH_LEN (NPS_HASH_BASEMAT + 1) + { 3, 2, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, + insert_nps_hash_len, extract_nps_hash_len }, + +#define NPS_HASH_OFS (NPS_HASH_LEN + 1) + { 2, 0, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, + +#define NPS_HASH_BASEMAT2 (NPS_HASH_OFS + 1) + { 1, 5, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, + +#define NPS_E4BY_INDEX0 (NPS_HASH_BASEMAT2 + 1) + { 3, 8, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, + +#define NPS_E4BY_INDEX1 (NPS_E4BY_INDEX0 + 1) + { 3, 5, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, + +#define NPS_E4BY_INDEX2 (NPS_E4BY_INDEX1 + 1) + { 3, 2, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, + +#define NPS_E4BY_INDEX3 (NPS_E4BY_INDEX2 + 1) + { 2, 0, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, + insert_nps_index3, extract_nps_index3 }, + +#define COLON (NPS_E4BY_INDEX3 + 1) + { 0, 0, 0, ARC_OPERAND_COLON | ARC_OPERAND_FAKE, NULL, NULL }, + +#define NPS_BD (COLON + 1) + { 0, 0, 0, ARC_OPERAND_ADDRTYPE | ARC_OPERAND_NCHK, + insert_nps_bd, extract_nps_bd }, + +#define NPS_JID (NPS_BD + 1) + { 0, 0, 0, ARC_OPERAND_ADDRTYPE | ARC_OPERAND_NCHK, + insert_nps_jid, extract_nps_jid }, + +#define NPS_LBD (NPS_JID + 1) + { 0, 0, 0, ARC_OPERAND_ADDRTYPE | ARC_OPERAND_NCHK, + insert_nps_lbd, extract_nps_lbd }, + +#define NPS_MBD (NPS_LBD + 1) + { 0, 0, 0, ARC_OPERAND_ADDRTYPE | ARC_OPERAND_NCHK, + insert_nps_mbd, extract_nps_mbd }, + +#define NPS_SD (NPS_MBD + 1) + { 0, 0, 0, ARC_OPERAND_ADDRTYPE | ARC_OPERAND_NCHK, + insert_nps_sd, extract_nps_sd }, + +#define NPS_SM (NPS_SD + 1) + { 0, 0, 0, ARC_OPERAND_ADDRTYPE | ARC_OPERAND_NCHK, + insert_nps_sm, extract_nps_sm }, + +#define NPS_XA (NPS_SM + 1) + { 0, 0, 0, ARC_OPERAND_ADDRTYPE | ARC_OPERAND_NCHK, + insert_nps_xa, extract_nps_xa }, + +#define NPS_XD (NPS_XA + 1) + { 0, 0, 0, ARC_OPERAND_ADDRTYPE | ARC_OPERAND_NCHK, + insert_nps_xd, extract_nps_xd }, + +#define NPS_CD (NPS_XD + 1) + { 0, 0, 0, ARC_OPERAND_ADDRTYPE | ARC_OPERAND_NCHK, + insert_nps_cd, extract_nps_cd }, + +#define NPS_CBD (NPS_CD + 1) + { 0, 0, 0, ARC_OPERAND_ADDRTYPE | ARC_OPERAND_NCHK, + insert_nps_cbd, extract_nps_cbd }, + +#define NPS_CJID (NPS_CBD + 1) + { 0, 0, 0, ARC_OPERAND_ADDRTYPE | ARC_OPERAND_NCHK, + insert_nps_cjid, extract_nps_cjid }, + +#define NPS_CLBD (NPS_CJID + 1) + { 0, 0, 0, ARC_OPERAND_ADDRTYPE | ARC_OPERAND_NCHK, + insert_nps_clbd, extract_nps_clbd }, + +#define NPS_CM (NPS_CLBD + 1) + { 0, 0, 0, ARC_OPERAND_ADDRTYPE | ARC_OPERAND_NCHK, + insert_nps_cm, extract_nps_cm }, + +#define NPS_CSD (NPS_CM + 1) + { 0, 0, 0, ARC_OPERAND_ADDRTYPE | ARC_OPERAND_NCHK, + insert_nps_csd, extract_nps_csd }, + +#define NPS_CXA (NPS_CSD + 1) + { 0, 0, 0, ARC_OPERAND_ADDRTYPE | ARC_OPERAND_NCHK, + insert_nps_cxa, extract_nps_cxa }, + +#define NPS_CXD (NPS_CXA + 1) + { 0, 0, 0, ARC_OPERAND_ADDRTYPE | ARC_OPERAND_NCHK, + insert_nps_cxd, extract_nps_cxd }, + +#define NPS_BD_TYPE (NPS_CXD + 1) + { 1, 10, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, + +#define NPS_BMU_NUM (NPS_BD_TYPE + 1) + { 3, 0, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, + insert_nps_bd_num_buff, extract_nps_bd_num_buff }, + +#define NPS_PMU_NXT_DST (NPS_BMU_NUM + 1) + { 4, 6, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, + +#define NPS_WHASH_SIZE (NPS_PMU_NXT_DST + 1) + { 6, 6, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, + insert_nps_size_16bit, extract_nps_size_16bit }, + +#define NPS_PMU_NUM_JOB (NPS_WHASH_SIZE + 1) + { 2, 6, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, + insert_nps_pmu_num_job, extract_nps_pmu_num_job }, + +#define NPS_DMA_IMM_ENTRY (NPS_PMU_NUM_JOB + 1) + { 3, 2, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, + insert_nps_imm_entry, extract_nps_imm_entry }, + +#define NPS_DMA_IMM_OFFSET (NPS_DMA_IMM_ENTRY + 1) + { 4, 10, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, + insert_nps_imm_offset, extract_nps_imm_offset }, + +#define NPS_MISC_IMM_SIZE (NPS_DMA_IMM_OFFSET + 1) + { 7, 0, 0, ARC_OPERAND_UNSIGNED , NULL, NULL }, + +#define NPS_MISC_IMM_OFFSET (NPS_MISC_IMM_SIZE + 1) + { 5, 8, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, + insert_nps_misc_imm_offset, extract_nps_misc_imm_offset }, + +#define NPS_R_DST_3B_48 (NPS_MISC_IMM_OFFSET + 1) + { 3, 40, 0, ARC_OPERAND_IR | ARC_OPERAND_NCHK, + insert_nps_3bit_reg_at_40_dst, extract_nps_3bit_reg_at_40_dst }, + +#define NPS_R_SRC1_3B_48 (NPS_R_DST_3B_48 + 1) + { 3, 40, 0, ARC_OPERAND_IR | ARC_OPERAND_DUPLICATE | ARC_OPERAND_NCHK, + insert_nps_3bit_reg_at_40_dst, extract_nps_3bit_reg_at_40_dst }, + +#define NPS_R_SRC2_3B_48 (NPS_R_SRC1_3B_48 + 1) + { 3, 37, 0, ARC_OPERAND_IR | ARC_OPERAND_NCHK, + insert_nps_3bit_reg_at_37_src2, extract_nps_3bit_reg_at_37_src2 }, + +#define NPS_R_DST_3B_64 (NPS_R_SRC2_3B_48 + 1) + { 3, 56, 0, ARC_OPERAND_IR | ARC_OPERAND_NCHK, + insert_nps_3bit_reg_at_56_dst, extract_nps_3bit_reg_at_56_dst }, + +#define NPS_R_SRC1_3B_64 (NPS_R_DST_3B_64 + 1) + { 3, 56, 0, ARC_OPERAND_IR | ARC_OPERAND_DUPLICATE | ARC_OPERAND_NCHK, + insert_nps_3bit_reg_at_56_dst, extract_nps_3bit_reg_at_56_dst }, + +#define NPS_R_SRC2_3B_64 (NPS_R_SRC1_3B_64 + 1) + { 3, 53, 0, ARC_OPERAND_IR | ARC_OPERAND_NCHK, + insert_nps_3bit_reg_at_53_src2, extract_nps_3bit_reg_at_53_src2 }, + +#define NPS_RA_64 (NPS_R_SRC2_3B_64 + 1) + { 6, 53, 0, ARC_OPERAND_IR, NULL, NULL }, + +#define NPS_RB_64 (NPS_RA_64 + 1) + { 5, 48, 0, ARC_OPERAND_IR, NULL, NULL }, + +#define NPS_RBdup_64 (NPS_RB_64 + 1) + { 5, 43, 0, ARC_OPERAND_IR | ARC_OPERAND_DUPLICATE, NULL, NULL }, + +#define NPS_RBdouble_64 (NPS_RBdup_64 + 1) + { 10, 43, 0, ARC_OPERAND_IR | ARC_OPERAND_NCHK, + insert_nps_rbdouble_64, extract_nps_rbdouble_64 }, + +#define NPS_RC_64 (NPS_RBdouble_64 + 1) + { 5, 43, 0, ARC_OPERAND_IR, NULL, NULL }, + +#define NPS_UIMM16_0_64 (NPS_RC_64 + 1) + { 16, 0, 0, ARC_OPERAND_UNSIGNED, NULL, NULL }, + +#define NPS_PROTO_SIZE (NPS_UIMM16_0_64 + 1) + { 6, 16, 0, ARC_OPERAND_UNSIGNED | ARC_OPERAND_NCHK, + insert_nps_proto_size, extract_nps_proto_size }, + + /* ARC64's floating point registers. */ +#define FA (NPS_PROTO_SIZE + 1) + { 5, 6, 0, ARC_OPERAND_IR | ARC_OPERAND_FP, 0, 0 }, +#define FB (FA + 1) + { 5, 0, 0, ARC_OPERAND_IR | ARC_OPERAND_FP, 0, 0 }, +#define FC (FB + 1) + { 5, 0, 0, ARC_OPERAND_IR | ARC_OPERAND_FP, insert_fs2, extract_fs2 }, +#define FD (FC + 1) + { 5, 19, 0, ARC_OPERAND_IR | ARC_OPERAND_FP, 0, 0}, + + /* Double 128 registers, the same like above but only the odd ones + allowed. */ +#define FDA (FD + 1) + { 5, 6, 0, ARC_OPERAND_IR | ARC_OPERAND_FP | ARC_OPERAND_TRUNCATE, 0, 0 }, +#define FDB (FDA + 1) + { 5, 0, 0, ARC_OPERAND_IR | ARC_OPERAND_FP | ARC_OPERAND_TRUNCATE, 0, 0 }, +#define FDC (FDB + 1) + { 5, 0, 0, ARC_OPERAND_IR | ARC_OPERAND_FP | ARC_OPERAND_TRUNCATE, + insert_fs2, extract_fs2 }, +#define FDD (FDC + 1) + { 5, 19, 0, ARC_OPERAND_IR | ARC_OPERAND_FP | ARC_OPERAND_TRUNCATE, 0, 0}, + + /* 5bit integer registers used by fp instructions. */ +#define FRD (FDD + 1) + { 5, 6, 0, ARC_OPERAND_IR, 0, 0 }, +#define FRB (FRD + 1) + { 5, 0, 0, ARC_OPERAND_IR, insert_fs2, extract_fs2 }, + + /* 5bit unsigned immediate used by vfext and vfins. */ +#define UIMM5_FP (FRB + 1) + {5, 0, 0, ARC_OPERAND_UNSIGNED, insert_fs2, extract_fs2 } + +}; +const unsigned arc_num_operands = ARRAY_SIZE (arc_operands); + +const unsigned arc_Toperand = FKT_T; +const unsigned arc_NToperand = FKT_NT; + +const unsigned char arg_none[] = { 0 }; +const unsigned char arg_32bit_rarbrc[] = { RA, RB, RC }; +const unsigned char arg_32bit_zarbrc[] = { ZA, RB, RC }; +const unsigned char arg_32bit_rbrbrc[] = { RB, RBdup, RC }; +const unsigned char arg_32bit_rarbu6[] = { RA, RB, UIMM6_20 }; +const unsigned char arg_32bit_zarbu6[] = { ZA, RB, UIMM6_20 }; +const unsigned char arg_32bit_rbrbu6[] = { RB, RBdup, UIMM6_20 }; +const unsigned char arg_32bit_rbrbs12[] = { RB, RBdup, SIMM12_20 }; +const unsigned char arg_32bit_ralimmrc[] = { RA, LIMM, RC }; +const unsigned char arg_32bit_rarblimm[] = { RA, RB, LIMM }; +const unsigned char arg_32bit_zalimmrc[] = { ZA, LIMM, RC }; +const unsigned char arg_32bit_zarblimm[] = { ZA, RB, LIMM }; + +const unsigned char arg_32bit_rbrblimm[] = { RB, RBdup, LIMM }; +const unsigned char arg_32bit_ralimmu6[] = { RA, LIMM, UIMM6_20 }; +const unsigned char arg_32bit_zalimmu6[] = { ZA, LIMM, UIMM6_20 }; + +const unsigned char arg_32bit_zalimms12[] = { ZA, LIMM, SIMM12_20 }; +const unsigned char arg_32bit_ralimmlimm[] = { RA, LIMM, LIMMdup }; +const unsigned char arg_32bit_zalimmlimm[] = { ZA, LIMM, LIMMdup }; + +const unsigned char arg_32bit_rbrc[] = { RB, RC }; +const unsigned char arg_32bit_zarc[] = { ZA, RC }; +const unsigned char arg_32bit_rbu6[] = { RB, UIMM6_20 }; +const unsigned char arg_32bit_zau6[] = { ZA, UIMM6_20 }; +const unsigned char arg_32bit_rblimm[] = { RB, LIMM }; +const unsigned char arg_32bit_zalimm[] = { ZA, LIMM }; + +const unsigned char arg_32bit_limmrc[] = { LIMM, RC }; +const unsigned char arg_32bit_limmu6[] = { LIMM, UIMM6_20 }; +const unsigned char arg_32bit_limms12[] = { LIMM, SIMM12_20 }; +const unsigned char arg_32bit_limmlimm[] = { LIMM, LIMMdup }; + +const unsigned char arg_32bit_rc[] = { RC }; +const unsigned char arg_32bit_u6[] = { UIMM6_20 }; +const unsigned char arg_32bit_limm[] = { LIMM }; + +/* List with special cases instructions and the applicable flags. */ +const struct arc_flag_special arc_flag_special_cases[] = +{ + { "b", { F_ALWAYS, F_RA, F_EQUAL, F_ZERO, F_NOTEQUAL, F_NOTZERO, F_POZITIVE, + F_PL, F_NEGATIVE, F_MINUS, F_CARRY, F_CARRYSET, F_LOWER, F_CARRYCLR, + F_NOTCARRY, F_HIGHER, F_OVERFLOWSET, F_OVERFLOW, F_NOTOVERFLOW, + F_OVERFLOWCLR, F_GT, F_GE, F_LT, F_LE, F_HI, F_LS, F_PNZ, F_NJ, F_NM, + F_NO_T, F_NULL } }, + { "bl", { F_ALWAYS, F_RA, F_EQUAL, F_ZERO, F_NOTEQUAL, F_NOTZERO, F_POZITIVE, + F_PL, F_NEGATIVE, F_MINUS, F_CARRY, F_CARRYSET, F_LOWER, F_CARRYCLR, + F_NOTCARRY, F_HIGHER, F_OVERFLOWSET, F_OVERFLOW, F_NOTOVERFLOW, + F_OVERFLOWCLR, F_GT, F_GE, F_LT, F_LE, F_HI, F_LS, F_PNZ, F_NULL } }, + { "br", { F_ALWAYS, F_RA, F_EQUAL, F_ZERO, F_NOTEQUAL, F_NOTZERO, F_POZITIVE, + F_PL, F_NEGATIVE, F_MINUS, F_CARRY, F_CARRYSET, F_LOWER, F_CARRYCLR, + F_NOTCARRY, F_HIGHER, F_OVERFLOWSET, F_OVERFLOW, F_NOTOVERFLOW, + F_OVERFLOWCLR, F_GT, F_GE, F_LT, F_LE, F_HI, F_LS, F_PNZ, F_NULL } }, + { "j", { F_ALWAYS, F_RA, F_EQUAL, F_ZERO, F_NOTEQUAL, F_NOTZERO, F_POZITIVE, + F_PL, F_NEGATIVE, F_MINUS, F_CARRY, F_CARRYSET, F_LOWER, F_CARRYCLR, + F_NOTCARRY, F_HIGHER, F_OVERFLOWSET, F_OVERFLOW, F_NOTOVERFLOW, + F_OVERFLOWCLR, F_GT, F_GE, F_LT, F_LE, F_HI, F_LS, F_PNZ, F_NULL } }, + { "jl", { F_ALWAYS, F_RA, F_EQUAL, F_ZERO, F_NOTEQUAL, F_NOTZERO, F_POZITIVE, + F_PL, F_NEGATIVE, F_MINUS, F_CARRY, F_CARRYSET, F_LOWER, F_CARRYCLR, + F_NOTCARRY, F_HIGHER, F_OVERFLOWSET, F_OVERFLOW, F_NOTOVERFLOW, + F_OVERFLOWCLR, F_GT, F_GE, F_LT, F_LE, F_HI, F_LS, F_PNZ, F_NULL } }, + { "lp", { F_ALWAYS, F_RA, F_EQUAL, F_ZERO, F_NOTEQUAL, F_NOTZERO, F_POZITIVE, + F_PL, F_NEGATIVE, F_MINUS, F_CARRY, F_CARRYSET, F_LOWER, F_CARRYCLR, + F_NOTCARRY, F_HIGHER, F_OVERFLOWSET, F_OVERFLOW, F_NOTOVERFLOW, + F_OVERFLOWCLR, F_GT, F_GE, F_LT, F_LE, F_HI, F_LS, F_PNZ, F_NULL } }, + { "set", { F_ALWAYS, F_RA, F_EQUAL, F_ZERO, F_NOTEQUAL, F_NOTZERO, F_POZITIVE, + F_PL, F_NEGATIVE, F_MINUS, F_CARRY, F_CARRYSET, F_LOWER, F_CARRYCLR, + F_NOTCARRY, F_HIGHER, F_OVERFLOWSET, F_OVERFLOW, F_NOTOVERFLOW, + F_OVERFLOWCLR, F_GT, F_GE, F_LT, F_LE, F_HI, F_LS, F_PNZ, F_NULL } }, + { "ld", { F_SIZEB17, F_SIZEW17, F_H17, F_NULL } }, + { "st", { F_SIZEB1, F_SIZEW1, F_H1, F_NULL } } +}; + +const unsigned arc_num_flag_special = ARRAY_SIZE (arc_flag_special_cases); + +/* Relocations. */ +const struct arc_reloc_equiv_tab arc_reloc_equiv[] = +{ + { "sda", "ld", { F_ASFAKE, F_H1, F_NULL }, + BFD_RELOC_ARC_SDA_LDST, BFD_RELOC_ARC_SDA_LDST1 }, + { "sda", "st", { F_ASFAKE, F_H1, F_NULL }, + BFD_RELOC_ARC_SDA_LDST, BFD_RELOC_ARC_SDA_LDST1 }, + { "sda", "ld", { F_ASFAKE, F_SIZEW7, F_NULL }, + BFD_RELOC_ARC_SDA_LDST, BFD_RELOC_ARC_SDA_LDST1 }, + { "sda", "st", { F_ASFAKE, F_SIZEW7, F_NULL }, + BFD_RELOC_ARC_SDA_LDST, BFD_RELOC_ARC_SDA_LDST1 }, + + /* Next two entries will cover the undefined behavior ldb/stb with + address scaling. */ + { "sda", "ld", { F_ASFAKE, F_SIZEB7, F_NULL }, + BFD_RELOC_ARC_SDA_LDST, BFD_RELOC_ARC_SDA_LDST }, + { "sda", "st", { F_ASFAKE, F_SIZEB7, F_NULL }, + BFD_RELOC_ARC_SDA_LDST, BFD_RELOC_ARC_SDA_LDST}, + + { "sda", "ld", { F_ASFAKE, F_NULL }, + BFD_RELOC_ARC_SDA_LDST, BFD_RELOC_ARC_SDA_LDST2 }, + { "sda", "st", { F_ASFAKE, F_NULL }, + BFD_RELOC_ARC_SDA_LDST, BFD_RELOC_ARC_SDA_LDST2}, + { "sda", "ldd", { F_ASFAKE, F_NULL }, + BFD_RELOC_ARC_SDA_LDST, BFD_RELOC_ARC_SDA_LDST2 }, + { "sda", "std", { F_ASFAKE, F_NULL }, + BFD_RELOC_ARC_SDA_LDST, BFD_RELOC_ARC_SDA_LDST2}, + + /* Short instructions. */ + { "sda", 0, { F_NULL }, BFD_RELOC_ARC_SDA16_LD, BFD_RELOC_ARC_SDA16_LD }, + { "sda", 0, { F_NULL }, -SIMM10_A16_7_Sbis, BFD_RELOC_ARC_SDA16_LD1 }, + { "sda", 0, { F_NULL }, BFD_RELOC_ARC_SDA16_LD2, BFD_RELOC_ARC_SDA16_LD2 }, + { "sda", 0, { F_NULL }, BFD_RELOC_ARC_SDA16_ST2, BFD_RELOC_ARC_SDA16_ST2 }, + + { "sda", 0, { F_NULL }, BFD_RELOC_ARC_32_ME, BFD_RELOC_ARC_SDA32_ME }, + { "sda", 0, { F_NULL }, BFD_RELOC_ARC_SDA_LDST, BFD_RELOC_ARC_SDA_LDST }, + + { "plt", 0, { F_NULL }, BFD_RELOC_ARC_S25H_PCREL, + BFD_RELOC_ARC_S25H_PCREL_PLT }, + { "plt", 0, { F_NULL }, BFD_RELOC_ARC_S21H_PCREL, + BFD_RELOC_ARC_S21H_PCREL_PLT }, + { "plt", 0, { F_NULL }, BFD_RELOC_ARC_S25W_PCREL, + BFD_RELOC_ARC_S25W_PCREL_PLT }, + { "plt", 0, { F_NULL }, BFD_RELOC_ARC_S21W_PCREL, + BFD_RELOC_ARC_S21W_PCREL_PLT }, + + { "plt", 0, { F_NULL }, BFD_RELOC_ARC_32_ME, BFD_RELOC_ARC_PLT32 } +}; + +const unsigned arc_num_equiv_tab = ARRAY_SIZE (arc_reloc_equiv); + +const struct arc_pseudo_insn arc_pseudo_insns[] = +{ + { "push", "st", ".aw", 5, { { RC, 0, 0, 0 }, { BRAKET, 1, 0, 1 }, + { RB, 1, 28, 2 }, { SIMM9_8, 1, -4, 3 }, + { BRAKETdup, 1, 0, 4} } }, + { "pop", "ld", ".ab", 5, { { RA, 0, 0, 0 }, { BRAKET, 1, 0, 1 }, + { RB, 1, 28, 2 }, { SIMM9_8, 1, 4, 3 }, + { BRAKETdup, 1, 0, 4} } }, + + { "brgt", "brlt", NULL, 3, { { RB, 0, 0, 1 }, { RC, 0, 0, 0 }, + { SIMM9_A16_8, 0, 0, 2 } } }, + { "brgt", "brge", NULL, 3, { { RB, 0, 0, 0 }, { UIMM6_8, 0, 1, 1 }, + { SIMM9_A16_8, 0, 0, 2 } } }, + { "brgt", "brlt", NULL, 3, { { RB, 0, 0, 1 }, { LIMM, 0, 0, 0 }, + { SIMM9_A16_8, 0, 0, 2 } } }, + { "brgt", "brlt", NULL, 3, { { LIMM, 0, 0, 1 }, { RC, 0, 0, 0 }, + { SIMM9_A16_8, 0, 0, 2 } } }, + { "brgt", "brge", NULL, 3, { { LIMM, 0, 0, 0 }, { UIMM6_8, 0, 1, 1 }, + { SIMM9_A16_8, 0, 0, 2 } } }, + + { "brhi", "brlo", NULL, 3, { { RB, 0, 0, 1 }, { RC, 0, 0, 0 }, + { SIMM9_A16_8, 0, 0, 2 } } }, + { "brhi", "brhs", NULL, 3, { { RB, 0, 0, 0 }, { UIMM6_8, 0, 1, 1 }, + { SIMM9_A16_8, 0, 0, 2 } } }, + { "brhi", "brlo", NULL, 3, { { RB, 0, 0, 1 }, { LIMM, 0, 0, 0 }, + { SIMM9_A16_8, 0, 0, 2 } } }, + { "brhi", "brlo", NULL, 3, { { LIMM, 0, 0, 1 }, { RC, 0, 0, 0 }, + { SIMM9_A16_8, 0, 0, 2 } } }, + { "brhi", "brhs", NULL, 3, { { LIMM, 0, 0, 0 }, { UIMM6_8, 0, 1, 1 }, + { SIMM9_A16_8, 0, 0, 2 } } }, + + { "brle", "brge", NULL, 3, { { RB, 0, 0, 1 }, { RC, 0, 0, 0 }, + { SIMM9_A16_8, 0, 0, 2 } } }, + { "brle", "brlt", NULL, 3, { { RB, 0, 0, 0 }, { UIMM6_8, 0, 1, 1 }, + { SIMM9_A16_8, 0, 0, 2 } } }, + { "brle", "brge", NULL, 3, { { RB, 0, 0, 1 }, { LIMM, 0, 0, 0 }, + { SIMM9_A16_8, 0, 0, 2 } } }, + { "brle", "brge", NULL, 3, { { LIMM, 0, 0, 1 }, { RC, 0, 0, 0 }, + { SIMM9_A16_8, 0, 0, 2 } } }, + { "brle", "brlt", NULL, 3, { { LIMM, 0, 0, 0 }, { UIMM6_8, 0, 1, 1 }, + { SIMM9_A16_8, 0, 0, 2 } } }, + + { "brls", "brhs", NULL, 3, { { RB, 0, 0, 1 }, { RC, 0, 0, 0 }, + { SIMM9_A16_8, 0, 0, 2 } } }, + { "brls", "brlo", NULL, 3, { { RB, 0, 0, 0 }, { UIMM6_8, 0, 1, 1 }, + { SIMM9_A16_8, 0, 0, 2 } } }, + { "brls", "brhs", NULL, 3, { { RB, 0, 0, 1 }, { LIMM, 0, 0, 0 }, + { SIMM9_A16_8, 0, 0, 2 } } }, + { "brls", "brhs", NULL, 3, { { LIMM, 0, 0, 1 }, { RC, 0, 0, 0 }, + { SIMM9_A16_8, 0, 0, 2 } } }, + { "brls", "brlo", NULL, 3, { { LIMM, 0, 0, 0 }, { UIMM6_8, 0, 1, 1 }, + { SIMM9_A16_8, 0, 0, 2 } } }, +}; + +const unsigned arc_num_pseudo_insn = + sizeof (arc_pseudo_insns) / sizeof (*arc_pseudo_insns); + +/* ARC64 pseudo instructions. */ +const struct arc_pseudo_insn arc64_pseudo_insns[] = +{ + { "pushl", "stl", ".aw", 5, { { RC, 0, 0, 0 }, { BRAKET, 1, 0, 1 }, + { RB, 1, 28, 2 }, { SIMM9_8, 1, -8, 3 }, + { BRAKETdup, 1, 0, 4} } }, + { "popl", "ldl", ".ab", 5, { { RA, 0, 0, 0 }, { BRAKET, 1, 0, 1 }, + { RB, 1, 28, 2 }, { SIMM9_8, 1, 8, 3 }, + { BRAKETdup, 1, 0, 4} } }, +}; + +const unsigned arc64_num_pseudo_insn = + sizeof (arc64_pseudo_insns) / sizeof (*arc64_pseudo_insns); + +const struct arc_aux_reg arc_aux_regs[] = +{ +#undef DEF +#define DEF(ADDR, CPU, SUBCLASS, NAME) \ + { ADDR, CPU, SUBCLASS, #NAME, sizeof (#NAME)-1 }, + +#include "arc-regs.h" + +#undef DEF +}; + +const unsigned arc_num_aux_regs = ARRAY_SIZE (arc_aux_regs); + +/* NOTE: The order of this array MUST be consistent with 'enum + arc_rlx_types' located in tc-arc.h! */ +const struct arc_opcode arc_relax_opcodes[] = +{ + { NULL, 0x0, 0x0, 0x0, ARITH, NONE, { UNUSED }, { 0 } }, + + /* bl_s s13 11111sssssssssss. */ + { "bl_s", 0x0000F800, 0x0000F800, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 + | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, BRANCH, NONE, + { SIMM13_A32_5_S }, { 0 }}, + + /* bl<.d> s25 00001sssssssss10SSSSSSSSSSNRtttt. */ + { "bl", 0x08020000, 0xF8030000, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 + | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, BRANCH, NONE, + { SIMM25_A32_5 }, { C_D }}, + + /* b_s s10 1111000sssssssss. */ + { "b_s", 0x0000F000, 0x0000FE00, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 + | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, BRANCH, NONE, + { SIMM10_A16_7_S }, { 0 }}, + + /* b<.d> s25 00000ssssssssss1SSSSSSSSSSNRtttt. */ + { "b", 0x00010000, 0xF8010000, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 + | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, BRANCH, NONE, + { SIMM25_A16_5 }, { C_D }}, + + /* add_s c,b,u3 01101bbbccc00uuu. */ + { "add_s", 0x00006800, 0x0000F818, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 + | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, ARITH, NONE, + { RC_S, RB_S, UIMM3_13R_S }, { 0 }}, + + /* add<.f> a,b,u6 00100bbb01000000FBBBuuuuuuAAAAAA. */ + { "add", 0x20400000, 0xF8FF0000, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 + | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, ARITH, NONE, + { RA, RB, UIMM6_20R }, { C_F }}, + + /* add<.f> a,b,limm 00100bbb00000000FBBB111110AAAAAA. */ + { "add", 0x20000F80, 0xF8FF0FC0, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 + | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, ARITH, NONE, + { RA, RB, LIMM }, { C_F }}, + + /* ld_s c,b,u7 10000bbbcccuuuuu. */ + { "ld_s", 0x00008000, 0x0000F800, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 + | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, MEMORY, NONE, + { RC_S, BRAKET, RB_S, UIMM7_A32_11R_S, BRAKETdup }, { 0 }}, + + /* ld<.di><.aa><.x> a,b,s9 + 00010bbbssssssssSBBBDaaZZXAAAAAA. */ + { "ld", 0x10000000, 0xF8000000, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 + | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, MEMORY, NONE, + { RA, BRAKET, RB, SIMM9_8R, BRAKETdup }, + { C_ZZ23, C_DI20, C_AA21, C_X25 }}, + + /* ld<.di><.aa><.x> a,b,limm 00100bbbaa110ZZXDBBB111110AAAAAA. */ + { "ld", 0x20300F80, 0xF8380FC0, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 + | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, MEMORY, NONE, + { RA, BRAKET, RB, LIMM, BRAKETdup }, + { C_ZZ13, C_DI16, C_AA8, C_X15 }}, + + /* mov_s b,u8 11011bbbuuuuuuuu. */ + { "mov_s", 0x0000D800, 0x0000F800, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 + | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, MEMORY, NONE, + { RB_S, UIMM8_8R_S }, { 0 }}, + + /* mov<.f> b,s12 00100bbb10001010FBBBssssssSSSSSS. */ + { "mov", 0x208A0000, 0xF8FF0000, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 + | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, MEMORY, NONE, + { RB, SIMM12_20R }, { C_F }}, + + /* mov<.f> b,limm 00100bbb00001010FBBB111110RRRRRR. */ + { "mov", 0x200A0F80, 0xF8FF0FC0, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 + | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, MEMORY, NONE, + { RB, LIMM }, { C_F }}, + + /* sub_s c,b,u3 01101bbbccc01uuu. */ + { "sub_s", 0x00006808, 0x0000F818, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 + | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, ARITH, NONE, + { RC_S, RB_S, UIMM3_13R_S }, { 0 }}, + + /* sub<.f> a,b,u6 00100bbb01000010FBBBuuuuuuAAAAAA. */ + { "sub", 0x20420000, 0xF8FF0000, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 + | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, ARITH, NONE, + { RA, RB, UIMM6_20R }, { C_F }}, + + /* sub<.f> a,b,limm 00100bbb00000010FBBB111110AAAAAA. */ + { "sub", 0x20020F80, 0xF8FF0FC0, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 + | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, ARITH, NONE, + { RA, RB, LIMM }, { C_F }}, + + /* mpy<.f> a,b,u6 00100bbb01011010FBBBuuuuuuAAAAAA. */ + { "mpy", 0x205A0000, 0xF8FF0000, ARC_OPCODE_ARC700 | ARC_OPCODE_ARCv2EM + | ARC_OPCODE_ARCv2HS, ARITH, MPY6E, { RA, RB, UIMM6_20R }, { C_F }}, + + /* mpy<.f> a,b,limm 00100bbb00011010FBBB111110AAAAAA. */ + { "mpy", 0x201A0F80, 0xF8FF0FC0, ARC_OPCODE_ARC700 | ARC_OPCODE_ARCv2EM + | ARC_OPCODE_ARCv2HS, ARITH, MPY6E, { RA, RB, LIMM }, { C_F }}, + + /* mov<.f><.cc> b,u6 00100bbb11001010FBBBuuuuuu1QQQQQ. */ + { "mov", 0x20CA0020, 0xF8FF0020, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 + | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, MEMORY, NONE, + { RB, UIMM6_20R }, { C_F, C_CC }}, + + /* mov<.f><.cc> b,limm 00100bbb11001010FBBB1111100QQQQQ. */ + { "mov", 0x20CA0F80, 0xF8FF0FE0, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 + | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, MEMORY, NONE, + { RB, LIMM }, { C_F, C_CC }}, + + /* add<.f><.cc> b,b,u6 00100bbb11000000FBBBuuuuuu1QQQQQ. */ + { "add", 0x20C00020, 0xF8FF0020, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 + | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, ARITH, NONE, + { RB, RBdup, UIMM6_20R }, { C_F, C_CC }}, + + /* add<.f><.cc> b,b,limm 00100bbb11000000FBBB1111100QQQQQ. */ + { "add", 0x20C00F80, 0xF8FF0FE0, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 + | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, ARITH, NONE, + { RB, RBdup, LIMM }, { C_F, C_CC }} +}; + +const unsigned arc_num_relax_opcodes = ARRAY_SIZE (arc_relax_opcodes); + +/* Return length of an opcode in bytes. */ + +int +arc_opcode_len (const struct arc_opcode *opcode) +{ + if (opcode->mask < 0x10000ull) + return 2; + + if (opcode->mask < 0x100000000ull) + return 4; + + if (opcode->mask < 0x1000000000000ull) + return 6; + + return 8; +} diff --git a/opcodes/configure b/opcodes/configure index 6690a502b2f2..c2d677f223e1 100755 --- a/opcodes/configure +++ b/opcodes/configure @@ -12492,6 +12492,7 @@ if test x${all_targets} = xfalse ; then bfd_aarch64_arch) ta="$ta aarch64-asm.lo aarch64-dis.lo aarch64-opc.lo aarch64-asm-2.lo aarch64-dis-2.lo aarch64-opc-2.lo" ;; bfd_alpha_arch) ta="$ta alpha-dis.lo alpha-opc.lo" ;; bfd_arc_arch) ta="$ta arc-dis.lo arc-opc.lo arc-ext.lo" ;; + bfd_arc64_arch) ta="$ta arc-dis.lo arc64-opc.lo arc-ext.lo" ;; bfd_arm_arch) ta="$ta arm-dis.lo" ;; bfd_avr_arch) ta="$ta avr-dis.lo" ;; bfd_bfin_arch) ta="$ta bfin-dis.lo" ;; diff --git a/opcodes/configure.ac b/opcodes/configure.ac index e1dc8de27923..7871cef4a605 100644 --- a/opcodes/configure.ac +++ b/opcodes/configure.ac @@ -264,6 +264,7 @@ if test x${all_targets} = xfalse ; then bfd_aarch64_arch) ta="$ta aarch64-asm.lo aarch64-dis.lo aarch64-opc.lo aarch64-asm-2.lo aarch64-dis-2.lo aarch64-opc-2.lo" ;; bfd_alpha_arch) ta="$ta alpha-dis.lo alpha-opc.lo" ;; bfd_arc_arch) ta="$ta arc-dis.lo arc-opc.lo arc-ext.lo" ;; + bfd_arc64_arch) ta="$ta arc-dis.lo arc64-opc.lo arc-ext.lo" ;; bfd_arm_arch) ta="$ta arm-dis.lo" ;; bfd_avr_arch) ta="$ta avr-dis.lo" ;; bfd_bfin_arch) ta="$ta bfin-dis.lo" ;; diff --git a/opcodes/disassemble.c b/opcodes/disassemble.c index e613935eff81..cba7d7ca226f 100644 --- a/opcodes/disassemble.c +++ b/opcodes/disassemble.c @@ -39,6 +39,7 @@ #define ARCH_tilegx #endif #define ARCH_arc +#define ARCH_arc64 #define ARCH_arm #define ARCH_avr #define ARCH_bfin @@ -153,6 +154,11 @@ disassembler (enum bfd_architecture a, disassemble = arc_get_disassembler (abfd); break; #endif +#ifdef ARCH_arc64 + case bfd_arch_arc64: + disassemble = arc_get_disassembler (abfd); + break; +#endif #ifdef ARCH_arm case bfd_arch_arm: if (big)