Improve TLS support on TILE-Gx/TILEPro:
authorWalter Lee <walt@tilera.com>
Sat, 25 Feb 2012 22:24:21 +0000 (22:24 +0000)
committerWalter Lee <walt@tilera.com>
Sat, 25 Feb 2012 22:24:21 +0000 (22:24 +0000)
- Add support for TLS LE references.
- Support linker optimization of TLS references.
- Delete relocations of GOT/tp relative offsets beyond 32-bits.

This brings binutils in line with the support expected in gcc 4.7, for
TILE-Gx/TILEPro.

bfd/
* reloc.c: Add BFD_RELOC_TILEPRO_TLS_GD_CALL,
BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD,
BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD,
BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD,
BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD,
BFD_RELOC_TILEPRO_TLS_IE_LOAD, BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE,
BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE,
BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_LO,
BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_LO,
BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HI,
BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HI,
BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HA,
BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HA,
BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_LE,
BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_LE,
BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_LE,
BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_LE,
BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_LE,
BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_LE,
BFD_RELOC_TILEGX_TLS_GD_CALL, BFD_RELOC_TILEGX_IMM8_X0_TLS_GD_ADD,
BFD_RELOC_TILEGX_IMM8_X1_TLS_GD_ADD,
BFD_RELOC_TILEGX_IMM8_Y0_TLS_GD_ADD,
BFD_RELOC_TILEGX_IMM8_Y1_TLS_GD_ADD, BFD_RELOC_TILEGX_TLS_IE_LOAD,
BFD_RELOC_TILEGX_IMM8_X0_TLS_ADD,
BFD_RELOC_TILEGX_IMM8_X1_TLS_ADD,
BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD, BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD.
Delete BFD_RELOC_TILEGX_IMM16_X0_HW1_GOT,
BFD_RELOC_TILEGX_IMM16_X1_HW1_GOT,
BFD_RELOC_TILEGX_IMM16_X0_HW2_GOT,
BFD_RELOC_TILEGX_IMM16_X1_HW2_GOT,
BFD_RELOC_TILEGX_IMM16_X0_HW3_GOT,
BFD_RELOC_TILEGX_IMM16_X1_HW3_GOT,
BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_GOT,
BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_GOT,
BFD_RELOC_TILEGX_IMM16_X0_HW1_TLS_GD,
BFD_RELOC_TILEGX_IMM16_X1_HW1_TLS_GD,
BFD_RELOC_TILEGX_IMM16_X0_HW2_TLS_GD,
BFD_RELOC_TILEGX_IMM16_X1_HW2_TLS_GD,
BFD_RELOC_TILEGX_IMM16_X0_HW3_TLS_GD,
BFD_RELOC_TILEGX_IMM16_X1_HW3_TLS_GD,
BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_TLS_GD,
BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_TLS_GD,
BFD_RELOC_TILEGX_IMM16_X0_HW1_TLS_IE,
BFD_RELOC_TILEGX_IMM16_X1_HW1_TLS_IE,
BFD_RELOC_TILEGX_IMM16_X0_HW2_TLS_IE,
BFD_RELOC_TILEGX_IMM16_X1_HW2_TLS_IE,
BFD_RELOC_TILEGX_IMM16_X0_HW3_TLS_IE,
BFD_RELOC_TILEGX_IMM16_X1_HW3_TLS_IE,
BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_TLS_IE,
BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_TLS_IE.
* elf32-tilepro.c (tilepro_elf_howto_table): Update tilepro
relocations.
(tilepro_reloc_map): Ditto.
(tilepro_info_to_howto_rela): Ditto.
(reloc_to_create_func): Ditto.
(tilepro_tls_translate_to_le): New.
(tilepro_tls_translate_to_ie): New.
(tilepro_elf_tls_transition): New.
(tilepro_elf_check_relocs): Handle new tls relocations.
(tilepro_elf_gc_sweep_hook): Ditto.
(allocate_dynrelocs): Ditto.
(tilepro_elf_relocate_section): Ditto.
(tilepro_replace_insn): New.
(insn_mask_X1): New.
(insn_mask_X0_no_dest_no_srca): New
(insn_mask_X1_no_dest_no_srca): New
(insn_mask_Y0_no_dest_no_srca): New
(insn_mask_Y1_no_dest_no_srca): New
(srca_mask_X0): New
(srca_mask_X1): New
(insn_tls_le_move_X1): New
(insn_tls_le_move_zero_X0X1): New
(insn_tls_ie_lw_X1): New
(insn_tls_ie_add_X0X1): New
(insn_tls_ie_add_Y0Y1): New
(insn_tls_gd_add_X0X1): New
(insn_tls_gd_add_Y0Y1): New
* elfxx-tilegx.c (tilegx_elf_howto_table): Update tilegx
relocations.
(tilegx_reloc_map): Ditto.
(tilegx_info_to_howto_rela): Ditto.
(reloc_to_create_func): Ditto.
(tilegx_elf_link_hash_table): New field disable_le_transition.
(tilegx_tls_translate_to_le): New.
(tilegx_tls_translate_to_ie): New.
(tilegx_elf_tls_transition): New.
(tilegx_elf_check_relocs): Handle new tls relocations.
(tilegx_elf_gc_sweep_hook): Ditto.
(allocate_dynrelocs): Ditto.
(tilegx_elf_relocate_section): Ditto.
(tilegx_copy_bits): New.
(tilegx_replace_insn): New.
(insn_mask_X1): New.
(insn_mask_X0_no_dest_no_srca): New.
(insn_mask_X1_no_dest_no_srca): New.
(insn_mask_Y0_no_dest_no_srca): New.
(insn_mask_Y1_no_dest_no_srca): New.
(insn_mask_X0_no_operand): New.
(insn_mask_X1_no_operand): New.
(insn_mask_Y0_no_operand): New.
(insn_mask_Y1_no_operand): New.
(insn_tls_ie_ld_X1): New.
(insn_tls_ie_ld4s_X1): New.
(insn_tls_ie_add_X0X1): New.
(insn_tls_ie_add_Y0Y1): New.
(insn_tls_ie_addx_X0X1): New.
(insn_tls_ie_addx_Y0Y1): New.
(insn_tls_gd_add_X0X1): New.
(insn_tls_gd_add_Y0Y1): New.
(insn_move_X0X1): New.
(insn_move_Y0Y1): New.
(insn_add_X0X1): New.
(insn_add_Y0Y1): New.
(insn_addx_X0X1): New.
(insn_addx_Y0Y1): New.
* libbfd.h: Regenerate.
* bfd-in2.h: Regenerate.

gas/
* tc-tilepro.c (O_tls_le): Define operator.
(O_tls_le_lo16): Ditto.
(O_tls_le_hi16): Ditto.
(O_tls_le_ha16): Ditto.
(O_tls_gd_call): Ditto.
(O_tls_gd_add): Ditto.
(O_tls_ie_load): Ditto.
(md_begin): Delete old operators; handle new operators.
(emit_tilepro_instruction): Ditto.
(md_apply_fix): Ditto.
* tc-tilegx.c (O_hw1_got): Delete operator.
(O_hw2_got): Ditto.
(O_hw3_got): Ditto.
(O_hw2_last_got): Ditto.
(O_hw1_tls_gd): Ditto.
(O_hw2_tls_gd): Ditto.
(O_hw3_tls_gd): Ditto.
(O_hw2_last_tls_gd): Ditto.
(O_hw1_tls_ie): Ditto.
(O_hw2_tls_ie): Ditto.
(O_hw3_tls_ie): Ditto.
(O_hw2_last_tls_ie): Ditto.
(O_hw0_tls_le): Define operator.
(O_hw0_last_tls_le): Ditto.
(O_hw1_last_tls_le): Ditto.
(O_tls_gd_call): Ditto.
(O_tls_gd_add): Ditto.
(O_tls_ie_load): Ditto.
(O_tls_add): Ditto.
(md_begin): Delete old operators; handle new operators.
(emit_tilegx_instruction): Ditto.
(md_apply_fix): Ditto.
* doc/c-tilegx.texi: Delete old operators; document new operators.
* doc/c-tilepro.texi: Ditto.

include/elf/
* tilegx.h (R_TILEGX_IMM16_X0_HW1_GOT): Delete.
(R_TILEGX_IMM16_X1_HW1_GOT): Ditto.
(R_TILEGX_IMM16_X0_HW2_GOT): Ditto.
(R_TILEGX_IMM16_X1_HW2_GOT): Ditto.
(R_TILEGX_IMM16_X0_HW3_GOT): Ditto.
(R_TILEGX_IMM16_X1_HW3_GOT): Ditto.
(R_TILEGX_IMM16_X0_HW2_LAST_GOT): Ditto.
(R_TILEGX_IMM16_X1_HW2_LAST_GOT): Ditto.
(R_TILEGX_IMM16_X0_HW1_TLS_GD): Ditto.
(R_TILEGX_IMM16_X1_HW1_TLS_GD): Ditto.
(R_TILEGX_IMM16_X0_HW2_TLS_GD): Ditto.
(R_TILEGX_IMM16_X1_HW2_TLS_GD): Ditto.
(R_TILEGX_IMM16_X0_HW3_TLS_GD): Ditto.
(R_TILEGX_IMM16_X1_HW3_TLS_GD): Ditto.
(R_TILEGX_IMM16_X0_HW2_LAST_TLS_GD): Ditto.
(R_TILEGX_IMM16_X1_HW2_LAST_TLS_GD): Ditto.
(R_TILEGX_IMM16_X0_HW1_TLS_IE): Ditto.
(R_TILEGX_IMM16_X1_HW1_TLS_IE): Ditto.
(R_TILEGX_IMM16_X0_HW2_TLS_IE): Ditto.
(R_TILEGX_IMM16_X1_HW2_TLS_IE): Ditto.
(R_TILEGX_IMM16_X0_HW3_TLS_IE): Ditto.
(R_TILEGX_IMM16_X1_HW3_TLS_IE): Ditto.
(R_TILEGX_IMM16_X0_HW2_LAST_TLS_IE): Ditto.
(R_TILEGX_IMM16_X1_HW2_LAST_TLS_IE): Ditto.
(R_TILEGX_IMM16_X0_HW0_TLS_LE): New relocation.
(R_TILEGX_IMM16_X1_HW0_TLS_LE): Ditto.
(R_TILEGX_IMM16_X0_HW0_LAST_TLS_LE): Ditto.
(R_TILEGX_IMM16_X1_HW0_LAST_TLS_LE): Ditto.
(R_TILEGX_IMM16_X0_HW1_LAST_TLS_LE): Ditto.
(R_TILEGX_IMM16_X1_HW1_LAST_TLS_LE): Ditto.
(R_TILEGX_TLS_GD_CALL): Ditto.
(R_TILEGX_IMM8_X0_TLS_GD_ADD): Ditto.
(R_TILEGX_IMM8_X1_TLS_GD_ADD): Ditto.
(R_TILEGX_IMM8_Y0_TLS_GD_ADD): Ditto.
(R_TILEGX_IMM8_Y1_TLS_GD_ADD): Ditto.
(R_TILEGX_TLS_IE_LOAD): Ditto.
(R_TILEGX_IMM8_X0_TLS_ADD): Ditto.
(R_TILEGX_IMM8_X1_TLS_ADD): Ditto.
(R_TILEGX_IMM8_Y0_TLS_ADD): Ditto.
(R_TILEGX_IMM8_Y1_TLS_ADD): Ditto.
* tilepro.h (R_TILEPRO_TLS_GD_CALL): New relocation.
(R_TILEPRO_IMM8_X0_TLS_GD_ADD): Ditto.
(R_TILEPRO_IMM8_X1_TLS_GD_ADD): Ditto.
(R_TILEPRO_IMM8_Y0_TLS_GD_ADD): Ditto.
(R_TILEPRO_IMM8_Y1_TLS_GD_ADD): Ditto.
(R_TILEPRO_TLS_IE_LOAD): Ditto.
(R_TILEPRO_IMM16_X0_TLS_LE): Ditto.
(R_TILEPRO_IMM16_X1_TLS_LE): Ditto.
(R_TILEPRO_IMM16_X0_TLS_LE_LO): Ditto.
(R_TILEPRO_IMM16_X1_TLS_LE_LO): Ditto.
(R_TILEPRO_IMM16_X0_TLS_LE_HI): Ditto.
(R_TILEPRO_IMM16_X1_TLS_LE_HI): Ditto.
(R_TILEPRO_IMM16_X0_TLS_LE_HA): Ditto.
(R_TILEPRO_IMM16_X1_TLS_LE_HA): Ditto.

include/opcode/
* tilegx.h (tilegx_mnemonic): Add TILEGX_OPC_LD4S_TLS,
TILEGX_OPC_LD_TLS.
* tilepro.h (tilepro_mnemonic): Add TILEPRO_OPC_LW_TLS,
TILEPRO_OPC_LW_TLS_SN.

opcodes/
* tilegx-opc.c: Handle TILEGX_OPC_LD4S_TLS and TILEGX_OPC_LD_TLS.
* tilepro-opc.c: Handle TILEPRO_OPC_LW_TLS and
TILEPRO_OPC_LW_TLS_SN.

20 files changed:
bfd/ChangeLog
bfd/bfd-in2.h
bfd/elf32-tilepro.c
bfd/elfxx-tilegx.c
bfd/libbfd.h
bfd/reloc.c
gas/ChangeLog
gas/config/tc-tilegx.c
gas/config/tc-tilepro.c
gas/doc/c-tilegx.texi
gas/doc/c-tilepro.texi
include/elf/ChangeLog
include/elf/tilegx.h
include/elf/tilepro.h
include/opcode/ChangeLog
include/opcode/tilegx.h
include/opcode/tilepro.h
opcodes/ChangeLog
opcodes/tilegx-opc.c
opcodes/tilepro-opc.c

index 2af9699..982c9a2 100644 (file)
@@ -1,4 +1,123 @@
 2012-02-25  Walter Lee  <walt@tilera.com>
+       * reloc.c: Add BFD_RELOC_TILEPRO_TLS_GD_CALL,
+       BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD,
+       BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD,
+       BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD,
+       BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD,
+       BFD_RELOC_TILEPRO_TLS_IE_LOAD, BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE,
+       BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE,
+       BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_LO,
+       BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_LO,
+       BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HI,
+       BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HI,
+       BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HA,
+       BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HA,
+       BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_LE,
+       BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_LE,
+       BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_LE,
+       BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_LE,
+       BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_LE,
+       BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_LE,
+       BFD_RELOC_TILEGX_TLS_GD_CALL, BFD_RELOC_TILEGX_IMM8_X0_TLS_GD_ADD,
+       BFD_RELOC_TILEGX_IMM8_X1_TLS_GD_ADD,
+       BFD_RELOC_TILEGX_IMM8_Y0_TLS_GD_ADD,
+       BFD_RELOC_TILEGX_IMM8_Y1_TLS_GD_ADD, BFD_RELOC_TILEGX_TLS_IE_LOAD,
+       BFD_RELOC_TILEGX_IMM8_X0_TLS_ADD,
+       BFD_RELOC_TILEGX_IMM8_X1_TLS_ADD,
+       BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD, BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD.
+       Delete BFD_RELOC_TILEGX_IMM16_X0_HW1_GOT,
+       BFD_RELOC_TILEGX_IMM16_X1_HW1_GOT,
+       BFD_RELOC_TILEGX_IMM16_X0_HW2_GOT,
+       BFD_RELOC_TILEGX_IMM16_X1_HW2_GOT,
+       BFD_RELOC_TILEGX_IMM16_X0_HW3_GOT,
+       BFD_RELOC_TILEGX_IMM16_X1_HW3_GOT,
+       BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_GOT,
+       BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_GOT,
+       BFD_RELOC_TILEGX_IMM16_X0_HW1_TLS_GD,
+       BFD_RELOC_TILEGX_IMM16_X1_HW1_TLS_GD,
+       BFD_RELOC_TILEGX_IMM16_X0_HW2_TLS_GD,
+       BFD_RELOC_TILEGX_IMM16_X1_HW2_TLS_GD,
+       BFD_RELOC_TILEGX_IMM16_X0_HW3_TLS_GD,
+       BFD_RELOC_TILEGX_IMM16_X1_HW3_TLS_GD,
+       BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_TLS_GD,
+       BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_TLS_GD,
+       BFD_RELOC_TILEGX_IMM16_X0_HW1_TLS_IE,
+       BFD_RELOC_TILEGX_IMM16_X1_HW1_TLS_IE,
+       BFD_RELOC_TILEGX_IMM16_X0_HW2_TLS_IE,
+       BFD_RELOC_TILEGX_IMM16_X1_HW2_TLS_IE,
+       BFD_RELOC_TILEGX_IMM16_X0_HW3_TLS_IE,
+       BFD_RELOC_TILEGX_IMM16_X1_HW3_TLS_IE,
+       BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_TLS_IE,
+       BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_TLS_IE.
+       * elf32-tilepro.c (tilepro_elf_howto_table): Update tilepro
+       relocations.
+       (tilepro_reloc_map): Ditto.
+       (tilepro_info_to_howto_rela): Ditto.
+       (reloc_to_create_func): Ditto.
+       (tilepro_tls_translate_to_le): New.
+       (tilepro_tls_translate_to_ie): New.
+       (tilepro_elf_tls_transition): New.
+       (tilepro_elf_check_relocs): Handle new tls relocations.
+       (tilepro_elf_gc_sweep_hook): Ditto.
+       (allocate_dynrelocs): Ditto.
+       (tilepro_elf_relocate_section): Ditto.
+       (tilepro_replace_insn): New.
+       (insn_mask_X1): New.
+       (insn_mask_X0_no_dest_no_srca): New
+       (insn_mask_X1_no_dest_no_srca): New
+       (insn_mask_Y0_no_dest_no_srca): New
+       (insn_mask_Y1_no_dest_no_srca): New
+       (srca_mask_X0): New
+       (srca_mask_X1): New
+       (insn_tls_le_move_X1): New
+       (insn_tls_le_move_zero_X0X1): New
+       (insn_tls_ie_lw_X1): New
+       (insn_tls_ie_add_X0X1): New
+       (insn_tls_ie_add_Y0Y1): New
+       (insn_tls_gd_add_X0X1): New
+       (insn_tls_gd_add_Y0Y1): New
+       * elfxx-tilegx.c (tilegx_elf_howto_table): Update tilegx
+       relocations.
+       (tilegx_reloc_map): Ditto.
+       (tilegx_info_to_howto_rela): Ditto.
+       (reloc_to_create_func): Ditto.
+       (tilegx_elf_link_hash_table): New field disable_le_transition.
+       (tilegx_tls_translate_to_le): New.
+       (tilegx_tls_translate_to_ie): New.
+       (tilegx_elf_tls_transition): New.
+       (tilegx_elf_check_relocs): Handle new tls relocations.
+       (tilegx_elf_gc_sweep_hook): Ditto.
+       (allocate_dynrelocs): Ditto.
+       (tilegx_elf_relocate_section): Ditto.
+       (tilegx_copy_bits): New.
+       (tilegx_replace_insn): New.
+       (insn_mask_X1): New.
+       (insn_mask_X0_no_dest_no_srca): New.
+       (insn_mask_X1_no_dest_no_srca): New.
+       (insn_mask_Y0_no_dest_no_srca): New.
+       (insn_mask_Y1_no_dest_no_srca): New.
+       (insn_mask_X0_no_operand): New.
+       (insn_mask_X1_no_operand): New.
+       (insn_mask_Y0_no_operand): New.
+       (insn_mask_Y1_no_operand): New.
+       (insn_tls_ie_ld_X1): New.
+       (insn_tls_ie_ld4s_X1): New.
+       (insn_tls_ie_add_X0X1): New.
+       (insn_tls_ie_add_Y0Y1): New.
+       (insn_tls_ie_addx_X0X1): New.
+       (insn_tls_ie_addx_Y0Y1): New.
+       (insn_tls_gd_add_X0X1): New.
+       (insn_tls_gd_add_Y0Y1): New.
+       (insn_move_X0X1): New.
+       (insn_move_Y0Y1): New.
+       (insn_add_X0X1): New.
+       (insn_add_Y0Y1): New.
+       (insn_addx_X0X1): New.
+       (insn_addx_Y0Y1): New.
+       * libbfd.h: Regenerate.
+       * bfd-in2.h: Regenerate.
+
+2012-02-25  Walter Lee  <walt@tilera.com>
 
        * config.bfd (tilegx-*-*): rename little endian vector; add big
        endian vector.
index 4a92e47..9c77fed 100644 (file)
@@ -4959,6 +4959,12 @@ the dynamic object into the runtime process image.  */
   BFD_RELOC_TILEPRO_SHAMT_X1,
   BFD_RELOC_TILEPRO_SHAMT_Y0,
   BFD_RELOC_TILEPRO_SHAMT_Y1,
+  BFD_RELOC_TILEPRO_TLS_GD_CALL,
+  BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD,
+  BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD,
+  BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD,
+  BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD,
+  BFD_RELOC_TILEPRO_TLS_IE_LOAD,
   BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD,
   BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD,
   BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_LO,
@@ -4978,6 +4984,14 @@ the dynamic object into the runtime process image.  */
   BFD_RELOC_TILEPRO_TLS_DTPMOD32,
   BFD_RELOC_TILEPRO_TLS_DTPOFF32,
   BFD_RELOC_TILEPRO_TLS_TPOFF32,
+  BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE,
+  BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE,
+  BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_LO,
+  BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_LO,
+  BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HI,
+  BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HI,
+  BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HA,
+  BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HA,
 
 /* Tilera TILE-Gx Relocations.  */
   BFD_RELOC_TILEGX_HW0,
@@ -5037,52 +5051,44 @@ the dynamic object into the runtime process image.  */
   BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_PCREL,
   BFD_RELOC_TILEGX_IMM16_X0_HW0_GOT,
   BFD_RELOC_TILEGX_IMM16_X1_HW0_GOT,
-  BFD_RELOC_TILEGX_IMM16_X0_HW1_GOT,
-  BFD_RELOC_TILEGX_IMM16_X1_HW1_GOT,
-  BFD_RELOC_TILEGX_IMM16_X0_HW2_GOT,
-  BFD_RELOC_TILEGX_IMM16_X1_HW2_GOT,
-  BFD_RELOC_TILEGX_IMM16_X0_HW3_GOT,
-  BFD_RELOC_TILEGX_IMM16_X1_HW3_GOT,
   BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_GOT,
   BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_GOT,
   BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_GOT,
   BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_GOT,
-  BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_GOT,
-  BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_GOT,
   BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_GD,
   BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_GD,
-  BFD_RELOC_TILEGX_IMM16_X0_HW1_TLS_GD,
-  BFD_RELOC_TILEGX_IMM16_X1_HW1_TLS_GD,
-  BFD_RELOC_TILEGX_IMM16_X0_HW2_TLS_GD,
-  BFD_RELOC_TILEGX_IMM16_X1_HW2_TLS_GD,
-  BFD_RELOC_TILEGX_IMM16_X0_HW3_TLS_GD,
-  BFD_RELOC_TILEGX_IMM16_X1_HW3_TLS_GD,
+  BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_LE,
+  BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_LE,
+  BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_LE,
+  BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_LE,
+  BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_LE,
+  BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_LE,
   BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_GD,
   BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_GD,
   BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_GD,
   BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_GD,
-  BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_TLS_GD,
-  BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_TLS_GD,
   BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_IE,
   BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_IE,
-  BFD_RELOC_TILEGX_IMM16_X0_HW1_TLS_IE,
-  BFD_RELOC_TILEGX_IMM16_X1_HW1_TLS_IE,
-  BFD_RELOC_TILEGX_IMM16_X0_HW2_TLS_IE,
-  BFD_RELOC_TILEGX_IMM16_X1_HW2_TLS_IE,
-  BFD_RELOC_TILEGX_IMM16_X0_HW3_TLS_IE,
-  BFD_RELOC_TILEGX_IMM16_X1_HW3_TLS_IE,
   BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_IE,
   BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_IE,
   BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_IE,
   BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_IE,
-  BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_TLS_IE,
-  BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_TLS_IE,
   BFD_RELOC_TILEGX_TLS_DTPMOD64,
   BFD_RELOC_TILEGX_TLS_DTPOFF64,
   BFD_RELOC_TILEGX_TLS_TPOFF64,
   BFD_RELOC_TILEGX_TLS_DTPMOD32,
   BFD_RELOC_TILEGX_TLS_DTPOFF32,
   BFD_RELOC_TILEGX_TLS_TPOFF32,
+  BFD_RELOC_TILEGX_TLS_GD_CALL,
+  BFD_RELOC_TILEGX_IMM8_X0_TLS_GD_ADD,
+  BFD_RELOC_TILEGX_IMM8_X1_TLS_GD_ADD,
+  BFD_RELOC_TILEGX_IMM8_Y0_TLS_GD_ADD,
+  BFD_RELOC_TILEGX_IMM8_Y1_TLS_GD_ADD,
+  BFD_RELOC_TILEGX_TLS_IE_LOAD,
+  BFD_RELOC_TILEGX_IMM8_X0_TLS_ADD,
+  BFD_RELOC_TILEGX_IMM8_X1_TLS_ADD,
+  BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD,
+  BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD,
 
 /* Adapteva EPIPHANY - 8 bit signed pc-relative displacement  */
   BFD_RELOC_EPIPHANY_SIMM8,
index 7b08aff..48a99aa 100644 (file)
@@ -380,12 +380,26 @@ static reloc_howto_type tilepro_elf_howto_table [] =
   EMPTY_HOWTO (57),
   EMPTY_HOWTO (58),
   EMPTY_HOWTO (59),
-  EMPTY_HOWTO (60),
-  EMPTY_HOWTO (61),
-  EMPTY_HOWTO (62),
-  EMPTY_HOWTO (63),
-  EMPTY_HOWTO (64),
-  EMPTY_HOWTO (65),
+
+  HOWTO (R_TILEPRO_TLS_GD_CALL, /* type */
+        TILEPRO_LOG2_BUNDLE_ALIGNMENT_IN_BYTES, /* rightshift */
+        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        29,                    /* bitsize */
+        TRUE,                  /* pc_relative */
+        0,                     /* bitpos */
+        complain_overflow_signed,/* complain_on_overflow */
+        bfd_elf_generic_reloc, /* special_function */
+        "R_TILEPRO_TLS_GD_CALL", /* name */
+        FALSE,                 /* partial_inplace */
+        0,                     /* src_mask */
+        -1,                    /* dst_mask */
+        TRUE),                 /* pcrel_offset */
+
+  TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_X0_TLS_GD_ADD,  0,  8),
+  TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_X1_TLS_GD_ADD,  0,  8),
+  TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_Y0_TLS_GD_ADD,  0,  8),
+  TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_Y1_TLS_GD_ADD,  0,  8),
+  TILEPRO_IMM_HOWTO(R_TILEPRO_TLS_IE_LOAD,  0,  8),
 
   /* Offsets into the GOT of TLS Descriptors. */
 
@@ -454,17 +468,12 @@ static reloc_howto_type tilepro_elf_howto_table [] =
         -1,                    /* dst_mask */
         TRUE),                 /* pcrel_offset */
 
-#define TILEPRO_IMM16_HOWTO_TLS_IE(name, rshift) \
-  HOWTO (name, rshift, 1, 16, FALSE, 0, \
-         complain_overflow_dont, bfd_elf_generic_reloc, \
-         #name, FALSE, 0, 0xffff, TRUE)
-
-  TILEPRO_IMM16_HOWTO_TLS_IE (R_TILEPRO_IMM16_X0_TLS_IE_LO,  0),
-  TILEPRO_IMM16_HOWTO_TLS_IE (R_TILEPRO_IMM16_X1_TLS_IE_LO,  0),
-  TILEPRO_IMM16_HOWTO_TLS_IE (R_TILEPRO_IMM16_X0_TLS_IE_HI, 16),
-  TILEPRO_IMM16_HOWTO_TLS_IE (R_TILEPRO_IMM16_X1_TLS_IE_HI, 16),
-  TILEPRO_IMM16_HOWTO_TLS_IE (R_TILEPRO_IMM16_X0_TLS_IE_HA, 16),
-  TILEPRO_IMM16_HOWTO_TLS_IE (R_TILEPRO_IMM16_X1_TLS_IE_HA, 16),
+  TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_TLS_IE_LO,  0),
+  TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_TLS_IE_LO,  0),
+  TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_TLS_IE_HI, 16),
+  TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_TLS_IE_HI, 16),
+  TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_TLS_IE_HA, 16),
+  TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_TLS_IE_HA, 16),
 
   /* These are common with the Solaris TLS implementation. */
   HOWTO(R_TILEPRO_TLS_DTPMOD32, 0, 0, 0, FALSE, 0, complain_overflow_dont,
@@ -475,8 +484,42 @@ static reloc_howto_type tilepro_elf_howto_table [] =
         FALSE, 0, 0xFFFFFFFF, TRUE),
   HOWTO(R_TILEPRO_TLS_TPOFF32, 0, 0, 0, FALSE, 0, complain_overflow_dont,
         bfd_elf_generic_reloc, "R_TILEPRO_TLS_TPOFF32",
-        FALSE, 0, 0, TRUE)
+        FALSE, 0, 0, TRUE),
 
+  HOWTO (R_TILEPRO_IMM16_X0_TLS_LE,/* type */
+        0,                     /* rightshift */
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */
+        16,                    /* bitsize */
+        FALSE,                 /* pc_relative */
+        0,                     /* bitpos */
+        complain_overflow_signed, /* complain_on_overflow */
+        bfd_elf_generic_reloc, /* special_function */
+        "R_TILEPRO_IMM16_X0_TLS_LE",/* name */
+        FALSE,                 /* partial_inplace */
+        0,                     /* src_mask */
+        -1,                    /* dst_mask */
+        TRUE),                 /* pcrel_offset */
+
+  HOWTO (R_TILEPRO_IMM16_X1_TLS_LE,/* type */
+        0,                     /* rightshift */
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */
+        16,                    /* bitsize */
+        FALSE,                 /* pc_relative */
+        0,                     /* bitpos */
+        complain_overflow_signed, /* complain_on_overflow */
+        bfd_elf_generic_reloc, /* special_function */
+        "R_TILEPRO_IMM16_X1_TLS_LE",/* name */
+        FALSE,                 /* partial_inplace */
+        0,                     /* src_mask */
+        -1,                    /* dst_mask */
+        TRUE),                 /* pcrel_offset */
+
+  TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_TLS_LE_LO,  0),
+  TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_TLS_LE_LO,  0),
+  TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_TLS_LE_HI, 16),
+  TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_TLS_LE_HI, 16),
+  TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_TLS_LE_HA, 16),
+  TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_TLS_LE_HA, 16),
 };
 
 static reloc_howto_type tilepro_elf_howto_table2 [] =
@@ -590,6 +633,13 @@ static const reloc_map tilepro_reloc_map [] =
   TH_REMAP (BFD_RELOC_TILEPRO_SHAMT_Y0,    R_TILEPRO_SHAMT_Y0)
   TH_REMAP (BFD_RELOC_TILEPRO_SHAMT_Y1,    R_TILEPRO_SHAMT_Y1)
 
+  TH_REMAP (BFD_RELOC_TILEPRO_TLS_GD_CALL,        R_TILEPRO_TLS_GD_CALL)
+  TH_REMAP (BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD, R_TILEPRO_IMM8_X0_TLS_GD_ADD)
+  TH_REMAP (BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD, R_TILEPRO_IMM8_X1_TLS_GD_ADD)
+  TH_REMAP (BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD, R_TILEPRO_IMM8_Y0_TLS_GD_ADD)
+  TH_REMAP (BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD, R_TILEPRO_IMM8_Y1_TLS_GD_ADD)
+  TH_REMAP (BFD_RELOC_TILEPRO_TLS_IE_LOAD,        R_TILEPRO_TLS_IE_LOAD)
+
   TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD,    R_TILEPRO_IMM16_X0_TLS_GD)
   TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD,    R_TILEPRO_IMM16_X1_TLS_GD)
   TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_LO, R_TILEPRO_IMM16_X0_TLS_GD_LO)
@@ -612,6 +662,15 @@ static const reloc_map tilepro_reloc_map [] =
   TH_REMAP (BFD_RELOC_TILEPRO_TLS_DTPOFF32, R_TILEPRO_TLS_DTPOFF32)
   TH_REMAP (BFD_RELOC_TILEPRO_TLS_TPOFF32,  R_TILEPRO_TLS_TPOFF32)
 
+  TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE,    R_TILEPRO_IMM16_X0_TLS_LE)
+  TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE,    R_TILEPRO_IMM16_X1_TLS_LE)
+  TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_LO, R_TILEPRO_IMM16_X0_TLS_LE_LO)
+  TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_LO, R_TILEPRO_IMM16_X1_TLS_LE_LO)
+  TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HI, R_TILEPRO_IMM16_X0_TLS_LE_HI)
+  TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HI, R_TILEPRO_IMM16_X1_TLS_LE_HI)
+  TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HA, R_TILEPRO_IMM16_X0_TLS_LE_HA)
+  TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HA, R_TILEPRO_IMM16_X1_TLS_LE_HA)
+
 #undef TH_REMAP
 
   { BFD_RELOC_VTABLE_INHERIT, R_TILEPRO_GNU_VTINHERIT, tilepro_elf_howto_table2 },
@@ -745,7 +804,7 @@ tilepro_info_to_howto_rela (bfd * abfd ATTRIBUTE_UNUSED,
 {
   unsigned int r_type = ELF32_R_TYPE (dst->r_info);
 
-  if (r_type <= (unsigned int) R_TILEPRO_TLS_TPOFF32)
+  if (r_type <= (unsigned int) R_TILEPRO_IMM16_X1_TLS_LE_HA)
     cache_ptr->howto = &tilepro_elf_howto_table [r_type];
   else if (r_type - R_TILEPRO_GNU_VTINHERIT
           <= (unsigned int) R_TILEPRO_GNU_VTENTRY)
@@ -845,7 +904,20 @@ static const tilepro_create_func reloc_to_create_func[] =
   create_Imm16_X0,
   create_Imm16_X1,
   create_Imm16_X0,
-  create_Imm16_X1
+  create_Imm16_X1,
+
+  NULL,
+  NULL,
+  NULL,
+
+  create_Imm16_X0,
+  create_Imm16_X1,
+  create_Imm16_X0,
+  create_Imm16_X1,
+  create_Imm16_X0,
+  create_Imm16_X1,
+  create_Imm16_X0,
+  create_Imm16_X1,
 };
 
 #define NELEMS(a)      ((int) (sizeof (a) / sizeof ((a)[0])))
@@ -1288,6 +1360,99 @@ tilepro_elf_copy_indirect_symbol (struct bfd_link_info *info,
   _bfd_elf_link_hash_copy_indirect (info, dir, ind);
 }
 
+static int
+tilepro_tls_translate_to_le (int r_type)
+{
+  switch (r_type)
+    {
+    case R_TILEPRO_IMM16_X0_TLS_GD:
+    case R_TILEPRO_IMM16_X0_TLS_IE:
+      return R_TILEPRO_IMM16_X0_TLS_LE;
+
+    case R_TILEPRO_IMM16_X1_TLS_GD:
+    case R_TILEPRO_IMM16_X1_TLS_IE:
+      return R_TILEPRO_IMM16_X1_TLS_LE;
+
+    case R_TILEPRO_IMM16_X0_TLS_GD_LO:
+    case R_TILEPRO_IMM16_X0_TLS_IE_LO:
+      return R_TILEPRO_IMM16_X0_TLS_LE_LO;
+
+    case R_TILEPRO_IMM16_X1_TLS_GD_LO:
+    case R_TILEPRO_IMM16_X1_TLS_IE_LO:
+      return R_TILEPRO_IMM16_X1_TLS_LE_LO;
+
+    case R_TILEPRO_IMM16_X0_TLS_GD_HI:
+    case R_TILEPRO_IMM16_X0_TLS_IE_HI:
+      return R_TILEPRO_IMM16_X0_TLS_LE_HI;
+
+    case R_TILEPRO_IMM16_X1_TLS_GD_HI:
+    case R_TILEPRO_IMM16_X1_TLS_IE_HI:
+      return R_TILEPRO_IMM16_X1_TLS_LE_HI;
+
+    case R_TILEPRO_IMM16_X0_TLS_GD_HA:
+    case R_TILEPRO_IMM16_X0_TLS_IE_HA:
+      return R_TILEPRO_IMM16_X0_TLS_LE_HA;
+
+    case R_TILEPRO_IMM16_X1_TLS_GD_HA:
+    case R_TILEPRO_IMM16_X1_TLS_IE_HA:
+      return R_TILEPRO_IMM16_X1_TLS_LE_HA;
+    }
+  return r_type;
+}
+
+static int
+tilepro_tls_translate_to_ie (int r_type)
+{
+  switch (r_type)
+    {
+    case R_TILEPRO_IMM16_X0_TLS_GD:
+    case R_TILEPRO_IMM16_X0_TLS_IE:
+      return R_TILEPRO_IMM16_X0_TLS_IE;
+
+    case R_TILEPRO_IMM16_X1_TLS_GD:
+    case R_TILEPRO_IMM16_X1_TLS_IE:
+      return R_TILEPRO_IMM16_X1_TLS_IE;
+
+    case R_TILEPRO_IMM16_X0_TLS_GD_LO:
+    case R_TILEPRO_IMM16_X0_TLS_IE_LO:
+      return R_TILEPRO_IMM16_X0_TLS_IE_LO;
+
+    case R_TILEPRO_IMM16_X1_TLS_GD_LO:
+    case R_TILEPRO_IMM16_X1_TLS_IE_LO:
+      return R_TILEPRO_IMM16_X1_TLS_IE_LO;
+
+    case R_TILEPRO_IMM16_X0_TLS_GD_HI:
+    case R_TILEPRO_IMM16_X0_TLS_IE_HI:
+      return R_TILEPRO_IMM16_X0_TLS_IE_HI;
+
+    case R_TILEPRO_IMM16_X1_TLS_GD_HI:
+    case R_TILEPRO_IMM16_X1_TLS_IE_HI:
+      return R_TILEPRO_IMM16_X1_TLS_IE_HI;
+
+    case R_TILEPRO_IMM16_X0_TLS_GD_HA:
+    case R_TILEPRO_IMM16_X0_TLS_IE_HA:
+      return R_TILEPRO_IMM16_X0_TLS_IE_HA;
+
+    case R_TILEPRO_IMM16_X1_TLS_GD_HA:
+    case R_TILEPRO_IMM16_X1_TLS_IE_HA:
+      return R_TILEPRO_IMM16_X1_TLS_IE_HA;
+    }
+  return r_type;
+}
+
+static int
+tilepro_elf_tls_transition (struct bfd_link_info *info, int r_type,
+                           int is_local)
+{
+  if (info->shared)
+    return r_type;
+
+  if (is_local)
+    return tilepro_tls_translate_to_le (r_type);
+  else
+    return tilepro_tls_translate_to_ie (r_type);
+}
+
 /* Look through the relocs for a section during the first phase, and
    allocate space in the global offset table or procedure linkage
    table.  */
@@ -1348,8 +1513,21 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
        }
 
+      r_type = tilepro_elf_tls_transition (info, r_type, h == NULL);
       switch (r_type)
        {
+        case R_TILEPRO_IMM16_X0_TLS_LE:
+        case R_TILEPRO_IMM16_X1_TLS_LE:
+        case R_TILEPRO_IMM16_X0_TLS_LE_LO:
+        case R_TILEPRO_IMM16_X1_TLS_LE_LO:
+        case R_TILEPRO_IMM16_X0_TLS_LE_HI:
+        case R_TILEPRO_IMM16_X1_TLS_LE_HI:
+        case R_TILEPRO_IMM16_X0_TLS_LE_HA:
+        case R_TILEPRO_IMM16_X1_TLS_LE_HA:
+         if (info->shared)
+           goto r_tilepro_plt32;
+         break;
+
         case R_TILEPRO_IMM16_X0_TLS_GD:
         case R_TILEPRO_IMM16_X1_TLS_GD:
         case R_TILEPRO_IMM16_X0_TLS_GD_LO:
@@ -1358,7 +1536,8 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
         case R_TILEPRO_IMM16_X1_TLS_GD_HI:
         case R_TILEPRO_IMM16_X0_TLS_GD_HA:
         case R_TILEPRO_IMM16_X1_TLS_GD_HA:
-          tls_type = GOT_TLS_GD;
+         BFD_ASSERT (info->shared);
+         tls_type = GOT_TLS_GD;
           goto have_got_reference;
 
         case R_TILEPRO_IMM16_X0_TLS_IE:
@@ -1454,6 +1633,24 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
            }
          break;
 
+       case R_TILEPRO_TLS_GD_CALL:
+         if (info->shared)
+           {
+             /* These are basically R_TILEPRO_JOFFLONG_X1_PLT relocs
+                against __tls_get_addr.  */
+             struct bfd_link_hash_entry *bh = NULL;
+             if (! _bfd_generic_link_add_one_symbol (info, abfd,
+                                                     "__tls_get_addr", 0,
+                                                     bfd_und_section_ptr, 0,
+                                                     NULL, FALSE, FALSE,
+                                                     &bh))
+               return FALSE;
+             h = (struct elf_link_hash_entry *) bh;
+           }
+         else
+           break;
+         /* Fall through */
+
         case R_TILEPRO_JOFFLONG_X1_PLT:
          /* This symbol requires a procedure linkage table entry.  We
             actually build the entry in adjust_dynamic_symbol,
@@ -1523,15 +1720,14 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
         case R_TILEPRO_SHAMT_Y0:
         case R_TILEPRO_SHAMT_Y1:
          if (h != NULL)
-            {
               h->non_got_ref = 1;
 
-              if (!info->shared)
-                {
-                  /* We may need a .plt entry if the function this reloc
-                     refers to is in a shared lib.  */
-                  h->plt.refcount += 1;
-                }
+       r_tilepro_plt32:
+         if (h != NULL && !info->shared)
+           {
+             /* We may need a .plt entry if the function this reloc
+                refers to is in a shared lib.  */
+             h->plt.refcount += 1;
             }
 
          /* If we are creating a shared library, and this is a reloc
@@ -1725,6 +1921,7 @@ tilepro_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info,
        }
 
       r_type = ELF32_R_TYPE (rel->r_info);
+      r_type = tilepro_elf_tls_transition (info, r_type, h != NULL);
       switch (r_type)
        {
         case R_TILEPRO_IMM16_X0_GOT:
@@ -1758,7 +1955,8 @@ tilepro_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info,
            }
          else
            {
-             if (local_got_refcounts[r_symndx] > 0)
+             if (local_got_refcounts &&
+                 local_got_refcounts[r_symndx] > 0)
                local_got_refcounts[r_symndx]--;
            }
          break;
@@ -2040,7 +2238,14 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
       h->needs_plt = 0;
     }
 
-  if (h->got.refcount > 0)
+  /* If a TLS_IE symbol is now local to the binary, make it a TLS_LE
+     requiring no TLS entry.  */
+  if (h->got.refcount > 0
+      && !info->shared
+      && h->dynindx == -1
+      && tilepro_elf_hash_entry(h)->tls_type == GOT_TLS_IE)
+    h->got.offset = (bfd_vma) -1;
+  else if (h->got.refcount > 0)
     {
       asection *s;
       bfd_boolean dyn;
@@ -2467,6 +2672,87 @@ tpoff (struct bfd_link_info *info, bfd_vma address)
   return (address - htab->tls_sec->vma);
 }
 
+/* Replace the MASK bits in ADDR with those in INSN, for the next
+   TILEPRO_BUNDLE_SIZE_IN_BYTES bytes.  */
+
+static void
+tilepro_replace_insn (bfd_byte *addr, const bfd_byte *mask,
+                     const bfd_byte *insn)
+{
+  int i;
+  for (i = 0; i < TILEPRO_BUNDLE_SIZE_IN_BYTES; i++)
+    {
+      addr[i] = (addr[i] & ~mask[i]) | (insn[i] & mask[i]);
+    }
+}
+
+/* Mask to extract the bits corresponding to an instruction in a
+   specific pipe of a bundle.  */
+static const bfd_byte insn_mask_X1[] = {
+  0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0x7f
+};
+
+/* Mask to extract the bits corresponding to an instruction in a
+   specific pipe of a bundle, minus the destination operand and the
+   first source operand.  */
+static const bfd_byte insn_mask_X0_no_dest_no_srca[] = {
+  0x00, 0xf0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00
+};
+
+static const bfd_byte insn_mask_X1_no_dest_no_srca[] = {
+  0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x7f
+};
+
+static const bfd_byte insn_mask_Y0_no_dest_no_srca[] = {
+  0x00, 0xf0, 0x0f, 0x78, 0x00, 0x00, 0x00, 0x00
+};
+
+static const bfd_byte insn_mask_Y1_no_dest_no_srca[] = {
+  0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x07, 0x78
+};
+
+/* Mask to extract the first source operand of an instruction.  */
+static const bfd_byte srca_mask_X0[] = {
+  0xc0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const bfd_byte srca_mask_X1[] = {
+  0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00
+};
+
+/* Various instructions synthesized to support tls references.  */
+
+/* move r0, r0 in the X1 pipe, used for tls le.  */
+static const bfd_byte insn_tls_le_move_X1[] = {
+  0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x33, 0x08
+};
+
+/* move r0, zero in the X0 and X1 pipe, used for tls le.  */
+static const bfd_byte insn_tls_le_move_zero_X0X1[] = {
+  0xc0, 0xff, 0xcf, 0x00, 0xe0, 0xff, 0x33, 0x08
+};
+
+/* lw r0, r0 in the X1 pipe, used for tls ie.  */
+static const bfd_byte insn_tls_ie_lw_X1[] = {
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x0b, 0x40
+};
+
+/* add r0, r0, tp in various pipes, used for tls ie.  */
+static const bfd_byte insn_tls_ie_add_X0X1[] = {
+  0x00, 0x50, 0x0f, 0x00, 0x00, 0xa8, 0x07, 0x08
+};
+static const bfd_byte insn_tls_ie_add_Y0Y1[] = {
+  0x00, 0x50, 0x03, 0x08, 0x00, 0xa8, 0x01, 0x8c
+};
+
+/* move r0, r0 in various pipes, used for tls gd.  */
+static const bfd_byte insn_tls_gd_add_X0X1[] = {
+  0x00, 0xf0, 0xcf, 0x00, 0x00, 0xf8, 0x33, 0x08
+};
+static const bfd_byte insn_tls_gd_add_Y0Y1[] = {
+  0x00, 0xf0, 0x0b, 0x18, 0x00, 0xf8, 0x05, 0x9c
+};
+
 /* Relocate an TILEPRO ELF section.
 
    The RELOCATE_SECTION function is called by the new ELF backend linker
@@ -2531,6 +2817,7 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
   for (; rel < relend; rel++)
     {
       int r_type, tls_type;
+      bfd_boolean is_tls_iele, is_tls_le;
       reloc_howto_type *howto;
       unsigned long r_symndx;
       struct elf_link_hash_entry *h;
@@ -2613,6 +2900,118 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 
       switch (r_type)
        {
+       case R_TILEPRO_TLS_GD_CALL:
+       case R_TILEPRO_IMM8_X0_TLS_GD_ADD:
+       case R_TILEPRO_IMM8_Y0_TLS_GD_ADD:
+       case R_TILEPRO_IMM8_X1_TLS_GD_ADD:
+       case R_TILEPRO_IMM8_Y1_TLS_GD_ADD:
+       case R_TILEPRO_IMM16_X0_TLS_GD_HA:
+       case R_TILEPRO_IMM16_X1_TLS_GD_HA:
+       case R_TILEPRO_IMM16_X0_TLS_IE_HA:
+       case R_TILEPRO_IMM16_X1_TLS_IE_HA:
+         tls_type = GOT_UNKNOWN;
+         if (h == NULL && local_got_offsets)
+           tls_type =
+             _bfd_tilepro_elf_local_got_tls_type (input_bfd) [r_symndx];
+         else if (h != NULL)
+           tls_type = tilepro_elf_hash_entry(h)->tls_type;
+
+         is_tls_iele = (! info->shared || tls_type == GOT_TLS_IE);
+         is_tls_le = is_tls_iele && (!info->shared
+                                     && (h == NULL || h->dynindx == -1));
+
+         if (r_type == R_TILEPRO_TLS_GD_CALL)
+           {
+             if (is_tls_le)
+               {
+                 /* GD -> LE */
+                 tilepro_replace_insn (contents + rel->r_offset,
+                                       insn_mask_X1, insn_tls_le_move_X1);
+                 continue;
+               }
+             else if (is_tls_iele)
+               {
+                 /* GD -> IE */
+                 tilepro_replace_insn (contents + rel->r_offset,
+                                       insn_mask_X1, insn_tls_ie_lw_X1);
+                 continue;
+               }
+
+             /* GD -> GD */
+             h = (struct elf_link_hash_entry *)
+               bfd_link_hash_lookup (info->hash, "__tls_get_addr", FALSE,
+                                     FALSE, TRUE);
+             BFD_ASSERT (h != NULL);
+             r_type = R_TILEPRO_JOFFLONG_X1_PLT;
+             howto = tilepro_elf_howto_table + r_type;
+           }
+         else if (r_type == R_TILEPRO_IMM16_X0_TLS_GD_HA
+                  || r_type == R_TILEPRO_IMM16_X0_TLS_IE_HA)
+           {
+             if (is_tls_le)
+               tilepro_replace_insn (contents + rel->r_offset, srca_mask_X0,
+                                     insn_tls_le_move_zero_X0X1);
+           }
+         else if (r_type == R_TILEPRO_IMM16_X1_TLS_GD_HA
+                  || r_type == R_TILEPRO_IMM16_X1_TLS_IE_HA)
+           {
+             if (is_tls_le)
+               tilepro_replace_insn (contents + rel->r_offset, srca_mask_X1,
+                                     insn_tls_le_move_zero_X0X1);
+           }
+         else
+           {
+             const bfd_byte *mask = NULL;
+             const bfd_byte *add_insn = NULL;
+
+             switch (r_type)
+               {
+               case R_TILEPRO_IMM8_X0_TLS_GD_ADD:
+                 add_insn = is_tls_iele ? insn_tls_ie_add_X0X1
+                   : insn_tls_gd_add_X0X1;
+                 mask = insn_mask_X0_no_dest_no_srca;
+                 break;
+               case R_TILEPRO_IMM8_X1_TLS_GD_ADD:
+                 add_insn = is_tls_iele ? insn_tls_ie_add_X0X1
+                   : insn_tls_gd_add_X0X1;
+                 mask = insn_mask_X1_no_dest_no_srca;
+                 break;
+               case R_TILEPRO_IMM8_Y0_TLS_GD_ADD:
+                 add_insn = is_tls_iele ? insn_tls_ie_add_Y0Y1
+                   : insn_tls_gd_add_Y0Y1;
+                 mask = insn_mask_Y0_no_dest_no_srca;
+                 break;
+               case R_TILEPRO_IMM8_Y1_TLS_GD_ADD:
+                 add_insn = is_tls_iele ? insn_tls_ie_add_Y0Y1
+                   : insn_tls_gd_add_Y0Y1;
+                 mask = insn_mask_Y1_no_dest_no_srca;
+                 break;
+               }
+
+             tilepro_replace_insn (contents + rel->r_offset, mask, add_insn);
+
+             continue;
+           }
+         break;
+       case R_TILEPRO_TLS_IE_LOAD:
+         if (!info->shared && (h == NULL || h->dynindx == -1))
+           /* IE -> LE */
+           tilepro_replace_insn (contents + rel->r_offset,
+                                 insn_mask_X1_no_dest_no_srca,
+                                 insn_tls_le_move_X1);
+         else
+           /* IE -> IE */
+           tilepro_replace_insn (contents + rel->r_offset,
+                                 insn_mask_X1_no_dest_no_srca,
+                                 insn_tls_ie_lw_X1);
+         continue;
+         break;
+       default:
+         break;
+       }
+
+      switch (r_type)
+       {
         case R_TILEPRO_IMM16_X0_GOT:
         case R_TILEPRO_IMM16_X1_GOT:
         case R_TILEPRO_IMM16_X0_GOT_LO:
@@ -2908,6 +3307,45 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
            }
          break;
 
+        case R_TILEPRO_IMM16_X0_TLS_LE:
+        case R_TILEPRO_IMM16_X1_TLS_LE:
+        case R_TILEPRO_IMM16_X0_TLS_LE_LO:
+        case R_TILEPRO_IMM16_X1_TLS_LE_LO:
+        case R_TILEPRO_IMM16_X0_TLS_LE_HI:
+        case R_TILEPRO_IMM16_X1_TLS_LE_HI:
+        case R_TILEPRO_IMM16_X0_TLS_LE_HA:
+        case R_TILEPRO_IMM16_X1_TLS_LE_HA:
+         if (info->shared)
+           {
+             Elf_Internal_Rela outrel;
+             bfd_boolean skip;
+
+             BFD_ASSERT (sreloc != NULL);
+             skip = FALSE;
+             outrel.r_offset =
+               _bfd_elf_section_offset (output_bfd, info, input_section,
+                                        rel->r_offset);
+             if (outrel.r_offset == (bfd_vma) -1)
+               skip = TRUE;
+             else if (outrel.r_offset == (bfd_vma) -2)
+               skip = TRUE;
+             outrel.r_offset += (input_section->output_section->vma
+                                 + input_section->output_offset);
+             if (skip)
+               memset (&outrel, 0, sizeof outrel);
+             else
+               {
+                 outrel.r_info = ELF32_R_INFO (0, r_type);
+                 outrel.r_addend = relocation - dtpoff_base (info)
+                                   + rel->r_addend;
+               }
+
+             tilepro_elf_append_rela_32 (output_bfd, sreloc, &outrel);
+             continue;
+           }
+         relocation = tpoff (info, relocation);
+         break;
+
         case R_TILEPRO_IMM16_X0_TLS_GD:
         case R_TILEPRO_IMM16_X1_TLS_GD:
         case R_TILEPRO_IMM16_X0_TLS_GD_LO:
@@ -2916,9 +3354,6 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
         case R_TILEPRO_IMM16_X1_TLS_GD_HI:
         case R_TILEPRO_IMM16_X0_TLS_GD_HA:
         case R_TILEPRO_IMM16_X1_TLS_GD_HA:
-          tls_type = GOT_TLS_GD;
-          goto have_tls_reference;
-
         case R_TILEPRO_IMM16_X0_TLS_IE:
         case R_TILEPRO_IMM16_X1_TLS_IE:
         case R_TILEPRO_IMM16_X0_TLS_IE_LO:
@@ -2927,45 +3362,32 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
         case R_TILEPRO_IMM16_X1_TLS_IE_HI:
         case R_TILEPRO_IMM16_X0_TLS_IE_HA:
         case R_TILEPRO_IMM16_X1_TLS_IE_HA:
-          tls_type = GOT_TLS_IE;
-          /* Fall through. */
-
-        have_tls_reference:
+         r_type = tilepro_elf_tls_transition (info, r_type, h == NULL);
+          tls_type = GOT_UNKNOWN;
          if (h == NULL && local_got_offsets)
            tls_type
              = _bfd_tilepro_elf_local_got_tls_type (input_bfd) [r_symndx];
          else if (h != NULL)
            {
              tls_type = tilepro_elf_hash_entry(h)->tls_type;
+             if (!info->shared && h->dynindx == -1 && tls_type == GOT_TLS_IE)
+               r_type = tilepro_tls_translate_to_le (r_type);
            }
          if (tls_type == GOT_TLS_IE)
-           switch (r_type)
-             {
-              case R_TILEPRO_IMM16_X0_TLS_GD:
-                r_type = R_TILEPRO_IMM16_X0_TLS_IE;
-                break;
-              case R_TILEPRO_IMM16_X1_TLS_GD:
-                r_type = R_TILEPRO_IMM16_X1_TLS_IE;
-                break;
-              case R_TILEPRO_IMM16_X0_TLS_GD_LO:
-                r_type = R_TILEPRO_IMM16_X0_TLS_IE_LO;
-                break;
-              case R_TILEPRO_IMM16_X1_TLS_GD_LO:
-                r_type = R_TILEPRO_IMM16_X1_TLS_IE_LO;
-                break;
-              case R_TILEPRO_IMM16_X0_TLS_GD_HI:
-                r_type = R_TILEPRO_IMM16_X0_TLS_IE_HI;
-                break;
-              case R_TILEPRO_IMM16_X1_TLS_GD_HI:
-                r_type = R_TILEPRO_IMM16_X1_TLS_IE_HI;
-                break;
-              case R_TILEPRO_IMM16_X0_TLS_GD_HA:
-                r_type = R_TILEPRO_IMM16_X0_TLS_IE_HA;
-                break;
-              case R_TILEPRO_IMM16_X1_TLS_GD_HA:
-                r_type = R_TILEPRO_IMM16_X1_TLS_IE_HA;
-                break;
-             }
+           r_type = tilepro_tls_translate_to_ie (r_type);
+
+         if (r_type == R_TILEPRO_IMM16_X0_TLS_LE
+             || r_type == R_TILEPRO_IMM16_X1_TLS_LE
+             || r_type == R_TILEPRO_IMM16_X0_TLS_LE_LO
+             || r_type == R_TILEPRO_IMM16_X1_TLS_LE_LO
+             || r_type == R_TILEPRO_IMM16_X0_TLS_LE_HI
+             || r_type == R_TILEPRO_IMM16_X1_TLS_LE_HI
+             || r_type == R_TILEPRO_IMM16_X0_TLS_LE_HA
+             || r_type == R_TILEPRO_IMM16_X1_TLS_LE_HA)
+           {
+             relocation = tpoff (info, relocation);
+             break;
+           }
 
          if (h != NULL)
            {
index 2aaa3d3..27e5179 100644 (file)
@@ -490,35 +490,38 @@ static reloc_howto_type tilegx_elf_howto_table [] =
 
   TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X0_HW0_GOT, 0),
   TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X1_HW0_GOT, 0),
-  TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X0_HW1_GOT, 16),
-  TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X1_HW1_GOT, 16),
-  TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X0_HW2_GOT, 32),
-  TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X1_HW2_GOT, 32),
-  TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X0_HW3_GOT, 48),
-  TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X1_HW3_GOT, 48),
+  /* These relocs are currently not defined.  */
+  EMPTY_HOWTO (66),
+  EMPTY_HOWTO (67),
+  EMPTY_HOWTO (68),
+  EMPTY_HOWTO (69),
+  EMPTY_HOWTO (70),
+  EMPTY_HOWTO (71),
 
   TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X0_HW0_LAST_GOT, 0),
   TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X1_HW0_LAST_GOT, 0),
   TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X0_HW1_LAST_GOT, 16),
   TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X1_HW1_LAST_GOT, 16),
-  TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X0_HW2_LAST_GOT, 32),
-  TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X1_HW2_LAST_GOT, 32),
+  /* These relocs are currently not defined.  */
+  EMPTY_HOWTO (76),
+  EMPTY_HOWTO (77),
 
   TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X0_HW0_TLS_GD, 0),
   TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X1_HW0_TLS_GD, 0),
-  TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X0_HW1_TLS_GD, 16),
-  TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X1_HW1_TLS_GD, 16),
-  TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X0_HW2_TLS_GD, 32),
-  TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X1_HW2_TLS_GD, 32),
-  TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X0_HW3_TLS_GD, 48),
-  TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X1_HW3_TLS_GD, 48),
+
+  TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X0_HW0_TLS_LE, 0),
+  TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X1_HW0_TLS_LE, 0),
+  TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X0_HW0_LAST_TLS_LE, 0),
+  TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X1_HW0_LAST_TLS_LE, 0),
+  TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X0_HW1_LAST_TLS_LE, 16),
+  TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X1_HW1_LAST_TLS_LE, 16),
 
   TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X0_HW0_LAST_TLS_GD, 0),
   TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X1_HW0_LAST_TLS_GD, 0),
   TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X0_HW1_LAST_TLS_GD, 16),
   TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X1_HW1_LAST_TLS_GD, 16),
-  TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X0_HW2_LAST_TLS_GD, 32),
-  TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X1_HW2_LAST_TLS_GD, 32),
+  EMPTY_HOWTO (90),
+  EMPTY_HOWTO (91),
 
 #define TILEGX_IMM16_HOWTO_TLS_IE(name, rshift) \
   HOWTO (name, rshift, 1, 16, FALSE, 0, \
@@ -527,12 +530,12 @@ static reloc_howto_type tilegx_elf_howto_table [] =
 
   TILEGX_IMM16_HOWTO_TLS_IE (R_TILEGX_IMM16_X0_HW0_TLS_IE, 0),
   TILEGX_IMM16_HOWTO_TLS_IE (R_TILEGX_IMM16_X1_HW0_TLS_IE, 0),
-  TILEGX_IMM16_HOWTO_TLS_IE (R_TILEGX_IMM16_X0_HW1_TLS_IE, 16),
-  TILEGX_IMM16_HOWTO_TLS_IE (R_TILEGX_IMM16_X1_HW1_TLS_IE, 16),
-  TILEGX_IMM16_HOWTO_TLS_IE (R_TILEGX_IMM16_X0_HW2_TLS_IE, 32),
-  TILEGX_IMM16_HOWTO_TLS_IE (R_TILEGX_IMM16_X1_HW2_TLS_IE, 32),
-  TILEGX_IMM16_HOWTO_TLS_IE (R_TILEGX_IMM16_X0_HW3_TLS_IE, 48),
-  TILEGX_IMM16_HOWTO_TLS_IE (R_TILEGX_IMM16_X1_HW3_TLS_IE, 48),
+  EMPTY_HOWTO (94),
+  EMPTY_HOWTO (95),
+  EMPTY_HOWTO (96),
+  EMPTY_HOWTO (97),
+  EMPTY_HOWTO (98),
+  EMPTY_HOWTO (99),
 
 #define TILEGX_IMM16_HOWTO_LAST_TLS_IE(name, rshift) \
   HOWTO (name, rshift, 1, 16, FALSE, 0, \
@@ -543,8 +546,8 @@ static reloc_howto_type tilegx_elf_howto_table [] =
   TILEGX_IMM16_HOWTO_LAST_TLS_IE (R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE, 0),
   TILEGX_IMM16_HOWTO_LAST_TLS_IE (R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE, 16),
   TILEGX_IMM16_HOWTO_LAST_TLS_IE (R_TILEGX_IMM16_X1_HW1_LAST_TLS_IE, 16),
-  TILEGX_IMM16_HOWTO_LAST_TLS_IE (R_TILEGX_IMM16_X0_HW2_LAST_TLS_IE, 32),
-  TILEGX_IMM16_HOWTO_LAST_TLS_IE (R_TILEGX_IMM16_X1_HW2_LAST_TLS_IE, 32),
+  EMPTY_HOWTO (104),
+  EMPTY_HOWTO (105),
 
   HOWTO(R_TILEGX_TLS_DTPMOD64, 0, 0, 0, FALSE, 0, complain_overflow_dont,
         bfd_elf_generic_reloc, "R_TILEGX_TLS_DTPMOD64",
@@ -564,7 +567,31 @@ static reloc_howto_type tilegx_elf_howto_table [] =
         FALSE, 0, -1, TRUE),
   HOWTO(R_TILEGX_TLS_TPOFF32, 0, 0, 0, FALSE, 0, complain_overflow_dont,
         bfd_elf_generic_reloc, "R_TILEGX_TLS_TPOFF32",
-        FALSE, 0, 0, TRUE)
+        FALSE, 0, 0, TRUE),
+
+  HOWTO (R_TILEGX_TLS_GD_CALL, /* type */
+        TILEGX_LOG2_BUNDLE_ALIGNMENT_IN_BYTES, /* rightshift */
+        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        27,                    /* bitsize */
+        TRUE,                  /* pc_relative */
+        0,                     /* bitpos */
+        complain_overflow_signed,/* complain_on_overflow */
+        bfd_elf_generic_reloc, /* special_function */
+        "R_TILEGX_TLS_GD_CALL", /* name */
+        FALSE,                 /* partial_inplace */
+        0,                     /* src_mask */
+        -1,                    /* dst_mask */
+        TRUE),                 /* pcrel_offset */
+
+  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_X0_TLS_GD_ADD,  0,  8),
+  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_X1_TLS_GD_ADD,  0,  8),
+  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_Y0_TLS_GD_ADD,  0,  8),
+  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_Y1_TLS_GD_ADD,  0,  8),
+  TILEGX_IMM_HOWTO(R_TILEGX_TLS_IE_LOAD, 0,  8),
+  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_X0_TLS_ADD,  0,  8),
+  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_X1_TLS_ADD,  0,  8),
+  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_Y0_TLS_ADD,  0,  8),
+  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_Y1_TLS_ADD,  0,  8),
 };
 
 static reloc_howto_type tilegx_elf_howto_table2 [] =
@@ -686,46 +713,28 @@ static const reloc_map tilegx_reloc_map [] =
   SIMPLE_REMAP (TILEGX_IMM16_X1_HW2_LAST_PCREL)
   SIMPLE_REMAP (TILEGX_IMM16_X0_HW0_GOT)
   SIMPLE_REMAP (TILEGX_IMM16_X1_HW0_GOT)
-  SIMPLE_REMAP (TILEGX_IMM16_X0_HW1_GOT)
-  SIMPLE_REMAP (TILEGX_IMM16_X1_HW1_GOT)
-  SIMPLE_REMAP (TILEGX_IMM16_X0_HW2_GOT)
-  SIMPLE_REMAP (TILEGX_IMM16_X1_HW2_GOT)
-  SIMPLE_REMAP (TILEGX_IMM16_X0_HW3_GOT)
-  SIMPLE_REMAP (TILEGX_IMM16_X1_HW3_GOT)
   SIMPLE_REMAP (TILEGX_IMM16_X0_HW0_LAST_GOT)
   SIMPLE_REMAP (TILEGX_IMM16_X1_HW0_LAST_GOT)
   SIMPLE_REMAP (TILEGX_IMM16_X0_HW1_LAST_GOT)
   SIMPLE_REMAP (TILEGX_IMM16_X1_HW1_LAST_GOT)
-  SIMPLE_REMAP (TILEGX_IMM16_X0_HW2_LAST_GOT)
-  SIMPLE_REMAP (TILEGX_IMM16_X1_HW2_LAST_GOT)
   SIMPLE_REMAP (TILEGX_IMM16_X0_HW0_TLS_GD)
   SIMPLE_REMAP (TILEGX_IMM16_X1_HW0_TLS_GD)
-  SIMPLE_REMAP (TILEGX_IMM16_X0_HW1_TLS_GD)
-  SIMPLE_REMAP (TILEGX_IMM16_X1_HW1_TLS_GD)
-  SIMPLE_REMAP (TILEGX_IMM16_X0_HW2_TLS_GD)
-  SIMPLE_REMAP (TILEGX_IMM16_X1_HW2_TLS_GD)
-  SIMPLE_REMAP (TILEGX_IMM16_X0_HW3_TLS_GD)
-  SIMPLE_REMAP (TILEGX_IMM16_X1_HW3_TLS_GD)
+  SIMPLE_REMAP (TILEGX_IMM16_X0_HW0_TLS_LE)
+  SIMPLE_REMAP (TILEGX_IMM16_X1_HW0_TLS_LE)
+  SIMPLE_REMAP (TILEGX_IMM16_X0_HW0_LAST_TLS_LE)
+  SIMPLE_REMAP (TILEGX_IMM16_X1_HW0_LAST_TLS_LE)
+  SIMPLE_REMAP (TILEGX_IMM16_X0_HW1_LAST_TLS_LE)
+  SIMPLE_REMAP (TILEGX_IMM16_X1_HW1_LAST_TLS_LE)
   SIMPLE_REMAP (TILEGX_IMM16_X0_HW0_LAST_TLS_GD)
   SIMPLE_REMAP (TILEGX_IMM16_X1_HW0_LAST_TLS_GD)
   SIMPLE_REMAP (TILEGX_IMM16_X0_HW1_LAST_TLS_GD)
   SIMPLE_REMAP (TILEGX_IMM16_X1_HW1_LAST_TLS_GD)
-  SIMPLE_REMAP (TILEGX_IMM16_X0_HW2_LAST_TLS_GD)
-  SIMPLE_REMAP (TILEGX_IMM16_X1_HW2_LAST_TLS_GD)
   SIMPLE_REMAP (TILEGX_IMM16_X0_HW0_TLS_IE)
   SIMPLE_REMAP (TILEGX_IMM16_X1_HW0_TLS_IE)
-  SIMPLE_REMAP (TILEGX_IMM16_X0_HW1_TLS_IE)
-  SIMPLE_REMAP (TILEGX_IMM16_X1_HW1_TLS_IE)
-  SIMPLE_REMAP (TILEGX_IMM16_X0_HW2_TLS_IE)
-  SIMPLE_REMAP (TILEGX_IMM16_X1_HW2_TLS_IE)
-  SIMPLE_REMAP (TILEGX_IMM16_X0_HW3_TLS_IE)
-  SIMPLE_REMAP (TILEGX_IMM16_X1_HW3_TLS_IE)
   SIMPLE_REMAP (TILEGX_IMM16_X0_HW0_LAST_TLS_IE)
   SIMPLE_REMAP (TILEGX_IMM16_X1_HW0_LAST_TLS_IE)
   SIMPLE_REMAP (TILEGX_IMM16_X0_HW1_LAST_TLS_IE)
   SIMPLE_REMAP (TILEGX_IMM16_X1_HW1_LAST_TLS_IE)
-  SIMPLE_REMAP (TILEGX_IMM16_X0_HW2_LAST_TLS_IE)
-  SIMPLE_REMAP (TILEGX_IMM16_X1_HW2_LAST_TLS_IE)
 
   SIMPLE_REMAP (TILEGX_TLS_DTPMOD64)
   SIMPLE_REMAP (TILEGX_TLS_DTPOFF64)
@@ -735,6 +744,17 @@ static const reloc_map tilegx_reloc_map [] =
   SIMPLE_REMAP (TILEGX_TLS_DTPOFF32)
   SIMPLE_REMAP (TILEGX_TLS_TPOFF32)
 
+  SIMPLE_REMAP (TILEGX_TLS_GD_CALL)
+  SIMPLE_REMAP (TILEGX_IMM8_X0_TLS_GD_ADD)
+  SIMPLE_REMAP (TILEGX_IMM8_X1_TLS_GD_ADD)
+  SIMPLE_REMAP (TILEGX_IMM8_Y0_TLS_GD_ADD)
+  SIMPLE_REMAP (TILEGX_IMM8_Y1_TLS_GD_ADD)
+  SIMPLE_REMAP (TILEGX_TLS_IE_LOAD)
+  SIMPLE_REMAP (TILEGX_IMM8_X0_TLS_ADD)
+  SIMPLE_REMAP (TILEGX_IMM8_X1_TLS_ADD)
+  SIMPLE_REMAP (TILEGX_IMM8_Y0_TLS_ADD)
+  SIMPLE_REMAP (TILEGX_IMM8_Y1_TLS_ADD)
+
 #undef SIMPLE_REMAP
 #undef TH_REMAP
 
@@ -824,6 +844,10 @@ struct tilegx_elf_link_hash_table
   asection *sdynbss;
   asection *srelbss;
 
+  /* Whether LE transition has been disabled for some of the
+     sections.  */
+  bfd_boolean disable_le_transition;
+
   /* Small local sym to section mapping cache.  */
   struct sym_cache sym_cache;
 };
@@ -920,7 +944,7 @@ tilegx_info_to_howto_rela (bfd *abfd ATTRIBUTE_UNUSED,
 {
   unsigned int r_type = TILEGX_ELF_R_TYPE (dst->r_info);
 
-  if (r_type <= (unsigned int) R_TILEGX_TLS_TPOFF32)
+  if (r_type <= (unsigned int) R_TILEGX_IMM8_Y1_TLS_ADD)
     cache_ptr->howto = &tilegx_elf_howto_table [r_type];
   else if (r_type - R_TILEGX_GNU_VTINHERIT
           <= (unsigned int) R_TILEGX_GNU_VTENTRY)
@@ -1003,10 +1027,18 @@ static const tilegx_create_func reloc_to_create_func[] =
   create_Imm16_X1,
   create_Imm16_X0,
   create_Imm16_X1,
+  NULL,
+  NULL,
+  NULL,
+  NULL,
+  NULL,
+  NULL,
   create_Imm16_X0,
   create_Imm16_X1,
   create_Imm16_X0,
   create_Imm16_X1,
+  NULL,
+  NULL,
   create_Imm16_X0,
   create_Imm16_X1,
   create_Imm16_X0,
@@ -1019,30 +1051,20 @@ static const tilegx_create_func reloc_to_create_func[] =
   create_Imm16_X1,
   create_Imm16_X0,
   create_Imm16_X1,
+  NULL,
+  NULL,
   create_Imm16_X0,
   create_Imm16_X1,
+  NULL,
+  NULL,
+  NULL,
+  NULL,
+  NULL,
+  NULL,
   create_Imm16_X0,
   create_Imm16_X1,
   create_Imm16_X0,
   create_Imm16_X1,
-  create_Imm16_X0,
-  create_Imm16_X1,
-  create_Imm16_X0,
-  create_Imm16_X1,
-  create_Imm16_X0,
-  create_Imm16_X1,
-  create_Imm16_X0,
-  create_Imm16_X1,
-  create_Imm16_X0,
-  create_Imm16_X1,
-  create_Imm16_X0,
-  create_Imm16_X1,
-  create_Imm16_X0,
-  create_Imm16_X1,
-  create_Imm16_X0,
-  create_Imm16_X1,
-  create_Imm16_X0,
-  create_Imm16_X1
 };
 
 static void
@@ -1538,6 +1560,83 @@ tilegx_elf_copy_indirect_symbol (struct bfd_link_info *info,
   _bfd_elf_link_hash_copy_indirect (info, dir, ind);
 }
 
+static int
+tilegx_tls_translate_to_le (int r_type)
+{
+  switch (r_type)
+    {
+    case R_TILEGX_IMM16_X0_HW0_TLS_GD:
+    case R_TILEGX_IMM16_X0_HW0_TLS_IE:
+      return R_TILEGX_IMM16_X0_HW0_TLS_LE;
+
+    case R_TILEGX_IMM16_X1_HW0_TLS_GD:
+    case R_TILEGX_IMM16_X1_HW0_TLS_IE:
+      return R_TILEGX_IMM16_X1_HW0_TLS_LE;
+
+    case R_TILEGX_IMM16_X0_HW0_LAST_TLS_GD:
+    case R_TILEGX_IMM16_X0_HW0_LAST_TLS_IE:
+      return R_TILEGX_IMM16_X0_HW0_LAST_TLS_LE;
+
+    case R_TILEGX_IMM16_X1_HW0_LAST_TLS_GD:
+    case R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE:
+      return R_TILEGX_IMM16_X1_HW0_LAST_TLS_LE;
+
+    case R_TILEGX_IMM16_X0_HW1_LAST_TLS_GD:
+    case R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE:
+      return R_TILEGX_IMM16_X0_HW1_LAST_TLS_LE;
+
+    case R_TILEGX_IMM16_X1_HW1_LAST_TLS_GD:
+    case R_TILEGX_IMM16_X1_HW1_LAST_TLS_IE:
+      return R_TILEGX_IMM16_X1_HW1_LAST_TLS_LE;
+    }
+  return r_type;
+}
+
+static int
+tilegx_tls_translate_to_ie (int r_type)
+{
+  switch (r_type)
+    {
+    case R_TILEGX_IMM16_X0_HW0_TLS_GD:
+    case R_TILEGX_IMM16_X0_HW0_TLS_IE:
+      return R_TILEGX_IMM16_X0_HW0_TLS_IE;
+
+    case R_TILEGX_IMM16_X1_HW0_TLS_GD:
+    case R_TILEGX_IMM16_X1_HW0_TLS_IE:
+      return R_TILEGX_IMM16_X1_HW0_TLS_IE;
+
+    case R_TILEGX_IMM16_X0_HW0_LAST_TLS_GD:
+    case R_TILEGX_IMM16_X0_HW0_LAST_TLS_IE:
+      return R_TILEGX_IMM16_X0_HW0_LAST_TLS_IE;
+
+    case R_TILEGX_IMM16_X1_HW0_LAST_TLS_GD:
+    case R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE:
+      return R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE;
+
+    case R_TILEGX_IMM16_X0_HW1_LAST_TLS_GD:
+    case R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE:
+      return R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE;
+
+    case R_TILEGX_IMM16_X1_HW1_LAST_TLS_GD:
+    case R_TILEGX_IMM16_X1_HW1_LAST_TLS_IE:
+      return R_TILEGX_IMM16_X1_HW1_LAST_TLS_IE;
+    }
+  return r_type;
+}
+
+static int
+tilegx_elf_tls_transition (struct bfd_link_info *info, int r_type,
+                          int is_local, bfd_boolean disable_le_transition)
+{
+  if (info->shared)
+    return r_type;
+
+  if (is_local && !disable_le_transition)
+    return tilegx_tls_translate_to_le (r_type);
+  else
+    return tilegx_tls_translate_to_ie (r_type);
+}
+
 /* Look through the relocs for a section during the first phase, and
    allocate space in the global offset table or procedure linkage
    table.  */
@@ -1553,6 +1652,7 @@ tilegx_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
   const Elf_Internal_Rela *rel_end;
   asection *sreloc;
   int num_relocs;
+  bfd_boolean has_tls_gd_or_ie = FALSE, has_tls_add = FALSE;
 
   if (info->relocatable)
     return TRUE;
@@ -1571,6 +1671,33 @@ tilegx_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
     htab->elf.dynobj = abfd;
 
   rel_end = relocs + num_relocs;
+
+  /* Check whether to do optimization to transform TLS GD/IE
+     referehces to TLS LE.  We disable it if we're linking with old
+     TLS code sequences that do not support such optimization.  Old
+     TLS code sequences have tls_gd_call/tls_ie_load relocations but
+     no tls_add relocations.  */
+  for (rel = relocs; rel < rel_end && !has_tls_add; rel++)
+    {
+      int r_type = TILEGX_ELF_R_TYPE (rel->r_info);
+      switch (r_type)
+       {
+       case R_TILEGX_TLS_GD_CALL:
+       case R_TILEGX_TLS_IE_LOAD:
+         has_tls_gd_or_ie = TRUE;
+         break;
+       case R_TILEGX_IMM8_X0_TLS_ADD:
+       case R_TILEGX_IMM8_Y0_TLS_ADD:
+       case R_TILEGX_IMM8_X1_TLS_ADD:
+       case R_TILEGX_IMM8_Y1_TLS_ADD:
+         has_tls_add = TRUE;
+         break;
+       }
+    }
+
+  sec->sec_flg0 = (has_tls_gd_or_ie && !has_tls_add);
+  htab->disable_le_transition |= sec->sec_flg0;
+
   for (rel = relocs; rel < rel_end; rel++)
     {
       unsigned int r_type;
@@ -1598,39 +1725,36 @@ tilegx_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
        }
 
+      r_type = tilegx_elf_tls_transition (info, r_type, h == NULL,
+                                         sec->sec_flg0);
       switch (r_type)
        {
+       case R_TILEGX_IMM16_X0_HW0_TLS_LE:
+       case R_TILEGX_IMM16_X1_HW0_TLS_LE:
+       case R_TILEGX_IMM16_X0_HW0_LAST_TLS_LE:
+       case R_TILEGX_IMM16_X1_HW0_LAST_TLS_LE:
+       case R_TILEGX_IMM16_X0_HW1_LAST_TLS_LE:
+       case R_TILEGX_IMM16_X1_HW1_LAST_TLS_LE:
+         if (info->shared)
+           goto r_tilegx_plt32;
+         break;
+
        case R_TILEGX_IMM16_X0_HW0_TLS_GD:
        case R_TILEGX_IMM16_X1_HW0_TLS_GD:
-       case R_TILEGX_IMM16_X0_HW1_TLS_GD:
-       case R_TILEGX_IMM16_X1_HW1_TLS_GD:
-       case R_TILEGX_IMM16_X0_HW2_TLS_GD:
-       case R_TILEGX_IMM16_X1_HW2_TLS_GD:
-       case R_TILEGX_IMM16_X0_HW3_TLS_GD:
-       case R_TILEGX_IMM16_X1_HW3_TLS_GD:
        case R_TILEGX_IMM16_X0_HW0_LAST_TLS_GD:
        case R_TILEGX_IMM16_X1_HW0_LAST_TLS_GD:
        case R_TILEGX_IMM16_X0_HW1_LAST_TLS_GD:
        case R_TILEGX_IMM16_X1_HW1_LAST_TLS_GD:
-       case R_TILEGX_IMM16_X0_HW2_LAST_TLS_GD:
-       case R_TILEGX_IMM16_X1_HW2_LAST_TLS_GD:
-          tls_type = GOT_TLS_GD;
+         BFD_ASSERT (info->shared);
+         tls_type = GOT_TLS_GD;
           goto have_got_reference;
 
        case R_TILEGX_IMM16_X0_HW0_TLS_IE:
        case R_TILEGX_IMM16_X1_HW0_TLS_IE:
-       case R_TILEGX_IMM16_X0_HW1_TLS_IE:
-       case R_TILEGX_IMM16_X1_HW1_TLS_IE:
-       case R_TILEGX_IMM16_X0_HW2_TLS_IE:
-       case R_TILEGX_IMM16_X1_HW2_TLS_IE:
-       case R_TILEGX_IMM16_X0_HW3_TLS_IE:
-       case R_TILEGX_IMM16_X1_HW3_TLS_IE:
        case R_TILEGX_IMM16_X0_HW0_LAST_TLS_IE:
        case R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE:
        case R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE:
        case R_TILEGX_IMM16_X1_HW1_LAST_TLS_IE:
-       case R_TILEGX_IMM16_X0_HW2_LAST_TLS_IE:
-       case R_TILEGX_IMM16_X1_HW2_LAST_TLS_IE:
           tls_type = GOT_TLS_IE;
           if (info->shared)
             info->flags |= DF_STATIC_TLS;
@@ -1638,18 +1762,10 @@ tilegx_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
 
        case R_TILEGX_IMM16_X0_HW0_GOT:
        case R_TILEGX_IMM16_X1_HW0_GOT:
-       case R_TILEGX_IMM16_X0_HW1_GOT:
-       case R_TILEGX_IMM16_X1_HW1_GOT:
-       case R_TILEGX_IMM16_X0_HW2_GOT:
-       case R_TILEGX_IMM16_X1_HW2_GOT:
-       case R_TILEGX_IMM16_X0_HW3_GOT:
-       case R_TILEGX_IMM16_X1_HW3_GOT:
        case R_TILEGX_IMM16_X0_HW0_LAST_GOT:
        case R_TILEGX_IMM16_X1_HW0_LAST_GOT:
        case R_TILEGX_IMM16_X0_HW1_LAST_GOT:
        case R_TILEGX_IMM16_X1_HW1_LAST_GOT:
-       case R_TILEGX_IMM16_X0_HW2_LAST_GOT:
-       case R_TILEGX_IMM16_X1_HW2_LAST_GOT:
           tls_type = GOT_NORMAL;
           /* Fall Through */
 
@@ -1720,6 +1836,24 @@ tilegx_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
            }
          break;
 
+       case R_TILEGX_TLS_GD_CALL:
+         if (info->shared)
+           {
+             /* These are basically R_TILEGX_JUMPOFF_X1_PLT relocs
+                against __tls_get_addr.  */
+             struct bfd_link_hash_entry *bh = NULL;
+             if (! _bfd_generic_link_add_one_symbol (info, abfd,
+                                                     "__tls_get_addr", 0,
+                                                     bfd_und_section_ptr, 0,
+                                                     NULL, FALSE, FALSE,
+                                                     &bh))
+               return FALSE;
+             h = (struct elf_link_hash_entry *) bh;
+           }
+         else
+           break;
+         /* Fall through */
+
         case R_TILEGX_JUMPOFF_X1_PLT:
          /* This symbol requires a procedure linkage table entry.  We
             actually build the entry in adjust_dynamic_symbol,
@@ -1805,16 +1939,15 @@ tilegx_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
        case R_TILEGX_IMM16_X0_HW2_LAST:
        case R_TILEGX_IMM16_X1_HW2_LAST:
          if (h != NULL)
-            {
-              h->non_got_ref = 1;
+           h->non_got_ref = 1;
 
-              if (!info->shared)
-                {
-                  /* We may need a .plt entry if the function this reloc
-                     refers to is in a shared lib.  */
-                  h->plt.refcount += 1;
-                }
-            }
+       r_tilegx_plt32:
+         if (h != NULL && !info->shared)
+           {
+             /* We may need a .plt entry if the function this reloc
+                refers to is in a shared lib.  */
+             h->plt.refcount += 1;
+           }
 
          /* If we are creating a shared library, and this is a reloc
             against a global symbol, or a non PC relative reloc
@@ -2008,51 +2141,28 @@ tilegx_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info,
        }
 
       r_type = TILEGX_ELF_R_TYPE (rel->r_info);
-
+      r_type = tilegx_elf_tls_transition (info, r_type, h != NULL,
+                                         sec->sec_flg0);
       switch (r_type)
        {
        case R_TILEGX_IMM16_X0_HW0_GOT:
        case R_TILEGX_IMM16_X1_HW0_GOT:
-       case R_TILEGX_IMM16_X0_HW1_GOT:
-       case R_TILEGX_IMM16_X1_HW1_GOT:
-       case R_TILEGX_IMM16_X0_HW2_GOT:
-       case R_TILEGX_IMM16_X1_HW2_GOT:
-       case R_TILEGX_IMM16_X0_HW3_GOT:
-       case R_TILEGX_IMM16_X1_HW3_GOT:
        case R_TILEGX_IMM16_X0_HW0_LAST_GOT:
        case R_TILEGX_IMM16_X1_HW0_LAST_GOT:
        case R_TILEGX_IMM16_X0_HW1_LAST_GOT:
        case R_TILEGX_IMM16_X1_HW1_LAST_GOT:
-       case R_TILEGX_IMM16_X0_HW2_LAST_GOT:
-       case R_TILEGX_IMM16_X1_HW2_LAST_GOT:
        case R_TILEGX_IMM16_X0_HW0_TLS_GD:
        case R_TILEGX_IMM16_X1_HW0_TLS_GD:
-       case R_TILEGX_IMM16_X0_HW1_TLS_GD:
-       case R_TILEGX_IMM16_X1_HW1_TLS_GD:
-       case R_TILEGX_IMM16_X0_HW2_TLS_GD:
-       case R_TILEGX_IMM16_X1_HW2_TLS_GD:
-       case R_TILEGX_IMM16_X0_HW3_TLS_GD:
-       case R_TILEGX_IMM16_X1_HW3_TLS_GD:
        case R_TILEGX_IMM16_X0_HW0_LAST_TLS_GD:
        case R_TILEGX_IMM16_X1_HW0_LAST_TLS_GD:
        case R_TILEGX_IMM16_X0_HW1_LAST_TLS_GD:
        case R_TILEGX_IMM16_X1_HW1_LAST_TLS_GD:
-       case R_TILEGX_IMM16_X0_HW2_LAST_TLS_GD:
-       case R_TILEGX_IMM16_X1_HW2_LAST_TLS_GD:
        case R_TILEGX_IMM16_X0_HW0_TLS_IE:
        case R_TILEGX_IMM16_X1_HW0_TLS_IE:
-       case R_TILEGX_IMM16_X0_HW1_TLS_IE:
-       case R_TILEGX_IMM16_X1_HW1_TLS_IE:
-       case R_TILEGX_IMM16_X0_HW2_TLS_IE:
-       case R_TILEGX_IMM16_X1_HW2_TLS_IE:
-       case R_TILEGX_IMM16_X0_HW3_TLS_IE:
-       case R_TILEGX_IMM16_X1_HW3_TLS_IE:
        case R_TILEGX_IMM16_X0_HW0_LAST_TLS_IE:
        case R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE:
        case R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE:
        case R_TILEGX_IMM16_X1_HW1_LAST_TLS_IE:
-       case R_TILEGX_IMM16_X0_HW2_LAST_TLS_IE:
-       case R_TILEGX_IMM16_X1_HW2_LAST_TLS_IE:
          if (h != NULL)
            {
              if (h->got.refcount > 0)
@@ -2060,7 +2170,8 @@ tilegx_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info,
            }
          else
            {
-             if (local_got_refcounts[r_symndx] > 0)
+             if (local_got_refcounts &&
+                 local_got_refcounts[r_symndx] > 0)
                local_got_refcounts[r_symndx]--;
            }
          break;
@@ -2361,7 +2472,15 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
       h->needs_plt = 0;
     }
 
-  if (h->got.refcount > 0)
+  /* If a TLS_IE symbol is now local to the binary, make it a TLS_LE
+     requiring no TLS entry.  */
+  if (h->got.refcount > 0
+      && !htab->disable_le_transition
+      && !info->shared
+      && h->dynindx == -1
+      && tilegx_elf_hash_entry(h)->tls_type == GOT_TLS_IE)
+    h->got.offset = (bfd_vma) -1;
+  else if (h->got.refcount > 0)
     {
       asection *s;
       bfd_boolean dyn;
@@ -2781,6 +2900,125 @@ tpoff (struct bfd_link_info *info, bfd_vma address)
   return (address - htab->tls_sec->vma);
 }
 
+/* Copy SIZE bits from FROM to TO at address ADDR.  */
+
+static void
+tilegx_copy_bits (bfd_byte *addr, int from, int to, int size)
+{
+  int i;
+  for (i = 0; i < size; i++)
+    {
+      int from_byte = (from + i) / 8;
+      int from_bit = (from + i) % 8;
+      int to_byte = (to + i) / 8;
+      int to_bit = (to + i) % 8;
+      bfd_byte to_mask = 1 << to_bit;
+      addr[to_byte] = (addr[to_byte] & ~to_mask)
+       | ((addr[from_byte] >> from_bit << to_bit) & to_mask);
+    }
+}
+
+/* Replace the MASK bits in ADDR with those in INSN, for the next
+   TILEGX_BUNDLE_SIZE_IN_BYTES bytes.  */
+
+static void
+tilegx_replace_insn (bfd_byte *addr, const bfd_byte *mask,
+                    const bfd_byte *insn)
+{
+  int i;
+  for (i = 0; i < TILEGX_BUNDLE_SIZE_IN_BYTES; i++)
+    {
+      addr[i] = (addr[i] & ~mask[i]) | (insn[i] & mask[i]);
+    }
+}
+
+/* Mask to extract the bits corresponding to an instruction in a
+   specific pipe of a bundle.  */
+static const bfd_byte insn_mask_X1[] = {
+  0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0x3f
+};
+
+/* Mask to extract the bits corresponding to an instruction in a
+   specific pipe of a bundle, minus the destination operand and the
+   first source operand.  */
+static const bfd_byte insn_mask_X0_no_dest_no_srca[] = { 
+  0x00, 0xf0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00
+};
+
+static const bfd_byte insn_mask_X1_no_dest_no_srca[] = {
+  0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x3f
+};
+
+static const bfd_byte insn_mask_Y0_no_dest_no_srca[] = {
+  0x00, 0xf0, 0x0f, 0x78, 0x00, 0x00, 0x00, 0x00
+};
+static const bfd_byte insn_mask_Y1_no_dest_no_srca[] = {
+  0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x07, 0x3c
+};
+
+/* Mask to extract the bits corresponding to an instruction in a
+   specific pipe of a bundle, minus the register operands.  */
+static const bfd_byte insn_mask_X0_no_operand[] = {
+  0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00
+};
+
+static const bfd_byte insn_mask_X1_no_operand[] = {
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x3f
+};
+
+static const bfd_byte insn_mask_Y0_no_operand[] = {
+  0x00, 0x00, 0x0c, 0x78, 0x00, 0x00, 0x00, 0x00
+};
+
+static const bfd_byte insn_mask_Y1_no_operand[] = {
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x3c
+};
+
+/* Various instructions synthesized to support tls references.  */
+
+/* ld r0, r0 in the X1 pipe, used for tls ie.  */
+static const bfd_byte insn_tls_ie_ld_X1[] = {
+  0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x6a, 0x28
+};
+
+/* ld4s r0, r0 in the X1 pipe, used for tls ie.  */
+static const bfd_byte insn_tls_ie_ld4s_X1[] = {
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x6a, 0x28
+};
+
+/* add r0, r0, tp in various pipes, used for tls ie.  */
+static const bfd_byte insn_tls_ie_add_X0X1[] = {
+  0x00, 0x50, 0x0f, 0x50, 0x00, 0xa8, 0x07, 0x28
+};
+static const bfd_byte insn_tls_ie_add_Y0Y1[] = {
+  0x00, 0x50, 0x27, 0x2c, 0x00, 0xa8, 0x13, 0x9a
+};
+
+/* addx r0, r0, tp in various pipes, used for tls ie.  */
+static const bfd_byte insn_tls_ie_addx_X0X1[] = {
+  0x00, 0x50, 0x0b, 0x50, 0x00, 0xa8, 0x05, 0x28
+};
+static const bfd_byte insn_tls_ie_addx_Y0Y1[] = {
+  0x00, 0x50, 0x03, 0x2c, 0x00, 0xa8, 0x01, 0x9a
+};
+
+/* move r0, r0 in various pipes, used for tls gd.  */
+static const bfd_byte insn_tls_gd_add_X0X1[] = {
+  0x00, 0xf0, 0x07, 0x51, 0x00, 0xf8, 0x3b, 0x28
+};
+static const bfd_byte insn_tls_gd_add_Y0Y1[] = {
+  0x00, 0xf0, 0x0b, 0x54, 0x00, 0xf8, 0x05, 0xae
+};
+
+static const bfd_byte *insn_move_X0X1 = insn_tls_gd_add_X0X1;
+static const bfd_byte *insn_move_Y0Y1 = insn_tls_gd_add_Y0Y1;
+
+static const bfd_byte *insn_add_X0X1 = insn_tls_ie_add_X0X1;
+static const bfd_byte *insn_add_Y0Y1 = insn_tls_ie_add_Y0Y1;
+
+static const bfd_byte *insn_addx_X0X1 = insn_tls_ie_addx_X0X1;
+static const bfd_byte *insn_addx_Y0Y1 = insn_tls_ie_addx_Y0Y1;
+
 /* Relocate an TILEGX ELF section.
 
    The RELOCATE_SECTION function is called by the new ELF backend linker
@@ -2845,6 +3083,7 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
   for (; rel < relend; rel++)
     {
       int r_type, tls_type;
+      bfd_boolean is_tls_iele, is_tls_le;
       reloc_howto_type *howto;
       unsigned long r_symndx;
       struct elf_link_hash_entry *h;
@@ -2927,20 +3166,203 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 
       switch (r_type)
        {
+       case R_TILEGX_TLS_GD_CALL:
+       case R_TILEGX_IMM8_X0_TLS_GD_ADD:
+       case R_TILEGX_IMM8_Y0_TLS_GD_ADD:
+       case R_TILEGX_IMM8_X1_TLS_GD_ADD:
+       case R_TILEGX_IMM8_Y1_TLS_GD_ADD:
+       case R_TILEGX_IMM8_X0_TLS_ADD:
+       case R_TILEGX_IMM8_Y0_TLS_ADD:
+       case R_TILEGX_IMM8_X1_TLS_ADD:
+       case R_TILEGX_IMM8_Y1_TLS_ADD:
+         tls_type = GOT_UNKNOWN;
+         if (h == NULL && local_got_offsets)
+           tls_type =
+             _bfd_tilegx_elf_local_got_tls_type (input_bfd) [r_symndx];
+         else if (h != NULL)
+           tls_type = tilegx_elf_hash_entry(h)->tls_type;
+
+         is_tls_iele = (! info->shared || tls_type == GOT_TLS_IE);
+         is_tls_le = is_tls_iele && (!input_section->sec_flg0
+                                     && !info->shared
+                                     && (h == NULL || h->dynindx == -1));
+
+         if (r_type == R_TILEGX_TLS_GD_CALL)
+           {
+             if (is_tls_le)
+               {
+                 /* GD -> LE */
+                 tilegx_replace_insn (contents + rel->r_offset,
+                                      insn_mask_X1, insn_move_X0X1);
+                 continue;
+               }
+             else if (is_tls_iele)
+               {
+                 /* GD -> IE */
+                 if (ABI_64_P (output_bfd))
+                   tilegx_replace_insn (contents + rel->r_offset,
+                                        insn_mask_X1, insn_tls_ie_ld_X1);
+                 else
+                   tilegx_replace_insn (contents + rel->r_offset,
+                                        insn_mask_X1, insn_tls_ie_ld4s_X1);
+                 continue;
+               }
+
+             /* GD -> GD */
+             h = (struct elf_link_hash_entry *)
+               bfd_link_hash_lookup (info->hash, "__tls_get_addr", FALSE,
+                                     FALSE, TRUE);
+             BFD_ASSERT (h != NULL);
+             r_type = R_TILEGX_JUMPOFF_X1_PLT;
+             howto = tilegx_elf_howto_table + r_type;
+           }
+         else if (r_type == R_TILEGX_IMM8_X0_TLS_ADD
+                  || r_type ==  R_TILEGX_IMM8_X1_TLS_ADD
+                  || r_type ==  R_TILEGX_IMM8_Y0_TLS_ADD
+                  || r_type ==  R_TILEGX_IMM8_Y1_TLS_ADD)
+           {
+             bfd_boolean is_pipe0 =
+               (r_type == R_TILEGX_IMM8_X0_TLS_ADD
+                || r_type ==  R_TILEGX_IMM8_Y0_TLS_ADD);
+             bfd_boolean is_X0X1 =
+               (r_type == R_TILEGX_IMM8_X0_TLS_ADD
+                || r_type ==  R_TILEGX_IMM8_X1_TLS_ADD);
+             int dest_begin = is_pipe0 ? 0 : 31;
+             int src_begin;
+             const bfd_byte *insn;
+             const bfd_byte *mask;
+
+             if (is_tls_le)
+               {
+                 /* 1. copy dest operand into the first source operand.
+                    2. change the opcode to "move".  */
+                 src_begin = is_pipe0 ? 6 : 37;
+                 insn = is_X0X1 ? insn_move_X0X1 : insn_move_Y0Y1;
+
+                 switch (r_type)
+                   {
+                   case R_TILEGX_IMM8_X0_TLS_ADD:
+                     mask = insn_mask_X0_no_dest_no_srca;
+                     break;
+                   case R_TILEGX_IMM8_X1_TLS_ADD:
+                     mask = insn_mask_X1_no_dest_no_srca;
+                     break;
+                   case R_TILEGX_IMM8_Y0_TLS_ADD:
+                     mask = insn_mask_Y0_no_dest_no_srca;
+                     break;
+                   case R_TILEGX_IMM8_Y1_TLS_ADD:
+                     mask = insn_mask_Y1_no_dest_no_srca;
+                     break;
+                   }
+               }
+             else
+               {
+                 /* 1. copy dest operand into the second source operand.
+                    2. change the opcode to "add".  */
+                 src_begin = is_pipe0 ? 12 : 43;
+                 if (ABI_64_P (output_bfd))
+                   insn = is_X0X1 ? insn_add_X0X1 : insn_add_Y0Y1;
+                 else
+                   insn = is_X0X1 ? insn_addx_X0X1 : insn_addx_Y0Y1;
+
+                 switch (r_type)
+                   {
+                   case R_TILEGX_IMM8_X0_TLS_ADD:
+                     mask = insn_mask_X0_no_operand;
+                     break;
+                   case R_TILEGX_IMM8_X1_TLS_ADD:
+                     mask = insn_mask_X1_no_operand;
+                     break;
+                   case R_TILEGX_IMM8_Y0_TLS_ADD:
+                     mask = insn_mask_Y0_no_operand;
+                     break;
+                   case R_TILEGX_IMM8_Y1_TLS_ADD:
+                     mask = insn_mask_Y1_no_operand;
+                     break;
+                   }
+               }
+
+             tilegx_copy_bits (contents + rel->r_offset, dest_begin,
+                               src_begin, 6);
+             tilegx_replace_insn (contents  + rel->r_offset, mask, insn);
+
+             continue;
+           }
+         else
+           {
+             const bfd_byte *mask = NULL;
+             const bfd_byte *add_insn = NULL;
+             bfd_boolean is_64bit = ABI_64_P (output_bfd);
+
+             switch (r_type)
+               {
+               case R_TILEGX_IMM8_X0_TLS_GD_ADD:
+                 add_insn = is_tls_iele
+                   ? (is_64bit ? insn_tls_ie_add_X0X1 : insn_tls_ie_addx_X0X1)
+                   : insn_tls_gd_add_X0X1;
+                 mask = insn_mask_X0_no_dest_no_srca;
+                 break;
+               case R_TILEGX_IMM8_X1_TLS_GD_ADD:
+                 add_insn = is_tls_iele
+                   ? (is_64bit ? insn_tls_ie_add_X0X1 : insn_tls_ie_addx_X0X1)
+                   : insn_tls_gd_add_X0X1;
+                 mask = insn_mask_X1_no_dest_no_srca;
+                 break;
+               case R_TILEGX_IMM8_Y0_TLS_GD_ADD:
+                 add_insn = is_tls_iele
+                   ? (is_64bit ? insn_tls_ie_add_Y0Y1 : insn_tls_ie_addx_Y0Y1)
+                   : insn_tls_gd_add_Y0Y1;
+                 mask = insn_mask_Y0_no_dest_no_srca;
+                 break;
+               case R_TILEGX_IMM8_Y1_TLS_GD_ADD:
+                 add_insn = is_tls_iele
+                   ? (is_64bit ? insn_tls_ie_add_Y0Y1 : insn_tls_ie_addx_Y0Y1)
+                   : insn_tls_gd_add_Y0Y1;
+                 mask = insn_mask_Y1_no_dest_no_srca;
+                 break;
+               }
+
+             tilegx_replace_insn (contents + rel->r_offset, mask, add_insn);
+
+             continue;
+           }
+         break;
+       case R_TILEGX_TLS_IE_LOAD:
+         if (!input_section->sec_flg0
+             && !info->shared
+             && (h == NULL || h->dynindx == -1))
+           {
+             /* IE -> LE */
+             tilegx_replace_insn (contents + rel->r_offset,
+                                  insn_mask_X1_no_dest_no_srca,
+                                  insn_move_X0X1);
+           }
+         else
+           {
+             /* IE -> IE */
+             if (ABI_64_P (output_bfd))
+               tilegx_replace_insn (contents + rel->r_offset,
+                                    insn_mask_X1_no_dest_no_srca,
+                                    insn_tls_ie_ld_X1);
+             else
+               tilegx_replace_insn (contents + rel->r_offset,
+                                    insn_mask_X1_no_dest_no_srca,
+                                    insn_tls_ie_ld4s_X1);
+           }
+         continue;
+         break;
+       default:
+         break;
+       }
+
+      switch (r_type)
+       {
        case R_TILEGX_IMM16_X0_HW0_GOT:
        case R_TILEGX_IMM16_X1_HW0_GOT:
-       case R_TILEGX_IMM16_X0_HW1_GOT:
-       case R_TILEGX_IMM16_X1_HW1_GOT:
-       case R_TILEGX_IMM16_X0_HW2_GOT:
-       case R_TILEGX_IMM16_X1_HW2_GOT:
-       case R_TILEGX_IMM16_X0_HW3_GOT:
-       case R_TILEGX_IMM16_X1_HW3_GOT:
        case R_TILEGX_IMM16_X0_HW0_LAST_GOT:
        case R_TILEGX_IMM16_X1_HW0_LAST_GOT:
        case R_TILEGX_IMM16_X0_HW1_LAST_GOT:
        case R_TILEGX_IMM16_X1_HW1_LAST_GOT:
-       case R_TILEGX_IMM16_X0_HW2_LAST_GOT:
-       case R_TILEGX_IMM16_X1_HW2_LAST_GOT:
          /* Relocation is to the entry for this symbol in the global
             offset table.  */
          if (htab->elf.sgot == NULL)
@@ -3248,92 +3670,83 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
            }
          break;
 
+        case R_TILEGX_IMM16_X0_HW0_TLS_LE:
+        case R_TILEGX_IMM16_X1_HW0_TLS_LE:
+        case R_TILEGX_IMM16_X0_HW0_LAST_TLS_LE:
+        case R_TILEGX_IMM16_X1_HW0_LAST_TLS_LE:
+        case R_TILEGX_IMM16_X0_HW1_LAST_TLS_LE:
+        case R_TILEGX_IMM16_X1_HW1_LAST_TLS_LE:
+         if (info->shared)
+           {
+             Elf_Internal_Rela outrel;
+             bfd_boolean skip;
+
+             BFD_ASSERT (sreloc != NULL);
+             skip = FALSE;
+             outrel.r_offset =
+               _bfd_elf_section_offset (output_bfd, info, input_section,
+                                        rel->r_offset);
+             if (outrel.r_offset == (bfd_vma) -1)
+               skip = TRUE;
+             else if (outrel.r_offset == (bfd_vma) -2)
+               skip = TRUE;
+             outrel.r_offset += (input_section->output_section->vma
+                                 + input_section->output_offset);
+             if (skip)
+               memset (&outrel, 0, sizeof outrel);
+             else
+               {
+                 outrel.r_info = TILEGX_ELF_R_INFO (htab, NULL, 0, r_type);
+                 outrel.r_addend = relocation - dtpoff_base (info)
+                                   + rel->r_addend;
+               }
+
+             tilegx_elf_append_rela (output_bfd, sreloc, &outrel);
+             continue;
+           }
+         relocation = tpoff (info, relocation);
+         break;
+
         case R_TILEGX_IMM16_X0_HW0_TLS_GD:
         case R_TILEGX_IMM16_X1_HW0_TLS_GD:
-        case R_TILEGX_IMM16_X0_HW1_TLS_GD:
-        case R_TILEGX_IMM16_X1_HW1_TLS_GD:
-        case R_TILEGX_IMM16_X0_HW2_TLS_GD:
-        case R_TILEGX_IMM16_X1_HW2_TLS_GD:
-        case R_TILEGX_IMM16_X0_HW3_TLS_GD:
-        case R_TILEGX_IMM16_X1_HW3_TLS_GD:
         case R_TILEGX_IMM16_X0_HW0_LAST_TLS_GD:
         case R_TILEGX_IMM16_X1_HW0_LAST_TLS_GD:
         case R_TILEGX_IMM16_X0_HW1_LAST_TLS_GD:
         case R_TILEGX_IMM16_X1_HW1_LAST_TLS_GD:
-        case R_TILEGX_IMM16_X0_HW2_LAST_TLS_GD:
-        case R_TILEGX_IMM16_X1_HW2_LAST_TLS_GD:
-          tls_type = GOT_TLS_GD;
-          goto have_tls_reference;
-
         case R_TILEGX_IMM16_X0_HW0_TLS_IE:
         case R_TILEGX_IMM16_X1_HW0_TLS_IE:
-        case R_TILEGX_IMM16_X0_HW1_TLS_IE:
-        case R_TILEGX_IMM16_X1_HW1_TLS_IE:
-        case R_TILEGX_IMM16_X0_HW2_TLS_IE:
-        case R_TILEGX_IMM16_X1_HW2_TLS_IE:
-        case R_TILEGX_IMM16_X0_HW3_TLS_IE:
-        case R_TILEGX_IMM16_X1_HW3_TLS_IE:
         case R_TILEGX_IMM16_X0_HW0_LAST_TLS_IE:
         case R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE:
         case R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE:
         case R_TILEGX_IMM16_X1_HW1_LAST_TLS_IE:
-        case R_TILEGX_IMM16_X0_HW2_LAST_TLS_IE:
-        case R_TILEGX_IMM16_X1_HW2_LAST_TLS_IE:
-          tls_type = GOT_TLS_IE;
-          /* Fall through. */
-
-        have_tls_reference:
+         r_type = tilegx_elf_tls_transition (info, r_type, h == NULL,
+                                             input_section->sec_flg0);
+          tls_type = GOT_UNKNOWN;
          if (h == NULL && local_got_offsets)
-           tls_type = _bfd_tilegx_elf_local_got_tls_type (input_bfd) [r_symndx];
+           tls_type =
+             _bfd_tilegx_elf_local_got_tls_type (input_bfd) [r_symndx];
          else if (h != NULL)
-           tls_type = tilegx_elf_hash_entry(h)->tls_type;
+           {
+             tls_type = tilegx_elf_hash_entry(h)->tls_type;
+             if (!info->shared && h->dynindx == -1 && tls_type == GOT_TLS_IE)
+               r_type = (!input_section->sec_flg0
+                         ? tilegx_tls_translate_to_le (r_type)
+                         : tilegx_tls_translate_to_ie (r_type));
+           }
 
          if (tls_type == GOT_TLS_IE)
-           switch (r_type)
-             {
-              case R_TILEGX_IMM16_X0_HW0_TLS_GD:
-                r_type = R_TILEGX_IMM16_X0_HW0_TLS_IE;
-                break;
-              case R_TILEGX_IMM16_X1_HW0_TLS_GD:
-                r_type = R_TILEGX_IMM16_X1_HW0_TLS_IE;
-                break;
-              case R_TILEGX_IMM16_X0_HW1_TLS_GD:
-                r_type = R_TILEGX_IMM16_X0_HW1_TLS_IE;
-                break;
-              case R_TILEGX_IMM16_X1_HW1_TLS_GD:
-                r_type = R_TILEGX_IMM16_X1_HW1_TLS_IE;
-                break;
-              case R_TILEGX_IMM16_X0_HW2_TLS_GD:
-                r_type = R_TILEGX_IMM16_X0_HW2_TLS_IE;
-                break;
-              case R_TILEGX_IMM16_X1_HW2_TLS_GD:
-                r_type = R_TILEGX_IMM16_X1_HW2_TLS_IE;
-                break;
-              case R_TILEGX_IMM16_X0_HW3_TLS_GD:
-                r_type = R_TILEGX_IMM16_X0_HW3_TLS_IE;
-                break;
-              case R_TILEGX_IMM16_X1_HW3_TLS_GD:
-                r_type = R_TILEGX_IMM16_X1_HW3_TLS_IE;
-                break;
-              case R_TILEGX_IMM16_X0_HW0_LAST_TLS_GD:
-                r_type = R_TILEGX_IMM16_X0_HW0_LAST_TLS_IE;
-                break;
-              case R_TILEGX_IMM16_X1_HW0_LAST_TLS_GD:
-                r_type = R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE;
-                break;
-              case R_TILEGX_IMM16_X0_HW1_LAST_TLS_GD:
-                r_type = R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE;
-                break;
-              case R_TILEGX_IMM16_X1_HW1_LAST_TLS_GD:
-                r_type = R_TILEGX_IMM16_X1_HW1_LAST_TLS_IE;
-                break;
-              case R_TILEGX_IMM16_X0_HW2_LAST_TLS_GD:
-                r_type = R_TILEGX_IMM16_X0_HW2_LAST_TLS_IE;
-                break;
-              case R_TILEGX_IMM16_X1_HW2_LAST_TLS_GD:
-                r_type = R_TILEGX_IMM16_X1_HW2_LAST_TLS_IE;
-                break;
-             }
+           r_type = tilegx_tls_translate_to_ie (r_type);
+
+         if (r_type == R_TILEGX_IMM16_X0_HW0_TLS_LE
+             || r_type == R_TILEGX_IMM16_X1_HW0_TLS_LE
+             || r_type == R_TILEGX_IMM16_X0_HW0_LAST_TLS_LE
+             || r_type == R_TILEGX_IMM16_X1_HW0_LAST_TLS_LE
+             || r_type == R_TILEGX_IMM16_X0_HW1_LAST_TLS_LE
+             || r_type == R_TILEGX_IMM16_X1_HW1_LAST_TLS_LE)
+           {
+             relocation = tpoff (info, relocation);
+             break;
+           }
 
          if (h != NULL)
            {
@@ -3386,18 +3799,10 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
                 {
                  case R_TILEGX_IMM16_X0_HW0_TLS_IE:
                  case R_TILEGX_IMM16_X1_HW0_TLS_IE:
-                 case R_TILEGX_IMM16_X0_HW1_TLS_IE:
-                 case R_TILEGX_IMM16_X1_HW1_TLS_IE:
-                 case R_TILEGX_IMM16_X0_HW2_TLS_IE:
-                 case R_TILEGX_IMM16_X1_HW2_TLS_IE:
-                 case R_TILEGX_IMM16_X0_HW3_TLS_IE:
-                 case R_TILEGX_IMM16_X1_HW3_TLS_IE:
                  case R_TILEGX_IMM16_X0_HW0_LAST_TLS_IE:
                  case R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE:
                  case R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE:
                  case R_TILEGX_IMM16_X1_HW1_LAST_TLS_IE:
-                 case R_TILEGX_IMM16_X0_HW2_LAST_TLS_IE:
-                 case R_TILEGX_IMM16_X1_HW2_LAST_TLS_IE:
                    if (need_relocs) {
                      TILEGX_ELF_PUT_WORD (htab, output_bfd, 0,
                                           htab->elf.sgot->contents + off);
@@ -3418,18 +3823,10 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 
                  case R_TILEGX_IMM16_X0_HW0_TLS_GD:
                  case R_TILEGX_IMM16_X1_HW0_TLS_GD:
-                 case R_TILEGX_IMM16_X0_HW1_TLS_GD:
-                 case R_TILEGX_IMM16_X1_HW1_TLS_GD:
-                 case R_TILEGX_IMM16_X0_HW2_TLS_GD:
-                 case R_TILEGX_IMM16_X1_HW2_TLS_GD:
-                 case R_TILEGX_IMM16_X0_HW3_TLS_GD:
-                 case R_TILEGX_IMM16_X1_HW3_TLS_GD:
                  case R_TILEGX_IMM16_X0_HW0_LAST_TLS_GD:
                  case R_TILEGX_IMM16_X1_HW0_LAST_TLS_GD:
                  case R_TILEGX_IMM16_X0_HW1_LAST_TLS_GD:
                  case R_TILEGX_IMM16_X1_HW1_LAST_TLS_GD:
-                 case R_TILEGX_IMM16_X0_HW2_LAST_TLS_GD:
-                 case R_TILEGX_IMM16_X1_HW2_LAST_TLS_GD:
                    if (need_relocs) {
                      outrel.r_offset = (htab->elf.sgot->output_section->vma
                                       + htab->elf.sgot->output_offset + off);
index 62f128f..78860ff 100644 (file)
@@ -2406,6 +2406,12 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
   "BFD_RELOC_TILEPRO_SHAMT_X1",
   "BFD_RELOC_TILEPRO_SHAMT_Y0",
   "BFD_RELOC_TILEPRO_SHAMT_Y1",
+  "BFD_RELOC_TILEPRO_TLS_GD_CALL",
+  "BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD",
+  "BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD",
+  "BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD",
+  "BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD",
+  "BFD_RELOC_TILEPRO_TLS_IE_LOAD",
   "BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD",
   "BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD",
   "BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_LO",
@@ -2425,6 +2431,14 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
   "BFD_RELOC_TILEPRO_TLS_DTPMOD32",
   "BFD_RELOC_TILEPRO_TLS_DTPOFF32",
   "BFD_RELOC_TILEPRO_TLS_TPOFF32",
+  "BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE",
+  "BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE",
+  "BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_LO",
+  "BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_LO",
+  "BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HI",
+  "BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HI",
+  "BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HA",
+  "BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HA",
   "BFD_RELOC_TILEGX_HW0",
   "BFD_RELOC_TILEGX_HW1",
   "BFD_RELOC_TILEGX_HW2",
@@ -2482,52 +2496,44 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
   "BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_PCREL",
   "BFD_RELOC_TILEGX_IMM16_X0_HW0_GOT",
   "BFD_RELOC_TILEGX_IMM16_X1_HW0_GOT",
-  "BFD_RELOC_TILEGX_IMM16_X0_HW1_GOT",
-  "BFD_RELOC_TILEGX_IMM16_X1_HW1_GOT",
-  "BFD_RELOC_TILEGX_IMM16_X0_HW2_GOT",
-  "BFD_RELOC_TILEGX_IMM16_X1_HW2_GOT",
-  "BFD_RELOC_TILEGX_IMM16_X0_HW3_GOT",
-  "BFD_RELOC_TILEGX_IMM16_X1_HW3_GOT",
   "BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_GOT",
   "BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_GOT",
   "BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_GOT",
   "BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_GOT",
-  "BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_GOT",
-  "BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_GOT",
   "BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_GD",
   "BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_GD",
-  "BFD_RELOC_TILEGX_IMM16_X0_HW1_TLS_GD",
-  "BFD_RELOC_TILEGX_IMM16_X1_HW1_TLS_GD",
-  "BFD_RELOC_TILEGX_IMM16_X0_HW2_TLS_GD",
-  "BFD_RELOC_TILEGX_IMM16_X1_HW2_TLS_GD",
-  "BFD_RELOC_TILEGX_IMM16_X0_HW3_TLS_GD",
-  "BFD_RELOC_TILEGX_IMM16_X1_HW3_TLS_GD",
+  "BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_LE",
+  "BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_LE",
+  "BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_LE",
+  "BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_LE",
+  "BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_LE",
+  "BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_LE",
   "BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_GD",
   "BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_GD",
   "BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_GD",
   "BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_GD",
-  "BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_TLS_GD",
-  "BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_TLS_GD",
   "BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_IE",
   "BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_IE",
-  "BFD_RELOC_TILEGX_IMM16_X0_HW1_TLS_IE",
-  "BFD_RELOC_TILEGX_IMM16_X1_HW1_TLS_IE",
-  "BFD_RELOC_TILEGX_IMM16_X0_HW2_TLS_IE",
-  "BFD_RELOC_TILEGX_IMM16_X1_HW2_TLS_IE",
-  "BFD_RELOC_TILEGX_IMM16_X0_HW3_TLS_IE",
-  "BFD_RELOC_TILEGX_IMM16_X1_HW3_TLS_IE",
   "BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_IE",
   "BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_IE",
   "BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_IE",
   "BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_IE",
-  "BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_TLS_IE",
-  "BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_TLS_IE",
   "BFD_RELOC_TILEGX_TLS_DTPMOD64",
   "BFD_RELOC_TILEGX_TLS_DTPOFF64",
   "BFD_RELOC_TILEGX_TLS_TPOFF64",
   "BFD_RELOC_TILEGX_TLS_DTPMOD32",
   "BFD_RELOC_TILEGX_TLS_DTPOFF32",
   "BFD_RELOC_TILEGX_TLS_TPOFF32",
+  "BFD_RELOC_TILEGX_TLS_GD_CALL",
+  "BFD_RELOC_TILEGX_IMM8_X0_TLS_GD_ADD",
+  "BFD_RELOC_TILEGX_IMM8_X1_TLS_GD_ADD",
+  "BFD_RELOC_TILEGX_IMM8_Y0_TLS_GD_ADD",
+  "BFD_RELOC_TILEGX_IMM8_Y1_TLS_GD_ADD",
+  "BFD_RELOC_TILEGX_TLS_IE_LOAD",
+  "BFD_RELOC_TILEGX_IMM8_X0_TLS_ADD",
+  "BFD_RELOC_TILEGX_IMM8_X1_TLS_ADD",
+  "BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD",
+  "BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD",
   "BFD_RELOC_EPIPHANY_SIMM8",
   "BFD_RELOC_EPIPHANY_SIMM24",
   "BFD_RELOC_EPIPHANY_HIGH",
index ac1ecb5..4e1958c 100644 (file)
@@ -5799,6 +5799,18 @@ ENUMX
 ENUMX
   BFD_RELOC_TILEPRO_SHAMT_Y1
 ENUMX
+  BFD_RELOC_TILEPRO_TLS_GD_CALL
+ENUMX
+  BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD
+ENUMX
+  BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD
+ENUMX
+  BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD
+ENUMX
+  BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD
+ENUMX
+  BFD_RELOC_TILEPRO_TLS_IE_LOAD
+ENUMX
   BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD
 ENUMX
   BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD
@@ -5836,6 +5848,22 @@ ENUMX
   BFD_RELOC_TILEPRO_TLS_DTPOFF32
 ENUMX
   BFD_RELOC_TILEPRO_TLS_TPOFF32
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_LO
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_LO
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HI
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HI
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HA
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HA
 ENUMDOC
   Tilera TILEPro Relocations.
 
@@ -5954,18 +5982,6 @@ ENUMX
 ENUMX
   BFD_RELOC_TILEGX_IMM16_X1_HW0_GOT
 ENUMX
-  BFD_RELOC_TILEGX_IMM16_X0_HW1_GOT
-ENUMX
-  BFD_RELOC_TILEGX_IMM16_X1_HW1_GOT
-ENUMX
-  BFD_RELOC_TILEGX_IMM16_X0_HW2_GOT
-ENUMX
-  BFD_RELOC_TILEGX_IMM16_X1_HW2_GOT
-ENUMX
-  BFD_RELOC_TILEGX_IMM16_X0_HW3_GOT
-ENUMX
-  BFD_RELOC_TILEGX_IMM16_X1_HW3_GOT
-ENUMX
   BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_GOT
 ENUMX
   BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_GOT
@@ -5974,25 +5990,21 @@ ENUMX
 ENUMX
   BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_GOT
 ENUMX
-  BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_GOT
-ENUMX
-  BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_GOT
-ENUMX
   BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_GD
 ENUMX
   BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_GD
 ENUMX
-  BFD_RELOC_TILEGX_IMM16_X0_HW1_TLS_GD
+  BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_LE
 ENUMX
-  BFD_RELOC_TILEGX_IMM16_X1_HW1_TLS_GD
+  BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_LE
 ENUMX
-  BFD_RELOC_TILEGX_IMM16_X0_HW2_TLS_GD
+  BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_LE
 ENUMX
-  BFD_RELOC_TILEGX_IMM16_X1_HW2_TLS_GD
+  BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_LE
 ENUMX
-  BFD_RELOC_TILEGX_IMM16_X0_HW3_TLS_GD
+  BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_LE
 ENUMX
-  BFD_RELOC_TILEGX_IMM16_X1_HW3_TLS_GD
+  BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_LE
 ENUMX
   BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_GD
 ENUMX
@@ -6002,26 +6014,10 @@ ENUMX
 ENUMX
   BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_GD
 ENUMX
-  BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_TLS_GD
-ENUMX
-  BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_TLS_GD
-ENUMX
   BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_IE
 ENUMX
   BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_IE
 ENUMX
-  BFD_RELOC_TILEGX_IMM16_X0_HW1_TLS_IE
-ENUMX
-  BFD_RELOC_TILEGX_IMM16_X1_HW1_TLS_IE
-ENUMX
-  BFD_RELOC_TILEGX_IMM16_X0_HW2_TLS_IE
-ENUMX
-  BFD_RELOC_TILEGX_IMM16_X1_HW2_TLS_IE
-ENUMX
-  BFD_RELOC_TILEGX_IMM16_X0_HW3_TLS_IE
-ENUMX
-  BFD_RELOC_TILEGX_IMM16_X1_HW3_TLS_IE
-ENUMX
   BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_IE
 ENUMX
   BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_IE
@@ -6030,10 +6026,6 @@ ENUMX
 ENUMX
   BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_IE
 ENUMX
-  BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_TLS_IE
-ENUMX
-  BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_TLS_IE
-ENUMX
   BFD_RELOC_TILEGX_TLS_DTPMOD64
 ENUMX
   BFD_RELOC_TILEGX_TLS_DTPOFF64
@@ -6045,6 +6037,26 @@ ENUMX
   BFD_RELOC_TILEGX_TLS_DTPOFF32
 ENUMX
   BFD_RELOC_TILEGX_TLS_TPOFF32
+ENUMX
+  BFD_RELOC_TILEGX_TLS_GD_CALL
+ENUMX
+  BFD_RELOC_TILEGX_IMM8_X0_TLS_GD_ADD
+ENUMX
+  BFD_RELOC_TILEGX_IMM8_X1_TLS_GD_ADD
+ENUMX
+  BFD_RELOC_TILEGX_IMM8_Y0_TLS_GD_ADD
+ENUMX
+  BFD_RELOC_TILEGX_IMM8_Y1_TLS_GD_ADD
+ENUMX
+  BFD_RELOC_TILEGX_TLS_IE_LOAD
+ENUMX
+  BFD_RELOC_TILEGX_IMM8_X0_TLS_ADD
+ENUMX
+  BFD_RELOC_TILEGX_IMM8_X1_TLS_ADD
+ENUMX
+  BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD
+ENUMX
+  BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD
 ENUMDOC
   Tilera TILE-Gx Relocations.
 
index b419ac0..5e5f50b 100644 (file)
@@ -1,5 +1,42 @@
 2012-02-25  Walter Lee  <walt@tilera.com>
 
+       * tc-tilepro.c (O_tls_le): Define operator.
+       (O_tls_le_lo16): Ditto.
+       (O_tls_le_hi16): Ditto.
+       (O_tls_le_ha16): Ditto.
+       (O_tls_gd_call): Ditto.
+       (O_tls_gd_add): Ditto.
+       (O_tls_ie_load): Ditto.
+       (md_begin): Delete old operators; handle new operators.
+       (emit_tilepro_instruction): Ditto.
+       (md_apply_fix): Ditto.
+       * tc-tilegx.c (O_hw1_got): Delete operator.
+       (O_hw2_got): Ditto.
+       (O_hw3_got): Ditto.
+       (O_hw2_last_got): Ditto.
+       (O_hw1_tls_gd): Ditto.
+       (O_hw2_tls_gd): Ditto.
+       (O_hw3_tls_gd): Ditto.
+       (O_hw2_last_tls_gd): Ditto.
+       (O_hw1_tls_ie): Ditto.
+       (O_hw2_tls_ie): Ditto.
+       (O_hw3_tls_ie): Ditto.
+       (O_hw2_last_tls_ie): Ditto.
+       (O_hw0_tls_le): Define operator.
+       (O_hw0_last_tls_le): Ditto.
+       (O_hw1_last_tls_le): Ditto.
+       (O_tls_gd_call): Ditto.
+       (O_tls_gd_add): Ditto.
+       (O_tls_ie_load): Ditto.
+       (O_tls_add): Ditto.
+       (md_begin): Delete old operators; handle new operators.
+       (emit_tilegx_instruction): Ditto.
+       (md_apply_fix): Ditto.
+       * doc/c-tilegx.texi: Delete old operators; document new operators.
+       * doc/c-tilepro.texi: Ditto.
+
+2012-02-25  Walter Lee  <walt@tilera.com>
+
        * tc-tilepro.c (apply_special_operator): delete cases for
        got and tls operators.
        (md_apply_fix): Ditto.
index 49bf093..eda36c0 100644 (file)
@@ -157,27 +157,22 @@ md_show_usage (FILE *stream)
 #define O_hw1_last             O_md6
 #define O_hw2_last             O_md7
 #define O_hw0_got              O_md8
-#define O_hw1_got              O_md9
-#define O_hw2_got              O_md10
-#define O_hw3_got              O_md11
-#define O_hw0_last_got         O_md12
-#define O_hw1_last_got         O_md13
-#define O_hw2_last_got         O_md14
-#define O_plt                  O_md15
-#define O_hw0_tls_gd           O_md16
-#define O_hw1_tls_gd           O_md17
-#define O_hw2_tls_gd           O_md18
-#define O_hw3_tls_gd           O_md19
-#define O_hw0_last_tls_gd      O_md20
-#define O_hw1_last_tls_gd      O_md21
-#define O_hw2_last_tls_gd      O_md22
-#define O_hw0_tls_ie           O_md23
-#define O_hw1_tls_ie           O_md24
-#define O_hw2_tls_ie           O_md25
-#define O_hw3_tls_ie           O_md26
-#define O_hw0_last_tls_ie      O_md27
-#define O_hw1_last_tls_ie      O_md28
-#define O_hw2_last_tls_ie      O_md29
+#define O_hw0_last_got         O_md9
+#define O_hw1_last_got         O_md10
+#define O_plt                  O_md11
+#define O_hw0_tls_gd           O_md12
+#define O_hw0_last_tls_gd      O_md13
+#define O_hw1_last_tls_gd      O_md14
+#define O_hw0_tls_ie           O_md15
+#define O_hw0_last_tls_ie      O_md16
+#define O_hw1_last_tls_ie      O_md17
+#define O_hw0_tls_le           O_md18
+#define O_hw0_last_tls_le      O_md19
+#define O_hw1_last_tls_le      O_md20
+#define O_tls_gd_call          O_md21
+#define O_tls_gd_add           O_md22
+#define O_tls_ie_load          O_md23
+#define O_tls_add              O_md24
 
 static struct hash_control *special_operator_hash;
 
@@ -289,27 +284,22 @@ md_begin (void)
   /* hw3_last is a convenience alias for the equivalent hw3.  */
   hash_insert (special_operator_hash, "hw3_last", (void*)O_hw3);
   INSERT_SPECIAL_OP (hw0_got);
-  INSERT_SPECIAL_OP (hw1_got);
-  INSERT_SPECIAL_OP (hw2_got);
-  INSERT_SPECIAL_OP (hw3_got);
   INSERT_SPECIAL_OP (hw0_last_got);
   INSERT_SPECIAL_OP (hw1_last_got);
-  INSERT_SPECIAL_OP (hw2_last_got);
   INSERT_SPECIAL_OP(plt);
   INSERT_SPECIAL_OP (hw0_tls_gd);
-  INSERT_SPECIAL_OP (hw1_tls_gd);
-  INSERT_SPECIAL_OP (hw2_tls_gd);
-  INSERT_SPECIAL_OP (hw3_tls_gd);
   INSERT_SPECIAL_OP (hw0_last_tls_gd);
   INSERT_SPECIAL_OP (hw1_last_tls_gd);
-  INSERT_SPECIAL_OP (hw2_last_tls_gd);
   INSERT_SPECIAL_OP (hw0_tls_ie);
-  INSERT_SPECIAL_OP (hw1_tls_ie);
-  INSERT_SPECIAL_OP (hw2_tls_ie);
-  INSERT_SPECIAL_OP (hw3_tls_ie);
   INSERT_SPECIAL_OP (hw0_last_tls_ie);
   INSERT_SPECIAL_OP (hw1_last_tls_ie);
-  INSERT_SPECIAL_OP (hw2_last_tls_ie);
+  INSERT_SPECIAL_OP (hw0_tls_le);
+  INSERT_SPECIAL_OP (hw0_last_tls_le);
+  INSERT_SPECIAL_OP (hw1_last_tls_le);
+  INSERT_SPECIAL_OP (tls_gd_call);
+  INSERT_SPECIAL_OP (tls_gd_add);
+  INSERT_SPECIAL_OP (tls_ie_load);
+  INSERT_SPECIAL_OP (tls_add);
 #undef INSERT_SPECIAL_OP
 
   /* Initialize op_hash hash table.  */
@@ -566,21 +556,6 @@ emit_tilegx_instruction (tilegx_bundle_bits bits,
              require_symbol = 1;
              break;
 
-           case O_hw1_got:
-             HANDLE_OP16 (HW1_GOT);
-             require_symbol = 1;
-             break;
-
-           case O_hw2_got:
-             HANDLE_OP16 (HW2_GOT);
-             require_symbol = 1;
-             break;
-
-           case O_hw3_got:
-             HANDLE_OP16 (HW3_GOT);
-             require_symbol = 1;
-             break;
-
            case O_hw0_last_got:
              HANDLE_OP16 (HW0_LAST_GOT);
              require_symbol = 1;
@@ -591,88 +566,132 @@ emit_tilegx_instruction (tilegx_bundle_bits bits,
              require_symbol = 1;
              break;
 
-           case O_hw2_last_got:
-             HANDLE_OP16 (HW2_LAST_GOT);
-             require_symbol = 1;
-             break;
-
            case O_hw0_tls_gd:
              HANDLE_OP16 (HW0_TLS_GD);
              require_symbol = 1;
              break;
 
-           case O_hw1_tls_gd:
-             HANDLE_OP16 (HW1_TLS_GD);
+           case O_hw0_last_tls_gd:
+             HANDLE_OP16 (HW0_LAST_TLS_GD);
              require_symbol = 1;
              break;
 
-           case O_hw2_tls_gd:
-             HANDLE_OP16 (HW2_TLS_GD);
+           case O_hw1_last_tls_gd:
+             HANDLE_OP16 (HW1_LAST_TLS_GD);
              require_symbol = 1;
              break;
 
-           case O_hw3_tls_gd:
-             HANDLE_OP16 (HW3_TLS_GD);
+           case O_hw0_tls_ie:
+             HANDLE_OP16 (HW0_TLS_IE);
              require_symbol = 1;
              break;
 
-           case O_hw0_last_tls_gd:
-             HANDLE_OP16 (HW0_LAST_TLS_GD);
+           case O_hw0_last_tls_ie:
+             HANDLE_OP16 (HW0_LAST_TLS_IE);
              require_symbol = 1;
              break;
 
-           case O_hw1_last_tls_gd:
-             HANDLE_OP16 (HW1_LAST_TLS_GD);
+           case O_hw1_last_tls_ie:
+             HANDLE_OP16 (HW1_LAST_TLS_IE);
              require_symbol = 1;
              break;
 
-           case O_hw2_last_tls_gd:
-             HANDLE_OP16 (HW2_LAST_TLS_GD);
+           case O_hw0_tls_le:
+             HANDLE_OP16 (HW0_TLS_LE);
              require_symbol = 1;
              break;
 
-           case O_hw0_tls_ie:
-             HANDLE_OP16 (HW0_TLS_IE);
+           case O_hw0_last_tls_le:
+             HANDLE_OP16 (HW0_LAST_TLS_LE);
              require_symbol = 1;
              break;
 
-           case O_hw1_tls_ie:
-             HANDLE_OP16 (HW1_TLS_IE);
+           case O_hw1_last_tls_le:
+             HANDLE_OP16 (HW1_LAST_TLS_LE);
              require_symbol = 1;
              break;
 
-           case O_hw2_tls_ie:
-             HANDLE_OP16 (HW2_TLS_IE);
-             require_symbol = 1;
-             break;
+#undef HANDLE_OP16
 
-           case O_hw3_tls_ie:
-             HANDLE_OP16 (HW3_TLS_IE);
+           case O_plt:
+             switch (reloc)
+               {
+               case BFD_RELOC_TILEGX_JUMPOFF_X1:
+                 reloc = BFD_RELOC_TILEGX_JUMPOFF_X1_PLT;
+                 break;
+               default:
+                 die = 1;
+                 break;
+               }
+             use_subexp = 1;
              require_symbol = 1;
              break;
 
-           case O_hw0_last_tls_ie:
-             HANDLE_OP16 (HW0_LAST_TLS_IE);
+           case O_tls_gd_call:
+             switch (reloc)
+               {
+               case BFD_RELOC_TILEGX_JUMPOFF_X1:
+                 reloc = BFD_RELOC_TILEGX_TLS_GD_CALL;
+                 break;
+               default:
+                 die = 1;
+                 break;
+               }
+             use_subexp = 1;
              require_symbol = 1;
              break;
 
-           case O_hw1_last_tls_ie:
-             HANDLE_OP16 (HW1_LAST_TLS_IE);
+           case O_tls_gd_add:
+             switch (reloc)
+               {
+               case BFD_RELOC_TILEGX_IMM8_X0:
+                 reloc = BFD_RELOC_TILEGX_IMM8_X0_TLS_GD_ADD;
+                 break;
+               case BFD_RELOC_TILEGX_IMM8_X1:
+                 reloc = BFD_RELOC_TILEGX_IMM8_X1_TLS_GD_ADD;
+                 break;
+               case BFD_RELOC_TILEGX_IMM8_Y0:
+                 reloc = BFD_RELOC_TILEGX_IMM8_Y0_TLS_GD_ADD;
+                 break;
+               case BFD_RELOC_TILEGX_IMM8_Y1:
+                 reloc = BFD_RELOC_TILEGX_IMM8_Y1_TLS_GD_ADD;
+                 break;
+               default:
+                 die = 1;
+                 break;
+               }
+             use_subexp = 1;
              require_symbol = 1;
              break;
 
-           case O_hw2_last_tls_ie:
-             HANDLE_OP16 (HW2_LAST_TLS_IE);
+           case O_tls_ie_load:
+             switch (reloc)
+               {
+               case BFD_RELOC_TILEGX_IMM8_X1:
+                 reloc = BFD_RELOC_TILEGX_TLS_IE_LOAD;
+                 break;
+               default:
+                 die = 1;
+                 break;
+               }
+             use_subexp = 1;
              require_symbol = 1;
              break;
 
-#undef HANDLE_OP16
-
-           case O_plt:
+           case O_tls_add:
              switch (reloc)
                {
-               case BFD_RELOC_TILEGX_JUMPOFF_X1:
-                 reloc = BFD_RELOC_TILEGX_JUMPOFF_X1_PLT;
+               case BFD_RELOC_TILEGX_IMM8_X0:
+                 reloc = BFD_RELOC_TILEGX_IMM8_X0_TLS_ADD;
+                 break;
+               case BFD_RELOC_TILEGX_IMM8_X1:
+                 reloc = BFD_RELOC_TILEGX_IMM8_X1_TLS_ADD;
+                 break;
+               case BFD_RELOC_TILEGX_IMM8_Y0:
+                 reloc = BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD;
+                 break;
+               case BFD_RELOC_TILEGX_IMM8_Y1:
+                 reloc = BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD;
                  break;
                default:
                  die = 1;
@@ -1486,34 +1505,34 @@ md_apply_fix (fixS *fixP, valueT * valP, segT seg ATTRIBUTE_UNUSED)
 #ifdef OBJ_ELF
       switch (fixP->fx_r_type)
        {
+       case BFD_RELOC_TILEGX_IMM8_X0_TLS_ADD:
+       case BFD_RELOC_TILEGX_IMM8_X1_TLS_ADD:
+       case BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD:
+       case BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD:
+       case BFD_RELOC_TILEGX_IMM8_X0_TLS_GD_ADD:
+       case BFD_RELOC_TILEGX_IMM8_X1_TLS_GD_ADD:
+       case BFD_RELOC_TILEGX_IMM8_Y0_TLS_GD_ADD:
+       case BFD_RELOC_TILEGX_IMM8_Y1_TLS_GD_ADD:
        case BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_GD:
        case BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_GD:
-       case BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_IE:
-       case BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_IE:
        case BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_GD:
        case BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_GD:
-       case BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_IE:
-       case BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_IE:
-       case BFD_RELOC_TILEGX_IMM16_X0_HW1_TLS_GD:
-       case BFD_RELOC_TILEGX_IMM16_X1_HW1_TLS_GD:
-       case BFD_RELOC_TILEGX_IMM16_X0_HW1_TLS_IE:
-       case BFD_RELOC_TILEGX_IMM16_X1_HW1_TLS_IE:
        case BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_GD:
        case BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_GD:
+       case BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_IE:
+       case BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_IE:
+       case BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_IE:
+       case BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_IE:
        case BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_IE:
        case BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_IE:
-       case BFD_RELOC_TILEGX_IMM16_X0_HW2_TLS_GD:
-       case BFD_RELOC_TILEGX_IMM16_X1_HW2_TLS_GD:
-       case BFD_RELOC_TILEGX_IMM16_X0_HW2_TLS_IE:
-       case BFD_RELOC_TILEGX_IMM16_X1_HW2_TLS_IE:
-       case BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_TLS_GD:
-       case BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_TLS_GD:
-       case BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_TLS_IE:
-       case BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_TLS_IE:
-       case BFD_RELOC_TILEGX_IMM16_X0_HW3_TLS_GD:
-       case BFD_RELOC_TILEGX_IMM16_X1_HW3_TLS_GD:
-       case BFD_RELOC_TILEGX_IMM16_X0_HW3_TLS_IE:
-       case BFD_RELOC_TILEGX_IMM16_X1_HW3_TLS_IE:
+       case BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_LE:
+       case BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_LE:
+       case BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_LE:
+       case BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_LE:
+       case BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_LE:
+       case BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_LE:
+       case BFD_RELOC_TILEGX_TLS_GD_CALL:
+       case BFD_RELOC_TILEGX_TLS_IE_LOAD:
        case BFD_RELOC_TILEGX_TLS_DTPMOD64:
        case BFD_RELOC_TILEGX_TLS_DTPOFF64:
        case BFD_RELOC_TILEGX_TLS_TPOFF64:
index 581028d..0b378c2 100644 (file)
@@ -103,14 +103,14 @@ md_show_usage (FILE *stream)
 
 /* Extra expression types.  */
 
-#define O_lo16       O_md1
-#define O_hi16       O_md2
-#define O_ha16       O_md3
-#define O_got        O_md4
+#define O_lo16        O_md1
+#define O_hi16        O_md2
+#define O_ha16        O_md3
+#define O_got         O_md4
 #define O_got_lo16    O_md5
 #define O_got_hi16    O_md6
 #define O_got_ha16    O_md7
-#define O_plt        O_md8
+#define O_plt         O_md8
 #define O_tls_gd      O_md9
 #define O_tls_gd_lo16 O_md10
 #define O_tls_gd_hi16 O_md11
@@ -119,6 +119,13 @@ md_show_usage (FILE *stream)
 #define O_tls_ie_lo16 O_md14
 #define O_tls_ie_hi16 O_md15
 #define O_tls_ie_ha16 O_md16
+#define O_tls_le      O_md17
+#define O_tls_le_lo16 O_md18
+#define O_tls_le_hi16 O_md19
+#define O_tls_le_ha16 O_md20
+#define O_tls_gd_call O_md21
+#define O_tls_gd_add  O_md22
+#define O_tls_ie_load O_md23
 
 static struct hash_control *special_operator_hash;
 
@@ -230,6 +237,13 @@ md_begin (void)
   INSERT_SPECIAL_OP(tls_ie_lo16);
   INSERT_SPECIAL_OP(tls_ie_hi16);
   INSERT_SPECIAL_OP(tls_ie_ha16);
+  INSERT_SPECIAL_OP(tls_le);
+  INSERT_SPECIAL_OP(tls_le_lo16);
+  INSERT_SPECIAL_OP(tls_le_hi16);
+  INSERT_SPECIAL_OP(tls_le_ha16);
+  INSERT_SPECIAL_OP(tls_gd_call);
+  INSERT_SPECIAL_OP(tls_gd_add);
+  INSERT_SPECIAL_OP(tls_ie_load);
 #undef INSERT_SPECIAL_OP
 
   /* Initialize op_hash hash table.  */
@@ -516,6 +530,26 @@ emit_tilepro_instruction (tilepro_bundle_bits bits,
              require_symbol = 1;
              break;
 
+           case O_tls_le:
+             HANDLE_OP16 (TLS_LE);
+             require_symbol = 1;
+             break;
+
+           case O_tls_le_lo16:
+             HANDLE_OP16 (TLS_LE_LO);
+             require_symbol = 1;
+             break;
+
+           case O_tls_le_hi16:
+             HANDLE_OP16 (TLS_LE_HI);
+             require_symbol = 1;
+             break;
+
+           case O_tls_le_ha16:
+             HANDLE_OP16 (TLS_LE_HA);
+             require_symbol = 1;
+             break;
+
 #undef HANDLE_OP16
 
            case O_plt:
@@ -532,6 +566,57 @@ emit_tilepro_instruction (tilepro_bundle_bits bits,
              require_symbol = 1;
              break;
 
+           case O_tls_gd_call:
+             switch (reloc)
+               {
+               case BFD_RELOC_TILEPRO_JOFFLONG_X1:
+                 reloc = BFD_RELOC_TILEPRO_TLS_GD_CALL;
+                 break;
+               default:
+                 die = 1;
+                 break;
+               }
+             use_subexp = 1;
+             require_symbol = 1;
+             break;
+
+           case O_tls_gd_add:
+             switch (reloc)
+               {
+               case BFD_RELOC_TILEPRO_IMM8_X0:
+                 reloc = BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD;
+                 break;
+               case BFD_RELOC_TILEPRO_IMM8_X1:
+                 reloc = BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD;
+                 break;
+               case BFD_RELOC_TILEPRO_IMM8_Y0:
+                 reloc = BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD;
+                 break;
+               case BFD_RELOC_TILEPRO_IMM8_Y1:
+                 reloc = BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD;
+                 break;
+               default:
+                 die = 1;
+                 break;
+               }
+             use_subexp = 1;
+             require_symbol = 1;
+             break;
+
+           case O_tls_ie_load:
+             switch (reloc)
+               {
+               case BFD_RELOC_TILEPRO_IMM8_X1:
+                 reloc = BFD_RELOC_TILEPRO_TLS_IE_LOAD;
+                 break;
+               default:
+                 die = 1;
+                 break;
+               }
+             use_subexp = 1;
+             require_symbol = 1;
+             break;
+
            default:
              /* Do nothing.  */
              break;
@@ -1298,22 +1383,36 @@ md_apply_fix (fixS *fixP, valueT * valP, segT seg ATTRIBUTE_UNUSED)
 #ifdef OBJ_ELF
       switch (fixP->fx_r_type)
        {
+       case BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD:
+       case BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD:
+       case BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD:
+       case BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD:
        case BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD:
        case BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD:
-       case BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE:
-       case BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE:
        case BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_LO:
        case BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_LO:
-       case BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_LO:
-       case BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_LO:
        case BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HI:
        case BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_HI:
-       case BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HI:
-       case BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_HI:
        case BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HA:
        case BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_HA:
+       case BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE:
+       case BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE:
+       case BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_LO:
+       case BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_LO:
+       case BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HI:
+       case BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_HI:
        case BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HA:
        case BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_HA:
+       case BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE:
+       case BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE:
+       case BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_LO:
+       case BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_LO:
+       case BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HI:
+       case BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HI:
+       case BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HA:
+       case BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HA:
+       case BFD_RELOC_TILEPRO_TLS_GD_CALL:
+       case BFD_RELOC_TILEPRO_TLS_IE_LOAD:
        case BFD_RELOC_TILEPRO_TLS_DTPMOD32:
        case BFD_RELOC_TILEPRO_TLS_DTPOFF32:
        case BFD_RELOC_TILEPRO_TLS_TPOFF32:
index c2f5bc1..268cc4f 100644 (file)
@@ -218,21 +218,6 @@ shl16insli r0, r0, hw0(sym)
 This modifier is used to load bits 0-15 of the symbol's offset in the
 GOT entry corresponding to the symbol.
 
-@item hw1_got
-
-This modifier is used to load bits 16-31 of the symbol's offset in the
-GOT entry corresponding to the symbol.
-
-@item hw2_got
-
-This modifier is used to load bits 32-47 of the symbol's offset in the
-GOT entry corresponding to the symbol.
-
-@item hw3_got
-
-This modifier is used to load bits 48-63 of the symbol's offset in the
-GOT entry corresponding to the symbol.
-
 @item hw0_last_got
 
 This modifier yields the same value as @code{hw0_got}, but it also
@@ -240,13 +225,9 @@ checks that the value does not overflow.
 
 @item hw1_last_got
 
-This modifier yields the same value as @code{hw1_got}, but it also
-checks that the value does not overflow.
-
-@item hw2_last_got
-
-This modifier yields the same value as @code{hw2_got}, but it also
-checks that the value does not overflow.
+This modifier is used to load bits 16-31 of the symbol's offset in the
+GOT entry corresponding to the symbol, and it also checks that the
+value does not overflow.
 
 @item plt
 
@@ -267,24 +248,6 @@ This modifier is used to load bits 0-15 of the offset of the GOT entry
 of the symbol's TLS descriptor, to be used for general-dynamic TLS
 accesses.
 
-@item hw1_tls_gd
-
-This modifier is used to load bits 16-31 of the offset of the GOT
-entry of the symbol's TLS descriptor, to be used for general-dynamic
-TLS accesses.
-
-@item hw2_tls_gd
-
-This modifier is used to load bits 32-47 of the offset of the GOT
-entry of the symbol's TLS descriptor, to be used for general-dynamic
-TLS accesses.
-
-@item hw3_tls_gd
-
-This modifier is used to load bits 48-63 of the offset of the GOT
-entry of the symbol's TLS descriptor, to be used for general-dynamic
-TLS accesses.
-
 @item hw0_last_tls_gd
 
 This modifier yields the same value as @code{hw0_tls_gd}, but it also
@@ -292,13 +255,9 @@ checks that the value does not overflow.
 
 @item hw1_last_tls_gd
 
-This modifier yields the same value as @code{hw1_tls_gd}, but it also
-checks that the value does not overflow.
-
-@item hw2_last_tls_gd
-
-This modifier yields the same value as @code{hw2_tls_gd}, but it also
-checks that the value does not overflow.
+This modifier is used to load bits 16-31 of the offset of the GOT
+entry of the symbol's TLS descriptor, to be used for general-dynamic
+TLS accesses.  It also checks that the value does not overflow.
 
 @item hw0_tls_ie
 
@@ -306,38 +265,48 @@ This modifier is used to load bits 0-15 of the offset of the GOT entry
 containing the offset of the symbol's address from the TCB, to be used
 for initial-exec TLS accesses.
 
-@item hw1_tls_ie
+@item hw0_last_tls_ie
+
+This modifier yields the same value as @code{hw0_tls_ie}, but it also
+checks that the value does not overflow.
+
+@item hw1_last_tls_ie
 
 This modifier is used to load bits 16-31 of the offset of the GOT
 entry containing the offset of the symbol's address from the TCB, to
-be used for initial-exec TLS accesses.
+be used for initial-exec TLS accesses.  It also checks that the value
+does not overflow.
 
-@item hw2_tls_ie
+@item hw0_tls_le
 
-This modifier is used to load bits 32-47 of the offset of the GOT entry
-containing the offset of the symbol's address from the TCB, to be used
-for initial-exec TLS accesses.
+This modifier is used to load bits 0-15 of the offset of the symbol's
+address from the TCB, to be used for local-exec TLS accesses.
 
-@item hw3_tls_ie
+@item hw0_last_tls_le
 
-This modifier is used to load bits 48-63 of the offset of the GOT
-entry containing the offset of the symbol's address from the TCB, to
-be used for initial-exec TLS accesses.
+This modifier yields the same value as @code{hw0_tls_le}, but it also
+checks that the value does not overflow.
 
-@item hw0_last_tls_ie
+@item hw1_last_tls_le
 
-This modifier yields the same value as @code{hw0_tls_ie}, but it also
-checks that the value does not overflow.
+This modifier is used to load bits 16-31 of the offset of the symbol's
+address from the TCB, to be used for local-exec TLS accesses.  It
+also checks that the value does not overflow.
 
-@item hw1_last_tls_ie
+@item tls_gd_call
 
-This modifier yields the same value as @code{hw1_tls_ie}, but it also
-checks that the value does not overflow.
+This modifier is used to tag an instrution as the ``call'' part of a
+calling sequence for a TLS GD reference of its operand.
 
-@item hw2_last_tls_ie
+@item tls_gd_add
 
-This modifier yields the same value as @code{hw2_tls_ie}, but it also
-checks that the value does not overflow.
+This modifier is used to tag an instruction as the ``add'' part of a
+calling sequence for a TLS GD reference of its operand.
+
+@item tls_ie_load
+
+This modifier is used to tag an instruction as the ``load'' part of a
+calling sequence for a TLS IE reference of its operand.
 
 @end table
 
index bbccdfb..5d80c4f 100644 (file)
@@ -261,6 +261,41 @@ to be used for initial-exec TLS accesses.
 This modifier is like @code{tls_ie_hi16}, but it adds one to the value
 if @code{tls_ie_lo16} of the input value is negative.
 
+@item tls_le
+
+This modifier is used to load the offset of the symbol's address from
+the TCB, to be used for local-exec TLS accesses.
+
+@item tls_le_lo16
+
+This modifier is used to load the low 16 bits of the offset of the
+symbol's address from the TCB, to be used for local-exec TLS accesses.
+
+@item tls_le_hi16
+
+This modifier is used to load the high 16 bits of the offset of the
+symbol's address from the TCB, to be used for local-exec TLS accesses.
+
+@item tls_le_ha16
+
+This modifier is like @code{tls_le_hi16}, but it adds one to the value
+if @code{tls_le_lo16} of the input value is negative.
+
+@item tls_gd_call
+
+This modifier is used to tag an instrution as the ``call'' part of a
+calling sequence for a TLS GD reference of its operand.
+
+@item tls_gd_add
+
+This modifier is used to tag an instruction as the ``add'' part of a
+calling sequence for a TLS GD reference of its operand.
+
+@item tls_ie_load
+
+This modifier is used to tag an instruction as the ``load'' part of a
+calling sequence for a TLS IE reference of its operand.
+
 @end table
 
 @node TILEPro Directives
index 86179bf..1535dfb 100644 (file)
@@ -1,3 +1,60 @@
+2012-02-25  Walter Lee  <walt@tilera.com>
+
+       * tilegx.h (R_TILEGX_IMM16_X0_HW1_GOT): Delete.
+       (R_TILEGX_IMM16_X1_HW1_GOT): Ditto.
+       (R_TILEGX_IMM16_X0_HW2_GOT): Ditto.
+       (R_TILEGX_IMM16_X1_HW2_GOT): Ditto.
+       (R_TILEGX_IMM16_X0_HW3_GOT): Ditto.
+       (R_TILEGX_IMM16_X1_HW3_GOT): Ditto.
+       (R_TILEGX_IMM16_X0_HW2_LAST_GOT): Ditto.
+       (R_TILEGX_IMM16_X1_HW2_LAST_GOT): Ditto.
+       (R_TILEGX_IMM16_X0_HW1_TLS_GD): Ditto.
+       (R_TILEGX_IMM16_X1_HW1_TLS_GD): Ditto.
+       (R_TILEGX_IMM16_X0_HW2_TLS_GD): Ditto.
+       (R_TILEGX_IMM16_X1_HW2_TLS_GD): Ditto.
+       (R_TILEGX_IMM16_X0_HW3_TLS_GD): Ditto.
+       (R_TILEGX_IMM16_X1_HW3_TLS_GD): Ditto.
+       (R_TILEGX_IMM16_X0_HW2_LAST_TLS_GD): Ditto.
+       (R_TILEGX_IMM16_X1_HW2_LAST_TLS_GD): Ditto.
+       (R_TILEGX_IMM16_X0_HW1_TLS_IE): Ditto.
+       (R_TILEGX_IMM16_X1_HW1_TLS_IE): Ditto.
+       (R_TILEGX_IMM16_X0_HW2_TLS_IE): Ditto.
+       (R_TILEGX_IMM16_X1_HW2_TLS_IE): Ditto.
+       (R_TILEGX_IMM16_X0_HW3_TLS_IE): Ditto.
+       (R_TILEGX_IMM16_X1_HW3_TLS_IE): Ditto.
+       (R_TILEGX_IMM16_X0_HW2_LAST_TLS_IE): Ditto.
+       (R_TILEGX_IMM16_X1_HW2_LAST_TLS_IE): Ditto.
+       (R_TILEGX_IMM16_X0_HW0_TLS_LE): New relocation.
+       (R_TILEGX_IMM16_X1_HW0_TLS_LE): Ditto.
+       (R_TILEGX_IMM16_X0_HW0_LAST_TLS_LE): Ditto.
+       (R_TILEGX_IMM16_X1_HW0_LAST_TLS_LE): Ditto.
+       (R_TILEGX_IMM16_X0_HW1_LAST_TLS_LE): Ditto.
+       (R_TILEGX_IMM16_X1_HW1_LAST_TLS_LE): Ditto.
+       (R_TILEGX_TLS_GD_CALL): Ditto.
+       (R_TILEGX_IMM8_X0_TLS_GD_ADD): Ditto.
+       (R_TILEGX_IMM8_X1_TLS_GD_ADD): Ditto.
+       (R_TILEGX_IMM8_Y0_TLS_GD_ADD): Ditto.
+       (R_TILEGX_IMM8_Y1_TLS_GD_ADD): Ditto.
+       (R_TILEGX_TLS_IE_LOAD): Ditto.
+       (R_TILEGX_IMM8_X0_TLS_ADD): Ditto.
+       (R_TILEGX_IMM8_X1_TLS_ADD): Ditto.
+       (R_TILEGX_IMM8_Y0_TLS_ADD): Ditto.
+       (R_TILEGX_IMM8_Y1_TLS_ADD): Ditto.
+       * tilepro.h (R_TILEPRO_TLS_GD_CALL): New relocation.
+       (R_TILEPRO_IMM8_X0_TLS_GD_ADD): Ditto.
+       (R_TILEPRO_IMM8_X1_TLS_GD_ADD): Ditto.
+       (R_TILEPRO_IMM8_Y0_TLS_GD_ADD): Ditto.
+       (R_TILEPRO_IMM8_Y1_TLS_GD_ADD): Ditto.
+       (R_TILEPRO_TLS_IE_LOAD): Ditto.
+       (R_TILEPRO_IMM16_X0_TLS_LE): Ditto.
+       (R_TILEPRO_IMM16_X1_TLS_LE): Ditto.
+       (R_TILEPRO_IMM16_X0_TLS_LE_LO): Ditto.
+       (R_TILEPRO_IMM16_X1_TLS_LE_LO): Ditto.
+       (R_TILEPRO_IMM16_X0_TLS_LE_HI): Ditto.
+       (R_TILEPRO_IMM16_X1_TLS_LE_HI): Ditto.
+       (R_TILEPRO_IMM16_X0_TLS_LE_HA): Ditto.
+       (R_TILEPRO_IMM16_X1_TLS_LE_HA): Ditto.
+
 2011-12-22  DJ Delorie  <dj@redhat.com>
 
        * rl78.h (R_RL78_RH_RELAX, R_RL78_RH_SFR, R_RL78_RH_SADDR): New.
index d276f2e..004ce28 100644 (file)
@@ -104,48 +104,37 @@ START_RELOC_NUMBERS (elf_tilegx_reloc_type)
 
   RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_GOT,          64)
   RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_GOT,          65)
-  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_GOT,          66)
-  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_GOT,          67)
-  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW2_GOT,          68)
-  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW2_GOT,          69)
-  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW3_GOT,          70)
-  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW3_GOT,          71)
+  /* Relocs 66-71 are currently not defined.  */
+
   RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_LAST_GOT,     72)
   RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_LAST_GOT,     73)
   RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_LAST_GOT,     74)
   RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_LAST_GOT,     75)
-  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW2_LAST_GOT,     76)
-  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW2_LAST_GOT,     77)
+  /* Relocs 76-77 are currently not defined.  */
 
   RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_TLS_GD,       78)
   RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_TLS_GD,       79)
-  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_TLS_GD,       80)
-  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_TLS_GD,       81)
-  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW2_TLS_GD,       82)
-  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW2_TLS_GD,       83)
-  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW3_TLS_GD,       84)
-  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW3_TLS_GD,       85)
+  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_TLS_LE,       80)
+  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_TLS_LE,       81)
+  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_LAST_TLS_LE,  82)
+  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_LAST_TLS_LE,  83)
+  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_LAST_TLS_LE,  84)
+  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_LAST_TLS_LE,  85)
   RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_LAST_TLS_GD,  86)
   RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_LAST_TLS_GD,  87)
   RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_LAST_TLS_GD,  88)
   RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_LAST_TLS_GD,  89)
-  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW2_LAST_TLS_GD,  90)
-  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW2_LAST_TLS_GD,  91)
+  /* Relocs 90-91 are currently not defined.  */
 
   RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_TLS_IE,       92)
   RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_TLS_IE,       93)
-  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_TLS_IE,       94)
-  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_TLS_IE,       95)
-  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW2_TLS_IE,       96)
-  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW2_TLS_IE,       97)
-  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW3_TLS_IE,       98)
-  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW3_TLS_IE,       99)
+  /* Relocs 94-99 are currently not defined.  */
+
   RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_LAST_TLS_IE, 100)
   RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE, 101)
   RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE, 102)
   RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_LAST_TLS_IE, 103)
-  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW2_LAST_TLS_IE, 104)
-  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW2_LAST_TLS_IE, 105)
+  /* Relocs 104-105 are currently not defined.  */
 
   RELOC_NUMBER (R_TILEGX_TLS_DTPMOD64,             106)
   RELOC_NUMBER (R_TILEGX_TLS_DTPOFF64,             107)
@@ -154,6 +143,17 @@ START_RELOC_NUMBERS (elf_tilegx_reloc_type)
   RELOC_NUMBER (R_TILEGX_TLS_DTPOFF32,             110)
   RELOC_NUMBER (R_TILEGX_TLS_TPOFF32,              111)
 
+  RELOC_NUMBER (R_TILEGX_TLS_GD_CALL,              112)
+  RELOC_NUMBER (R_TILEGX_IMM8_X0_TLS_GD_ADD,       113)
+  RELOC_NUMBER (R_TILEGX_IMM8_X1_TLS_GD_ADD,       114)
+  RELOC_NUMBER (R_TILEGX_IMM8_Y0_TLS_GD_ADD,       115)
+  RELOC_NUMBER (R_TILEGX_IMM8_Y1_TLS_GD_ADD,       116)
+  RELOC_NUMBER (R_TILEGX_TLS_IE_LOAD,              117)
+  RELOC_NUMBER (R_TILEGX_IMM8_X0_TLS_ADD,          118)
+  RELOC_NUMBER (R_TILEGX_IMM8_X1_TLS_ADD,          119)
+  RELOC_NUMBER (R_TILEGX_IMM8_Y0_TLS_ADD,          120)
+  RELOC_NUMBER (R_TILEGX_IMM8_Y1_TLS_ADD,          121)
+
 /* These are GNU extensions to enable C++ vtable garbage collection.  */
   RELOC_NUMBER (R_TILEGX_GNU_VTINHERIT, 128)
   RELOC_NUMBER (R_TILEGX_GNU_VTENTRY, 129)
index 899697f..0079a2f 100644 (file)
@@ -96,7 +96,14 @@ START_RELOC_NUMBERS (elf_tilepro_reloc_type)
 
   RELOC_NUMBER (R_TILEPRO_DEST_IMM8_X1,       55)
 
-  /* Relocs 56-65 are currently not defined.  */
+  /* Relocs 56-59 are currently not defined.  */
+
+  RELOC_NUMBER (R_TILEPRO_TLS_GD_CALL,        60)
+  RELOC_NUMBER (R_TILEPRO_IMM8_X0_TLS_GD_ADD, 61)
+  RELOC_NUMBER (R_TILEPRO_IMM8_X1_TLS_GD_ADD, 62)
+  RELOC_NUMBER (R_TILEPRO_IMM8_Y0_TLS_GD_ADD, 63)
+  RELOC_NUMBER (R_TILEPRO_IMM8_Y1_TLS_GD_ADD, 64)
+  RELOC_NUMBER (R_TILEPRO_TLS_IE_LOAD,        65)
 
   RELOC_NUMBER (R_TILEPRO_IMM16_X0_TLS_GD,    66)
   RELOC_NUMBER (R_TILEPRO_IMM16_X1_TLS_GD,    67)
@@ -120,6 +127,15 @@ START_RELOC_NUMBERS (elf_tilepro_reloc_type)
   RELOC_NUMBER (R_TILEPRO_TLS_DTPOFF32,       83)
   RELOC_NUMBER (R_TILEPRO_TLS_TPOFF32,        84)
 
+  RELOC_NUMBER (R_TILEPRO_IMM16_X0_TLS_LE,    85)
+  RELOC_NUMBER (R_TILEPRO_IMM16_X1_TLS_LE,    86)
+  RELOC_NUMBER (R_TILEPRO_IMM16_X0_TLS_LE_LO, 87)
+  RELOC_NUMBER (R_TILEPRO_IMM16_X1_TLS_LE_LO, 88)
+  RELOC_NUMBER (R_TILEPRO_IMM16_X0_TLS_LE_HI, 89)
+  RELOC_NUMBER (R_TILEPRO_IMM16_X1_TLS_LE_HI, 90)
+  RELOC_NUMBER (R_TILEPRO_IMM16_X0_TLS_LE_HA, 91)
+  RELOC_NUMBER (R_TILEPRO_IMM16_X1_TLS_LE_HA, 92)
+
 /* These are GNU extensions to enable C++ vtable garbage collection.  */
   RELOC_NUMBER (R_TILEPRO_GNU_VTINHERIT, 128)
   RELOC_NUMBER (R_TILEPRO_GNU_VTENTRY, 129)
index 7e2c14e..5241b37 100644 (file)
@@ -1,3 +1,10 @@
+2012-02-25  Walter Lee  <walt@tilera.com>
+
+       * tilegx.h (tilegx_mnemonic): Add TILEGX_OPC_LD4S_TLS,
+       TILEGX_OPC_LD_TLS.
+       * tilepro.h (tilepro_mnemonic): Add TILEPRO_OPC_LW_TLS,
+       TILEPRO_OPC_LW_TLS_SN.
+
 2012-02-08  H.J. Lu  <hongjiu.lu@intel.com>
 
        * i386.h (XACQUIRE_PREFIX_OPCODE): New.
index 95a9ca7..c11fc16 100644 (file)
@@ -34,6 +34,8 @@ typedef enum
   TILEGX_OPC_BPT,
   TILEGX_OPC_INFO,
   TILEGX_OPC_INFOL,
+  TILEGX_OPC_LD4S_TLS,
+  TILEGX_OPC_LD_TLS,
   TILEGX_OPC_MOVE,
   TILEGX_OPC_MOVEI,
   TILEGX_OPC_MOVELI,
index 91e2a2b..767926b 100644 (file)
@@ -36,6 +36,8 @@ typedef enum
   TILEPRO_OPC_INFOL,
   TILEPRO_OPC_J,
   TILEPRO_OPC_JAL,
+  TILEPRO_OPC_LW_TLS,
+  TILEPRO_OPC_LW_TLS_SN,
   TILEPRO_OPC_MOVE,
   TILEPRO_OPC_MOVE_SN,
   TILEPRO_OPC_MOVEI,
index b3f5c76..70d5f34 100644 (file)
@@ -1,3 +1,9 @@
+2012-02-25  Walter Lee  <walt@tilera.com>
+
+       * tilegx-opc.c: Handle TILEGX_OPC_LD4S_TLS and TILEGX_OPC_LD_TLS.
+       * tilepro-opc.c: Handle TILEPRO_OPC_LW_TLS and
+       TILEPRO_OPC_LW_TLS_SN.
+
 2012-02-21  H.J. Lu  <hongjiu.lu@intel.com>
 
        * i386-opc.h (HLEPrefixNone): New.
index 4f97019..682dd1b 100644 (file)
@@ -41,7 +41,7 @@
 #include <stddef.h>
 #endif
 
-const struct tilegx_opcode tilegx_opcodes[334] =
+const struct tilegx_opcode tilegx_opcodes[336] =
 {
  { "bpt", TILEGX_OPC_BPT, 0x2, 0, TREG_ZERO, 0,
     { { 0, }, {  }, { 0, }, { 0, }, { 0, } },
@@ -100,8 +100,46 @@ const struct tilegx_opcode tilegx_opcodes[334] =
     }
 #endif
   },
+  { "ld4s_tls", TILEGX_OPC_LD4S_TLS, 0x2, 3, TREG_ZERO, 1,
+    { { 0, }, { 6, 7, 1 }, { 0, }, { 0, }, { 0, } },
+#ifndef DISASM_ONLY
+    {
+      0ULL,
+      0xfffff80000000000ULL,
+      0ULL,
+      0ULL,
+      0ULL
+    },
+    {
+      -1ULL,
+      0x1858000000000000ULL,
+      -1ULL,
+      -1ULL,
+      -1ULL
+    }
+#endif
+  },
+  { "ld_tls", TILEGX_OPC_LD_TLS, 0x2, 3, TREG_ZERO, 1,
+    { { 0, }, { 6, 7, 1 }, { 0, }, { 0, }, { 0, } },
+#ifndef DISASM_ONLY
+    {
+      0ULL,
+      0xfffff80000000000ULL,
+      0ULL,
+      0ULL,
+      0ULL
+    },
+    {
+      -1ULL,
+      0x18a0000000000000ULL,
+      -1ULL,
+      -1ULL,
+      -1ULL
+    }
+#endif
+  },
   { "move", TILEGX_OPC_MOVE, 0xf, 2, TREG_ZERO, 1,
-    { { 6, 7 }, { 8, 9 }, { 10, 11 }, { 12, 13 }, { 0, } },
+    { { 8, 9 }, { 6, 7 }, { 10, 11 }, { 12, 13 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffff000ULL,
@@ -120,7 +158,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "movei", TILEGX_OPC_MOVEI, 0xf, 2, TREG_ZERO, 1,
-    { { 6, 0 }, { 8, 1 }, { 10, 2 }, { 12, 3 }, { 0, } },
+    { { 8, 0 }, { 6, 1 }, { 10, 2 }, { 12, 3 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00fc0ULL,
@@ -139,7 +177,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "moveli", TILEGX_OPC_MOVELI, 0x3, 2, TREG_ZERO, 1,
-    { { 6, 4 }, { 8, 5 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 4 }, { 6, 5 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc000000070000fc0ULL,
@@ -158,7 +196,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "prefetch", TILEGX_OPC_PREFETCH, 0x12, 1, TREG_ZERO, 1,
-    { { 0, }, { 9 }, { 0, }, { 0, }, { 14 } },
+    { { 0, }, { 7 }, { 0, }, { 0, }, { 14 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -291,7 +329,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "prefetch_l1", TILEGX_OPC_PREFETCH_L1, 0x12, 1, TREG_ZERO, 1,
-    { { 0, }, { 9 }, { 0, }, { 0, }, { 14 } },
+    { { 0, }, { 7 }, { 0, }, { 0, }, { 14 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -310,7 +348,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "prefetch_l1_fault", TILEGX_OPC_PREFETCH_L1_FAULT, 0x12, 1, TREG_ZERO, 1,
-    { { 0, }, { 9 }, { 0, }, { 0, }, { 14 } },
+    { { 0, }, { 7 }, { 0, }, { 0, }, { 14 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -329,7 +367,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "prefetch_l2", TILEGX_OPC_PREFETCH_L2, 0x12, 1, TREG_ZERO, 1,
-    { { 0, }, { 9 }, { 0, }, { 0, }, { 14 } },
+    { { 0, }, { 7 }, { 0, }, { 0, }, { 14 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -348,7 +386,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "prefetch_l2_fault", TILEGX_OPC_PREFETCH_L2_FAULT, 0x12, 1, TREG_ZERO, 1,
-    { { 0, }, { 9 }, { 0, }, { 0, }, { 14 } },
+    { { 0, }, { 7 }, { 0, }, { 0, }, { 14 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -367,7 +405,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "prefetch_l3", TILEGX_OPC_PREFETCH_L3, 0x12, 1, TREG_ZERO, 1,
-    { { 0, }, { 9 }, { 0, }, { 0, }, { 14 } },
+    { { 0, }, { 7 }, { 0, }, { 0, }, { 14 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -386,7 +424,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "prefetch_l3_fault", TILEGX_OPC_PREFETCH_L3_FAULT, 0x12, 1, TREG_ZERO, 1,
-    { { 0, }, { 9 }, { 0, }, { 0, }, { 14 } },
+    { { 0, }, { 7 }, { 0, }, { 0, }, { 14 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -424,7 +462,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "add", TILEGX_OPC_ADD, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -443,7 +481,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "addi", TILEGX_OPC_ADDI, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 10, 11, 2 }, { 12, 13, 3 }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 10, 11, 2 }, { 12, 13, 3 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -462,7 +500,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "addli", TILEGX_OPC_ADDLI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 4 }, { 8, 9, 5 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 4 }, { 6, 7, 5 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc000000070000000ULL,
@@ -481,7 +519,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "addx", TILEGX_OPC_ADDX, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -500,7 +538,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "addxi", TILEGX_OPC_ADDXI, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 10, 11, 2 }, { 12, 13, 3 }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 10, 11, 2 }, { 12, 13, 3 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -519,7 +557,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "addxli", TILEGX_OPC_ADDXLI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 4 }, { 8, 9, 5 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 4 }, { 6, 7, 5 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc000000070000000ULL,
@@ -538,7 +576,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "addxsc", TILEGX_OPC_ADDXSC, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -557,7 +595,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "and", TILEGX_OPC_AND, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -576,7 +614,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "andi", TILEGX_OPC_ANDI, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 10, 11, 2 }, { 12, 13, 3 }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 10, 11, 2 }, { 12, 13, 3 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -595,7 +633,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "beqz", TILEGX_OPC_BEQZ, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -614,7 +652,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "beqzt", TILEGX_OPC_BEQZT, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -633,7 +671,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "bfexts", TILEGX_OPC_BFEXTS, 0x1, 4, TREG_ZERO, 1,
-    { { 6, 7, 21, 22 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 21, 22 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007f000000ULL,
@@ -652,7 +690,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "bfextu", TILEGX_OPC_BFEXTU, 0x1, 4, TREG_ZERO, 1,
-    { { 6, 7, 21, 22 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 21, 22 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007f000000ULL,
@@ -671,7 +709,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "bfins", TILEGX_OPC_BFINS, 0x1, 4, TREG_ZERO, 1,
-    { { 23, 7, 21, 22 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 21, 22 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007f000000ULL,
@@ -690,7 +728,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "bgez", TILEGX_OPC_BGEZ, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -709,7 +747,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "bgezt", TILEGX_OPC_BGEZT, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -728,7 +766,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "bgtz", TILEGX_OPC_BGTZ, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -747,7 +785,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "bgtzt", TILEGX_OPC_BGTZT, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -766,7 +804,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "blbc", TILEGX_OPC_BLBC, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -785,7 +823,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "blbct", TILEGX_OPC_BLBCT, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -804,7 +842,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "blbs", TILEGX_OPC_BLBS, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -823,7 +861,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "blbst", TILEGX_OPC_BLBST, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -842,7 +880,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "blez", TILEGX_OPC_BLEZ, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -861,7 +899,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "blezt", TILEGX_OPC_BLEZT, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -880,7 +918,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "bltz", TILEGX_OPC_BLTZ, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -899,7 +937,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "bltzt", TILEGX_OPC_BLTZT, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -918,7 +956,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "bnez", TILEGX_OPC_BNEZ, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -937,7 +975,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "bnezt", TILEGX_OPC_BNEZT, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -956,7 +994,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "clz", TILEGX_OPC_CLZ, 0x5, 2, TREG_ZERO, 1,
-    { { 6, 7 }, { 0, }, { 10, 11 }, { 0, }, { 0, } },
+    { { 8, 9 }, { 0, }, { 10, 11 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffff000ULL,
@@ -975,7 +1013,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmoveqz", TILEGX_OPC_CMOVEQZ, 0x5, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 24, 11, 18 }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 24, 11, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -994,7 +1032,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmovnez", TILEGX_OPC_CMOVNEZ, 0x5, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 24, 11, 18 }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 24, 11, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1013,7 +1051,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmpeq", TILEGX_OPC_CMPEQ, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1032,7 +1070,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmpeqi", TILEGX_OPC_CMPEQI, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 10, 11, 2 }, { 12, 13, 3 }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 10, 11, 2 }, { 12, 13, 3 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -1051,7 +1089,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmpexch", TILEGX_OPC_CMPEXCH, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1070,7 +1108,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmpexch4", TILEGX_OPC_CMPEXCH4, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1089,7 +1127,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmples", TILEGX_OPC_CMPLES, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1108,7 +1146,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmpleu", TILEGX_OPC_CMPLEU, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1127,7 +1165,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmplts", TILEGX_OPC_CMPLTS, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1146,7 +1184,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmpltsi", TILEGX_OPC_CMPLTSI, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 10, 11, 2 }, { 12, 13, 3 }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 10, 11, 2 }, { 12, 13, 3 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -1165,7 +1203,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmpltu", TILEGX_OPC_CMPLTU, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1184,7 +1222,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmpltui", TILEGX_OPC_CMPLTUI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -1203,7 +1241,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmpne", TILEGX_OPC_CMPNE, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1222,7 +1260,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmul", TILEGX_OPC_CMUL, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1241,7 +1279,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmula", TILEGX_OPC_CMULA, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1260,7 +1298,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmulaf", TILEGX_OPC_CMULAF, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1279,7 +1317,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmulf", TILEGX_OPC_CMULF, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1298,7 +1336,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmulfr", TILEGX_OPC_CMULFR, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1317,7 +1355,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmulh", TILEGX_OPC_CMULH, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1336,7 +1374,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmulhr", TILEGX_OPC_CMULHR, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1355,7 +1393,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "crc32_32", TILEGX_OPC_CRC32_32, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1374,7 +1412,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "crc32_8", TILEGX_OPC_CRC32_8, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1393,7 +1431,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ctz", TILEGX_OPC_CTZ, 0x5, 2, TREG_ZERO, 1,
-    { { 6, 7 }, { 0, }, { 10, 11 }, { 0, }, { 0, } },
+    { { 8, 9 }, { 0, }, { 10, 11 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffff000ULL,
@@ -1412,7 +1450,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "dblalign", TILEGX_OPC_DBLALIGN, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1431,7 +1469,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "dblalign2", TILEGX_OPC_DBLALIGN2, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1450,7 +1488,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "dblalign4", TILEGX_OPC_DBLALIGN4, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1469,7 +1507,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "dblalign6", TILEGX_OPC_DBLALIGN6, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1507,7 +1545,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "dtlbpr", TILEGX_OPC_DTLBPR, 0x2, 1, TREG_ZERO, 1,
-    { { 0, }, { 9 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1526,7 +1564,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "exch", TILEGX_OPC_EXCH, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1545,7 +1583,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "exch4", TILEGX_OPC_EXCH4, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1564,7 +1602,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fdouble_add_flags", TILEGX_OPC_FDOUBLE_ADD_FLAGS, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1583,7 +1621,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fdouble_addsub", TILEGX_OPC_FDOUBLE_ADDSUB, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1602,7 +1640,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fdouble_mul_flags", TILEGX_OPC_FDOUBLE_MUL_FLAGS, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1621,7 +1659,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fdouble_pack1", TILEGX_OPC_FDOUBLE_PACK1, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1640,7 +1678,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fdouble_pack2", TILEGX_OPC_FDOUBLE_PACK2, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1659,7 +1697,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fdouble_sub_flags", TILEGX_OPC_FDOUBLE_SUB_FLAGS, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1678,7 +1716,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fdouble_unpack_max", TILEGX_OPC_FDOUBLE_UNPACK_MAX, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1697,7 +1735,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fdouble_unpack_min", TILEGX_OPC_FDOUBLE_UNPACK_MIN, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1716,7 +1754,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fetchadd", TILEGX_OPC_FETCHADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1735,7 +1773,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fetchadd4", TILEGX_OPC_FETCHADD4, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1754,7 +1792,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fetchaddgez", TILEGX_OPC_FETCHADDGEZ, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1773,7 +1811,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fetchaddgez4", TILEGX_OPC_FETCHADDGEZ4, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1792,7 +1830,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fetchand", TILEGX_OPC_FETCHAND, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1811,7 +1849,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fetchand4", TILEGX_OPC_FETCHAND4, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1830,7 +1868,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fetchor", TILEGX_OPC_FETCHOR, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1849,7 +1887,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fetchor4", TILEGX_OPC_FETCHOR4, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1868,7 +1906,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "finv", TILEGX_OPC_FINV, 0x2, 1, TREG_ZERO, 1,
-    { { 0, }, { 9 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1887,7 +1925,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "flush", TILEGX_OPC_FLUSH, 0x2, 1, TREG_ZERO, 1,
-    { { 0, }, { 9 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1944,7 +1982,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fsingle_add1", TILEGX_OPC_FSINGLE_ADD1, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1963,7 +2001,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fsingle_addsub2", TILEGX_OPC_FSINGLE_ADDSUB2, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1982,7 +2020,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fsingle_mul1", TILEGX_OPC_FSINGLE_MUL1, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -2001,7 +2039,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fsingle_mul2", TILEGX_OPC_FSINGLE_MUL2, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -2020,7 +2058,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fsingle_pack1", TILEGX_OPC_FSINGLE_PACK1, 0x5, 2, TREG_ZERO, 1,
-    { { 6, 7 }, { 0, }, { 10, 11 }, { 0, }, { 0, } },
+    { { 8, 9 }, { 0, }, { 10, 11 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffff000ULL,
@@ -2039,7 +2077,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fsingle_pack2", TILEGX_OPC_FSINGLE_PACK2, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -2058,7 +2096,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fsingle_sub1", TILEGX_OPC_FSINGLE_SUB1, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -2077,7 +2115,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "icoh", TILEGX_OPC_ICOH, 0x2, 1, TREG_ZERO, 1,
-    { { 0, }, { 9 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2115,7 +2153,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "inv", TILEGX_OPC_INV, 0x2, 1, TREG_ZERO, 1,
-    { { 0, }, { 9 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2191,7 +2229,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "jalr", TILEGX_OPC_JALR, 0xa, 1, TREG_LR, 1,
-    { { 0, }, { 9 }, { 0, }, { 13 }, { 0, } },
+    { { 0, }, { 7 }, { 0, }, { 13 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2210,7 +2248,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "jalrp", TILEGX_OPC_JALRP, 0xa, 1, TREG_LR, 1,
-    { { 0, }, { 9 }, { 0, }, { 13 }, { 0, } },
+    { { 0, }, { 7 }, { 0, }, { 13 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2229,7 +2267,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "jr", TILEGX_OPC_JR, 0xa, 1, TREG_ZERO, 1,
-    { { 0, }, { 9 }, { 0, }, { 13 }, { 0, } },
+    { { 0, }, { 7 }, { 0, }, { 13 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2248,7 +2286,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "jrp", TILEGX_OPC_JRP, 0xa, 1, TREG_ZERO, 1,
-    { { 0, }, { 9 }, { 0, }, { 13 }, { 0, } },
+    { { 0, }, { 7 }, { 0, }, { 13 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2267,7 +2305,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ld", TILEGX_OPC_LD, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 26, 14 } },
+    { { 0, }, { 6, 7 }, { 0, }, { 0, }, { 26, 14 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2286,7 +2324,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ld1s", TILEGX_OPC_LD1S, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 26, 14 } },
+    { { 0, }, { 6, 7 }, { 0, }, { 0, }, { 26, 14 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2305,7 +2343,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ld1s_add", TILEGX_OPC_LD1S_ADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 15, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2324,7 +2362,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ld1u", TILEGX_OPC_LD1U, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 26, 14 } },
+    { { 0, }, { 6, 7 }, { 0, }, { 0, }, { 26, 14 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2343,7 +2381,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ld1u_add", TILEGX_OPC_LD1U_ADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 15, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2362,7 +2400,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ld2s", TILEGX_OPC_LD2S, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 26, 14 } },
+    { { 0, }, { 6, 7 }, { 0, }, { 0, }, { 26, 14 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2381,7 +2419,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ld2s_add", TILEGX_OPC_LD2S_ADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 15, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2400,7 +2438,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ld2u", TILEGX_OPC_LD2U, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 26, 14 } },
+    { { 0, }, { 6, 7 }, { 0, }, { 0, }, { 26, 14 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2419,7 +2457,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ld2u_add", TILEGX_OPC_LD2U_ADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 15, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2438,7 +2476,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ld4s", TILEGX_OPC_LD4S, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 26, 14 } },
+    { { 0, }, { 6, 7 }, { 0, }, { 0, }, { 26, 14 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2457,7 +2495,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ld4s_add", TILEGX_OPC_LD4S_ADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 15, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2476,7 +2514,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ld4u", TILEGX_OPC_LD4U, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 26, 14 } },
+    { { 0, }, { 6, 7 }, { 0, }, { 0, }, { 26, 14 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2495,7 +2533,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ld4u_add", TILEGX_OPC_LD4U_ADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 15, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2514,7 +2552,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ld_add", TILEGX_OPC_LD_ADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 15, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2533,7 +2571,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ldna", TILEGX_OPC_LDNA, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2552,7 +2590,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ldna_add", TILEGX_OPC_LDNA_ADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 15, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2571,7 +2609,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ldnt", TILEGX_OPC_LDNT, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2590,7 +2628,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ldnt1s", TILEGX_OPC_LDNT1S, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2609,7 +2647,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ldnt1s_add", TILEGX_OPC_LDNT1S_ADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 15, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2628,7 +2666,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ldnt1u", TILEGX_OPC_LDNT1U, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2647,7 +2685,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ldnt1u_add", TILEGX_OPC_LDNT1U_ADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 15, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2666,7 +2704,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ldnt2s", TILEGX_OPC_LDNT2S, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2685,7 +2723,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ldnt2s_add", TILEGX_OPC_LDNT2S_ADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 15, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2704,7 +2742,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ldnt2u", TILEGX_OPC_LDNT2U, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2723,7 +2761,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ldnt2u_add", TILEGX_OPC_LDNT2U_ADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 15, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2742,7 +2780,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ldnt4s", TILEGX_OPC_LDNT4S, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2761,7 +2799,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ldnt4s_add", TILEGX_OPC_LDNT4S_ADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 15, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2780,7 +2818,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ldnt4u", TILEGX_OPC_LDNT4U, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2799,7 +2837,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ldnt4u_add", TILEGX_OPC_LDNT4U_ADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 15, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2818,7 +2856,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ldnt_add", TILEGX_OPC_LDNT_ADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 15, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2837,7 +2875,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "lnk", TILEGX_OPC_LNK, 0xa, 1, TREG_ZERO, 1,
-    { { 0, }, { 8 }, { 0, }, { 12 }, { 0, } },
+    { { 0, }, { 6 }, { 0, }, { 12 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2875,7 +2913,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mfspr", TILEGX_OPC_MFSPR, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 8, 27 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 27 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2894,7 +2932,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mm", TILEGX_OPC_MM, 0x1, 4, TREG_ZERO, 1,
-    { { 23, 7, 21, 22 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 21, 22 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007f000000ULL,
@@ -2913,7 +2951,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mnz", TILEGX_OPC_MNZ, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -2932,7 +2970,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mtspr", TILEGX_OPC_MTSPR, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 28, 9 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 28, 7 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2951,7 +2989,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mul_hs_hs", TILEGX_OPC_MUL_HS_HS, 0x5, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 10, 11, 18 }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 10, 11, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -2970,7 +3008,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mul_hs_hu", TILEGX_OPC_MUL_HS_HU, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -2989,7 +3027,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mul_hs_ls", TILEGX_OPC_MUL_HS_LS, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3008,7 +3046,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mul_hs_lu", TILEGX_OPC_MUL_HS_LU, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3027,7 +3065,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mul_hu_hu", TILEGX_OPC_MUL_HU_HU, 0x5, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 10, 11, 18 }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 10, 11, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3046,7 +3084,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mul_hu_ls", TILEGX_OPC_MUL_HU_LS, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3065,7 +3103,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mul_hu_lu", TILEGX_OPC_MUL_HU_LU, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3084,7 +3122,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mul_ls_ls", TILEGX_OPC_MUL_LS_LS, 0x5, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 10, 11, 18 }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 10, 11, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3103,7 +3141,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mul_ls_lu", TILEGX_OPC_MUL_LS_LU, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3122,7 +3160,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mul_lu_lu", TILEGX_OPC_MUL_LU_LU, 0x5, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 10, 11, 18 }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 10, 11, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3141,7 +3179,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mula_hs_hs", TILEGX_OPC_MULA_HS_HS, 0x5, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 24, 11, 18 }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 24, 11, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3160,7 +3198,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mula_hs_hu", TILEGX_OPC_MULA_HS_HU, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3179,7 +3217,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mula_hs_ls", TILEGX_OPC_MULA_HS_LS, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3198,7 +3236,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mula_hs_lu", TILEGX_OPC_MULA_HS_LU, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3217,7 +3255,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mula_hu_hu", TILEGX_OPC_MULA_HU_HU, 0x5, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 24, 11, 18 }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 24, 11, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3236,7 +3274,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mula_hu_ls", TILEGX_OPC_MULA_HU_LS, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3255,7 +3293,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mula_hu_lu", TILEGX_OPC_MULA_HU_LU, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3274,7 +3312,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mula_ls_ls", TILEGX_OPC_MULA_LS_LS, 0x5, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 24, 11, 18 }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 24, 11, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3293,7 +3331,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mula_ls_lu", TILEGX_OPC_MULA_LS_LU, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3312,7 +3350,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mula_lu_lu", TILEGX_OPC_MULA_LU_LU, 0x5, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 24, 11, 18 }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 24, 11, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3331,7 +3369,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mulax", TILEGX_OPC_MULAX, 0x5, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 24, 11, 18 }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 24, 11, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3350,7 +3388,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mulx", TILEGX_OPC_MULX, 0x5, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 10, 11, 18 }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 10, 11, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3369,7 +3407,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mz", TILEGX_OPC_MZ, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3426,7 +3464,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "nor", TILEGX_OPC_NOR, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3445,7 +3483,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "or", TILEGX_OPC_OR, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3464,7 +3502,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ori", TILEGX_OPC_ORI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -3483,7 +3521,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "pcnt", TILEGX_OPC_PCNT, 0x5, 2, TREG_ZERO, 1,
-    { { 6, 7 }, { 0, }, { 10, 11 }, { 0, }, { 0, } },
+    { { 8, 9 }, { 0, }, { 10, 11 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffff000ULL,
@@ -3502,7 +3540,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "revbits", TILEGX_OPC_REVBITS, 0x5, 2, TREG_ZERO, 1,
-    { { 6, 7 }, { 0, }, { 10, 11 }, { 0, }, { 0, } },
+    { { 8, 9 }, { 0, }, { 10, 11 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffff000ULL,
@@ -3521,7 +3559,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "revbytes", TILEGX_OPC_REVBYTES, 0x5, 2, TREG_ZERO, 1,
-    { { 6, 7 }, { 0, }, { 10, 11 }, { 0, }, { 0, } },
+    { { 8, 9 }, { 0, }, { 10, 11 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffff000ULL,
@@ -3540,7 +3578,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "rotl", TILEGX_OPC_ROTL, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3559,7 +3597,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "rotli", TILEGX_OPC_ROTLI, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 29 }, { 8, 9, 30 }, { 10, 11, 31 }, { 12, 13, 32 }, { 0, } },
+    { { 8, 9, 29 }, { 6, 7, 30 }, { 10, 11, 31 }, { 12, 13, 32 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3578,7 +3616,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "shl", TILEGX_OPC_SHL, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3597,7 +3635,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "shl16insli", TILEGX_OPC_SHL16INSLI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 4 }, { 8, 9, 5 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 4 }, { 6, 7, 5 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc000000070000000ULL,
@@ -3616,7 +3654,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "shl1add", TILEGX_OPC_SHL1ADD, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3635,7 +3673,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "shl1addx", TILEGX_OPC_SHL1ADDX, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3654,7 +3692,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "shl2add", TILEGX_OPC_SHL2ADD, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3673,7 +3711,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "shl2addx", TILEGX_OPC_SHL2ADDX, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3692,7 +3730,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "shl3add", TILEGX_OPC_SHL3ADD, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3711,7 +3749,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "shl3addx", TILEGX_OPC_SHL3ADDX, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3730,7 +3768,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "shli", TILEGX_OPC_SHLI, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 29 }, { 8, 9, 30 }, { 10, 11, 31 }, { 12, 13, 32 }, { 0, } },
+    { { 8, 9, 29 }, { 6, 7, 30 }, { 10, 11, 31 }, { 12, 13, 32 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3749,7 +3787,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "shlx", TILEGX_OPC_SHLX, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3768,7 +3806,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "shlxi", TILEGX_OPC_SHLXI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 29 }, { 8, 9, 30 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 29 }, { 6, 7, 30 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3787,7 +3825,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "shrs", TILEGX_OPC_SHRS, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3806,7 +3844,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "shrsi", TILEGX_OPC_SHRSI, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 29 }, { 8, 9, 30 }, { 10, 11, 31 }, { 12, 13, 32 }, { 0, } },
+    { { 8, 9, 29 }, { 6, 7, 30 }, { 10, 11, 31 }, { 12, 13, 32 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3825,7 +3863,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "shru", TILEGX_OPC_SHRU, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3844,7 +3882,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "shrui", TILEGX_OPC_SHRUI, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 29 }, { 8, 9, 30 }, { 10, 11, 31 }, { 12, 13, 32 }, { 0, } },
+    { { 8, 9, 29 }, { 6, 7, 30 }, { 10, 11, 31 }, { 12, 13, 32 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3863,7 +3901,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "shrux", TILEGX_OPC_SHRUX, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3882,7 +3920,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "shruxi", TILEGX_OPC_SHRUXI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 29 }, { 8, 9, 30 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 29 }, { 6, 7, 30 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3901,7 +3939,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "shufflebytes", TILEGX_OPC_SHUFFLEBYTES, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3920,7 +3958,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "st", TILEGX_OPC_ST, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 17 }, { 0, }, { 0, }, { 14, 33 } },
+    { { 0, }, { 7, 17 }, { 0, }, { 0, }, { 14, 33 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -3939,7 +3977,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "st1", TILEGX_OPC_ST1, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 17 }, { 0, }, { 0, }, { 14, 33 } },
+    { { 0, }, { 7, 17 }, { 0, }, { 0, }, { 14, 33 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -3977,7 +4015,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "st2", TILEGX_OPC_ST2, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 17 }, { 0, }, { 0, }, { 14, 33 } },
+    { { 0, }, { 7, 17 }, { 0, }, { 0, }, { 14, 33 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -4015,7 +4053,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "st4", TILEGX_OPC_ST4, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 17 }, { 0, }, { 0, }, { 14, 33 } },
+    { { 0, }, { 7, 17 }, { 0, }, { 0, }, { 14, 33 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -4072,7 +4110,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "stnt", TILEGX_OPC_STNT, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -4091,7 +4129,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "stnt1", TILEGX_OPC_STNT1, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -4129,7 +4167,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "stnt2", TILEGX_OPC_STNT2, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -4167,7 +4205,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "stnt4", TILEGX_OPC_STNT4, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -4224,7 +4262,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "sub", TILEGX_OPC_SUB, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4243,7 +4281,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "subx", TILEGX_OPC_SUBX, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4262,7 +4300,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "subxsc", TILEGX_OPC_SUBXSC, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4357,7 +4395,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "tblidxb0", TILEGX_OPC_TBLIDXB0, 0x5, 2, TREG_ZERO, 1,
-    { { 23, 7 }, { 0, }, { 24, 11 }, { 0, }, { 0, } },
+    { { 23, 9 }, { 0, }, { 24, 11 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffff000ULL,
@@ -4376,7 +4414,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "tblidxb1", TILEGX_OPC_TBLIDXB1, 0x5, 2, TREG_ZERO, 1,
-    { { 23, 7 }, { 0, }, { 24, 11 }, { 0, }, { 0, } },
+    { { 23, 9 }, { 0, }, { 24, 11 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffff000ULL,
@@ -4395,7 +4433,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "tblidxb2", TILEGX_OPC_TBLIDXB2, 0x5, 2, TREG_ZERO, 1,
-    { { 23, 7 }, { 0, }, { 24, 11 }, { 0, }, { 0, } },
+    { { 23, 9 }, { 0, }, { 24, 11 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffff000ULL,
@@ -4414,7 +4452,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "tblidxb3", TILEGX_OPC_TBLIDXB3, 0x5, 2, TREG_ZERO, 1,
-    { { 23, 7 }, { 0, }, { 24, 11 }, { 0, }, { 0, } },
+    { { 23, 9 }, { 0, }, { 24, 11 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffff000ULL,
@@ -4433,7 +4471,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1add", TILEGX_OPC_V1ADD, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4452,7 +4490,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1addi", TILEGX_OPC_V1ADDI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -4471,7 +4509,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1adduc", TILEGX_OPC_V1ADDUC, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4490,7 +4528,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1adiffu", TILEGX_OPC_V1ADIFFU, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4509,7 +4547,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1avgu", TILEGX_OPC_V1AVGU, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4528,7 +4566,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1cmpeq", TILEGX_OPC_V1CMPEQ, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4547,7 +4585,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1cmpeqi", TILEGX_OPC_V1CMPEQI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -4566,7 +4604,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1cmples", TILEGX_OPC_V1CMPLES, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4585,7 +4623,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1cmpleu", TILEGX_OPC_V1CMPLEU, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4604,7 +4642,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1cmplts", TILEGX_OPC_V1CMPLTS, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4623,7 +4661,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1cmpltsi", TILEGX_OPC_V1CMPLTSI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -4642,7 +4680,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1cmpltu", TILEGX_OPC_V1CMPLTU, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4661,7 +4699,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1cmpltui", TILEGX_OPC_V1CMPLTUI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -4680,7 +4718,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1cmpne", TILEGX_OPC_V1CMPNE, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4699,7 +4737,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1ddotpu", TILEGX_OPC_V1DDOTPU, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4718,7 +4756,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1ddotpua", TILEGX_OPC_V1DDOTPUA, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4737,7 +4775,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1ddotpus", TILEGX_OPC_V1DDOTPUS, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4756,7 +4794,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1ddotpusa", TILEGX_OPC_V1DDOTPUSA, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4775,7 +4813,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1dotp", TILEGX_OPC_V1DOTP, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4794,7 +4832,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1dotpa", TILEGX_OPC_V1DOTPA, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4813,7 +4851,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1dotpu", TILEGX_OPC_V1DOTPU, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4832,7 +4870,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1dotpua", TILEGX_OPC_V1DOTPUA, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4851,7 +4889,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1dotpus", TILEGX_OPC_V1DOTPUS, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4870,7 +4908,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1dotpusa", TILEGX_OPC_V1DOTPUSA, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4889,7 +4927,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1int_h", TILEGX_OPC_V1INT_H, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4908,7 +4946,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1int_l", TILEGX_OPC_V1INT_L, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4927,7 +4965,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1maxu", TILEGX_OPC_V1MAXU, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4946,7 +4984,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1maxui", TILEGX_OPC_V1MAXUI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -4965,7 +5003,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1minu", TILEGX_OPC_V1MINU, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4984,7 +5022,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1minui", TILEGX_OPC_V1MINUI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -5003,7 +5041,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1mnz", TILEGX_OPC_V1MNZ, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5022,7 +5060,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1multu", TILEGX_OPC_V1MULTU, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5041,7 +5079,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1mulu", TILEGX_OPC_V1MULU, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5060,7 +5098,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1mulus", TILEGX_OPC_V1MULUS, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5079,7 +5117,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1mz", TILEGX_OPC_V1MZ, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5098,7 +5136,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1sadau", TILEGX_OPC_V1SADAU, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5117,7 +5155,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1sadu", TILEGX_OPC_V1SADU, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5136,7 +5174,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1shl", TILEGX_OPC_V1SHL, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5155,7 +5193,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1shli", TILEGX_OPC_V1SHLI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 29 }, { 8, 9, 30 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 29 }, { 6, 7, 30 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5174,7 +5212,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1shrs", TILEGX_OPC_V1SHRS, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5193,7 +5231,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1shrsi", TILEGX_OPC_V1SHRSI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 29 }, { 8, 9, 30 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 29 }, { 6, 7, 30 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5212,7 +5250,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1shru", TILEGX_OPC_V1SHRU, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5231,7 +5269,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1shrui", TILEGX_OPC_V1SHRUI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 29 }, { 8, 9, 30 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 29 }, { 6, 7, 30 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5250,7 +5288,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1sub", TILEGX_OPC_V1SUB, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5269,7 +5307,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1subuc", TILEGX_OPC_V1SUBUC, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5288,7 +5326,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2add", TILEGX_OPC_V2ADD, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5307,7 +5345,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2addi", TILEGX_OPC_V2ADDI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -5326,7 +5364,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2addsc", TILEGX_OPC_V2ADDSC, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5345,7 +5383,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2adiffs", TILEGX_OPC_V2ADIFFS, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5364,7 +5402,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2avgs", TILEGX_OPC_V2AVGS, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5383,7 +5421,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2cmpeq", TILEGX_OPC_V2CMPEQ, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5402,7 +5440,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2cmpeqi", TILEGX_OPC_V2CMPEQI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -5421,7 +5459,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2cmples", TILEGX_OPC_V2CMPLES, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5440,7 +5478,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2cmpleu", TILEGX_OPC_V2CMPLEU, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5459,7 +5497,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2cmplts", TILEGX_OPC_V2CMPLTS, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5478,7 +5516,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2cmpltsi", TILEGX_OPC_V2CMPLTSI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -5497,7 +5535,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2cmpltu", TILEGX_OPC_V2CMPLTU, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5516,7 +5554,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2cmpltui", TILEGX_OPC_V2CMPLTUI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -5535,7 +5573,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2cmpne", TILEGX_OPC_V2CMPNE, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5554,7 +5592,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2dotp", TILEGX_OPC_V2DOTP, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5573,7 +5611,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2dotpa", TILEGX_OPC_V2DOTPA, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5592,7 +5630,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2int_h", TILEGX_OPC_V2INT_H, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5611,7 +5649,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2int_l", TILEGX_OPC_V2INT_L, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5630,7 +5668,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2maxs", TILEGX_OPC_V2MAXS, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5649,7 +5687,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2maxsi", TILEGX_OPC_V2MAXSI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -5668,7 +5706,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2mins", TILEGX_OPC_V2MINS, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5687,7 +5725,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2minsi", TILEGX_OPC_V2MINSI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -5706,7 +5744,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2mnz", TILEGX_OPC_V2MNZ, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5725,7 +5763,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2mulfsc", TILEGX_OPC_V2MULFSC, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5744,7 +5782,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2muls", TILEGX_OPC_V2MULS, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5763,7 +5801,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2mults", TILEGX_OPC_V2MULTS, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5782,7 +5820,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2mz", TILEGX_OPC_V2MZ, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5801,7 +5839,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2packh", TILEGX_OPC_V2PACKH, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5820,7 +5858,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2packl", TILEGX_OPC_V2PACKL, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5839,7 +5877,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2packuc", TILEGX_OPC_V2PACKUC, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5858,7 +5896,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2sadas", TILEGX_OPC_V2SADAS, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5877,7 +5915,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2sadau", TILEGX_OPC_V2SADAU, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5896,7 +5934,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2sads", TILEGX_OPC_V2SADS, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5915,7 +5953,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2sadu", TILEGX_OPC_V2SADU, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5934,7 +5972,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2shl", TILEGX_OPC_V2SHL, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5953,7 +5991,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2shli", TILEGX_OPC_V2SHLI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 29 }, { 8, 9, 30 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 29 }, { 6, 7, 30 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5972,7 +6010,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2shlsc", TILEGX_OPC_V2SHLSC, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5991,7 +6029,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2shrs", TILEGX_OPC_V2SHRS, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -6010,7 +6048,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2shrsi", TILEGX_OPC_V2SHRSI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 29 }, { 8, 9, 30 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 29 }, { 6, 7, 30 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -6029,7 +6067,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2shru", TILEGX_OPC_V2SHRU, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -6048,7 +6086,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2shrui", TILEGX_OPC_V2SHRUI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 29 }, { 8, 9, 30 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 29 }, { 6, 7, 30 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -6067,7 +6105,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2sub", TILEGX_OPC_V2SUB, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -6086,7 +6124,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2subsc", TILEGX_OPC_V2SUBSC, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -6105,7 +6143,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v4add", TILEGX_OPC_V4ADD, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -6124,7 +6162,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v4addsc", TILEGX_OPC_V4ADDSC, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -6143,7 +6181,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v4int_h", TILEGX_OPC_V4INT_H, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -6162,7 +6200,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v4int_l", TILEGX_OPC_V4INT_L, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -6181,7 +6219,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v4packsc", TILEGX_OPC_V4PACKSC, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -6200,7 +6238,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v4shl", TILEGX_OPC_V4SHL, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -6219,7 +6257,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v4shlsc", TILEGX_OPC_V4SHLSC, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -6238,7 +6276,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v4shrs", TILEGX_OPC_V4SHRS, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -6257,7 +6295,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v4shru", TILEGX_OPC_V4SHRU, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -6276,7 +6314,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v4sub", TILEGX_OPC_V4SUB, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -6295,7 +6333,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v4subsc", TILEGX_OPC_V4SUBSC, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -6314,7 +6352,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "wh64", TILEGX_OPC_WH64, 0x2, 1, TREG_ZERO, 1,
-    { { 0, }, { 9 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -6333,7 +6371,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "xor", TILEGX_OPC_XOR, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -6352,7 +6390,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "xori", TILEGX_OPC_XORI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -6672,7 +6710,7 @@ static const unsigned short decode_X0_fsm[936] =
   TILEGX_OPC_INFOL,
 };
 
-static const unsigned short decode_X1_fsm[1206] =
+static const unsigned short decode_X1_fsm[1266] =
 {
   BITFIELD(53, 9) /* index 0 */,
   CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513),
@@ -6718,8 +6756,8 @@ static const unsigned short decode_X1_fsm[1206] =
   TILEGX_OPC_BLEZT, TILEGX_OPC_BLEZ, TILEGX_OPC_BLEZ, TILEGX_OPC_BLTZT,
   TILEGX_OPC_BLTZT, TILEGX_OPC_BLTZ, TILEGX_OPC_BLTZ, TILEGX_OPC_BNEZT,
   TILEGX_OPC_BNEZT, TILEGX_OPC_BNEZ, TILEGX_OPC_BNEZ, CHILD(528), CHILD(578),
-  CHILD(598), CHILD(663), CHILD(683), CHILD(688), CHILD(693), CHILD(698),
-  CHILD(703), CHILD(708), CHILD(713), CHILD(718), TILEGX_OPC_NONE,
+  CHILD(598), CHILD(703), CHILD(723), CHILD(728), CHILD(753), CHILD(758),
+  CHILD(763), CHILD(768), CHILD(773), CHILD(778), TILEGX_OPC_NONE,
   TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
   TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
   TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
@@ -6747,8 +6785,8 @@ static const unsigned short decode_X1_fsm[1206] =
   TILEGX_OPC_J, TILEGX_OPC_J, TILEGX_OPC_J, TILEGX_OPC_J, TILEGX_OPC_J,
   TILEGX_OPC_J, TILEGX_OPC_J, TILEGX_OPC_J, TILEGX_OPC_J, TILEGX_OPC_J,
   TILEGX_OPC_J, TILEGX_OPC_J, TILEGX_OPC_J, TILEGX_OPC_J, TILEGX_OPC_J,
-  CHILD(723), CHILD(740), CHILD(772), CHILD(789), CHILD(1108), CHILD(1125),
-  CHILD(1142), TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
+  CHILD(783), CHILD(800), CHILD(832), CHILD(849), CHILD(1168), CHILD(1185),
+  CHILD(1202), TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
   TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
   TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
   TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
@@ -6762,7 +6800,7 @@ static const unsigned short decode_X1_fsm[1206] =
   TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
   TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
   TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
-  TILEGX_OPC_NONE, TILEGX_OPC_NONE, CHILD(1159), TILEGX_OPC_NONE,
+  TILEGX_OPC_NONE, TILEGX_OPC_NONE, CHILD(1219), TILEGX_OPC_NONE,
   TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
   TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
   TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
@@ -6778,20 +6816,20 @@ static const unsigned short decode_X1_fsm[1206] =
   TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
   TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
   TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
-  TILEGX_OPC_NONE, TILEGX_OPC_NONE, CHILD(1176), CHILD(1176), CHILD(1176),
-  CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176),
-  CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176),
-  CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176),
-  CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176),
-  CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176),
-  CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176),
-  CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176),
-  CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176),
-  CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176),
-  CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176),
-  CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176),
-  CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176),
-  CHILD(1176),
+  TILEGX_OPC_NONE, TILEGX_OPC_NONE, CHILD(1236), CHILD(1236), CHILD(1236),
+  CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236),
+  CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236),
+  CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236),
+  CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236),
+  CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236),
+  CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236),
+  CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236),
+  CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236),
+  CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236),
+  CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236),
+  CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236),
+  CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236),
+  CHILD(1236),
   BITFIELD(37, 2) /* index 513 */,
   TILEGX_OPC_ADDLI, TILEGX_OPC_ADDLI, TILEGX_OPC_ADDLI, CHILD(518),
   BITFIELD(39, 2) /* index 518 */,
@@ -6851,68 +6889,96 @@ static const unsigned short decode_X1_fsm[1206] =
   TILEGX_OPC_LD2U_ADD, TILEGX_OPC_LD2U_ADD, TILEGX_OPC_LD2U_ADD,
   TILEGX_OPC_PREFETCH_ADD_L2,
   BITFIELD(31, 2) /* index 648 */,
-  TILEGX_OPC_LD4S_ADD, TILEGX_OPC_LD4S_ADD, TILEGX_OPC_LD4S_ADD, CHILD(653),
-  BITFIELD(33, 2) /* index 653 */,
-  TILEGX_OPC_LD4S_ADD, TILEGX_OPC_LD4S_ADD, TILEGX_OPC_LD4S_ADD, CHILD(658),
-  BITFIELD(35, 2) /* index 658 */,
-  TILEGX_OPC_LD4S_ADD, TILEGX_OPC_LD4S_ADD, TILEGX_OPC_LD4S_ADD,
-  TILEGX_OPC_PREFETCH_ADD_L3_FAULT,
-  BITFIELD(51, 2) /* index 663 */,
-  CHILD(668), TILEGX_OPC_LDNT1S_ADD, TILEGX_OPC_LDNT1U_ADD,
-  TILEGX_OPC_LDNT2S_ADD,
-  BITFIELD(31, 2) /* index 668 */,
-  TILEGX_OPC_LD4U_ADD, TILEGX_OPC_LD4U_ADD, TILEGX_OPC_LD4U_ADD, CHILD(673),
+  CHILD(653), CHILD(653), CHILD(653), CHILD(673),
+  BITFIELD(43, 2) /* index 653 */,
+  CHILD(658), TILEGX_OPC_LD4S_ADD, TILEGX_OPC_LD4S_ADD, TILEGX_OPC_LD4S_ADD,
+  BITFIELD(45, 2) /* index 658 */,
+  CHILD(663), TILEGX_OPC_LD4S_ADD, TILEGX_OPC_LD4S_ADD, TILEGX_OPC_LD4S_ADD,
+  BITFIELD(47, 2) /* index 663 */,
+  CHILD(668), TILEGX_OPC_LD4S_ADD, TILEGX_OPC_LD4S_ADD, TILEGX_OPC_LD4S_ADD,
+  BITFIELD(49, 2) /* index 668 */,
+  TILEGX_OPC_LD4S_TLS, TILEGX_OPC_LD4S_ADD, TILEGX_OPC_LD4S_ADD,
+  TILEGX_OPC_LD4S_ADD,
   BITFIELD(33, 2) /* index 673 */,
-  TILEGX_OPC_LD4U_ADD, TILEGX_OPC_LD4U_ADD, TILEGX_OPC_LD4U_ADD, CHILD(678),
+  CHILD(653), CHILD(653), CHILD(653), CHILD(678),
   BITFIELD(35, 2) /* index 678 */,
+  CHILD(653), CHILD(653), CHILD(653), CHILD(683),
+  BITFIELD(43, 2) /* index 683 */,
+  CHILD(688), TILEGX_OPC_PREFETCH_ADD_L3_FAULT,
+  TILEGX_OPC_PREFETCH_ADD_L3_FAULT, TILEGX_OPC_PREFETCH_ADD_L3_FAULT,
+  BITFIELD(45, 2) /* index 688 */,
+  CHILD(693), TILEGX_OPC_PREFETCH_ADD_L3_FAULT,
+  TILEGX_OPC_PREFETCH_ADD_L3_FAULT, TILEGX_OPC_PREFETCH_ADD_L3_FAULT,
+  BITFIELD(47, 2) /* index 693 */,
+  CHILD(698), TILEGX_OPC_PREFETCH_ADD_L3_FAULT,
+  TILEGX_OPC_PREFETCH_ADD_L3_FAULT, TILEGX_OPC_PREFETCH_ADD_L3_FAULT,
+  BITFIELD(49, 2) /* index 698 */,
+  TILEGX_OPC_LD4S_TLS, TILEGX_OPC_PREFETCH_ADD_L3_FAULT,
+  TILEGX_OPC_PREFETCH_ADD_L3_FAULT, TILEGX_OPC_PREFETCH_ADD_L3_FAULT,
+  BITFIELD(51, 2) /* index 703 */,
+  CHILD(708), TILEGX_OPC_LDNT1S_ADD, TILEGX_OPC_LDNT1U_ADD,
+  TILEGX_OPC_LDNT2S_ADD,
+  BITFIELD(31, 2) /* index 708 */,
+  TILEGX_OPC_LD4U_ADD, TILEGX_OPC_LD4U_ADD, TILEGX_OPC_LD4U_ADD, CHILD(713),
+  BITFIELD(33, 2) /* index 713 */,
+  TILEGX_OPC_LD4U_ADD, TILEGX_OPC_LD4U_ADD, TILEGX_OPC_LD4U_ADD, CHILD(718),
+  BITFIELD(35, 2) /* index 718 */,
   TILEGX_OPC_LD4U_ADD, TILEGX_OPC_LD4U_ADD, TILEGX_OPC_LD4U_ADD,
   TILEGX_OPC_PREFETCH_ADD_L3,
-  BITFIELD(51, 2) /* index 683 */,
+  BITFIELD(51, 2) /* index 723 */,
   TILEGX_OPC_LDNT2U_ADD, TILEGX_OPC_LDNT4S_ADD, TILEGX_OPC_LDNT4U_ADD,
   TILEGX_OPC_LDNT_ADD,
-  BITFIELD(51, 2) /* index 688 */,
-  TILEGX_OPC_LD_ADD, TILEGX_OPC_LDNA_ADD, TILEGX_OPC_MFSPR, TILEGX_OPC_MTSPR,
-  BITFIELD(51, 2) /* index 693 */,
+  BITFIELD(51, 2) /* index 728 */,
+  CHILD(733), TILEGX_OPC_LDNA_ADD, TILEGX_OPC_MFSPR, TILEGX_OPC_MTSPR,
+  BITFIELD(43, 2) /* index 733 */,
+  CHILD(738), TILEGX_OPC_LD_ADD, TILEGX_OPC_LD_ADD, TILEGX_OPC_LD_ADD,
+  BITFIELD(45, 2) /* index 738 */,
+  CHILD(743), TILEGX_OPC_LD_ADD, TILEGX_OPC_LD_ADD, TILEGX_OPC_LD_ADD,
+  BITFIELD(47, 2) /* index 743 */,
+  CHILD(748), TILEGX_OPC_LD_ADD, TILEGX_OPC_LD_ADD, TILEGX_OPC_LD_ADD,
+  BITFIELD(49, 2) /* index 748 */,
+  TILEGX_OPC_LD_TLS, TILEGX_OPC_LD_ADD, TILEGX_OPC_LD_ADD, TILEGX_OPC_LD_ADD,
+  BITFIELD(51, 2) /* index 753 */,
   TILEGX_OPC_ORI, TILEGX_OPC_ST1_ADD, TILEGX_OPC_ST2_ADD, TILEGX_OPC_ST4_ADD,
-  BITFIELD(51, 2) /* index 698 */,
+  BITFIELD(51, 2) /* index 758 */,
   TILEGX_OPC_STNT1_ADD, TILEGX_OPC_STNT2_ADD, TILEGX_OPC_STNT4_ADD,
   TILEGX_OPC_STNT_ADD,
-  BITFIELD(51, 2) /* index 703 */,
+  BITFIELD(51, 2) /* index 763 */,
   TILEGX_OPC_ST_ADD, TILEGX_OPC_V1ADDI, TILEGX_OPC_V1CMPEQI,
   TILEGX_OPC_V1CMPLTSI,
-  BITFIELD(51, 2) /* index 708 */,
+  BITFIELD(51, 2) /* index 768 */,
   TILEGX_OPC_V1CMPLTUI, TILEGX_OPC_V1MAXUI, TILEGX_OPC_V1MINUI,
   TILEGX_OPC_V2ADDI,
-  BITFIELD(51, 2) /* index 713 */,
+  BITFIELD(51, 2) /* index 773 */,
   TILEGX_OPC_V2CMPEQI, TILEGX_OPC_V2CMPLTSI, TILEGX_OPC_V2CMPLTUI,
   TILEGX_OPC_V2MAXSI,
-  BITFIELD(51, 2) /* index 718 */,
+  BITFIELD(51, 2) /* index 778 */,
   TILEGX_OPC_V2MINSI, TILEGX_OPC_XORI, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
-  BITFIELD(49, 4) /* index 723 */,
+  BITFIELD(49, 4) /* index 783 */,
   TILEGX_OPC_NONE, TILEGX_OPC_ADDXSC, TILEGX_OPC_ADDX, TILEGX_OPC_ADD,
   TILEGX_OPC_AND, TILEGX_OPC_CMPEQ, TILEGX_OPC_CMPEXCH4, TILEGX_OPC_CMPEXCH,
   TILEGX_OPC_CMPLES, TILEGX_OPC_CMPLEU, TILEGX_OPC_CMPLTS, TILEGX_OPC_CMPLTU,
   TILEGX_OPC_CMPNE, TILEGX_OPC_DBLALIGN2, TILEGX_OPC_DBLALIGN4,
   TILEGX_OPC_DBLALIGN6,
-  BITFIELD(49, 4) /* index 740 */,
+  BITFIELD(49, 4) /* index 800 */,
   TILEGX_OPC_EXCH4, TILEGX_OPC_EXCH, TILEGX_OPC_FETCHADD4,
   TILEGX_OPC_FETCHADDGEZ4, TILEGX_OPC_FETCHADDGEZ, TILEGX_OPC_FETCHADD,
   TILEGX_OPC_FETCHAND4, TILEGX_OPC_FETCHAND, TILEGX_OPC_FETCHOR4,
   TILEGX_OPC_FETCHOR, TILEGX_OPC_MNZ, TILEGX_OPC_MZ, TILEGX_OPC_NOR,
-  CHILD(757), TILEGX_OPC_ROTL, TILEGX_OPC_SHL1ADDX,
-  BITFIELD(43, 2) /* index 757 */,
-  TILEGX_OPC_OR, TILEGX_OPC_OR, TILEGX_OPC_OR, CHILD(762),
-  BITFIELD(45, 2) /* index 762 */,
-  TILEGX_OPC_OR, TILEGX_OPC_OR, TILEGX_OPC_OR, CHILD(767),
-  BITFIELD(47, 2) /* index 767 */,
+  CHILD(817), TILEGX_OPC_ROTL, TILEGX_OPC_SHL1ADDX,
+  BITFIELD(43, 2) /* index 817 */,
+  TILEGX_OPC_OR, TILEGX_OPC_OR, TILEGX_OPC_OR, CHILD(822),
+  BITFIELD(45, 2) /* index 822 */,
+  TILEGX_OPC_OR, TILEGX_OPC_OR, TILEGX_OPC_OR, CHILD(827),
+  BITFIELD(47, 2) /* index 827 */,
   TILEGX_OPC_OR, TILEGX_OPC_OR, TILEGX_OPC_OR, TILEGX_OPC_MOVE,
-  BITFIELD(49, 4) /* index 772 */,
+  BITFIELD(49, 4) /* index 832 */,
   TILEGX_OPC_SHL1ADD, TILEGX_OPC_SHL2ADDX, TILEGX_OPC_SHL2ADD,
   TILEGX_OPC_SHL3ADDX, TILEGX_OPC_SHL3ADD, TILEGX_OPC_SHLX, TILEGX_OPC_SHL,
   TILEGX_OPC_SHRS, TILEGX_OPC_SHRUX, TILEGX_OPC_SHRU, TILEGX_OPC_ST1,
   TILEGX_OPC_ST2, TILEGX_OPC_ST4, TILEGX_OPC_STNT1, TILEGX_OPC_STNT2,
   TILEGX_OPC_STNT4,
-  BITFIELD(46, 7) /* index 789 */,
+  BITFIELD(46, 7) /* index 849 */,
   TILEGX_OPC_STNT, TILEGX_OPC_STNT, TILEGX_OPC_STNT, TILEGX_OPC_STNT,
   TILEGX_OPC_STNT, TILEGX_OPC_STNT, TILEGX_OPC_STNT, TILEGX_OPC_STNT,
   TILEGX_OPC_ST, TILEGX_OPC_ST, TILEGX_OPC_ST, TILEGX_OPC_ST, TILEGX_OPC_ST,
@@ -6922,8 +6988,8 @@ static const unsigned short decode_X1_fsm[1206] =
   TILEGX_OPC_SUBX, TILEGX_OPC_SUBX, TILEGX_OPC_SUBX, TILEGX_OPC_SUBX,
   TILEGX_OPC_SUBX, TILEGX_OPC_SUBX, TILEGX_OPC_SUBX, TILEGX_OPC_SUB,
   TILEGX_OPC_SUB, TILEGX_OPC_SUB, TILEGX_OPC_SUB, TILEGX_OPC_SUB,
-  TILEGX_OPC_SUB, TILEGX_OPC_SUB, TILEGX_OPC_SUB, CHILD(918), CHILD(927),
-  CHILD(1006), CHILD(1090), CHILD(1099), TILEGX_OPC_NONE, TILEGX_OPC_NONE,
+  TILEGX_OPC_SUB, TILEGX_OPC_SUB, TILEGX_OPC_SUB, CHILD(978), CHILD(987),
+  CHILD(1066), CHILD(1150), CHILD(1159), TILEGX_OPC_NONE, TILEGX_OPC_NONE,
   TILEGX_OPC_NONE, TILEGX_OPC_V1ADDUC, TILEGX_OPC_V1ADDUC, TILEGX_OPC_V1ADDUC,
   TILEGX_OPC_V1ADDUC, TILEGX_OPC_V1ADDUC, TILEGX_OPC_V1ADDUC,
   TILEGX_OPC_V1ADDUC, TILEGX_OPC_V1ADDUC, TILEGX_OPC_V1ADD, TILEGX_OPC_V1ADD,
@@ -6950,122 +7016,122 @@ static const unsigned short decode_X1_fsm[1206] =
   TILEGX_OPC_V1INT_L, TILEGX_OPC_V1INT_L, TILEGX_OPC_V1INT_L,
   TILEGX_OPC_V1INT_L, TILEGX_OPC_V1INT_L, TILEGX_OPC_V1INT_L,
   TILEGX_OPC_V1INT_L, TILEGX_OPC_V1INT_L,
-  BITFIELD(43, 3) /* index 918 */,
+  BITFIELD(43, 3) /* index 978 */,
   TILEGX_OPC_NONE, TILEGX_OPC_DRAIN, TILEGX_OPC_DTLBPR, TILEGX_OPC_FINV,
   TILEGX_OPC_FLUSHWB, TILEGX_OPC_FLUSH, TILEGX_OPC_FNOP, TILEGX_OPC_ICOH,
-  BITFIELD(43, 3) /* index 927 */,
-  CHILD(936), TILEGX_OPC_INV, TILEGX_OPC_IRET, TILEGX_OPC_JALRP,
-  TILEGX_OPC_JALR, TILEGX_OPC_JRP, TILEGX_OPC_JR, CHILD(991),
-  BITFIELD(31, 2) /* index 936 */,
-  CHILD(941), CHILD(966), TILEGX_OPC_ILL, TILEGX_OPC_ILL,
-  BITFIELD(33, 2) /* index 941 */,
-  TILEGX_OPC_ILL, TILEGX_OPC_ILL, TILEGX_OPC_ILL, CHILD(946),
-  BITFIELD(35, 2) /* index 946 */,
-  TILEGX_OPC_ILL, CHILD(951), TILEGX_OPC_ILL, TILEGX_OPC_ILL,
-  BITFIELD(37, 2) /* index 951 */,
-  TILEGX_OPC_ILL, CHILD(956), TILEGX_OPC_ILL, TILEGX_OPC_ILL,
-  BITFIELD(39, 2) /* index 956 */,
-  TILEGX_OPC_ILL, CHILD(961), TILEGX_OPC_ILL, TILEGX_OPC_ILL,
-  BITFIELD(41, 2) /* index 961 */,
+  BITFIELD(43, 3) /* index 987 */,
+  CHILD(996), TILEGX_OPC_INV, TILEGX_OPC_IRET, TILEGX_OPC_JALRP,
+  TILEGX_OPC_JALR, TILEGX_OPC_JRP, TILEGX_OPC_JR, CHILD(1051),
+  BITFIELD(31, 2) /* index 996 */,
+  CHILD(1001), CHILD(1026), TILEGX_OPC_ILL, TILEGX_OPC_ILL,
+  BITFIELD(33, 2) /* index 1001 */,
+  TILEGX_OPC_ILL, TILEGX_OPC_ILL, TILEGX_OPC_ILL, CHILD(1006),
+  BITFIELD(35, 2) /* index 1006 */,
+  TILEGX_OPC_ILL, CHILD(1011), TILEGX_OPC_ILL, TILEGX_OPC_ILL,
+  BITFIELD(37, 2) /* index 1011 */,
+  TILEGX_OPC_ILL, CHILD(1016), TILEGX_OPC_ILL, TILEGX_OPC_ILL,
+  BITFIELD(39, 2) /* index 1016 */,
+  TILEGX_OPC_ILL, CHILD(1021), TILEGX_OPC_ILL, TILEGX_OPC_ILL,
+  BITFIELD(41, 2) /* index 1021 */,
   TILEGX_OPC_ILL, TILEGX_OPC_ILL, TILEGX_OPC_BPT, TILEGX_OPC_ILL,
-  BITFIELD(33, 2) /* index 966 */,
-  TILEGX_OPC_ILL, TILEGX_OPC_ILL, TILEGX_OPC_ILL, CHILD(971),
-  BITFIELD(35, 2) /* index 971 */,
-  TILEGX_OPC_ILL, CHILD(976), TILEGX_OPC_ILL, TILEGX_OPC_ILL,
-  BITFIELD(37, 2) /* index 976 */,
-  TILEGX_OPC_ILL, CHILD(981), TILEGX_OPC_ILL, TILEGX_OPC_ILL,
-  BITFIELD(39, 2) /* index 981 */,
-  TILEGX_OPC_ILL, CHILD(986), TILEGX_OPC_ILL, TILEGX_OPC_ILL,
-  BITFIELD(41, 2) /* index 986 */,
+  BITFIELD(33, 2) /* index 1026 */,
+  TILEGX_OPC_ILL, TILEGX_OPC_ILL, TILEGX_OPC_ILL, CHILD(1031),
+  BITFIELD(35, 2) /* index 1031 */,
+  TILEGX_OPC_ILL, CHILD(1036), TILEGX_OPC_ILL, TILEGX_OPC_ILL,
+  BITFIELD(37, 2) /* index 1036 */,
+  TILEGX_OPC_ILL, CHILD(1041), TILEGX_OPC_ILL, TILEGX_OPC_ILL,
+  BITFIELD(39, 2) /* index 1041 */,
+  TILEGX_OPC_ILL, CHILD(1046), TILEGX_OPC_ILL, TILEGX_OPC_ILL,
+  BITFIELD(41, 2) /* index 1046 */,
   TILEGX_OPC_ILL, TILEGX_OPC_ILL, TILEGX_OPC_RAISE, TILEGX_OPC_ILL,
-  BITFIELD(31, 2) /* index 991 */,
-  TILEGX_OPC_LD1S, TILEGX_OPC_LD1S, TILEGX_OPC_LD1S, CHILD(996),
-  BITFIELD(33, 2) /* index 996 */,
-  TILEGX_OPC_LD1S, TILEGX_OPC_LD1S, TILEGX_OPC_LD1S, CHILD(1001),
-  BITFIELD(35, 2) /* index 1001 */,
+  BITFIELD(31, 2) /* index 1051 */,
+  TILEGX_OPC_LD1S, TILEGX_OPC_LD1S, TILEGX_OPC_LD1S, CHILD(1056),
+  BITFIELD(33, 2) /* index 1056 */,
+  TILEGX_OPC_LD1S, TILEGX_OPC_LD1S, TILEGX_OPC_LD1S, CHILD(1061),
+  BITFIELD(35, 2) /* index 1061 */,
   TILEGX_OPC_LD1S, TILEGX_OPC_LD1S, TILEGX_OPC_LD1S,
   TILEGX_OPC_PREFETCH_L1_FAULT,
-  BITFIELD(43, 3) /* index 1006 */,
-  CHILD(1015), CHILD(1030), CHILD(1045), CHILD(1060), CHILD(1075),
+  BITFIELD(43, 3) /* index 1066 */,
+  CHILD(1075), CHILD(1090), CHILD(1105), CHILD(1120), CHILD(1135),
   TILEGX_OPC_LDNA, TILEGX_OPC_LDNT1S, TILEGX_OPC_LDNT1U,
-  BITFIELD(31, 2) /* index 1015 */,
-  TILEGX_OPC_LD1U, TILEGX_OPC_LD1U, TILEGX_OPC_LD1U, CHILD(1020),
-  BITFIELD(33, 2) /* index 1020 */,
-  TILEGX_OPC_LD1U, TILEGX_OPC_LD1U, TILEGX_OPC_LD1U, CHILD(1025),
-  BITFIELD(35, 2) /* index 1025 */,
+  BITFIELD(31, 2) /* index 1075 */,
+  TILEGX_OPC_LD1U, TILEGX_OPC_LD1U, TILEGX_OPC_LD1U, CHILD(1080),
+  BITFIELD(33, 2) /* index 1080 */,
+  TILEGX_OPC_LD1U, TILEGX_OPC_LD1U, TILEGX_OPC_LD1U, CHILD(1085),
+  BITFIELD(35, 2) /* index 1085 */,
   TILEGX_OPC_LD1U, TILEGX_OPC_LD1U, TILEGX_OPC_LD1U, TILEGX_OPC_PREFETCH,
-  BITFIELD(31, 2) /* index 1030 */,
-  TILEGX_OPC_LD2S, TILEGX_OPC_LD2S, TILEGX_OPC_LD2S, CHILD(1035),
-  BITFIELD(33, 2) /* index 1035 */,
-  TILEGX_OPC_LD2S, TILEGX_OPC_LD2S, TILEGX_OPC_LD2S, CHILD(1040),
-  BITFIELD(35, 2) /* index 1040 */,
+  BITFIELD(31, 2) /* index 1090 */,
+  TILEGX_OPC_LD2S, TILEGX_OPC_LD2S, TILEGX_OPC_LD2S, CHILD(1095),
+  BITFIELD(33, 2) /* index 1095 */,
+  TILEGX_OPC_LD2S, TILEGX_OPC_LD2S, TILEGX_OPC_LD2S, CHILD(1100),
+  BITFIELD(35, 2) /* index 1100 */,
   TILEGX_OPC_LD2S, TILEGX_OPC_LD2S, TILEGX_OPC_LD2S,
   TILEGX_OPC_PREFETCH_L2_FAULT,
-  BITFIELD(31, 2) /* index 1045 */,
-  TILEGX_OPC_LD2U, TILEGX_OPC_LD2U, TILEGX_OPC_LD2U, CHILD(1050),
-  BITFIELD(33, 2) /* index 1050 */,
-  TILEGX_OPC_LD2U, TILEGX_OPC_LD2U, TILEGX_OPC_LD2U, CHILD(1055),
-  BITFIELD(35, 2) /* index 1055 */,
+  BITFIELD(31, 2) /* index 1105 */,
+  TILEGX_OPC_LD2U, TILEGX_OPC_LD2U, TILEGX_OPC_LD2U, CHILD(1110),
+  BITFIELD(33, 2) /* index 1110 */,
+  TILEGX_OPC_LD2U, TILEGX_OPC_LD2U, TILEGX_OPC_LD2U, CHILD(1115),
+  BITFIELD(35, 2) /* index 1115 */,
   TILEGX_OPC_LD2U, TILEGX_OPC_LD2U, TILEGX_OPC_LD2U, TILEGX_OPC_PREFETCH_L2,
-  BITFIELD(31, 2) /* index 1060 */,
-  TILEGX_OPC_LD4S, TILEGX_OPC_LD4S, TILEGX_OPC_LD4S, CHILD(1065),
-  BITFIELD(33, 2) /* index 1065 */,
-  TILEGX_OPC_LD4S, TILEGX_OPC_LD4S, TILEGX_OPC_LD4S, CHILD(1070),
-  BITFIELD(35, 2) /* index 1070 */,
+  BITFIELD(31, 2) /* index 1120 */,
+  TILEGX_OPC_LD4S, TILEGX_OPC_LD4S, TILEGX_OPC_LD4S, CHILD(1125),
+  BITFIELD(33, 2) /* index 1125 */,
+  TILEGX_OPC_LD4S, TILEGX_OPC_LD4S, TILEGX_OPC_LD4S, CHILD(1130),
+  BITFIELD(35, 2) /* index 1130 */,
   TILEGX_OPC_LD4S, TILEGX_OPC_LD4S, TILEGX_OPC_LD4S,
   TILEGX_OPC_PREFETCH_L3_FAULT,
-  BITFIELD(31, 2) /* index 1075 */,
-  TILEGX_OPC_LD4U, TILEGX_OPC_LD4U, TILEGX_OPC_LD4U, CHILD(1080),
-  BITFIELD(33, 2) /* index 1080 */,
-  TILEGX_OPC_LD4U, TILEGX_OPC_LD4U, TILEGX_OPC_LD4U, CHILD(1085),
-  BITFIELD(35, 2) /* index 1085 */,
+  BITFIELD(31, 2) /* index 1135 */,
+  TILEGX_OPC_LD4U, TILEGX_OPC_LD4U, TILEGX_OPC_LD4U, CHILD(1140),
+  BITFIELD(33, 2) /* index 1140 */,
+  TILEGX_OPC_LD4U, TILEGX_OPC_LD4U, TILEGX_OPC_LD4U, CHILD(1145),
+  BITFIELD(35, 2) /* index 1145 */,
   TILEGX_OPC_LD4U, TILEGX_OPC_LD4U, TILEGX_OPC_LD4U, TILEGX_OPC_PREFETCH_L3,
-  BITFIELD(43, 3) /* index 1090 */,
+  BITFIELD(43, 3) /* index 1150 */,
   TILEGX_OPC_LDNT2S, TILEGX_OPC_LDNT2U, TILEGX_OPC_LDNT4S, TILEGX_OPC_LDNT4U,
   TILEGX_OPC_LDNT, TILEGX_OPC_LD, TILEGX_OPC_LNK, TILEGX_OPC_MF,
-  BITFIELD(43, 3) /* index 1099 */,
+  BITFIELD(43, 3) /* index 1159 */,
   TILEGX_OPC_NAP, TILEGX_OPC_NOP, TILEGX_OPC_SWINT0, TILEGX_OPC_SWINT1,
   TILEGX_OPC_SWINT2, TILEGX_OPC_SWINT3, TILEGX_OPC_WH64, TILEGX_OPC_NONE,
-  BITFIELD(49, 4) /* index 1108 */,
+  BITFIELD(49, 4) /* index 1168 */,
   TILEGX_OPC_V1MAXU, TILEGX_OPC_V1MINU, TILEGX_OPC_V1MNZ, TILEGX_OPC_V1MZ,
   TILEGX_OPC_V1SHL, TILEGX_OPC_V1SHRS, TILEGX_OPC_V1SHRU, TILEGX_OPC_V1SUBUC,
   TILEGX_OPC_V1SUB, TILEGX_OPC_V2ADDSC, TILEGX_OPC_V2ADD, TILEGX_OPC_V2CMPEQ,
   TILEGX_OPC_V2CMPLES, TILEGX_OPC_V2CMPLEU, TILEGX_OPC_V2CMPLTS,
   TILEGX_OPC_V2CMPLTU,
-  BITFIELD(49, 4) /* index 1125 */,
+  BITFIELD(49, 4) /* index 1185 */,
   TILEGX_OPC_V2CMPNE, TILEGX_OPC_V2INT_H, TILEGX_OPC_V2INT_L,
   TILEGX_OPC_V2MAXS, TILEGX_OPC_V2MINS, TILEGX_OPC_V2MNZ, TILEGX_OPC_V2MZ,
   TILEGX_OPC_V2PACKH, TILEGX_OPC_V2PACKL, TILEGX_OPC_V2PACKUC,
   TILEGX_OPC_V2SHLSC, TILEGX_OPC_V2SHL, TILEGX_OPC_V2SHRS, TILEGX_OPC_V2SHRU,
   TILEGX_OPC_V2SUBSC, TILEGX_OPC_V2SUB,
-  BITFIELD(49, 4) /* index 1142 */,
+  BITFIELD(49, 4) /* index 1202 */,
   TILEGX_OPC_V4ADDSC, TILEGX_OPC_V4ADD, TILEGX_OPC_V4INT_H,
   TILEGX_OPC_V4INT_L, TILEGX_OPC_V4PACKSC, TILEGX_OPC_V4SHLSC,
   TILEGX_OPC_V4SHL, TILEGX_OPC_V4SHRS, TILEGX_OPC_V4SHRU, TILEGX_OPC_V4SUBSC,
   TILEGX_OPC_V4SUB, TILEGX_OPC_XOR, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
   TILEGX_OPC_NONE, TILEGX_OPC_NONE,
-  BITFIELD(49, 4) /* index 1159 */,
+  BITFIELD(49, 4) /* index 1219 */,
   TILEGX_OPC_NONE, TILEGX_OPC_ROTLI, TILEGX_OPC_SHLI, TILEGX_OPC_SHLXI,
   TILEGX_OPC_SHRSI, TILEGX_OPC_SHRUI, TILEGX_OPC_SHRUXI, TILEGX_OPC_V1SHLI,
   TILEGX_OPC_V1SHRSI, TILEGX_OPC_V1SHRUI, TILEGX_OPC_V2SHLI,
   TILEGX_OPC_V2SHRSI, TILEGX_OPC_V2SHRUI, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
   TILEGX_OPC_NONE,
-  BITFIELD(31, 2) /* index 1176 */,
+  BITFIELD(31, 2) /* index 1236 */,
   TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI,
-  CHILD(1181),
-  BITFIELD(33, 2) /* index 1181 */,
+  CHILD(1241),
+  BITFIELD(33, 2) /* index 1241 */,
   TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI,
-  CHILD(1186),
-  BITFIELD(35, 2) /* index 1186 */,
+  CHILD(1246),
+  BITFIELD(35, 2) /* index 1246 */,
   TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI,
-  CHILD(1191),
-  BITFIELD(37, 2) /* index 1191 */,
+  CHILD(1251),
+  BITFIELD(37, 2) /* index 1251 */,
   TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI,
-  CHILD(1196),
-  BITFIELD(39, 2) /* index 1196 */,
+  CHILD(1256),
+  BITFIELD(39, 2) /* index 1256 */,
   TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI,
-  CHILD(1201),
-  BITFIELD(41, 2) /* index 1201 */,
+  CHILD(1261),
+  BITFIELD(41, 2) /* index 1261 */,
   TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI,
   TILEGX_OPC_INFOL,
 };
@@ -7328,22 +7394,22 @@ const struct tilegx_operand tilegx_operands[35] =
   {
     TILEGX_OP_TYPE_REGISTER, BFD_RELOC(NONE),
     6, 0, 0, 1, 0, 0,
-    create_Dest_X0, get_Dest_X0
+    create_Dest_X1, get_Dest_X1
   },
   {
     TILEGX_OP_TYPE_REGISTER, BFD_RELOC(NONE),
     6, 0, 1, 0, 0, 0,
-    create_SrcA_X0, get_SrcA_X0
+    create_SrcA_X1, get_SrcA_X1
   },
   {
     TILEGX_OP_TYPE_REGISTER, BFD_RELOC(NONE),
     6, 0, 0, 1, 0, 0,
-    create_Dest_X1, get_Dest_X1
+    create_Dest_X0, get_Dest_X0
   },
   {
     TILEGX_OP_TYPE_REGISTER, BFD_RELOC(NONE),
     6, 0, 1, 0, 0, 0,
-    create_SrcA_X1, get_SrcA_X1
+    create_SrcA_X0, get_SrcA_X0
   },
   {
     TILEGX_OP_TYPE_REGISTER, BFD_RELOC(NONE),
index c3f6be4..9158d0e 100644 (file)
@@ -41,7 +41,7 @@
 #include <stddef.h>
 #endif
 
-const struct tilepro_opcode tilepro_opcodes[395] =
+const struct tilepro_opcode tilepro_opcodes[397] =
 {
  { "bpt", TILEPRO_OPC_BPT, 0x2, 0, TREG_ZERO, 0,
     { { 0, }, {  }, { 0, }, { 0, }, { 0, } },
@@ -138,8 +138,46 @@ const struct tilepro_opcode tilepro_opcodes[395] =
     }
 #endif
   },
+  { "lw_tls", TILEPRO_OPC_LW_TLS, 0x2, 3, TREG_ZERO, 1,
+    { { 0, }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
+#ifndef DISASM_ONLY
+    {
+      0ULL,
+      0xfffff80000000000ULL,
+      0ULL,
+      0ULL,
+      0ULL
+    },
+    {
+      -1ULL,
+      0x30d0000000000000ULL,
+      -1ULL,
+      -1ULL,
+      -1ULL
+    }
+#endif
+  },
+  { "lw_tls.sn", TILEPRO_OPC_LW_TLS_SN, 0x2, 3, TREG_SN, 1,
+    { { 0, }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
+#ifndef DISASM_ONLY
+    {
+      0ULL,
+      0xfffff80000000000ULL,
+      0ULL,
+      0ULL,
+      0ULL
+    },
+    {
+      -1ULL,
+      0x34d0000000000000ULL,
+      -1ULL,
+      -1ULL,
+      -1ULL
+    }
+#endif
+  },
   { "move", TILEPRO_OPC_MOVE, 0xf, 2, TREG_ZERO, 1,
-    { { 7, 8 }, { 9, 10 }, { 11, 12 }, { 13, 14 }, { 0, } },
+    { { 9, 10 }, { 7, 8 }, { 11, 12 }, { 13, 14 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -158,7 +196,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "move.sn", TILEPRO_OPC_MOVE_SN, 0x3, 2, TREG_SN, 1,
-    { { 7, 8 }, { 9, 10 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10 }, { 7, 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -177,7 +215,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "movei", TILEPRO_OPC_MOVEI, 0xf, 2, TREG_ZERO, 1,
-    { { 7, 0 }, { 9, 1 }, { 11, 2 }, { 13, 3 }, { 0, } },
+    { { 9, 0 }, { 7, 1 }, { 11, 2 }, { 13, 3 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00fc0ULL,
@@ -196,7 +234,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "movei.sn", TILEPRO_OPC_MOVEI_SN, 0x3, 2, TREG_SN, 1,
-    { { 7, 0 }, { 9, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 0 }, { 7, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00fc0ULL,
@@ -215,7 +253,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "moveli", TILEPRO_OPC_MOVELI, 0x3, 2, TREG_ZERO, 1,
-    { { 7, 4 }, { 9, 5 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 4 }, { 7, 5 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x8000000070000fc0ULL,
@@ -234,7 +272,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "moveli.sn", TILEPRO_OPC_MOVELI_SN, 0x3, 2, TREG_SN, 1,
-    { { 7, 4 }, { 9, 5 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 4 }, { 7, 5 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x8000000070000fc0ULL,
@@ -253,7 +291,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "movelis", TILEPRO_OPC_MOVELIS, 0x3, 2, TREG_SN, 1,
-    { { 7, 4 }, { 9, 5 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 4 }, { 7, 5 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x8000000070000fc0ULL,
@@ -272,7 +310,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "prefetch", TILEPRO_OPC_PREFETCH, 0x12, 1, TREG_ZERO, 1,
-    { { 0, }, { 10 }, { 0, }, { 0, }, { 15 } },
+    { { 0, }, { 8 }, { 0, }, { 0, }, { 15 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -310,7 +348,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "add", TILEPRO_OPC_ADD, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -329,7 +367,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "add.sn", TILEPRO_OPC_ADD_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -348,7 +386,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "addb", TILEPRO_OPC_ADDB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -367,7 +405,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "addb.sn", TILEPRO_OPC_ADDB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -386,7 +424,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "addbs_u", TILEPRO_OPC_ADDBS_U, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -405,7 +443,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "addbs_u.sn", TILEPRO_OPC_ADDBS_U_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -424,7 +462,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "addh", TILEPRO_OPC_ADDH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -443,7 +481,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "addh.sn", TILEPRO_OPC_ADDH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -462,7 +500,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "addhs", TILEPRO_OPC_ADDHS, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -481,7 +519,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "addhs.sn", TILEPRO_OPC_ADDHS_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -500,7 +538,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "addi", TILEPRO_OPC_ADDI, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 11, 12, 2 }, { 13, 14, 3 }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 11, 12, 2 }, { 13, 14, 3 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -519,7 +557,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "addi.sn", TILEPRO_OPC_ADDI_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -538,7 +576,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "addib", TILEPRO_OPC_ADDIB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -557,7 +595,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "addib.sn", TILEPRO_OPC_ADDIB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -576,7 +614,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "addih", TILEPRO_OPC_ADDIH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -595,7 +633,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "addih.sn", TILEPRO_OPC_ADDIH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -614,7 +652,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "addli", TILEPRO_OPC_ADDLI, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 4 }, { 9, 10, 5 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 4 }, { 7, 8, 5 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x8000000070000000ULL,
@@ -633,7 +671,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "addli.sn", TILEPRO_OPC_ADDLI_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 4 }, { 9, 10, 5 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 4 }, { 7, 8, 5 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x8000000070000000ULL,
@@ -652,7 +690,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "addlis", TILEPRO_OPC_ADDLIS, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 4 }, { 9, 10, 5 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 4 }, { 7, 8, 5 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x8000000070000000ULL,
@@ -671,7 +709,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "adds", TILEPRO_OPC_ADDS, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -690,7 +728,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "adds.sn", TILEPRO_OPC_ADDS_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -709,7 +747,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "adiffb_u", TILEPRO_OPC_ADIFFB_U, 0x1, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -728,7 +766,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "adiffb_u.sn", TILEPRO_OPC_ADIFFB_U_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -747,7 +785,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "adiffh", TILEPRO_OPC_ADIFFH, 0x1, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -766,7 +804,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "adiffh.sn", TILEPRO_OPC_ADIFFH_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -785,7 +823,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "and", TILEPRO_OPC_AND, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -804,7 +842,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "and.sn", TILEPRO_OPC_AND_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -823,7 +861,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "andi", TILEPRO_OPC_ANDI, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 11, 12, 2 }, { 13, 14, 3 }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 11, 12, 2 }, { 13, 14, 3 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -842,7 +880,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "andi.sn", TILEPRO_OPC_ANDI_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -861,7 +899,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "auli", TILEPRO_OPC_AULI, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 4 }, { 9, 10, 5 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 4 }, { 7, 8, 5 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x8000000070000000ULL,
@@ -880,7 +918,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "avgb_u", TILEPRO_OPC_AVGB_U, 0x1, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -899,7 +937,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "avgb_u.sn", TILEPRO_OPC_AVGB_U_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -918,7 +956,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "avgh", TILEPRO_OPC_AVGH, 0x1, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -937,7 +975,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "avgh.sn", TILEPRO_OPC_AVGH_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -956,7 +994,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bbns", TILEPRO_OPC_BBNS, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -975,7 +1013,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bbns.sn", TILEPRO_OPC_BBNS_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -994,7 +1032,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bbnst", TILEPRO_OPC_BBNST, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1013,7 +1051,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bbnst.sn", TILEPRO_OPC_BBNST_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1032,7 +1070,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bbs", TILEPRO_OPC_BBS, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1051,7 +1089,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bbs.sn", TILEPRO_OPC_BBS_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1070,7 +1108,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bbst", TILEPRO_OPC_BBST, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1089,7 +1127,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bbst.sn", TILEPRO_OPC_BBST_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1108,7 +1146,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bgez", TILEPRO_OPC_BGEZ, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1127,7 +1165,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bgez.sn", TILEPRO_OPC_BGEZ_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1146,7 +1184,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bgezt", TILEPRO_OPC_BGEZT, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1165,7 +1203,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bgezt.sn", TILEPRO_OPC_BGEZT_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1184,7 +1222,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bgz", TILEPRO_OPC_BGZ, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1203,7 +1241,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bgz.sn", TILEPRO_OPC_BGZ_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1222,7 +1260,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bgzt", TILEPRO_OPC_BGZT, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1241,7 +1279,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bgzt.sn", TILEPRO_OPC_BGZT_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1260,7 +1298,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bitx", TILEPRO_OPC_BITX, 0x5, 2, TREG_ZERO, 1,
-    { { 7, 8 }, { 0, }, { 11, 12 }, { 0, }, { 0, } },
+    { { 9, 10 }, { 0, }, { 11, 12 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -1279,7 +1317,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bitx.sn", TILEPRO_OPC_BITX_SN, 0x1, 2, TREG_SN, 1,
-    { { 7, 8 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -1298,7 +1336,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "blez", TILEPRO_OPC_BLEZ, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1317,7 +1355,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "blez.sn", TILEPRO_OPC_BLEZ_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1336,7 +1374,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "blezt", TILEPRO_OPC_BLEZT, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1355,7 +1393,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "blezt.sn", TILEPRO_OPC_BLEZT_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1374,7 +1412,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "blz", TILEPRO_OPC_BLZ, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1393,7 +1431,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "blz.sn", TILEPRO_OPC_BLZ_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1412,7 +1450,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "blzt", TILEPRO_OPC_BLZT, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1431,7 +1469,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "blzt.sn", TILEPRO_OPC_BLZT_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1450,7 +1488,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bnz", TILEPRO_OPC_BNZ, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1469,7 +1507,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bnz.sn", TILEPRO_OPC_BNZ_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1488,7 +1526,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bnzt", TILEPRO_OPC_BNZT, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1507,7 +1545,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bnzt.sn", TILEPRO_OPC_BNZT_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1526,7 +1564,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bytex", TILEPRO_OPC_BYTEX, 0x5, 2, TREG_ZERO, 1,
-    { { 7, 8 }, { 0, }, { 11, 12 }, { 0, }, { 0, } },
+    { { 9, 10 }, { 0, }, { 11, 12 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -1545,7 +1583,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bytex.sn", TILEPRO_OPC_BYTEX_SN, 0x1, 2, TREG_SN, 1,
-    { { 7, 8 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -1564,7 +1602,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bz", TILEPRO_OPC_BZ, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1583,7 +1621,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bz.sn", TILEPRO_OPC_BZ_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1602,7 +1640,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bzt", TILEPRO_OPC_BZT, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1621,7 +1659,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bzt.sn", TILEPRO_OPC_BZT_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1640,7 +1678,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "clz", TILEPRO_OPC_CLZ, 0x5, 2, TREG_ZERO, 1,
-    { { 7, 8 }, { 0, }, { 11, 12 }, { 0, }, { 0, } },
+    { { 9, 10 }, { 0, }, { 11, 12 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -1659,7 +1697,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "clz.sn", TILEPRO_OPC_CLZ_SN, 0x1, 2, TREG_SN, 1,
-    { { 7, 8 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -1678,7 +1716,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "crc32_32", TILEPRO_OPC_CRC32_32, 0x1, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -1697,7 +1735,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "crc32_32.sn", TILEPRO_OPC_CRC32_32_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -1716,7 +1754,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "crc32_8", TILEPRO_OPC_CRC32_8, 0x1, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -1735,7 +1773,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "crc32_8.sn", TILEPRO_OPC_CRC32_8_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -1754,7 +1792,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "ctz", TILEPRO_OPC_CTZ, 0x5, 2, TREG_ZERO, 1,
-    { { 7, 8 }, { 0, }, { 11, 12 }, { 0, }, { 0, } },
+    { { 9, 10 }, { 0, }, { 11, 12 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -1773,7 +1811,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "ctz.sn", TILEPRO_OPC_CTZ_SN, 0x1, 2, TREG_SN, 1,
-    { { 7, 8 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -1811,7 +1849,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "dtlbpr", TILEPRO_OPC_DTLBPR, 0x2, 1, TREG_ZERO, 1,
-    { { 0, }, { 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1830,7 +1868,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "dword_align", TILEPRO_OPC_DWORD_ALIGN, 0x1, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -1849,7 +1887,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "dword_align.sn", TILEPRO_OPC_DWORD_ALIGN_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -1868,7 +1906,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "finv", TILEPRO_OPC_FINV, 0x2, 1, TREG_ZERO, 1,
-    { { 0, }, { 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1887,7 +1925,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "flush", TILEPRO_OPC_FLUSH, 0x2, 1, TREG_ZERO, 1,
-    { { 0, }, { 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1925,7 +1963,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "icoh", TILEPRO_OPC_ICOH, 0x2, 1, TREG_ZERO, 1,
-    { { 0, }, { 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1963,7 +2001,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "inthb", TILEPRO_OPC_INTHB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -1982,7 +2020,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "inthb.sn", TILEPRO_OPC_INTHB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -2001,7 +2039,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "inthh", TILEPRO_OPC_INTHH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -2020,7 +2058,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "inthh.sn", TILEPRO_OPC_INTHH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -2039,7 +2077,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "intlb", TILEPRO_OPC_INTLB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -2058,7 +2096,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "intlb.sn", TILEPRO_OPC_INTLB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -2077,7 +2115,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "intlh", TILEPRO_OPC_INTLH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -2096,7 +2134,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "intlh.sn", TILEPRO_OPC_INTLH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -2115,7 +2153,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "inv", TILEPRO_OPC_INV, 0x2, 1, TREG_ZERO, 1,
-    { { 0, }, { 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2191,7 +2229,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "jalr", TILEPRO_OPC_JALR, 0x2, 1, TREG_LR, 1,
-    { { 0, }, { 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2210,7 +2248,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "jalrp", TILEPRO_OPC_JALRP, 0x2, 1, TREG_LR, 1,
-    { { 0, }, { 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2267,7 +2305,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "jr", TILEPRO_OPC_JR, 0x2, 1, TREG_ZERO, 1,
-    { { 0, }, { 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2286,7 +2324,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "jrp", TILEPRO_OPC_JRP, 0x2, 1, TREG_ZERO, 1,
-    { { 0, }, { 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2305,7 +2343,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lb", TILEPRO_OPC_LB, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 10 }, { 0, }, { 0, }, { 23, 15 } },
+    { { 0, }, { 7, 8 }, { 0, }, { 0, }, { 23, 15 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2324,7 +2362,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lb.sn", TILEPRO_OPC_LB_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 9, 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2343,7 +2381,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lb_u", TILEPRO_OPC_LB_U, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 10 }, { 0, }, { 0, }, { 23, 15 } },
+    { { 0, }, { 7, 8 }, { 0, }, { 0, }, { 23, 15 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2362,7 +2400,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lb_u.sn", TILEPRO_OPC_LB_U_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 9, 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2381,7 +2419,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lbadd", TILEPRO_OPC_LBADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 9, 24, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 24, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2400,7 +2438,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lbadd.sn", TILEPRO_OPC_LBADD_SN, 0x2, 3, TREG_SN, 1,
-    { { 0, }, { 9, 24, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 24, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2419,7 +2457,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lbadd_u", TILEPRO_OPC_LBADD_U, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 9, 24, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 24, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2438,7 +2476,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lbadd_u.sn", TILEPRO_OPC_LBADD_U_SN, 0x2, 3, TREG_SN, 1,
-    { { 0, }, { 9, 24, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 24, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2457,7 +2495,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lh", TILEPRO_OPC_LH, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 10 }, { 0, }, { 0, }, { 23, 15 } },
+    { { 0, }, { 7, 8 }, { 0, }, { 0, }, { 23, 15 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2476,7 +2514,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lh.sn", TILEPRO_OPC_LH_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 9, 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2495,7 +2533,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lh_u", TILEPRO_OPC_LH_U, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 10 }, { 0, }, { 0, }, { 23, 15 } },
+    { { 0, }, { 7, 8 }, { 0, }, { 0, }, { 23, 15 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2514,7 +2552,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lh_u.sn", TILEPRO_OPC_LH_U_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 9, 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2533,7 +2571,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lhadd", TILEPRO_OPC_LHADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 9, 24, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 24, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2552,7 +2590,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lhadd.sn", TILEPRO_OPC_LHADD_SN, 0x2, 3, TREG_SN, 1,
-    { { 0, }, { 9, 24, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 24, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2571,7 +2609,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lhadd_u", TILEPRO_OPC_LHADD_U, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 9, 24, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 24, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2590,7 +2628,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lhadd_u.sn", TILEPRO_OPC_LHADD_U_SN, 0x2, 3, TREG_SN, 1,
-    { { 0, }, { 9, 24, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 24, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2609,7 +2647,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lnk", TILEPRO_OPC_LNK, 0x2, 1, TREG_ZERO, 1,
-    { { 0, }, { 9 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2628,7 +2666,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lnk.sn", TILEPRO_OPC_LNK_SN, 0x2, 1, TREG_SN, 1,
-    { { 0, }, { 9 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2647,7 +2685,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lw", TILEPRO_OPC_LW, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 10 }, { 0, }, { 0, }, { 23, 15 } },
+    { { 0, }, { 7, 8 }, { 0, }, { 0, }, { 23, 15 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2666,7 +2704,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lw.sn", TILEPRO_OPC_LW_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 9, 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2685,7 +2723,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lw_na", TILEPRO_OPC_LW_NA, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2704,7 +2742,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lw_na.sn", TILEPRO_OPC_LW_NA_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 9, 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2723,7 +2761,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lwadd", TILEPRO_OPC_LWADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 9, 24, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 24, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2742,7 +2780,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lwadd.sn", TILEPRO_OPC_LWADD_SN, 0x2, 3, TREG_SN, 1,
-    { { 0, }, { 9, 24, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 24, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2761,7 +2799,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lwadd_na", TILEPRO_OPC_LWADD_NA, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 9, 24, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 24, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2780,7 +2818,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lwadd_na.sn", TILEPRO_OPC_LWADD_NA_SN, 0x2, 3, TREG_SN, 1,
-    { { 0, }, { 9, 24, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 24, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2799,7 +2837,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "maxb_u", TILEPRO_OPC_MAXB_U, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -2818,7 +2856,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "maxb_u.sn", TILEPRO_OPC_MAXB_U_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -2837,7 +2875,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "maxh", TILEPRO_OPC_MAXH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -2856,7 +2894,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "maxh.sn", TILEPRO_OPC_MAXH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -2875,7 +2913,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "maxib_u", TILEPRO_OPC_MAXIB_U, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -2894,7 +2932,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "maxib_u.sn", TILEPRO_OPC_MAXIB_U_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -2913,7 +2951,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "maxih", TILEPRO_OPC_MAXIH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -2932,7 +2970,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "maxih.sn", TILEPRO_OPC_MAXIH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -2970,7 +3008,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mfspr", TILEPRO_OPC_MFSPR, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 25 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 25 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2989,7 +3027,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "minb_u", TILEPRO_OPC_MINB_U, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3008,7 +3046,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "minb_u.sn", TILEPRO_OPC_MINB_U_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3027,7 +3065,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "minh", TILEPRO_OPC_MINH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3046,7 +3084,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "minh.sn", TILEPRO_OPC_MINH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3065,7 +3103,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "minib_u", TILEPRO_OPC_MINIB_U, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -3084,7 +3122,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "minib_u.sn", TILEPRO_OPC_MINIB_U_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -3103,7 +3141,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "minih", TILEPRO_OPC_MINIH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -3122,7 +3160,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "minih.sn", TILEPRO_OPC_MINIH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -3141,7 +3179,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mm", TILEPRO_OPC_MM, 0x3, 5, TREG_ZERO, 1,
-    { { 7, 8, 16, 26, 27 }, { 9, 10, 17, 28, 29 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16, 26, 27 }, { 7, 8, 17, 28, 29 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x8000000070000000ULL,
@@ -3160,7 +3198,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mnz", TILEPRO_OPC_MNZ, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3179,7 +3217,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mnz.sn", TILEPRO_OPC_MNZ_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3198,7 +3236,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mnzb", TILEPRO_OPC_MNZB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3217,7 +3255,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mnzb.sn", TILEPRO_OPC_MNZB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3236,7 +3274,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mnzh", TILEPRO_OPC_MNZH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3255,7 +3293,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mnzh.sn", TILEPRO_OPC_MNZH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3274,7 +3312,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mtspr", TILEPRO_OPC_MTSPR, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 30, 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 30, 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -3293,7 +3331,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhh_ss", TILEPRO_OPC_MULHH_SS, 0x5, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 11, 12, 18 }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 11, 12, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3312,7 +3350,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhh_ss.sn", TILEPRO_OPC_MULHH_SS_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3331,7 +3369,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhh_su", TILEPRO_OPC_MULHH_SU, 0x1, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3350,7 +3388,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhh_su.sn", TILEPRO_OPC_MULHH_SU_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3369,7 +3407,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhh_uu", TILEPRO_OPC_MULHH_UU, 0x5, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 11, 12, 18 }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 11, 12, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3388,7 +3426,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhh_uu.sn", TILEPRO_OPC_MULHH_UU_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3407,7 +3445,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhha_ss", TILEPRO_OPC_MULHHA_SS, 0x5, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 31, 12, 18 }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 31, 12, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3426,7 +3464,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhha_ss.sn", TILEPRO_OPC_MULHHA_SS_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3445,7 +3483,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhha_su", TILEPRO_OPC_MULHHA_SU, 0x1, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3464,7 +3502,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhha_su.sn", TILEPRO_OPC_MULHHA_SU_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3483,7 +3521,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhha_uu", TILEPRO_OPC_MULHHA_UU, 0x5, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 31, 12, 18 }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 31, 12, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3502,7 +3540,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhha_uu.sn", TILEPRO_OPC_MULHHA_UU_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3521,7 +3559,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhhsa_uu", TILEPRO_OPC_MULHHSA_UU, 0x1, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3540,7 +3578,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhhsa_uu.sn", TILEPRO_OPC_MULHHSA_UU_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3559,7 +3597,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhl_ss", TILEPRO_OPC_MULHL_SS, 0x1, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3578,7 +3616,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhl_ss.sn", TILEPRO_OPC_MULHL_SS_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3597,7 +3635,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhl_su", TILEPRO_OPC_MULHL_SU, 0x1, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3616,7 +3654,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhl_su.sn", TILEPRO_OPC_MULHL_SU_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3635,7 +3673,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhl_us", TILEPRO_OPC_MULHL_US, 0x1, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3654,7 +3692,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhl_us.sn", TILEPRO_OPC_MULHL_US_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3673,7 +3711,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhl_uu", TILEPRO_OPC_MULHL_UU, 0x1, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3692,7 +3730,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhl_uu.sn", TILEPRO_OPC_MULHL_UU_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3711,7 +3749,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhla_ss", TILEPRO_OPC_MULHLA_SS, 0x1, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3730,7 +3768,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhla_ss.sn", TILEPRO_OPC_MULHLA_SS_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3749,7 +3787,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhla_su", TILEPRO_OPC_MULHLA_SU, 0x1, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3768,7 +3806,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhla_su.sn", TILEPRO_OPC_MULHLA_SU_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3787,7 +3825,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhla_us", TILEPRO_OPC_MULHLA_US, 0x1, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3806,7 +3844,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhla_us.sn", TILEPRO_OPC_MULHLA_US_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3825,7 +3863,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhla_uu", TILEPRO_OPC_MULHLA_UU, 0x1, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3844,7 +3882,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhla_uu.sn", TILEPRO_OPC_MULHLA_UU_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3863,7 +3901,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhlsa_uu", TILEPRO_OPC_MULHLSA_UU, 0x5, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 31, 12, 18 }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 31, 12, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3882,7 +3920,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhlsa_uu.sn", TILEPRO_OPC_MULHLSA_UU_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3901,7 +3939,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulll_ss", TILEPRO_OPC_MULLL_SS, 0x5, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 11, 12, 18 }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 11, 12, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3920,7 +3958,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulll_ss.sn", TILEPRO_OPC_MULLL_SS_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3939,7 +3977,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulll_su", TILEPRO_OPC_MULLL_SU, 0x1, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3958,7 +3996,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulll_su.sn", TILEPRO_OPC_MULLL_SU_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3977,7 +4015,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulll_uu", TILEPRO_OPC_MULLL_UU, 0x5, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 11, 12, 18 }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 11, 12, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3996,7 +4034,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulll_uu.sn", TILEPRO_OPC_MULLL_UU_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4015,7 +4053,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mullla_ss", TILEPRO_OPC_MULLLA_SS, 0x5, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 31, 12, 18 }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 31, 12, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4034,7 +4072,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mullla_ss.sn", TILEPRO_OPC_MULLLA_SS_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4053,7 +4091,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mullla_su", TILEPRO_OPC_MULLLA_SU, 0x1, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4072,7 +4110,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mullla_su.sn", TILEPRO_OPC_MULLLA_SU_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4091,7 +4129,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mullla_uu", TILEPRO_OPC_MULLLA_UU, 0x5, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 31, 12, 18 }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 31, 12, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4110,7 +4148,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mullla_uu.sn", TILEPRO_OPC_MULLLA_UU_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4129,7 +4167,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulllsa_uu", TILEPRO_OPC_MULLLSA_UU, 0x1, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4148,7 +4186,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulllsa_uu.sn", TILEPRO_OPC_MULLLSA_UU_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4167,7 +4205,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mvnz", TILEPRO_OPC_MVNZ, 0x5, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 31, 12, 18 }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 31, 12, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4186,7 +4224,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mvnz.sn", TILEPRO_OPC_MVNZ_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4205,7 +4243,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mvz", TILEPRO_OPC_MVZ, 0x5, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 31, 12, 18 }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 31, 12, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4224,7 +4262,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mvz.sn", TILEPRO_OPC_MVZ_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4243,7 +4281,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mz", TILEPRO_OPC_MZ, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4262,7 +4300,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mz.sn", TILEPRO_OPC_MZ_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4281,7 +4319,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mzb", TILEPRO_OPC_MZB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4300,7 +4338,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mzb.sn", TILEPRO_OPC_MZB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4319,7 +4357,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mzh", TILEPRO_OPC_MZH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4338,7 +4376,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mzh.sn", TILEPRO_OPC_MZH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4395,7 +4433,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "nor", TILEPRO_OPC_NOR, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4414,7 +4452,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "nor.sn", TILEPRO_OPC_NOR_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4433,7 +4471,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "or", TILEPRO_OPC_OR, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4452,7 +4490,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "or.sn", TILEPRO_OPC_OR_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4471,7 +4509,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "ori", TILEPRO_OPC_ORI, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 11, 12, 2 }, { 13, 14, 3 }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 11, 12, 2 }, { 13, 14, 3 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -4490,7 +4528,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "ori.sn", TILEPRO_OPC_ORI_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -4509,7 +4547,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "packbs_u", TILEPRO_OPC_PACKBS_U, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4528,7 +4566,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "packbs_u.sn", TILEPRO_OPC_PACKBS_U_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4547,7 +4585,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "packhb", TILEPRO_OPC_PACKHB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4566,7 +4604,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "packhb.sn", TILEPRO_OPC_PACKHB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4585,7 +4623,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "packhs", TILEPRO_OPC_PACKHS, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4604,7 +4642,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "packhs.sn", TILEPRO_OPC_PACKHS_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4623,7 +4661,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "packlb", TILEPRO_OPC_PACKLB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4642,7 +4680,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "packlb.sn", TILEPRO_OPC_PACKLB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4661,7 +4699,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "pcnt", TILEPRO_OPC_PCNT, 0x5, 2, TREG_ZERO, 1,
-    { { 7, 8 }, { 0, }, { 11, 12 }, { 0, }, { 0, } },
+    { { 9, 10 }, { 0, }, { 11, 12 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -4680,7 +4718,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "pcnt.sn", TILEPRO_OPC_PCNT_SN, 0x1, 2, TREG_SN, 1,
-    { { 7, 8 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -4699,7 +4737,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "rl", TILEPRO_OPC_RL, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4718,7 +4756,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "rl.sn", TILEPRO_OPC_RL_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4737,7 +4775,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "rli", TILEPRO_OPC_RLI, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 11, 12, 34 }, { 13, 14, 35 }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 11, 12, 34 }, { 13, 14, 35 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -4756,7 +4794,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "rli.sn", TILEPRO_OPC_RLI_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -4775,7 +4813,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "s1a", TILEPRO_OPC_S1A, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4794,7 +4832,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "s1a.sn", TILEPRO_OPC_S1A_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4813,7 +4851,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "s2a", TILEPRO_OPC_S2A, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4832,7 +4870,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "s2a.sn", TILEPRO_OPC_S2A_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4851,7 +4889,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "s3a", TILEPRO_OPC_S3A, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4870,7 +4908,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "s3a.sn", TILEPRO_OPC_S3A_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4889,7 +4927,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sadab_u", TILEPRO_OPC_SADAB_U, 0x1, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4908,7 +4946,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sadab_u.sn", TILEPRO_OPC_SADAB_U_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4927,7 +4965,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sadah", TILEPRO_OPC_SADAH, 0x1, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4946,7 +4984,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sadah.sn", TILEPRO_OPC_SADAH_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4965,7 +5003,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sadah_u", TILEPRO_OPC_SADAH_U, 0x1, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4984,7 +5022,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sadah_u.sn", TILEPRO_OPC_SADAH_U_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5003,7 +5041,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sadb_u", TILEPRO_OPC_SADB_U, 0x1, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5022,7 +5060,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sadb_u.sn", TILEPRO_OPC_SADB_U_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5041,7 +5079,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sadh", TILEPRO_OPC_SADH, 0x1, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5060,7 +5098,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sadh.sn", TILEPRO_OPC_SADH_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5079,7 +5117,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sadh_u", TILEPRO_OPC_SADH_U, 0x1, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5098,7 +5136,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sadh_u.sn", TILEPRO_OPC_SADH_U_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5117,7 +5155,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sb", TILEPRO_OPC_SB, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 17 }, { 0, }, { 0, }, { 15, 36 } },
+    { { 0, }, { 8, 17 }, { 0, }, { 0, }, { 15, 36 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -5155,7 +5193,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "seq", TILEPRO_OPC_SEQ, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5174,7 +5212,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "seq.sn", TILEPRO_OPC_SEQ_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5193,7 +5231,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "seqb", TILEPRO_OPC_SEQB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5212,7 +5250,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "seqb.sn", TILEPRO_OPC_SEQB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5231,7 +5269,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "seqh", TILEPRO_OPC_SEQH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5250,7 +5288,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "seqh.sn", TILEPRO_OPC_SEQH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5269,7 +5307,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "seqi", TILEPRO_OPC_SEQI, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 11, 12, 2 }, { 13, 14, 3 }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 11, 12, 2 }, { 13, 14, 3 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -5288,7 +5326,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "seqi.sn", TILEPRO_OPC_SEQI_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -5307,7 +5345,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "seqib", TILEPRO_OPC_SEQIB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -5326,7 +5364,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "seqib.sn", TILEPRO_OPC_SEQIB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -5345,7 +5383,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "seqih", TILEPRO_OPC_SEQIH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -5364,7 +5402,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "seqih.sn", TILEPRO_OPC_SEQIH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -5383,7 +5421,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sh", TILEPRO_OPC_SH, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 17 }, { 0, }, { 0, }, { 15, 36 } },
+    { { 0, }, { 8, 17 }, { 0, }, { 0, }, { 15, 36 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -5421,7 +5459,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shl", TILEPRO_OPC_SHL, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5440,7 +5478,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shl.sn", TILEPRO_OPC_SHL_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5459,7 +5497,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shlb", TILEPRO_OPC_SHLB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5478,7 +5516,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shlb.sn", TILEPRO_OPC_SHLB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5497,7 +5535,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shlh", TILEPRO_OPC_SHLH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5516,7 +5554,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shlh.sn", TILEPRO_OPC_SHLH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5535,7 +5573,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shli", TILEPRO_OPC_SHLI, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 11, 12, 34 }, { 13, 14, 35 }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 11, 12, 34 }, { 13, 14, 35 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -5554,7 +5592,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shli.sn", TILEPRO_OPC_SHLI_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -5573,7 +5611,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shlib", TILEPRO_OPC_SHLIB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -5592,7 +5630,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shlib.sn", TILEPRO_OPC_SHLIB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -5611,7 +5649,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shlih", TILEPRO_OPC_SHLIH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -5630,7 +5668,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shlih.sn", TILEPRO_OPC_SHLIH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -5649,7 +5687,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shr", TILEPRO_OPC_SHR, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5668,7 +5706,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shr.sn", TILEPRO_OPC_SHR_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5687,7 +5725,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shrb", TILEPRO_OPC_SHRB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5706,7 +5744,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shrb.sn", TILEPRO_OPC_SHRB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5725,7 +5763,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shrh", TILEPRO_OPC_SHRH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5744,7 +5782,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shrh.sn", TILEPRO_OPC_SHRH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5763,7 +5801,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shri", TILEPRO_OPC_SHRI, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 11, 12, 34 }, { 13, 14, 35 }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 11, 12, 34 }, { 13, 14, 35 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -5782,7 +5820,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shri.sn", TILEPRO_OPC_SHRI_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -5801,7 +5839,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shrib", TILEPRO_OPC_SHRIB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -5820,7 +5858,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shrib.sn", TILEPRO_OPC_SHRIB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -5839,7 +5877,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shrih", TILEPRO_OPC_SHRIH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -5858,7 +5896,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shrih.sn", TILEPRO_OPC_SHRIH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -5877,7 +5915,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slt", TILEPRO_OPC_SLT, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5896,7 +5934,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slt.sn", TILEPRO_OPC_SLT_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5915,7 +5953,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slt_u", TILEPRO_OPC_SLT_U, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5934,7 +5972,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slt_u.sn", TILEPRO_OPC_SLT_U_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5953,7 +5991,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sltb", TILEPRO_OPC_SLTB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5972,7 +6010,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sltb.sn", TILEPRO_OPC_SLTB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5991,7 +6029,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sltb_u", TILEPRO_OPC_SLTB_U, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6010,7 +6048,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sltb_u.sn", TILEPRO_OPC_SLTB_U_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6029,7 +6067,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slte", TILEPRO_OPC_SLTE, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6048,7 +6086,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slte.sn", TILEPRO_OPC_SLTE_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6067,7 +6105,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slte_u", TILEPRO_OPC_SLTE_U, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6086,7 +6124,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slte_u.sn", TILEPRO_OPC_SLTE_U_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6105,7 +6143,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slteb", TILEPRO_OPC_SLTEB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6124,7 +6162,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slteb.sn", TILEPRO_OPC_SLTEB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6143,7 +6181,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slteb_u", TILEPRO_OPC_SLTEB_U, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6162,7 +6200,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slteb_u.sn", TILEPRO_OPC_SLTEB_U_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6181,7 +6219,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slteh", TILEPRO_OPC_SLTEH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6200,7 +6238,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slteh.sn", TILEPRO_OPC_SLTEH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6219,7 +6257,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slteh_u", TILEPRO_OPC_SLTEH_U, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6238,7 +6276,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slteh_u.sn", TILEPRO_OPC_SLTEH_U_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6257,7 +6295,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slth", TILEPRO_OPC_SLTH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6276,7 +6314,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slth.sn", TILEPRO_OPC_SLTH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6295,7 +6333,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slth_u", TILEPRO_OPC_SLTH_U, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6314,7 +6352,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slth_u.sn", TILEPRO_OPC_SLTH_U_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6333,7 +6371,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slti", TILEPRO_OPC_SLTI, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 11, 12, 2 }, { 13, 14, 3 }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 11, 12, 2 }, { 13, 14, 3 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -6352,7 +6390,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slti.sn", TILEPRO_OPC_SLTI_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -6371,7 +6409,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slti_u", TILEPRO_OPC_SLTI_U, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 11, 12, 2 }, { 13, 14, 3 }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 11, 12, 2 }, { 13, 14, 3 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -6390,7 +6428,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slti_u.sn", TILEPRO_OPC_SLTI_U_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -6409,7 +6447,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sltib", TILEPRO_OPC_SLTIB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -6428,7 +6466,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sltib.sn", TILEPRO_OPC_SLTIB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -6447,7 +6485,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sltib_u", TILEPRO_OPC_SLTIB_U, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -6466,7 +6504,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sltib_u.sn", TILEPRO_OPC_SLTIB_U_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -6485,7 +6523,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sltih", TILEPRO_OPC_SLTIH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -6504,7 +6542,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sltih.sn", TILEPRO_OPC_SLTIH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -6523,7 +6561,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sltih_u", TILEPRO_OPC_SLTIH_U, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -6542,7 +6580,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sltih_u.sn", TILEPRO_OPC_SLTIH_U_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -6561,7 +6599,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sne", TILEPRO_OPC_SNE, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6580,7 +6618,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sne.sn", TILEPRO_OPC_SNE_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6599,7 +6637,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sneb", TILEPRO_OPC_SNEB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6618,7 +6656,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sneb.sn", TILEPRO_OPC_SNEB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6637,7 +6675,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sneh", TILEPRO_OPC_SNEH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6656,7 +6694,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sneh.sn", TILEPRO_OPC_SNEH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6675,7 +6713,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sra", TILEPRO_OPC_SRA, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6694,7 +6732,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sra.sn", TILEPRO_OPC_SRA_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6713,7 +6751,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "srab", TILEPRO_OPC_SRAB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6732,7 +6770,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "srab.sn", TILEPRO_OPC_SRAB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6751,7 +6789,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "srah", TILEPRO_OPC_SRAH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6770,7 +6808,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "srah.sn", TILEPRO_OPC_SRAH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6789,7 +6827,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "srai", TILEPRO_OPC_SRAI, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 11, 12, 34 }, { 13, 14, 35 }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 11, 12, 34 }, { 13, 14, 35 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -6808,7 +6846,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "srai.sn", TILEPRO_OPC_SRAI_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -6827,7 +6865,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sraib", TILEPRO_OPC_SRAIB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -6846,7 +6884,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sraib.sn", TILEPRO_OPC_SRAIB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -6865,7 +6903,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sraih", TILEPRO_OPC_SRAIH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -6884,7 +6922,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sraih.sn", TILEPRO_OPC_SRAIH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -6903,7 +6941,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sub", TILEPRO_OPC_SUB, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6922,7 +6960,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sub.sn", TILEPRO_OPC_SUB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6941,7 +6979,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "subb", TILEPRO_OPC_SUBB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6960,7 +6998,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "subb.sn", TILEPRO_OPC_SUBB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6979,7 +7017,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "subbs_u", TILEPRO_OPC_SUBBS_U, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6998,7 +7036,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "subbs_u.sn", TILEPRO_OPC_SUBBS_U_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -7017,7 +7055,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "subh", TILEPRO_OPC_SUBH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -7036,7 +7074,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "subh.sn", TILEPRO_OPC_SUBH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -7055,7 +7093,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "subhs", TILEPRO_OPC_SUBHS, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -7074,7 +7112,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "subhs.sn", TILEPRO_OPC_SUBHS_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -7093,7 +7131,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "subs", TILEPRO_OPC_SUBS, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -7112,7 +7150,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "subs.sn", TILEPRO_OPC_SUBS_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -7131,7 +7169,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sw", TILEPRO_OPC_SW, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 17 }, { 0, }, { 0, }, { 15, 36 } },
+    { { 0, }, { 8, 17 }, { 0, }, { 0, }, { 15, 36 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -7245,7 +7283,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "tblidxb0", TILEPRO_OPC_TBLIDXB0, 0x5, 2, TREG_ZERO, 1,
-    { { 21, 8 }, { 0, }, { 31, 12 }, { 0, }, { 0, } },
+    { { 21, 10 }, { 0, }, { 31, 12 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -7264,7 +7302,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "tblidxb0.sn", TILEPRO_OPC_TBLIDXB0_SN, 0x1, 2, TREG_SN, 1,
-    { { 21, 8 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -7283,7 +7321,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "tblidxb1", TILEPRO_OPC_TBLIDXB1, 0x5, 2, TREG_ZERO, 1,
-    { { 21, 8 }, { 0, }, { 31, 12 }, { 0, }, { 0, } },
+    { { 21, 10 }, { 0, }, { 31, 12 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -7302,7 +7340,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "tblidxb1.sn", TILEPRO_OPC_TBLIDXB1_SN, 0x1, 2, TREG_SN, 1,
-    { { 21, 8 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -7321,7 +7359,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "tblidxb2", TILEPRO_OPC_TBLIDXB2, 0x5, 2, TREG_ZERO, 1,
-    { { 21, 8 }, { 0, }, { 31, 12 }, { 0, }, { 0, } },
+    { { 21, 10 }, { 0, }, { 31, 12 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -7340,7 +7378,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "tblidxb2.sn", TILEPRO_OPC_TBLIDXB2_SN, 0x1, 2, TREG_SN, 1,
-    { { 21, 8 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -7359,7 +7397,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "tblidxb3", TILEPRO_OPC_TBLIDXB3, 0x5, 2, TREG_ZERO, 1,
-    { { 21, 8 }, { 0, }, { 31, 12 }, { 0, }, { 0, } },
+    { { 21, 10 }, { 0, }, { 31, 12 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -7378,7 +7416,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "tblidxb3.sn", TILEPRO_OPC_TBLIDXB3_SN, 0x1, 2, TREG_SN, 1,
-    { { 21, 8 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -7397,7 +7435,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "tns", TILEPRO_OPC_TNS, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -7416,7 +7454,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "tns.sn", TILEPRO_OPC_TNS_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 9, 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -7435,7 +7473,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "wh64", TILEPRO_OPC_WH64, 0x2, 1, TREG_ZERO, 1,
-    { { 0, }, { 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -7454,7 +7492,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "xor", TILEPRO_OPC_XOR, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -7473,7 +7511,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "xor.sn", TILEPRO_OPC_XOR_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -7492,7 +7530,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "xori", TILEPRO_OPC_XORI, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -7511,7 +7549,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "xori.sn", TILEPRO_OPC_XORI_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -7935,7 +7973,7 @@ static const unsigned short decode_X0_fsm[1153] =
   TILEPRO_OPC_TBLIDXB3_SN, TILEPRO_OPC_NONE,
 };
 
-static const unsigned short decode_X1_fsm[1540] =
+static const unsigned short decode_X1_fsm[1580] =
 {
   BITFIELD(54, 9) /* index 0 */,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
@@ -7979,7 +8017,7 @@ static const unsigned short decode_X1_fsm[1540] =
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
-  CHILD(941), CHILD(950), CHILD(974), CHILD(983), TILEPRO_OPC_NONE,
+  CHILD(961), CHILD(970), CHILD(994), CHILD(1003), TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_MM,
@@ -7990,11 +8028,11 @@ static const unsigned short decode_X1_fsm[1540] =
   TILEPRO_OPC_MM, TILEPRO_OPC_MM, TILEPRO_OPC_MM, TILEPRO_OPC_MM,
   TILEPRO_OPC_MM, TILEPRO_OPC_MM, TILEPRO_OPC_MM, TILEPRO_OPC_MM,
   TILEPRO_OPC_MM, TILEPRO_OPC_MM, TILEPRO_OPC_MM, TILEPRO_OPC_MM,
-  TILEPRO_OPC_MM, TILEPRO_OPC_MM, TILEPRO_OPC_MM, CHILD(992),
+  TILEPRO_OPC_MM, TILEPRO_OPC_MM, TILEPRO_OPC_MM, CHILD(1032),
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
-  TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, CHILD(1334),
+  TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, CHILD(1374),
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
@@ -8223,43 +8261,62 @@ static const unsigned short decode_X1_fsm[1540] =
   TILEPRO_OPC_SLTI, TILEPRO_OPC_SLTI_U, TILEPRO_OPC_XORI, TILEPRO_OPC_LBADD,
   TILEPRO_OPC_LBADD_U,
   BITFIELD(51, 3) /* index 932 */,
-  TILEPRO_OPC_LHADD, TILEPRO_OPC_LHADD_U, TILEPRO_OPC_LWADD,
-  TILEPRO_OPC_LWADD_NA, TILEPRO_OPC_SBADD, TILEPRO_OPC_SHADD,
-  TILEPRO_OPC_SWADD, TILEPRO_OPC_NONE,
-  BITFIELD(51, 3) /* index 941 */,
+  TILEPRO_OPC_LHADD, TILEPRO_OPC_LHADD_U, CHILD(941), TILEPRO_OPC_LWADD_NA,
+  TILEPRO_OPC_SBADD, TILEPRO_OPC_SHADD, TILEPRO_OPC_SWADD, TILEPRO_OPC_NONE,
+  BITFIELD(43, 2) /* index 941 */,
+  CHILD(946), TILEPRO_OPC_LWADD, TILEPRO_OPC_LWADD, TILEPRO_OPC_LWADD,
+  BITFIELD(45, 2) /* index 946 */,
+  CHILD(951), TILEPRO_OPC_LWADD, TILEPRO_OPC_LWADD, TILEPRO_OPC_LWADD,
+  BITFIELD(47, 2) /* index 951 */,
+  CHILD(956), TILEPRO_OPC_LWADD, TILEPRO_OPC_LWADD, TILEPRO_OPC_LWADD,
+  BITFIELD(49, 2) /* index 956 */,
+  TILEPRO_OPC_LW_TLS, TILEPRO_OPC_LWADD, TILEPRO_OPC_LWADD, TILEPRO_OPC_LWADD,
+  BITFIELD(51, 3) /* index 961 */,
   TILEPRO_OPC_NONE, TILEPRO_OPC_ADDIB_SN, TILEPRO_OPC_ADDIH_SN,
   TILEPRO_OPC_ADDI_SN, TILEPRO_OPC_ANDI_SN, TILEPRO_OPC_MAXIB_U_SN,
   TILEPRO_OPC_MAXIH_SN, TILEPRO_OPC_MFSPR,
-  BITFIELD(51, 3) /* index 950 */,
-  TILEPRO_OPC_MINIB_U_SN, TILEPRO_OPC_MINIH_SN, TILEPRO_OPC_MTSPR, CHILD(959),
+  BITFIELD(51, 3) /* index 970 */,
+  TILEPRO_OPC_MINIB_U_SN, TILEPRO_OPC_MINIH_SN, TILEPRO_OPC_MTSPR, CHILD(979),
   TILEPRO_OPC_SEQIB_SN, TILEPRO_OPC_SEQIH_SN, TILEPRO_OPC_SEQI_SN,
   TILEPRO_OPC_SLTIB_SN,
-  BITFIELD(37, 2) /* index 959 */,
-  TILEPRO_OPC_ORI_SN, TILEPRO_OPC_ORI_SN, TILEPRO_OPC_ORI_SN, CHILD(964),
-  BITFIELD(39, 2) /* index 964 */,
-  TILEPRO_OPC_ORI_SN, TILEPRO_OPC_ORI_SN, TILEPRO_OPC_ORI_SN, CHILD(969),
-  BITFIELD(41, 2) /* index 969 */,
+  BITFIELD(37, 2) /* index 979 */,
+  TILEPRO_OPC_ORI_SN, TILEPRO_OPC_ORI_SN, TILEPRO_OPC_ORI_SN, CHILD(984),
+  BITFIELD(39, 2) /* index 984 */,
+  TILEPRO_OPC_ORI_SN, TILEPRO_OPC_ORI_SN, TILEPRO_OPC_ORI_SN, CHILD(989),
+  BITFIELD(41, 2) /* index 989 */,
   TILEPRO_OPC_ORI_SN, TILEPRO_OPC_ORI_SN, TILEPRO_OPC_ORI_SN,
   TILEPRO_OPC_MOVEI_SN,
-  BITFIELD(51, 3) /* index 974 */,
+  BITFIELD(51, 3) /* index 994 */,
   TILEPRO_OPC_SLTIB_U_SN, TILEPRO_OPC_SLTIH_SN, TILEPRO_OPC_SLTIH_U_SN,
   TILEPRO_OPC_SLTI_SN, TILEPRO_OPC_SLTI_U_SN, TILEPRO_OPC_XORI_SN,
   TILEPRO_OPC_LBADD_SN, TILEPRO_OPC_LBADD_U_SN,
-  BITFIELD(51, 3) /* index 983 */,
-  TILEPRO_OPC_LHADD_SN, TILEPRO_OPC_LHADD_U_SN, TILEPRO_OPC_LWADD_SN,
+  BITFIELD(51, 3) /* index 1003 */,
+  TILEPRO_OPC_LHADD_SN, TILEPRO_OPC_LHADD_U_SN, CHILD(1012),
   TILEPRO_OPC_LWADD_NA_SN, TILEPRO_OPC_SBADD, TILEPRO_OPC_SHADD,
   TILEPRO_OPC_SWADD, TILEPRO_OPC_NONE,
-  BITFIELD(46, 7) /* index 992 */,
+  BITFIELD(43, 2) /* index 1012 */,
+  CHILD(1017), TILEPRO_OPC_LWADD_SN, TILEPRO_OPC_LWADD_SN,
+  TILEPRO_OPC_LWADD_SN,
+  BITFIELD(45, 2) /* index 1017 */,
+  CHILD(1022), TILEPRO_OPC_LWADD_SN, TILEPRO_OPC_LWADD_SN,
+  TILEPRO_OPC_LWADD_SN,
+  BITFIELD(47, 2) /* index 1022 */,
+  CHILD(1027), TILEPRO_OPC_LWADD_SN, TILEPRO_OPC_LWADD_SN,
+  TILEPRO_OPC_LWADD_SN,
+  BITFIELD(49, 2) /* index 1027 */,
+  TILEPRO_OPC_LW_TLS_SN, TILEPRO_OPC_LWADD_SN, TILEPRO_OPC_LWADD_SN,
+  TILEPRO_OPC_LWADD_SN,
+  BITFIELD(46, 7) /* index 1032 */,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
-  CHILD(1121), CHILD(1121), CHILD(1121), CHILD(1121), CHILD(1124),
-  CHILD(1124), CHILD(1124), CHILD(1124), CHILD(1127), CHILD(1127),
-  CHILD(1127), CHILD(1127), CHILD(1130), CHILD(1130), CHILD(1130),
-  CHILD(1130), CHILD(1133), CHILD(1133), CHILD(1133), CHILD(1133),
-  CHILD(1136), CHILD(1136), CHILD(1136), CHILD(1136), CHILD(1139),
-  CHILD(1139), CHILD(1139), CHILD(1139), CHILD(1142), CHILD(1142),
-  CHILD(1142), CHILD(1142), CHILD(1145), CHILD(1145), CHILD(1145),
-  CHILD(1145), CHILD(1148), CHILD(1148), CHILD(1148), CHILD(1148),
-  CHILD(1151), CHILD(1242), CHILD(1290), CHILD(1323), TILEPRO_OPC_NONE,
+  CHILD(1161), CHILD(1161), CHILD(1161), CHILD(1161), CHILD(1164),
+  CHILD(1164), CHILD(1164), CHILD(1164), CHILD(1167), CHILD(1167),
+  CHILD(1167), CHILD(1167), CHILD(1170), CHILD(1170), CHILD(1170),
+  CHILD(1170), CHILD(1173), CHILD(1173), CHILD(1173), CHILD(1173),
+  CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1179),
+  CHILD(1179), CHILD(1179), CHILD(1179), CHILD(1182), CHILD(1182),
+  CHILD(1182), CHILD(1182), CHILD(1185), CHILD(1185), CHILD(1185),
+  CHILD(1185), CHILD(1188), CHILD(1188), CHILD(1188), CHILD(1188),
+  CHILD(1191), CHILD(1282), CHILD(1330), CHILD(1363), TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
@@ -8280,130 +8337,130 @@ static const unsigned short decode_X1_fsm[1540] =
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1121 */,
+  BITFIELD(53, 1) /* index 1161 */,
   TILEPRO_OPC_RLI, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1124 */,
+  BITFIELD(53, 1) /* index 1164 */,
   TILEPRO_OPC_SHLIB, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1127 */,
+  BITFIELD(53, 1) /* index 1167 */,
   TILEPRO_OPC_SHLIH, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1130 */,
+  BITFIELD(53, 1) /* index 1170 */,
   TILEPRO_OPC_SHLI, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1133 */,
+  BITFIELD(53, 1) /* index 1173 */,
   TILEPRO_OPC_SHRIB, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1136 */,
+  BITFIELD(53, 1) /* index 1176 */,
   TILEPRO_OPC_SHRIH, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1139 */,
+  BITFIELD(53, 1) /* index 1179 */,
   TILEPRO_OPC_SHRI, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1142 */,
+  BITFIELD(53, 1) /* index 1182 */,
   TILEPRO_OPC_SRAIB, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1145 */,
+  BITFIELD(53, 1) /* index 1185 */,
   TILEPRO_OPC_SRAIH, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1148 */,
+  BITFIELD(53, 1) /* index 1188 */,
   TILEPRO_OPC_SRAI, TILEPRO_OPC_NONE,
-  BITFIELD(43, 3) /* index 1151 */,
-  TILEPRO_OPC_NONE, CHILD(1160), CHILD(1163), CHILD(1166), CHILD(1169),
-  CHILD(1172), CHILD(1175), CHILD(1178),
-  BITFIELD(53, 1) /* index 1160 */,
+  BITFIELD(43, 3) /* index 1191 */,
+  TILEPRO_OPC_NONE, CHILD(1200), CHILD(1203), CHILD(1206), CHILD(1209),
+  CHILD(1212), CHILD(1215), CHILD(1218),
+  BITFIELD(53, 1) /* index 1200 */,
   TILEPRO_OPC_DRAIN, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1163 */,
+  BITFIELD(53, 1) /* index 1203 */,
   TILEPRO_OPC_DTLBPR, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1166 */,
+  BITFIELD(53, 1) /* index 1206 */,
   TILEPRO_OPC_FINV, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1169 */,
+  BITFIELD(53, 1) /* index 1209 */,
   TILEPRO_OPC_FLUSH, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1172 */,
+  BITFIELD(53, 1) /* index 1212 */,
   TILEPRO_OPC_FNOP, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1175 */,
+  BITFIELD(53, 1) /* index 1215 */,
   TILEPRO_OPC_ICOH, TILEPRO_OPC_NONE,
-  BITFIELD(31, 2) /* index 1178 */,
-  CHILD(1183), CHILD(1211), CHILD(1239), CHILD(1239),
-  BITFIELD(53, 1) /* index 1183 */,
-  CHILD(1186), TILEPRO_OPC_NONE,
-  BITFIELD(33, 2) /* index 1186 */,
-  TILEPRO_OPC_ILL, TILEPRO_OPC_ILL, TILEPRO_OPC_ILL, CHILD(1191),
-  BITFIELD(35, 2) /* index 1191 */,
-  TILEPRO_OPC_ILL, CHILD(1196), TILEPRO_OPC_ILL, TILEPRO_OPC_ILL,
-  BITFIELD(37, 2) /* index 1196 */,
-  TILEPRO_OPC_ILL, CHILD(1201), TILEPRO_OPC_ILL, TILEPRO_OPC_ILL,
-  BITFIELD(39, 2) /* index 1201 */,
-  TILEPRO_OPC_ILL, CHILD(1206), TILEPRO_OPC_ILL, TILEPRO_OPC_ILL,
-  BITFIELD(41, 2) /* index 1206 */,
+  BITFIELD(31, 2) /* index 1218 */,
+  CHILD(1223), CHILD(1251), CHILD(1279), CHILD(1279),
+  BITFIELD(53, 1) /* index 1223 */,
+  CHILD(1226), TILEPRO_OPC_NONE,
+  BITFIELD(33, 2) /* index 1226 */,
+  TILEPRO_OPC_ILL, TILEPRO_OPC_ILL, TILEPRO_OPC_ILL, CHILD(1231),
+  BITFIELD(35, 2) /* index 1231 */,
+  TILEPRO_OPC_ILL, CHILD(1236), TILEPRO_OPC_ILL, TILEPRO_OPC_ILL,
+  BITFIELD(37, 2) /* index 1236 */,
+  TILEPRO_OPC_ILL, CHILD(1241), TILEPRO_OPC_ILL, TILEPRO_OPC_ILL,
+  BITFIELD(39, 2) /* index 1241 */,
+  TILEPRO_OPC_ILL, CHILD(1246), TILEPRO_OPC_ILL, TILEPRO_OPC_ILL,
+  BITFIELD(41, 2) /* index 1246 */,
   TILEPRO_OPC_ILL, TILEPRO_OPC_ILL, TILEPRO_OPC_BPT, TILEPRO_OPC_ILL,
-  BITFIELD(53, 1) /* index 1211 */,
-  CHILD(1214), TILEPRO_OPC_NONE,
-  BITFIELD(33, 2) /* index 1214 */,
-  TILEPRO_OPC_ILL, TILEPRO_OPC_ILL, TILEPRO_OPC_ILL, CHILD(1219),
-  BITFIELD(35, 2) /* index 1219 */,
-  TILEPRO_OPC_ILL, CHILD(1224), TILEPRO_OPC_ILL, TILEPRO_OPC_ILL,
-  BITFIELD(37, 2) /* index 1224 */,
-  TILEPRO_OPC_ILL, CHILD(1229), TILEPRO_OPC_ILL, TILEPRO_OPC_ILL,
-  BITFIELD(39, 2) /* index 1229 */,
-  TILEPRO_OPC_ILL, CHILD(1234), TILEPRO_OPC_ILL, TILEPRO_OPC_ILL,
-  BITFIELD(41, 2) /* index 1234 */,
+  BITFIELD(53, 1) /* index 1251 */,
+  CHILD(1254), TILEPRO_OPC_NONE,
+  BITFIELD(33, 2) /* index 1254 */,
+  TILEPRO_OPC_ILL, TILEPRO_OPC_ILL, TILEPRO_OPC_ILL, CHILD(1259),
+  BITFIELD(35, 2) /* index 1259 */,
+  TILEPRO_OPC_ILL, CHILD(1264), TILEPRO_OPC_ILL, TILEPRO_OPC_ILL,
+  BITFIELD(37, 2) /* index 1264 */,
+  TILEPRO_OPC_ILL, CHILD(1269), TILEPRO_OPC_ILL, TILEPRO_OPC_ILL,
+  BITFIELD(39, 2) /* index 1269 */,
+  TILEPRO_OPC_ILL, CHILD(1274), TILEPRO_OPC_ILL, TILEPRO_OPC_ILL,
+  BITFIELD(41, 2) /* index 1274 */,
   TILEPRO_OPC_ILL, TILEPRO_OPC_ILL, TILEPRO_OPC_RAISE, TILEPRO_OPC_ILL,
-  BITFIELD(53, 1) /* index 1239 */,
+  BITFIELD(53, 1) /* index 1279 */,
   TILEPRO_OPC_ILL, TILEPRO_OPC_NONE,
-  BITFIELD(43, 3) /* index 1242 */,
-  CHILD(1251), CHILD(1254), CHILD(1257), CHILD(1275), CHILD(1278),
-  CHILD(1281), CHILD(1284), CHILD(1287),
-  BITFIELD(53, 1) /* index 1251 */,
+  BITFIELD(43, 3) /* index 1282 */,
+  CHILD(1291), CHILD(1294), CHILD(1297), CHILD(1315), CHILD(1318),
+  CHILD(1321), CHILD(1324), CHILD(1327),
+  BITFIELD(53, 1) /* index 1291 */,
   TILEPRO_OPC_INV, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1254 */,
+  BITFIELD(53, 1) /* index 1294 */,
   TILEPRO_OPC_IRET, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1257 */,
-  CHILD(1260), TILEPRO_OPC_NONE,
-  BITFIELD(31, 2) /* index 1260 */,
-  TILEPRO_OPC_LB, TILEPRO_OPC_LB, TILEPRO_OPC_LB, CHILD(1265),
-  BITFIELD(33, 2) /* index 1265 */,
-  TILEPRO_OPC_LB, TILEPRO_OPC_LB, TILEPRO_OPC_LB, CHILD(1270),
-  BITFIELD(35, 2) /* index 1270 */,
+  BITFIELD(53, 1) /* index 1297 */,
+  CHILD(1300), TILEPRO_OPC_NONE,
+  BITFIELD(31, 2) /* index 1300 */,
+  TILEPRO_OPC_LB, TILEPRO_OPC_LB, TILEPRO_OPC_LB, CHILD(1305),
+  BITFIELD(33, 2) /* index 1305 */,
+  TILEPRO_OPC_LB, TILEPRO_OPC_LB, TILEPRO_OPC_LB, CHILD(1310),
+  BITFIELD(35, 2) /* index 1310 */,
   TILEPRO_OPC_LB, TILEPRO_OPC_LB, TILEPRO_OPC_LB, TILEPRO_OPC_PREFETCH,
-  BITFIELD(53, 1) /* index 1275 */,
+  BITFIELD(53, 1) /* index 1315 */,
   TILEPRO_OPC_LB_U, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1278 */,
+  BITFIELD(53, 1) /* index 1318 */,
   TILEPRO_OPC_LH, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1281 */,
+  BITFIELD(53, 1) /* index 1321 */,
   TILEPRO_OPC_LH_U, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1284 */,
+  BITFIELD(53, 1) /* index 1324 */,
   TILEPRO_OPC_LW, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1287 */,
+  BITFIELD(53, 1) /* index 1327 */,
   TILEPRO_OPC_MF, TILEPRO_OPC_NONE,
-  BITFIELD(43, 3) /* index 1290 */,
-  CHILD(1299), CHILD(1302), CHILD(1305), CHILD(1308), CHILD(1311),
-  CHILD(1314), CHILD(1317), CHILD(1320),
-  BITFIELD(53, 1) /* index 1299 */,
+  BITFIELD(43, 3) /* index 1330 */,
+  CHILD(1339), CHILD(1342), CHILD(1345), CHILD(1348), CHILD(1351),
+  CHILD(1354), CHILD(1357), CHILD(1360),
+  BITFIELD(53, 1) /* index 1339 */,
   TILEPRO_OPC_NAP, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1302 */,
+  BITFIELD(53, 1) /* index 1342 */,
   TILEPRO_OPC_NOP, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1305 */,
+  BITFIELD(53, 1) /* index 1345 */,
   TILEPRO_OPC_SWINT0, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1308 */,
+  BITFIELD(53, 1) /* index 1348 */,
   TILEPRO_OPC_SWINT1, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1311 */,
+  BITFIELD(53, 1) /* index 1351 */,
   TILEPRO_OPC_SWINT2, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1314 */,
+  BITFIELD(53, 1) /* index 1354 */,
   TILEPRO_OPC_SWINT3, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1317 */,
+  BITFIELD(53, 1) /* index 1357 */,
   TILEPRO_OPC_TNS, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1320 */,
+  BITFIELD(53, 1) /* index 1360 */,
   TILEPRO_OPC_WH64, TILEPRO_OPC_NONE,
-  BITFIELD(43, 2) /* index 1323 */,
-  CHILD(1328), TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
-  BITFIELD(45, 1) /* index 1328 */,
-  CHILD(1331), TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1331 */,
+  BITFIELD(43, 2) /* index 1363 */,
+  CHILD(1368), TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
+  BITFIELD(45, 1) /* index 1368 */,
+  CHILD(1371), TILEPRO_OPC_NONE,
+  BITFIELD(53, 1) /* index 1371 */,
   TILEPRO_OPC_LW_NA, TILEPRO_OPC_NONE,
-  BITFIELD(46, 7) /* index 1334 */,
+  BITFIELD(46, 7) /* index 1374 */,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
-  CHILD(1463), CHILD(1463), CHILD(1463), CHILD(1463), CHILD(1466),
-  CHILD(1466), CHILD(1466), CHILD(1466), CHILD(1469), CHILD(1469),
-  CHILD(1469), CHILD(1469), CHILD(1472), CHILD(1472), CHILD(1472),
-  CHILD(1472), CHILD(1475), CHILD(1475), CHILD(1475), CHILD(1475),
-  CHILD(1478), CHILD(1478), CHILD(1478), CHILD(1478), CHILD(1481),
-  CHILD(1481), CHILD(1481), CHILD(1481), CHILD(1484), CHILD(1484),
-  CHILD(1484), CHILD(1484), CHILD(1487), CHILD(1487), CHILD(1487),
-  CHILD(1487), CHILD(1490), CHILD(1490), CHILD(1490), CHILD(1490),
-  CHILD(1151), CHILD(1493), CHILD(1517), CHILD(1529), TILEPRO_OPC_NONE,
+  CHILD(1503), CHILD(1503), CHILD(1503), CHILD(1503), CHILD(1506),
+  CHILD(1506), CHILD(1506), CHILD(1506), CHILD(1509), CHILD(1509),
+  CHILD(1509), CHILD(1509), CHILD(1512), CHILD(1512), CHILD(1512),
+  CHILD(1512), CHILD(1515), CHILD(1515), CHILD(1515), CHILD(1515),
+  CHILD(1518), CHILD(1518), CHILD(1518), CHILD(1518), CHILD(1521),
+  CHILD(1521), CHILD(1521), CHILD(1521), CHILD(1524), CHILD(1524),
+  CHILD(1524), CHILD(1524), CHILD(1527), CHILD(1527), CHILD(1527),
+  CHILD(1527), CHILD(1530), CHILD(1530), CHILD(1530), CHILD(1530),
+  CHILD(1191), CHILD(1533), CHILD(1557), CHILD(1569), TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
@@ -8424,49 +8481,49 @@ static const unsigned short decode_X1_fsm[1540] =
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1463 */,
+  BITFIELD(53, 1) /* index 1503 */,
   TILEPRO_OPC_RLI_SN, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1466 */,
+  BITFIELD(53, 1) /* index 1506 */,
   TILEPRO_OPC_SHLIB_SN, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1469 */,
+  BITFIELD(53, 1) /* index 1509 */,
   TILEPRO_OPC_SHLIH_SN, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1472 */,
+  BITFIELD(53, 1) /* index 1512 */,
   TILEPRO_OPC_SHLI_SN, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1475 */,
+  BITFIELD(53, 1) /* index 1515 */,
   TILEPRO_OPC_SHRIB_SN, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1478 */,
+  BITFIELD(53, 1) /* index 1518 */,
   TILEPRO_OPC_SHRIH_SN, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1481 */,
+  BITFIELD(53, 1) /* index 1521 */,
   TILEPRO_OPC_SHRI_SN, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1484 */,
+  BITFIELD(53, 1) /* index 1524 */,
   TILEPRO_OPC_SRAIB_SN, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1487 */,
+  BITFIELD(53, 1) /* index 1527 */,
   TILEPRO_OPC_SRAIH_SN, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1490 */,
+  BITFIELD(53, 1) /* index 1530 */,
   TILEPRO_OPC_SRAI_SN, TILEPRO_OPC_NONE,
-  BITFIELD(43, 3) /* index 1493 */,
-  CHILD(1251), CHILD(1254), CHILD(1502), CHILD(1505), CHILD(1508),
-  CHILD(1511), CHILD(1514), CHILD(1287),
-  BITFIELD(53, 1) /* index 1502 */,
+  BITFIELD(43, 3) /* index 1533 */,
+  CHILD(1291), CHILD(1294), CHILD(1542), CHILD(1545), CHILD(1548),
+  CHILD(1551), CHILD(1554), CHILD(1327),
+  BITFIELD(53, 1) /* index 1542 */,
   TILEPRO_OPC_LB_SN, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1505 */,
+  BITFIELD(53, 1) /* index 1545 */,
   TILEPRO_OPC_LB_U_SN, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1508 */,
+  BITFIELD(53, 1) /* index 1548 */,
   TILEPRO_OPC_LH_SN, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1511 */,
+  BITFIELD(53, 1) /* index 1551 */,
   TILEPRO_OPC_LH_U_SN, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1514 */,
+  BITFIELD(53, 1) /* index 1554 */,
   TILEPRO_OPC_LW_SN, TILEPRO_OPC_NONE,
-  BITFIELD(43, 3) /* index 1517 */,
-  CHILD(1299), CHILD(1302), CHILD(1305), CHILD(1308), CHILD(1311),
-  CHILD(1314), CHILD(1526), CHILD(1320),
-  BITFIELD(53, 1) /* index 1526 */,
+  BITFIELD(43, 3) /* index 1557 */,
+  CHILD(1339), CHILD(1342), CHILD(1345), CHILD(1348), CHILD(1351),
+  CHILD(1354), CHILD(1566), CHILD(1360),
+  BITFIELD(53, 1) /* index 1566 */,
   TILEPRO_OPC_TNS_SN, TILEPRO_OPC_NONE,
-  BITFIELD(43, 2) /* index 1529 */,
-  CHILD(1534), TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
-  BITFIELD(45, 1) /* index 1534 */,
-  CHILD(1537), TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1537 */,
+  BITFIELD(43, 2) /* index 1569 */,
+  CHILD(1574), TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
+  BITFIELD(45, 1) /* index 1574 */,
+  CHILD(1577), TILEPRO_OPC_NONE,
+  BITFIELD(53, 1) /* index 1577 */,
   TILEPRO_OPC_LW_NA_SN, TILEPRO_OPC_NONE,
 };
 
@@ -9358,22 +9415,22 @@ const struct tilepro_operand tilepro_operands[43] =
   {
     TILEPRO_OP_TYPE_REGISTER, BFD_RELOC(NONE),
     6, 0, 0, 1, 0, 0,
-    create_Dest_X0, get_Dest_X0
+    create_Dest_X1, get_Dest_X1
   },
   {
     TILEPRO_OP_TYPE_REGISTER, BFD_RELOC(NONE),
     6, 0, 1, 0, 0, 0,
-    create_SrcA_X0, get_SrcA_X0
+    create_SrcA_X1, get_SrcA_X1
   },
   {
     TILEPRO_OP_TYPE_REGISTER, BFD_RELOC(NONE),
     6, 0, 0, 1, 0, 0,
-    create_Dest_X1, get_Dest_X1
+    create_Dest_X0, get_Dest_X0
   },
   {
     TILEPRO_OP_TYPE_REGISTER, BFD_RELOC(NONE),
     6, 0, 1, 0, 0, 0,
-    create_SrcA_X1, get_SrcA_X1
+    create_SrcA_X0, get_SrcA_X0
   },
   {
     TILEPRO_OP_TYPE_REGISTER, BFD_RELOC(NONE),