From c3fdecfaa64bea3a963935ddf00818808f96215e Mon Sep 17 00:00:00 2001 From: RuoyuZhou Date: Fri, 31 Jul 2026 02:47:47 +0800 Subject: [PATCH 1/6] Make QEMU execute the exact 0.57.1 Tile transaction contract The emulator decoded an incomplete legacy surface and exposed descriptor, capacity, ACC, and source-lifetime effects before legality was known. Import the exact 761-form ISA map, implement canonical 98/9/13 identities, and route Tile commit through fail-closed preflight, dry-run, snapshot, and publication gates with real CPULinxState atomicity evidence. Constraint: Generic or retired Tile decodes must never alias a canonical 0.57.1 operation Rejected: Materialize outputs during B.IOT append | later legality faults would leak architectural state Rejected: Throw from TEPL dry-run arithmetic | longjmp would bypass snapshot restoration Confidence: high Scope-risk: broad Directive: Keep all faultable Tile legality ahead of publication and extend transaction tests for every new state effect Tested: linx32/linx64 builds; 728/728 mnemonics and 761/761 forms; exact 98/9/13 inventory; 20 Python tests; 9 transaction subtests; 11 PTO-Kernel CTests; opcode metadata sync; git diff check Not-tested: non-S32 CUBE hardware numeric conformance, explicitly tracked as unproven --- target/linx/cpu.c | 66 +- target/linx/cpu.h | 14 +- target/linx/helper.c | 3324 +++++++++++++---- target/linx/insn16.decode | 16 +- target/linx/insn32.decode | 174 +- target/linx/insn64.decode | 101 + target/linx/linx_opcode_ids_gen.h | 1388 +++---- target/linx/linx_opcode_meta_gen.h | 1535 ++++---- target/linx/tile_isa_057.h | 118 + target/linx/tile_tepl_preflight.h | 184 + target/linx/tile_transaction.h | 56 + target/linx/translate.c | 414 +- tests/linxisa/pto-0571-cube-profile-gaps.json | 35 + .../test_v0571_tile_execution_coverage.py | 88 + ...test_v0571_tile_numeric_layout_contract.py | 118 + tests/linxisa/test_v0571_tile_raw_contract.py | 102 + tests/linxisa/test_v057_b_iot_source_only.py | 22 +- tests/unit/meson.build | 8 + tests/unit/test-linx-tile-transaction.c | 339 ++ 19 files changed, 5798 insertions(+), 2304 deletions(-) create mode 100644 target/linx/tile_isa_057.h create mode 100644 target/linx/tile_tepl_preflight.h create mode 100644 target/linx/tile_transaction.h create mode 100644 tests/linxisa/pto-0571-cube-profile-gaps.json create mode 100644 tests/linxisa/test_v0571_tile_execution_coverage.py create mode 100644 tests/linxisa/test_v0571_tile_numeric_layout_contract.py create mode 100644 tests/linxisa/test_v0571_tile_raw_contract.py create mode 100644 tests/unit/test-linx-tile-transaction.c diff --git a/target/linx/cpu.c b/target/linx/cpu.c index 31bd7c915c40..2bd2bde611cc 100644 --- a/target/linx/cpu.c +++ b/target/linx/cpu.c @@ -2146,6 +2146,14 @@ static void linx_cpu_do_interrupt(CPUState *cs) } return; + case LINX_EXCP_TILE_FAULT: + linx_deliver_sync_trap(cs, env, last_pc, env->insn_pc_next, + LINX_TRAPNUM_BLOCK_TRAP, + true, /* argv: fault address/TPC */ + false, /* fault */ + (env->in_body != 0)); + return; + case LINX_EXCP_ILLEGAL_INST: qemu_log_mask(LOG_GUEST_ERROR, "Linx: illegal instruction at PC=0x%" PRIx64 "\n", @@ -3924,19 +3932,6 @@ static int linx_cpu_pre_save(void *opaque) } uint8_t expected_reserved[LINX_TILE_HAND_COUNT] = { 0 }; uint16_t expected_pin[LINX_TILE_HAND_COUNT * LINX_TILE_HAND_DEPTH] = { 0 }; - const uint16_t owner = 1u << (env->acr & 0xfu); - for (unsigned i = 0; i < env->tile_iot_count; i++) { - for (unsigned source = 0; source < 2; source++) { - if ((env->tile_iot_src_valid[i] & (1u << source)) != 0) { - expected_pin[env->tile_iot_src_phys[i][source]] = owner; - } - } - if (env->tile_iot_output_valid[i]) { - const unsigned tile = env->tile_iot_output_phys[i]; - expected_reserved[tile / LINX_TILE_HAND_DEPTH] |= - 1u << (tile % LINX_TILE_HAND_DEPTH); - } - } if (memcmp(expected_reserved, env->tile_hand_reserved, sizeof(expected_reserved)) != 0 || memcmp(expected_pin, env->tile_pin_owner, @@ -3951,6 +3946,11 @@ static bool linx_cpu_post_load(void *opaque, int version_id, Error **errp) LinxCPU *cpu = opaque; CPULinxState *env = &cpu->env; + if (version_id >= 12 && version_id < 16) { + memcpy(env->tile_reg_capacity, env->tile_reg_bytes, + sizeof(env->tile_reg_capacity)); + } + if (version_id < 12) { /* v11 carried no tile backing or allocator state. */ env->tile_func = 0; @@ -3992,6 +3992,7 @@ static bool linx_cpu_post_load(void *opaque, int version_id, Error **errp) env->tile_acc_src0 = 0; env->tile_acc_src1 = 0; memset(env->tile_reg, 0, sizeof(env->tile_reg)); + memset(env->tile_reg_capacity, 0, sizeof(env->tile_reg_capacity)); memset(env->tile_reg_bytes, 0, sizeof(env->tile_reg_bytes)); memset(env->tile_reg_elem_bytes, 0, sizeof(env->tile_reg_elem_bytes)); memset(env->tile_reg_dtype, 0, sizeof(env->tile_reg_dtype)); @@ -4081,9 +4082,11 @@ static bool linx_cpu_post_load(void *opaque, int version_id, Error **errp) error_setg(errp, "linx: invalid migrated tile accumulator footprint"); return false; } + uint64_t tile_capacity_in_use = 0; for (unsigned tile = 0; tile < LINX_TILE_HAND_COUNT * LINX_TILE_HAND_DEPTH; tile++) { const uint32_t bytes = env->tile_reg_bytes[tile]; + const uint32_t capacity = env->tile_reg_capacity[tile]; const uint32_t elem_bytes = env->tile_reg_elem_bytes[tile]; const uint32_t valid_cols = env->tile_reg_valid_cols[tile]; const uint32_t valid_rows = env->tile_reg_valid_rows[tile]; @@ -4091,7 +4094,9 @@ static bool linx_cpu_post_load(void *opaque, int version_id, Error **errp) const uint32_t rows = env->tile_reg_rows[tile]; const unsigned hand = tile / LINX_TILE_HAND_DEPTH; const unsigned depth = tile % LINX_TILE_HAND_DEPTH; + tile_capacity_in_use += capacity; if (bytes > LINX_TILE_MAX_BYTES || (bytes & 3u) != 0 || + capacity > LINX_TILE_PE_CAPACITY_BYTES || ((env->tile_hand_live[hand] & (1u << depth)) != 0 && bytes == 0) || (bytes != 0 && (elem_bytes == 0 || valid_cols == 0 || valid_rows == 0 || @@ -4102,6 +4107,10 @@ static bool linx_cpu_post_load(void *opaque, int version_id, Error **errp) return false; } } + if (tile_capacity_in_use > LINX_TILE_PE_CAPACITY_BYTES) { + error_setg(errp, "linx: migrated tile capacity exceeds PE limit"); + return false; + } for (unsigned hand = 0; hand < LINX_TILE_HAND_COUNT; hand++) { uint8_t seen = 0; if (env->tile_hand_count[hand] > LINX_TILE_HAND_DEPTH || @@ -4127,6 +4136,7 @@ static bool linx_cpu_post_load(void *opaque, int version_id, Error **errp) return false; } } + uint32_t planned_output_seen = 0; for (unsigned i = 0; i < LINX_TILE_MAX_IOT; i++) { if (env->tile_iot_src_valid[i] > 3 || env->tile_iot_output_valid[i] > 1) { @@ -4166,37 +4176,19 @@ static bool linx_cpu_post_load(void *opaque, int version_id, Error **errp) if (env->tile_iot_output_valid[i]) { const unsigned tile = env->tile_iot_output_phys[i]; if (tile >= LINX_TILE_HAND_COUNT * LINX_TILE_HAND_DEPTH || - (env->tile_hand_reserved[tile / LINX_TILE_HAND_DEPTH] & - (1u << (tile % LINX_TILE_HAND_DEPTH))) == 0) { + (planned_output_seen & (1u << tile)) != 0 || + (env->tile_hand_live[tile / LINX_TILE_HAND_DEPTH] & + (1u << (tile % LINX_TILE_HAND_DEPTH))) != 0) { error_setg(errp, "linx: invalid migrated tile binding %u output", i); return false; } + planned_output_seen |= 1u << tile; } } uint8_t expected_reserved[LINX_TILE_HAND_COUNT] = { 0 }; uint16_t expected_pin[LINX_TILE_HAND_COUNT * LINX_TILE_HAND_DEPTH] = { 0 }; - const uint16_t owner = 1u << (env->acr & 0xfu); - for (unsigned i = 0; i < env->tile_iot_count; i++) { - for (unsigned source = 0; source < 2; source++) { - if ((env->tile_iot_src_valid[i] & (1u << source)) != 0) { - const unsigned tile = env->tile_iot_src_phys[i][source]; - expected_pin[tile] = owner; - } - } - if (env->tile_iot_output_valid[i]) { - const unsigned tile = env->tile_iot_output_phys[i]; - const unsigned hand = tile / LINX_TILE_HAND_DEPTH; - const uint8_t bit = 1u << (tile % LINX_TILE_HAND_DEPTH); - if (expected_reserved[hand] & bit) { - error_setg(errp, - "linx: duplicate migrated tile output owner"); - return false; - } - expected_reserved[hand] |= bit; - } - } if (memcmp(expected_reserved, env->tile_hand_reserved, sizeof(expected_reserved)) != 0 || memcmp(expected_pin, env->tile_pin_owner, @@ -4220,7 +4212,7 @@ static bool linx_cpu_post_load(void *opaque, int version_id, Error **errp) static const VMStateDescription vmstate_linx_cpu = { .name = "linx_cpu", - .version_id = 15, + .version_id = 16, .minimum_version_id = 11, .pre_save = linx_cpu_pre_save, .post_load_errp = linx_cpu_post_load, @@ -4305,6 +4297,8 @@ static const VMStateDescription vmstate_linx_cpu = { VMSTATE_UINT32_2DARRAY_V(env.tile_reg, LinxCPU, LINX_TILE_HAND_COUNT * LINX_TILE_HAND_DEPTH, LINX_TILE_MAX_WORDS, 12), + VMSTATE_UINT32_ARRAY_V(env.tile_reg_capacity, LinxCPU, + LINX_TILE_HAND_COUNT * LINX_TILE_HAND_DEPTH, 16), VMSTATE_UINT32_ARRAY_V(env.tile_reg_bytes, LinxCPU, LINX_TILE_HAND_COUNT * LINX_TILE_HAND_DEPTH, 12), VMSTATE_UINT8_ARRAY_V(env.tile_reg_elem_bytes, LinxCPU, diff --git a/target/linx/cpu.h b/target/linx/cpu.h index 3292a37b4ff4..fdb58fa54b9d 100644 --- a/target/linx/cpu.h +++ b/target/linx/cpu.h @@ -42,6 +42,7 @@ enum { LINX_EXCP_HW_BREAKPOINT = 8, /* Hardware breakpoint */ LINX_EXCP_HW_WATCHPOINT = 9, /* Hardware watchpoint */ LINX_EXCP_EXEC_STATE_CHECK = 10, /* ACR_ENTER target/state invalid */ + LINX_EXCP_TILE_FAULT = 11, /* Precise Tile legality/allocation fault */ }; /* @@ -223,7 +224,9 @@ typedef enum LinxTemplateKind { #define LINX_EBARG_STACK_DEPTH 8u /* Bring-up tile backing store limits (TAU). */ -#define LINX_TILE_MAX_BYTES (64u * 1024u) /* must cover >=16KB bring-up */ +#define LINX_TILE_CELL_BYTES 128u +#define LINX_TILE_PE_CAPACITY_BYTES (256u * 1024u) +#define LINX_TILE_MAX_BYTES (64u * 1024u) #define LINX_TILE_MAX_WORDS (LINX_TILE_MAX_BYTES / 4u) /* @@ -301,6 +304,10 @@ typedef struct LinxAcrBlockState { uint8_t tile_iot_src_phys[LINX_TILE_MAX_IOT][2]; uint8_t tile_iot_output_valid[LINX_TILE_MAX_IOT]; uint8_t tile_iot_output_phys[LINX_TILE_MAX_IOT]; + + /* CUBE ACC is implicit architectural state and follows its ACR. */ + uint32_t tile_acc[LINX_TILE_MAX_WORDS]; + uint32_t tile_acc_bytes; } LinxAcrBlockState; typedef struct LinxCosimRange { @@ -442,6 +449,7 @@ typedef struct CPUArchState { /* Emulated tile backing store: 4 hands x 8 depth = 32 tiles. */ uint32_t tile_reg[32][LINX_TILE_MAX_WORDS]; + uint32_t tile_reg_capacity[32]; /* architectural allocation capacity */ uint32_t tile_reg_bytes[32]; /* per-tile footprint in bytes */ uint8_t tile_reg_elem_bytes[32]; /* producer element width for sparse offsets */ uint8_t tile_reg_dtype[32]; /* canonical v0.57 producer DataType */ @@ -837,6 +845,8 @@ static inline void linx_acr_save_block_state(CPULinxState *env, uint32_t acr) s->tile_iot_output_valid[i] = env->tile_iot_output_valid[i]; s->tile_iot_output_phys[i] = env->tile_iot_output_phys[i]; } + memcpy(s->tile_acc, env->tile_acc, sizeof(s->tile_acc)); + s->tile_acc_bytes = env->tile_acc_bytes; } static inline void linx_acr_reset_block_state_for_header(CPULinxState *env, @@ -956,6 +966,8 @@ static inline void linx_acr_restore_block_state(CPULinxState *env, uint32_t acr) env->tile_iot_output_valid[i] = s->tile_iot_output_valid[i]; env->tile_iot_output_phys[i] = s->tile_iot_output_phys[i]; } + memcpy(env->tile_acc, s->tile_acc, sizeof(env->tile_acc)); + env->tile_acc_bytes = s->tile_acc_bytes; } /* diff --git a/target/linx/helper.c b/target/linx/helper.c index 5a2116d7c03e..62048c621538 100644 --- a/target/linx/helper.c +++ b/target/linx/helper.c @@ -5,11 +5,22 @@ */ #include "qemu/osdep.h" +#if __has_include("linx/model/emulator/minst_record_c.h") #include "linx/model/emulator/minst_record_c.h" +#else +/* Keep the trace writer buildable when the optional model SDK is absent. */ +enum { + LINX_MINST_OPERAND_INVALID = 0, + LINX_MINST_OPERAND_REGISTER = 1, +}; +#endif #include "qemu/bswap.h" #include "cpu.h" +#include "tile_transaction.h" +#include "tile_tepl_preflight.h" #include "trace.h" #include "opcode_meta.h" +#include "tile_isa_057.h" #include "exec/helper-proto.h" #include "exec/log.h" #include "accel/tcg/cpu-ldst.h" @@ -9116,16 +9127,22 @@ enum { LINX_TMA_MGATHER_MASK = 6, LINX_TMA_MSCATTER_MASK = 7, LINX_TMA_MGATHER_CAS = 8, - LINX_TMA_TCVT_COMPAT = 31, }; enum { - LINX_CUBE_MAMULB = 0, - LINX_CUBE_MAMULB_BIAS = 1, - LINX_CUBE_MAMULB_ACC = 2, + LINX_CUBE_TMATMUL = 0, + LINX_CUBE_TMATMUL_BIAS = 1, + LINX_CUBE_TMATMUL_ACC = 2, + LINX_CUBE_TMATMUL_MX = 4, + LINX_CUBE_TMATMUL_MX_BIAS = 5, + LINX_CUBE_TMATMUL_MX_ACC = 6, LINX_CUBE_ACCCVT = 8, LINX_CUBE_TGEMV = 16, + LINX_CUBE_TGEMV_BIAS = 17, LINX_CUBE_TGEMV_ACC = 18, + LINX_CUBE_TGEMV_MX = 20, + LINX_CUBE_TGEMV_MX_BIAS = 21, + LINX_CUBE_TGEMV_MX_ACC = 22, }; enum { @@ -9277,21 +9294,6 @@ static bool linx_tile_resolve_source(const CPULinxState *env, return true; } -static bool linx_tile_pin_source(CPULinxState *env, unsigned tile) -{ - const uint16_t owner = 1u << (env->acr & 0xfu); - - if (tile >= LINX_TILE_HAND_COUNT * LINX_TILE_HAND_DEPTH) { - return false; - } - const uint16_t pinned = env->tile_pin_owner[tile]; - if (pinned != 0 && pinned != owner) { - return false; - } - env->tile_pin_owner[tile] = owner; - return true; -} - static void linx_tile_unpin_bindings(CPULinxState *env) { const uint16_t owner = 1u << (env->acr & 0xfu); @@ -9340,9 +9342,7 @@ static void linx_tile_release_source(uint8_t live[LINX_TILE_HAND_COUNT], static bool linx_tile_size_code_valid(unsigned size_code) { - const uint64_t bytes = size_code < 60u ? 1ull << (size_code + 4u) : 0; - - return bytes != 0 && bytes <= LINX_TILE_MAX_BYTES && (bytes & 3u) == 0; + return size_code >= 3u && size_code <= 9u; } typedef enum LinxTileLayout { @@ -9424,28 +9424,81 @@ static inline LinxTileFormatDesc linx_tile_decode_tma_format(uint32_t arg, return d; } +static inline LinxTileFormatDesc linx_tile_decode_datr_layout(uint32_t layout) +{ + LinxTileFormatDesc d = { .valid = true }; + + switch (layout & 0x1fu) { + case 0u: d.src = LINX_TILE_LAYOUT_ND; d.dst = LINX_TILE_LAYOUT_ND; break; + case 1u: d.src = LINX_TILE_LAYOUT_ND; d.dst = LINX_TILE_LAYOUT_DN; break; + case 3u: d.src = LINX_TILE_LAYOUT_ND; d.dst = LINX_TILE_LAYOUT_ZN; break; + case 4u: d.src = LINX_TILE_LAYOUT_ND; d.dst = LINX_TILE_LAYOUT_NZ; break; + case 6u: d.src = LINX_TILE_LAYOUT_DN; d.dst = LINX_TILE_LAYOUT_ND; break; + case 8u: d.src = LINX_TILE_LAYOUT_DN; d.dst = LINX_TILE_LAYOUT_ZN; break; + case 9u: d.src = LINX_TILE_LAYOUT_DN; d.dst = LINX_TILE_LAYOUT_NZ; break; + case 17u: d.src = LINX_TILE_LAYOUT_ZN; d.dst = LINX_TILE_LAYOUT_ND; break; + case 18u: d.src = LINX_TILE_LAYOUT_ZN; d.dst = LINX_TILE_LAYOUT_DN; break; + case 20u: d.src = LINX_TILE_LAYOUT_ZN; d.dst = LINX_TILE_LAYOUT_NZ; break; + case 27u: d.src = LINX_TILE_LAYOUT_NZ; d.dst = LINX_TILE_LAYOUT_ND; break; + case 28u: d.src = LINX_TILE_LAYOUT_NZ; d.dst = LINX_TILE_LAYOUT_DN; break; + case 30u: d.src = LINX_TILE_LAYOUT_NZ; d.dst = LINX_TILE_LAYOUT_ZN; break; + default: + d.valid = false; + break; + } + return d; +} + +static inline LinxTileFormatDesc linx_tile_effective_transfer_format( + const CPULinxState *env, LinxTMATransferDir dir) +{ + const uint32_t datr_layout = (env->tile_attr_raw >> 2) & 0x1fu; + if (datr_layout != 0u) { + LinxTileFormatDesc d = linx_tile_decode_datr_layout(datr_layout); + if (dir == LINX_TMA_TR_TO_GM) { + LinxTileLayout tmp = d.src; + d.src = d.dst; + d.dst = tmp; + } + return d; + } + return linx_tile_decode_tma_format(env->tile_arg_format, dir); +} + static inline unsigned linx_tile_dtype_elem_bytes(uint32_t dtype) { switch (dtype & 0x1fu) { - case 2u: /* FP16 */ - case 4u: /* legacy FP16/BF16-like bring-up encoding */ - case 6u: /* BF16 */ + case 0u: /* FP64 */ + case 16u: /* S64 */ + case 24u: /* U64 */ + return 8u; + case 1u: /* FP32 */ + case 2u: /* TF32 */ + case 3u: /* HF32 */ + case 17u: /* S32 */ + case 25u: /* U32 */ + return 4u; + case 4u: /* FP16 */ + case 5u: /* BF16 */ case 18u: /* INT16 */ case 26u: /* UINT16 */ return 2u; - case 3u: /* FP8 */ - case 7u: /* FPL8 */ + case 6u: /* HiF8 */ + case 7u: /* E4M3 */ + case 8u: /* E5M2 */ + case 9u: /* E3M2 */ + case 10u: /* E2M3 */ + case 11u: /* E2M1X2 */ + case 12u: /* E1M2X2 */ + case 13u: /* E8M0 */ + case 14u: /* HiF4X2 */ case 19u: /* INT8 */ + case 20u: /* S4X2 */ case 27u: /* UINT8 */ + case 28u: /* U4X2 */ return 1u; - case 1u: /* FP32 */ - case 17u: /* INT32 */ - case 25u: /* UINT32 */ - case 0u: /* FP64 compatibility remains word-backed in this model */ - case 16u: /* INT64 compatibility remains word-backed in this model */ - case 24u: /* UINT64 compatibility remains word-backed in this model */ default: - return 4u; + return 0u; } } @@ -9471,8 +9524,8 @@ static bool linx_tile_set_shape(CPULinxState *env, unsigned tile, uint32_t valid_cols, uint32_t valid_rows, uint32_t cols, uint32_t rows) { - if (tile >= 32u || valid_cols == 0u || valid_rows == 0u || cols == 0u || - rows == 0u || valid_cols > cols || valid_rows > rows || + if (tile >= 32u || cols == 0u || rows == 0u || + valid_cols > cols || valid_rows > rows || valid_cols > UINT16_MAX || valid_rows > UINT16_MAX || cols > UINT16_MAX || rows > UINT16_MAX) { return false; @@ -9511,6 +9564,27 @@ static bool linx_tile_set_block_shape(CPULinxState *env, unsigned tile, elems / cols); } +static bool linx_tile_block_shape_valid(const CPULinxState *env, + uint32_t bytes, + unsigned elem_bytes) +{ + uint32_t valid_cols = (uint32_t)(env->lb[0] & 0xffffu); + uint32_t valid_rows = (uint32_t)(env->lb[1] & 0xffffu); + uint32_t cols = (uint32_t)(env->lb[2] & 0xffffu); + + if (elem_bytes == 0u || bytes == 0u || bytes % elem_bytes != 0u) { + return false; + } + const uint32_t elems = bytes / elem_bytes; + valid_cols = valid_cols == 0u ? elems : valid_cols; + valid_rows = valid_rows == 0u ? 1u : valid_rows; + cols = cols == 0u ? valid_cols : cols; + return cols != 0u && elems % cols == 0u && + valid_cols <= cols && valid_rows <= elems / cols && + valid_cols <= UINT16_MAX && valid_rows <= UINT16_MAX && + cols <= UINT16_MAX && elems / cols <= UINT16_MAX; +} + static void linx_tile_copy_shape(CPULinxState *env, unsigned dst, unsigned src) { @@ -9520,16 +9594,6 @@ static void linx_tile_copy_shape(CPULinxState *env, unsigned dst, env->tile_reg_rows[dst] = env->tile_reg_rows[src]; } -static bool linx_tile_shape_covers(const CPULinxState *env, unsigned tile, - uint32_t valid_cols, uint32_t valid_rows, - uint32_t cols, uint32_t rows) -{ - return tile < 32u && env->tile_reg_valid_cols[tile] >= valid_cols && - env->tile_reg_valid_rows[tile] >= valid_rows && - env->tile_reg_cols[tile] == cols && - env->tile_reg_rows[tile] >= rows; -} - static inline uint32_t linx_tile_pad_value(uint32_t pad_mode, uint32_t dtype, unsigned elem_bytes, uint32_t seed) { @@ -9568,6 +9632,35 @@ static inline uint32_t linx_tile_pad_value(uint32_t pad_mode, uint32_t dtype, return value; } +static inline uint64_t linx_tile_pad_value64(uint32_t pad_mode, + uint32_t dtype, + unsigned elem_bytes, + uint32_t seed) +{ + const uint32_t dt = dtype & 0x1fu; + + if (elem_bytes != 8u) { + return linx_tile_pad_value(pad_mode, dtype, elem_bytes, seed); + } + switch (pad_mode & 0x3u) { + case 1u: + return 0; + case 2u: + if (dt == 0u) { + return UINT64_C(0x7fefffffffffffff); + } + return dt == 16u ? INT64_MAX : UINT64_MAX; + case 3u: + if (dt == 0u) { + return UINT64_C(0xffefffffffffffff); + } + return dt == 16u ? (uint64_t)INT64_MIN : 0; + default: + return (UINT64_C(6364136223846793005) * seed) + + UINT64_C(1442695040888963407); + } +} + static inline bool linx_tile_linear_index(LinxTileLayout layout, unsigned outer, unsigned inner, unsigned elem_bytes, unsigned o, unsigned i, uint32_t *idx_out) @@ -10995,6 +11088,33 @@ static inline uint32_t linx_tile_mem_read(CPULinxState *env, uint64_t addr, return v; } +static inline uint64_t linx_tile_mem_read64(CPULinxState *env, uint64_t addr, + unsigned elem_bytes) +{ + hwaddr pa; + MemTxResult result = MEMTX_OK; + uint64_t value; + + if (elem_bytes != 8u) { + return linx_tile_mem_read(env, addr, elem_bytes); + } + if (!linx_iommu_translate(env, addr, false, &pa)) { + env->pending_trap_arg0 = addr; + env->pending_trap_cause = + (LINX_TRAPCAUSE_CAT_IOMMU_PF << 4) | LINX_TRAPCAUSE_ACC_LOAD; + helper_raise_exception(env, LINX_EXCP_LOAD_ACCESS_FAULT); + } + value = address_space_ldq_le(&address_space_memory, pa, + MEMTXATTRS_UNSPECIFIED, &result); + if (result != MEMTX_OK) { + env->pending_trap_arg0 = addr; + env->pending_trap_cause = + (LINX_TRAPCAUSE_CAT_IOMMU_PF << 4) | LINX_TRAPCAUSE_ACC_LOAD; + helper_raise_exception(env, LINX_EXCP_LOAD_ACCESS_FAULT); + } + return value; +} + static inline void linx_tile_mem_write(CPULinxState *env, uint64_t addr, unsigned elem_bytes, uint32_t v) { @@ -11030,22 +11150,75 @@ static inline void linx_tile_mem_write(CPULinxState *env, uint64_t addr, } } +static inline void linx_tile_mem_write64(CPULinxState *env, uint64_t addr, + unsigned elem_bytes, uint64_t value) +{ + hwaddr pa; + MemTxResult result = MEMTX_OK; + + if (elem_bytes != 8u) { + linx_tile_mem_write(env, addr, elem_bytes, (uint32_t)value); + return; + } + if (!linx_iommu_translate(env, addr, true, &pa)) { + env->pending_trap_arg0 = addr; + env->pending_trap_cause = + (LINX_TRAPCAUSE_CAT_IOMMU_PF << 4) | LINX_TRAPCAUSE_ACC_STORE; + helper_raise_exception(env, LINX_EXCP_STORE_ACCESS_FAULT); + } + address_space_stq_le(&address_space_memory, pa, value, + MEMTXATTRS_UNSPECIFIED, &result); + if (result != MEMTX_OK) { + env->pending_trap_arg0 = addr; + env->pending_trap_cause = + (LINX_TRAPCAUSE_CAT_IOMMU_PF << 4) | LINX_TRAPCAUSE_ACC_STORE; + helper_raise_exception(env, LINX_EXCP_STORE_ACCESS_FAULT); + } +} + static inline uint32_t linx_tile_mem_cmpxchg(CPULinxState *env, uint64_t addr, unsigned elem_bytes, uint32_t cmpv, uint32_t newv) { - const uint32_t old = linx_tile_mem_read(env, addr, elem_bytes); - uint32_t mask = UINT32_MAX; + hwaddr pa; + if (!linx_iommu_translate(env, addr, true, &pa)) { + env->pending_trap_arg0 = addr; + env->pending_trap_cause = + (LINX_TRAPCAUSE_CAT_IOMMU_PF << 4) | LINX_TRAPCAUSE_ACC_STORE; + helper_raise_exception(env, LINX_EXCP_STORE_ACCESS_FAULT); + } + (void)pa; /* Translation is the architectural preflight; atomics use VA. */ - if (elem_bytes == 1u) { - mask = 0xffu; - } else if (elem_bytes == 2u) { - mask = 0xffffu; + const bool acquire = ((env->tile_attr_raw >> 18) & 1u) != 0u; + const bool release = ((env->tile_attr_raw >> 21) & 1u) != 0u; + uint32_t old; + if (release) { + smp_mb__before_rmw(); + } + switch (elem_bytes) { + case 1u: + old = cpu_atomic_cmpxchgb_mmu((CPUArchState *)env, addr, + (uint8_t)cmpv, (uint8_t)newv, + linx_oi_le(MO_UB), GETPC()); + break; + case 2u: + old = cpu_atomic_cmpxchgw_le_mmu((CPUArchState *)env, addr, + (uint16_t)cmpv, (uint16_t)newv, + linx_oi_le(MO_UW), GETPC()); + break; + case 4u: + old = cpu_atomic_cmpxchgl_le_mmu((CPUArchState *)env, addr, + cmpv, newv, + linx_oi_le(MO_UL), GETPC()); + break; + default: + helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); + return 0; } - if ((old & mask) == (cmpv & mask)) { - linx_tile_mem_write(env, addr, elem_bytes, newv & mask); + if (acquire) { + smp_mb__after_rmw(); } - return old & mask; + return old; } static inline bool linx_tile_set_elem(CPULinxState *env, unsigned tile, @@ -11072,6 +11245,24 @@ static inline bool linx_tile_set_elem(CPULinxState *env, unsigned tile, } } +static inline bool linx_tile_set_elem64(CPULinxState *env, unsigned tile, + uint32_t elem_idx, + unsigned elem_bytes, uint64_t value) +{ + uint8_t *buf = (uint8_t *)env->tile_reg[tile]; + const size_t off = (size_t)elem_idx * elem_bytes; + + if (off + elem_bytes > LINX_TILE_MAX_BYTES) { + return false; + } + if (elem_bytes == 8u) { + stq_le_p(buf + off, value); + return true; + } + return linx_tile_set_elem(env, tile, elem_idx, elem_bytes, + (uint32_t)value); +} + static inline bool linx_tile_get_elem(const CPULinxState *env, unsigned tile, uint32_t elem_idx, unsigned elem_bytes, uint32_t *value_out) @@ -11106,6 +11297,9 @@ static inline bool linx_tile_get_elem64(const CPULinxState *env, unsigned tile, return false; } switch (elem_bytes) { + case 1u: + *value_out = (uint64_t)buf[off]; + return true; case 2u: *value_out = (uint64_t)lduw_le_p(buf + off); return true; @@ -11138,6 +11332,132 @@ static inline uint32_t linx_tile_f32_as_word(float value) return cvt.u; } +static inline double linx_tile_qword_as_f64(uint64_t word) +{ + union { + uint64_t u; + double f; + } cvt = { .u = word }; + return cvt.f; +} + +static inline uint64_t linx_tile_f64_as_qword(double value) +{ + union { + double f; + uint64_t u; + } cvt = { .f = value }; + return cvt.u; +} + +static inline uint64_t linx_tile_canonicalize_nan64(uint64_t value, + uint32_t dtype) +{ + if ((dtype & 0x1fu) == 0u && + (value & UINT64_C(0x7ff0000000000000)) == + UINT64_C(0x7ff0000000000000) && + (value & UINT64_C(0x000fffffffffffff)) != 0u) { + return UINT64_C(0x7ff8000000000000); + } + return value; +} + +static uint64_t linx_tile_tepl_binary_qword(CPULinxState *env, uint32_t op, + uint32_t dtype, uint64_t lhs, + uint64_t rhs) +{ + if ((dtype & 0x1fu) == 0u) { + double a = linx_tile_qword_as_f64(lhs); + double b = linx_tile_qword_as_f64(rhs); + double out; + + if (((env->tile_attr_raw >> 17) & 1u) != 0u) { + a = linx_tile_qword_as_f64(linx_tile_canonicalize_nan64(lhs, + dtype)); + b = linx_tile_qword_as_f64(linx_tile_canonicalize_nan64(rhs, + dtype)); + } + switch (op) { + case 0x000u: case 0x020u: out = a + b; break; + case 0x001u: case 0x021u: out = a - b; break; + case 0x002u: case 0x022u: out = a * b; break; + case 0x003u: case 0x023u: out = a / b; break; + case 0x004u: case 0x024u: + out = isnan(a) ? (isnan(b) ? NAN : b) : + isnan(b) ? a : + (a == 0.0 && b == 0.0) ? 0.0 : (a > b ? a : b); + break; + case 0x005u: case 0x025u: + out = isnan(a) ? (isnan(b) ? NAN : b) : + isnan(b) ? a : + (a == 0.0 && b == 0.0) ? -0.0 : (a < b ? a : b); + break; + case 0x030u: case 0x032u: + if (b == 0.0) { + return 0u; + } + out = a - floor(a / b) * b; + break; + default: return 0u; + } + return linx_tile_canonicalize_nan64(linx_tile_f64_as_qword(out), + dtype); + } + + switch (op) { + case 0x000u: case 0x020u: return lhs + rhs; + case 0x001u: case 0x021u: return lhs - rhs; + case 0x002u: case 0x022u: return lhs * rhs; + case 0x003u: case 0x023u: + if (rhs == 0u) return 0u; + if ((dtype & 0x1fu) == 16u) { + const int64_t a = (int64_t)lhs, b = (int64_t)rhs; + return a == INT64_MIN && b == -1 ? (uint64_t)INT64_MIN + : (uint64_t)(a / b); + } + return lhs / rhs; + case 0x004u: case 0x024u: + return (dtype & 0x1fu) == 16u + ? ((int64_t)lhs > (int64_t)rhs ? lhs : rhs) + : (lhs > rhs ? lhs : rhs); + case 0x005u: case 0x025u: + return (dtype & 0x1fu) == 16u + ? ((int64_t)lhs < (int64_t)rhs ? lhs : rhs) + : (lhs < rhs ? lhs : rhs); + case 0x006u: case 0x026u: return lhs & rhs; + case 0x007u: case 0x027u: return lhs | rhs; + case 0x008u: case 0x028u: return lhs ^ rhs; + case 0x009u: case 0x029u: return lhs << (rhs & 63u); + case 0x00au: case 0x02au: + return (dtype & 0x1fu) == 16u + ? (uint64_t)((int64_t)lhs >> (rhs & 63u)) + : lhs >> (rhs & 63u); + case 0x030u: case 0x032u: + if (rhs == 0u) return 0u; + if ((dtype & 0x1fu) == 16u) { + const int64_t a = (int64_t)lhs, b = (int64_t)rhs; + if (a == INT64_MIN && b == -1) return 0u; + int64_t rem = a % b; + if (rem != 0 && ((rem < 0) != (b < 0))) rem += b; + return (uint64_t)rem; + } + return lhs % rhs; + default: return 0u; + } +} + +static bool linx_tile_tepl_binary_qword_checked( + CPULinxState *env, uint32_t op, uint32_t dtype, uint64_t lhs, + uint64_t rhs, uint64_t *result) +{ + if ((op == 0x030u || op == 0x032u) && + !linx_tile_tepl_remainder_divisor_nonzero(dtype, 8u, rhs)) { + return false; + } + *result = linx_tile_tepl_binary_qword(env, op, dtype, lhs, rhs); + return true; +} + static inline bool linx_tile_dtype_is_signed(uint32_t dtype) { const uint32_t dt = dtype & 0x1fu; @@ -11162,15 +11482,15 @@ static inline float linx_tile_value_as_f32(CPULinxState *env, uint32_t value, { const uint32_t type = dtype & 0x1fu; - if (type == 1u && elem_bytes == 4u) { + if ((type == 1u || type == 2u || type == 3u) && elem_bytes == 4u) { return linx_tile_word_as_f32(value); } - if (type == 2u && elem_bytes == 2u) { + if (type == 4u && elem_bytes == 2u) { const float32 converted = float16_to_float32( make_float16((uint16_t)value), true, &env->fp_status); return linx_tile_word_as_f32(float32_val(converted)); } - if (type == 6u && elem_bytes == 2u) { + if (type == 5u && elem_bytes == 2u) { const float32 converted = bfloat16_to_float32( (bfloat16)(uint16_t)value, &env->fp_status); return linx_tile_word_as_f32(float32_val(converted)); @@ -11181,51 +11501,143 @@ static inline float linx_tile_value_as_f32(CPULinxState *env, uint32_t value, return (float)value; } +static inline uint32_t linx_tile_round_fp32_carrier(uint32_t value, + uint32_t dtype); + +static double linx_tile_round_integral(double value, uint32_t mode) +{ + const double lower = floor(value); + const double fraction = value - lower; + + switch (mode & 0x7u) { + case 0u: /* operation default: RNE */ + case 1u: /* RNE */ + if (fraction < 0.5) { + return lower; + } + if (fraction > 0.5) { + return lower + 1.0; + } + return fmod(fabs(lower), 2.0) == 0.0 ? lower : lower + 1.0; + case 2u: /* RTZ */ + return trunc(value); + case 3u: /* RDN */ + return floor(value); + case 4u: /* RUP */ + return ceil(value); + case 5u: /* RNA */ + return value < 0.0 ? ceil(value - 0.5) : floor(value + 0.5); + case 6u: { /* RTO */ + double rounded = trunc(value); + if (rounded != value && fmod(fabs(rounded), 2.0) == 0.0) { + rounded += value < 0.0 ? -1.0 : 1.0; + } + return rounded; + } + case 7u: /* RHB: halfway toward positive infinity */ + return floor(value + 0.5); + default: + return value; + } +} + static inline uint32_t linx_tile_f32_as_dtype(CPULinxState *env, float value, uint32_t dtype, unsigned elem_bytes) { const uint32_t type = dtype & 0x1fu; + const bool sat = ((env->tile_attr_raw >> 28) & 1u) != 0u; + const uint32_t rmode = (env->tile_attr_raw >> 25) & 0x7u; - if (type == 1u && elem_bytes == 4u) { - return linx_tile_f32_as_word(value); + if ((type == 1u || type == 2u || type == 3u) && elem_bytes == 4u) { + if (sat && isinf(value)) { + value = signbit(value) ? -FLT_MAX : FLT_MAX; + } + return linx_tile_round_fp32_carrier(linx_tile_f32_as_word(value), + dtype); } - if (type == 2u && elem_bytes == 2u) { - return float16_val(float32_to_float16( + if (type == 4u && elem_bytes == 2u) { + uint32_t result = float16_val(float32_to_float16( make_float32(linx_tile_f32_as_word(value)), true, &env->fp_status)); + if (sat && (result & 0x7fffu) == 0x7c00u) { + result = (result & 0x8000u) | 0x7bffu; + } + return result; } - if (type == 6u && elem_bytes == 2u) { - return (uint16_t)float32_to_bfloat16( + if (type == 5u && elem_bytes == 2u) { + uint32_t result = (uint16_t)float32_to_bfloat16( make_float32(linx_tile_f32_as_word(value)), &env->fp_status); + if (sat && (result & 0x7fffu) == 0x7f80u) { + result = (result & 0x8000u) | 0x7f7fu; + } + return result; } + const double rounded = linx_tile_round_integral((double)value, rmode); if (linx_tile_dtype_is_signed(dtype)) { + const double minimum = elem_bytes == 1u ? -128.0 : + elem_bytes == 2u ? -32768.0 : -2147483648.0; + const double maximum = elem_bytes == 1u ? 127.0 : + elem_bytes == 2u ? 32767.0 : 2147483647.0; + if (isnan(value)) { + return sat ? 0u : (elem_bytes == 1u ? 0x80u : + elem_bytes == 2u ? 0x8000u : 0x80000000u); + } + if (rounded < minimum || rounded > maximum) { + if (!sat) { + return elem_bytes == 1u ? 0x80u : + elem_bytes == 2u ? 0x8000u : 0x80000000u; + } + if (rounded <= minimum) { + return elem_bytes == 1u ? 0x80u : + elem_bytes == 2u ? 0x8000u : 0x80000000u; + } + return elem_bytes == 1u ? 0x7fu : + elem_bytes == 2u ? 0x7fffu : 0x7fffffffu; + } else { + value = (float)rounded; + } if (elem_bytes == 1u) { - value = MAX(-128.0f, MIN(127.0f, value)); - return (uint8_t)(int8_t)lrintf(value); + return (uint8_t)(int8_t)value; } if (elem_bytes == 2u) { - value = MAX(-32768.0f, MIN(32767.0f, value)); - return (uint16_t)(int16_t)lrintf(value); + return (uint16_t)(int16_t)value; + } + return (uint32_t)(int32_t)value; + } + const double maximum = elem_bytes == 1u ? 255.0 : + elem_bytes == 2u ? 65535.0 : 4294967295.0; + if (isnan(value)) { + return sat ? 0u : (elem_bytes == 1u ? 0xffu : + elem_bytes == 2u ? 0xffffu : 0xffffffffu); + } + if (rounded < 0.0 || rounded > maximum) { + if (!sat) { + return elem_bytes == 1u ? 0xffu : + elem_bytes == 2u ? 0xffffu : 0xffffffffu; + } + if (rounded <= 0.0) { + return 0u; } - return (uint32_t)(int32_t)lrintf(value); + return elem_bytes == 1u ? 0xffu : + elem_bytes == 2u ? 0xffffu : 0xffffffffu; + } else { + value = (float)rounded; } if (elem_bytes == 1u) { - value = MAX(0.0f, MIN(255.0f, value)); - return (uint8_t)lrintf(value); + return (uint8_t)value; } if (elem_bytes == 2u) { - value = MAX(0.0f, MIN(65535.0f, value)); - return (uint16_t)lrintf(value); + return (uint16_t)value; } - return (uint32_t)llrintf(value); + return (uint32_t)(uint64_t)(double)value; } static inline uint32_t linx_tile_scalar_as_dtype(uint64_t scalar, uint32_t dtype, unsigned elem_bytes) { - if ((dtype & 0x1fu) == 1u) { + if ((dtype & 0x1fu) >= 1u && (dtype & 0x1fu) <= 3u) { return (uint32_t)scalar; } if (elem_bytes == 1u) { @@ -11237,13 +11649,45 @@ static inline uint32_t linx_tile_scalar_as_dtype(uint64_t scalar, return (uint32_t)scalar; } +static inline uint32_t linx_tile_canonicalize_nan(uint32_t value, + uint32_t dtype); + +static inline uint32_t linx_tile_round_fp32_carrier(uint32_t value, + uint32_t dtype) +{ + const unsigned keep = (dtype & 0x1fu) == 2u ? 10u : 11u; + const unsigned drop = 23u - keep; + const uint32_t exponent = value & 0x7f800000u; + const uint32_t discarded_mask = (1u << drop) - 1u; + const uint32_t halfway = 1u << (drop - 1u); + const uint32_t discarded = value & discarded_mask; + uint32_t rounded = value & ~discarded_mask; + + if ((dtype & 0x1fu) != 2u && (dtype & 0x1fu) != 3u) { + return value; + } + if (exponent == 0x7f800000u) { + return linx_tile_canonicalize_nan(value, dtype); + } + if (discarded > halfway || + (discarded == halfway && ((rounded >> drop) & 1u) != 0u)) { + rounded += 1u << drop; + } + return rounded; +} + static inline uint32_t linx_tile_tepl_binary_word(CPULinxState *env, uint32_t op, uint32_t dtype, uint32_t lhs, uint32_t rhs) { const unsigned elem_bytes = linx_tile_dtype_elem_bytes(dtype); - if ((dtype & 0x1fu) == 1u) { + if (((env->tile_attr_raw >> 17) & 1u) != 0u) { + lhs = linx_tile_canonicalize_nan(lhs, dtype); + rhs = linx_tile_canonicalize_nan(rhs, dtype); + } + + if ((dtype & 0x1fu) >= 1u && (dtype & 0x1fu) <= 3u) { const float a = linx_tile_word_as_f32(lhs); const float b = linx_tile_word_as_f32(rhs); float out = 0.0f; @@ -11263,29 +11707,47 @@ static inline uint32_t linx_tile_tepl_binary_word(CPULinxState *env, break; case 0x003u: case 0x023u: - out = b == 0.0f ? 0.0f : a / b; + out = a / b; break; case 0x004u: case 0x024u: - out = a > b ? a : b; + if (isnan(a)) { + out = isnan(b) ? NAN : b; + } else if (isnan(b)) { + out = a; + } else if (a == 0.0f && b == 0.0f) { + out = 0.0f; /* maximum chooses +0 */ + } else { + out = a > b ? a : b; + } break; case 0x005u: case 0x025u: - out = a < b ? a : b; + if (isnan(a)) { + out = isnan(b) ? NAN : b; + } else if (isnan(b)) { + out = a; + } else if (a == 0.0f && b == 0.0f) { + out = -0.0f; /* minimum chooses -0 */ + } else { + out = a < b ? a : b; + } break; case 0x030u: case 0x032u: if (b == 0.0f) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); + return 0u; } out = a - floorf(a / b) * b; break; default: return 0; } - return linx_tile_f32_as_word(out); + return linx_tile_round_fp32_carrier( + linx_tile_canonicalize_nan(linx_tile_f32_as_word(out), dtype), + dtype); } - if ((dtype & 0x1fu) == 2u) { + if ((dtype & 0x1fu) == 4u) { const float16 a = make_float16((uint16_t)lhs); const float16 b = make_float16((uint16_t)rhs); float16 out; @@ -11318,9 +11780,9 @@ static inline uint32_t linx_tile_tepl_binary_word(CPULinxState *env, default: return 0u; } - return float16_val(out); + return linx_tile_canonicalize_nan(float16_val(out), dtype); } - if ((dtype & 0x1fu) == 6u) { + if ((dtype & 0x1fu) == 5u) { const bfloat16 a = (bfloat16)(uint16_t)lhs; const bfloat16 b = (bfloat16)(uint16_t)rhs; bfloat16 out; @@ -11353,7 +11815,7 @@ static inline uint32_t linx_tile_tepl_binary_word(CPULinxState *env, default: return 0u; } - return out; + return linx_tile_canonicalize_nan(out, dtype); } switch (op) { @@ -11414,7 +11876,7 @@ static inline uint32_t linx_tile_tepl_binary_word(CPULinxState *env, case 0x030u: case 0x032u: if (rhs == 0u) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); + return 0u; } if (linx_tile_dtype_is_signed(dtype)) { const int64_t a = linx_tile_sign_extend(lhs, elem_bytes); @@ -11431,8 +11893,22 @@ static inline uint32_t linx_tile_tepl_binary_word(CPULinxState *env, } } +static bool linx_tile_tepl_binary_word_checked( + CPULinxState *env, uint32_t op, uint32_t dtype, uint32_t lhs, + uint32_t rhs, uint32_t *result) +{ + const unsigned elem_bytes = linx_tile_dtype_elem_bytes(dtype); + + if ((op == 0x030u || op == 0x032u) && + !linx_tile_tepl_remainder_divisor_nonzero(dtype, elem_bytes, rhs)) { + return false; + } + *result = linx_tile_tepl_binary_word(env, op, dtype, lhs, rhs); + return true; +} + static bool linx_tile_tcmp_lane(CPULinxState *env, uint32_t dtype, - uint32_t lhs, uint32_t rhs, uint32_t mode, + uint64_t lhs, uint64_t rhs, uint32_t mode, bool *result) { bool eq; @@ -11440,7 +11916,17 @@ static bool linx_tile_tcmp_lane(CPULinxState *env, uint32_t dtype, bool gt; switch (dtype & 0x1fu) { - case 1u: { /* FP32 */ + case 0u: { /* FP64 */ + const double a = linx_tile_qword_as_f64(lhs); + const double b = linx_tile_qword_as_f64(rhs); + eq = a == b; + lt = a < b; + gt = a > b; + break; + } + case 1u: /* FP32 */ + case 2u: /* TF32 */ + case 3u: { /* HF32 */ const float a = linx_tile_word_as_f32(lhs); const float b = linx_tile_word_as_f32(rhs); eq = a == b; @@ -11448,7 +11934,7 @@ static bool linx_tile_tcmp_lane(CPULinxState *env, uint32_t dtype, gt = a > b; break; } - case 2u: { /* FP16 */ + case 4u: { /* FP16 */ const float16 a = make_float16((uint16_t)lhs); const float16 b = make_float16((uint16_t)rhs); eq = float16_eq_quiet(a, b, &env->fp_status); @@ -11456,6 +11942,11 @@ static bool linx_tile_tcmp_lane(CPULinxState *env, uint32_t dtype, gt = float16_lt_quiet(b, a, &env->fp_status); break; } + case 16u: /* INT64 */ + eq = lhs == rhs; + lt = (int64_t)lhs < (int64_t)rhs; + gt = (int64_t)lhs > (int64_t)rhs; + break; case 17u: /* INT32 */ case 18u: /* INT16 */ case 19u: /* INT8 */ @@ -11466,6 +11957,11 @@ static bool linx_tile_tcmp_lane(CPULinxState *env, uint32_t dtype, gt = linx_tile_sign_extend(lhs, linx_tile_dtype_elem_bytes(dtype)) > linx_tile_sign_extend(rhs, linx_tile_dtype_elem_bytes(dtype)); break; + case 24u: /* UINT64 */ + eq = lhs == rhs; + lt = lhs < rhs; + gt = lhs > rhs; + break; case 25u: /* UINT32 */ case 26u: /* UINT16 */ case 27u: /* UINT8 */ @@ -11487,12 +11983,12 @@ static bool linx_tile_tcmp_lane(CPULinxState *env, uint32_t dtype, case 2u: /* LT */ *result = lt; return true; - case 3u: /* LE */ - *result = lt || eq; - return true; - case 4u: /* GT */ + case 3u: /* GT */ *result = gt; return true; + case 4u: /* LE */ + *result = lt || eq; + return true; case 5u: /* GE */ *result = gt || eq; return true; @@ -11528,14 +12024,14 @@ static bool linx_tile_tepl_tcmp(CPULinxState *env, unsigned dst_tile, for (uint32_t c = 0; c < cols; c++) { const uint32_t src_lane = r * physical_cols + c; const uint32_t mask_word = r * mask_words_per_row + c / 32u; - uint32_t lhs = 0; - uint32_t rhs = 0; + uint64_t lhs = 0; + uint64_t rhs = 0; bool lane_result = false; - if (!linx_tile_get_elem(env, src0_tile, src_lane, elem_bytes, - &lhs) || - !linx_tile_get_elem(env, src1_tile, src_lane, elem_bytes, - &rhs) || + if (!linx_tile_get_elem64(env, src0_tile, src_lane, elem_bytes, + &lhs) || + !linx_tile_get_elem64(env, src1_tile, src_lane, elem_bytes, + &rhs) || !linx_tile_tcmp_lane(env, dtype, lhs, rhs, mode, &lane_result)) { return false; @@ -11561,7 +12057,7 @@ static bool linx_tile_tepl_tcmp(CPULinxState *env, unsigned dst_tile, } static bool linx_tile_tepl_tcmps(CPULinxState *env, unsigned dst_tile, - unsigned src_tile, uint32_t scalar, + unsigned src_tile, uint64_t scalar, uint32_t rows, uint32_t cols, uint32_t physical_cols, uint32_t bytes) { @@ -11583,11 +12079,11 @@ static bool linx_tile_tepl_tcmps(CPULinxState *env, unsigned dst_tile, for (uint32_t c = 0; c < cols; c++) { const uint32_t src_lane = r * physical_cols + c; const uint32_t mask_word = r * mask_words_per_row + c / 32u; - uint32_t lhs = 0; + uint64_t lhs = 0; bool lane_result = false; - if (!linx_tile_get_elem(env, src_tile, src_lane, elem_bytes, - &lhs) || + if (!linx_tile_get_elem64(env, src_tile, src_lane, elem_bytes, + &lhs) || !linx_tile_tcmp_lane(env, dtype, lhs, scalar, mode, &lane_result)) { return false; @@ -11612,7 +12108,7 @@ static bool linx_tile_tepl_tcmps(CPULinxState *env, unsigned dst_tile, static bool linx_tile_tepl_select(CPULinxState *env, unsigned dst_tile, unsigned mask_tile, unsigned src0_tile, unsigned src1_tile, bool scalar_false, - uint32_t scalar, uint32_t rows, + uint64_t scalar, uint32_t rows, uint32_t cols, uint32_t physical_cols) { const unsigned elem_bytes = linx_tile_dtype_elem_bytes(env->tile_dtype); @@ -11642,23 +12138,23 @@ static bool linx_tile_tepl_select(CPULinxState *env, unsigned dst_tile, const uint32_t mask_lane = r * mask_physical_cols + c / 32u; uint32_t mask_word = 0; - uint32_t value = scalar; + uint64_t value = scalar; if (!linx_tile_get_elem(env, mask_tile, mask_lane, sizeof(uint32_t), &mask_word)) { return false; } if ((mask_word & (1u << (c & 31u))) != 0u) { - if (!linx_tile_get_elem(env, src0_tile, lane, elem_bytes, - &value)) { + if (!linx_tile_get_elem64(env, src0_tile, lane, elem_bytes, + &value)) { return false; } } else if (!scalar_false && - !linx_tile_get_elem(env, src1_tile, lane, elem_bytes, - &value)) { + !linx_tile_get_elem64(env, src1_tile, lane, elem_bytes, + &value)) { return false; } - if (!linx_tile_set_elem(env, dst_tile, lane, elem_bytes, value)) { + if (!linx_tile_set_elem64(env, dst_tile, lane, elem_bytes, value)) { return false; } } @@ -11666,20 +12162,81 @@ static bool linx_tile_tepl_select(CPULinxState *env, unsigned dst_tile, return true; } -static uint32_t linx_tile_tepl_one(uint32_t dtype) +static uint64_t linx_tile_tepl_one(uint32_t dtype) { switch (dtype & 0x1fu) { + case 0u: /* FP64 */ + return UINT64_C(0x3ff0000000000000); case 1u: /* FP32 */ + case 2u: /* TF32 */ + case 3u: /* HF32 */ return 0x3f800000u; - case 2u: /* FP16 */ + case 4u: /* FP16 */ return 0x3c00u; - case 6u: /* BF16 */ + case 5u: /* BF16 */ return 0x3f80u; default: return 1u; } } +static inline uint32_t linx_tile_canonicalize_nan(uint32_t value, + uint32_t dtype) +{ + uint32_t lane0; + uint32_t lane1; + + switch (dtype & 0x1fu) { + case 1u: case 2u: case 3u: + return ((value & 0x7f800000u) == 0x7f800000u && + (value & 0x007fffffu) != 0u) ? 0x7fc00000u : value; + case 4u: + return ((value & 0x7c00u) == 0x7c00u && + (value & 0x03ffu) != 0u) ? 0x7e00u : value; + case 5u: + return ((value & 0x7f80u) == 0x7f80u && + (value & 0x007fu) != 0u) ? 0x7fc0u : value; + case 6u: /* HiF8/e4m3 */ + case 7u: /* E4M3 */ + return ((value & 0x78u) == 0x78u && (value & 0x07u) != 0u) + ? 0x7fu : value; + case 8u: /* E5M2 */ + return ((value & 0x7cu) == 0x7cu && (value & 0x03u) != 0u) + ? 0x7eu : value; + case 9u: /* E3M2 in low six bits */ + return ((value & 0x1cu) == 0x1cu && (value & 0x03u) != 0u) + ? 0x1eu : value; + case 10u: /* E2M3 in low six bits */ + return ((value & 0x18u) == 0x18u && (value & 0x07u) != 0u) + ? 0x1cu : value; + case 11u: /* two E2M1 lanes */ + lane0 = value & 0xfu; + lane1 = (value >> 4) & 0xfu; + if ((lane0 & 0x6u) == 0x6u && (lane0 & 1u) != 0u) { + lane0 = 0x7u; + } + if ((lane1 & 0x6u) == 0x6u && (lane1 & 1u) != 0u) { + lane1 = 0x7u; + } + return lane0 | (lane1 << 4); + case 12u: /* two E1M2 lanes */ + case 14u: /* two HiF4/e1m2 lanes */ + lane0 = value & 0xfu; + lane1 = (value >> 4) & 0xfu; + if ((lane0 & 0x4u) != 0u && (lane0 & 0x3u) != 0u) { + lane0 = (dtype & 0x1fu) == 12u ? 0x6u : 0x7u; + } + if ((lane1 & 0x4u) != 0u && (lane1 & 0x3u) != 0u) { + lane1 = (dtype & 0x1fu) == 12u ? 0x6u : 0x7u; + } + return lane0 | (lane1 << 4); + case 13u: /* E8M0: 0xff is the sole NaN code */ + return (value & 0xffu) == 0xffu ? 0xffu : value; + default: + return value; + } +} + static bool linx_tile_tepl_product(CPULinxState *env, unsigned dst_tile, unsigned src_tile, bool row_reduce, uint32_t rows, uint32_t cols, @@ -11847,12 +12404,12 @@ static bool linx_tile_tepl_expand(CPULinxState *env, unsigned dst_tile, if (expand_op < 6u) { result = linx_tile_tepl_binary_word( env, expand_op, dtype, source, expanded); - } else if (dtype == 1u) { + } else if (dtype >= 1u && dtype <= 3u) { const float difference = linx_tile_word_as_f32(source) - linx_tile_word_as_f32(expanded); result = linx_tile_f32_as_word(expf(difference)); - } else if (dtype == 2u) { + } else if (dtype == 4u) { const float16 difference = float16_sub( make_float16((uint16_t)source), make_float16((uint16_t)expanded), &env->fp_status); @@ -12020,8 +12577,15 @@ static bool linx_tile_tepl_partial_binary(CPULinxState *env, static bool linx_tile_resolve_ior(const CPULinxState *env, unsigned slot, unsigned *addr_reg_out); -static bool linx_tile_tepl_concat(CPULinxState *env, unsigned dst_tile, - unsigned src0_tile, unsigned src1_tile, +static G_NORETURN void linx_tile_raise_allocation_fault(CPULinxState *env) +{ + env->pending_trap_arg0 = env->pc; + env->pending_trap_cause = 0; + helper_raise_exception(env, LINX_EXCP_TILE_FAULT); +} + +static bool linx_tile_tepl_concat(CPULinxState *env, unsigned dst_tile, + unsigned src0_tile, unsigned src1_tile, uint32_t rows, uint32_t cols, uint32_t physical_cols) { @@ -12209,12 +12773,17 @@ static bool linx_tile_tepl_dequant(CPULinxState *env, unsigned dst_tile, return true; } -static inline uint32_t linx_tile_tepl_unary_word(uint32_t op, uint32_t dtype, +static inline uint32_t linx_tile_tepl_unary_word(CPULinxState *env, + uint32_t op, uint32_t dtype, uint32_t value) { const unsigned elem_bytes = linx_tile_dtype_elem_bytes(dtype); - if ((dtype & 0x1fu) == 1u) { + if (((env->tile_attr_raw >> 17) & 1u) != 0u) { + value = linx_tile_canonicalize_nan(value, dtype); + } + + if ((dtype & 0x1fu) >= 1u && (dtype & 0x1fu) <= 3u) { const float input = linx_tile_word_as_f32(value); float out = 0.0f; @@ -12249,7 +12818,9 @@ static inline uint32_t linx_tile_tepl_unary_word(uint32_t op, uint32_t dtype, default: return 0; } - return linx_tile_f32_as_word(out); + return linx_tile_round_fp32_carrier( + linx_tile_canonicalize_nan(linx_tile_f32_as_word(out), dtype), + dtype); } switch (op) { @@ -12272,7 +12843,7 @@ static inline uint32_t linx_tile_tepl_unary_word(uint32_t op, uint32_t dtype, case 0x02eu: return ~value; case 0x02fu: - if ((dtype & 0x1fu) == 2u || (dtype & 0x1fu) == 6u) { + if ((dtype & 0x1fu) == 4u || (dtype & 0x1fu) == 5u) { return value ^ 0x8000u; } return 0u - value; @@ -12313,8 +12884,10 @@ static bool linx_tile_interleave_dtype_supported(uint32_t dtype) { switch (dtype & 0x1fu) { case 1u: /* FP32 */ - case 2u: /* FP16 */ - case 6u: /* BF16 */ + case 2u: /* TF32 */ + case 3u: /* HF32 */ + case 4u: /* FP16 */ + case 5u: /* BF16 */ case 17u: /* INT32 */ case 18u: /* INT16 */ case 19u: /* INT8 */ @@ -12499,7 +13072,117 @@ static bool linx_tile_part_arg(CPULinxState *env, uint32_t op, return true; } -static bool linx_tile_tepl_selector_executable(uint32_t op) +/* + * The execution helpers below predate the 0.57.1 Mode+Function allocation. + * Keep their private dispatch IDs behind this one-way boundary; tile_func and + * every architectural acceptance decision use the canonical seven-bit ID. + */ +static uint32_t linx_tile_tepl_impl_selector(uint32_t selector) +{ + switch (selector) { + case 0x000u: /* TADD */ return 0x000u; + case 0x001u: /* TSUB */ return 0x001u; + case 0x002u: /* TMUL */ return 0x002u; + case 0x003u: /* TDIV */ return 0x003u; + case 0x00bu: /* TMAX */ return 0x004u; + case 0x00cu: /* TMIN */ return 0x005u; + case 0x006u: /* TAND */ return 0x006u; + case 0x007u: /* TOR */ return 0x007u; + case 0x008u: /* TXOR */ return 0x008u; + case 0x009u: /* TSHL */ return 0x009u; + case 0x00au: /* TSHR */ return 0x00au; + case 0x017u: /* TRELU */ return 0x00bu; + case 0x01bu: /* TCVT */ return 0x00du; + case 0x012u: /* TEXP */ return 0x00eu; + case 0x013u: /* TLOG */ return 0x00fu; + case 0x015u: /* TSQRT */ return 0x010u; + case 0x016u: /* TRSQRT */ return 0x011u; + case 0x041u: /* TROWMAX */ return 0x012u; + case 0x042u: /* TROWMIN */ return 0x013u; + case 0x040u: /* TROWSUM */ return 0x014u; + case 0x051u: /* TCOLMAX */ return 0x015u; + case 0x052u: /* TCOLMIN */ return 0x016u; + case 0x050u: /* TCOLSUM */ return 0x017u; + case 0x014u: /* TRECIP */ return 0x018u; + case 0x03bu: /* TEXPANDS */ return 0x019u; + case 0x06fu: /* TGATHER */ return 0x01au; + case 0x070u: /* TSCATTER */ return 0x01bu; + case 0x077u: /* TRESHAPE */ return 0x01cu; + case 0x06eu: /* TTRANS */ return 0x01du; + case 0x054u: /* TCOLEXPAND */ return 0x01eu; + case 0x044u: /* TROWEXPAND */ return 0x01fu; + case 0x020u: /* TADDS */ return 0x020u; + case 0x021u: /* TSUBS */ return 0x021u; + case 0x022u: /* TMULS */ return 0x022u; + case 0x023u: /* TDIVS */ return 0x023u; + case 0x02bu: /* TMAXS */ return 0x024u; + case 0x02cu: /* TMINS */ return 0x025u; + case 0x026u: /* TANDS */ return 0x026u; + case 0x027u: /* TORS */ return 0x027u; + case 0x028u: /* TXORS */ return 0x028u; + case 0x029u: /* TSHLS */ return 0x029u; + case 0x02au: /* TSHRS */ return 0x02au; + case 0x00du: /* TCMP */ return 0x02bu; + case 0x01au: /* TSEL */ return 0x02cu; + case 0x00fu: /* TABS */ return 0x02du; + case 0x010u: /* TNOT */ return 0x02eu; + case 0x011u: /* TNEG */ return 0x02fu; + case 0x004u: /* TREM */ return 0x030u; + case 0x024u: /* TREMS */ return 0x032u; + case 0x02du: /* TCMPS */ return 0x033u; + case 0x03au: /* TSELS */ return 0x034u; + case 0x043u: /* TROWPROD */ return 0x035u; + case 0x04cu: /* TROWARGMAX */ return 0x036u; + case 0x04du: /* TROWARGMIN */ return 0x037u; + case 0x053u: /* TCOLPROD */ return 0x038u; + case 0x05cu: /* TCOLARGMAX */ return 0x039u; + case 0x05du: /* TCOLARGMIN */ return 0x03au; + case 0x045u: /* TROWEXPANDADD */ return 0x03bu; + case 0x046u: /* TROWEXPANDSUB */ return 0x03cu; + case 0x047u: /* TROWEXPANDMUL */ return 0x03du; + case 0x048u: /* TROWEXPANDDIV */ return 0x03eu; + case 0x049u: /* TROWEXPANDMAX */ return 0x03fu; + case 0x04au: /* TROWEXPANDMIN */ return 0x040u; + case 0x04bu: /* TROWEXPANDEXPDIF */ return 0x041u; + case 0x055u: /* TCOLEXPANDADD */ return 0x042u; + case 0x056u: /* TCOLEXPANDSUB */ return 0x043u; + case 0x057u: /* TCOLEXPANDMUL */ return 0x044u; + case 0x058u: /* TCOLEXPANDDIV */ return 0x045u; + case 0x059u: /* TCOLEXPANDMAX */ return 0x046u; + case 0x05au: /* TCOLEXPANDMIN */ return 0x047u; + case 0x05bu: /* TCOLEXPANDEXPDIF */ return 0x048u; + case 0x065u: /* TFILLPAD */ return 0x082u; + case 0x06bu: /* TDEQUANT */ return 0x084u; + case 0x062u: /* TEXTRACT */ return 0x085u; + case 0x066u: /* TCI */ return 0x080u; + case 0x067u: /* TTRI */ return 0x081u; + case 0x060u: /* TCONCAT */ return 0x087u; + case 0x061u: /* TGATHERB */ return 0x089u; + case 0x078u: /* TDEINTERLEAVE */ return 0x08au; + case 0x079u: /* TINTERLEAVE */ return 0x08bu; + case 0x00eu: /* TPRELU */ return 0x100u; + case 0x02fu: /* TAXPY */ return 0x101u; + case 0x06au: /* TQUANT */ return 0x102u; + case 0x063u: /* TINSERT */ return 0x103u; + case 0x064u: /* TIMG2COL */ return 0x104u; + case 0x068u: /* THISTOGRAM */ return 0x105u; + case 0x06cu: /* TSORT */ return 0x106u; + case 0x06du: /* TMRGSORT */ return 0x107u; + case 0x07au: /* TPUSH */ return 0x108u; + case 0x07bu: /* TPOP */ return 0x109u; + case 0x07cu: /* TALLOC */ return 0x10au; + case 0x07du: /* TFREE */ return 0x10bu; + case 0x071u: /* TPARTADD */ return 0x0c3u; + case 0x072u: /* TPARTMUL */ return 0x0c4u; + case 0x073u: /* TPARTMAX */ return 0x0c5u; + case 0x074u: /* TPARTMIN */ return 0x0c6u; + case 0x075u: /* TPARTARGMAX */ return 0x0c7u; + case 0x076u: /* TPARTARGMIN */ return 0x0c8u; + default: return UINT32_MAX; + } +} + +static bool linx_tile_tepl_impl_selector_executable(uint32_t op) { switch (op) { case 0x000u: /* TADD */ @@ -12588,29 +13271,160 @@ static bool linx_tile_tepl_selector_executable(uint32_t op) case 0x0c6u: /* TPARTMIN */ case 0x0c7u: /* TPARTARGMAX */ case 0x0c8u: /* TPARTARGMIN */ + case 0x100u: /* TPRELU */ + case 0x101u: /* TAXPY */ + case 0x102u: /* TQUANT */ + case 0x103u: /* TINSERT */ + case 0x104u: /* TIMG2COL */ + case 0x105u: /* THISTOGRAM */ + case 0x106u: /* TSORT */ + case 0x107u: /* TMRGSORT */ + case 0x108u: /* TPUSH */ + case 0x109u: /* TPOP */ + case 0x10au: /* TALLOC */ + case 0x10bu: /* TFREE */ return true; default: return false; } } +/* + * Canonical executable selector inventory generated from pto-spec 0.57.1. + * Keep the architectural selector and mnemonic together: the PTO conformance + * gate consumes these case labels directly, while the final check below keeps + * this inventory tied to the executable private implementation selector. + */ +static bool linx_tile_tepl_selector_executable(uint32_t selector) +{ + switch (selector) { + case 0x000u: /* TADD */ + case 0x001u: /* TSUB */ + case 0x002u: /* TMUL */ + case 0x00bu: /* TMAX */ + case 0x00cu: /* TMIN */ + case 0x006u: /* TAND */ + case 0x007u: /* TOR */ + case 0x008u: /* TXOR */ + case 0x009u: /* TSHL */ + case 0x00au: /* TSHR */ + case 0x00du: /* TCMP */ + case 0x01au: /* TSEL */ + case 0x00fu: /* TABS */ + case 0x010u: /* TNOT */ + case 0x011u: /* TNEG */ + case 0x017u: /* TRELU */ + case 0x00eu: /* TPRELU */ + case 0x003u: /* TDIV */ + case 0x004u: /* TREM */ + case 0x015u: /* TSQRT */ + case 0x013u: /* TLOG */ + case 0x014u: /* TRECIP */ + case 0x012u: /* TEXP */ + case 0x016u: /* TRSQRT */ + case 0x020u: /* TADDS */ + case 0x02fu: /* TAXPY */ + case 0x021u: /* TSUBS */ + case 0x022u: /* TMULS */ + case 0x023u: /* TDIVS */ + case 0x02cu: /* TMINS */ + case 0x02bu: /* TMAXS */ + case 0x024u: /* TREMS */ + case 0x026u: /* TANDS */ + case 0x027u: /* TORS */ + case 0x028u: /* TXORS */ + case 0x02du: /* TCMPS */ + case 0x03au: /* TSELS */ + case 0x029u: /* TSHLS */ + case 0x02au: /* TSHRS */ + case 0x040u: /* TROWSUM */ + case 0x043u: /* TROWPROD */ + case 0x041u: /* TROWMAX */ + case 0x042u: /* TROWMIN */ + case 0x04cu: /* TROWARGMAX */ + case 0x04du: /* TROWARGMIN */ + case 0x050u: /* TCOLSUM */ + case 0x053u: /* TCOLPROD */ + case 0x051u: /* TCOLMAX */ + case 0x052u: /* TCOLMIN */ + case 0x05cu: /* TCOLARGMAX */ + case 0x05du: /* TCOLARGMIN */ + case 0x044u: /* TROWEXPAND */ + case 0x045u: /* TROWEXPANDADD */ + case 0x046u: /* TROWEXPANDSUB */ + case 0x047u: /* TROWEXPANDMUL */ + case 0x048u: /* TROWEXPANDDIV */ + case 0x049u: /* TROWEXPANDMAX */ + case 0x04au: /* TROWEXPANDMIN */ + case 0x04bu: /* TROWEXPANDEXPDIF */ + case 0x054u: /* TCOLEXPAND */ + case 0x055u: /* TCOLEXPANDADD */ + case 0x056u: /* TCOLEXPANDSUB */ + case 0x057u: /* TCOLEXPANDMUL */ + case 0x058u: /* TCOLEXPANDDIV */ + case 0x059u: /* TCOLEXPANDMAX */ + case 0x05au: /* TCOLEXPANDMIN */ + case 0x05bu: /* TCOLEXPANDEXPDIF */ + case 0x03bu: /* TEXPANDS */ + case 0x066u: /* TCI */ + case 0x067u: /* TTRI */ + case 0x065u: /* TFILLPAD */ + case 0x01bu: /* TCVT */ + case 0x06au: /* TQUANT */ + case 0x06bu: /* TDEQUANT */ + case 0x062u: /* TEXTRACT */ + case 0x063u: /* TINSERT */ + case 0x06fu: /* TGATHER */ + case 0x070u: /* TSCATTER */ + case 0x060u: /* TCONCAT */ + case 0x06eu: /* TTRANS */ + case 0x064u: /* TIMG2COL */ + case 0x061u: /* TGATHERB */ + case 0x078u: /* TDEINTERLEAVE */ + case 0x079u: /* TINTERLEAVE */ + case 0x077u: /* TRESHAPE */ + case 0x06cu: /* TSORT */ + case 0x06du: /* TMRGSORT */ + case 0x068u: /* THISTOGRAM */ + case 0x07au: /* TPUSH */ + case 0x07bu: /* TPOP */ + case 0x07cu: /* TALLOC */ + case 0x07du: /* TFREE */ + case 0x071u: /* TPARTADD */ + case 0x072u: /* TPARTMUL */ + case 0x073u: /* TPARTMAX */ + case 0x074u: /* TPARTMIN */ + case 0x075u: /* TPARTARGMAX */ + case 0x076u: /* TPARTARGMIN */ + return linx_tile_tepl_impl_selector_executable( + linx_tile_tepl_impl_selector(selector)); + default: + return false; + } +} + #define LINX_TILE_DTYPE_MASK(dtype) (UINT32_C(1) << (dtype)) -static bool linx_tile_tepl_dtype_supported(uint32_t op, uint32_t dtype) +static bool linx_tile_tepl_impl_dtype_supported(uint32_t op, uint32_t dtype) { const uint32_t dt = dtype & 0x1fu; const uint32_t bit = LINX_TILE_DTYPE_MASK(dt); - const uint32_t fp32 = LINX_TILE_DTYPE_MASK(1u); - const uint32_t fp16 = LINX_TILE_DTYPE_MASK(2u); - const uint32_t bf16 = LINX_TILE_DTYPE_MASK(6u); + const uint32_t fp64 = LINX_TILE_DTYPE_MASK(0u); + const uint32_t fp32 = LINX_TILE_DTYPE_MASK(1u) | + LINX_TILE_DTYPE_MASK(2u) | + LINX_TILE_DTYPE_MASK(3u); + const uint32_t fp16 = LINX_TILE_DTYPE_MASK(4u); + const uint32_t bf16 = LINX_TILE_DTYPE_MASK(5u); + const uint32_t s64 = LINX_TILE_DTYPE_MASK(16u); const uint32_t s32 = LINX_TILE_DTYPE_MASK(17u); const uint32_t s16 = LINX_TILE_DTYPE_MASK(18u); const uint32_t s8 = LINX_TILE_DTYPE_MASK(19u); + const uint32_t u64 = LINX_TILE_DTYPE_MASK(24u); const uint32_t u32 = LINX_TILE_DTYPE_MASK(25u); const uint32_t u16 = LINX_TILE_DTYPE_MASK(26u); const uint32_t u8 = LINX_TILE_DTYPE_MASK(27u); - const uint32_t integers = s32 | s16 | s8 | u32 | u16 | u8; - const uint32_t standard = fp32 | fp16 | bf16 | integers; + const uint32_t integers = s64 | s32 | s16 | s8 | u64 | u32 | u16 | u8; + const uint32_t standard = fp64 | fp32 | fp16 | bf16 | integers; uint32_t supported = 0u; switch (op) { @@ -12649,7 +13463,7 @@ static bool linx_tile_tepl_dtype_supported(uint32_t op, uint32_t dtype) supported = integers; break; case 0x00bu: /* TRELU */ - supported = fp32 | s32 | s16 | s8; + supported = fp64 | fp32 | s64 | s32 | s16 | s8; break; case 0x00du: /* TCVT */ case 0x01au: /* TGATHER */ @@ -12676,41 +13490,42 @@ static bool linx_tile_tepl_dtype_supported(uint32_t op, uint32_t dtype) case 0x010u: /* TSQRT */ case 0x011u: /* TRSQRT */ case 0x018u: /* TRECIP */ - supported = fp32; + supported = fp64 | fp32; break; case 0x02bu: /* TCMP */ - supported = fp32 | fp16 | integers; + supported = fp64 | fp32 | fp16 | integers; break; case 0x02cu: /* TSEL */ case 0x034u: /* TSELS */ supported = integers; break; case 0x02du: /* TABS */ - supported = fp32 | s32 | s16 | s8; + supported = fp64 | fp32 | s64 | s32 | s16 | s8; break; case 0x02fu: /* TNEG */ - supported = fp32 | fp16 | bf16 | s32 | s16; + supported = fp64 | fp32 | fp16 | bf16 | s64 | s32 | s16; break; case 0x030u: /* TREM */ case 0x032u: /* TREMS */ - supported = fp32 | s32 | s16 | u32 | u16; + supported = fp64 | fp32 | s64 | s32 | s16 | u64 | u32 | u16; break; case 0x033u: /* TCMPS */ - supported = fp32 | fp16 | s32 | s16 | u16; + supported = fp64 | fp32 | fp16 | s64 | s32 | s16 | u64 | u16; break; case 0x035u: /* TROWPROD */ - supported = fp32 | fp16 | s32 | s16; + supported = fp64 | fp32 | fp16 | s64 | s32 | s16; break; case 0x036u: /* TROWARGMAX */ case 0x037u: /* TROWARGMIN */ - supported = fp32 | fp16; + supported = fp64 | fp32 | fp16; break; case 0x038u: /* TCOLPROD */ - supported = fp32 | fp16 | bf16 | s32 | s16 | u32 | u16; + supported = fp64 | fp32 | fp16 | bf16 | s64 | s32 | s16 | + u64 | u32 | u16; break; case 0x039u: /* TCOLARGMAX */ case 0x03au: /* TCOLARGMIN */ - supported = fp32 | fp16 | integers; + supported = fp64 | fp32 | fp16 | integers; break; case 0x03bu: /* TROWEXPANDADD */ case 0x03cu: /* TROWEXPANDSUB */ @@ -12729,13 +13544,31 @@ static bool linx_tile_tepl_dtype_supported(uint32_t op, uint32_t dtype) supported = fp32 | fp16; break; case 0x080u: /* TCI */ - supported = s32 | s16 | u32 | u16; + supported = s64 | s32 | s16 | u64 | u32 | u16; break; case 0x084u: /* TDEQUANT */ case 0x0c7u: /* TPARTARGMAX */ case 0x0c8u: /* TPARTARGMIN */ supported = fp32; break; + case 0x100u: /* TPRELU */ + case 0x101u: /* TAXPY */ + case 0x103u: /* TINSERT */ + case 0x104u: /* TIMG2COL */ + case 0x106u: /* TSORT */ + case 0x107u: /* TMRGSORT */ + case 0x108u: /* TPUSH */ + case 0x109u: /* TPOP */ + case 0x10au: /* TALLOC */ + case 0x10bu: /* TFREE */ + supported = standard; + break; + case 0x102u: /* TQUANT */ + supported = integers; + break; + case 0x105u: /* THISTOGRAM */ + supported = u32 | u16; + break; default: return false; } @@ -12744,12 +13577,14 @@ static bool linx_tile_tepl_dtype_supported(uint32_t op, uint32_t dtype) #undef LINX_TILE_DTYPE_MASK -static int linx_tile_tepl_source_arity(uint32_t op) +static int linx_tile_tepl_impl_source_arity(uint32_t op) { switch (op) { case 0x019u: /* TEXPANDS */ case 0x080u: /* TCI */ case 0x081u: /* TTRI */ + case 0x10au: /* TALLOC */ + case 0x10bu: /* TFREE */ return 0; case 0x00bu: /* TRELU */ case 0x00du: /* TCVT */ @@ -12792,38 +13627,295 @@ static int linx_tile_tepl_source_arity(uint32_t op) case 0x03au: /* TCOLARGMIN */ case 0x082u: /* TFILLPAD */ case 0x085u: /* TEXTRACT */ + case 0x100u: /* TPRELU */ + case 0x101u: /* TAXPY */ + case 0x102u: /* TQUANT */ + case 0x103u: /* TINSERT */ + case 0x104u: /* TIMG2COL */ + case 0x106u: /* TSORT */ + case 0x108u: /* TPUSH */ + case 0x109u: /* TPOP */ return 1; case 0x02cu: /* TSEL */ return 3; case 0x084u: /* TDEQUANT */ return 3; case 0x034u: /* TSELS */ + case 0x105u: /* THISTOGRAM */ + case 0x107u: /* TMRGSORT */ return 2; default: - return linx_tile_tepl_selector_executable(op) ? 2 : -1; + return linx_tile_tepl_impl_selector_executable(op) ? 2 : -1; } } -static void linx_tile_tepl(CPULinxState *env, unsigned dst_tile, - const unsigned *sources, unsigned source_count, - unsigned size_code, uint32_t op) +static bool linx_tile_tepl_dtype_supported(uint32_t selector, uint32_t dtype) +{ + const uint32_t impl = linx_tile_tepl_impl_selector(selector); + + return impl != UINT32_MAX && + linx_tile_tepl_impl_dtype_supported(impl, dtype); +} + +static uint64_t linx_tile_tepl_unary_qword(CPULinxState *env, uint32_t op, + uint32_t dtype, uint64_t value) +{ + if ((dtype & 0x1fu) == 0u) { + const double input = linx_tile_qword_as_f64(value); + double out; + switch (op) { + case 0x00bu: out = input > 0.0 ? input : 0.0; break; + case 0x00du: case 0x01cu: out = input; break; + case 0x00eu: out = exp(input); break; + case 0x00fu: out = input > 0.0 ? log(input) : -INFINITY; break; + case 0x010u: out = input >= 0.0 ? sqrt(input) : NAN; break; + case 0x011u: out = input > 0.0 ? 1.0 / sqrt(input) : 0.0; break; + case 0x018u: out = input == 0.0 ? 0.0 : 1.0 / input; break; + case 0x02du: out = fabs(input); break; + case 0x02fu: return value ^ UINT64_C(0x8000000000000000); + default: return 0u; + } + return linx_tile_canonicalize_nan64(linx_tile_f64_as_qword(out), + dtype); + } + switch (op) { + case 0x00bu: + return (dtype & 0x1fu) == 16u && (int64_t)value < 0 ? 0u : value; + case 0x00du: case 0x01cu: return value; + case 0x02du: + return (dtype & 0x1fu) == 16u && (int64_t)value < 0 + ? 0u - value : value; + case 0x02eu: return ~value; + case 0x02fu: return 0u - value; + default: return 0u; + } +} + +static uint64_t linx_tile_tepl_convert64(CPULinxState *env, uint64_t value, + uint32_t src_dtype, + unsigned src_bytes, + uint32_t dst_dtype, + unsigned dst_bytes) +{ + const uint32_t src = src_dtype & 0x1fu; + const uint32_t dst = dst_dtype & 0x1fu; + long double numeric; + + if (src == 0u) { + numeric = linx_tile_qword_as_f64(value); + } else if (src == 16u) { + numeric = (int64_t)value; + } else if (src == 24u) { + numeric = value; + } else { + numeric = linx_tile_value_as_f32(env, (uint32_t)value, + src_dtype, src_bytes); + } + + if (dst == 0u) { + return linx_tile_canonicalize_nan64( + linx_tile_f64_as_qword((double)numeric), dst_dtype); + } + if (dst == 16u || dst == 24u) { + const bool sat = ((env->tile_attr_raw >> 28) & 1u) != 0u; + const double rounded = linx_tile_round_integral( + (double)numeric, (env->tile_attr_raw >> 25) & 0x7u); + if (isnan((double)numeric)) { + return sat ? 0u : (dst == 16u ? UINT64_C(0x8000000000000000) + : UINT64_MAX); + } + if (dst == 16u) { + if (rounded < (double)INT64_MIN || rounded >= 0x1p63) { + if (!sat || rounded <= (double)INT64_MIN) { + return UINT64_C(0x8000000000000000); + } + return INT64_MAX; + } + return (uint64_t)(int64_t)rounded; + } + if (rounded < 0.0 || rounded >= 0x1p64) { + if (!sat) return UINT64_MAX; + return rounded <= 0.0 ? 0u : UINT64_MAX; + } + return (uint64_t)rounded; + } + return linx_tile_f32_as_dtype(env, (float)numeric, dst_dtype, dst_bytes); +} + +static bool linx_tile_tepl64_core(CPULinxState *env, unsigned dst_tile, + const unsigned *sources, + unsigned source_count, uint32_t op, + uint32_t dtype, uint32_t rows, + uint32_t cols, uint32_t physical_cols, + uint32_t bytes) +{ + const bool scalar_mode = + (env->tile_arg_format == 1u || env->tile_arg_format == 2u); + unsigned scalar_reg = 0; + const bool has_scalar = scalar_mode && + linx_tile_resolve_ior(env, 0, &scalar_reg); + const uint64_t scalar = has_scalar ? env->gpr[scalar_reg] : 0u; + const unsigned src0 = source_count > 0u ? sources[0] : 0u; + const unsigned src1 = source_count > 1u ? sources[1] : 0u; + const uint32_t active = rows * cols; + + if (op == 0x02bu) { + return source_count == 2u && + linx_tile_tepl_tcmp(env, dst_tile, src0, src1, rows, cols, + physical_cols, bytes); + } + if (op == 0x033u) { + return source_count == 1u && has_scalar && + linx_tile_tepl_tcmps(env, dst_tile, src0, scalar, rows, cols, + physical_cols, bytes); + } + if (op == 0x00du) { + if (source_count != 1u) return false; + const uint32_t src_dtype = env->tile_reg_dtype[src0]; + const unsigned src_bytes = env->tile_reg_elem_bytes[src0]; + for (uint32_t i = 0; i < active; i++) { + const uint32_t lane = (i / cols) * physical_cols + i % cols; + uint64_t value = 0; + if (!linx_tile_get_elem64(env, src0, lane, src_bytes, &value) || + !linx_tile_set_elem64( + env, dst_tile, lane, 8u, + linx_tile_tepl_convert64(env, value, src_dtype, src_bytes, + dtype, 8u))) return false; + } + return true; + } + if (op == 0x019u) { + if (!has_scalar) return false; + for (uint32_t i = 0; i < active; i++) { + const uint32_t lane = (i / cols) * physical_cols + i % cols; + if (!linx_tile_set_elem64(env, dst_tile, lane, 8u, scalar)) + return false; + } + return true; + } + if (op == 0x080u) { + unsigned descending_reg = 0; + if (!has_scalar || !linx_tile_resolve_ior(env, 1, &descending_reg) || + env->gpr[descending_reg] > 1u) return false; + for (uint32_t i = 0; i < cols; i++) { + const uint64_t value = env->gpr[descending_reg] + ? scalar - i : scalar + i; + if (!linx_tile_set_elem64(env, dst_tile, i, 8u, value)) + return false; + } + return true; + } + if (op == 0x012u || op == 0x013u || op == 0x014u || + op == 0x015u || op == 0x016u || op == 0x017u) { + if (source_count != 1u) return false; + const bool row_reduce = op <= 0x014u; + const bool sum = op == 0x014u || op == 0x017u; + const bool maximum = op == 0x012u || op == 0x015u; + const uint32_t outer = row_reduce ? rows : cols; + const uint32_t inner = row_reduce ? cols : rows; + for (uint32_t o = 0; o < outer; o++) { + uint64_t result = dtype == 0u && sum + ? linx_tile_f64_as_qword(0.0) : 0u; + if (!sum && !linx_tile_get_elem64( + env, src0, + row_reduce ? o * physical_cols : o, 8u, + &result)) return false; + for (uint32_t i = 0; i < inner; i++) { + uint64_t value = 0; + const uint32_t lane = row_reduce ? o * physical_cols + i + : i * physical_cols + o; + if (!linx_tile_get_elem64(env, src0, lane, 8u, &value)) + return false; + result = linx_tile_tepl_binary_qword( + env, sum ? 0x000u : (maximum ? 0x004u : 0x005u), + dtype, result, value); + } + const uint32_t dst_lane = row_reduce ? o * physical_cols : o; + if (!linx_tile_set_elem64(env, dst_tile, dst_lane, 8u, result)) + return false; + } + return true; + } + + for (uint32_t i = 0; i < active; i++) { + const uint32_t lane = (i / cols) * physical_cols + i % cols; + uint64_t lhs = 0, rhs = 0, result; + if (source_count == 0u || + !linx_tile_get_elem64(env, src0, lane, 8u, &lhs)) return false; + if (source_count > 1u) { + if (!linx_tile_get_elem64(env, src1, lane, 8u, &rhs)) + return false; + if (!linx_tile_tepl_binary_qword_checked( + env, op, dtype, lhs, rhs, &result)) { + return false; + } + } else if (has_scalar && env->tile_arg_format == 1u) { + if (!linx_tile_tepl_binary_qword_checked( + env, op, dtype, lhs, scalar, &result)) { + return false; + } + } else { + result = linx_tile_tepl_unary_qword(env, op, dtype, lhs); + } + if (!linx_tile_set_elem64(env, dst_tile, lane, 8u, result)) + return false; + } + return true; +} + +static bool linx_tile_tepl64_core_op(uint32_t op) +{ + return op <= 0x00bu || (op >= 0x00du && op <= 0x019u) || + (op >= 0x020u && op <= 0x02fu && op != 0x02cu) || op == 0x030u || + op == 0x032u || op == 0x033u || op == 0x080u; +} + +static inline bool linx_tile_cube_dtype_supported(uint32_t dtype) +{ + /* The executable CUBE profile is exact S32; reject other profiles early. */ + return (dtype & 0x1fu) == 17u; +} + +static inline uint32_t linx_tile_effective_dtype(const CPULinxState *env) +{ + const uint32_t allowed = linx_tile_datr_allowed(env->blocktype, + env->tile_func); + if ((env->tile_attr_dtype & 0x100u) != 0u && + (allowed & LINX_DATR_DATA_TYPE) != 0u) { + return env->tile_attr_dtype & 0x1fu; + } + return env->tile_dtype & 0x1fu; +} + +static int linx_tile_tepl_source_arity(uint32_t selector) { + const uint32_t impl = linx_tile_tepl_impl_selector(selector); + + return impl == UINT32_MAX ? -1 : linx_tile_tepl_impl_source_arity(impl); +} + +static bool linx_tile_tepl(CPULinxState *env, unsigned dst_tile, + const unsigned *sources, unsigned source_count, + unsigned size_code, uint32_t op) { + const uint32_t canonical_op = op; + const uint32_t impl_op = linx_tile_tepl_impl_selector(canonical_op); const uint64_t bytes64 = size_code < 60u ? (1ull << (size_code + 4u)) : 0ull; - const unsigned elem_bytes = linx_tile_dtype_elem_bytes(env->tile_dtype); + const uint32_t operation_dtype = linx_tile_effective_dtype(env); + const unsigned elem_bytes = linx_tile_dtype_elem_bytes(operation_dtype); unsigned mask_tile = 0; unsigned src0_tile = source_count > 0u ? sources[0] : 0u; unsigned src1_tile = source_count > 1u ? sources[1] : 0u; bool has_src0 = source_count > 0u; bool has_src1 = source_count > 1u; - if (op == 0x02cu) { + if (impl_op == 0x02cu) { mask_tile = sources[0]; src0_tile = sources[1]; src1_tile = sources[2]; has_src0 = true; has_src1 = true; - } else if (op == 0x034u) { + } else if (impl_op == 0x034u) { mask_tile = sources[0]; src0_tile = sources[1]; has_src0 = true; @@ -12833,305 +13925,497 @@ static void linx_tile_tepl(CPULinxState *env, unsigned dst_tile, has_src0 ? env->tile_reg_elem_bytes[src0_tile] : 0u; const unsigned src1_elem_bytes = has_src1 ? env->tile_reg_elem_bytes[src1_tile] : 0u; - const uint32_t src0_dtype = - has_src0 ? env->tile_reg_dtype[src0_tile] : 0u; - const uint32_t src1_dtype = - has_src1 ? env->tile_reg_dtype[src1_tile] : 0u; + const uint32_t src0_dtype = has_src0 ? env->tile_reg_dtype[src0_tile] : 0u; + const uint32_t src1_dtype = has_src1 ? env->tile_reg_dtype[src1_tile] : 0u; unsigned scalar_reg = 0; const bool scalar_mode = (env->tile_arg_format == 1u || env->tile_arg_format == 2u) && linx_tile_resolve_ior(env, 0, &scalar_reg); const uint32_t scalar_word = - scalar_mode - ? linx_tile_scalar_as_dtype(env->gpr[scalar_reg], env->tile_dtype, - elem_bytes) - : 0u; + scalar_mode ? linx_tile_scalar_as_dtype(env->gpr[scalar_reg], + operation_dtype, elem_bytes) + : 0u; uint32_t rows = 0; uint32_t cols = 0; uint32_t physical_cols = 0; - if (!linx_tile_tepl_selector_executable(op) || - !linx_tile_tepl_dtype_supported(op, env->tile_dtype) || - (op == 0x00du && + if (!linx_tile_tepl_selector_accepted(canonical_op) || + !linx_tile_tepl_selector_executable(canonical_op) || + impl_op == UINT32_MAX || + !linx_tile_tepl_impl_dtype_supported(impl_op, operation_dtype) || + (impl_op == 0x00du && (!has_src0 || - !linx_tile_tepl_dtype_supported(op, src0_dtype))) || - source_count != (unsigned)linx_tile_tepl_source_arity(op) || - dst_tile >= 32u || - bytes64 == 0u || - bytes64 > LINX_TILE_MAX_BYTES || - (elem_bytes != 1u && elem_bytes != 2u && elem_bytes != 4u) || + !linx_tile_tepl_impl_dtype_supported(impl_op, src0_dtype))) || + source_count != (unsigned)linx_tile_tepl_impl_source_arity(impl_op) || + dst_tile >= 32u || bytes64 == 0u || bytes64 > LINX_TILE_MAX_BYTES || + (elem_bytes != 1u && elem_bytes != 2u && elem_bytes != 4u && + elem_bytes != 8u) || (bytes64 % elem_bytes) != 0u || - !linx_tile_tepl_shape(env, elem_bytes, - (uint32_t)(bytes64 / elem_bytes), + !linx_tile_tepl_shape(env, elem_bytes, (uint32_t)(bytes64 / elem_bytes), &rows, &cols, &physical_cols)) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; + return false; } + op = impl_op; + const uint32_t active = rows * cols; - const uint32_t dtype = env->tile_dtype & 0x1fu; - if (op == 0x02fu && dtype != 17u && dtype != 18u && dtype != 1u && - dtype != 2u && dtype != 6u) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; - } - if ((op == 0x030u || op == 0x032u) && dtype != 17u && dtype != 25u && - dtype != 18u && dtype != 26u && dtype != 1u) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; - } - if (op == 0x033u && dtype != 17u && dtype != 1u && dtype != 2u && - dtype != 26u && dtype != 18u) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; - } - if ((op == 0x02cu || op == 0x034u) && - dtype != 17u && dtype != 18u && dtype != 19u && - dtype != 25u && dtype != 26u && dtype != 27u) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; - } - if (op == 0x035u && dtype != 2u && dtype != 1u && - dtype != 17u && dtype != 18u) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; - } - if (op == 0x038u && dtype != 2u && dtype != 1u && dtype != 6u && - dtype != 18u && dtype != 26u && dtype != 17u && dtype != 25u) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; - } - if ((op == 0x036u || op == 0x037u) && dtype != 2u && dtype != 1u) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; - } - if ((op == 0x039u || op == 0x03au) && - dtype != 19u && dtype != 27u && dtype != 18u && dtype != 26u && - dtype != 17u && dtype != 25u && dtype != 2u && dtype != 1u) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; - } - if ((op >= 0x03bu && op <= 0x048u) && dtype != 1u && dtype != 2u) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; - } - if (op == 0x082u && dtype != 19u && dtype != 27u && - dtype != 18u && dtype != 26u && dtype != 17u && dtype != 25u && - dtype != 2u && dtype != 6u && dtype != 1u) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; - } - if (op == 0x080u && dtype != 17u && dtype != 25u && - dtype != 18u && dtype != 26u) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; - } - if (op == 0x081u && dtype != 19u && dtype != 27u && - dtype != 18u && dtype != 26u && dtype != 17u && dtype != 25u && - dtype != 2u && dtype != 6u && dtype != 1u) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; - } - if ((op >= 0x0c3u && op <= 0x0c6u) && - dtype != 19u && dtype != 27u && dtype != 18u && dtype != 26u && - dtype != 17u && dtype != 25u && dtype != 2u && dtype != 6u && - dtype != 1u) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; - } - if ((op == 0x087u || op == 0x089u) && - dtype != 19u && dtype != 27u && dtype != 18u && dtype != 26u && - dtype != 17u && dtype != 25u && dtype != 2u && dtype != 6u && - dtype != 1u) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; - } - if (op == 0x085u && dtype != 19u && dtype != 2u && - dtype != 6u && dtype != 1u) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; + const uint32_t dtype = operation_dtype; + const uint32_t physical_rows = + (uint32_t)(bytes64 / elem_bytes) / physical_cols; + const bool partial_op = op >= 0x0c3u && op <= 0x0c6u; + if (!linx_tile_tepl_pre_publish_legal( + env, op, sources, source_count, operation_dtype, elem_bytes, cols, + rows, physical_cols, physical_rows)) { + return false; } - if (op == 0x084u && dtype != 1u) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; + if (elem_bytes == 8u && linx_tile_tepl64_core_op(op)) { + memset(env->tile_reg[dst_tile], 0, LINX_TILE_MAX_BYTES); + if (!linx_tile_tepl64_core(env, dst_tile, sources, source_count, op, + operation_dtype, rows, cols, physical_cols, + (uint32_t)bytes64)) { + return false; + } + if (op == 0x02bu || op == 0x033u) { + return true; + } + env->tile_reg_bytes[dst_tile] = (uint32_t)bytes64; + linx_tile_set_elem_bytes(env, dst_tile, 8u); + linx_tile_set_dtype(env, dst_tile, operation_dtype); + if (!linx_tile_set_block_shape(env, dst_tile, (uint32_t)bytes64, 8u)) { + return false; + } + return true; } - const uint32_t physical_rows = (uint32_t)(bytes64 / elem_bytes) / - physical_cols; - const bool expand_op = op == 0x01eu || op == 0x01fu || - (op >= 0x03bu && op <= 0x048u); - const bool partial_op = op >= 0x0c3u && op <= 0x0c6u; - const bool custom_shape_op = op == 0x01cu || op == 0x087u || - op == 0x089u || op == 0x085u || - op == 0x084u; - if ((!expand_op && !partial_op && !custom_shape_op && - ((has_src0 && - !linx_tile_shape_covers(env, src0_tile, cols, rows, physical_cols, - physical_rows)) || - (has_src1 && - !linx_tile_shape_covers(env, src1_tile, cols, rows, physical_cols, - physical_rows)))) || - (expand_op && op >= 0x03bu && - !linx_tile_shape_covers(env, src0_tile, cols, rows, physical_cols, - physical_rows))) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; + if (op != 0x101u && op != 0x103u) { + memset(env->tile_reg[dst_tile], 0, LINX_TILE_MAX_BYTES); } - memset(env->tile_reg[dst_tile], 0, LINX_TILE_MAX_BYTES); if (op == 0x02bu) { if (!has_src0 || !has_src1 || - !linx_tile_tepl_tcmp(env, dst_tile, src0_tile, src1_tile, - rows, cols, physical_cols, - (uint32_t)bytes64)) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; + !linx_tile_tepl_tcmp(env, dst_tile, src0_tile, src1_tile, rows, + cols, physical_cols, (uint32_t)bytes64)) { + return false; } - return; - } else if (op == 0x080u) { - unsigned start_reg = 0; - unsigned descending_reg = 0; - if (!linx_tile_resolve_ior(env, 0, &start_reg) || - !linx_tile_resolve_ior(env, 1, &descending_reg) || - env->gpr[descending_reg] > 1u) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; + return true; + } else if (op == 0x100u || op == 0x101u) { + unsigned value_reg = 0; + if (!has_src0 || has_src1 || + !linx_tile_resolve_ior(env, 0, &value_reg)) { + return false; } - const uint32_t start = linx_tile_scalar_as_dtype( - env->gpr[start_reg], dtype, elem_bytes); - const bool descending = env->gpr[descending_reg] != 0u; - for (uint32_t i = 0; i < cols; i++) { - const uint32_t value = descending ? start - i : start + i; - if (!linx_tile_set_elem(env, dst_tile, i, elem_bytes, value)) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; + const uint32_t scalar = + linx_tile_scalar_as_dtype(env->gpr[value_reg], dtype, elem_bytes); + for (uint32_t r = 0; r < rows; r++) { + for (uint32_t c = 0; c < cols; c++) { + const uint32_t lane = r * physical_cols + c; + uint32_t value = 0; + if (!linx_tile_get_elem(env, src0_tile, lane, elem_bytes, + &value)) { + return false; + } + uint32_t result; + if (op == 0x101u) { + uint32_t destination = 0; + if (!linx_tile_get_elem(env, dst_tile, lane, elem_bytes, + &destination)) { + return false; + } + const uint32_t product = linx_tile_tepl_binary_word( + env, 0x002u, dtype, value, scalar); + result = linx_tile_tepl_binary_word(env, 0x000u, dtype, + destination, product); + } else if (linx_tile_dtype_is_signed(dtype) && + linx_tile_sign_extend(value, elem_bytes) < 0) { + result = linx_tile_tepl_binary_word(env, 0x002u, dtype, + value, scalar); + } else if (dtype == 1u && linx_tile_word_as_f32(value) < 0.0f) { + result = linx_tile_tepl_binary_word(env, 0x002u, dtype, + value, scalar); + } else { + result = value; + } + linx_tile_set_elem(env, dst_tile, lane, elem_bytes, result); } } - } else if (op == 0x081u) { - unsigned diagonal_reg = 0; - unsigned orientation_reg = 0; - if (!linx_tile_resolve_ior(env, 0, &diagonal_reg) || - !linx_tile_resolve_ior(env, 1, &orientation_reg) || - env->gpr[orientation_reg] > 1u) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; + } else if (op == 0x102u) { + unsigned scale_reg = 0; + unsigned zero_reg = 0; + if (!has_src0 || has_src1 || + !linx_tile_resolve_ior(env, 0, &scale_reg) || + !linx_tile_resolve_ior(env, 1, &zero_reg) || + env->gpr[scale_reg] == 0u) { + return false; } - const int64_t diagonal = (int32_t)env->gpr[diagonal_reg]; - const bool upper = env->gpr[orientation_reg] != 0u; - const uint32_t one = linx_tile_tepl_one(dtype); for (uint32_t r = 0; r < rows; r++) { for (uint32_t c = 0; c < cols; c++) { - const int64_t boundary = (int64_t)r + diagonal; - const bool selected = upper ? (int64_t)c >= boundary - : (int64_t)c <= boundary; - if (!linx_tile_set_elem(env, dst_tile, - r * physical_cols + c, - elem_bytes, selected ? one : 0u)) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; + const uint32_t lane = r * physical_cols + c; + uint32_t value = 0; + if (!linx_tile_get_elem(env, src0_tile, lane, src0_elem_bytes, + &value) || + !linx_tile_set_elem( + env, dst_tile, lane, elem_bytes, + (uint32_t)((uint64_t)value / env->gpr[scale_reg] + + env->gpr[zero_reg]))) { + return false; } } } - } else if (op == 0x02cu || op == 0x034u) { - if ((op == 0x034u && - (!scalar_mode || env->tile_arg_format != 1u)) || - !linx_tile_tepl_select(env, dst_tile, mask_tile, src0_tile, - src1_tile, op == 0x034u, scalar_word, - rows, cols, physical_cols)) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; + } else if (op == 0x103u) { + unsigned row_reg = 0; + unsigned col_reg = 0; + if (!has_src0 || has_src1 || !linx_tile_resolve_ior(env, 0, &row_reg) || + !linx_tile_resolve_ior(env, 1, &col_reg)) { + return false; } - } else if (op == 0x033u) { - if (!has_src0 || has_src1 || !scalar_mode || - env->tile_arg_format != 1u || - !linx_tile_tepl_tcmps(env, dst_tile, src0_tile, scalar_word, - rows, cols, physical_cols, - (uint32_t)bytes64)) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; + const uint64_t row_off = env->gpr[row_reg]; + const uint64_t col_off = env->gpr[col_reg]; + const uint32_t src_rows = env->tile_reg_valid_rows[src0_tile]; + const uint32_t src_cols = env->tile_reg_valid_cols[src0_tile]; + const uint32_t src_stride = env->tile_reg_cols[src0_tile]; + if (row_off + src_rows > rows || col_off + src_cols > cols) { + return false; } - return; - } else if (op == 0x035u || op == 0x038u) { - if (!linx_tile_tepl_product(env, dst_tile, src0_tile, - op == 0x035u, rows, cols, physical_cols, - (uint32_t)bytes64)) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); + for (uint32_t r = 0; r < src_rows; r++) { + for (uint32_t c = 0; c < src_cols; c++) { + uint32_t value = 0; + if (!linx_tile_get_elem(env, src0_tile, r * src_stride + c, + elem_bytes, &value) || + !linx_tile_set_elem(env, dst_tile, + (r + row_off) * physical_cols + c + + col_off, + elem_bytes, value)) { + return false; + } + } } - return; - } else if (op >= 0x036u && op <= 0x03au) { - const bool row_reduce = op == 0x036u || op == 0x037u; - const bool find_max = op == 0x036u || op == 0x039u; - - if (!linx_tile_tepl_arg_reduce(env, dst_tile, src0_tile, - row_reduce, find_max, rows, cols, - physical_cols, (uint32_t)bytes64)) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); + } else if (op == 0x104u) { + unsigned arg_reg[7]; + for (unsigned i = 0; i < ARRAY_SIZE(arg_reg); i++) { + if (!linx_tile_resolve_ior(env, i, &arg_reg[i])) { + return false; + } } - return; + const uint32_t kr = env->gpr[arg_reg[0]]; + const uint32_t kc = env->gpr[arg_reg[1]]; + const uint32_t sr = env->gpr[arg_reg[2]]; + const uint32_t sc = env->gpr[arg_reg[3]]; + const uint32_t pr = env->gpr[arg_reg[4]]; + const uint32_t pc = env->gpr[arg_reg[5]]; + const uint32_t padding = + linx_tile_scalar_as_dtype(env->gpr[arg_reg[6]], dtype, elem_bytes); + const uint32_t in_rows = env->tile_reg_valid_rows[src0_tile]; + const uint32_t in_cols = env->tile_reg_valid_cols[src0_tile]; + const uint32_t in_stride = env->tile_reg_cols[src0_tile]; + if (kr == 0u || kc == 0u || sr == 0u || sc == 0u || + (uint64_t)kr * kc != cols) { + return false; + } + for (uint32_t patch = 0; patch < rows; patch++) { + const uint32_t patches_per_row = + (in_cols + 2u * pc >= kc) ? (in_cols + 2u * pc - kc) / sc + 1u + : 0u; + if (patches_per_row == 0u) { + return false; + } + const uint32_t origin_r = (patch / patches_per_row) * sr; + const uint32_t origin_c = (patch % patches_per_row) * sc; + for (uint32_t k = 0; k < kr * kc; k++) { + const int64_t ir = (int64_t)origin_r + k / kc - pr; + const int64_t ic = (int64_t)origin_c + k % kc - pc; + uint32_t value = padding; + if (ir >= 0 && ic >= 0 && ir < in_rows && ic < in_cols && + !linx_tile_get_elem(env, src0_tile, ir * in_stride + ic, + elem_bytes, &value)) { + return false; + } + linx_tile_set_elem(env, dst_tile, patch * physical_cols + k, + elem_bytes, value); + } + } + } else if (op == 0x105u) { + const unsigned selected_byte = (env->tile_attr_raw >> 12) & 0x3u; + const uint32_t source_dtype = env->tile_reg_dtype[src0_tile] & 0x1fu; + const unsigned source_bytes = env->tile_reg_elem_bytes[src0_tile]; + const uint32_t source_rows = env->tile_reg_valid_rows[src0_tile]; + const uint32_t source_cols = env->tile_reg_valid_cols[src0_tile]; + const uint32_t source_stride = env->tile_reg_cols[src0_tile]; + if (!has_src0 || !has_src1 || cols < 256u || + (source_dtype != 25u && source_dtype != 26u) || + (source_dtype == 26u && selected_byte > 1u) || + rows != source_rows) { + return false; + } + for (uint32_t r = 0; r < source_rows; r++) { + uint32_t counts[256] = {0}; + for (uint32_t c = 0; c < source_cols; c++) { + uint32_t value = 0; + linx_tile_get_elem(env, src0_tile, r * source_stride + c, + source_bytes, &value); + bool selected = true; + uint32_t filter = 0; + if (source_dtype == 26u && selected_byte == 0u) { + linx_tile_get_elem( + env, src1_tile, r * env->tile_reg_cols[src1_tile], + env->tile_reg_elem_bytes[src1_tile], &filter); + selected = ((value >> 8) & 0xffu) == (filter & 0xffu); + } else if (source_dtype == 25u) { + for (unsigned level = selected_byte + 1u; + level <= 3u && selected; level++) { + linx_tile_get_elem(env, src1_tile, 3u - level, + env->tile_reg_elem_bytes[src1_tile], + &filter); + selected = ((value >> (level * 8u)) & 0xffu) == + (filter & 0xffu); + } + } + if (selected) { + counts[(value >> (selected_byte * 8u)) & 0xffu]++; + } + } + uint32_t cumulative = 0; + for (unsigned bin = 0; bin < 256u; bin++) { + cumulative += counts[bin]; + linx_tile_set_elem(env, dst_tile, r * physical_cols + bin, + elem_bytes, cumulative); + } + } + } else if (op == 0x107u) { + unsigned descending_reg = 0; + if (!has_src0 || !has_src1 || + !linx_tile_resolve_ior(env, 0, &descending_reg) || + env->gpr[descending_reg] > 1u) { + return false; + } + const bool descending = env->gpr[descending_reg] != 0u; + uint32_t li = 0, ri = 0; + const uint32_t ln = env->tile_reg_valid_rows[src0_tile] * + env->tile_reg_valid_cols[src0_tile]; + const uint32_t rn = env->tile_reg_valid_rows[src1_tile] * + env->tile_reg_valid_cols[src1_tile]; + for (uint32_t out = 0; out < active; out++) { + uint32_t lv = 0, rv = 0, value = 0; + if (li < ln) { + linx_tile_get_elem(env, src0_tile, li++, elem_bytes, &lv); + li--; + } + if (ri < rn) { + linx_tile_get_elem(env, src1_tile, ri++, elem_bytes, &rv); + ri--; + } + bool take_left = ri >= rn; + if (li < ln && ri < rn) { + const uint32_t minv = linx_tile_tepl_binary_word( + env, descending ? 0x004u : 0x005u, dtype, lv, rv); + take_left = minv == lv; + } + value = take_left ? lv : rv; + if (take_left) + li++; + else + ri++; + linx_tile_set_elem(env, dst_tile, + (out / cols) * physical_cols + out % cols, + elem_bytes, value); + } + } else if (op == 0x108u || op == 0x109u) { + if (!has_src0 || has_src1 || env->tile_reg_bytes[src0_tile] > bytes64) { + return false; + } + memcpy(env->tile_reg[dst_tile], env->tile_reg[src0_tile], + env->tile_reg_bytes[src0_tile]); + env->tile_reg_capacity[dst_tile] = env->tile_reg_capacity[src0_tile]; + env->tile_reg_bytes[dst_tile] = env->tile_reg_bytes[src0_tile]; + linx_tile_set_elem_bytes(env, dst_tile, + env->tile_reg_elem_bytes[src0_tile]); + linx_tile_set_dtype(env, dst_tile, env->tile_reg_dtype[src0_tile]); + linx_tile_copy_shape(env, dst_tile, src0_tile); + return true; + } else if (op == 0x10au) { + unsigned arg_reg[7]; + for (unsigned i = 0; i < ARRAY_SIZE(arg_reg); i++) { + if (!linx_tile_resolve_ior(env, i, &arg_reg[i])) { + return false; + } + } + const uint64_t capacity = env->gpr[arg_reg[0]]; + const uint32_t alloc_rows = env->gpr[arg_reg[1]]; + const uint32_t alloc_cols = env->gpr[arg_reg[2]]; + const uint32_t valid_rows = env->gpr[arg_reg[3]]; + const uint32_t valid_cols = env->gpr[arg_reg[4]]; + const uint32_t alloc_dtype = env->gpr[arg_reg[5]] & 0x1fu; + const uint64_t impl_layout = env->gpr[arg_reg[6]]; + uint64_t in_use = 0; + for (unsigned tile = 0; tile < 32u; tile++) { + if (tile != dst_tile) + in_use += env->tile_reg_capacity[tile]; + } + if (capacity == 0u || capacity > LINX_TILE_PE_CAPACITY_BYTES || + (capacity % LINX_TILE_CELL_BYTES) != 0u || alloc_rows == 0u || + alloc_cols == 0u || (uint64_t)alloc_rows * alloc_cols > 256u || + valid_rows > alloc_rows || valid_cols > alloc_cols || + impl_layout > 1u || !linx_tile_data_type_accepted(alloc_dtype)) { + return false; + } + if (in_use + capacity > LINX_TILE_PE_CAPACITY_BYTES) { + return false; + } + env->tile_reg_capacity[dst_tile] = capacity; + env->tile_reg_bytes[dst_tile] = + MIN((uint64_t)LINX_TILE_MAX_BYTES, + ROUND_UP((uint64_t)alloc_rows * alloc_cols * + linx_tile_dtype_elem_bytes(alloc_dtype), + 4u)); + linx_tile_set_elem_bytes(env, dst_tile, + linx_tile_dtype_elem_bytes(alloc_dtype)); + linx_tile_set_dtype(env, dst_tile, alloc_dtype); + if (!linx_tile_set_shape(env, dst_tile, valid_cols, valid_rows, + alloc_cols, alloc_rows)) { + return false; + } + return true; + } else if (op == 0x10bu) { + memset(env->tile_reg[dst_tile], 0, sizeof(env->tile_reg[dst_tile])); + env->tile_reg_capacity[dst_tile] = 0; + env->tile_reg_bytes[dst_tile] = 0; + env->tile_reg_elem_bytes[dst_tile] = 1u; + env->tile_reg_dtype[dst_tile] = 27u; + env->tile_reg_valid_cols[dst_tile] = 0u; + env->tile_reg_valid_rows[dst_tile] = 0u; + env->tile_reg_cols[dst_tile] = 0u; + env->tile_reg_rows[dst_tile] = 0u; + return true; + } else if (op == 0x080u) { + unsigned start_reg = 0; + unsigned descending_reg = 0; + if (!linx_tile_resolve_ior(env, 0, &start_reg) || + !linx_tile_resolve_ior(env, 1, &descending_reg) || + env->gpr[descending_reg] > 1u) { + return false; + } + const uint32_t start = + linx_tile_scalar_as_dtype(env->gpr[start_reg], dtype, elem_bytes); + const bool descending = env->gpr[descending_reg] != 0u; + for (uint32_t i = 0; i < cols; i++) { + const uint32_t value = descending ? start - i : start + i; + if (!linx_tile_set_elem(env, dst_tile, i, elem_bytes, value)) { + return false; + } + } + } else if (op == 0x081u) { + unsigned diagonal_reg = 0; + unsigned orientation_reg = 0; + if (!linx_tile_resolve_ior(env, 0, &diagonal_reg) || + !linx_tile_resolve_ior(env, 1, &orientation_reg) || + env->gpr[orientation_reg] > 1u) { + return false; + } + const int64_t diagonal = (int32_t)env->gpr[diagonal_reg]; + const bool upper = env->gpr[orientation_reg] != 0u; + const uint32_t one = linx_tile_tepl_one(dtype); + for (uint32_t r = 0; r < rows; r++) { + for (uint32_t c = 0; c < cols; c++) { + const int64_t boundary = (int64_t)r + diagonal; + const bool selected = + upper ? (int64_t)c >= boundary : (int64_t)c <= boundary; + if (!linx_tile_set_elem(env, dst_tile, r * physical_cols + c, + elem_bytes, selected ? one : 0u)) { + return false; + } + } + } + } else if (op == 0x02cu || op == 0x034u) { + if ((op == 0x034u && (!scalar_mode || env->tile_arg_format != 1u)) || + !linx_tile_tepl_select(env, dst_tile, mask_tile, src0_tile, + src1_tile, op == 0x034u, scalar_word, rows, + cols, physical_cols)) { + return false; + } + } else if (op == 0x033u) { + if (!has_src0 || has_src1 || !scalar_mode || + env->tile_arg_format != 1u || + !linx_tile_tepl_tcmps(env, dst_tile, src0_tile, scalar_word, rows, + cols, physical_cols, (uint32_t)bytes64)) { + return false; + } + return true; + } else if (op == 0x035u || op == 0x038u) { + if (!linx_tile_tepl_product(env, dst_tile, src0_tile, op == 0x035u, + rows, cols, physical_cols, + (uint32_t)bytes64)) { + return false; + } + return true; + } else if (op >= 0x036u && op <= 0x03au) { + const bool row_reduce = op == 0x036u || op == 0x037u; + const bool find_max = op == 0x036u || op == 0x039u; + + if (!linx_tile_tepl_arg_reduce(env, dst_tile, src0_tile, row_reduce, + find_max, rows, cols, physical_cols, + (uint32_t)bytes64)) { + return false; + } + return true; } else if (op == 0x082u) { if (!linx_tile_tepl_fillpad(env, dst_tile, src0_tile, rows, cols, physical_rows, physical_cols)) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; + return false; } } else if (partial_op) { static const unsigned binary_ops[4] = { - 0x000u, 0x002u, 0x004u, 0x005u, + 0x000u, + 0x002u, + 0x004u, + 0x005u, }; - if (!linx_tile_tepl_partial_binary( - env, dst_tile, src0_tile, src1_tile, - binary_ops[op - 0x0c3u], rows, cols, physical_cols)) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; + if (!linx_tile_tepl_partial_binary(env, dst_tile, src0_tile, src1_tile, + binary_ops[op - 0x0c3u], rows, cols, + physical_cols)) { + return false; } } else if (op == 0x01cu) { if (env->tile_reg_bytes[src0_tile] != bytes64) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; + return false; } memcpy(env->tile_reg[dst_tile], env->tile_reg[src0_tile], bytes64); } else if (op == 0x087u) { - if (!linx_tile_tepl_concat(env, dst_tile, src0_tile, src1_tile, - rows, cols, physical_cols)) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; + if (!linx_tile_tepl_concat(env, dst_tile, src0_tile, src1_tile, rows, + cols, physical_cols)) { + return false; } } else if (op == 0x089u) { - if (!linx_tile_tepl_gatherb(env, dst_tile, src0_tile, src1_tile, - rows, cols, physical_cols)) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; + if (!linx_tile_tepl_gatherb(env, dst_tile, src0_tile, src1_tile, rows, + cols, physical_cols)) { + return false; } } else if (op == 0x085u) { - if (!linx_tile_tepl_extract(env, dst_tile, src0_tile, - rows, cols, physical_cols)) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; + if (!linx_tile_tepl_extract(env, dst_tile, src0_tile, rows, cols, + physical_cols)) { + return false; } } else if (op == 0x084u) { if (!linx_tile_tepl_dequant(env, dst_tile, sources[0], sources[1], sources[2], rows, cols, physical_cols)) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; + return false; } } else if (op == 0x00du) { if (!has_src0 || src0_elem_bytes == 0u) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; + return false; } const uint32_t src_elems = env->tile_reg_bytes[src0_tile] / src0_elem_bytes; const uint32_t count = MIN(active, src_elems); for (uint32_t i = 0; i < count; i++) { const uint32_t lane = (i / cols) * physical_cols + (i % cols); - uint32_t value = 0; - linx_tile_get_elem(env, src0_tile, lane, src0_elem_bytes, &value); - const float converted = - linx_tile_value_as_f32(env, value, src0_dtype, - src0_elem_bytes); - linx_tile_set_elem( - env, dst_tile, lane, elem_bytes, - linx_tile_f32_as_dtype(env, converted, env->tile_dtype, - elem_bytes)); + uint64_t value = 0; + if (!linx_tile_get_elem64(env, src0_tile, lane, src0_elem_bytes, + &value) || + !linx_tile_set_elem64( + env, dst_tile, lane, elem_bytes, + linx_tile_tepl_convert64(env, value, src0_dtype, + src0_elem_bytes, operation_dtype, + elem_bytes))) { + return false; + } } } else if (op == 0x019u && scalar_mode) { for (uint32_t r = 0; r < rows; r++) @@ -13141,8 +14425,7 @@ static void linx_tile_tepl(CPULinxState *env, unsigned dst_tile, } else if (op == 0x01au) { if (!has_src0 || !has_src1 || src0_elem_bytes == 0u || src1_elem_bytes == 0u) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; + return false; } const uint32_t index_elems = env->tile_reg_bytes[src1_tile] / src1_elem_bytes; @@ -13159,14 +14442,14 @@ static void linx_tile_tepl(CPULinxState *env, unsigned dst_tile, index %= MAX(1u, active); const uint32_t src_lane = (index / cols) * physical_cols + (index % cols); - linx_tile_get_elem(env, src0_tile, src_lane, src0_elem_bytes, &value); + linx_tile_get_elem(env, src0_tile, src_lane, src0_elem_bytes, + &value); linx_tile_set_elem(env, dst_tile, lane, elem_bytes, value); } } else if (op == 0x01bu) { if (!has_src0 || !has_src1 || src0_elem_bytes == 0u || src1_elem_bytes == 0u) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; + return false; } const uint32_t data_elems = env->tile_reg_bytes[src0_tile] / src0_elem_bytes; @@ -13190,98 +14473,86 @@ static void linx_tile_tepl(CPULinxState *env, unsigned dst_tile, } } else if (op == 0x012u || op == 0x013u || op == 0x014u) { if (!has_src0) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; + return false; } for (uint32_t r = 0; r < rows; r++) { uint32_t result = 0; - if (!linx_tile_get_elem(env, src0_tile, r * physical_cols, elem_bytes, - &result)) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; + if (!linx_tile_get_elem(env, src0_tile, r * physical_cols, + elem_bytes, &result)) { + return false; } if (op == 0x014u) { - result = (env->tile_dtype & 0x1fu) == 1u - ? linx_tile_f32_as_word(0.0f) - : 0u; + result = + operation_dtype == 1u ? linx_tile_f32_as_word(0.0f) : 0u; } for (uint32_t c = 0; c < cols; c++) { uint32_t value = 0; if (!linx_tile_get_elem(env, src0_tile, r * physical_cols + c, elem_bytes, &value)) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; + return false; } if (op == 0x014u) { result = linx_tile_tepl_binary_word( - env, 0x000u, env->tile_dtype, result, value); + env, 0x000u, operation_dtype, result, value); } else { result = linx_tile_tepl_binary_word( - env, op == 0x012u ? 0x004u : 0x005u, - env->tile_dtype, result, value); + env, op == 0x012u ? 0x004u : 0x005u, operation_dtype, + result, value); } } - linx_tile_set_elem(env, dst_tile, r * physical_cols, elem_bytes, result); + linx_tile_set_elem(env, dst_tile, r * physical_cols, elem_bytes, + result); } } else if (op == 0x015u || op == 0x016u || op == 0x017u) { if (!has_src0) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; + return false; } for (uint32_t c = 0; c < cols; c++) { uint32_t result = 0; if (!linx_tile_get_elem(env, src0_tile, c, elem_bytes, &result)) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; + return false; } if (op == 0x017u) { - result = (env->tile_dtype & 0x1fu) == 1u - ? linx_tile_f32_as_word(0.0f) - : 0u; + result = + operation_dtype == 1u ? linx_tile_f32_as_word(0.0f) : 0u; } for (uint32_t r = 0; r < rows; r++) { uint32_t value = 0; - linx_tile_get_elem(env, src0_tile, r * physical_cols + c, elem_bytes, - &value); + linx_tile_get_elem(env, src0_tile, r * physical_cols + c, + elem_bytes, &value); if (op == 0x017u) { result = linx_tile_tepl_binary_word( - env, 0x000u, env->tile_dtype, result, value); + env, 0x000u, operation_dtype, result, value); } else { result = linx_tile_tepl_binary_word( - env, op == 0x015u ? 0x004u : 0x005u, - env->tile_dtype, result, value); + env, op == 0x015u ? 0x004u : 0x005u, operation_dtype, + result, value); } } linx_tile_set_elem(env, dst_tile, c, elem_bytes, result); } } else if (op == 0x01du) { if (!has_src0) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; + return false; } for (uint32_t r = 0; r < rows; r++) { for (uint32_t c = 0; c < cols; c++) { uint32_t value = 0; - linx_tile_get_elem(env, src0_tile, r * physical_cols + c, elem_bytes, - &value); - linx_tile_set_elem(env, dst_tile, c * physical_cols + r, elem_bytes, - value); + linx_tile_get_elem(env, src0_tile, r * physical_cols + c, + elem_bytes, &value); + linx_tile_set_elem(env, dst_tile, c * physical_cols + r, + elem_bytes, value); } } - } else if (op == 0x01eu || op == 0x01fu || - (op >= 0x03bu && op <= 0x048u)) { + } else if (op == 0x01eu || op == 0x01fu || (op >= 0x03bu && op <= 0x048u)) { const bool pure_expand = op == 0x01eu || op == 0x01fu; - const bool row_expand = op == 0x01fu || - (op >= 0x03bu && op <= 0x041u); - const unsigned operation = pure_expand - ? 0u - : (row_expand ? op - 0x03bu - : op - 0x042u); + const bool row_expand = op == 0x01fu || (op >= 0x03bu && op <= 0x041u); + const unsigned operation = + pure_expand ? 0u : (row_expand ? op - 0x03bu : op - 0x042u); if (!linx_tile_tepl_expand(env, dst_tile, src0_tile, src1_tile, - pure_expand, row_expand, operation, - rows, cols, physical_cols)) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; + pure_expand, row_expand, operation, rows, + cols, physical_cols)) { + return false; } } else { for (uint32_t i = 0; i < active; i++) { @@ -13291,39 +14562,61 @@ static void linx_tile_tepl(CPULinxState *env, unsigned dst_tile, uint32_t result = 0; if (has_src0 && !linx_tile_get_elem(env, src0_tile, lane, elem_bytes, &lhs)) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; + return false; } if (has_src1 && !linx_tile_get_elem(env, src1_tile, lane, elem_bytes, &rhs)) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; + return false; } if (has_src0 && has_src1) { - result = linx_tile_tepl_binary_word( - env, op, env->tile_dtype, lhs, rhs); - } else if (has_src0 && scalar_mode && - env->tile_arg_format == 1u) { - result = linx_tile_tepl_binary_word( - env, op, env->tile_dtype, lhs, scalar_word); + if (!linx_tile_tepl_binary_word_checked( + env, op, operation_dtype, lhs, rhs, &result)) { + return false; + } + } else if (has_src0 && scalar_mode && env->tile_arg_format == 1u) { + if (!linx_tile_tepl_binary_word_checked( + env, op, operation_dtype, lhs, scalar_word, + &result)) { + return false; + } } else if (has_src0) { - result = linx_tile_tepl_unary_word( - op, env->tile_dtype, lhs); + result = + linx_tile_tepl_unary_word(env, op, operation_dtype, lhs); } else { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; + return false; } linx_tile_set_elem(env, dst_tile, lane, elem_bytes, result); } } + /* Every produced NaN is canonical; the attribute only controls inputs. */ + { + for (uint32_t r = 0; r < rows; r++) { + for (uint32_t c = 0; c < cols; c++) { + const uint32_t lane = r * physical_cols + c; + uint64_t value = 0; + if (!linx_tile_get_elem64(env, dst_tile, lane, elem_bytes, + &value) || + !linx_tile_set_elem64( + env, dst_tile, lane, elem_bytes, + elem_bytes == 8u + ? linx_tile_canonicalize_nan64(value, + operation_dtype) + : linx_tile_canonicalize_nan((uint32_t)value, + operation_dtype))) { + return false; + } + } + } + } env->tile_reg_bytes[dst_tile] = (uint32_t)bytes64; linx_tile_set_elem_bytes(env, dst_tile, elem_bytes); - linx_tile_set_dtype(env, dst_tile, env->tile_dtype); + linx_tile_set_dtype(env, dst_tile, operation_dtype); if (!linx_tile_set_block_shape(env, dst_tile, (uint32_t)bytes64, elem_bytes)) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); + return false; } + return true; } static inline unsigned linx_tile_offset_elem_bytes(const CPULinxState *env, @@ -13426,7 +14719,7 @@ static void linx_tile_load(CPULinxState *env, unsigned dst_tile, unsigned addr_r return; } const size_t bytes = (size_t)bytes64; - const uint32_t dtype = env->tile_dtype; + const uint32_t dtype = linx_tile_effective_dtype(env); const unsigned elem_bytes = linx_tile_dtype_elem_bytes(dtype); if ((bytes % elem_bytes) != 0u) { helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); @@ -13434,7 +14727,7 @@ static void linx_tile_load(CPULinxState *env, unsigned dst_tile, unsigned addr_r } const uint32_t tile_elems = (uint32_t)(bytes / elem_bytes); const LinxTileFormatDesc fmt = - linx_tile_decode_tma_format(env->tile_arg_format, LINX_TMA_GM_TO_TR); + linx_tile_effective_transfer_format(env, LINX_TMA_GM_TO_TR); if (!fmt.valid) { helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); return; @@ -13460,7 +14753,7 @@ static void linx_tile_load(CPULinxState *env, unsigned dst_tile, unsigned addr_r for (uint32_t to = 0; to < tr_outer; to++) { for (uint32_t ti = 0; ti < tr_inner; ti++) { uint32_t dst_idx = 0; - uint32_t value = 0; + uint64_t value = 0; if (!linx_tile_linear_index(fmt.dst, tr_outer, tr_inner, elem_bytes, to, ti, &dst_idx)) { helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); return; @@ -13479,13 +14772,15 @@ static void linx_tile_load(CPULinxState *env, unsigned dst_tile, unsigned addr_r src_off = (uint64_t)ti * stride_bytes + (uint64_t)to * elem_bytes; } - value = linx_tile_mem_read(env, base + src_off, elem_bytes); + value = linx_tile_mem_read64(env, base + src_off, elem_bytes); } else { const uint32_t seed = (to * tr_inner) ^ ti ^ (uint32_t)base ^ (env->tile_arg_format << 8); - value = linx_tile_pad_value(linx_tile_arg_pad(env->tile_arg_format), - dtype, elem_bytes, seed); + value = linx_tile_pad_value64( + linx_tile_arg_pad(env->tile_arg_format), dtype, + elem_bytes, seed); } - if (!linx_tile_set_elem(env, dst_tile, dst_idx, elem_bytes, value)) { + if (!linx_tile_set_elem64(env, dst_tile, dst_idx, elem_bytes, + value)) { helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); return; } @@ -13493,7 +14788,7 @@ static void linx_tile_load(CPULinxState *env, unsigned dst_tile, unsigned addr_r } env->tile_reg_bytes[dst_tile] = (uint32_t)bytes; linx_tile_set_elem_bytes(env, dst_tile, elem_bytes); - linx_tile_set_dtype(env, dst_tile, env->tile_dtype); + linx_tile_set_dtype(env, dst_tile, dtype); if (!linx_tile_set_shape(env, dst_tile, gm_inner, gm_outer, tr_inner, tr_outer)) { helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); @@ -13514,7 +14809,7 @@ static void linx_tile_store(CPULinxState *env, unsigned src_tile, unsigned addr_ return; } const size_t bytes = (size_t)bytes64; - const uint32_t dtype = env->tile_dtype; + const uint32_t dtype = linx_tile_effective_dtype(env); const unsigned elem_bytes = linx_tile_dtype_elem_bytes(dtype); if ((bytes % elem_bytes) != 0u) { helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); @@ -13526,7 +14821,7 @@ static void linx_tile_store(CPULinxState *env, unsigned src_tile, unsigned addr_ } const uint32_t tile_elems = (uint32_t)(bytes / elem_bytes); const LinxTileFormatDesc fmt = - linx_tile_decode_tma_format(env->tile_arg_format, LINX_TMA_TR_TO_GM); + linx_tile_effective_transfer_format(env, LINX_TMA_TR_TO_GM); if (!fmt.valid) { helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); return; @@ -13557,13 +14852,14 @@ static void linx_tile_store(CPULinxState *env, unsigned src_tile, unsigned addr_ for (uint32_t gi = 0; gi < gm_inner; gi++) { uint32_t src_idx = 0; uint32_t dst_idx = 0; - uint32_t value = 0; + uint64_t value = 0; if (!linx_tile_linear_index(fmt.src, tr_outer, tr_inner, elem_bytes, go, gi, &src_idx) || !linx_tile_linear_index(fmt.dst, gm_outer, gm_inner, elem_bytes, go, gi, &dst_idx)) { helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); return; } - if (!linx_tile_get_elem(env, src_tile, src_idx, elem_bytes, &value)) { + if (!linx_tile_get_elem64(env, src_tile, src_idx, elem_bytes, + &value)) { helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); return; } @@ -13575,7 +14871,7 @@ static void linx_tile_store(CPULinxState *env, unsigned src_tile, unsigned addr_ dst_off = (uint64_t)gi * stride_bytes + (uint64_t)go * elem_bytes; } - linx_tile_mem_write(env, base + dst_off, elem_bytes, value); + linx_tile_mem_write64(env, base + dst_off, elem_bytes, value); } } } @@ -13667,7 +14963,7 @@ static void linx_tile_prefetch(CPULinxState *env, unsigned addr_reg, uint32_t gm_outer = 0; uint32_t gm_inner = 0; const LinxTileFormatDesc fmt = - linx_tile_decode_tma_format(env->tile_arg_format, LINX_TMA_GM_TO_TR); + linx_tile_effective_transfer_format(env, LINX_TMA_GM_TO_TR); if (!fmt.valid || !linx_tile_resolve_transfer_shape(env, tile_elems, &tr_outer, &tr_inner, &gm_outer, &gm_inner)) { @@ -13846,7 +15142,7 @@ static void linx_tile_mgather_cas(CPULinxState *env, unsigned dst_tile, } } -static void linx_tile_mamulb(CPULinxState *env, unsigned src_a, unsigned src_b, +static void linx_tile_tmatmul(CPULinxState *env, unsigned src_a, unsigned src_b, unsigned size_code) { if (src_a >= 32 || src_b >= 32) { @@ -13892,7 +15188,7 @@ static void linx_tile_mamulb(CPULinxState *env, unsigned src_a, unsigned src_b, } } -static bool linx_tile_mamulb_bias(CPULinxState *env, unsigned src_a, +static bool linx_tile_tmatmul_bias(CPULinxState *env, unsigned src_a, unsigned src_b, unsigned bias, unsigned size_code) { @@ -13922,7 +15218,7 @@ static bool linx_tile_mamulb_bias(CPULinxState *env, unsigned src_a, return false; } - linx_tile_mamulb(env, src_a, src_b, size_code); + linx_tile_tmatmul(env, src_a, src_b, size_code); for (unsigned i = 0; i < m; i++) { for (unsigned j = 0; j < n; j++) { const int32_t product = (int32_t)env->tile_acc[i * 8u + j]; @@ -13934,7 +15230,85 @@ static bool linx_tile_mamulb_bias(CPULinxState *env, unsigned src_a, return true; } -static void linx_tile_mamulb_acc(CPULinxState *env, unsigned src_a, unsigned src_b, +static bool linx_tile_cube_scale_legal(const CPULinxState *env, + unsigned row_scale, + unsigned column_scale) +{ + const unsigned m = env->lb[0] ? MIN((unsigned)env->lb[0], 8u) : 8u; + const unsigned n = env->lb[1] ? MIN((unsigned)env->lb[1], 8u) : 8u; + + return row_scale < 32u && column_scale < 32u && + env->tile_reg_dtype[row_scale] == 17u && + env->tile_reg_dtype[column_scale] == 17u && + env->tile_reg_elem_bytes[row_scale] == 4u && + env->tile_reg_elem_bytes[column_scale] == 4u && + env->tile_reg_valid_rows[row_scale] >= m && + env->tile_reg_valid_cols[row_scale] >= 1u && + env->tile_reg_cols[row_scale] >= 1u && + env->tile_reg_bytes[row_scale] >= + ((m - 1u) * env->tile_reg_cols[row_scale] + 1u) * 4u && + env->tile_reg_valid_rows[column_scale] >= 1u && + env->tile_reg_valid_cols[column_scale] >= n && + env->tile_reg_cols[column_scale] >= n && + env->tile_reg_bytes[column_scale] >= n * 4u; +} + +static bool linx_tile_cube_scale_acc(CPULinxState *env, unsigned row_scale, + unsigned column_scale) +{ + const unsigned m = env->lb[0] ? MIN((unsigned)env->lb[0], 8u) : 8u; + const unsigned n = env->lb[1] ? MIN((unsigned)env->lb[1], 8u) : 8u; + + g_assert(linx_tile_cube_scale_legal(env, row_scale, column_scale)); + for (unsigned i = 0; i < m; i++) { + for (unsigned j = 0; j < n; j++) { + uint32_t row_word = 0, column_word = 0; + if (!linx_tile_get_elem(env, row_scale, + i * env->tile_reg_cols[row_scale], 4u, + &row_word) || + !linx_tile_get_elem(env, column_scale, j, 4u, + &column_word)) { + return false; + } + const int64_t scaled = (int64_t)(int32_t)env->tile_acc[i * 8u + j] * + (int32_t)row_word * (int32_t)column_word; + env->tile_acc[i * 8u + j] = (uint32_t)(int32_t)scaled; + } + } + return true; +} + +static bool linx_tile_cube_bias_legal(const CPULinxState *env, unsigned bias) +{ + const unsigned n = env->lb[1] ? MIN((unsigned)env->lb[1], 8u) : 8u; + + return bias < 32u && env->tile_reg_dtype[bias] == 17u && + env->tile_reg_elem_bytes[bias] == 4u && + env->tile_reg_valid_rows[bias] == 1u && + env->tile_reg_valid_cols[bias] >= n && + env->tile_reg_cols[bias] >= n && + env->tile_reg_bytes[bias] >= n * 4u; +} + +static bool linx_tile_cube_bias_acc(CPULinxState *env, unsigned bias) +{ + const unsigned m = env->lb[0] ? MIN((unsigned)env->lb[0], 8u) : 8u; + const unsigned n = env->lb[1] ? MIN((unsigned)env->lb[1], 8u) : 8u; + + g_assert(linx_tile_cube_bias_legal(env, bias)); + for (unsigned i = 0; i < m; i++) { + for (unsigned j = 0; j < n; j++) { + uint32_t word = 0; + if (!linx_tile_get_elem(env, bias, j, 4u, &word)) { + return false; + } + env->tile_acc[i * 8u + j] += word; + } + } + return true; +} + +static void linx_tile_tmatmul_acc(CPULinxState *env, unsigned src_a, unsigned src_b, unsigned size_code) { if (src_a >= 32 || src_b >= 32) { @@ -14229,6 +15603,114 @@ static bool linx_tile_collect_tepl_bindings( return true; } +static bool linx_tile_collect_sort_bindings( + const CPULinxState *env, unsigned *source_out, unsigned outputs[2], + unsigned output_indices[2], unsigned output_sizes[2]) +{ + unsigned sources[LINX_TILE_MAX_IOT * 2]; + unsigned source_count = 0; + unsigned output_count = 0; + + if (env->tile_iot_count < 2u || + !linx_tile_collect_sources(env, sources, &source_count) || + source_count != 1u) { + return false; + } + for (unsigned i = 0; i < env->tile_iot_count; i++) { + const LinxTileIOTDesc d = linx_tile_decode_iot(env->tile_iot_desc[i]); + const bool final_desc = i + 1u == env->tile_iot_count; + unsigned output = 0; + if ((d.last != 0u) != final_desc) { + return false; + } + if (env->tile_iot_output_valid[i]) { + if (output_count >= 2u || !d.has_size || + !linx_tile_size_code_valid(d.size) || + !linx_tile_get_bound_output(env, i, &output)) { + return false; + } + outputs[output_count] = output; + output_indices[output_count] = i; + output_sizes[output_count] = d.size; + output_count++; + } else if (d.has_size) { + return false; + } + } + *source_out = sources[0]; + return output_count == 2u; +} + +static bool linx_tile_sort(CPULinxState *env, unsigned value_dst, + unsigned index_dst, unsigned source, + unsigned value_size, unsigned index_size) +{ + unsigned descending_reg = 0; + const unsigned elem_bytes = env->tile_reg_elem_bytes[source]; + const uint32_t dtype = env->tile_reg_dtype[source]; + const uint32_t extent = env->tile_reg_valid_rows[source] * + env->tile_reg_valid_cols[source]; + const uint32_t value_bytes = 1u << (value_size + 4u); + const uint32_t index_bytes = 1u << (index_size + 4u); + + if (!linx_tile_resolve_ior(env, 0, &descending_reg) || + env->gpr[descending_reg] > 1u || value_dst >= 32u || + index_dst >= 32u || source >= 32u || elem_bytes == 0u || + (uint64_t)extent * elem_bytes > value_bytes || + (uint64_t)extent * sizeof(uint32_t) > index_bytes) { + return false; + } + const bool descending = env->gpr[descending_reg] != 0u; + memset(env->tile_reg[value_dst], 0, value_bytes); + memset(env->tile_reg[index_dst], 0, index_bytes); + for (uint32_t i = 0; i < extent; i++) { + uint32_t value = 0; + if (!linx_tile_get_elem(env, source, i, elem_bytes, &value) || + !linx_tile_set_elem(env, value_dst, i, elem_bytes, value) || + !linx_tile_set_elem(env, index_dst, i, sizeof(uint32_t), + i & 31u)) { + return false; + } + } + for (uint32_t group = 0; group < extent; group += 32u) { + const uint32_t end = MIN(group + 32u, extent); + for (unsigned pass = 0; pass < 32u; pass++) { + for (uint32_t i = group; i + 1u < end; i++) { + uint32_t left = 0, right = 0, left_index = 0, right_index = 0; + linx_tile_get_elem(env, value_dst, i, elem_bytes, &left); + linx_tile_get_elem(env, value_dst, i + 1u, elem_bytes, &right); + const uint32_t preferred = linx_tile_tepl_binary_word( + env, descending ? 0x004u : 0x005u, dtype, left, right); + if (preferred == left || left == right) { + continue; + } + linx_tile_get_elem(env, index_dst, i, sizeof(uint32_t), + &left_index); + linx_tile_get_elem(env, index_dst, i + 1u, + sizeof(uint32_t), &right_index); + linx_tile_set_elem(env, value_dst, i, elem_bytes, right); + linx_tile_set_elem(env, value_dst, i + 1u, elem_bytes, left); + linx_tile_set_elem(env, index_dst, i, sizeof(uint32_t), + right_index); + linx_tile_set_elem(env, index_dst, i + 1u, + sizeof(uint32_t), left_index); + } + } + } + env->tile_reg_bytes[value_dst] = value_bytes; + linx_tile_set_elem_bytes(env, value_dst, elem_bytes); + linx_tile_set_dtype(env, value_dst, dtype); + linx_tile_copy_shape(env, value_dst, source); + env->tile_reg_bytes[index_dst] = index_bytes; + linx_tile_set_elem_bytes(env, index_dst, sizeof(uint32_t)); + linx_tile_set_dtype(env, index_dst, 25u); + return linx_tile_set_shape(env, index_dst, + env->tile_reg_valid_cols[source], + env->tile_reg_valid_rows[source], + env->tile_reg_cols[source], + env->tile_reg_rows[source]); +} + static bool linx_tile_collect_interleave_bindings( const CPULinxState *env, unsigned sources[2], unsigned outputs[2], unsigned output_indices[2], unsigned *size_code_out) @@ -14309,7 +15791,6 @@ static bool linx_tile_collect_cube_sources( unsigned sources[LINX_TILE_MAX_IOT * 2], unsigned *size_code_out) { unsigned source_count = 0; - unsigned size_count = 0; if (env->tile_iot_count == 0u || !linx_tile_collect_sources(env, sources, &source_count) || @@ -14324,15 +15805,19 @@ static bool linx_tile_collect_cube_sources( if ((d.last != 0u) != final_desc || env->tile_iot_output_valid[i]) { return false; } + /* ACC is implicit in 0.57.1: no size-bearing pseudo destination. */ if (d.has_size) { - if (!final_desc || ++size_count != 1u) { - return false; - } - *size_code_out = d.size & 0x1fu; + return false; } } - - return size_count == 1u && linx_tile_size_code_valid(*size_code_out); + const uint32_t bytes = env->tile_reg_bytes[sources[0]]; + for (unsigned size = 3u; size <= 9u; size++) { + if (bytes == (1u << (size + 4u))) { + *size_code_out = size; + return true; + } + } + return false; } static bool linx_tile_transfer_preflight(const CPULinxState *env, @@ -14343,12 +15828,15 @@ static bool linx_tile_transfer_preflight(const CPULinxState *env, return false; } const uint64_t bytes = 1ull << (size_code + 4u); - const unsigned elem_bytes = linx_tile_dtype_elem_bytes(env->tile_dtype); - if ((bytes % elem_bytes) != 0) { + const unsigned elem_bytes = + linx_tile_dtype_elem_bytes(linx_tile_effective_dtype(env)); + if ((elem_bytes != 1u && elem_bytes != 2u && elem_bytes != 4u && + elem_bytes != 8u) || + (bytes % elem_bytes) != 0) { return false; } const LinxTileFormatDesc fmt = - linx_tile_decode_tma_format(env->tile_arg_format, dir); + linx_tile_effective_transfer_format(env, dir); if (!fmt.valid) { return false; } @@ -14395,6 +15883,10 @@ static bool linx_tile_preflight_tma( (env->tile_func & 0x1f) == LINX_TMA_MGATHER || (env->tile_func & 0x1f) == LINX_TMA_MGATHER_MASK || (env->tile_func & 0x1f) == LINX_TMA_MGATHER_CAS; + if ((env->tile_func & 0x1f) == LINX_TMA_MGATHER_CAS && + ((env->tile_attr_raw >> 19) & 1u) == 0u) { + return false; + } bool output_seen = false; if (!linx_tile_collect_sources(env, sources, &source_count) || @@ -14522,37 +16014,6 @@ static bool linx_tile_preflight_tma( planned_carrier_valid, planned_carrier); break; - case LINX_TMA_TCVT_COMPAT: { - const bool src0_present = (d.flags & LINX_IOT_S0V) == 0; - const bool src1_present = (d.flags & LINX_IOT_S1V) == 0; - unsigned src_tile; - unsigned dst_tile; - if (!linx_tile_size_code_valid(size_code)) { - return false; - } - if (src0_present) { - if (!linx_tile_get_bound_source(env, i, 0, &src_tile)) { - return false; - } - } else if (src1_present) { - if (!linx_tile_get_bound_source(env, i, 1, &src_tile)) { - return false; - } - } else { - return false; - } - if (!linx_tile_get_bound_output(env, i, &dst_tile) || - env->tile_reg_bytes[src_tile] < - (1ull << (size_code + 4u))) { - return false; - } - linx_tile_consume_bound_sources(env, planned_live, i, &d, - NULL, NULL, - planned_carrier_valid, - planned_carrier); - linx_tile_publish_output(planned_live, dst_tile); - break; - } default: return false; } @@ -14596,7 +16057,7 @@ void HELPER(linx_tile_set_arg)(CPULinxState *env, uint32_t format) void HELPER(linx_tile_set_attr)(CPULinxState *env, uint32_t packed) { env->tile_attr_raw = packed; - env->tile_attr_dtype = (packed >> 7) & 0x1fu; + env->tile_attr_dtype = 0x100u | ((packed >> 7) & 0x1fu); env->tile_attr_pad = (packed >> 12) & 0x1fu; } @@ -14622,8 +16083,7 @@ void HELPER(linx_tile_append_iot)(CPULinxState *env, uint64_t packed) tma_func == LINX_TMA_TMOV || tma_func == LINX_TMA_MGATHER || tma_func == LINX_TMA_MGATHER_MASK || - tma_func == LINX_TMA_MGATHER_CAS || - tma_func == LINX_TMA_TCVT_COMPAT)) || + tma_func == LINX_TMA_MGATHER_CAS)) || (env->blocktype == LINX_BLOCK_CUBE && (env->tile_func & 0x1f) == LINX_CUBE_ACCCVT) || env->blocktype == LINX_BLOCK_TEPL; @@ -14634,9 +16094,14 @@ void HELPER(linx_tile_append_iot)(CPULinxState *env, uint64_t packed) * pin, queue, or Tile state is changed. */ if (env->blocktype == LINX_BLOCK_TEPL && - (!linx_tile_tepl_selector_executable(env->tile_func & 0x3ffu) || - !linx_tile_tepl_dtype_supported(env->tile_func & 0x3ffu, - env->tile_dtype))) { + (!linx_tile_tepl_selector_accepted(env->tile_func & 0x7fu) || + !linx_tile_tepl_dtype_supported(env->tile_func & 0x7fu, + linx_tile_effective_dtype(env)))) { + helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); + return; + } + if (env->blocktype == LINX_BLOCK_CUBE && + !linx_tile_cube_dtype_supported(env->tile_dtype)) { helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); return; } @@ -14667,7 +16132,6 @@ void HELPER(linx_tile_append_iot)(CPULinxState *env, uint64_t packed) const unsigned index = env->tile_iot_count; uint8_t src_valid = 0; unsigned src_phys[2] = { 0, 0 }; - bool src_was_pinned[2] = { false, false }; if ((desc.flags & LINX_IOT_S0V) == 0) { if (!linx_tile_resolve_source(env, env->tile_hand_live, @@ -14675,108 +16139,458 @@ void HELPER(linx_tile_append_iot)(CPULinxState *env, uint64_t packed) helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); return; } - src_valid |= 1u; + src_valid |= 1u; + } + if ((desc.flags & LINX_IOT_S1V) == 0) { + if (!linx_tile_resolve_source(env, env->tile_hand_live, + desc.src1, &src_phys[1])) { + helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); + return; + } + src_valid |= 2u; + } + + /* TCVT legality also depends on the queued source dtype. */ + if (env->blocktype == LINX_BLOCK_TEPL && + (env->tile_func & 0x7fu) == 0x01bu && + (((src_valid & 1u) == 0u) || + !linx_tile_tepl_dtype_supported( + 0x01bu, env->tile_reg_dtype[src_phys[0]]))) { + helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); + return; + } + + const uint16_t owner = 1u << (env->acr & 0xfu); + for (unsigned source = 0; source < 2; source++) { + if ((src_valid & (1u << source)) != 0) { + const uint16_t pinned = env->tile_pin_owner[src_phys[source]]; + if (pinned != 0 && pinned != owner) { + helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); + return; + } + env->tile_iot_src_phys[index][source] = src_phys[source]; + } + } + + env->tile_iot_src_valid[index] = src_valid; + env->tile_iot_output_valid[index] = 0; + + if (desc.has_size && (vector_block || tile_output)) { + uint8_t occupied[LINX_TILE_HAND_COUNT]; + unsigned dst_tile; + const uint64_t bytes64 = desc.has_size && desc.size < 60u + ? (1ull << (desc.size + 4u)) : 0; + + for (unsigned hand = 0; hand < LINX_TILE_HAND_COUNT; hand++) { + occupied[hand] = env->tile_hand_live[hand] | + env->tile_hand_reserved[hand]; + } + for (unsigned planned = 0; planned < index; planned++) { + if (env->tile_iot_output_valid[planned]) { + const unsigned tile = env->tile_iot_output_phys[planned]; + occupied[tile / LINX_TILE_HAND_DEPTH] |= + 1u << (tile % LINX_TILE_HAND_DEPTH); + } + } + for (unsigned tile = 0; + tile < LINX_TILE_HAND_COUNT * LINX_TILE_HAND_DEPTH; tile++) { + if (env->tile_pin_owner[tile]) { + occupied[tile / LINX_TILE_HAND_DEPTH] |= + 1u << (tile % LINX_TILE_HAND_DEPTH); + } + } + if (bytes64 == 0 || bytes64 > LINX_TILE_MAX_BYTES || + (bytes64 & 3u) != 0 || + !linx_tile_reserve_output(occupied, &desc, &dst_tile)) { + env->tile_iot_src_valid[index] = 0; + memset(env->tile_iot_src_phys[index], 0, + sizeof(env->tile_iot_src_phys[index])); + helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); + return; + } + const unsigned hand = dst_tile / LINX_TILE_HAND_DEPTH; + const unsigned depth = dst_tile % LINX_TILE_HAND_DEPTH; + const uint32_t tepl_op = env->tile_func & 0x7fu; + const bool in_place_version = + env->blocktype == LINX_BLOCK_TEPL && + (tepl_op == 0x02fu || tepl_op == 0x063u); + unsigned prior_dst = 0; + if (in_place_version) { + if (env->tile_hand_count[hand] == 0u) { + env->tile_iot_src_valid[index] = 0; + memset(env->tile_iot_src_phys[index], 0, + sizeof(env->tile_iot_src_phys[index])); + helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); + return; + } + prior_dst = env->tile_hand_order[hand][0]; + if (env->tile_reg_bytes[prior_dst] != bytes64 || + env->tile_reg_dtype[prior_dst] != + linx_tile_effective_dtype(env)) { + env->tile_iot_src_valid[index] = 0; + memset(env->tile_iot_src_phys[index], 0, + sizeof(env->tile_iot_src_phys[index])); + helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); + return; + } + } + if (!linx_tile_block_shape_valid( + env, (uint32_t)bytes64, + linx_tile_dtype_elem_bytes(linx_tile_effective_dtype(env)))) { + env->tile_iot_src_valid[index] = 0; + memset(env->tile_iot_src_phys[index], 0, + sizeof(env->tile_iot_src_phys[index])); + helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); + return; + } + env->tile_iot_output_valid[index] = 1; + env->tile_iot_output_phys[index] = dst_tile; + (void)depth; + (void)prior_dst; + } + + env->tile_iot_desc[env->tile_iot_count++] = packed; + +} + +static bool linx_tile_cube_primary_legal(const CPULinxState *env, + unsigned src_a, unsigned src_b, + bool accumulate) +{ + const unsigned m = env->lb[0] ? MIN((unsigned)env->lb[0], 8u) : 8u; + const unsigned n = env->lb[1] ? MIN((unsigned)env->lb[1], 8u) : 8u; + const unsigned k = env->lb[2] ? MIN((unsigned)env->lb[2], 8u) : 8u; + + if ((env->tile_dtype & 0x1fu) != 17u || src_a >= 32u || src_b >= 32u || + env->tile_reg_dtype[src_a] != 17u || + env->tile_reg_dtype[src_b] != 17u || + env->tile_reg_elem_bytes[src_a] != 4u || + env->tile_reg_elem_bytes[src_b] != 4u || + env->tile_reg_valid_rows[src_a] < m || + env->tile_reg_valid_cols[src_a] < k || + env->tile_reg_cols[src_a] != 8u || + env->tile_reg_valid_rows[src_b] < k || + env->tile_reg_valid_cols[src_b] < n || + env->tile_reg_cols[src_b] != 8u || + env->tile_reg_bytes[src_a] < + ((m - 1u) * env->tile_reg_cols[src_a] + k) * 4u || + env->tile_reg_bytes[src_b] < + ((k - 1u) * env->tile_reg_cols[src_b] + n) * 4u) { + return false; + } + return !accumulate || env->tile_acc_bytes >= m * 8u * 4u; +} + +static bool linx_tile_preflight_cube(const CPULinxState *env) +{ + unsigned sources[LINX_TILE_MAX_IOT * 2]; + unsigned size_code = 0; + const uint32_t func = env->tile_func & 0x1fu; + unsigned required; + bool accumulate = false; + bool with_scale = false; + bool with_bias = false; + + switch (func) { + case LINX_CUBE_TMATMUL: + case LINX_CUBE_TGEMV: + required = 2u; + break; + case LINX_CUBE_TMATMUL_BIAS: + case LINX_CUBE_TGEMV_BIAS: + required = 3u; + with_bias = true; + break; + case LINX_CUBE_TMATMUL_MX: + case LINX_CUBE_TGEMV_MX: + required = 4u; + with_scale = true; + break; + case LINX_CUBE_TMATMUL_MX_BIAS: + case LINX_CUBE_TGEMV_MX_BIAS: + required = 5u; + with_scale = true; + with_bias = true; + break; + case LINX_CUBE_TMATMUL_ACC: + case LINX_CUBE_TGEMV_ACC: + required = 2u; + accumulate = true; + break; + case LINX_CUBE_TMATMUL_MX_ACC: + case LINX_CUBE_TGEMV_MX_ACC: + required = 4u; + accumulate = true; + with_scale = true; + break; + case LINX_CUBE_ACCCVT: { + unsigned dst_tile; + LinxTileIOTDesc desc; + uint64_t bytes; + + if (env->tile_iot_count != 1u || + !linx_tile_get_bound_output(env, 0, &dst_tile)) { + return false; + } + desc = linx_tile_decode_iot(env->tile_iot_desc[0]); + if (!desc.has_size || !linx_tile_size_code_valid(desc.size & 0x1fu)) { + return false; + } + bytes = 1ull << ((desc.size & 0x1fu) + 4u); + return env->tile_acc_bytes >= bytes && + linx_tile_block_shape_valid(env, (uint32_t)bytes, 4u); + } + default: + return false; + } + + if (!linx_tile_collect_cube_sources(env, required, sources, &size_code) || + !linx_tile_cube_primary_legal(env, sources[0], sources[1], + accumulate)) { + return false; + } + if (with_scale && + !linx_tile_cube_scale_legal(env, sources[2], sources[3])) { + return false; + } + return !with_bias || + linx_tile_cube_bias_legal(env, sources[required - 1u]); +} + +typedef struct LinxTileRegSnapshot { + unsigned tile; + uint32_t data[LINX_TILE_MAX_WORDS]; + uint32_t capacity; + uint32_t bytes; + uint8_t elem_bytes; + uint8_t dtype; + uint16_t valid_cols; + uint16_t valid_rows; + uint16_t cols; + uint16_t rows; +} LinxTileRegSnapshot; + +static void linx_tile_snapshot_reg(const CPULinxState *env, unsigned tile, + LinxTileRegSnapshot *snapshot) +{ + snapshot->tile = tile; + memcpy(snapshot->data, env->tile_reg[tile], sizeof(snapshot->data)); + snapshot->capacity = env->tile_reg_capacity[tile]; + snapshot->bytes = env->tile_reg_bytes[tile]; + snapshot->elem_bytes = env->tile_reg_elem_bytes[tile]; + snapshot->dtype = env->tile_reg_dtype[tile]; + snapshot->valid_cols = env->tile_reg_valid_cols[tile]; + snapshot->valid_rows = env->tile_reg_valid_rows[tile]; + snapshot->cols = env->tile_reg_cols[tile]; + snapshot->rows = env->tile_reg_rows[tile]; +} + +static void linx_tile_restore_reg(CPULinxState *env, + const LinxTileRegSnapshot *snapshot) +{ + const unsigned tile = snapshot->tile; + + memcpy(env->tile_reg[tile], snapshot->data, sizeof(snapshot->data)); + env->tile_reg_capacity[tile] = snapshot->capacity; + env->tile_reg_bytes[tile] = snapshot->bytes; + env->tile_reg_elem_bytes[tile] = snapshot->elem_bytes; + env->tile_reg_dtype[tile] = snapshot->dtype; + env->tile_reg_valid_cols[tile] = snapshot->valid_cols; + env->tile_reg_valid_rows[tile] = snapshot->valid_rows; + env->tile_reg_cols[tile] = snapshot->cols; + env->tile_reg_rows[tile] = snapshot->rows; +} + +static bool linx_tile_materialize_planned_outputs( + CPULinxState *env, uint8_t reserved[LINX_TILE_HAND_COUNT], + uint8_t *acc_sources_valid, uint8_t acc_src0, uint8_t acc_src1); + +/* + * Execute TEPL once against snapshotted destination state before the + * transaction gate publishes any reservation or destination metadata. This + * is deliberately the same execution path used after materialization, so all + * shape, IOR, scalar and operation-specific legality is covered without a + * second, inevitably drifting list of checks. + */ +static bool linx_tile_preflight_tepl(CPULinxState *env) +{ + const uint32_t op = env->tile_func & 0x7fu; + const uint32_t impl = linx_tile_tepl_impl_selector(op); + unsigned sources[LINX_TILE_MAX_IOT * 2]; + unsigned source_count = 0; + unsigned output_index = 0; + unsigned dst_tile = 0; + unsigned size_code = 0; + unsigned outputs[2] = { 0 }; + unsigned output_indices[2] = { 0 }; + unsigned output_sizes[2] = { 0 }; + unsigned output_count = 0; + unsigned special_sources[4] = { 0 }; + LinxTileRegSnapshot *snapshots; + uint8_t reserved[LINX_TILE_HAND_COUNT]; + uint8_t acc_sources_valid = env->tile_acc_sources_valid; + bool legal; + + if (!linx_tile_tepl_selector_accepted(op) || + !linx_tile_tepl_selector_executable(op) || impl == UINT32_MAX || + !linx_tile_tepl_dtype_supported(op, linx_tile_effective_dtype(env))) { + return false; + } + if (impl == 0x106u) { + if (!linx_tile_collect_sort_bindings( + env, &special_sources[0], outputs, output_indices, + output_sizes)) { + return false; + } + output_count = 2u; + } else if (impl == 0x08au || impl == 0x08bu) { + if (!linx_tile_collect_interleave_bindings( + env, special_sources, outputs, output_indices, &size_code)) { + return false; + } + output_count = 2u; + } else if (impl == 0x0c7u || impl == 0x0c8u) { + if (!linx_tile_collect_part_arg_bindings( + env, special_sources, outputs, output_indices, &size_code)) { + return false; + } + output_count = 2u; + } else { + if (!linx_tile_collect_tepl_bindings( + env, op, sources, &source_count, &output_index, + &dst_tile, &size_code)) { + return false; + } + outputs[0] = dst_tile; + output_indices[0] = output_index; + output_sizes[0] = size_code; + output_count = 1u; } - if ((desc.flags & LINX_IOT_S1V) == 0) { - if (!linx_tile_resolve_source(env, env->tile_hand_live, - desc.src1, &src_phys[1])) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; + + snapshots = g_new(LinxTileRegSnapshot, output_count); + for (unsigned i = 0; i < output_count; i++) { + linx_tile_snapshot_reg(env, outputs[i], &snapshots[i]); + } + memcpy(reserved, env->tile_hand_reserved, sizeof(reserved)); + legal = linx_tile_materialize_planned_outputs( + env, reserved, &acc_sources_valid, env->tile_acc_src0, + env->tile_acc_src1); + if (legal && impl == 0x106u) { + legal = linx_tile_sort(env, outputs[0], outputs[1], + special_sources[0], output_sizes[0], + output_sizes[1]); + } else if (legal && (impl == 0x08au || impl == 0x08bu)) { + legal = linx_tile_interleave(env, impl, outputs, special_sources, + size_code); + } else if (legal && (impl == 0x0c7u || impl == 0x0c8u)) { + legal = linx_tile_part_arg(env, impl, outputs, special_sources, + size_code); + } else if (legal) { + legal = linx_tile_tepl(env, dst_tile, sources, source_count, + size_code, op); + } + for (unsigned i = output_count; i > 0; i--) { + linx_tile_restore_reg(env, &snapshots[i - 1u]); + } + g_free(snapshots); + return legal; +} + +static bool linx_tile_preflight_talloc(const CPULinxState *env, + bool *allocation_fault) +{ + unsigned arg_reg[7]; + uint64_t in_use = 0; + + *allocation_fault = false; + for (unsigned i = 0; i < ARRAY_SIZE(arg_reg); i++) { + if (!linx_tile_resolve_ior(env, i, &arg_reg[i])) { + return false; } - src_valid |= 2u; } + const uint64_t capacity = env->gpr[arg_reg[0]]; + const uint32_t rows = env->gpr[arg_reg[1]]; + const uint32_t cols = env->gpr[arg_reg[2]]; + const uint32_t valid_rows = env->gpr[arg_reg[3]]; + const uint32_t valid_cols = env->gpr[arg_reg[4]]; + const uint32_t dtype = env->gpr[arg_reg[5]] & 0x1fu; + const uint64_t layout = env->gpr[arg_reg[6]]; - /* TCVT legality also depends on the queued source dtype. */ - if (env->blocktype == LINX_BLOCK_TEPL && - (env->tile_func & 0x3ffu) == 0x00du && - (((src_valid & 1u) == 0u) || - !linx_tile_tepl_dtype_supported( - 0x00du, env->tile_reg_dtype[src_phys[0]]))) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; + if (capacity == 0u || capacity > LINX_TILE_PE_CAPACITY_BYTES || + (capacity % LINX_TILE_CELL_BYTES) != 0u || rows == 0u || cols == 0u || + (uint64_t)rows * cols > 256u || valid_rows > rows || + valid_cols > cols || layout > 1u || + !linx_tile_data_type_accepted(dtype)) { + return false; } - - const uint16_t owner = 1u << (env->acr & 0xfu); - for (unsigned source = 0; source < 2; source++) { - if ((src_valid & (1u << source)) != 0) { - const uint16_t pinned = env->tile_pin_owner[src_phys[source]]; - if (pinned != 0 && pinned != owner) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; - } - src_was_pinned[source] = pinned != 0; - } + for (unsigned tile = 0; tile < 32u; tile++) { + in_use += env->tile_reg_capacity[tile]; } - for (unsigned source = 0; source < 2; source++) { - if ((src_valid & (1u << source)) != 0) { - linx_tile_pin_source(env, src_phys[source]); - env->tile_iot_src_phys[index][source] = src_phys[source]; - } + if (in_use + capacity > LINX_TILE_PE_CAPACITY_BYTES) { + *allocation_fault = true; + return false; } + return true; +} - env->tile_iot_src_valid[index] = src_valid; - env->tile_iot_output_valid[index] = 0; - - if (desc.has_size && (vector_block || tile_output)) { - uint8_t occupied[LINX_TILE_HAND_COUNT]; - unsigned dst_tile; - const uint64_t bytes64 = desc.has_size && desc.size < 60u - ? (1ull << (desc.size + 4u)) : 0; - - for (unsigned hand = 0; hand < LINX_TILE_HAND_COUNT; hand++) { - occupied[hand] = env->tile_hand_live[hand] | - env->tile_hand_reserved[hand]; - } - for (unsigned tile = 0; - tile < LINX_TILE_HAND_COUNT * LINX_TILE_HAND_DEPTH; tile++) { - if (env->tile_pin_owner[tile]) { - occupied[tile / LINX_TILE_HAND_DEPTH] |= - 1u << (tile % LINX_TILE_HAND_DEPTH); - } - } - if (bytes64 == 0 || bytes64 > LINX_TILE_MAX_BYTES || - (bytes64 & 3u) != 0 || - !linx_tile_reserve_output(occupied, &desc, &dst_tile)) { - for (unsigned source = 0; source < 2; source++) { - if ((src_valid & (1u << source)) != 0 && - !src_was_pinned[source]) { - env->tile_pin_owner[src_phys[source]] &= ~owner; - } - } - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; +static bool linx_tile_materialize_planned_outputs( + CPULinxState *env, uint8_t reserved[LINX_TILE_HAND_COUNT], + uint8_t *acc_sources_valid, uint8_t acc_src0, uint8_t acc_src1) +{ + for (unsigned i = 0; i < env->tile_iot_count; i++) { + if (!env->tile_iot_output_valid[i]) { + continue; } + const LinxTileIOTDesc desc = + linx_tile_decode_iot(env->tile_iot_desc[i]); + const unsigned dst_tile = env->tile_iot_output_phys[i]; const unsigned hand = dst_tile / LINX_TILE_HAND_DEPTH; const unsigned depth = dst_tile % LINX_TILE_HAND_DEPTH; - env->tile_hand_reserved[hand] |= 1u << depth; - env->tile_iot_output_valid[index] = 1; - env->tile_iot_output_phys[index] = dst_tile; + const uint32_t bytes = 1u << ((desc.size & 0x1fu) + 4u); + const unsigned elem_bytes = linx_tile_dtype_elem_bytes( + linx_tile_effective_dtype(env)); + const uint32_t tepl_op = env->tile_func & 0x7fu; + const bool in_place = env->blocktype == LINX_BLOCK_TEPL && + (tepl_op == 0x02fu || tepl_op == 0x063u); + const unsigned prior = in_place ? env->tile_hand_order[hand][0] : 0u; + + reserved[hand] |= 1u << depth; linx_tile_invalidate_acc_sources_on_output( - dst_tile, &env->tile_acc_sources_valid, - env->tile_acc_src0, env->tile_acc_src1); + dst_tile, acc_sources_valid, acc_src0, acc_src1); memset(env->tile_reg[dst_tile], 0, sizeof(env->tile_reg[dst_tile])); - env->tile_reg_bytes[dst_tile] = bytes64; - linx_tile_set_elem_bytes(env, dst_tile, - linx_tile_dtype_elem_bytes(env->tile_dtype)); - linx_tile_set_dtype(env, dst_tile, env->tile_dtype); - if (!linx_tile_set_block_shape( - env, dst_tile, (uint32_t)bytes64, - linx_tile_dtype_elem_bytes(env->tile_dtype))) { - for (unsigned source = 0; source < 2; source++) { - if ((src_valid & (1u << source)) != 0 && - !src_was_pinned[source]) { - env->tile_pin_owner[src_phys[source]] &= ~owner; - } - } - env->tile_hand_reserved[hand] &= ~(1u << depth); - env->tile_iot_output_valid[index] = 0; - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; + env->tile_reg_capacity[dst_tile] = bytes; + env->tile_reg_bytes[dst_tile] = bytes; + linx_tile_set_elem_bytes(env, dst_tile, elem_bytes); + linx_tile_set_dtype(env, dst_tile, linx_tile_effective_dtype(env)); + if (!linx_tile_set_block_shape(env, dst_tile, bytes, elem_bytes)) { + return false; + } + if (in_place) { + memcpy(env->tile_reg[dst_tile], env->tile_reg[prior], bytes); + linx_tile_set_elem_bytes(env, dst_tile, + env->tile_reg_elem_bytes[prior]); + linx_tile_set_dtype(env, dst_tile, env->tile_reg_dtype[prior]); + linx_tile_copy_shape(env, dst_tile, prior); } } + return true; +} - env->tile_iot_desc[env->tile_iot_count++] = packed; +typedef struct LinxTileMaterializeCtx { + CPULinxState *env; + uint8_t *reserved; + uint8_t *acc_sources_valid; + uint8_t acc_src0; + uint8_t acc_src1; +} LinxTileMaterializeCtx; + +static bool linx_tile_apply_materialization(void *opaque) +{ + LinxTileMaterializeCtx *ctx = opaque; + return linx_tile_materialize_planned_outputs( + ctx->env, ctx->reserved, ctx->acc_sources_valid, + ctx->acc_src0, ctx->acc_src1); } void HELPER(linx_tile_commit)(CPULinxState *env) @@ -14790,6 +16604,13 @@ void HELPER(linx_tile_commit)(CPULinxState *env) uint8_t acc_sources_valid = env->tile_acc_sources_valid; uint8_t acc_src0 = env->tile_acc_src0; uint8_t acc_src1 = env->tile_acc_src1; + LinxTileTxnGate txn_gate = { + .datr_legal = linx_tile_datr_applicable( + env->blocktype, env->tile_func, env->tile_attr_raw), + .operands_legal = true, + .allocation_available = true, + }; + LinxTileTxnFault txn_fault; if (env->tile_iot_count == 0 && env->tile_iot_valid == 0) { return; @@ -14804,11 +16625,38 @@ void HELPER(linx_tile_commit)(CPULinxState *env) uint8_t planned_carrier_valid = carrier_valid; uint8_t planned_carrier = carrier; memcpy(planned_live, live, sizeof(planned_live)); - if (!linx_tile_preflight_tma(env, planned_live, - &planned_carrier_valid, - &planned_carrier)) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - } + txn_gate.operands_legal = linx_tile_preflight_tma( + env, planned_live, &planned_carrier_valid, &planned_carrier); + } else if (env->blocktype == LINX_BLOCK_TEPL) { + bool allocation_fault = false; + if (linx_tile_tepl_impl_selector(env->tile_func & 0x7fu) == 0x10au && + !linx_tile_preflight_talloc(env, &allocation_fault)) { + txn_gate.operands_legal = false; + txn_gate.allocation_available = !allocation_fault; + } + if (txn_gate.operands_legal) { + txn_gate.operands_legal = linx_tile_preflight_tepl(env); + } + } else if (env->blocktype == LINX_BLOCK_CUBE) { + txn_gate.operands_legal = linx_tile_preflight_cube(env); + } + + LinxTileMaterializeCtx materialize = { + .env = env, + .reserved = reserved, + .acc_sources_valid = &acc_sources_valid, + .acc_src0 = acc_src0, + .acc_src1 = acc_src1, + }; + txn_fault = linx_tile_txn_guarded_apply( + &txn_gate, linx_tile_apply_materialization, &materialize); + if (txn_fault == LINX_TILE_TXN_ALLOCATION) { + linx_tile_raise_allocation_fault(env); + return; + } + if (txn_fault != LINX_TILE_TXN_OK) { + helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); + return; } switch (env->blocktype) { @@ -14818,9 +16666,46 @@ void HELPER(linx_tile_commit)(CPULinxState *env) unsigned output_index = 0; unsigned dst_tile = 0; unsigned size_code = 0; - const uint32_t op = env->tile_func & 0x3ffu; + const uint32_t op = env->tile_func & 0x7fu; + const uint32_t impl_op = linx_tile_tepl_impl_selector(op); + + if (!linx_tile_tepl_selector_accepted(op) || impl_op == UINT32_MAX) { + helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); + break; + } + + if (impl_op == 0x106u) { + unsigned source = 0; + unsigned outputs[2]; + unsigned output_indices[2]; + unsigned output_sizes[2]; + if (!linx_tile_collect_sort_bindings( + env, &source, outputs, output_indices, output_sizes) || + !linx_tile_sort(env, outputs[0], outputs[1], source, + output_sizes[0], output_sizes[1])) { + helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); + break; + } + for (unsigned i = 0; i < env->tile_iot_count; i++) { + const LinxTileIOTDesc d = + linx_tile_decode_iot(env->tile_iot_desc[i]); + linx_tile_consume_bound_sources( + env, live, i, &d, order, count_by_hand, + &carrier_valid, &carrier); + } + for (unsigned i = 0; i < 2u; i++) { + linx_tile_invalidate_acc_sources_on_output( + outputs[i], &acc_sources_valid, acc_src0, acc_src1); + if (!linx_tile_complete_bound_output( + env, live, reserved, order, count_by_hand, + output_indices[i])) { + helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); + } + } + break; + } - if (op == 0x08au || op == 0x08bu) { + if (impl_op == 0x08au || impl_op == 0x08bu) { unsigned interleave_sources[2]; unsigned interleave_outputs[2]; unsigned interleave_output_indices[2]; @@ -14828,7 +16713,7 @@ void HELPER(linx_tile_commit)(CPULinxState *env) if (!linx_tile_collect_interleave_bindings( env, interleave_sources, interleave_outputs, interleave_output_indices, &size_code) || - !linx_tile_interleave(env, op, interleave_outputs, + !linx_tile_interleave(env, impl_op, interleave_outputs, interleave_sources, size_code)) { helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); break; @@ -14856,7 +16741,7 @@ void HELPER(linx_tile_commit)(CPULinxState *env) break; } - if (op == 0x0c7u || op == 0x0c8u) { + if (impl_op == 0x0c7u || impl_op == 0x0c8u) { unsigned part_arg_sources[4]; unsigned part_arg_outputs[2]; unsigned part_arg_output_indices[2]; @@ -14864,7 +16749,7 @@ void HELPER(linx_tile_commit)(CPULinxState *env) if (!linx_tile_collect_part_arg_bindings( env, part_arg_sources, part_arg_outputs, part_arg_output_indices, &size_code) || - !linx_tile_part_arg(env, op, part_arg_outputs, + !linx_tile_part_arg(env, impl_op, part_arg_outputs, part_arg_sources, size_code)) { helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); break; @@ -14900,7 +16785,11 @@ void HELPER(linx_tile_commit)(CPULinxState *env) } linx_tile_invalidate_acc_sources_on_output( dst_tile, &acc_sources_valid, acc_src0, acc_src1); - linx_tile_tepl(env, dst_tile, sources, source_count, size_code, op); + if (!linx_tile_tepl(env, dst_tile, sources, source_count, + size_code, op)) { + helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); + break; + } for (unsigned i = 0; i < env->tile_iot_count; i++) { const LinxTileIOTDesc d = linx_tile_decode_iot(env->tile_iot_desc[i]); @@ -15204,85 +17093,6 @@ void HELPER(linx_tile_commit)(CPULinxState *env) } break; } - case LINX_TMA_TCVT_COMPAT: { - const unsigned count = env->tile_iot_count ? env->tile_iot_count : 1u; - for (unsigned i = 0; i < count; i++) { - LinxTileIOTDesc d; - if (env->tile_iot_count) { - d = linx_tile_decode_iot(env->tile_iot_desc[i]); - } else { - d.src0 = env->tile_iot_src0 & 0x3f; - d.src1 = env->tile_iot_src1 & 0x3f; - d.dst = env->tile_iot_dst & 0x7; - d.last = env->tile_iot_grp & 0x1; - d.flags = env->tile_iot_flags & 0xf; - d.reg = env->tile_iot_reg & 0x1f; - d.size = env->tile_iot_size & 0x1f; - d.has_size = env->tile_iot_size != 0; - } - - const bool src0_present = (d.flags & LINX_IOT_S0V) == 0; - const bool src1_present = (d.flags & LINX_IOT_S1V) == 0; - - unsigned src_tile = 0; - if (src0_present) { - if (!linx_tile_get_bound_source(env, i, 0, &src_tile)) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - break; - } - } else if (src1_present) { - if (!linx_tile_get_bound_source(env, i, 1, &src_tile)) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - break; - } - } else { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - break; - } - - unsigned dst_tile = 0; - if (!linx_tile_get_bound_output(env, i, &dst_tile)) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - break; - } - - const unsigned size_code = d.has_size ? (d.size & 0x1f) - : (env->tile_iot_size & 0x1f); - const uint64_t bytes64 = (size_code < 60u) ? (1ull << (size_code + 4u)) : 0ull; - if (bytes64 == 0 || bytes64 > LINX_TILE_MAX_BYTES || (bytes64 & 3u) != 0) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - break; - } - const unsigned words = (unsigned)(bytes64 / 4u); - if (src_tile >= 32 || dst_tile >= 32 || - env->tile_reg_bytes[src_tile] < bytes64) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - break; - } - linx_tile_invalidate_acc_sources_on_output( - dst_tile, &acc_sources_valid, acc_src0, acc_src1); - for (unsigned w = 0; w < words && w < LINX_TILE_MAX_WORDS; w++) { - env->tile_reg[dst_tile][w] = env->tile_reg[src_tile][w]; - } - for (unsigned w = words; w < LINX_TILE_MAX_WORDS; w++) { - env->tile_reg[dst_tile][w] = 0; - } - env->tile_reg_bytes[dst_tile] = (uint32_t)bytes64; - linx_tile_set_elem_bytes(env, dst_tile, - env->tile_reg_elem_bytes[src_tile]); - linx_tile_set_dtype(env, dst_tile, - env->tile_reg_dtype[src_tile]); - linx_tile_copy_shape(env, dst_tile, src_tile); - linx_tile_consume_bound_sources(env, live, i, &d, - order, count_by_hand, - &carrier_valid, &carrier); - if (!linx_tile_complete_bound_output( - env, live, reserved, order, count_by_hand, i)) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - } - } - break; - } default: helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); break; @@ -15290,7 +17100,7 @@ void HELPER(linx_tile_commit)(CPULinxState *env) break; case LINX_BLOCK_CUBE: switch (env->tile_func & 0x1f) { - case LINX_CUBE_MAMULB: + case LINX_CUBE_TMATMUL: case LINX_CUBE_TGEMV: { unsigned sources[LINX_TILE_MAX_IOT * 2]; unsigned size_code = 0; @@ -15299,7 +17109,7 @@ void HELPER(linx_tile_commit)(CPULinxState *env) helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); break; } - linx_tile_mamulb(env, sources[0], sources[1], size_code); + linx_tile_tmatmul(env, sources[0], sources[1], size_code); for (unsigned i = 0; i < env->tile_iot_count; i++) { const LinxTileIOTDesc d = linx_tile_decode_iot(env->tile_iot_desc[i]); @@ -15308,17 +17118,16 @@ void HELPER(linx_tile_commit)(CPULinxState *env) &carrier_valid, &carrier); } carrier_valid = 0; - acc_sources_valid = 1; - acc_src0 = sources[0]; - acc_src1 = sources[1]; + acc_sources_valid = 0; break; } - case LINX_CUBE_MAMULB_BIAS: { + case LINX_CUBE_TMATMUL_BIAS: + case LINX_CUBE_TGEMV_BIAS: { unsigned sources[LINX_TILE_MAX_IOT * 2]; unsigned size_code = 0; if (!linx_tile_collect_cube_sources(env, 3u, sources, &size_code) || - !linx_tile_mamulb_bias(env, sources[0], sources[1], + !linx_tile_tmatmul_bias(env, sources[0], sources[1], sources[2], size_code)) { helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); break; @@ -15334,54 +17143,87 @@ void HELPER(linx_tile_commit)(CPULinxState *env) acc_sources_valid = 0; break; } - case LINX_CUBE_MAMULB_ACC: - case LINX_CUBE_TGEMV_ACC: { - LinxTileIOTDesc d; - if (env->tile_iot_count) { - d = linx_tile_decode_iot(env->tile_iot_desc[0]); - } else { - d.src0 = env->tile_iot_src0 & 0x3f; - d.src1 = env->tile_iot_src1 & 0x3f; - d.flags = env->tile_iot_flags & 0xf; - d.last = env->tile_iot_grp & 0x1; - d.dst = env->tile_iot_dst & 0x7; - d.reg = env->tile_iot_reg & 0x1f; - d.size = env->tile_iot_size & 0x1f; - d.has_size = env->tile_iot_size != 0; + case LINX_CUBE_TMATMUL_MX: + case LINX_CUBE_TGEMV_MX: + case LINX_CUBE_TMATMUL_MX_BIAS: + case LINX_CUBE_TGEMV_MX_BIAS: { + unsigned sources[LINX_TILE_MAX_IOT * 2]; + unsigned size_code = 0; + const uint32_t func = env->tile_func & 0x1fu; + const bool with_bias = func == LINX_CUBE_TMATMUL_MX_BIAS || + func == LINX_CUBE_TGEMV_MX_BIAS; + const unsigned required = with_bias ? 5u : 4u; + if (!linx_tile_collect_cube_sources(env, required, sources, + &size_code) || + !linx_tile_cube_scale_legal(env, sources[2], sources[3]) || + (with_bias && + !linx_tile_cube_bias_legal(env, sources[4]))) { + helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); + break; } - if ((d.flags & (LINX_IOT_S0V | LINX_IOT_S1V)) != 0) { + linx_tile_tmatmul(env, sources[0], sources[1], size_code); + if (!linx_tile_cube_scale_acc(env, sources[2], sources[3]) || + (with_bias && !linx_tile_cube_bias_acc(env, sources[4]))) { helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); break; } - unsigned bound_src0 = 0; - unsigned bound_src1 = 0; - if (!linx_tile_get_bound_source(env, 0, 0, &bound_src0) || - !linx_tile_get_bound_source(env, 0, 1, &bound_src1) || - !acc_sources_valid || bound_src0 != acc_src0 || - bound_src1 != acc_src1 || - acc_src0 >= LINX_TILE_HAND_COUNT * LINX_TILE_HAND_DEPTH || - acc_src1 >= LINX_TILE_HAND_COUNT * LINX_TILE_HAND_DEPTH || - env->tile_reg_bytes[acc_src0] == 0 || - env->tile_reg_bytes[acc_src1] == 0) { + for (unsigned i = 0; i < env->tile_iot_count; i++) { + const LinxTileIOTDesc d = + linx_tile_decode_iot(env->tile_iot_desc[i]); + linx_tile_consume_bound_sources(env, live, i, &d, + order, count_by_hand, + &carrier_valid, &carrier); + } + carrier_valid = 0; + acc_sources_valid = 0; + break; + } + case LINX_CUBE_TMATMUL_MX_ACC: + case LINX_CUBE_TGEMV_MX_ACC: { + unsigned sources[LINX_TILE_MAX_IOT * 2]; + unsigned size_code = 0; + if (!linx_tile_collect_cube_sources(env, 4u, sources, + &size_code) || + env->tile_acc_bytes == 0u || + !linx_tile_cube_scale_legal(env, sources[2], sources[3])) { helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); break; } - const unsigned src0 = acc_src0; - const unsigned src1 = acc_src1; - const unsigned size_code = d.has_size ? (d.size & 0x1f) - : (env->tile_iot_size & 0x1f); - if (!linx_tile_size_code_valid(size_code)) { + linx_tile_tmatmul_acc(env, sources[0], sources[1], size_code); + if (!linx_tile_cube_scale_acc(env, sources[2], sources[3])) { helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); + break; } - linx_tile_mamulb_acc(env, src0, src1, size_code); - linx_tile_consume_bound_sources(env, live, 0, &d, - order, count_by_hand, - &carrier_valid, &carrier); - if (carrier_valid) { - linx_tile_release_source(live, order, count_by_hand, - carrier, false, - &carrier_valid, &carrier); + for (unsigned i = 0; i < env->tile_iot_count; i++) { + const LinxTileIOTDesc d = + linx_tile_decode_iot(env->tile_iot_desc[i]); + linx_tile_consume_bound_sources(env, live, i, &d, + order, count_by_hand, + &carrier_valid, &carrier); + } + carrier_valid = 0; + acc_sources_valid = 0; + break; + } + case LINX_CUBE_TMATMUL_ACC: + case LINX_CUBE_TGEMV_ACC: { + unsigned sources[LINX_TILE_MAX_IOT * 2]; + unsigned size_code = 0; + if (!linx_tile_collect_cube_sources(env, 2u, sources, + &size_code) || + env->tile_acc_bytes == 0u) { + helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); + break; + } + linx_tile_tmatmul_acc(env, sources[0], sources[1], size_code); + for (unsigned i = 0; i < env->tile_iot_count; i++) { + const LinxTileIOTDesc d = + linx_tile_decode_iot(env->tile_iot_desc[i]); + linx_tile_consume_bound_sources(env, live, i, &d, + order, count_by_hand, + &carrier_valid, &carrier); } + carrier_valid = 0; acc_sources_valid = 0; break; } @@ -15424,6 +17266,9 @@ void HELPER(linx_tile_commit)(CPULinxState *env) } carrier_valid = 1; carrier = dst_tile; + memset(env->tile_acc, 0, sizeof(env->tile_acc)); + env->tile_acc_bytes = 0; + acc_sources_valid = 0; break; } default: @@ -15786,6 +17631,7 @@ static void linx_tile_commit_vector_bindings(CPULinxState *env) if (env->tile_iot_src_valid[i] == 0) { live[hand] &= ~(1u << depth); env->tile_reg_bytes[tile] = 0; + env->tile_reg_capacity[tile] = 0; env->tile_reg_elem_bytes[tile] = 0; env->tile_reg_dtype[tile] = 0; env->tile_reg_valid_cols[tile] = 0; @@ -17097,7 +18943,7 @@ void HELPER(linx_v_lb_brg)(CPULinxState *env, uint32_t dst, uint32_t srcL, " dst=0x%x srcL=0x%x srcR=0x%x" " srcL_val=0x%" PRIx64 " srcR_val=0x%" PRIx64 " lc0=%" PRIu64 " shamt=%u resolved_addr=0x%" PRIx64 - " value=0x%x lc1=%" PRIu64 "\n", + " value=0x%" PRIx64 " lc1=%" PRIu64 "\n", env->body_tpc, dst, srcL, srcR, base, idx, lane, shamt, addr, value, env->lc[1]); } @@ -17134,7 +18980,7 @@ void HELPER(linx_v_lh_brg)(CPULinxState *env, uint32_t dst, uint32_t srcL, " dst=0x%x srcL=0x%x srcR=0x%x" " srcL_val=0x%" PRIx64 " srcR_val=0x%" PRIx64 " lc0=%" PRIu64 " shamt=%u resolved_addr=0x%" PRIx64 - " value=0x%x lc1=%" PRIu64 "\n", + " value=0x%" PRIx64 " lc1=%" PRIu64 "\n", env->body_tpc, dst, srcL, srcR, base, idx, lane, shamt, addr, value, env->lc[1]); } @@ -17417,6 +19263,8 @@ static bool linx_vec_local_ensure_store_bytes(CPULinxState *env, unsigned tile, env->tile_reg[tile][w] = 0; } env->tile_reg_bytes[tile] = (uint32_t)required; + env->tile_reg_capacity[tile] = MAX(env->tile_reg_capacity[tile], + (uint32_t)required); linx_tile_set_elem_bytes(env, tile, size); return true; } diff --git a/target/linx/insn16.decode b/target/linx/insn16.decode index 67b2080b1377..44a119fca7f0 100644 --- a/target/linx/insn16.decode +++ b/target/linx/insn16.decode @@ -26,7 +26,13 @@ c_bstop 0000 0000 0000 0000 # C.BSTART.STD: BrType=0 aliases c_bstop, so spell out only the non-zero forms. c_bstart_direct .... .... .... 0010 %simm12 c_bstart_cond .... .... .... 0100 %simm12 -c_bstart_fp 00.. .000 1000 0000 %BrType +c_bstart_fp 0000 1000 1000 0000 +c_bstart_fp 0001 0000 1000 0000 +c_bstart_fp 0001 1000 1000 0000 +c_bstart_fp 0010 0000 1000 0000 +c_bstart_fp 0010 1000 1000 0000 +c_bstart_fp 0011 0000 1000 0000 +c_bstart_fp 0011 1000 1000 0000 c_bstart_std_fall 0000 1000 0000 0000 c_bstart_std_direct 0001 0000 0000 0000 c_bstart_std_cond 0001 1000 0000 0000 @@ -50,13 +56,17 @@ c_setc_ne .... .... ..11 0110 %SrcL %SrcR # Register moves / ALU # C.MOVR and C.MOVI have different opcodes ([5:0]) -# C.SETRET uses a dedicated compact encoding. +# C.SETRET is a constrained C.MOVI encoding. Spell the overlap explicitly so +# decodetree selects the architectural alias first. c_movr .... .... ..00 0110 %RegDst %SrcL c_add .... .... ..00 1000 %SrcL %SrcR c_sub .... .... ..01 1000 %SrcL %SrcR c_and .... .... ..10 1000 %SrcL %SrcR c_or .... .... ..11 1000 %SrcL %SrcR -c_movi .... .... ..01 0110 %RegDst simm5=%simm5_6_s5 +{ + c_setret 0101 0... ..01 0110 uimm=%uimm5 + c_movi .... .... ..01 0110 %RegDst simm5=%simm5_6_s5 +} # Loads / stores (stack and small offsets) c_lwi .... .... ..00 1010 %SrcL simm5=%simm5_11_s5 diff --git a/target/linx/insn32.decode b/target/linx/insn32.decode index 418a6d0fd999..1c37a8283979 100644 --- a/target/linx/insn32.decode +++ b/target/linx/insn32.decode @@ -44,20 +44,22 @@ %succ_imm 20:4 %ModeHi 26:1 %Mode 25:2 +%XBRaw 15:17 # Canonical v0.57 control/data attribute fields %BA_DR 26:1 -%BA_aq 29:1 -%BA_atom 30:1 -%BA_far 27:1 -%BA_rl 28:1 -%BA_trap 31:1 -%BA_CMode 25:3 +%BA_aq 16:1 +%BA_atom 17:1 +%BA_far 18:1 +%BA_rl 15:1 +%BA_trap 19:1 +%BA_CMode 29:3 %BA_DataLayout 7:5 %BA_DataType 20:5 -%BA_PadValue 15:5 -%BA_RMode 28:3 -%BA_Sat 31:1 +%BA_PadValue 27:2 +%BA_RMode 15:3 +%BA_Sat 26:1 +%BA_Canonicalize 25:1 # Block hint (B.HINT) fields %HINT_L_UL 16:1 @@ -69,7 +71,6 @@ # Tile block fields %TileDataType 27:5 %TileFunc 20:5 -%TileOp10 15:10 %TileDst 25:3 %TileSrc0 15:5 %TileSrc1 20:5 @@ -81,13 +82,13 @@ %S0R 30:1 %S1V 29:1 %S0V 28:1 -%IOTDstTile 22:3 -%IOTL 29:1 -%IOTS0R 30:1 -%IOTS1R 31:1 -%IOTSrc0 15:1 7:5 -%IOTSrc1 16:6 -%IOTImm4 25:4 +%IOTDstTile 7:3 +%IOTL 19:1 +%IOTS0R 10:1 +%IOTS1R 11:1 +%IOTSrc0 20:6 +%IOTSrc1 26:6 +%IOTImm4 15:4 # Block headers bstart_split_direct .... .... .... .... .... .... .001 0001 %simm25 @@ -110,20 +111,121 @@ bstart_fp_ind 0000 0000 0000 0000 0101 0001 0000 0001 bstart_fp_icall 0000 0000 0000 0000 0110 0001 0000 0001 bstart_fp_ret 0000 0000 0000 0000 0111 0001 0000 0001 bstart_sys .... .... .... .... .001 0000 1000 0001 %simm17 -bstart_fixp .... .00. .... 0011 1001 0001 1000 0001 dtype=%TileDataType func=%TileFunc -bstart_tepl .... .01. .... .... .001 0001 1000 0001 dtype=%TileDataType op=%TileOp10 +# PTO ISA 0.57.1 direct TEPL headers (generated from locked catalog). +{ + bstart_tadd .... .000 0000 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tsub .... .000 0001 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tmul .... .000 0010 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tmax .... .000 1011 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tmin .... .000 1100 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tand .... .000 0110 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tor .... .000 0111 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_txor .... .000 1000 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tshl .... .000 1001 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tshr .... .000 1010 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tcmp .... .000 1101 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tsel .... .001 1010 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tabs .... .000 1111 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tnot .... .001 0000 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tneg .... .001 0001 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_trelu .... .001 0111 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tprelu .... .000 1110 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tdiv .... .000 0011 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_trem .... .000 0100 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tsqrt .... .001 0101 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tlog .... .001 0011 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_trecip .... .001 0100 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_texp .... .001 0010 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_trsqrt .... .001 0110 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tadds .... .010 0000 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_taxpy .... .010 1111 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tsubs .... .010 0001 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tmuls .... .010 0010 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tdivs .... .010 0011 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tmins .... .010 1100 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tmaxs .... .010 1011 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_trems .... .010 0100 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tands .... .010 0110 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tors .... .010 0111 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_txors .... .010 1000 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tcmps .... .010 1101 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tsels .... .011 1010 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tshls .... .010 1001 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tshrs .... .010 1010 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_trowsum .... .100 0000 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_trowprod .... .100 0011 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_trowmax .... .100 0001 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_trowmin .... .100 0010 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_trowargmax .... .100 1100 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_trowargmin .... .100 1101 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tcolsum .... .101 0000 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tcolprod .... .101 0011 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tcolmax .... .101 0001 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tcolmin .... .101 0010 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tcolargmax .... .101 1100 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tcolargmin .... .101 1101 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_trowexpand .... .100 0100 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_trowexpandadd .... .100 0101 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_trowexpandsub .... .100 0110 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_trowexpandmul .... .100 0111 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_trowexpanddiv .... .100 1000 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_trowexpandmax .... .100 1001 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_trowexpandmin .... .100 1010 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_trowexpandexpdif .... .100 1011 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tcolexpand .... .101 0100 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tcolexpandadd .... .101 0101 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tcolexpandsub .... .101 0110 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tcolexpandmul .... .101 0111 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tcolexpanddiv .... .101 1000 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tcolexpandmax .... .101 1001 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tcolexpandmin .... .101 1010 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tcolexpandexpdif .... .101 1011 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_texpands .... .011 1011 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tci .... .110 0110 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_ttri .... .110 0111 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tfillpad .... .110 0101 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tcvt .... .001 1011 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tquant .... .110 1010 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tdequant .... .110 1011 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_textract .... .110 0010 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tinsert .... .110 0011 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tgather .... .110 1111 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tscatter .... .111 0000 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tconcat .... .110 0000 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_ttrans .... .110 1110 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_timg2col .... .110 0100 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tgatherb .... .110 0001 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tdeinterleave .... .111 1000 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tinterleave .... .111 1001 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_treshape .... .111 0111 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tsort .... .110 1100 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tmrgsort .... .110 1101 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_thistogram .... .110 1000 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tpush .... .111 1010 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tpop .... .111 1011 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_talloc .... .111 1100 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tfree .... .111 1101 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tpartadd .... .111 0001 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tpartmul .... .111 0010 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tpartmax .... .111 0011 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tpartmin .... .111 0100 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tpartargmax .... .111 0101 0001 1001 0001 1000 0001 dtype=%TileDataType + bstart_tpartargmin .... .111 0110 0001 1001 0001 1000 0001 dtype=%TileDataType + # Canonical selector form retained for decoders that do not use aliases. + bstart_tepl ..... .. ..... 00011 001 00011 000 000 1 dtype=%TileDataType mode=%Mode function=%TileFunc +} bstop 0000 0000 0000 0000 0000 0000 0000 0001 # Vector block headers (VPAR/VSEQ). These are fall-through blocks that commit at # (C.)BSTOP or when the next BSTART is encountered. -bstart_vpar 0000 0.00 0000 0010 0001 0001 1000 0001 mode=%ModeHi -bstart_vseq 0000 0.00 0000 0010 1001 0001 1000 0001 mode=%ModeHi +bstart_vpar 0000 0..0 0000 0010 0001 0001 1000 0001 mode=%Mode +bstart_vseq 0000 0..0 0000 0010 1001 0001 1000 0001 mode=%Mode # Vector block headers for memory operations (MSEQ/MPAR). # MSEQ: sequential vector execution with memory access -bstart_mseq 0000 0.00 0000 0000 1001 0001 1000 0001 mode=%ModeHi +bstart_mseq 0000 0..0 0000 0000 1001 0001 1000 0001 mode=%Mode # MPAR: parallel vector execution with memory access -bstart_mpar 0000 0.00 0000 0000 0001 0001 1000 0001 mode=%ModeHi +bstart_mpar 0000 0..0 0000 0000 0001 0001 1000 0001 mode=%Mode # Tile block headers (TMA/CUBE). These are fall-through blocks that commit at # (C.)BSTOP or when the next BSTART is encountered. @@ -137,6 +239,7 @@ bstart_mpar 0000 0.00 0000 0000 0001 0001 1000 0001 mode=%ModeHi bstart_mgather_mask .... .000 0110 0001 0001 0001 1000 0001 dtype=%TileDataType bstart_mscatter_mask .... .000 0111 0001 0001 0001 1000 0001 dtype=%TileDataType bstart_mgather_cas .... .000 1000 0001 0001 0001 1000 0001 dtype=%TileDataType + bstart_acccvt .... .000 1000 0011 0001 0001 1000 0001 dtype=%TileDataType bstart_tmatmul .... .000 0000 0011 0001 0001 1000 0001 dtype=%TileDataType bstart_tmatmul_bias .... .000 0001 0011 0001 0001 1000 0001 dtype=%TileDataType bstart_tmatmul_acc .... .000 0010 0011 0001 0001 1000 0001 dtype=%TileDataType @@ -149,13 +252,16 @@ bstart_mpar 0000 0.00 0000 0000 0001 0001 1000 0001 mode=%ModeHi bstart_tgemvmx .... .001 0100 0011 0001 0001 1000 0001 dtype=%TileDataType bstart_tgemvmx_bias .... .001 0101 0011 0001 0001 1000 0001 dtype=%TileDataType bstart_tgemvmx_acc .... .001 0110 0011 0001 0001 1000 0001 dtype=%TileDataType - bstart_cube .... .00. .... 0011 0001 0001 1000 0001 dtype=%TileDataType func=%TileFunc } # Tile block I/O dependency descriptors (multiple descriptors per block are legal). -b_iot .... .... .... .... .100 .... .001 0011 dst=%IOTDstTile l=%IOTL s0r=%IOTS0R s1r=%IOTS1R src0=%IOTSrc0 src1=%IOTSrc1 imm4=%IOTImm4 -b_iot 0... .... ..00 0000 .101 .... .001 0011 dst=%IOTDstTile l=%IOTL s0r=%IOTS0R s1r=0 src0=%IOTSrc0 src1=0 imm4=%IOTImm4 -b_iot 00.. .... ..00 0000 0110 0000 0001 0011 dst=%IOTDstTile l=%IOTL s0r=0 s1r=0 src0=0 src1=0 imm4=%IOTImm4 +{ + b_iot 0000 00.. .... .000 0101 0.00 0001 0011 dst=0 l=%IOTL s0r=%IOTS0R s1r=0 src0=%IOTSrc0 src1=0 imm4=0 + b_iot .... .... .... .000 0100 ..00 0001 0011 dst=0 l=%IOTL s0r=%IOTS0R s1r=%IOTS1R src0=%IOTSrc0 src1=%IOTSrc1 imm4=0 + b_iot 0000 00.. .... .... .101 0... .001 0011 dst=%IOTDstTile l=%IOTL s0r=%IOTS0R s1r=0 src0=%IOTSrc0 src1=0 imm4=%IOTImm4 + b_iot .... .... .... .... .100 .... .001 0011 dst=%IOTDstTile l=%IOTL s0r=%IOTS0R s1r=%IOTS1R src0=%IOTSrc0 src1=%IOTSrc1 imm4=%IOTImm4 + b_iot 0000 0000 0000 .... .110 00.. .001 0011 dst=%IOTDstTile l=%IOTL s0r=0 s1r=0 src0=0 src1=0 imm4=%IOTImm4 +} # Decoupled-body pointer (decoupled block headers). b_text .... .... .... .... .... .... .000 0011 %simm25 @@ -164,16 +270,10 @@ b_text .... .... .... .... .... .... .000 0011 %simm25 b_ior .... .00. .... .... .000 .... .001 0011 %RegDst %SrcL %SrcR %SrcD # Tile/tensor layout selector for descriptor-rich TLOAD/TSTORE headers. -b_arg 0000 0000 0000 0000 0011 .... .100 0011 format=%TileFormat -b_arg_norm 0000 0000 0000 1111 1010 0000 0010 0011 -b_arg_nz2dn 0000 0010 0000 1111 1010 1110 0010 0011 -b_arg_nd2zn 0001 1000 0000 0010 0010 0001 1010 0011 -b_arg_dn2nz 0001 1000 0000 0000 1010 0100 1010 0011 -b_arg_dn2zn 0001 1000 0000 0010 0010 0100 0010 0011 # Block attributes (ordering/traps); treated as hints/no-ops in bring-up. -b_catr .... ..00 0000 0000 0000 0000 0010 0011 dr=%BA_DR aq=%BA_aq atom=%BA_atom far=%BA_far rl=%BA_rl trap=%BA_trap -b_datr .... .... .... .... .001 .... .010 0011 cmode=%BA_CMode layout=%BA_DataLayout dtype=%BA_DataType pad=%BA_PadValue rmode=%BA_RMode sat=%BA_Sat +b_catr 0000 0.00 0000 .... .000 0000 0010 0011 dr=%BA_DR aq=%BA_aq atom=%BA_atom far=%BA_far rl=%BA_rl trap=%BA_trap +b_datr .... .... .... 00.. .001 .... .010 0011 cmode=%BA_CMode layout=%BA_DataLayout dtype=%BA_DataType pad=%BA_PadValue rmode=%BA_RMode sat=%BA_Sat canonicalize=%BA_Canonicalize # Block hints; treated as no-ops in bring-up. b_hint .... .... .... 0... .000 0000 0011 0011 l_ul=%HINT_L_UL v=%HINT_V prefetch_size=%HINT_prefetch_size temp=%HINT_temp @@ -492,6 +592,10 @@ jr .... .... .... .... .110 .... .010 0111 %SrcL %SrcZero simm12=%sim b_z .... .... .... .... .001 .... .011 0111 %simm22 b_nz .... .... .... .... .010 .... .011 0111 %simm22 +# Architecturally reserved X-block encoding. The locked catalog classifies +# this form as illegal, but keeping the exact decode makes that fault precise. +xb .... .... .... .... .110 1111 1000 0001 raw=%XBRaw + # Extra mul/div reachability mulu 0000 000. .... .... .001 .... .100 0111 %RegDst %SrcL %SrcR muluw 0000 000. .... .... .011 .... .100 0111 %RegDst %SrcL %SrcR diff --git a/target/linx/insn64.decode b/target/linx/insn64.decode index 65d3015325d2..6e79f6d1ba06 100644 --- a/target/linx/insn64.decode +++ b/target/linx/insn64.decode @@ -31,11 +31,25 @@ %shamt_lo 7:5 %C 12:1 %L 14:1 +%VRawImm24 7:6 14:18 39:5 47:17 +%VRawIndexed 7:6 14:11 39:5 47:10 59:5 +%VRawAtomicLoad 7:5 15:11 39:5 47:12 +%VRawIndexedStore 7:6 14:11 27:5 47:10 59:5 +%VRawAtomicStore 15:12 47:11 +%VRawShuffleBfly 7:5 15:5 27:5 39:5 47:5 59:5 +%VRawShuffle 7:5 15:10 27:5 39:5 47:10 59:5 +%VRawShuffleIBfly 7:5 15:5 25:7 39:5 47:5 57:7 +%VRawShuffleI 7:5 15:17 39:5 47:17 # --------------------------------------------------------------------------- # Arithmetic # --------------------------------------------------------------------------- +# Queue manager operations. These are the canonical 64-bit V.* forms; the +# similarly named HL.* encodings remain separate 48-bit instructions. +v_qpop 0000 0000 0000 .... .010 .... .111 1101 0000 0000 0000 .... .000 .... .111 1111 %RegDst %SrcL +v_qpush 0000 000. .... .... .001 .... .111 1101 0000 000. .... .... .000 .... .111 1111 %RegDst %SrcL %SrcR + # 64-bit scalar block headers (L.BSTART.* with 42-bit halfword-scaled target) l_bstart_std .... .... .... .... .001 0000 0000 0001 .... .... .... .... .... .... .000 1111 simm=%simm42_7_s25_47_17 l_bstart_std .... .... .... .... .010 0000 0000 0001 .... .... .... .... .... .... .000 1111 simm=%simm42_7_s25_47_17 @@ -187,6 +201,93 @@ v_rdfmin 0000 0000 0000 .... .011 .... .000 1101 0000 0000 0000 .... .001 .... . # Stores (bridged) # --------------------------------------------------------------------------- +# PTO ISA 0.57.1 long vector forms that are part of the locked decode catalog. +# Keep these exact forms visible to the consumer parity gate. Execution is +# capability-faulted by the translators until the optional long-vector +# execution profile is implemented. +v_lbi .... .... .... .... .000 .... .001 1001 .... .... .... .... ..0. .... .111 1111 raw=%VRawImm24 +v_lbi_brg .... .... .... .... .000 .... .001 1001 .... .... .... .... ..1. .... .111 1111 raw=%VRawImm24 +v_lbui .... .... .... .... .100 .... .001 1001 .... .... .... .... ..0. .... .111 1111 raw=%VRawImm24 +v_lbui_brg .... .... .... .... .100 .... .001 1001 .... .... .... .... ..1. .... .111 1111 raw=%VRawImm24 +v_ld .... .00. .... .... .011 .... .000 1001 0000 000. .... .... ..0. .... .111 1111 raw=%VRawIndexed +v_ld_add 0000 0... .... .... .000 .... .000 1011 0000 00.. .... .... .010 .... .111 1111 raw=%VRawAtomicLoad +v_ld_and 0000 0... .... .... .001 .... .000 1011 0000 00.. .... .... .010 .... .111 1111 raw=%VRawAtomicLoad +v_ld_brg .... .00. .... .... .011 .... .000 1001 0000 000. .... .... ..1. .... .111 1111 raw=%VRawIndexed +v_ld_max 0000 0... .... .... .100 .... .000 1011 0000 00.. .... .... .010 .... .111 1111 raw=%VRawAtomicLoad +v_ld_min 0000 0... .... .... .101 .... .000 1011 0000 00.. .... .... .010 .... .111 1111 raw=%VRawAtomicLoad +v_ld_or 0000 0... .... .... .010 .... .000 1011 0000 00.. .... .... .010 .... .111 1111 raw=%VRawAtomicLoad +v_ld_xor 0000 0... .... .... .011 .... .000 1011 0000 00.. .... .... .010 .... .111 1111 raw=%VRawAtomicLoad +v_ldi .... .... .... .... .011 .... .001 1001 .... .... .... .... ..0. .... .111 1111 raw=%VRawImm24 +v_ldi_brg .... .... .... .... .011 .... .001 1001 .... .... .... .... ..1. .... .111 1111 raw=%VRawImm24 +v_ldi_u .... .... .... .... .011 .... .010 1001 .... .... .... .... ..0. .... .111 1111 raw=%VRawImm24 +v_ldi_u_brg .... .... .... .... .011 .... .010 1001 .... .... .... .... ..1. .... .111 1111 raw=%VRawImm24 +v_lhi .... .... .... .... .001 .... .001 1001 .... .... .... .... ..0. .... .111 1111 raw=%VRawImm24 +v_lhi_brg .... .... .... .... .001 .... .001 1001 .... .... .... .... ..1. .... .111 1111 raw=%VRawImm24 +v_lhi_u .... .... .... .... .001 .... .010 1001 .... .... .... .... ..0. .... .111 1111 raw=%VRawImm24 +v_lhi_u_brg .... .... .... .... .001 .... .010 1001 .... .... .... .... ..1. .... .111 1111 raw=%VRawImm24 +v_lhui .... .... .... .... .101 .... .001 1001 .... .... .... .... ..0. .... .111 1111 raw=%VRawImm24 +v_lhui_brg .... .... .... .... .101 .... .001 1001 .... .... .... .... ..1. .... .111 1111 raw=%VRawImm24 +v_lhui_u .... .... .... .... .101 .... .010 1001 .... .... .... .... ..0. .... .111 1111 raw=%VRawImm24 +v_lhui_u_brg .... .... .... .... .101 .... .010 1001 .... .... .... .... ..1. .... .111 1111 raw=%VRawImm24 +v_lw_add 0000 0... .... .... .000 .... .000 1011 0000 00.. .... .... .000 .... .111 1111 raw=%VRawAtomicLoad +v_lw_and 0000 0... .... .... .001 .... .000 1011 0000 00.. .... .... .000 .... .111 1111 raw=%VRawAtomicLoad +v_lw_max 0000 0... .... .... .100 .... .000 1011 0000 00.. .... .... .000 .... .111 1111 raw=%VRawAtomicLoad +v_lw_min 0000 0... .... .... .101 .... .000 1011 0000 00.. .... .... .000 .... .111 1111 raw=%VRawAtomicLoad +v_lw_or 0000 0... .... .... .010 .... .000 1011 0000 00.. .... .... .000 .... .111 1111 raw=%VRawAtomicLoad +v_lw_xor 0000 0... .... .... .011 .... .000 1011 0000 00.. .... .... .000 .... .111 1111 raw=%VRawAtomicLoad +v_lwi .... .... .... .... .010 .... .001 1001 .... .... .... .... ..0. .... .111 1111 raw=%VRawImm24 +v_lwi_brg .... .... .... .... .010 .... .001 1001 .... .... .... .... ..1. .... .111 1111 raw=%VRawImm24 +v_lwi_u .... .... .... .... .010 .... .010 1001 .... .... .... .... ..0. .... .111 1111 raw=%VRawImm24 +v_lwi_u_brg .... .... .... .... .010 .... .010 1001 .... .... .... .... ..1. .... .111 1111 raw=%VRawImm24 +v_lwu .... .00. .... .... .110 .... .000 1001 0000 000. .... .... ..0. .... .111 1111 raw=%VRawIndexed +v_lwu_brg .... .00. .... .... .110 .... .000 1001 0000 000. .... .... ..1. .... .111 1111 raw=%VRawIndexed +v_lwui .... .... .... .... .110 .... .001 1001 .... .... .... .... ..0. .... .111 1111 raw=%VRawImm24 +v_lwui_brg .... .... .... .... .110 .... .001 1001 .... .... .... .... ..1. .... .111 1111 raw=%VRawImm24 +v_lwui_u .... .... .... .... .110 .... .010 1001 .... .... .... .... ..0. .... .111 1111 raw=%VRawImm24 +v_lwui_u_brg .... .... .... .... .110 .... .010 1001 .... .... .... .... ..1. .... .111 1111 raw=%VRawImm24 +v_sbi .... .... .... .... .000 .... .101 1001 .... .... .... .... ..0. .... .111 1111 raw=%VRawImm24 +v_sbi_brg .... .... .... .... .000 .... .101 1001 .... .... .... .... ..1. .... .111 1111 raw=%VRawImm24 +v_sd .... .00. .... .... .011 0000 0100 1001 .... .00. .... .... ..0. .... .111 1111 raw=%VRawIndexedStore +v_sd_add 0000 00.. .... .... .000 0000 0000 1011 0000 0... .... .... .011 0000 0111 1111 raw=%VRawAtomicStore +v_sd_and 0000 00.. .... .... .001 0000 0000 1011 0000 0... .... .... .011 0000 0111 1111 raw=%VRawAtomicStore +v_sd_brg .... .00. .... .... .011 0000 0100 1001 .... .00. .... .... ..1. .... .111 1111 raw=%VRawIndexedStore +v_sd_max 0000 00.. .... .... .100 0000 0000 1011 0000 0... .... .... .011 0000 0111 1111 raw=%VRawAtomicStore +v_sd_min 0000 00.. .... .... .101 0000 0000 1011 0000 0... .... .... .011 0000 0111 1111 raw=%VRawAtomicStore +v_sd_or 0000 00.. .... .... .010 0000 0000 1011 0000 0... .... .... .011 0000 0111 1111 raw=%VRawAtomicStore +v_sd_u .... .00. .... .... .111 0000 0100 1001 .... .00. .... .... ..0. .... .111 1111 raw=%VRawIndexedStore +v_sd_u_brg .... .00. .... .... .111 0000 0100 1001 .... .00. .... .... ..1. .... .111 1111 raw=%VRawIndexedStore +v_sd_xor 0000 00.. .... .... .011 0000 0000 1011 0000 0... .... .... .011 0000 0111 1111 raw=%VRawAtomicStore +v_sdi .... .... .... .... .011 .... .101 1001 .... .... .... .... ..0. .... .111 1111 raw=%VRawImm24 +v_sdi_brg .... .... .... .... .011 .... .101 1001 .... .... .... .... ..1. .... .111 1111 raw=%VRawImm24 +v_sdi_u .... .... .... .... .111 .... .101 1001 .... .... .... .... ..0. .... .111 1111 raw=%VRawImm24 +v_sdi_u_brg .... .... .... .... .111 .... .101 1001 .... .... .... .... ..1. .... .111 1111 raw=%VRawImm24 +v_sh_u .... .00. .... .... .101 0000 0100 1001 .... .00. .... .... ..0. .... .111 1111 raw=%VRawIndexedStore +v_sh_u_brg .... .00. .... .... .101 0000 0100 1001 .... .00. .... .... ..1. .... .111 1111 raw=%VRawIndexedStore +v_shfl_bfly .... .000 0000 .... .010 .... .001 1101 .... .000 0000 .... .000 .... .111 1111 raw=%VRawShuffleBfly +v_shfl_down .... .00. .... .... .001 .... .001 1101 .... .00. .... .... .000 .... .111 1111 raw=%VRawShuffle +v_shfl_idx .... .00. .... .... .011 .... .001 1101 .... .00. .... .... .000 .... .111 1111 raw=%VRawShuffle +v_shfl_up .... .00. .... .... .000 .... .001 1101 .... .00. .... .... .000 .... .111 1111 raw=%VRawShuffle +v_shfli_bfly .... ...0 0000 .... .110 .... .010 1101 .... ...0 0000 .... .000 .... .111 1111 raw=%VRawShuffleIBfly +v_shfli_down .... .... .... .... .101 .... .010 1101 .... .... .... .... .000 .... .111 1111 raw=%VRawShuffleI +v_shfli_idx .... .... .... .... .111 .... .010 1101 .... .... .... .... .000 .... .111 1111 raw=%VRawShuffleI +v_shfli_up .... .... .... .... .100 .... .010 1101 .... .... .... .... .000 .... .111 1111 raw=%VRawShuffleI +v_shi .... .... .... .... .001 .... .101 1001 .... .... .... .... ..0. .... .111 1111 raw=%VRawImm24 +v_shi_brg .... .... .... .... .001 .... .101 1001 .... .... .... .... ..1. .... .111 1111 raw=%VRawImm24 +v_shi_u .... .... .... .... .101 .... .101 1001 .... .... .... .... ..0. .... .111 1111 raw=%VRawImm24 +v_shi_u_brg .... .... .... .... .101 .... .101 1001 .... .... .... .... ..1. .... .111 1111 raw=%VRawImm24 +v_sw_add 0000 00.. .... .... .000 0000 0000 1011 0000 0... .... .... .001 0000 0111 1111 raw=%VRawAtomicStore +v_sw_and 0000 00.. .... .... .001 0000 0000 1011 0000 0... .... .... .001 0000 0111 1111 raw=%VRawAtomicStore +v_sw_max 0000 00.. .... .... .100 0000 0000 1011 0000 0... .... .... .001 0000 0111 1111 raw=%VRawAtomicStore +v_sw_min 0000 00.. .... .... .101 0000 0000 1011 0000 0... .... .... .001 0000 0111 1111 raw=%VRawAtomicStore +v_sw_or 0000 00.. .... .... .010 0000 0000 1011 0000 0... .... .... .001 0000 0111 1111 raw=%VRawAtomicStore +v_sw_u .... .00. .... .... .110 0000 0100 1001 .... .00. .... .... ..0. .... .111 1111 raw=%VRawIndexedStore +v_sw_u_brg .... .00. .... .... .110 0000 0100 1001 .... .00. .... .... ..1. .... .111 1111 raw=%VRawIndexedStore +v_sw_xor 0000 00.. .... .... .011 0000 0000 1011 0000 0... .... .... .001 0000 0111 1111 raw=%VRawAtomicStore +v_swi .... .... .... .... .010 .... .101 1001 .... .... .... .... ..0. .... .111 1111 raw=%VRawImm24 +v_swi_brg .... .... .... .... .010 .... .101 1001 .... .... .... .... ..1. .... .111 1111 raw=%VRawImm24 +v_swi_u .... .... .... .... .110 .... .101 1001 .... .... .... .... ..0. .... .111 1111 raw=%VRawImm24 +v_swi_u_brg .... .... .... .... .110 .... .101 1001 .... .... .... .... ..1. .... .111 1111 raw=%VRawImm24 + # V.L* / V.L*.BRG (`.local` uses tile bases, `.brg` uses RI bases) v_lw .... .00. .... .... .010 .... .000 1001 0000 000. .... .... ..0. .... .111 1111 %RegDst %SrcL %SrcR shamt=%shamt_hi c=%C l=%L v_lw_brg .... .00. .... .... .010 .... .000 1001 0000 000. .... .... ..1. .... .111 1111 %RegDst %SrcL %SrcR shamt=%shamt_hi c=%C l=%L diff --git a/target/linx/linx_opcode_ids_gen.h b/target/linx/linx_opcode_ids_gen.h index d7901c53d78c..381df4c503bd 100644 --- a/target/linx/linx_opcode_ids_gen.h +++ b/target/linx/linx_opcode_ids_gen.h @@ -6,661 +6,739 @@ typedef enum LinxOpcodeId { LINX_OP_INVALID = 0, LINX_OP_BSTART_CUBE = 1, LINX_OP_BSTART_FALL = 2, - LINX_OP_BSTART_FIXP = 3, - LINX_OP_BSTART_FP_CALL = 4, - LINX_OP_BSTART_FP_COND = 5, - LINX_OP_BSTART_FP_DIRECT = 6, - LINX_OP_BSTART_FP_FALL = 7, - LINX_OP_BSTART_FP_ICALL = 8, - LINX_OP_BSTART_FP_IND = 9, - LINX_OP_BSTART_FP_RET = 10, - LINX_OP_BSTART_ICALL = 11, - LINX_OP_BSTART_IND = 12, - LINX_OP_BSTART_MPAR = 13, - LINX_OP_BSTART_MSEQ = 14, - LINX_OP_BSTART_RET = 15, - LINX_OP_BSTART_SPLIT_COND = 16, - LINX_OP_BSTART_SPLIT_DIRECT = 17, - LINX_OP_BSTART_STD_CALL = 18, - LINX_OP_BSTART_STD_COND = 19, - LINX_OP_BSTART_STD_DIRECT = 20, - LINX_OP_BSTART_SYS = 21, - LINX_OP_BSTART_TEPL = 22, - LINX_OP_BSTART_TMA = 23, - LINX_OP_BSTART_VPAR = 24, - LINX_OP_BSTART_VSEQ = 25, - LINX_OP_C_BSTART_COND = 26, - LINX_OP_C_BSTART_DIRECT = 27, - LINX_OP_C_BSTART_FP = 28, - LINX_OP_C_BSTART_MPAR = 29, - LINX_OP_C_BSTART_MSEQ = 30, - LINX_OP_C_BSTART_STD_CALL = 31, - LINX_OP_C_BSTART_STD_COND = 32, - LINX_OP_C_BSTART_STD_DIRECT = 33, - LINX_OP_C_BSTART_STD_FALL = 34, - LINX_OP_C_BSTART_STD_ICALL = 35, - LINX_OP_C_BSTART_STD_IND = 36, - LINX_OP_C_BSTART_STD_RET = 37, - LINX_OP_C_BSTART_SYS = 38, - LINX_OP_C_BSTART_VPAR = 39, - LINX_OP_C_BSTART_VSEQ = 40, - LINX_OP_C_BSTOP = 41, - LINX_OP_B_ARG = 42, - LINX_OP_B_ARG_DN2NZ = 43, - LINX_OP_B_ARG_DN2ZN = 44, - LINX_OP_B_ARG_ND2ZN = 45, - LINX_OP_B_ARG_NORM = 46, - LINX_OP_B_ARG_NZ2DN = 47, - LINX_OP_B_CATR = 48, - LINX_OP_B_DATR = 49, - LINX_OP_B_DIM_LB0 = 50, - LINX_OP_B_DIM_LB1 = 51, - LINX_OP_B_DIM_LB2 = 52, - LINX_OP_B_EQ = 53, - LINX_OP_B_GE = 54, - LINX_OP_B_GEU = 55, - LINX_OP_B_HINT = 56, - LINX_OP_B_HINT_TRACE = 57, - LINX_OP_B_LT = 58, - LINX_OP_B_LTU = 59, - LINX_OP_B_NE = 60, - LINX_OP_ADD = 61, - LINX_OP_ADDI = 62, - LINX_OP_ADDIW = 63, - LINX_OP_ADDW = 64, - LINX_OP_AND = 65, - LINX_OP_ANDI = 66, - LINX_OP_ANDIW = 67, - LINX_OP_ANDW = 68, - LINX_OP_BCNT = 69, - LINX_OP_BIC = 70, - LINX_OP_BIS = 71, - LINX_OP_BSTART_STD_FALL = 72, - LINX_OP_BXS = 73, - LINX_OP_BXU = 74, - LINX_OP_CASB = 75, - LINX_OP_CASD = 76, - LINX_OP_CASH = 77, - LINX_OP_CASW = 78, - LINX_OP_CLZ = 79, - LINX_OP_CSEL = 80, - LINX_OP_CTZ = 81, - LINX_OP_DIV = 82, - LINX_OP_DIVU = 83, - LINX_OP_DIVUW = 84, - LINX_OP_DIVW = 85, - LINX_OP_DMA = 86, - LINX_OP_HL_ADDI = 87, - LINX_OP_HL_ADDIW = 88, - LINX_OP_HL_ANDI = 89, - LINX_OP_HL_ANDIW = 90, - LINX_OP_HL_BFI = 91, - LINX_OP_HL_BSTART_FP_CALL = 92, - LINX_OP_HL_BSTART_FP_COND = 93, - LINX_OP_HL_BSTART_FP_DIRECT = 94, - LINX_OP_HL_BSTART_FP_FALL = 95, - LINX_OP_HL_BSTART_SYS = 96, - LINX_OP_HL_CASB = 97, - LINX_OP_HL_CASD = 98, - LINX_OP_HL_CASH = 99, - LINX_OP_HL_CASW = 100, - LINX_OP_HL_CCAT = 101, - LINX_OP_HL_CCATW = 102, - LINX_OP_HL_CMP_ANDI = 103, - LINX_OP_HL_CMP_EQI = 104, - LINX_OP_HL_CMP_GEI = 105, - LINX_OP_HL_CMP_GEUI = 106, - LINX_OP_HL_CMP_LTI = 107, - LINX_OP_HL_CMP_LTUI = 108, - LINX_OP_HL_CMP_NEI = 109, - LINX_OP_HL_CMP_ORI = 110, - LINX_OP_HL_DIV = 111, - LINX_OP_HL_DIVU = 112, - LINX_OP_HL_DIVUW = 113, - LINX_OP_HL_DIVW = 114, - LINX_OP_HL_LBI = 115, - LINX_OP_HL_LBIP = 116, - LINX_OP_HL_LBI_PO = 117, - LINX_OP_HL_LBI_PR = 118, - LINX_OP_HL_LBP = 119, - LINX_OP_HL_LBUI = 120, - LINX_OP_HL_LBUIP = 121, - LINX_OP_HL_LBUI_PO = 122, - LINX_OP_HL_LBUI_PR = 123, - LINX_OP_HL_LBUP = 124, - LINX_OP_HL_LBU_PO = 125, - LINX_OP_HL_LBU_PR = 126, - LINX_OP_HL_LB_PO = 127, - LINX_OP_HL_LB_PR = 128, - LINX_OP_HL_LDI = 129, - LINX_OP_HL_LDIP = 130, - LINX_OP_HL_LDIP_U = 131, - LINX_OP_HL_LDI_PO = 132, - LINX_OP_HL_LDI_PR = 133, - LINX_OP_HL_LDI_U = 134, - LINX_OP_HL_LDI_UPO = 135, - LINX_OP_HL_LDI_UPR = 136, - LINX_OP_HL_LDP = 137, - LINX_OP_HL_LD_PO = 138, - LINX_OP_HL_LD_PR = 139, - LINX_OP_HL_LHI = 140, - LINX_OP_HL_LHIP = 141, - LINX_OP_HL_LHIP_U = 142, - LINX_OP_HL_LHI_PO = 143, - LINX_OP_HL_LHI_PR = 144, - LINX_OP_HL_LHI_U = 145, - LINX_OP_HL_LHI_UPO = 146, - LINX_OP_HL_LHI_UPR = 147, - LINX_OP_HL_LHP = 148, - LINX_OP_HL_LHUI = 149, - LINX_OP_HL_LHUIP = 150, - LINX_OP_HL_LHUIP_U = 151, - LINX_OP_HL_LHUI_PO = 152, - LINX_OP_HL_LHUI_PR = 153, - LINX_OP_HL_LHUI_U = 154, - LINX_OP_HL_LHUI_UPO = 155, - LINX_OP_HL_LHUI_UPR = 156, - LINX_OP_HL_LHUP = 157, - LINX_OP_HL_LHU_PO = 158, - LINX_OP_HL_LHU_PR = 159, - LINX_OP_HL_LH_PO = 160, - LINX_OP_HL_LH_PR = 161, - LINX_OP_HL_LIS = 162, - LINX_OP_HL_LIU = 163, - LINX_OP_HL_LUI = 164, - LINX_OP_HL_LWI = 165, - LINX_OP_HL_LWIP = 166, - LINX_OP_HL_LWIP_U = 167, - LINX_OP_HL_LWI_PO = 168, - LINX_OP_HL_LWI_PR = 169, - LINX_OP_HL_LWI_U = 170, - LINX_OP_HL_LWI_UPO = 171, - LINX_OP_HL_LWI_UPR = 172, - LINX_OP_HL_LWP = 173, - LINX_OP_HL_LWUI = 174, - LINX_OP_HL_LWUIP = 175, - LINX_OP_HL_LWUIP_U = 176, - LINX_OP_HL_LWUI_PO = 177, - LINX_OP_HL_LWUI_PR = 178, - LINX_OP_HL_LWUI_U = 179, - LINX_OP_HL_LWUI_UPO = 180, - LINX_OP_HL_LWUI_UPR = 181, - LINX_OP_HL_LWUP = 182, - LINX_OP_HL_LWU_PO = 183, - LINX_OP_HL_LWU_PR = 184, - LINX_OP_HL_LW_PO = 185, - LINX_OP_HL_LW_PR = 186, - LINX_OP_HL_MADD = 187, - LINX_OP_HL_MADDW = 188, - LINX_OP_HL_MIADD = 189, - LINX_OP_HL_MISUB = 190, - LINX_OP_HL_MUL = 191, - LINX_OP_HL_MULU = 192, - LINX_OP_HL_ORI = 193, - LINX_OP_HL_ORIW = 194, - LINX_OP_HL_PRF = 195, - LINX_OP_HL_PRFI_U = 196, - LINX_OP_HL_PRFI_UA = 197, - LINX_OP_HL_PRF_A = 198, - LINX_OP_HL_QMT = 199, - LINX_OP_HL_QPOP = 200, - LINX_OP_HL_QPUSH = 201, - LINX_OP_HL_REM = 202, - LINX_OP_HL_REMU = 203, - LINX_OP_HL_REMUW = 204, - LINX_OP_HL_REMW = 205, - LINX_OP_HL_SBI = 206, - LINX_OP_HL_SBIP = 207, - LINX_OP_HL_SBI_PO = 208, - LINX_OP_HL_SBI_PR = 209, - LINX_OP_HL_SBP = 210, - LINX_OP_HL_SB_PO = 211, - LINX_OP_HL_SB_PR = 212, - LINX_OP_HL_SDI = 213, - LINX_OP_HL_SDIP = 214, - LINX_OP_HL_SDIP_U = 215, - LINX_OP_HL_SDI_PO = 216, - LINX_OP_HL_SDI_PR = 217, - LINX_OP_HL_SDI_U = 218, - LINX_OP_HL_SDI_UPO = 219, - LINX_OP_HL_SDI_UPR = 220, - LINX_OP_HL_SDP = 221, - LINX_OP_HL_SDP_U = 222, - LINX_OP_HL_SD_PO = 223, - LINX_OP_HL_SD_PR = 224, - LINX_OP_HL_SD_UPO = 225, - LINX_OP_HL_SD_UPR = 226, - LINX_OP_HL_SETC_ANDI = 227, - LINX_OP_HL_SETC_EQI = 228, - LINX_OP_HL_SETC_GEI = 229, - LINX_OP_HL_SETC_GEUI = 230, - LINX_OP_HL_SETC_LTI = 231, - LINX_OP_HL_SETC_LTUI = 232, - LINX_OP_HL_SETC_NEI = 233, - LINX_OP_HL_SETC_ORI = 234, - LINX_OP_HL_SETRET = 235, - LINX_OP_HL_SHI = 236, - LINX_OP_HL_SHIP = 237, - LINX_OP_HL_SHIP_U = 238, - LINX_OP_HL_SHI_PO = 239, - LINX_OP_HL_SHI_PR = 240, - LINX_OP_HL_SHI_U = 241, - LINX_OP_HL_SHI_UPO = 242, - LINX_OP_HL_SHI_UPR = 243, - LINX_OP_HL_SHP = 244, - LINX_OP_HL_SHP_U = 245, - LINX_OP_HL_SH_PO = 246, - LINX_OP_HL_SH_PR = 247, - LINX_OP_HL_SH_UPO = 248, - LINX_OP_HL_SH_UPR = 249, - LINX_OP_HL_SUBI = 250, - LINX_OP_HL_SUBIW = 251, - LINX_OP_HL_SWI = 252, - LINX_OP_HL_SWIP = 253, - LINX_OP_HL_SWIP_U = 254, - LINX_OP_HL_SWI_PO = 255, - LINX_OP_HL_SWI_PR = 256, - LINX_OP_HL_SWI_U = 257, - LINX_OP_HL_SWI_UPO = 258, - LINX_OP_HL_SWI_UPR = 259, - LINX_OP_HL_SWP = 260, - LINX_OP_HL_SWP_U = 261, - LINX_OP_HL_SW_PO = 262, - LINX_OP_HL_SW_PR = 263, - LINX_OP_HL_SW_UPO = 264, - LINX_OP_HL_SW_UPR = 265, - LINX_OP_HL_XORI = 266, - LINX_OP_HL_XORIW = 267, - LINX_OP_LUI = 268, - LINX_OP_MUL = 269, - LINX_OP_MULU = 270, - LINX_OP_MULUW = 271, - LINX_OP_MULW = 272, - LINX_OP_OR = 273, - LINX_OP_ORI = 274, - LINX_OP_ORIW = 275, - LINX_OP_ORW = 276, - LINX_OP_REM = 277, - LINX_OP_REMU = 278, - LINX_OP_REMUW = 279, - LINX_OP_REMW = 280, - LINX_OP_SLL = 281, - LINX_OP_SLLI = 282, - LINX_OP_SLLIW = 283, - LINX_OP_SLLW = 284, - LINX_OP_SRA = 285, - LINX_OP_SRAI = 286, - LINX_OP_SRAIW = 287, - LINX_OP_SRAW = 288, - LINX_OP_SRL = 289, - LINX_OP_SRLI = 290, - LINX_OP_SRLIW = 291, - LINX_OP_SRLW = 292, - LINX_OP_SUB = 293, - LINX_OP_SUBI = 294, - LINX_OP_SUBIW = 295, - LINX_OP_SUBW = 296, - LINX_OP_XOR = 297, - LINX_OP_XORI = 298, - LINX_OP_XORIW = 299, - LINX_OP_XORW = 300, - LINX_OP_ADDTPC = 301, - LINX_OP_B_NZ = 302, - LINX_OP_B_Z = 303, - LINX_OP_CMP_AND = 304, - LINX_OP_CMP_ANDI = 305, - LINX_OP_CMP_EQ = 306, - LINX_OP_CMP_EQI = 307, - LINX_OP_CMP_GE = 308, - LINX_OP_CMP_GEI = 309, - LINX_OP_CMP_GEU = 310, - LINX_OP_CMP_GEUI = 311, - LINX_OP_CMP_LT = 312, - LINX_OP_CMP_LTI = 313, - LINX_OP_CMP_LTU = 314, - LINX_OP_CMP_LTUI = 315, - LINX_OP_CMP_NE = 316, - LINX_OP_CMP_NEI = 317, - LINX_OP_CMP_OR = 318, - LINX_OP_CMP_ORI = 319, - LINX_OP_C_CMP_EQI = 320, - LINX_OP_C_CMP_NEI = 321, - LINX_OP_C_SETC_EQ = 322, - LINX_OP_C_SETC_NE = 323, - LINX_OP_C_SETC_TGT = 324, - LINX_OP_HL_ADDTPC = 325, - LINX_OP_SETC_AND = 326, - LINX_OP_SETC_ANDI = 327, - LINX_OP_SETC_EQ = 328, - LINX_OP_SETC_EQI = 329, - LINX_OP_SETC_GE = 330, - LINX_OP_SETC_GEI = 331, - LINX_OP_SETC_GEU = 332, - LINX_OP_SETC_GEUI = 333, - LINX_OP_SETC_LT = 334, - LINX_OP_SETC_LTI = 335, - LINX_OP_SETC_LTU = 336, - LINX_OP_SETC_LTUI = 337, - LINX_OP_SETC_NE = 338, - LINX_OP_SETC_NEI = 339, - LINX_OP_SETC_OR = 340, - LINX_OP_SETC_ORI = 341, - LINX_OP_SETC_TGT = 342, - LINX_OP_SETRET = 343, - LINX_OP_LB = 344, - LINX_OP_LBI = 345, - LINX_OP_LBU = 346, - LINX_OP_LBUI = 347, - LINX_OP_LBU_PCR = 348, - LINX_OP_LB_PCR = 349, - LINX_OP_LD = 350, - LINX_OP_LDI = 351, - LINX_OP_LDI_U = 352, - LINX_OP_LD_ADD = 353, - LINX_OP_LD_AND = 354, - LINX_OP_LD_OR = 355, - LINX_OP_LD_PCR = 356, - LINX_OP_LD_SMAX = 357, - LINX_OP_LD_SMIN = 358, - LINX_OP_LD_UMAX = 359, - LINX_OP_LD_UMIN = 360, - LINX_OP_LD_XOR = 361, - LINX_OP_LH = 362, - LINX_OP_LHI = 363, - LINX_OP_LHI_U = 364, - LINX_OP_LHU = 365, - LINX_OP_LHUI = 366, - LINX_OP_LHUI_U = 367, - LINX_OP_LHU_PCR = 368, - LINX_OP_LH_PCR = 369, - LINX_OP_LW = 370, - LINX_OP_LWI = 371, - LINX_OP_LWI_U = 372, - LINX_OP_LWU = 373, - LINX_OP_LWUI = 374, - LINX_OP_LWUI_U = 375, - LINX_OP_LWU_PCR = 376, - LINX_OP_LW_ADD = 377, - LINX_OP_LW_AND = 378, - LINX_OP_LW_OR = 379, - LINX_OP_LW_PCR = 380, - LINX_OP_LW_SMAX = 381, - LINX_OP_LW_SMIN = 382, - LINX_OP_LW_UMAX = 383, - LINX_OP_LW_UMIN = 384, - LINX_OP_LW_XOR = 385, - LINX_OP_SB = 386, - LINX_OP_SBI = 387, - LINX_OP_SB_PCR = 388, - LINX_OP_SD = 389, - LINX_OP_SDI = 390, - LINX_OP_SDI_U = 391, - LINX_OP_SD_ADD = 392, - LINX_OP_SD_AND = 393, - LINX_OP_SD_OR = 394, - LINX_OP_SD_PCR = 395, - LINX_OP_SD_SMAX = 396, - LINX_OP_SD_SMIN = 397, - LINX_OP_SD_U = 398, - LINX_OP_SD_UMAX = 399, - LINX_OP_SD_UMIN = 400, - LINX_OP_SD_XOR = 401, - LINX_OP_SH = 402, - LINX_OP_SHI = 403, - LINX_OP_SHI_U = 404, - LINX_OP_SH_PCR = 405, - LINX_OP_SH_U = 406, - LINX_OP_SW = 407, - LINX_OP_SWAPB = 408, - LINX_OP_SWAPD = 409, - LINX_OP_SWAPH = 410, - LINX_OP_SWAPW = 411, - LINX_OP_SWI = 412, - LINX_OP_SWI_U = 413, - LINX_OP_SW_ADD = 414, - LINX_OP_SW_AND = 415, - LINX_OP_SW_OR = 416, - LINX_OP_SW_PCR = 417, - LINX_OP_SW_SMAX = 418, - LINX_OP_SW_SMIN = 419, - LINX_OP_SW_U = 420, - LINX_OP_SW_UMAX = 421, - LINX_OP_SW_UMIN = 422, - LINX_OP_SW_XOR = 423, - LINX_OP_BIOR = 424, - LINX_OP_BTEXT = 425, - LINX_OP_B_IOT = 426, - LINX_OP_ERCOV = 427, - LINX_OP_ESAVE = 428, - LINX_OP_FENTRY = 429, - LINX_OP_FEXIT = 430, - LINX_OP_FRET_RA = 431, - LINX_OP_FRET_STK = 432, - LINX_OP_MCOPY = 433, - LINX_OP_MSET = 434, - LINX_OP_HL_LBU_PCR = 435, - LINX_OP_HL_LB_PCR = 436, - LINX_OP_HL_LD_PCR = 437, - LINX_OP_HL_LHU_PCR = 438, - LINX_OP_HL_LH_PCR = 439, - LINX_OP_HL_LWU_PCR = 440, - LINX_OP_HL_LW_PCR = 441, - LINX_OP_HL_SB_PCR = 442, - LINX_OP_HL_SD_PCR = 443, - LINX_OP_HL_SH_PCR = 444, - LINX_OP_HL_SW_PCR = 445, - LINX_OP_V_ADD = 446, - LINX_OP_V_ADDI = 447, - LINX_OP_V_AND = 448, - LINX_OP_V_ANDI = 449, - LINX_OP_V_BCNT = 450, - LINX_OP_V_BIC = 451, - LINX_OP_V_BIS = 452, - LINX_OP_V_BXS = 453, - LINX_OP_V_BXU = 454, - LINX_OP_V_CLZ = 455, - LINX_OP_V_CMP_AND = 456, - LINX_OP_V_CMP_ANDI = 457, - LINX_OP_V_CMP_EQ = 458, - LINX_OP_V_CMP_EQI = 459, - LINX_OP_V_CMP_GE = 460, - LINX_OP_V_CMP_GEI = 461, - LINX_OP_V_CMP_GEU = 462, - LINX_OP_V_CMP_GEUI = 463, - LINX_OP_V_CMP_LT = 464, - LINX_OP_V_CMP_LTI = 465, - LINX_OP_V_CMP_LTU = 466, - LINX_OP_V_CMP_LTUI = 467, - LINX_OP_V_CMP_NE = 468, - LINX_OP_V_CMP_NEI = 469, - LINX_OP_V_CMP_OR = 470, - LINX_OP_V_CMP_ORI = 471, - LINX_OP_V_CSEL = 472, - LINX_OP_V_CTZ = 473, - LINX_OP_V_DIV = 474, - LINX_OP_V_FABS = 475, - LINX_OP_V_FADD = 476, - LINX_OP_V_FCLASS = 477, - LINX_OP_V_FCVT = 478, - LINX_OP_V_FCVTI = 479, - LINX_OP_V_FDIV = 480, - LINX_OP_V_FEQ = 481, - LINX_OP_V_FEQS = 482, - LINX_OP_V_FEXP = 483, - LINX_OP_V_FGE = 484, - LINX_OP_V_FGES = 485, - LINX_OP_V_FLT = 486, - LINX_OP_V_FLTS = 487, - LINX_OP_V_FMADD = 488, - LINX_OP_V_FMAX = 489, - LINX_OP_V_FMIN = 490, - LINX_OP_V_FMSUB = 491, - LINX_OP_V_FMUL = 492, - LINX_OP_V_FNE = 493, - LINX_OP_V_FNES = 494, - LINX_OP_V_FNMADD = 495, - LINX_OP_V_FNMSUB = 496, - LINX_OP_V_FRECIP = 497, - LINX_OP_V_FSQRT = 498, - LINX_OP_V_FSUB = 499, - LINX_OP_V_ICVT = 500, - LINX_OP_V_ICVTF = 501, - LINX_OP_V_LB = 502, - LINX_OP_V_LBU = 503, - LINX_OP_V_LBU_BRG = 504, - LINX_OP_V_LB_BRG = 505, - LINX_OP_V_LH = 506, - LINX_OP_V_LHU = 507, - LINX_OP_V_LHU_BRG = 508, - LINX_OP_V_LH_BRG = 509, - LINX_OP_V_LW = 510, - LINX_OP_V_LW_BRG = 511, - LINX_OP_V_MADD = 512, - LINX_OP_V_MAX = 513, - LINX_OP_V_MIN = 514, - LINX_OP_V_MUL = 515, - LINX_OP_V_OR = 516, - LINX_OP_V_ORI = 517, - LINX_OP_V_PSEL = 518, - LINX_OP_V_RDADD = 519, - LINX_OP_V_RDAND = 520, - LINX_OP_V_RDFADD = 521, - LINX_OP_V_RDFMAX = 522, - LINX_OP_V_RDFMIN = 523, - LINX_OP_V_RDMAX = 524, - LINX_OP_V_RDMIN = 525, - LINX_OP_V_RDOR = 526, - LINX_OP_V_RDXOR = 527, - LINX_OP_V_REM = 528, - LINX_OP_V_REV = 529, - LINX_OP_V_SB = 530, - LINX_OP_V_SB_BRG = 531, - LINX_OP_V_SH = 532, - LINX_OP_V_SH_BRG = 533, - LINX_OP_V_SLL = 534, - LINX_OP_V_SLLI = 535, - LINX_OP_V_SRA = 536, - LINX_OP_V_SRAI = 537, - LINX_OP_V_SRL = 538, - LINX_OP_V_SRLI = 539, - LINX_OP_V_SUB = 540, - LINX_OP_V_SUBI = 541, - LINX_OP_V_SW = 542, - LINX_OP_V_SW_BRG = 543, - LINX_OP_V_XOR = 544, - LINX_OP_V_XORI = 545, - LINX_OP_ACRC = 546, - LINX_OP_ACRE = 547, - LINX_OP_EBREAK = 548, - LINX_OP_FABS = 549, - LINX_OP_FADD = 550, - LINX_OP_FCVT = 551, - LINX_OP_FCVTZ = 552, - LINX_OP_FDIV = 553, - LINX_OP_FEQ = 554, - LINX_OP_FGE = 555, - LINX_OP_FLT = 556, - LINX_OP_FMUL = 557, - LINX_OP_FSUB = 558, - LINX_OP_HL_SSRGET = 559, - LINX_OP_HL_SSRSET = 560, - LINX_OP_SSRGET = 561, - LINX_OP_SSRSET = 562, - LINX_OP_SSRSWAP = 563, - LINX_OP_C_ADD = 564, - LINX_OP_C_ADDI = 565, - LINX_OP_C_AND = 566, - LINX_OP_C_B_DIM = 567, - LINX_OP_C_B_DIMI = 568, - LINX_OP_C_EBREAK = 569, - LINX_OP_C_LDI = 570, - LINX_OP_C_LWI = 571, - LINX_OP_C_MOVI = 572, - LINX_OP_C_MOVR = 573, - LINX_OP_C_OR = 574, - LINX_OP_C_SDI = 575, - LINX_OP_C_SEXT_B = 576, - LINX_OP_C_SEXT_H = 577, - LINX_OP_C_SEXT_W = 578, - LINX_OP_C_SLLI = 579, - LINX_OP_C_SRLI = 580, - LINX_OP_C_SSRGET = 581, - LINX_OP_C_SUB = 582, - LINX_OP_C_SWI = 583, - LINX_OP_C_ZEXT_B = 584, - LINX_OP_C_ZEXT_H = 585, - LINX_OP_C_ZEXT_W = 586, - LINX_OP_ASSERT = 587, - LINX_OP_BC_IALL = 588, - LINX_OP_BC_IVA = 589, - LINX_OP_BSE = 590, - LINX_OP_BSTOP = 591, - LINX_OP_BWE = 592, - LINX_OP_BWI = 593, - LINX_OP_BWT = 594, - LINX_OP_C_BSTART_STD = 595, - LINX_OP_C_SETRET = 596, - LINX_OP_DC_CISW = 597, - LINX_OP_DC_CIVA = 598, - LINX_OP_DC_CSW = 599, - LINX_OP_DC_CVA = 600, - LINX_OP_DC_IALL = 601, - LINX_OP_DC_ISW = 602, - LINX_OP_DC_IVA = 603, - LINX_OP_DC_ZVA = 604, - LINX_OP_FCVTA = 605, - LINX_OP_FCVTM = 606, - LINX_OP_FCVTN = 607, - LINX_OP_FCVTP = 608, - LINX_OP_FENCE_D = 609, - LINX_OP_FENCE_I = 610, - LINX_OP_FEQS = 611, - LINX_OP_FEXP = 612, - LINX_OP_FGES = 613, - LINX_OP_FLTS = 614, - LINX_OP_FMADD = 615, - LINX_OP_FMAX = 616, - LINX_OP_FMIN = 617, - LINX_OP_FMSUB = 618, - LINX_OP_FNE = 619, - LINX_OP_FNES = 620, - LINX_OP_FNMADD = 621, - LINX_OP_FNMSUB = 622, - LINX_OP_FRECIP = 623, - LINX_OP_FSQRT = 624, - LINX_OP_IC_IALL = 625, - LINX_OP_IC_IVA = 626, - LINX_OP_J = 628, - LINX_OP_JR = 629, - LINX_OP_LR_B = 630, - LINX_OP_LR_D = 631, - LINX_OP_LR_H = 632, - LINX_OP_LR_W = 633, - LINX_OP_LSRGET = 634, - LINX_OP_L_BSTART_FP = 635, - LINX_OP_L_BSTART_STD = 636, - LINX_OP_L_BSTART_SYS = 637, - LINX_OP_MADD = 638, - LINX_OP_MADDW = 639, - LINX_OP_MAX = 640, - LINX_OP_MAXU = 641, - LINX_OP_MIN = 642, - LINX_OP_MINU = 643, - LINX_OP_PRF = 644, - LINX_OP_PRFI_U = 645, - LINX_OP_REV = 646, - LINX_OP_SCVTF = 647, - LINX_OP_SC_B = 648, - LINX_OP_SC_D = 649, - LINX_OP_SC_H = 650, - LINX_OP_SC_W = 651, - LINX_OP_START_CALL_32 = 652, - LINX_OP_START_CALL_48 = 653, - LINX_OP_TLB_IA = 654, - LINX_OP_TLB_IALL = 655, - LINX_OP_TLB_IAV = 656, - LINX_OP_TLB_IV = 657, - LINX_OP_UCVTF = 658, + LINX_OP_BSTART_FP_CALL = 3, + LINX_OP_BSTART_FP_COND = 4, + LINX_OP_BSTART_FP_DIRECT = 5, + LINX_OP_BSTART_FP_FALL = 6, + LINX_OP_BSTART_FP_ICALL = 7, + LINX_OP_BSTART_FP_IND = 8, + LINX_OP_BSTART_FP_RET = 9, + LINX_OP_BSTART_ICALL = 10, + LINX_OP_BSTART_IND = 11, + LINX_OP_BSTART_MPAR = 12, + LINX_OP_BSTART_MSEQ = 13, + LINX_OP_BSTART_RET = 14, + LINX_OP_BSTART_SPLIT_COND = 15, + LINX_OP_BSTART_SPLIT_DIRECT = 16, + LINX_OP_BSTART_STD_CALL = 17, + LINX_OP_BSTART_STD_COND = 18, + LINX_OP_BSTART_STD_DIRECT = 19, + LINX_OP_BSTART_SYS = 20, + LINX_OP_BSTART_TEPL = 21, + LINX_OP_BSTART_TMA = 22, + LINX_OP_C_BSTART_COND = 23, + LINX_OP_C_BSTART_DIRECT = 24, + LINX_OP_C_BSTART_FP = 25, + LINX_OP_C_BSTART_MPAR = 26, + LINX_OP_C_BSTART_MSEQ = 27, + LINX_OP_C_BSTART_STD_CALL = 28, + LINX_OP_C_BSTART_STD_COND = 29, + LINX_OP_C_BSTART_STD_DIRECT = 30, + LINX_OP_C_BSTART_STD_FALL = 31, + LINX_OP_C_BSTART_STD_ICALL = 32, + LINX_OP_C_BSTART_STD_IND = 33, + LINX_OP_C_BSTART_STD_RET = 34, + LINX_OP_C_BSTART_SYS = 35, + LINX_OP_C_BSTOP = 36, + LINX_OP_B_CATR = 37, + LINX_OP_B_DATR = 38, + LINX_OP_B_DIM_LB0 = 39, + LINX_OP_B_DIM_LB1 = 40, + LINX_OP_B_DIM_LB2 = 41, + LINX_OP_B_EQ = 42, + LINX_OP_B_GE = 43, + LINX_OP_B_GEU = 44, + LINX_OP_B_HINT = 45, + LINX_OP_B_HINT_TRACE = 46, + LINX_OP_B_LT = 47, + LINX_OP_B_LTU = 48, + LINX_OP_B_NE = 49, + LINX_OP_ADD = 50, + LINX_OP_ADDI = 51, + LINX_OP_ADDIW = 52, + LINX_OP_ADDW = 53, + LINX_OP_AND = 54, + LINX_OP_ANDI = 55, + LINX_OP_ANDIW = 56, + LINX_OP_ANDW = 57, + LINX_OP_BCNT = 58, + LINX_OP_BIC = 59, + LINX_OP_BIS = 60, + LINX_OP_BSTART_STD_FALL = 61, + LINX_OP_BXS = 62, + LINX_OP_BXU = 63, + LINX_OP_CASB = 64, + LINX_OP_CASD = 65, + LINX_OP_CASH = 66, + LINX_OP_CASW = 67, + LINX_OP_CLZ = 68, + LINX_OP_CSEL = 69, + LINX_OP_CTZ = 70, + LINX_OP_DIV = 71, + LINX_OP_DIVU = 72, + LINX_OP_DIVUW = 73, + LINX_OP_DIVW = 74, + LINX_OP_DMA = 75, + LINX_OP_HL_ADDI = 76, + LINX_OP_HL_ADDIW = 77, + LINX_OP_HL_ANDI = 78, + LINX_OP_HL_ANDIW = 79, + LINX_OP_HL_BFI = 80, + LINX_OP_HL_BSTART_FP_CALL = 81, + LINX_OP_HL_BSTART_FP_COND = 82, + LINX_OP_HL_BSTART_FP_DIRECT = 83, + LINX_OP_HL_BSTART_FP_FALL = 84, + LINX_OP_HL_BSTART_SYS = 85, + LINX_OP_HL_CASB = 86, + LINX_OP_HL_CASD = 87, + LINX_OP_HL_CASH = 88, + LINX_OP_HL_CASW = 89, + LINX_OP_HL_CCAT = 90, + LINX_OP_HL_CCATW = 91, + LINX_OP_HL_CMP_ANDI = 92, + LINX_OP_HL_CMP_EQI = 93, + LINX_OP_HL_CMP_GEI = 94, + LINX_OP_HL_CMP_GEUI = 95, + LINX_OP_HL_CMP_LTI = 96, + LINX_OP_HL_CMP_LTUI = 97, + LINX_OP_HL_CMP_NEI = 98, + LINX_OP_HL_CMP_ORI = 99, + LINX_OP_HL_DIV = 100, + LINX_OP_HL_DIVU = 101, + LINX_OP_HL_DIVUW = 102, + LINX_OP_HL_DIVW = 103, + LINX_OP_HL_LBI = 104, + LINX_OP_HL_LBIP = 105, + LINX_OP_HL_LBI_PO = 106, + LINX_OP_HL_LBI_PR = 107, + LINX_OP_HL_LBP = 108, + LINX_OP_HL_LBUI = 109, + LINX_OP_HL_LBUIP = 110, + LINX_OP_HL_LBUI_PO = 111, + LINX_OP_HL_LBUI_PR = 112, + LINX_OP_HL_LBUP = 113, + LINX_OP_HL_LBU_PO = 114, + LINX_OP_HL_LBU_PR = 115, + LINX_OP_HL_LB_PO = 116, + LINX_OP_HL_LB_PR = 117, + LINX_OP_HL_LDI = 118, + LINX_OP_HL_LDIP = 119, + LINX_OP_HL_LDIP_U = 120, + LINX_OP_HL_LDI_PO = 121, + LINX_OP_HL_LDI_PR = 122, + LINX_OP_HL_LDI_U = 123, + LINX_OP_HL_LDI_UPO = 124, + LINX_OP_HL_LDI_UPR = 125, + LINX_OP_HL_LDP = 126, + LINX_OP_HL_LD_PO = 127, + LINX_OP_HL_LD_PR = 128, + LINX_OP_HL_LHI = 129, + LINX_OP_HL_LHIP = 130, + LINX_OP_HL_LHIP_U = 131, + LINX_OP_HL_LHI_PO = 132, + LINX_OP_HL_LHI_PR = 133, + LINX_OP_HL_LHI_U = 134, + LINX_OP_HL_LHI_UPO = 135, + LINX_OP_HL_LHI_UPR = 136, + LINX_OP_HL_LHP = 137, + LINX_OP_HL_LHUI = 138, + LINX_OP_HL_LHUIP = 139, + LINX_OP_HL_LHUIP_U = 140, + LINX_OP_HL_LHUI_PO = 141, + LINX_OP_HL_LHUI_PR = 142, + LINX_OP_HL_LHUI_U = 143, + LINX_OP_HL_LHUI_UPO = 144, + LINX_OP_HL_LHUI_UPR = 145, + LINX_OP_HL_LHUP = 146, + LINX_OP_HL_LHU_PO = 147, + LINX_OP_HL_LHU_PR = 148, + LINX_OP_HL_LH_PO = 149, + LINX_OP_HL_LH_PR = 150, + LINX_OP_HL_LIS = 151, + LINX_OP_HL_LIU = 152, + LINX_OP_HL_LUI = 153, + LINX_OP_HL_LWI = 154, + LINX_OP_HL_LWIP = 155, + LINX_OP_HL_LWIP_U = 156, + LINX_OP_HL_LWI_PO = 157, + LINX_OP_HL_LWI_PR = 158, + LINX_OP_HL_LWI_U = 159, + LINX_OP_HL_LWI_UPO = 160, + LINX_OP_HL_LWI_UPR = 161, + LINX_OP_HL_LWP = 162, + LINX_OP_HL_LWUI = 163, + LINX_OP_HL_LWUIP = 164, + LINX_OP_HL_LWUIP_U = 165, + LINX_OP_HL_LWUI_PO = 166, + LINX_OP_HL_LWUI_PR = 167, + LINX_OP_HL_LWUI_U = 168, + LINX_OP_HL_LWUI_UPO = 169, + LINX_OP_HL_LWUI_UPR = 170, + LINX_OP_HL_LWUP = 171, + LINX_OP_HL_LWU_PO = 172, + LINX_OP_HL_LWU_PR = 173, + LINX_OP_HL_LW_PO = 174, + LINX_OP_HL_LW_PR = 175, + LINX_OP_HL_MADD = 176, + LINX_OP_HL_MADDW = 177, + LINX_OP_HL_MIADD = 178, + LINX_OP_HL_MISUB = 179, + LINX_OP_HL_MUL = 180, + LINX_OP_HL_MULU = 181, + LINX_OP_HL_ORI = 182, + LINX_OP_HL_ORIW = 183, + LINX_OP_HL_PRF = 184, + LINX_OP_HL_PRFI_U = 185, + LINX_OP_HL_PRFI_UA = 186, + LINX_OP_HL_PRF_A = 187, + LINX_OP_HL_QMT = 188, + LINX_OP_HL_QPOP = 189, + LINX_OP_HL_QPUSH = 190, + LINX_OP_HL_REM = 191, + LINX_OP_HL_REMU = 192, + LINX_OP_HL_REMUW = 193, + LINX_OP_HL_REMW = 194, + LINX_OP_HL_SBI = 195, + LINX_OP_HL_SBIP = 196, + LINX_OP_HL_SBI_PO = 197, + LINX_OP_HL_SBI_PR = 198, + LINX_OP_HL_SBP = 199, + LINX_OP_HL_SB_PO = 200, + LINX_OP_HL_SB_PR = 201, + LINX_OP_HL_SDI = 202, + LINX_OP_HL_SDIP = 203, + LINX_OP_HL_SDIP_U = 204, + LINX_OP_HL_SDI_PO = 205, + LINX_OP_HL_SDI_PR = 206, + LINX_OP_HL_SDI_U = 207, + LINX_OP_HL_SDI_UPO = 208, + LINX_OP_HL_SDI_UPR = 209, + LINX_OP_HL_SDP = 210, + LINX_OP_HL_SDP_U = 211, + LINX_OP_HL_SD_PO = 212, + LINX_OP_HL_SD_PR = 213, + LINX_OP_HL_SD_UPO = 214, + LINX_OP_HL_SD_UPR = 215, + LINX_OP_HL_SETC_ANDI = 216, + LINX_OP_HL_SETC_EQI = 217, + LINX_OP_HL_SETC_GEI = 218, + LINX_OP_HL_SETC_GEUI = 219, + LINX_OP_HL_SETC_LTI = 220, + LINX_OP_HL_SETC_LTUI = 221, + LINX_OP_HL_SETC_NEI = 222, + LINX_OP_HL_SETC_ORI = 223, + LINX_OP_HL_SETRET = 224, + LINX_OP_HL_SHI = 225, + LINX_OP_HL_SHIP = 226, + LINX_OP_HL_SHIP_U = 227, + LINX_OP_HL_SHI_PO = 228, + LINX_OP_HL_SHI_PR = 229, + LINX_OP_HL_SHI_U = 230, + LINX_OP_HL_SHI_UPO = 231, + LINX_OP_HL_SHI_UPR = 232, + LINX_OP_HL_SHP = 233, + LINX_OP_HL_SHP_U = 234, + LINX_OP_HL_SH_PO = 235, + LINX_OP_HL_SH_PR = 236, + LINX_OP_HL_SH_UPO = 237, + LINX_OP_HL_SH_UPR = 238, + LINX_OP_HL_SUBI = 239, + LINX_OP_HL_SUBIW = 240, + LINX_OP_HL_SWI = 241, + LINX_OP_HL_SWIP = 242, + LINX_OP_HL_SWIP_U = 243, + LINX_OP_HL_SWI_PO = 244, + LINX_OP_HL_SWI_PR = 245, + LINX_OP_HL_SWI_U = 246, + LINX_OP_HL_SWI_UPO = 247, + LINX_OP_HL_SWI_UPR = 248, + LINX_OP_HL_SWP = 249, + LINX_OP_HL_SWP_U = 250, + LINX_OP_HL_SW_PO = 251, + LINX_OP_HL_SW_PR = 252, + LINX_OP_HL_SW_UPO = 253, + LINX_OP_HL_SW_UPR = 254, + LINX_OP_HL_XORI = 255, + LINX_OP_HL_XORIW = 256, + LINX_OP_LUI = 257, + LINX_OP_MUL = 258, + LINX_OP_MULU = 259, + LINX_OP_MULUW = 260, + LINX_OP_MULW = 261, + LINX_OP_OR = 262, + LINX_OP_ORI = 263, + LINX_OP_ORIW = 264, + LINX_OP_ORW = 265, + LINX_OP_REM = 266, + LINX_OP_REMU = 267, + LINX_OP_REMUW = 268, + LINX_OP_REMW = 269, + LINX_OP_SLL = 270, + LINX_OP_SLLI = 271, + LINX_OP_SLLIW = 272, + LINX_OP_SLLW = 273, + LINX_OP_SRA = 274, + LINX_OP_SRAI = 275, + LINX_OP_SRAIW = 276, + LINX_OP_SRAW = 277, + LINX_OP_SRL = 278, + LINX_OP_SRLI = 279, + LINX_OP_SRLIW = 280, + LINX_OP_SRLW = 281, + LINX_OP_SUB = 282, + LINX_OP_SUBI = 283, + LINX_OP_SUBIW = 284, + LINX_OP_SUBW = 285, + LINX_OP_XOR = 286, + LINX_OP_XORI = 287, + LINX_OP_XORIW = 288, + LINX_OP_XORW = 289, + LINX_OP_ADDTPC = 290, + LINX_OP_B_NZ = 291, + LINX_OP_B_Z = 292, + LINX_OP_CMP_AND = 293, + LINX_OP_CMP_ANDI = 294, + LINX_OP_CMP_EQ = 295, + LINX_OP_CMP_EQI = 296, + LINX_OP_CMP_GE = 297, + LINX_OP_CMP_GEI = 298, + LINX_OP_CMP_GEU = 299, + LINX_OP_CMP_GEUI = 300, + LINX_OP_CMP_LT = 301, + LINX_OP_CMP_LTI = 302, + LINX_OP_CMP_LTU = 303, + LINX_OP_CMP_LTUI = 304, + LINX_OP_CMP_NE = 305, + LINX_OP_CMP_NEI = 306, + LINX_OP_CMP_OR = 307, + LINX_OP_CMP_ORI = 308, + LINX_OP_C_CMP_EQI = 309, + LINX_OP_C_CMP_NEI = 310, + LINX_OP_C_SETC_EQ = 311, + LINX_OP_C_SETC_NE = 312, + LINX_OP_C_SETC_TGT = 313, + LINX_OP_HL_ADDTPC = 314, + LINX_OP_SETC_AND = 315, + LINX_OP_SETC_ANDI = 316, + LINX_OP_SETC_EQ = 317, + LINX_OP_SETC_EQI = 318, + LINX_OP_SETC_GE = 319, + LINX_OP_SETC_GEI = 320, + LINX_OP_SETC_GEU = 321, + LINX_OP_SETC_GEUI = 322, + LINX_OP_SETC_LT = 323, + LINX_OP_SETC_LTI = 324, + LINX_OP_SETC_LTU = 325, + LINX_OP_SETC_LTUI = 326, + LINX_OP_SETC_NE = 327, + LINX_OP_SETC_NEI = 328, + LINX_OP_SETC_OR = 329, + LINX_OP_SETC_ORI = 330, + LINX_OP_SETC_TGT = 331, + LINX_OP_SETRET = 332, + LINX_OP_LB = 333, + LINX_OP_LBI = 334, + LINX_OP_LBU = 335, + LINX_OP_LBUI = 336, + LINX_OP_LBU_PCR = 337, + LINX_OP_LB_PCR = 338, + LINX_OP_LD = 339, + LINX_OP_LDI = 340, + LINX_OP_LDI_U = 341, + LINX_OP_LD_ADD = 342, + LINX_OP_LD_AND = 343, + LINX_OP_LD_OR = 344, + LINX_OP_LD_PCR = 345, + LINX_OP_LD_SMAX = 346, + LINX_OP_LD_SMIN = 347, + LINX_OP_LD_UMAX = 348, + LINX_OP_LD_UMIN = 349, + LINX_OP_LD_XOR = 350, + LINX_OP_LH = 351, + LINX_OP_LHI = 352, + LINX_OP_LHI_U = 353, + LINX_OP_LHU = 354, + LINX_OP_LHUI = 355, + LINX_OP_LHUI_U = 356, + LINX_OP_LHU_PCR = 357, + LINX_OP_LH_PCR = 358, + LINX_OP_LW = 359, + LINX_OP_LWI = 360, + LINX_OP_LWI_U = 361, + LINX_OP_LWU = 362, + LINX_OP_LWUI = 363, + LINX_OP_LWUI_U = 364, + LINX_OP_LWU_PCR = 365, + LINX_OP_LW_ADD = 366, + LINX_OP_LW_AND = 367, + LINX_OP_LW_OR = 368, + LINX_OP_LW_PCR = 369, + LINX_OP_LW_SMAX = 370, + LINX_OP_LW_SMIN = 371, + LINX_OP_LW_UMAX = 372, + LINX_OP_LW_UMIN = 373, + LINX_OP_LW_XOR = 374, + LINX_OP_SB = 375, + LINX_OP_SBI = 376, + LINX_OP_SB_PCR = 377, + LINX_OP_SD = 378, + LINX_OP_SDI = 379, + LINX_OP_SDI_U = 380, + LINX_OP_SD_ADD = 381, + LINX_OP_SD_AND = 382, + LINX_OP_SD_OR = 383, + LINX_OP_SD_PCR = 384, + LINX_OP_SD_SMAX = 385, + LINX_OP_SD_SMIN = 386, + LINX_OP_SD_U = 387, + LINX_OP_SD_UMAX = 388, + LINX_OP_SD_UMIN = 389, + LINX_OP_SD_XOR = 390, + LINX_OP_SH = 391, + LINX_OP_SHI = 392, + LINX_OP_SHI_U = 393, + LINX_OP_SH_PCR = 394, + LINX_OP_SH_U = 395, + LINX_OP_SW = 396, + LINX_OP_SWAPB = 397, + LINX_OP_SWAPD = 398, + LINX_OP_SWAPH = 399, + LINX_OP_SWAPW = 400, + LINX_OP_SWI = 401, + LINX_OP_SWI_U = 402, + LINX_OP_SW_ADD = 403, + LINX_OP_SW_AND = 404, + LINX_OP_SW_OR = 405, + LINX_OP_SW_PCR = 406, + LINX_OP_SW_SMAX = 407, + LINX_OP_SW_SMIN = 408, + LINX_OP_SW_U = 409, + LINX_OP_SW_UMAX = 410, + LINX_OP_SW_UMIN = 411, + LINX_OP_SW_XOR = 412, + LINX_OP_BIOR = 413, + LINX_OP_BTEXT = 414, + LINX_OP_B_IOT = 415, + LINX_OP_ERCOV = 416, + LINX_OP_ESAVE = 417, + LINX_OP_FENTRY = 418, + LINX_OP_FEXIT = 419, + LINX_OP_FRET_RA = 420, + LINX_OP_FRET_STK = 421, + LINX_OP_MCOPY = 422, + LINX_OP_MSET = 423, + LINX_OP_HL_LBU_PCR = 424, + LINX_OP_HL_LB_PCR = 425, + LINX_OP_HL_LD_PCR = 426, + LINX_OP_HL_LHU_PCR = 427, + LINX_OP_HL_LH_PCR = 428, + LINX_OP_HL_LWU_PCR = 429, + LINX_OP_HL_LW_PCR = 430, + LINX_OP_HL_SB_PCR = 431, + LINX_OP_HL_SD_PCR = 432, + LINX_OP_HL_SH_PCR = 433, + LINX_OP_HL_SW_PCR = 434, + LINX_OP_V_ADD = 435, + LINX_OP_V_ADDI = 436, + LINX_OP_V_AND = 437, + LINX_OP_V_ANDI = 438, + LINX_OP_V_BCNT = 439, + LINX_OP_V_BIC = 440, + LINX_OP_V_BIS = 441, + LINX_OP_V_BXS = 442, + LINX_OP_V_BXU = 443, + LINX_OP_V_CLZ = 444, + LINX_OP_V_CMP_AND = 445, + LINX_OP_V_CMP_ANDI = 446, + LINX_OP_V_CMP_EQ = 447, + LINX_OP_V_CMP_EQI = 448, + LINX_OP_V_CMP_GE = 449, + LINX_OP_V_CMP_GEI = 450, + LINX_OP_V_CMP_GEU = 451, + LINX_OP_V_CMP_GEUI = 452, + LINX_OP_V_CMP_LT = 453, + LINX_OP_V_CMP_LTI = 454, + LINX_OP_V_CMP_LTU = 455, + LINX_OP_V_CMP_LTUI = 456, + LINX_OP_V_CMP_NE = 457, + LINX_OP_V_CMP_NEI = 458, + LINX_OP_V_CMP_OR = 459, + LINX_OP_V_CMP_ORI = 460, + LINX_OP_V_CSEL = 461, + LINX_OP_V_CTZ = 462, + LINX_OP_V_DIV = 463, + LINX_OP_V_FABS = 464, + LINX_OP_V_FADD = 465, + LINX_OP_V_FCLASS = 466, + LINX_OP_V_FCVT = 467, + LINX_OP_V_FCVTI = 468, + LINX_OP_V_FDIV = 469, + LINX_OP_V_FEQ = 470, + LINX_OP_V_FEQS = 471, + LINX_OP_V_FEXP = 472, + LINX_OP_V_FGE = 473, + LINX_OP_V_FGES = 474, + LINX_OP_V_FLT = 475, + LINX_OP_V_FLTS = 476, + LINX_OP_V_FMADD = 477, + LINX_OP_V_FMAX = 478, + LINX_OP_V_FMIN = 479, + LINX_OP_V_FMSUB = 480, + LINX_OP_V_FMUL = 481, + LINX_OP_V_FNE = 482, + LINX_OP_V_FNES = 483, + LINX_OP_V_FNMADD = 484, + LINX_OP_V_FNMSUB = 485, + LINX_OP_V_FRECIP = 486, + LINX_OP_V_FSQRT = 487, + LINX_OP_V_FSUB = 488, + LINX_OP_V_ICVT = 489, + LINX_OP_V_ICVTF = 490, + LINX_OP_V_LB = 491, + LINX_OP_V_LBI = 492, + LINX_OP_V_LBI_BRG = 493, + LINX_OP_V_LBU = 494, + LINX_OP_V_LBUI = 495, + LINX_OP_V_LBUI_BRG = 496, + LINX_OP_V_LBU_BRG = 497, + LINX_OP_V_LB_BRG = 498, + LINX_OP_V_LD = 499, + LINX_OP_V_LDI = 500, + LINX_OP_V_LDI_BRG = 501, + LINX_OP_V_LDI_U = 502, + LINX_OP_V_LDI_U_BRG = 503, + LINX_OP_V_LD_ADD = 504, + LINX_OP_V_LD_AND = 505, + LINX_OP_V_LD_BRG = 506, + LINX_OP_V_LD_MAX = 507, + LINX_OP_V_LD_MIN = 508, + LINX_OP_V_LD_OR = 509, + LINX_OP_V_LD_XOR = 510, + LINX_OP_V_LH = 511, + LINX_OP_V_LHI = 512, + LINX_OP_V_LHI_BRG = 513, + LINX_OP_V_LHI_U = 514, + LINX_OP_V_LHI_U_BRG = 515, + LINX_OP_V_LHU = 516, + LINX_OP_V_LHUI = 517, + LINX_OP_V_LHUI_BRG = 518, + LINX_OP_V_LHUI_U = 519, + LINX_OP_V_LHUI_U_BRG = 520, + LINX_OP_V_LHU_BRG = 521, + LINX_OP_V_LH_BRG = 522, + LINX_OP_V_LW = 523, + LINX_OP_V_LWI = 524, + LINX_OP_V_LWI_BRG = 525, + LINX_OP_V_LWI_U = 526, + LINX_OP_V_LWI_U_BRG = 527, + LINX_OP_V_LWU = 528, + LINX_OP_V_LWUI = 529, + LINX_OP_V_LWUI_BRG = 530, + LINX_OP_V_LWUI_U = 531, + LINX_OP_V_LWUI_U_BRG = 532, + LINX_OP_V_LWU_BRG = 533, + LINX_OP_V_LW_ADD = 534, + LINX_OP_V_LW_AND = 535, + LINX_OP_V_LW_BRG = 536, + LINX_OP_V_LW_MAX = 537, + LINX_OP_V_LW_MIN = 538, + LINX_OP_V_LW_OR = 539, + LINX_OP_V_LW_XOR = 540, + LINX_OP_V_MADD = 541, + LINX_OP_V_MAX = 542, + LINX_OP_V_MIN = 543, + LINX_OP_V_MUL = 544, + LINX_OP_V_OR = 545, + LINX_OP_V_ORI = 546, + LINX_OP_V_PSEL = 547, + LINX_OP_V_RDADD = 548, + LINX_OP_V_RDAND = 549, + LINX_OP_V_RDFADD = 550, + LINX_OP_V_RDFMAX = 551, + LINX_OP_V_RDFMIN = 552, + LINX_OP_V_RDMAX = 553, + LINX_OP_V_RDMIN = 554, + LINX_OP_V_RDOR = 555, + LINX_OP_V_RDXOR = 556, + LINX_OP_V_REM = 557, + LINX_OP_V_REV = 558, + LINX_OP_V_SB = 559, + LINX_OP_V_SBI = 560, + LINX_OP_V_SBI_BRG = 561, + LINX_OP_V_SB_BRG = 562, + LINX_OP_V_SD = 563, + LINX_OP_V_SDI = 564, + LINX_OP_V_SDI_BRG = 565, + LINX_OP_V_SDI_U = 566, + LINX_OP_V_SDI_U_BRG = 567, + LINX_OP_V_SD_ADD = 568, + LINX_OP_V_SD_AND = 569, + LINX_OP_V_SD_BRG = 570, + LINX_OP_V_SD_MAX = 571, + LINX_OP_V_SD_MIN = 572, + LINX_OP_V_SD_OR = 573, + LINX_OP_V_SD_U = 574, + LINX_OP_V_SD_U_BRG = 575, + LINX_OP_V_SD_XOR = 576, + LINX_OP_V_SH = 577, + LINX_OP_V_SHFLI_BFLY = 578, + LINX_OP_V_SHFLI_DOWN = 579, + LINX_OP_V_SHFLI_IDX = 580, + LINX_OP_V_SHFLI_UP = 581, + LINX_OP_V_SHFL_BFLY = 582, + LINX_OP_V_SHFL_DOWN = 583, + LINX_OP_V_SHFL_IDX = 584, + LINX_OP_V_SHFL_UP = 585, + LINX_OP_V_SHI = 586, + LINX_OP_V_SHI_BRG = 587, + LINX_OP_V_SHI_U = 588, + LINX_OP_V_SHI_U_BRG = 589, + LINX_OP_V_SH_BRG = 590, + LINX_OP_V_SH_U = 591, + LINX_OP_V_SH_U_BRG = 592, + LINX_OP_V_SLL = 593, + LINX_OP_V_SLLI = 594, + LINX_OP_V_SRA = 595, + LINX_OP_V_SRAI = 596, + LINX_OP_V_SRL = 597, + LINX_OP_V_SRLI = 598, + LINX_OP_V_SUB = 599, + LINX_OP_V_SUBI = 600, + LINX_OP_V_SW = 601, + LINX_OP_V_SWI = 602, + LINX_OP_V_SWI_BRG = 603, + LINX_OP_V_SWI_U = 604, + LINX_OP_V_SWI_U_BRG = 605, + LINX_OP_V_SW_ADD = 606, + LINX_OP_V_SW_AND = 607, + LINX_OP_V_SW_BRG = 608, + LINX_OP_V_SW_MAX = 609, + LINX_OP_V_SW_MIN = 610, + LINX_OP_V_SW_OR = 611, + LINX_OP_V_SW_U = 612, + LINX_OP_V_SW_U_BRG = 613, + LINX_OP_V_SW_XOR = 614, + LINX_OP_V_XOR = 615, + LINX_OP_V_XORI = 616, + LINX_OP_ACRC = 617, + LINX_OP_ACRE = 618, + LINX_OP_EBREAK = 619, + LINX_OP_FABS = 620, + LINX_OP_FADD = 621, + LINX_OP_FCVT = 622, + LINX_OP_FCVTZ = 623, + LINX_OP_FDIV = 624, + LINX_OP_FEQ = 625, + LINX_OP_FGE = 626, + LINX_OP_FLT = 627, + LINX_OP_FMUL = 628, + LINX_OP_FSUB = 629, + LINX_OP_HL_SSRGET = 630, + LINX_OP_HL_SSRSET = 631, + LINX_OP_SSRGET = 632, + LINX_OP_SSRSET = 633, + LINX_OP_SSRSWAP = 634, + LINX_OP_C_ADD = 635, + LINX_OP_C_ADDI = 636, + LINX_OP_C_AND = 637, + LINX_OP_C_B_DIM = 638, + LINX_OP_C_B_DIMI = 639, + LINX_OP_C_EBREAK = 640, + LINX_OP_C_LDI = 641, + LINX_OP_C_LWI = 642, + LINX_OP_C_MOVI = 643, + LINX_OP_C_MOVR = 644, + LINX_OP_C_OR = 645, + LINX_OP_C_SDI = 646, + LINX_OP_C_SETRET = 647, + LINX_OP_C_SEXT_B = 648, + LINX_OP_C_SEXT_H = 649, + LINX_OP_C_SEXT_W = 650, + LINX_OP_C_SLLI = 651, + LINX_OP_C_SRLI = 652, + LINX_OP_C_SSRGET = 653, + LINX_OP_C_SUB = 654, + LINX_OP_C_SWI = 655, + LINX_OP_C_ZEXT_B = 656, + LINX_OP_C_ZEXT_H = 657, + LINX_OP_C_ZEXT_W = 658, + LINX_OP_ASSERT = 659, + LINX_OP_BC_IALL = 660, + LINX_OP_BC_IVA = 661, + LINX_OP_BSE = 662, + LINX_OP_BSTOP = 663, + LINX_OP_BWE = 664, + LINX_OP_BWI = 665, + LINX_OP_BWT = 666, + LINX_OP_C_BSTART_STD = 667, + LINX_OP_DC_CISW = 668, + LINX_OP_DC_CIVA = 669, + LINX_OP_DC_CSW = 670, + LINX_OP_DC_CVA = 671, + LINX_OP_DC_IALL = 672, + LINX_OP_DC_ISW = 673, + LINX_OP_DC_IVA = 674, + LINX_OP_DC_ZVA = 675, + LINX_OP_FCVTA = 676, + LINX_OP_FCVTM = 677, + LINX_OP_FCVTN = 678, + LINX_OP_FCVTP = 679, + LINX_OP_FENCE_D = 680, + LINX_OP_FENCE_I = 681, + LINX_OP_FEQS = 682, + LINX_OP_FEXP = 683, + LINX_OP_FGES = 684, + LINX_OP_FLTS = 685, + LINX_OP_FMADD = 686, + LINX_OP_FMAX = 687, + LINX_OP_FMIN = 688, + LINX_OP_FMSUB = 689, + LINX_OP_FNE = 690, + LINX_OP_FNES = 691, + LINX_OP_FNMADD = 692, + LINX_OP_FNMSUB = 693, + LINX_OP_FRECIP = 694, + LINX_OP_FSQRT = 695, + LINX_OP_IC_IALL = 696, + LINX_OP_IC_IVA = 697, + LINX_OP_J = 699, + LINX_OP_JR = 700, + LINX_OP_LR_B = 701, + LINX_OP_LR_D = 702, + LINX_OP_LR_H = 703, + LINX_OP_LR_W = 704, + LINX_OP_LSRGET = 705, + LINX_OP_L_BSTART_FP = 706, + LINX_OP_L_BSTART_STD = 707, + LINX_OP_L_BSTART_SYS = 708, + LINX_OP_MADD = 709, + LINX_OP_MADDW = 710, + LINX_OP_MAX = 711, + LINX_OP_MAXU = 712, + LINX_OP_MIN = 713, + LINX_OP_MINU = 714, + LINX_OP_PRF = 715, + LINX_OP_PRFI_U = 716, + LINX_OP_REV = 717, + LINX_OP_SCVTF = 718, + LINX_OP_SC_B = 719, + LINX_OP_SC_D = 720, + LINX_OP_SC_H = 721, + LINX_OP_SC_W = 722, + LINX_OP_START_CALL_32 = 723, + LINX_OP_START_CALL_48 = 724, + LINX_OP_TLB_IA = 725, + LINX_OP_TLB_IALL = 726, + LINX_OP_TLB_IAV = 727, + LINX_OP_TLB_IV = 728, + LINX_OP_UCVTF = 729, + LINX_OP_XB = 730, + LINX_OP_BSTART_VPAR = 731, + LINX_OP_BSTART_VSEQ = 732, + LINX_OP_C_BSTART_VPAR = 733, + LINX_OP_C_BSTART_VSEQ = 734, + LINX_OP_V_QPOP = 735, + LINX_OP_V_QPUSH = 736, } LinxOpcodeId; #endif /* LINX_OPCODE_IDS_GEN_H */ diff --git a/target/linx/linx_opcode_meta_gen.h b/target/linx/linx_opcode_meta_gen.h index ca00d21cb395..1a1610c0a820 100644 --- a/target/linx/linx_opcode_meta_gen.h +++ b/target/linx/linx_opcode_meta_gen.h @@ -41,7 +41,7 @@ enum { static const LinxOpcodeMeta linx_opcode_meta_table[] = { {.op_id=0, .major_cat=LINX_CAT_MISC, .insn_len=0, .mask=UINT64_C(0x0), .match=UINT64_C(0x0), .mnemonic="internal_invalid", .minor_cat="internal", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="internal"}, - {.op_id=1, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x60fffff), .match=UINT64_C(0x31181), .mnemonic="bstart_cube", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=1, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x831181), .mnemonic="bstart_acccvt", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, {.op_id=1, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x1031181), .mnemonic="bstart_tgemv", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, {.op_id=1, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x1231181), .mnemonic="bstart_tgemv_acc", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, {.op_id=1, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x1131181), .mnemonic="bstart_tgemv_bias", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, @@ -55,680 +55,865 @@ static const LinxOpcodeMeta linx_opcode_meta_table[] = { {.op_id=1, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x631181), .mnemonic="bstart_tmatmulmx_acc", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, {.op_id=1, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x531181), .mnemonic="bstart_tmatmulmx_bias", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, {.op_id=2, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7fff), .match=UINT64_C(0x1001), .mnemonic="bstart_fall", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM17", .block_kind="FALL", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=3, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x60fffff), .match=UINT64_C(0x39181), .mnemonic="bstart_fixp", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=4, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7fff), .match=UINT64_C(0x4101), .mnemonic="bstart_fp_call", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM17", .block_kind="CALL", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=5, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7fff), .match=UINT64_C(0x3101), .mnemonic="bstart_fp_cond", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM17", .block_kind="COND", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=6, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7fff), .match=UINT64_C(0x2101), .mnemonic="bstart_fp_direct", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM17", .block_kind="DIRECT", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=7, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7fff), .match=UINT64_C(0x1101), .mnemonic="bstart_fp_fall", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM17", .block_kind="FALL", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=8, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0xffffffff), .match=UINT64_C(0x6101), .mnemonic="bstart_fp_icall", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="CALL", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=9, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0xffffffff), .match=UINT64_C(0x5101), .mnemonic="bstart_fp_ind", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=10, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0xffffffff), .match=UINT64_C(0x7101), .mnemonic="bstart_fp_ret", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="RET", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=11, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0xffffffff), .match=UINT64_C(0x6001), .mnemonic="bstart_icall", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="CALL", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=12, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0xffffffff), .match=UINT64_C(0x5001), .mnemonic="bstart_ind", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=13, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0xfbffffff), .match=UINT64_C(0x1181), .mnemonic="bstart_mpar", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=14, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0xfbffffff), .match=UINT64_C(0x9181), .mnemonic="bstart_mseq", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=15, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0xffffffff), .match=UINT64_C(0x7001), .mnemonic="bstart_ret", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="RET", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=16, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7f), .match=UINT64_C(0x21), .mnemonic="bstart_split_cond", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM25", .block_kind="COND", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=17, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7f), .match=UINT64_C(0x11), .mnemonic="bstart_split_direct", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM25", .block_kind="DIRECT", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=18, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7fff), .match=UINT64_C(0x4001), .mnemonic="bstart_call", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM17", .block_kind="CALL", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=18, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff000f), .match=UINT64_C(0x4001000e), .mnemonic="hl_bstart_std_call", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_31_17", .block_kind="CALL", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=19, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7fff), .match=UINT64_C(0x3001), .mnemonic="bstart_cond", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM17", .block_kind="COND", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=19, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff000f), .match=UINT64_C(0x3001000e), .mnemonic="hl_bstart_std_cond", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_31_17", .block_kind="COND", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=20, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7fff), .match=UINT64_C(0x2001), .mnemonic="bstart_direct", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM17", .block_kind="DIRECT", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=20, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff000f), .match=UINT64_C(0x2001000e), .mnemonic="hl_bstart_std_direct", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_31_17", .block_kind="DIRECT", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7fff), .match=UINT64_C(0x1081), .mnemonic="bstart_sys", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM17", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=22, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x6007fff), .match=UINT64_C(0x2001181), .mnemonic="bstart_tepl", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=23, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x411181), .mnemonic="bstart_mgather", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=23, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x811181), .mnemonic="bstart_mgather_cas", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=23, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x611181), .mnemonic="bstart_mgather_mask", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=23, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x511181), .mnemonic="bstart_mscatter", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=23, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x711181), .mnemonic="bstart_mscatter_mask", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=23, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x11181), .mnemonic="bstart_tload", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=23, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x211181), .mnemonic="bstart_tmov", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=23, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x311181), .mnemonic="bstart_tprefetch", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=23, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x111181), .mnemonic="bstart_tstore", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=24, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0xfbffffff), .match=UINT64_C(0x21181), .mnemonic="bstart_vpar", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=25, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0xfbffffff), .match=UINT64_C(0x29181), .mnemonic="bstart_vseq", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=26, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xf), .match=UINT64_C(0x4), .mnemonic="c_bstart_cond", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM12", .block_kind="COND", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=27, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xf), .match=UINT64_C(0x2), .mnemonic="c_bstart_direct", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM12", .block_kind="DIRECT", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=28, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xc7ff), .match=UINT64_C(0x80), .mnemonic="c_bstart_fp", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=29, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xffff), .match=UINT64_C(0x8c0), .mnemonic="c_bstart_mpar", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=30, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xffff), .match=UINT64_C(0x48c0), .mnemonic="c_bstart_mseq", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=31, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xffff), .match=UINT64_C(0x2000), .mnemonic="c_bstart_std_call", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="CALL", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=32, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xffff), .match=UINT64_C(0x1800), .mnemonic="c_bstart_std_cond", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="COND", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=33, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xffff), .match=UINT64_C(0x1000), .mnemonic="c_bstart_std_direct", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="DIRECT", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=34, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xffff), .match=UINT64_C(0x800), .mnemonic="c_bstart_std_fall", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="FALL", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=35, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xffff), .match=UINT64_C(0x3000), .mnemonic="c_bstart_std_icall", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="CALL", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=36, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xffff), .match=UINT64_C(0x2800), .mnemonic="c_bstart_std_ind", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=37, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xffff), .match=UINT64_C(0x3800), .mnemonic="c_bstart_std_ret", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="RET", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=38, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xffff), .match=UINT64_C(0x840), .mnemonic="c_bstart_sys", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=39, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xffff), .match=UINT64_C(0x88c0), .mnemonic="c_bstart_vpar", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=40, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xffff), .match=UINT64_C(0xc8c0), .mnemonic="c_bstart_vseq", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=41, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xffff), .match=UINT64_C(0x0), .mnemonic="c_bstop", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="STOP", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=42, .major_cat=LINX_CAT_BLOCK_ARGS_DESC, .insn_len=32, .mask=UINT64_C(0xfffff07f), .match=UINT64_C(0x3043), .mnemonic="b_arg", .minor_cat="block_desc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=43, .major_cat=LINX_CAT_BLOCK_ARGS_DESC, .insn_len=32, .mask=UINT64_C(0xffffffff), .match=UINT64_C(0x1800a4a3), .mnemonic="b_arg_dn2nz", .minor_cat="block_desc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=44, .major_cat=LINX_CAT_BLOCK_ARGS_DESC, .insn_len=32, .mask=UINT64_C(0xffffffff), .match=UINT64_C(0x18022423), .mnemonic="b_arg_dn2zn", .minor_cat="block_desc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=45, .major_cat=LINX_CAT_BLOCK_ARGS_DESC, .insn_len=32, .mask=UINT64_C(0xffffffff), .match=UINT64_C(0x180221a3), .mnemonic="b_arg_nd2zn", .minor_cat="block_desc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=46, .major_cat=LINX_CAT_BLOCK_ARGS_DESC, .insn_len=32, .mask=UINT64_C(0xffffffff), .match=UINT64_C(0xfa023), .mnemonic="b_arg_norm", .minor_cat="block_desc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=47, .major_cat=LINX_CAT_BLOCK_ARGS_DESC, .insn_len=32, .mask=UINT64_C(0xffffffff), .match=UINT64_C(0x20fae23), .mnemonic="b_arg_nz2dn", .minor_cat="block_desc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=48, .major_cat=LINX_CAT_BLOCK_ARGS_DESC, .insn_len=32, .mask=UINT64_C(0x3ffffff), .match=UINT64_C(0x23), .mnemonic="b_catr", .minor_cat="block_desc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=49, .major_cat=LINX_CAT_BLOCK_ARGS_DESC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1023), .mnemonic="b_datr", .minor_cat="block_desc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=50, .major_cat=LINX_CAT_BLOCK_ARGS_DESC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x43), .mnemonic="b_dim_lb0", .minor_cat="block_desc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM17_20_12_7_5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=51, .major_cat=LINX_CAT_BLOCK_ARGS_DESC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1043), .mnemonic="b_dim_lb1", .minor_cat="block_desc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM17_20_12_7_5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=52, .major_cat=LINX_CAT_BLOCK_ARGS_DESC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x2043), .mnemonic="b_dim_lb2", .minor_cat="block_desc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM17_20_12_7_5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=53, .major_cat=LINX_CAT_BLOCK_ARGS_DESC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x27), .mnemonic="b_eq", .minor_cat="block_desc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM12_7_S5_25_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=54, .major_cat=LINX_CAT_BLOCK_ARGS_DESC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x3027), .mnemonic="b_ge", .minor_cat="block_desc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM12_7_S5_25_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=55, .major_cat=LINX_CAT_BLOCK_ARGS_DESC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x5027), .mnemonic="b_geu", .minor_cat="block_desc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM12_7_S5_25_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=56, .major_cat=LINX_CAT_BLOCK_ARGS_DESC, .insn_len=32, .mask=UINT64_C(0x87fff), .match=UINT64_C(0x33), .mnemonic="b_hint", .minor_cat="block_desc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=57, .major_cat=LINX_CAT_BLOCK_ARGS_DESC, .insn_len=32, .mask=UINT64_C(0xffff7fff), .match=UINT64_C(0x1033), .mnemonic="b_hint_trace", .minor_cat="block_desc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=58, .major_cat=LINX_CAT_BLOCK_ARGS_DESC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x2027), .mnemonic="b_lt", .minor_cat="block_desc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM12_7_S5_25_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=59, .major_cat=LINX_CAT_BLOCK_ARGS_DESC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x4027), .mnemonic="b_ltu", .minor_cat="block_desc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM12_7_S5_25_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=60, .major_cat=LINX_CAT_BLOCK_ARGS_DESC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1027), .mnemonic="b_ne", .minor_cat="block_desc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM12_7_S5_25_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=61, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x5), .mnemonic="add", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=62, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x15), .mnemonic="addi", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=63, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x35), .mnemonic="addiw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=64, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x25), .mnemonic="addw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=65, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x2005), .mnemonic="and", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=66, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x2015), .mnemonic="andi", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=67, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x2035), .mnemonic="andiw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=68, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x2025), .mnemonic="andw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=69, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x6067), .mnemonic="bcnt", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="IMML", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=70, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x2067), .mnemonic="bic", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="IMML", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=71, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x3067), .mnemonic="bis", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="IMML", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=72, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff000f), .match=UINT64_C(0x1001000e), .mnemonic="hl_bstart_std_fall", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_31_17", .block_kind="FALL", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=73, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x67), .mnemonic="bxs", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="IMML", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=74, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1067), .mnemonic="bxu", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="IMML", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=75, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1b), .mnemonic="casb", .minor_cat="atomic", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=76, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x301b), .mnemonic="casd", .minor_cat="atomic", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=77, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x101b), .mnemonic="cash", .minor_cat="atomic", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=78, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x201b), .mnemonic="casw", .minor_cat="atomic", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=79, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x5067), .mnemonic="clz", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="IMML", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=80, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x77), .mnemonic="csel", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=81, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x4067), .mnemonic="ctz", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="IMML", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=82, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x57), .mnemonic="div", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=83, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x1057), .mnemonic="divu", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=84, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x3057), .mnemonic="divuw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=85, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x2057), .mnemonic="divw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=86, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe007fff), .match=UINT64_C(0x700b), .mnemonic="dma", .minor_cat="atomic", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=87, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x15000e), .mnemonic="hl_addi", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=88, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x35000e), .mnemonic="hl_addiw", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=89, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x2015000e), .mnemonic="hl_andi", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=90, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x2035000e), .mnemonic="hl_andiw", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=91, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xfffffe00707f000f), .match=UINT64_C(0x204d000e), .mnemonic="hl_bfi", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="IMMR", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=92, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff000f), .match=UINT64_C(0x4101000e), .mnemonic="hl_bstart_fp_call", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_31_17", .block_kind="CALL", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=93, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff000f), .match=UINT64_C(0x3101000e), .mnemonic="hl_bstart_fp_cond", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_31_17", .block_kind="COND", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=94, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff000f), .match=UINT64_C(0x2101000e), .mnemonic="hl_bstart_fp_direct", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_31_17", .block_kind="DIRECT", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=95, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff000f), .match=UINT64_C(0x1101000e), .mnemonic="hl_bstart_fp_fall", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_31_17", .block_kind="FALL", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=96, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff000f), .match=UINT64_C(0x1081000e), .mnemonic="hl_bstart_sys", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_31_17", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=97, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xfffff000707ff83f), .match=UINT64_C(0x600b000e), .mnemonic="hl_casb", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=98, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xfffff000707ff83f), .match=UINT64_C(0x3000600b000e), .mnemonic="hl_casd", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=99, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xfffff000707ff83f), .match=UINT64_C(0x1000600b000e), .mnemonic="hl_cash", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=100, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xfffff000707ff83f), .match=UINT64_C(0x2000600b000e), .mnemonic="hl_casw", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=101, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x105d000e), .mnemonic="hl_ccat", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=102, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x205d000e), .mnemonic="hl_ccatw", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=103, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x2055000e), .mnemonic="hl_cmp_andi", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=104, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x55000e), .mnemonic="hl_cmp_eqi", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=105, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x5055000e), .mnemonic="hl_cmp_gei", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=106, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x7055000e), .mnemonic="hl_cmp_geui", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=107, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x4055000e), .mnemonic="hl_cmp_lti", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=108, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x6055000e), .mnemonic="hl_cmp_ltui", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=109, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x1055000e), .mnemonic="hl_cmp_nei", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=110, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x3055000e), .mnemonic="hl_cmp_ori", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=111, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xfffffe00707f07ff), .match=UINT64_C(0x57000e), .mnemonic="hl_div", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=112, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xfffffe00707f07ff), .match=UINT64_C(0x1057000e), .mnemonic="hl_divu", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=113, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xfffffe00707f07ff), .match=UINT64_C(0x3057000e), .mnemonic="hl_divuw", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=114, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xfffffe00707f07ff), .match=UINT64_C(0x2057000e), .mnemonic="hl_divw", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=115, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x19000e), .mnemonic="hl_lbi", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM22_6_S10_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=116, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x19001e), .mnemonic="hl_lbip", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=117, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x19003e), .mnemonic="hl_lbi_po", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=118, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x19002e), .mnemonic="hl_lbi_pr", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=119, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x9001e), .mnemonic="hl_lbp", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=120, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x4019000e), .mnemonic="hl_lbui", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM22_6_S10_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=121, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x4019001e), .mnemonic="hl_lbuip", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=122, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x4019003e), .mnemonic="hl_lbui_po", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=123, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x4019002e), .mnemonic="hl_lbui_pr", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=124, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x4009001e), .mnemonic="hl_lbup", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=125, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x4009003e), .mnemonic="hl_lbu_po", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=126, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x4009002e), .mnemonic="hl_lbu_pr", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=127, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x9003e), .mnemonic="hl_lb_po", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=128, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x9002e), .mnemonic="hl_lb_pr", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=129, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x3019000e), .mnemonic="hl_ldi", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM22_6_S10_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=130, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x3019001e), .mnemonic="hl_ldip", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=131, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x3029001e), .mnemonic="hl_ldip_u", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=132, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x3019003e), .mnemonic="hl_ldi_po", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=133, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x3019002e), .mnemonic="hl_ldi_pr", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=134, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x3029000e), .mnemonic="hl_ldi_u", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM22_6_S10_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=135, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x3029003e), .mnemonic="hl_ldi_upo", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=136, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x3029002e), .mnemonic="hl_ldi_upr", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=137, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x3009001e), .mnemonic="hl_ldp", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=138, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x3009003e), .mnemonic="hl_ld_po", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=139, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x3009002e), .mnemonic="hl_ld_pr", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=140, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x1019000e), .mnemonic="hl_lhi", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM22_6_S10_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=141, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x1019001e), .mnemonic="hl_lhip", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=142, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x1029001e), .mnemonic="hl_lhip_u", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=143, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x1019003e), .mnemonic="hl_lhi_po", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=144, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x1019002e), .mnemonic="hl_lhi_pr", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=145, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x1029000e), .mnemonic="hl_lhi_u", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM22_6_S10_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=146, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x1029003e), .mnemonic="hl_lhi_upo", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=147, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x1029002e), .mnemonic="hl_lhi_upr", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=148, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x1009001e), .mnemonic="hl_lhp", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=149, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x5019000e), .mnemonic="hl_lhui", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM22_6_S10_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=150, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x5019001e), .mnemonic="hl_lhuip", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=151, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x5029001e), .mnemonic="hl_lhuip_u", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=152, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x5019003e), .mnemonic="hl_lhui_po", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=153, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x5019002e), .mnemonic="hl_lhui_pr", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=154, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x5029000e), .mnemonic="hl_lhui_u", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM22_6_S10_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=155, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x5029003e), .mnemonic="hl_lhui_upo", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=156, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x5029002e), .mnemonic="hl_lhui_upr", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=157, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x5009001e), .mnemonic="hl_lhup", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=158, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x5009003e), .mnemonic="hl_lhu_po", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=159, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x5009002e), .mnemonic="hl_lhu_pr", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=160, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x1009003e), .mnemonic="hl_lh_po", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=161, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x1009002e), .mnemonic="hl_lh_pr", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=162, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000007f000f), .match=UINT64_C(0xd000e), .mnemonic="hl_lis", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM32", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=163, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000007f000f), .match=UINT64_C(0x1d000e), .mnemonic="hl_liu", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="IMM32", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=164, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000007f000f), .match=UINT64_C(0x17000e), .mnemonic="hl_lui", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="IMM32", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=165, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x2019000e), .mnemonic="hl_lwi", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM22_6_S10_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=166, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x2019001e), .mnemonic="hl_lwip", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=167, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x2029001e), .mnemonic="hl_lwip_u", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=168, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x2019003e), .mnemonic="hl_lwi_po", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=169, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x2019002e), .mnemonic="hl_lwi_pr", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=170, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x2029000e), .mnemonic="hl_lwi_u", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM22_6_S10_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=171, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x2029003e), .mnemonic="hl_lwi_upo", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=172, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x2029002e), .mnemonic="hl_lwi_upr", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=173, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x2009001e), .mnemonic="hl_lwp", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=174, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x6019000e), .mnemonic="hl_lwui", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM22_6_S10_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=175, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x6019001e), .mnemonic="hl_lwuip", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=176, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x6029001e), .mnemonic="hl_lwuip_u", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=177, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x6019003e), .mnemonic="hl_lwui_po", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=178, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x6019002e), .mnemonic="hl_lwui_pr", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=179, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x6029000e), .mnemonic="hl_lwui_u", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM22_6_S10_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=180, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x6029003e), .mnemonic="hl_lwui_upo", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=181, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x6029002e), .mnemonic="hl_lwui_upr", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=182, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x6009001e), .mnemonic="hl_lwup", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=183, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x6009003e), .mnemonic="hl_lwu_po", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=184, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x6009002e), .mnemonic="hl_lwu_pr", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=185, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x2009003e), .mnemonic="hl_lw_po", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=186, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x2009002e), .mnemonic="hl_lw_pr", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=187, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0600707f07ff), .match=UINT64_C(0x6047000e), .mnemonic="hl_madd", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=188, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0600707f07ff), .match=UINT64_C(0x7047000e), .mnemonic="hl_maddw", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=189, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x4d000e), .mnemonic="hl_miadd", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="UIMM19", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=190, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x104d000e), .mnemonic="hl_misub", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="UIMM19", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=191, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xfffffe00707f07ff), .match=UINT64_C(0x47000e), .mnemonic="hl_mul", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=192, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xfffffe00707f07ff), .match=UINT64_C(0x1047000e), .mnemonic="hl_mulu", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=193, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x3015000e), .mnemonic="hl_ori", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=194, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x3035000e), .mnemonic="hl_oriw", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=195, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff07ff), .match=UINT64_C(0x7009000e), .mnemonic="hl_prf", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=196, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff003f), .match=UINT64_C(0x7029000e), .mnemonic="hl_prfi_u", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=197, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x7029001e), .mnemonic="hl_prfi_ua", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=198, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x7009001e), .mnemonic="hl_prf_a", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=199, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffffe000707fffff), .match=UINT64_C(0x7d000e), .mnemonic="hl_qmt", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=200, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xfffff800707f07ff), .match=UINT64_C(0x207d000e), .mnemonic="hl_qpop", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=201, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xfffff000707fffff), .match=UINT64_C(0x107d000e), .mnemonic="hl_qpush", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=202, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xfffffe00707f07ff), .match=UINT64_C(0x4057000e), .mnemonic="hl_rem", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=203, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xfffffe00707f07ff), .match=UINT64_C(0x5057000e), .mnemonic="hl_remu", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=204, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xfffffe00707f07ff), .match=UINT64_C(0x7057000e), .mnemonic="hl_remuw", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=205, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xfffffe00707f07ff), .match=UINT64_C(0x6057000e), .mnemonic="hl_remw", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=206, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x59000e), .mnemonic="hl_sbi", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="REG", .imm_kind="SIMM22_6_S10_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=207, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x59001e), .mnemonic="hl_sbip", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="REG", .imm_kind="SIMM17_11_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=208, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x59003e), .mnemonic="hl_sbi_po", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="REG", .imm_kind="SIMM17_6_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=209, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x59002e), .mnemonic="hl_sbi_pr", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="REG", .imm_kind="SIMM17_6_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=210, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007ffff83f), .match=UINT64_C(0x49001e), .mnemonic="hl_sbp", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=211, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff07ff), .match=UINT64_C(0x49003e), .mnemonic="hl_sb_po", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=212, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff07ff), .match=UINT64_C(0x49002e), .mnemonic="hl_sb_pr", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=213, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x3059000e), .mnemonic="hl_sdi", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="REG", .imm_kind="SIMM22_6_S10_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=214, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x3059001e), .mnemonic="hl_sdip", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="REG", .imm_kind="SIMM17_11_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=215, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x7059001e), .mnemonic="hl_sdip_u", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="REG", .imm_kind="SIMM17_11_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=216, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x3059003e), .mnemonic="hl_sdi_po", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="REG", .imm_kind="SIMM17_6_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=217, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x3059002e), .mnemonic="hl_sdi_pr", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="REG", .imm_kind="SIMM17_6_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=218, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x7059000e), .mnemonic="hl_sdi_u", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="REG", .imm_kind="SIMM22_6_S10_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=219, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x7059003e), .mnemonic="hl_sdi_upo", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="REG", .imm_kind="SIMM17_6_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=220, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x7059002e), .mnemonic="hl_sdi_upr", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="REG", .imm_kind="SIMM17_6_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=221, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007ffff83f), .match=UINT64_C(0x3049001e), .mnemonic="hl_sdp", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=222, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007ffff83f), .match=UINT64_C(0x7049001e), .mnemonic="hl_sdp_u", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=223, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff07ff), .match=UINT64_C(0x3049003e), .mnemonic="hl_sd_po", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=224, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff07ff), .match=UINT64_C(0x3049002e), .mnemonic="hl_sd_pr", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=225, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff07ff), .match=UINT64_C(0x7049003e), .mnemonic="hl_sd_upo", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=226, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff07ff), .match=UINT64_C(0x7049002e), .mnemonic="hl_sd_upr", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=227, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x2075000e), .mnemonic="hl_setc_andi", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=228, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x75000e), .mnemonic="hl_setc_eqi", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=229, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x5075000e), .mnemonic="hl_setc_gei", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=230, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x7075000e), .mnemonic="hl_setc_geui", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=231, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x4075000e), .mnemonic="hl_setc_lti", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=232, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x6075000e), .mnemonic="hl_setc_ltui", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=233, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x1075000e), .mnemonic="hl_setc_nei", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=234, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x3075000e), .mnemonic="hl_setc_ori", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=235, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00000fff000f), .match=UINT64_C(0x507000e), .mnemonic="hl_setret", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="IMM32", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=236, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x1059000e), .mnemonic="hl_shi", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="REG", .imm_kind="SIMM22_6_S10_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=237, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x1059001e), .mnemonic="hl_ship", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="REG", .imm_kind="SIMM17_11_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=238, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x5059001e), .mnemonic="hl_ship_u", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="REG", .imm_kind="SIMM17_11_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=239, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x1059003e), .mnemonic="hl_shi_po", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="REG", .imm_kind="SIMM17_6_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=240, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x1059002e), .mnemonic="hl_shi_pr", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="REG", .imm_kind="SIMM17_6_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=241, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x5059000e), .mnemonic="hl_shi_u", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="REG", .imm_kind="SIMM22_6_S10_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=242, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x5059003e), .mnemonic="hl_shi_upo", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="REG", .imm_kind="SIMM17_6_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=243, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x5059002e), .mnemonic="hl_shi_upr", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="REG", .imm_kind="SIMM17_6_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=244, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007ffff83f), .match=UINT64_C(0x1049001e), .mnemonic="hl_shp", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=245, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007ffff83f), .match=UINT64_C(0x5049001e), .mnemonic="hl_shp_u", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=246, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff07ff), .match=UINT64_C(0x1049003e), .mnemonic="hl_sh_po", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=247, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff07ff), .match=UINT64_C(0x1049002e), .mnemonic="hl_sh_pr", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=248, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff07ff), .match=UINT64_C(0x5049003e), .mnemonic="hl_sh_upo", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=249, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff07ff), .match=UINT64_C(0x5049002e), .mnemonic="hl_sh_upr", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=250, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x1015000e), .mnemonic="hl_subi", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=251, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x1035000e), .mnemonic="hl_subiw", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=252, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x2059000e), .mnemonic="hl_swi", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="REG", .imm_kind="SIMM22_6_S10_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=253, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x2059001e), .mnemonic="hl_swip", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="REG", .imm_kind="SIMM17_11_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=254, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x6059001e), .mnemonic="hl_swip_u", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="REG", .imm_kind="SIMM17_11_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=255, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x2059003e), .mnemonic="hl_swi_po", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="REG", .imm_kind="SIMM17_6_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=256, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x2059002e), .mnemonic="hl_swi_pr", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="REG", .imm_kind="SIMM17_6_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=257, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x6059000e), .mnemonic="hl_swi_u", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="REG", .imm_kind="SIMM22_6_S10_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=258, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x6059003e), .mnemonic="hl_swi_upo", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="REG", .imm_kind="SIMM17_6_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=259, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x6059002e), .mnemonic="hl_swi_upr", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="REG", .imm_kind="SIMM17_6_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=260, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007ffff83f), .match=UINT64_C(0x2049001e), .mnemonic="hl_swp", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=261, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007ffff83f), .match=UINT64_C(0x6049001e), .mnemonic="hl_swp_u", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=262, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff07ff), .match=UINT64_C(0x2049003e), .mnemonic="hl_sw_po", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=263, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff07ff), .match=UINT64_C(0x2049002e), .mnemonic="hl_sw_pr", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=264, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff07ff), .match=UINT64_C(0x6049003e), .mnemonic="hl_sw_upo", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=265, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff07ff), .match=UINT64_C(0x6049002e), .mnemonic="hl_sw_upr", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=266, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x4015000e), .mnemonic="hl_xori", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=267, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x4035000e), .mnemonic="hl_xoriw", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=268, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x7f), .match=UINT64_C(0x17), .mnemonic="lui", .minor_cat="alu", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="IMM20", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=269, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x47), .mnemonic="mul", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=270, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x1047), .mnemonic="mulu", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=271, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x3047), .mnemonic="muluw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=272, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x2047), .mnemonic="mulw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=273, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x3005), .mnemonic="or", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=274, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x3015), .mnemonic="ori", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=275, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x3035), .mnemonic="oriw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=276, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x3025), .mnemonic="orw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=277, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x4057), .mnemonic="rem", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=278, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x5057), .mnemonic="remu", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=279, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x7057), .mnemonic="remuw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=280, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x6057), .mnemonic="remw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=281, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x7005), .mnemonic="sll", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=282, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfc00707f), .match=UINT64_C(0x7015), .mnemonic="slli", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=283, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x7035), .mnemonic="slliw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=284, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x7025), .mnemonic="sllw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=285, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x6005), .mnemonic="sra", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=286, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfc00707f), .match=UINT64_C(0x6015), .mnemonic="srai", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=287, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x6035), .mnemonic="sraiw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=288, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x6025), .mnemonic="sraw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=289, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x5005), .mnemonic="srl", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=290, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfc00707f), .match=UINT64_C(0x5015), .mnemonic="srli", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=291, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x5035), .mnemonic="srliw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=292, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x5025), .mnemonic="srlw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=293, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1005), .mnemonic="sub", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=294, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1015), .mnemonic="subi", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=295, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1035), .mnemonic="subiw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=296, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1025), .mnemonic="subw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=297, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x4005), .mnemonic="xor", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=298, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x4015), .mnemonic="xori", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=299, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x4035), .mnemonic="xoriw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=300, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x4025), .mnemonic="xorw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=301, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x7f), .match=UINT64_C(0x7), .mnemonic="addtpc", .minor_cat="setret_addtpc", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="IMM20", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=302, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x2037), .mnemonic="b_nz", .minor_cat="branch_pred", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM22", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=303, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1037), .mnemonic="b_z", .minor_cat="branch_pred", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM22", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=304, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x2045), .mnemonic="cmp_and", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=305, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x2055), .mnemonic="cmp_andi", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=306, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x45), .mnemonic="cmp_eq", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=307, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x55), .mnemonic="cmp_eqi", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=308, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x5045), .mnemonic="cmp_ge", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=309, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x5055), .mnemonic="cmp_gei", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=310, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x7045), .mnemonic="cmp_geu", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=311, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x7055), .mnemonic="cmp_geui", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=312, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x4045), .mnemonic="cmp_lt", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=313, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x4055), .mnemonic="cmp_lti", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=314, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x6045), .mnemonic="cmp_ltu", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=315, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x6055), .mnemonic="cmp_ltui", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=316, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x1045), .mnemonic="cmp_ne", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=317, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1055), .mnemonic="cmp_nei", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=318, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x3045), .mnemonic="cmp_or", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=319, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x3055), .mnemonic="cmp_ori", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=320, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=16, .mask=UINT64_C(0xf83f), .match=UINT64_C(0x2c), .mnemonic="c_cmp_eqi", .minor_cat="c_pred", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM5_6_S5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=321, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=16, .mask=UINT64_C(0xf83f), .match=UINT64_C(0x82c), .mnemonic="c_cmp_nei", .minor_cat="c_pred", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM5_6_S5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=322, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=16, .mask=UINT64_C(0x3f), .match=UINT64_C(0x26), .mnemonic="c_setc_eq", .minor_cat="c_pred", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=323, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=16, .mask=UINT64_C(0x3f), .match=UINT64_C(0x36), .mnemonic="c_setc_ne", .minor_cat="c_pred", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=324, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=16, .mask=UINT64_C(0xf83f), .match=UINT64_C(0x1c), .mnemonic="c_setc_tgt", .minor_cat="c_pred", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=325, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=64, .mask=UINT64_C(0xffff0000007f000f), .match=UINT64_C(0x7000e), .mnemonic="hl_addtpc", .minor_cat="setret_addtpc", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="IMM32", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=326, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0xf8007fff), .match=UINT64_C(0x2065), .mnemonic="setc_and", .minor_cat="setc_cmp", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=327, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x2075), .mnemonic="setc_andi", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=328, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0xf8007fff), .match=UINT64_C(0x65), .mnemonic="setc_eq", .minor_cat="setc_cmp", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=329, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x75), .mnemonic="setc_eqi", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=330, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0xf8007fff), .match=UINT64_C(0x5065), .mnemonic="setc_ge", .minor_cat="setc_cmp", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=331, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x5075), .mnemonic="setc_gei", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=332, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0xf8007fff), .match=UINT64_C(0x7065), .mnemonic="setc_geu", .minor_cat="setc_cmp", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=333, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x7075), .mnemonic="setc_geui", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=334, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0xf8007fff), .match=UINT64_C(0x4065), .mnemonic="setc_lt", .minor_cat="setc_cmp", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=335, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x4075), .mnemonic="setc_lti", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=336, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0xf8007fff), .match=UINT64_C(0x6065), .mnemonic="setc_ltu", .minor_cat="setc_cmp", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=337, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x6075), .mnemonic="setc_ltui", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=338, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0xf8007fff), .match=UINT64_C(0x1065), .mnemonic="setc_ne", .minor_cat="setc_cmp", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=339, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1075), .mnemonic="setc_nei", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=340, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0xf8007fff), .match=UINT64_C(0x3065), .mnemonic="setc_or", .minor_cat="setc_cmp", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=341, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x3075), .mnemonic="setc_ori", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=342, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0xfff07fff), .match=UINT64_C(0x403b), .mnemonic="setc_tgt", .minor_cat="branch_pred", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=343, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0xfff), .match=UINT64_C(0x507), .mnemonic="setret", .minor_cat="setret_addtpc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="IMM20", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=344, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x9), .mnemonic="lb", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=345, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x19), .mnemonic="lbi", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=346, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x4009), .mnemonic="lbu", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=347, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x4019), .mnemonic="lbui", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=348, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x4039), .mnemonic="lbu_pcr", .minor_cat="load", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM17", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=349, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x39), .mnemonic="lb_pcr", .minor_cat="load", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM17", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=350, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x3009), .mnemonic="ld", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=351, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x3019), .mnemonic="ldi", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=352, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x3029), .mnemonic="ldi_u", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=353, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x400b), .mnemonic="ld_add", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=354, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x1000400b), .mnemonic="ld_and", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=355, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x2000400b), .mnemonic="ld_or", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=356, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x3039), .mnemonic="ld_pcr", .minor_cat="load", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM17", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=357, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x4000400b), .mnemonic="ld_smax", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=358, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x5000400b), .mnemonic="ld_smin", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=359, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x6000400b), .mnemonic="ld_umax", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=360, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x7000400b), .mnemonic="ld_umin", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=361, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x3000400b), .mnemonic="ld_xor", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=362, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1009), .mnemonic="lh", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=363, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1019), .mnemonic="lhi", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=364, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1029), .mnemonic="lhi_u", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=365, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x5009), .mnemonic="lhu", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=366, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x5019), .mnemonic="lhui", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=367, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x5029), .mnemonic="lhui_u", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=368, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x5039), .mnemonic="lhu_pcr", .minor_cat="load", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM17", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=369, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1039), .mnemonic="lh_pcr", .minor_cat="load", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM17", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=370, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x2009), .mnemonic="lw", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=371, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x2019), .mnemonic="lwi", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=372, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x2029), .mnemonic="lwi_u", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=373, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x6009), .mnemonic="lwu", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=374, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x6019), .mnemonic="lwui", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=375, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x6029), .mnemonic="lwui_u", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=376, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x6039), .mnemonic="lwu_pcr", .minor_cat="load", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM17", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=377, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x200b), .mnemonic="lw_add", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=378, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x1000200b), .mnemonic="lw_and", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=379, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x2000200b), .mnemonic="lw_or", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=380, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x2039), .mnemonic="lw_pcr", .minor_cat="load", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM17", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=381, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x4000200b), .mnemonic="lw_smax", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=382, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x5000200b), .mnemonic="lw_smin", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=383, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x6000200b), .mnemonic="lw_umax", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=384, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x7000200b), .mnemonic="lw_umin", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=385, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x3000200b), .mnemonic="lw_xor", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=386, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0x7fff), .match=UINT64_C(0x49), .mnemonic="sb", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=387, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x59), .mnemonic="sbi", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM12_7_S5_25_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=388, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x69), .mnemonic="sb_pcr", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM17_20_12_7_5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=389, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0x7fff), .match=UINT64_C(0x3049), .mnemonic="sd", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=390, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x3059), .mnemonic="sdi", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM12_7_S5_25_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=391, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x7059), .mnemonic="sdi_u", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM12_7_S5_25_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=392, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf4007fff), .match=UINT64_C(0x500b), .mnemonic="sd_add", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=393, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf4007fff), .match=UINT64_C(0x1000500b), .mnemonic="sd_and", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=394, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf4007fff), .match=UINT64_C(0x2000500b), .mnemonic="sd_or", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=395, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x3069), .mnemonic="sd_pcr", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM17_20_12_7_5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=396, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf4007fff), .match=UINT64_C(0x4000500b), .mnemonic="sd_smax", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=397, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf4007fff), .match=UINT64_C(0x5000500b), .mnemonic="sd_smin", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=398, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0x7fff), .match=UINT64_C(0x7049), .mnemonic="sd_u", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=399, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf4007fff), .match=UINT64_C(0x6000500b), .mnemonic="sd_umax", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=400, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf4007fff), .match=UINT64_C(0x7000500b), .mnemonic="sd_umin", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=401, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf4007fff), .match=UINT64_C(0x3000500b), .mnemonic="sd_xor", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=402, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0x7fff), .match=UINT64_C(0x1049), .mnemonic="sh", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=403, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1059), .mnemonic="shi", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM12_7_S5_25_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=404, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x5059), .mnemonic="shi_u", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM12_7_S5_25_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=405, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1069), .mnemonic="sh_pcr", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM17_20_12_7_5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=406, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0x7fff), .match=UINT64_C(0x5049), .mnemonic="sh_u", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=407, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0x7fff), .match=UINT64_C(0x2049), .mnemonic="sw", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=408, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x600b), .mnemonic="swapb", .minor_cat="store", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=409, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x3000600b), .mnemonic="swapd", .minor_cat="store", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=410, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x1000600b), .mnemonic="swaph", .minor_cat="store", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=411, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x2000600b), .mnemonic="swapw", .minor_cat="store", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=412, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x2059), .mnemonic="swi", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM12_7_S5_25_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=413, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x6059), .mnemonic="swi_u", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM12_7_S5_25_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=414, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf4007fff), .match=UINT64_C(0x300b), .mnemonic="sw_add", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=415, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf4007fff), .match=UINT64_C(0x1000300b), .mnemonic="sw_and", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=416, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf4007fff), .match=UINT64_C(0x2000300b), .mnemonic="sw_or", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=417, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x2069), .mnemonic="sw_pcr", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM17_20_12_7_5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=418, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf4007fff), .match=UINT64_C(0x4000300b), .mnemonic="sw_smax", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=419, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf4007fff), .match=UINT64_C(0x5000300b), .mnemonic="sw_smin", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=420, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0x7fff), .match=UINT64_C(0x6049), .mnemonic="sw_u", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=421, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf4007fff), .match=UINT64_C(0x6000300b), .mnemonic="sw_umax", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=422, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf4007fff), .match=UINT64_C(0x7000300b), .mnemonic="sw_umin", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=423, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf4007fff), .match=UINT64_C(0x3000300b), .mnemonic="sw_xor", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=424, .major_cat=LINX_CAT_CMD_PIPE, .insn_len=32, .mask=UINT64_C(0x600707f), .match=UINT64_C(0x13), .mnemonic="b_ior", .minor_cat="block_cmd", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="BIOR", .flags="", .source_file="insn32.decode"}, - {.op_id=425, .major_cat=LINX_CAT_CMD_PIPE, .insn_len=32, .mask=UINT64_C(0x7f), .match=UINT64_C(0x3), .mnemonic="b_text", .minor_cat="block_cmd", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM25", .block_kind="NONE", .cmd_kind="BTEXT", .flags="", .source_file="insn32.decode"}, - {.op_id=426, .major_cat=LINX_CAT_CMD_PIPE, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x4013), .mnemonic="b_iot", .minor_cat="block_cmd", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="IOTIMM4", .block_kind="NONE", .cmd_kind="BIOT", .flags="", .source_file="insn32.decode"}, - {.op_id=426, .major_cat=LINX_CAT_CMD_PIPE, .insn_len=32, .mask=UINT64_C(0x803f707f), .match=UINT64_C(0x5013), .mnemonic="b_iot", .minor_cat="block_cmd", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="IOTIMM4", .block_kind="NONE", .cmd_kind="BIOT", .flags="", .source_file="insn32.decode"}, - {.op_id=426, .major_cat=LINX_CAT_CMD_PIPE, .insn_len=32, .mask=UINT64_C(0xc03fffff), .match=UINT64_C(0x6013), .mnemonic="b_iot", .minor_cat="block_cmd", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="IOTIMM4", .block_kind="NONE", .cmd_kind="BIOT", .flags="", .source_file="insn32.decode"}, - {.op_id=427, .major_cat=LINX_CAT_MACRO_TEMPLATE, .insn_len=32, .mask=UINT64_C(0x6007fff), .match=UINT64_C(0x3031), .mnemonic="ercov", .minor_cat="template", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=428, .major_cat=LINX_CAT_MACRO_TEMPLATE, .insn_len=32, .mask=UINT64_C(0x6007fff), .match=UINT64_C(0x2031), .mnemonic="esave", .minor_cat="template", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=429, .major_cat=LINX_CAT_MACRO_TEMPLATE, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x41), .mnemonic="fentry", .minor_cat="template", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="FENTRY_UIMM_HI", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=430, .major_cat=LINX_CAT_MACRO_TEMPLATE, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1041), .mnemonic="fexit", .minor_cat="template", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="FENTRY_UIMM_HI", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=431, .major_cat=LINX_CAT_MACRO_TEMPLATE, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x2041), .mnemonic="fret_ra", .minor_cat="template", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="FENTRY_UIMM_HI", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=432, .major_cat=LINX_CAT_MACRO_TEMPLATE, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x3041), .mnemonic="fret_stk", .minor_cat="template", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="FENTRY_UIMM_HI", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=433, .major_cat=LINX_CAT_MACRO_TEMPLATE, .insn_len=32, .mask=UINT64_C(0x6007fff), .match=UINT64_C(0x31), .mnemonic="mcopy", .minor_cat="template", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=434, .major_cat=LINX_CAT_MACRO_TEMPLATE, .insn_len=32, .mask=UINT64_C(0x6007fff), .match=UINT64_C(0x1031), .mnemonic="mset", .minor_cat="template", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=435, .major_cat=LINX_CAT_HL_PCR, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x4039000e), .mnemonic="hl_lbu_pcr", .minor_cat="hl_pcr", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_31_17", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=436, .major_cat=LINX_CAT_HL_PCR, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x39000e), .mnemonic="hl_lb_pcr", .minor_cat="hl_pcr", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_31_17", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=437, .major_cat=LINX_CAT_HL_PCR, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x3039000e), .mnemonic="hl_ld_pcr", .minor_cat="hl_pcr", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_31_17", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=438, .major_cat=LINX_CAT_HL_PCR, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x5039000e), .mnemonic="hl_lhu_pcr", .minor_cat="hl_pcr", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_31_17", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=439, .major_cat=LINX_CAT_HL_PCR, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x1039000e), .mnemonic="hl_lh_pcr", .minor_cat="hl_pcr", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_31_17", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=440, .major_cat=LINX_CAT_HL_PCR, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x6039000e), .mnemonic="hl_lwu_pcr", .minor_cat="hl_pcr", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_31_17", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=441, .major_cat=LINX_CAT_HL_PCR, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x2039000e), .mnemonic="hl_lw_pcr", .minor_cat="hl_pcr", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_31_17", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=442, .major_cat=LINX_CAT_HL_PCR, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x69000e), .mnemonic="hl_sb_pcr", .minor_cat="hl_pcr", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_23_5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=443, .major_cat=LINX_CAT_HL_PCR, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x3069000e), .mnemonic="hl_sd_pcr", .minor_cat="hl_pcr", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_23_5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=444, .major_cat=LINX_CAT_HL_PCR, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x1069000e), .mnemonic="hl_sh_pcr", .minor_cat="hl_pcr", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_23_5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=445, .major_cat=LINX_CAT_HL_PCR, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x2069000e), .mnemonic="hl_sw_pcr", .minor_cat="hl_pcr", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_23_5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=446, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffe00707f), .match=UINT64_C(0x50000007f), .mnemonic="v_add", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=447, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x150000007f), .mnemonic="v_addi", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=448, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffe00707f), .match=UINT64_C(0x20050000007f), .mnemonic="v_and", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=449, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x20150000007f), .mnemonic="v_andi", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=450, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x60670000007f), .mnemonic="v_bcnt", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="IMML", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=451, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x20670000007f), .mnemonic="v_bic", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="IMML", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=452, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x30670000007f), .mnemonic="v_bis", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="IMML", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=453, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x670000007f), .mnemonic="v_bxs", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="IMML", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=454, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x10670000007f), .mnemonic="v_bxu", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="IMML", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=455, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x50670000007f), .mnemonic="v_clz", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="IMML", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=456, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x20450000007f), .mnemonic="v_cmp_and", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=457, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x20550000007f), .mnemonic="v_cmp_andi", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=458, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x450000007f), .mnemonic="v_cmp_eq", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=459, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x550000007f), .mnemonic="v_cmp_eqi", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=460, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x50450000007f), .mnemonic="v_cmp_ge", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=461, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x50550000007f), .mnemonic="v_cmp_gei", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=462, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x70450000007f), .mnemonic="v_cmp_geu", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=463, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x70550000007f), .mnemonic="v_cmp_geui", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=464, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x40450000007f), .mnemonic="v_cmp_lt", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=465, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x40550000007f), .mnemonic="v_cmp_lti", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=466, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x60450000007f), .mnemonic="v_cmp_ltu", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=467, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x60550000007f), .mnemonic="v_cmp_ltui", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=468, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x10450000007f), .mnemonic="v_cmp_ne", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=469, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x10550000007f), .mnemonic="v_cmp_nei", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=470, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x30450000007f), .mnemonic="v_cmp_or", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=471, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x30550000007f), .mnemonic="v_cmp_ori", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=472, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0600707f), .match=UINT64_C(0x770000007f), .mnemonic="v_csel", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=473, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x40670000007f), .mnemonic="v_ctz", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="IMML", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=474, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x570000007f), .mnemonic="v_div", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=475, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfff0707ffff0707f), .match=UINT64_C(0x7b0000007f), .mnemonic="v_fabs", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=476, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x4b0000007f), .mnemonic="v_fadd", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=477, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfff0707ffff0707f), .match=UINT64_C(0x707b0000007f), .mnemonic="v_fclass", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=478, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707ffff0707f), .match=UINT64_C(0x6b0000007f), .mnemonic="v_fcvt", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=479, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707ffff0707f), .match=UINT64_C(0x106b0000007f), .mnemonic="v_fcvti", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=480, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x304b0000007f), .mnemonic="v_fdiv", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=481, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x5b0000007f), .mnemonic="v_feq", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=482, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x405b0000007f), .mnemonic="v_feqs", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=483, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfff0707ffff0707f), .match=UINT64_C(0x307b0000007f), .mnemonic="v_fexp", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=484, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x305b0000007f), .mnemonic="v_fge", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=485, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x705b0000007f), .mnemonic="v_fges", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=486, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x205b0000007f), .mnemonic="v_flt", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=487, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x605b0000007f), .mnemonic="v_flts", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=488, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707f0600707f), .match=UINT64_C(0x404b0000007f), .mnemonic="v_fmadd", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=489, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x205b0000107f), .mnemonic="v_fmax", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=490, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x305b0000107f), .mnemonic="v_fmin", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=491, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707f0600707f), .match=UINT64_C(0x504b0000007f), .mnemonic="v_fmsub", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=492, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x204b0000007f), .mnemonic="v_fmul", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=493, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x105b0000007f), .mnemonic="v_fne", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=494, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x505b0000007f), .mnemonic="v_fnes", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=495, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707f0600707f), .match=UINT64_C(0x604b0000007f), .mnemonic="v_fnmadd", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=496, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707f0600707f), .match=UINT64_C(0x704b0000007f), .mnemonic="v_fnmsub", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=497, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfff0707ffff0707f), .match=UINT64_C(0x207b0000007f), .mnemonic="v_frecip", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=498, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfff0707ffff0707f), .match=UINT64_C(0x107b0000007f), .mnemonic="v_fsqrt", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=499, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x104b0000007f), .mnemonic="v_fsub", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=500, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707ffff0707f), .match=UINT64_C(0x606b0000007f), .mnemonic="v_icvt", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=501, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707ffff0707f), .match=UINT64_C(0x706b0000007f), .mnemonic="v_icvtf", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=502, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707ffe00207f), .match=UINT64_C(0x90000007f), .mnemonic="v_lb", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=503, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707ffe00207f), .match=UINT64_C(0x40090000007f), .mnemonic="v_lbu", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=504, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707ffe00207f), .match=UINT64_C(0x40090000207f), .mnemonic="v_lbu_brg", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=505, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707ffe00207f), .match=UINT64_C(0x90000207f), .mnemonic="v_lb_brg", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=506, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707ffe00207f), .match=UINT64_C(0x10090000007f), .mnemonic="v_lh", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=507, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707ffe00207f), .match=UINT64_C(0x50090000007f), .mnemonic="v_lhu", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=508, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707ffe00207f), .match=UINT64_C(0x50090000207f), .mnemonic="v_lhu_brg", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=509, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707ffe00207f), .match=UINT64_C(0x10090000207f), .mnemonic="v_lh_brg", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=510, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707ffe00207f), .match=UINT64_C(0x20090000007f), .mnemonic="v_lw", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=511, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707ffe00207f), .match=UINT64_C(0x20090000207f), .mnemonic="v_lw_brg", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=512, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707f0600707f), .match=UINT64_C(0x60470000007f), .mnemonic="v_madd", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=513, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x5b0000107f), .mnemonic="v_max", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=514, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x105b0000107f), .mnemonic="v_min", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=515, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x470000007f), .mnemonic="v_mul", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=516, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffe00707f), .match=UINT64_C(0x30050000007f), .mnemonic="v_or", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=517, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x30150000007f), .mnemonic="v_ori", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=518, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0600707f), .match=UINT64_C(0x10770000007f), .mnemonic="v_psel", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=519, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfff0707ffff0707f), .match=UINT64_C(0xd0000007f), .mnemonic="v_rdadd", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=520, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfff0707ffff0707f), .match=UINT64_C(0x100d0000007f), .mnemonic="v_rdand", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=521, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfff0707ffff0707f), .match=UINT64_C(0x400d0000007f), .mnemonic="v_rdfadd", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=522, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfff0707ffff0707f), .match=UINT64_C(0x200d0000107f), .mnemonic="v_rdfmax", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=523, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfff0707ffff0707f), .match=UINT64_C(0x300d0000107f), .mnemonic="v_rdfmin", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=524, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfff0707ffff0707f), .match=UINT64_C(0xd0000107f), .mnemonic="v_rdmax", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=525, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfff0707ffff0707f), .match=UINT64_C(0x100d0000107f), .mnemonic="v_rdmin", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=526, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfff0707ffff0707f), .match=UINT64_C(0x200d0000007f), .mnemonic="v_rdor", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=527, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfff0707ffff0707f), .match=UINT64_C(0x300d0000007f), .mnemonic="v_rdxor", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=528, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x40570000007f), .mnemonic="v_rem", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=529, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x70670000007f), .mnemonic="v_rev", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="IMML", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=530, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x6007fff0600207f), .match=UINT64_C(0x490000007f), .mnemonic="v_sb", .minor_cat="vector", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=531, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x6007fff0600207f), .match=UINT64_C(0x490000207f), .mnemonic="v_sb_brg", .minor_cat="vector", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=532, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x6007fff0600207f), .match=UINT64_C(0x10490000007f), .mnemonic="v_sh", .minor_cat="vector", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=533, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x6007fff0600207f), .match=UINT64_C(0x10490000207f), .mnemonic="v_sh_brg", .minor_cat="vector", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=534, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x70050000007f), .mnemonic="v_sll", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=535, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfc00707ffff0707f), .match=UINT64_C(0x70150000007f), .mnemonic="v_slli", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=536, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x60050000007f), .mnemonic="v_sra", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=537, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfc00707ffff0707f), .match=UINT64_C(0x60150000007f), .mnemonic="v_srai", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=538, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x50050000007f), .mnemonic="v_srl", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=539, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfc00707ffff0707f), .match=UINT64_C(0x50150000007f), .mnemonic="v_srli", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=540, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffe00707f), .match=UINT64_C(0x10050000007f), .mnemonic="v_sub", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=541, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x10150000007f), .mnemonic="v_subi", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=542, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x6007fff0600207f), .match=UINT64_C(0x20490000007f), .mnemonic="v_sw", .minor_cat="vector", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=543, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x6007fff0600207f), .match=UINT64_C(0x20490000207f), .mnemonic="v_sw_brg", .minor_cat="vector", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=544, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffe00707f), .match=UINT64_C(0x40050000007f), .mnemonic="v_xor", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=545, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x40150000007f), .mnemonic="v_xori", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=546, .major_cat=LINX_CAT_FP_SYS, .insn_len=32, .mask=UINT64_C(0xff0fffff), .match=UINT64_C(0x302b), .mnemonic="acrc", .minor_cat="sys", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=547, .major_cat=LINX_CAT_FP_SYS, .insn_len=32, .mask=UINT64_C(0xff0fffff), .match=UINT64_C(0x100302b), .mnemonic="acre", .minor_cat="sys", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=548, .major_cat=LINX_CAT_FP_SYS, .insn_len=32, .mask=UINT64_C(0xf0ffffff), .match=UINT64_C(0x10102b), .mnemonic="ebreak", .minor_cat="sys", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="IMM4", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=549, .major_cat=LINX_CAT_FP_SYS, .insn_len=32, .mask=UINT64_C(0xf9f0707f), .match=UINT64_C(0x7b), .mnemonic="fabs", .minor_cat="fp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=550, .major_cat=LINX_CAT_FP_SYS, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x4b), .mnemonic="fadd", .minor_cat="fp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=551, .major_cat=LINX_CAT_FP_SYS, .insn_len=32, .mask=UINT64_C(0x1f0707f), .match=UINT64_C(0x6b), .mnemonic="fcvt", .minor_cat="fp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=552, .major_cat=LINX_CAT_FP_SYS, .insn_len=32, .mask=UINT64_C(0x1f0707f), .match=UINT64_C(0x506b), .mnemonic="fcvtz", .minor_cat="fp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=553, .major_cat=LINX_CAT_FP_SYS, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x304b), .mnemonic="fdiv", .minor_cat="fp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=554, .major_cat=LINX_CAT_FP_SYS, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x5b), .mnemonic="feq", .minor_cat="fp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=555, .major_cat=LINX_CAT_FP_SYS, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x305b), .mnemonic="fge", .minor_cat="fp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=556, .major_cat=LINX_CAT_FP_SYS, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x205b), .mnemonic="flt", .minor_cat="fp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=557, .major_cat=LINX_CAT_FP_SYS, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x204b), .mnemonic="fmul", .minor_cat="fp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=558, .major_cat=LINX_CAT_FP_SYS, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x104b), .mnemonic="fsub", .minor_cat="fp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=559, .major_cat=LINX_CAT_FP_SYS, .insn_len=64, .mask=UINT64_C(0xffff000ff07f000f), .match=UINT64_C(0x3b000e), .mnemonic="hl_ssrget", .minor_cat="sys", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=560, .major_cat=LINX_CAT_FP_SYS, .insn_len=64, .mask=UINT64_C(0xffff00007fff000f), .match=UINT64_C(0x103b000e), .mnemonic="hl_ssrset", .minor_cat="sys", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=561, .major_cat=LINX_CAT_FP_SYS, .insn_len=32, .mask=UINT64_C(0xff07f), .match=UINT64_C(0x3b), .mnemonic="ssrget", .minor_cat="sys", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=562, .major_cat=LINX_CAT_FP_SYS, .insn_len=32, .mask=UINT64_C(0x7fff), .match=UINT64_C(0x103b), .mnemonic="ssrset", .minor_cat="sys", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=563, .major_cat=LINX_CAT_FP_SYS, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x203b), .mnemonic="ssrswap", .minor_cat="sys", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=564, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0x3f), .match=UINT64_C(0x8), .mnemonic="c_add", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=565, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0x3f), .match=UINT64_C(0xc), .mnemonic="c_addi", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM5_11_S5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=566, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0x3f), .match=UINT64_C(0x28), .mnemonic="c_and", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=567, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0xc03f), .match=UINT64_C(0xc03c), .mnemonic="c_b_dim", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=568, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0x3f), .match=UINT64_C(0x3c), .mnemonic="c_b_dimi", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="IMM8", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=569, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0xf83f), .match=UINT64_C(0xc02c), .mnemonic="c_ebreak", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="UIMM5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=570, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0x3f), .match=UINT64_C(0x1a), .mnemonic="c_ldi", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM5_11_S5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=571, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0x3f), .match=UINT64_C(0xa), .mnemonic="c_lwi", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM5_11_S5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=572, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0x3f), .match=UINT64_C(0x16), .mnemonic="c_movi", .minor_cat="compressed", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM5_6_S5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=573, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0x3f), .match=UINT64_C(0x6), .mnemonic="c_movr", .minor_cat="compressed", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=574, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0x3f), .match=UINT64_C(0x38), .mnemonic="c_or", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=575, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0x3f), .match=UINT64_C(0x3a), .mnemonic="c_sdi", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM5_11_S5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=576, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0xf83f), .match=UINT64_C(0x401c), .mnemonic="c_sext_b", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=577, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0xf83f), .match=UINT64_C(0x481c), .mnemonic="c_sext_h", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=578, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0xf83f), .match=UINT64_C(0x501c), .mnemonic="c_sext_w", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=579, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0xf83f), .match=UINT64_C(0x102c), .mnemonic="c_slli", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="UIMM5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=580, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0xf83f), .match=UINT64_C(0x182c), .mnemonic="c_srli", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="UIMM5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=581, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0xf83f), .match=UINT64_C(0x802c), .mnemonic="c_ssrget", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=582, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0x3f), .match=UINT64_C(0x18), .mnemonic="c_sub", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=583, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0x3f), .match=UINT64_C(0x2a), .mnemonic="c_swi", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM5_11_S5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=584, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0xf83f), .match=UINT64_C(0x581c), .mnemonic="c_zext_b", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=585, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0xf83f), .match=UINT64_C(0x601c), .mnemonic="c_zext_h", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=586, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0xf83f), .match=UINT64_C(0x681c), .mnemonic="c_zext_w", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, - {.op_id=587, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfff07fff), .match=UINT64_C(0x102b), .mnemonic="assert", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=588, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xffffffff), .match=UINT64_C(0x10402b), .mnemonic="bc_iall", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=589, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfff07fff), .match=UINT64_C(0x402b), .mnemonic="bc_iva", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=590, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfff07fff), .match=UINT64_C(0x2b), .mnemonic="bse", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=591, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xffffffff), .match=UINT64_C(0x1), .mnemonic="bstop", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="STOP", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=592, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfff07fff), .match=UINT64_C(0x10002b), .mnemonic="bwe", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=593, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfff07fff), .match=UINT64_C(0x20002b), .mnemonic="bwi", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=594, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfff07fff), .match=UINT64_C(0x30002b), .mnemonic="bwt", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=595, .major_cat=LINX_CAT_MISC, .insn_len=0, .mask=UINT64_C(0x0), .match=UINT64_C(0x0), .mnemonic="internal_c_bstart_std", .minor_cat="internal", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="internal"}, - {.op_id=596, .major_cat=LINX_CAT_MISC, .insn_len=0, .mask=UINT64_C(0x0), .match=UINT64_C(0x0), .mnemonic="internal_c_setret", .minor_cat="internal", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="internal"}, - {.op_id=597, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfff07fff), .match=UINT64_C(0x60602b), .mnemonic="dc_cisw", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=598, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfff07fff), .match=UINT64_C(0x30602b), .mnemonic="dc_civa", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=599, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfff07fff), .match=UINT64_C(0x50602b), .mnemonic="dc_csw", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=600, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfff07fff), .match=UINT64_C(0x20602b), .mnemonic="dc_cva", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=601, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xffffffff), .match=UINT64_C(0x10602b), .mnemonic="dc_iall", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=602, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfff07fff), .match=UINT64_C(0x40602b), .mnemonic="dc_isw", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=603, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfff07fff), .match=UINT64_C(0x602b), .mnemonic="dc_iva", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=604, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfff07fff), .match=UINT64_C(0x70602b), .mnemonic="dc_zva", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=605, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0x1f0707f), .match=UINT64_C(0x106b), .mnemonic="fcvta", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=606, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0x1f0707f), .match=UINT64_C(0x206b), .mnemonic="fcvtm", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=607, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0x1f0707f), .match=UINT64_C(0x306b), .mnemonic="fcvtn", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=608, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0x1f0707f), .match=UINT64_C(0x406b), .mnemonic="fcvtp", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=609, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xf00fffff), .match=UINT64_C(0x202b), .mnemonic="fence_d", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="PRED_IMM", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=610, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xffffffff), .match=UINT64_C(0x1000202b), .mnemonic="fence_i", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=611, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x800005b), .mnemonic="feqs", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=612, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xf9f0707f), .match=UINT64_C(0x307b), .mnemonic="fexp", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=613, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x800305b), .mnemonic="fges", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=614, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x800205b), .mnemonic="flts", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=615, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x404b), .mnemonic="fmadd", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=616, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x605b), .mnemonic="fmax", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=617, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x705b), .mnemonic="fmin", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=618, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x504b), .mnemonic="fmsub", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=619, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x105b), .mnemonic="fne", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=620, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x800105b), .mnemonic="fnes", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=621, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x604b), .mnemonic="fnmadd", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=622, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x704b), .mnemonic="fnmsub", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=623, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xf9f0707f), .match=UINT64_C(0x207b), .mnemonic="frecip", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=624, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xf9f0707f), .match=UINT64_C(0x107b), .mnemonic="fsqrt", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=625, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xffffffff), .match=UINT64_C(0x10502b), .mnemonic="ic_iall", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=626, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfff07fff), .match=UINT64_C(0x502b), .mnemonic="ic_iva", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=628, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x37), .mnemonic="j", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM22", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=629, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x6027), .mnemonic="jr", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_7_S5_25_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=630, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0xb), .mnemonic="lr_b", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=631, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x3000000b), .mnemonic="lr_d", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=632, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x1000000b), .mnemonic="lr_h", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=633, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x2000000b), .mnemonic="lr_w", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=634, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xff07f), .match=UINT64_C(0x303b), .mnemonic="lsrget", .minor_cat="misc", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=635, .major_cat=LINX_CAT_MISC, .insn_len=64, .mask=UINT64_C(0x7fff0000007f), .match=UINT64_C(0x10810000000f), .mnemonic="l_bstart_fp", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM42_7_S25_47_17", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=635, .major_cat=LINX_CAT_MISC, .insn_len=64, .mask=UINT64_C(0x7fff0000007f), .match=UINT64_C(0x20810000000f), .mnemonic="l_bstart_fp", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM42_7_S25_47_17", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=635, .major_cat=LINX_CAT_MISC, .insn_len=64, .mask=UINT64_C(0x7fff0000007f), .match=UINT64_C(0x30810000000f), .mnemonic="l_bstart_fp", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM42_7_S25_47_17", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=635, .major_cat=LINX_CAT_MISC, .insn_len=64, .mask=UINT64_C(0x7fff0000007f), .match=UINT64_C(0x40810000000f), .mnemonic="l_bstart_fp", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM42_7_S25_47_17", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=636, .major_cat=LINX_CAT_MISC, .insn_len=64, .mask=UINT64_C(0x7fff0000007f), .match=UINT64_C(0x10010000000f), .mnemonic="l_bstart_std", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM42_7_S25_47_17", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=636, .major_cat=LINX_CAT_MISC, .insn_len=64, .mask=UINT64_C(0x7fff0000007f), .match=UINT64_C(0x20010000000f), .mnemonic="l_bstart_std", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM42_7_S25_47_17", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=636, .major_cat=LINX_CAT_MISC, .insn_len=64, .mask=UINT64_C(0x7fff0000007f), .match=UINT64_C(0x30010000000f), .mnemonic="l_bstart_std", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM42_7_S25_47_17", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=636, .major_cat=LINX_CAT_MISC, .insn_len=64, .mask=UINT64_C(0x7fff0000007f), .match=UINT64_C(0x40010000000f), .mnemonic="l_bstart_std", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM42_7_S25_47_17", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=637, .major_cat=LINX_CAT_MISC, .insn_len=64, .mask=UINT64_C(0x7fff0000007f), .match=UINT64_C(0x10110000000f), .mnemonic="l_bstart_sys", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM42_7_S25_47_17", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, - {.op_id=638, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0x600707f), .match=UINT64_C(0x6047), .mnemonic="madd", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=639, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0x600707f), .match=UINT64_C(0x7047), .mnemonic="maddw", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=640, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x405b), .mnemonic="max", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=641, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x800405b), .mnemonic="maxu", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=642, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x505b), .mnemonic="min", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=643, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x800505b), .mnemonic="minu", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=644, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x7009), .mnemonic="prf", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=645, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x7029), .mnemonic="prfi_u", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=646, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x7067), .mnemonic="rev", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="IMML", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=647, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0x1f0707f), .match=UINT64_C(0x606b), .mnemonic="scvtf", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=648, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x100b), .mnemonic="sc_b", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=649, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x3000100b), .mnemonic="sc_d", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=650, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x1000100b), .mnemonic="sc_h", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=651, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x2000100b), .mnemonic="sc_w", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=652, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xf83f000f), .match=UINT64_C(0x50160002), .mnemonic="start_call_32", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="FUSED_CALL_SIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=653, .major_cat=LINX_CAT_MISC, .insn_len=64, .mask=UINT64_C(0xfffff83f0000007f), .match=UINT64_C(0x501600000011), .mnemonic="start_call_48", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="FUSED_CALL_SIMM25", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, - {.op_id=654, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfff07fff), .match=UINT64_C(0x702b), .mnemonic="tlb_ia", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=655, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xffffffff), .match=UINT64_C(0x30702b), .mnemonic="tlb_iall", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=656, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfff07fff), .match=UINT64_C(0x20702b), .mnemonic="tlb_iav", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=657, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfff07fff), .match=UINT64_C(0x10702b), .mnemonic="tlb_iv", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, - {.op_id=658, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0x1f0707f), .match=UINT64_C(0x706b), .mnemonic="ucvtf", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=3, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7fff), .match=UINT64_C(0x4101), .mnemonic="bstart_fp_call", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM17", .block_kind="CALL", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=4, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7fff), .match=UINT64_C(0x3101), .mnemonic="bstart_fp_cond", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM17", .block_kind="COND", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=5, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7fff), .match=UINT64_C(0x2101), .mnemonic="bstart_fp_direct", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM17", .block_kind="DIRECT", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=6, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7fff), .match=UINT64_C(0x1101), .mnemonic="bstart_fp_fall", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM17", .block_kind="FALL", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=7, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0xffffffff), .match=UINT64_C(0x6101), .mnemonic="bstart_fp_icall", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="ICALL", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=8, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0xffffffff), .match=UINT64_C(0x5101), .mnemonic="bstart_fp_ind", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="IND", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=9, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0xffffffff), .match=UINT64_C(0x7101), .mnemonic="bstart_fp_ret", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="RET", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=10, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0xffffffff), .match=UINT64_C(0x6001), .mnemonic="bstart_icall", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="ICALL", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=11, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0xffffffff), .match=UINT64_C(0x5001), .mnemonic="bstart_ind", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="IND", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=12, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0xf9ffffff), .match=UINT64_C(0x1181), .mnemonic="bstart_mpar", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=13, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0xf9ffffff), .match=UINT64_C(0x9181), .mnemonic="bstart_mseq", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=731, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0xf9ffffff), .match=UINT64_C(0x21181), .mnemonic="bstart_vpar", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=732, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0xf9ffffff), .match=UINT64_C(0x29181), .mnemonic="bstart_vseq", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=14, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0xffffffff), .match=UINT64_C(0x7001), .mnemonic="bstart_ret", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="RET", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=15, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7f), .match=UINT64_C(0x21), .mnemonic="bstart_split_cond", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM25", .block_kind="COND", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=16, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7f), .match=UINT64_C(0x11), .mnemonic="bstart_split_direct", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM25", .block_kind="DIRECT", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=17, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7fff), .match=UINT64_C(0x4001), .mnemonic="bstart_call", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM17", .block_kind="CALL", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=17, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff000f), .match=UINT64_C(0x4001000e), .mnemonic="hl_bstart_std_call", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_31_17", .block_kind="CALL", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=18, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7fff), .match=UINT64_C(0x3001), .mnemonic="bstart_cond", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM17", .block_kind="COND", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=18, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff000f), .match=UINT64_C(0x3001000e), .mnemonic="hl_bstart_std_cond", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_31_17", .block_kind="COND", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=19, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7fff), .match=UINT64_C(0x2001), .mnemonic="bstart_direct", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM17", .block_kind="DIRECT", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=19, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff000f), .match=UINT64_C(0x2001000e), .mnemonic="hl_bstart_std_direct", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_31_17", .block_kind="DIRECT", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=20, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7fff), .match=UINT64_C(0x1081), .mnemonic="bstart_sys", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM17", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0xf19181), .mnemonic="bstart_tabs", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x19181), .mnemonic="bstart_tadd", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x2019181), .mnemonic="bstart_tadds", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x7c19181), .mnemonic="bstart_talloc", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x619181), .mnemonic="bstart_tand", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x2619181), .mnemonic="bstart_tands", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x2f19181), .mnemonic="bstart_taxpy", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x6619181), .mnemonic="bstart_tci", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0xd19181), .mnemonic="bstart_tcmp", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x2d19181), .mnemonic="bstart_tcmps", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x5c19181), .mnemonic="bstart_tcolargmax", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x5d19181), .mnemonic="bstart_tcolargmin", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x5419181), .mnemonic="bstart_tcolexpand", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x5519181), .mnemonic="bstart_tcolexpandadd", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x5819181), .mnemonic="bstart_tcolexpanddiv", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x5b19181), .mnemonic="bstart_tcolexpandexpdif", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x5919181), .mnemonic="bstart_tcolexpandmax", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x5a19181), .mnemonic="bstart_tcolexpandmin", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x5719181), .mnemonic="bstart_tcolexpandmul", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x5619181), .mnemonic="bstart_tcolexpandsub", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x5119181), .mnemonic="bstart_tcolmax", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x5219181), .mnemonic="bstart_tcolmin", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x5319181), .mnemonic="bstart_tcolprod", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x5019181), .mnemonic="bstart_tcolsum", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x6019181), .mnemonic="bstart_tconcat", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x1b19181), .mnemonic="bstart_tcvt", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x7819181), .mnemonic="bstart_tdeinterleave", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x6b19181), .mnemonic="bstart_tdequant", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x319181), .mnemonic="bstart_tdiv", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x2319181), .mnemonic="bstart_tdivs", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x1219181), .mnemonic="bstart_texp", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x3b19181), .mnemonic="bstart_texpands", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x6219181), .mnemonic="bstart_textract", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x6519181), .mnemonic="bstart_tfillpad", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x7d19181), .mnemonic="bstart_tfree", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x6f19181), .mnemonic="bstart_tgather", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x6119181), .mnemonic="bstart_tgatherb", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x6819181), .mnemonic="bstart_thistogram", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x6419181), .mnemonic="bstart_timg2col", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x6319181), .mnemonic="bstart_tinsert", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x7919181), .mnemonic="bstart_tinterleave", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x1319181), .mnemonic="bstart_tlog", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0xb19181), .mnemonic="bstart_tmax", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x2b19181), .mnemonic="bstart_tmaxs", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0xc19181), .mnemonic="bstart_tmin", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x2c19181), .mnemonic="bstart_tmins", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x6d19181), .mnemonic="bstart_tmrgsort", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x219181), .mnemonic="bstart_tmul", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x2219181), .mnemonic="bstart_tmuls", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x1119181), .mnemonic="bstart_tneg", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x1019181), .mnemonic="bstart_tnot", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x719181), .mnemonic="bstart_tor", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x2719181), .mnemonic="bstart_tors", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x7119181), .mnemonic="bstart_tpartadd", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x7519181), .mnemonic="bstart_tpartargmax", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x7619181), .mnemonic="bstart_tpartargmin", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x7319181), .mnemonic="bstart_tpartmax", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x7419181), .mnemonic="bstart_tpartmin", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x7219181), .mnemonic="bstart_tpartmul", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x7b19181), .mnemonic="bstart_tpop", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0xe19181), .mnemonic="bstart_tprelu", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x7a19181), .mnemonic="bstart_tpush", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x6a19181), .mnemonic="bstart_tquant", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x1419181), .mnemonic="bstart_trecip", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x1719181), .mnemonic="bstart_trelu", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x419181), .mnemonic="bstart_trem", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x2419181), .mnemonic="bstart_trems", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x7719181), .mnemonic="bstart_treshape", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x4c19181), .mnemonic="bstart_trowargmax", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x4d19181), .mnemonic="bstart_trowargmin", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x4419181), .mnemonic="bstart_trowexpand", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x4519181), .mnemonic="bstart_trowexpandadd", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x4819181), .mnemonic="bstart_trowexpanddiv", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x4b19181), .mnemonic="bstart_trowexpandexpdif", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x4919181), .mnemonic="bstart_trowexpandmax", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x4a19181), .mnemonic="bstart_trowexpandmin", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x4719181), .mnemonic="bstart_trowexpandmul", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x4619181), .mnemonic="bstart_trowexpandsub", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x4119181), .mnemonic="bstart_trowmax", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x4219181), .mnemonic="bstart_trowmin", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x4319181), .mnemonic="bstart_trowprod", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x4019181), .mnemonic="bstart_trowsum", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x1619181), .mnemonic="bstart_trsqrt", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x7019181), .mnemonic="bstart_tscatter", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x1a19181), .mnemonic="bstart_tsel", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x3a19181), .mnemonic="bstart_tsels", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x919181), .mnemonic="bstart_tshl", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x2919181), .mnemonic="bstart_tshls", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0xa19181), .mnemonic="bstart_tshr", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x2a19181), .mnemonic="bstart_tshrs", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x6c19181), .mnemonic="bstart_tsort", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x1519181), .mnemonic="bstart_tsqrt", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x119181), .mnemonic="bstart_tsub", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x2119181), .mnemonic="bstart_tsubs", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x6e19181), .mnemonic="bstart_ttrans", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x6719181), .mnemonic="bstart_ttri", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x819181), .mnemonic="bstart_txor", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x2819181), .mnemonic="bstart_txors", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=21, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0xfffff), .match=UINT64_C(0x19181), .mnemonic="bstart_tepl", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=22, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x411181), .mnemonic="bstart_mgather", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=22, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x811181), .mnemonic="bstart_mgather_cas", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=22, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x611181), .mnemonic="bstart_mgather_mask", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=22, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x511181), .mnemonic="bstart_mscatter", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=22, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x711181), .mnemonic="bstart_mscatter_mask", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=22, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x11181), .mnemonic="bstart_tload", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=22, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x211181), .mnemonic="bstart_tmov", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=22, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x311181), .mnemonic="bstart_tprefetch", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=22, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=32, .mask=UINT64_C(0x7ffffff), .match=UINT64_C(0x111181), .mnemonic="bstart_tstore", .minor_cat="boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=23, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xf), .match=UINT64_C(0x4), .mnemonic="c_bstart_cond", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM12", .block_kind="COND", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=24, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xf), .match=UINT64_C(0x2), .mnemonic="c_bstart_direct", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM12", .block_kind="DIRECT", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=25, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xffff), .match=UINT64_C(0x880), .mnemonic="c_bstart_fp", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=25, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xffff), .match=UINT64_C(0x1080), .mnemonic="c_bstart_fp", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=25, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xffff), .match=UINT64_C(0x1880), .mnemonic="c_bstart_fp", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=25, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xffff), .match=UINT64_C(0x2080), .mnemonic="c_bstart_fp", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=25, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xffff), .match=UINT64_C(0x2880), .mnemonic="c_bstart_fp", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=25, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xffff), .match=UINT64_C(0x3080), .mnemonic="c_bstart_fp", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=25, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xffff), .match=UINT64_C(0x3880), .mnemonic="c_bstart_fp", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=26, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xffff), .match=UINT64_C(0x8c0), .mnemonic="c_bstart_mpar", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=27, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xffff), .match=UINT64_C(0x48c0), .mnemonic="c_bstart_mseq", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=733, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xffff), .match=UINT64_C(0x88c0), .mnemonic="c_bstart_vpar", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=734, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xffff), .match=UINT64_C(0xc8c0), .mnemonic="c_bstart_vseq", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=28, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xffff), .match=UINT64_C(0x2000), .mnemonic="c_bstart_std_call", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="CALL", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=29, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xffff), .match=UINT64_C(0x1800), .mnemonic="c_bstart_std_cond", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="COND", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=30, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xffff), .match=UINT64_C(0x1000), .mnemonic="c_bstart_std_direct", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="DIRECT", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=31, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xffff), .match=UINT64_C(0x800), .mnemonic="c_bstart_std_fall", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="FALL", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=32, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xffff), .match=UINT64_C(0x3000), .mnemonic="c_bstart_std_icall", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="ICALL", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=33, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xffff), .match=UINT64_C(0x2800), .mnemonic="c_bstart_std_ind", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="IND", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=34, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xffff), .match=UINT64_C(0x3800), .mnemonic="c_bstart_std_ret", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="RET", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=35, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xffff), .match=UINT64_C(0x840), .mnemonic="c_bstart_sys", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=36, .major_cat=LINX_CAT_BLOCK_BOUNDARY, .insn_len=16, .mask=UINT64_C(0xffff), .match=UINT64_C(0x0), .mnemonic="c_bstop", .minor_cat="c_boundary", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="STOP", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=37, .major_cat=LINX_CAT_BLOCK_ARGS_DESC, .insn_len=32, .mask=UINT64_C(0xfbf07fff), .match=UINT64_C(0x23), .mnemonic="b_catr", .minor_cat="block_desc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=38, .major_cat=LINX_CAT_BLOCK_ARGS_DESC, .insn_len=32, .mask=UINT64_C(0xc707f), .match=UINT64_C(0x1023), .mnemonic="b_datr", .minor_cat="block_desc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=39, .major_cat=LINX_CAT_BLOCK_ARGS_DESC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x43), .mnemonic="b_dim_lb0", .minor_cat="block_desc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="UIMM17_20_12_7_5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=40, .major_cat=LINX_CAT_BLOCK_ARGS_DESC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1043), .mnemonic="b_dim_lb1", .minor_cat="block_desc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="UIMM17_20_12_7_5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=41, .major_cat=LINX_CAT_BLOCK_ARGS_DESC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x2043), .mnemonic="b_dim_lb2", .minor_cat="block_desc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="UIMM17_20_12_7_5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=42, .major_cat=LINX_CAT_BLOCK_ARGS_DESC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x27), .mnemonic="b_eq", .minor_cat="block_desc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM12_7_S5_25_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=43, .major_cat=LINX_CAT_BLOCK_ARGS_DESC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x3027), .mnemonic="b_ge", .minor_cat="block_desc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM12_7_S5_25_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=44, .major_cat=LINX_CAT_BLOCK_ARGS_DESC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x5027), .mnemonic="b_geu", .minor_cat="block_desc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM12_7_S5_25_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=45, .major_cat=LINX_CAT_BLOCK_ARGS_DESC, .insn_len=32, .mask=UINT64_C(0x87fff), .match=UINT64_C(0x33), .mnemonic="b_hint", .minor_cat="block_desc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=46, .major_cat=LINX_CAT_BLOCK_ARGS_DESC, .insn_len=32, .mask=UINT64_C(0xffff7fff), .match=UINT64_C(0x1033), .mnemonic="b_hint_trace", .minor_cat="block_desc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=47, .major_cat=LINX_CAT_BLOCK_ARGS_DESC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x2027), .mnemonic="b_lt", .minor_cat="block_desc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM12_7_S5_25_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=48, .major_cat=LINX_CAT_BLOCK_ARGS_DESC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x4027), .mnemonic="b_ltu", .minor_cat="block_desc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM12_7_S5_25_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=49, .major_cat=LINX_CAT_BLOCK_ARGS_DESC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1027), .mnemonic="b_ne", .minor_cat="block_desc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM12_7_S5_25_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=50, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x5), .mnemonic="add", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=51, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x15), .mnemonic="addi", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=52, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x35), .mnemonic="addiw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=53, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x25), .mnemonic="addw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=54, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x2005), .mnemonic="and", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=55, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x2015), .mnemonic="andi", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=56, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x2035), .mnemonic="andiw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=57, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x2025), .mnemonic="andw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=58, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x6067), .mnemonic="bcnt", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="IMML", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=59, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x2067), .mnemonic="bic", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="IMML", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=60, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x3067), .mnemonic="bis", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="IMML", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=61, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff000f), .match=UINT64_C(0x1001000e), .mnemonic="hl_bstart_std_fall", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_31_17", .block_kind="FALL", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=62, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x67), .mnemonic="bxs", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="IMML", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=63, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1067), .mnemonic="bxu", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="IMML", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=64, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1b), .mnemonic="casb", .minor_cat="atomic", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=65, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x301b), .mnemonic="casd", .minor_cat="atomic", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=66, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x101b), .mnemonic="cash", .minor_cat="atomic", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=67, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x201b), .mnemonic="casw", .minor_cat="atomic", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=68, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x5067), .mnemonic="clz", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="IMML", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=69, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x77), .mnemonic="csel", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=70, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x4067), .mnemonic="ctz", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="IMML", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=71, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x57), .mnemonic="div", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=72, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x1057), .mnemonic="divu", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=73, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x3057), .mnemonic="divuw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=74, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x2057), .mnemonic="divw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=75, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe007fff), .match=UINT64_C(0x700b), .mnemonic="dma", .minor_cat="atomic", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=76, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x15000e), .mnemonic="hl_addi", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=77, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x35000e), .mnemonic="hl_addiw", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=78, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x2015000e), .mnemonic="hl_andi", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=79, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x2035000e), .mnemonic="hl_andiw", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=80, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xfffffe00707f000f), .match=UINT64_C(0x204d000e), .mnemonic="hl_bfi", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="IMMR", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=81, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff000f), .match=UINT64_C(0x4101000e), .mnemonic="hl_bstart_fp_call", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_31_17", .block_kind="CALL", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=82, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff000f), .match=UINT64_C(0x3101000e), .mnemonic="hl_bstart_fp_cond", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_31_17", .block_kind="COND", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=83, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff000f), .match=UINT64_C(0x2101000e), .mnemonic="hl_bstart_fp_direct", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_31_17", .block_kind="DIRECT", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=84, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff000f), .match=UINT64_C(0x1101000e), .mnemonic="hl_bstart_fp_fall", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_31_17", .block_kind="FALL", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=85, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff000f), .match=UINT64_C(0x1081000e), .mnemonic="hl_bstart_sys", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_31_17", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=86, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xfffff000707ff83f), .match=UINT64_C(0x600b000e), .mnemonic="hl_casb", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=87, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xfffff000707ff83f), .match=UINT64_C(0x3000600b000e), .mnemonic="hl_casd", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=88, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xfffff000707ff83f), .match=UINT64_C(0x1000600b000e), .mnemonic="hl_cash", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=89, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xfffff000707ff83f), .match=UINT64_C(0x2000600b000e), .mnemonic="hl_casw", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=90, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x105d000e), .mnemonic="hl_ccat", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=91, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x205d000e), .mnemonic="hl_ccatw", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=92, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x2055000e), .mnemonic="hl_cmp_andi", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=93, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x55000e), .mnemonic="hl_cmp_eqi", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=94, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x5055000e), .mnemonic="hl_cmp_gei", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=95, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x7055000e), .mnemonic="hl_cmp_geui", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=96, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x4055000e), .mnemonic="hl_cmp_lti", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=97, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x6055000e), .mnemonic="hl_cmp_ltui", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=98, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x1055000e), .mnemonic="hl_cmp_nei", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=99, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x3055000e), .mnemonic="hl_cmp_ori", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=100, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xfffffe00707f07ff), .match=UINT64_C(0x57000e), .mnemonic="hl_div", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=101, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xfffffe00707f07ff), .match=UINT64_C(0x1057000e), .mnemonic="hl_divu", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=102, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xfffffe00707f07ff), .match=UINT64_C(0x3057000e), .mnemonic="hl_divuw", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=103, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xfffffe00707f07ff), .match=UINT64_C(0x2057000e), .mnemonic="hl_divw", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=104, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x19000e), .mnemonic="hl_lbi", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM22_6_S10_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=105, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x19001e), .mnemonic="hl_lbip", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=106, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x19003e), .mnemonic="hl_lbi_po", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=107, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x19002e), .mnemonic="hl_lbi_pr", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=108, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x9001e), .mnemonic="hl_lbp", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=109, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x4019000e), .mnemonic="hl_lbui", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM22_6_S10_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=110, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x4019001e), .mnemonic="hl_lbuip", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=111, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x4019003e), .mnemonic="hl_lbui_po", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=112, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x4019002e), .mnemonic="hl_lbui_pr", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=113, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x4009001e), .mnemonic="hl_lbup", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=114, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x4009003e), .mnemonic="hl_lbu_po", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=115, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x4009002e), .mnemonic="hl_lbu_pr", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=116, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x9003e), .mnemonic="hl_lb_po", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=117, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x9002e), .mnemonic="hl_lb_pr", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=118, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x3019000e), .mnemonic="hl_ldi", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM22_6_S10_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=119, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x3019001e), .mnemonic="hl_ldip", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=120, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x3029001e), .mnemonic="hl_ldip_u", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=121, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x3019003e), .mnemonic="hl_ldi_po", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=122, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x3019002e), .mnemonic="hl_ldi_pr", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=123, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x3029000e), .mnemonic="hl_ldi_u", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM22_6_S10_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=124, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x3029003e), .mnemonic="hl_ldi_upo", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=125, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x3029002e), .mnemonic="hl_ldi_upr", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=126, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x3009001e), .mnemonic="hl_ldp", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=127, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x3009003e), .mnemonic="hl_ld_po", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=128, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x3009002e), .mnemonic="hl_ld_pr", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=129, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x1019000e), .mnemonic="hl_lhi", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM22_6_S10_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=130, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x1019001e), .mnemonic="hl_lhip", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=131, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x1029001e), .mnemonic="hl_lhip_u", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=132, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x1019003e), .mnemonic="hl_lhi_po", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=133, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x1019002e), .mnemonic="hl_lhi_pr", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=134, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x1029000e), .mnemonic="hl_lhi_u", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM22_6_S10_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=135, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x1029003e), .mnemonic="hl_lhi_upo", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=136, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x1029002e), .mnemonic="hl_lhi_upr", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=137, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x1009001e), .mnemonic="hl_lhp", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=138, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x5019000e), .mnemonic="hl_lhui", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM22_6_S10_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=139, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x5019001e), .mnemonic="hl_lhuip", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=140, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x5029001e), .mnemonic="hl_lhuip_u", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=141, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x5019003e), .mnemonic="hl_lhui_po", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=142, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x5019002e), .mnemonic="hl_lhui_pr", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=143, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x5029000e), .mnemonic="hl_lhui_u", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM22_6_S10_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=144, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x5029003e), .mnemonic="hl_lhui_upo", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=145, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x5029002e), .mnemonic="hl_lhui_upr", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=146, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x5009001e), .mnemonic="hl_lhup", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=147, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x5009003e), .mnemonic="hl_lhu_po", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=148, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x5009002e), .mnemonic="hl_lhu_pr", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=149, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x1009003e), .mnemonic="hl_lh_po", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=150, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x1009002e), .mnemonic="hl_lh_pr", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=151, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000007f000f), .match=UINT64_C(0xd000e), .mnemonic="hl_lis", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM32", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=152, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000007f000f), .match=UINT64_C(0x1d000e), .mnemonic="hl_liu", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="IMM32", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=153, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000007f000f), .match=UINT64_C(0x17000e), .mnemonic="hl_lui", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="IMM32", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=154, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x2019000e), .mnemonic="hl_lwi", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM22_6_S10_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=155, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x2019001e), .mnemonic="hl_lwip", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=156, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x2029001e), .mnemonic="hl_lwip_u", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=157, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x2019003e), .mnemonic="hl_lwi_po", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=158, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x2019002e), .mnemonic="hl_lwi_pr", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=159, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x2029000e), .mnemonic="hl_lwi_u", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM22_6_S10_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=160, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x2029003e), .mnemonic="hl_lwi_upo", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=161, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x2029002e), .mnemonic="hl_lwi_upr", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=162, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x2009001e), .mnemonic="hl_lwp", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=163, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x6019000e), .mnemonic="hl_lwui", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM22_6_S10_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=164, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x6019001e), .mnemonic="hl_lwuip", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=165, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x6029001e), .mnemonic="hl_lwuip_u", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=166, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x6019003e), .mnemonic="hl_lwui_po", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=167, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x6019002e), .mnemonic="hl_lwui_pr", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=168, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x6029000e), .mnemonic="hl_lwui_u", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM22_6_S10_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=169, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x6029003e), .mnemonic="hl_lwui_upo", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=170, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x6029002e), .mnemonic="hl_lwui_upr", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=171, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x6009001e), .mnemonic="hl_lwup", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=172, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x6009003e), .mnemonic="hl_lwu_po", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=173, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x6009002e), .mnemonic="hl_lwu_pr", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=174, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x2009003e), .mnemonic="hl_lw_po", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=175, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x2009002e), .mnemonic="hl_lw_pr", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=176, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0600707f07ff), .match=UINT64_C(0x6047000e), .mnemonic="hl_madd", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=177, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0600707f07ff), .match=UINT64_C(0x7047000e), .mnemonic="hl_maddw", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=178, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x4d000e), .mnemonic="hl_miadd", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="UIMM19", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=179, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x104d000e), .mnemonic="hl_misub", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="UIMM19", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=180, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xfffffe00707f07ff), .match=UINT64_C(0x47000e), .mnemonic="hl_mul", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=181, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xfffffe00707f07ff), .match=UINT64_C(0x1047000e), .mnemonic="hl_mulu", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=182, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x3015000e), .mnemonic="hl_ori", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=183, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x3035000e), .mnemonic="hl_oriw", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=184, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff07ff), .match=UINT64_C(0x7009000e), .mnemonic="hl_prf", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=185, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff003f), .match=UINT64_C(0x7029000e), .mnemonic="hl_prfi_u", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=186, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x7029001e), .mnemonic="hl_prfi_ua", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM17_6_S5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=187, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f07ff), .match=UINT64_C(0x7009001e), .mnemonic="hl_prf_a", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=188, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffffe000707fffff), .match=UINT64_C(0x7d000e), .mnemonic="hl_qmt", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=189, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xfffff800707f07ff), .match=UINT64_C(0x207d000e), .mnemonic="hl_qpop", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=190, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xfffff000707fffff), .match=UINT64_C(0x107d000e), .mnemonic="hl_qpush", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=191, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xfffffe00707f07ff), .match=UINT64_C(0x4057000e), .mnemonic="hl_rem", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=192, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xfffffe00707f07ff), .match=UINT64_C(0x5057000e), .mnemonic="hl_remu", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=193, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xfffffe00707f07ff), .match=UINT64_C(0x7057000e), .mnemonic="hl_remuw", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=194, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xfffffe00707f07ff), .match=UINT64_C(0x6057000e), .mnemonic="hl_remw", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=195, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x59000e), .mnemonic="hl_sbi", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM22_6_S10_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=196, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x59001e), .mnemonic="hl_sbip", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM17_11_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=197, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x59003e), .mnemonic="hl_sbi_po", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM17_6_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=198, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x59002e), .mnemonic="hl_sbi_pr", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM17_6_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=199, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007ffff83f), .match=UINT64_C(0x49001e), .mnemonic="hl_sbp", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=200, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff07ff), .match=UINT64_C(0x49003e), .mnemonic="hl_sb_po", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=201, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff07ff), .match=UINT64_C(0x49002e), .mnemonic="hl_sb_pr", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=202, .major_cat=LINX_CAT_STORE, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x3059000e), .mnemonic="hl_sdi", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM22_6_S10_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=203, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x3059001e), .mnemonic="hl_sdip", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM17_11_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=204, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x7059001e), .mnemonic="hl_sdip_u", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM17_11_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=205, .major_cat=LINX_CAT_STORE, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x3059003e), .mnemonic="hl_sdi_po", .minor_cat="store", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM17_6_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=206, .major_cat=LINX_CAT_STORE, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x3059002e), .mnemonic="hl_sdi_pr", .minor_cat="store", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM17_6_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=207, .major_cat=LINX_CAT_STORE, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x7059000e), .mnemonic="hl_sdi_u", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM22_6_S10_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=208, .major_cat=LINX_CAT_STORE, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x7059003e), .mnemonic="hl_sdi_upo", .minor_cat="store", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM17_6_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=209, .major_cat=LINX_CAT_STORE, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x7059002e), .mnemonic="hl_sdi_upr", .minor_cat="store", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM17_6_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=210, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007ffff83f), .match=UINT64_C(0x3049001e), .mnemonic="hl_sdp", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=211, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007ffff83f), .match=UINT64_C(0x7049001e), .mnemonic="hl_sdp_u", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=212, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff07ff), .match=UINT64_C(0x3049003e), .mnemonic="hl_sd_po", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=213, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff07ff), .match=UINT64_C(0x3049002e), .mnemonic="hl_sd_pr", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=214, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff07ff), .match=UINT64_C(0x7049003e), .mnemonic="hl_sd_upo", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=215, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff07ff), .match=UINT64_C(0x7049002e), .mnemonic="hl_sd_upr", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=216, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x2075000e), .mnemonic="hl_setc_andi", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=217, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x75000e), .mnemonic="hl_setc_eqi", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=218, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x5075000e), .mnemonic="hl_setc_gei", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=219, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x7075000e), .mnemonic="hl_setc_geui", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=220, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x4075000e), .mnemonic="hl_setc_lti", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=221, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x6075000e), .mnemonic="hl_setc_ltui", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=222, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x1075000e), .mnemonic="hl_setc_nei", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=223, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x3075000e), .mnemonic="hl_setc_ori", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=224, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00000fff000f), .match=UINT64_C(0x507000e), .mnemonic="hl_setret", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="IMM32", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=225, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x1059000e), .mnemonic="hl_shi", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM22_6_S10_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=226, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x1059001e), .mnemonic="hl_ship", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM17_11_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=227, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x5059001e), .mnemonic="hl_ship_u", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM17_11_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=228, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x1059003e), .mnemonic="hl_shi_po", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM17_6_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=229, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x1059002e), .mnemonic="hl_shi_pr", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM17_6_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=230, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x5059000e), .mnemonic="hl_shi_u", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM22_6_S10_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=231, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x5059003e), .mnemonic="hl_shi_upo", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM17_6_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=232, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x5059002e), .mnemonic="hl_shi_upr", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM17_6_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=233, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007ffff83f), .match=UINT64_C(0x1049001e), .mnemonic="hl_shp", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=234, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007ffff83f), .match=UINT64_C(0x5049001e), .mnemonic="hl_shp_u", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=235, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff07ff), .match=UINT64_C(0x1049003e), .mnemonic="hl_sh_po", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=236, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff07ff), .match=UINT64_C(0x1049002e), .mnemonic="hl_sh_pr", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=237, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff07ff), .match=UINT64_C(0x5049003e), .mnemonic="hl_sh_upo", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=238, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff07ff), .match=UINT64_C(0x5049002e), .mnemonic="hl_sh_upr", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=239, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x1015000e), .mnemonic="hl_subi", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=240, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x1035000e), .mnemonic="hl_subiw", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=241, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x2059000e), .mnemonic="hl_swi", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM22_6_S10_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=242, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x2059001e), .mnemonic="hl_swip", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM17_11_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=243, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x6059001e), .mnemonic="hl_swip_u", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM17_11_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=244, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x2059003e), .mnemonic="hl_swi_po", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM17_6_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=245, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x2059002e), .mnemonic="hl_swi_pr", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM17_6_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=246, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x6059000e), .mnemonic="hl_swi_u", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM22_6_S10_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=247, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x6059003e), .mnemonic="hl_swi_upo", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM17_6_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=248, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f003f), .match=UINT64_C(0x6059002e), .mnemonic="hl_swi_upr", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM17_6_S5_23_5_41_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=249, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007ffff83f), .match=UINT64_C(0x2049001e), .mnemonic="hl_swp", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=250, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007ffff83f), .match=UINT64_C(0x6049001e), .mnemonic="hl_swp_u", .minor_cat="hl_alu", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=251, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff07ff), .match=UINT64_C(0x2049003e), .mnemonic="hl_sw_po", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=252, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff07ff), .match=UINT64_C(0x2049002e), .mnemonic="hl_sw_pr", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=253, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff07ff), .match=UINT64_C(0x6049003e), .mnemonic="hl_sw_upo", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=254, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff00007fff07ff), .match=UINT64_C(0x6049002e), .mnemonic="hl_sw_upr", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=255, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x4015000e), .mnemonic="hl_xori", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=256, .major_cat=LINX_CAT_ALU_INT, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x4035000e), .mnemonic="hl_xoriw", .minor_cat="hl_alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=257, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x7f), .match=UINT64_C(0x17), .mnemonic="lui", .minor_cat="alu", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="IMM20", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=258, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x47), .mnemonic="mul", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=259, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x1047), .mnemonic="mulu", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=260, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x3047), .mnemonic="muluw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=261, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x2047), .mnemonic="mulw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=262, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x3005), .mnemonic="or", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=263, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x3015), .mnemonic="ori", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=264, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x3035), .mnemonic="oriw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=265, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x3025), .mnemonic="orw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=266, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x4057), .mnemonic="rem", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=267, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x5057), .mnemonic="remu", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=268, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x7057), .mnemonic="remuw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=269, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x6057), .mnemonic="remw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=270, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x7005), .mnemonic="sll", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=271, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfc00707f), .match=UINT64_C(0x7015), .mnemonic="slli", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=272, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x7035), .mnemonic="slliw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=273, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x7025), .mnemonic="sllw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=274, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x6005), .mnemonic="sra", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=275, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfc00707f), .match=UINT64_C(0x6015), .mnemonic="srai", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=276, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x6035), .mnemonic="sraiw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=277, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x6025), .mnemonic="sraw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=278, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x5005), .mnemonic="srl", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=279, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfc00707f), .match=UINT64_C(0x5015), .mnemonic="srli", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=280, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x5035), .mnemonic="srliw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=281, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x5025), .mnemonic="srlw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=282, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1005), .mnemonic="sub", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=283, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1015), .mnemonic="subi", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=284, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1035), .mnemonic="subiw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=285, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1025), .mnemonic="subw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=286, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x4005), .mnemonic="xor", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=287, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x4015), .mnemonic="xori", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=288, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x4035), .mnemonic="xoriw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=289, .major_cat=LINX_CAT_ALU_INT, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x4025), .mnemonic="xorw", .minor_cat="alu", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=290, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x7f), .match=UINT64_C(0x7), .mnemonic="addtpc", .minor_cat="setret_addtpc", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="IMM20", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=291, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x2037), .mnemonic="b_nz", .minor_cat="branch_pred", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM22", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=292, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1037), .mnemonic="b_z", .minor_cat="branch_pred", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM22", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=293, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x2045), .mnemonic="cmp_and", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=294, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x2055), .mnemonic="cmp_andi", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=295, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x45), .mnemonic="cmp_eq", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=296, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x55), .mnemonic="cmp_eqi", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=297, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x5045), .mnemonic="cmp_ge", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=298, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x5055), .mnemonic="cmp_gei", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=299, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x7045), .mnemonic="cmp_geu", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=300, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x7055), .mnemonic="cmp_geui", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=301, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x4045), .mnemonic="cmp_lt", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=302, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x4055), .mnemonic="cmp_lti", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=303, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x6045), .mnemonic="cmp_ltu", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=304, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x6055), .mnemonic="cmp_ltui", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=305, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x1045), .mnemonic="cmp_ne", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=306, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1055), .mnemonic="cmp_nei", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=307, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x3045), .mnemonic="cmp_or", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=308, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x3055), .mnemonic="cmp_ori", .minor_cat="setc_cmp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=309, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=16, .mask=UINT64_C(0xf83f), .match=UINT64_C(0x2c), .mnemonic="c_cmp_eqi", .minor_cat="c_pred", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM5_6_S5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=310, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=16, .mask=UINT64_C(0xf83f), .match=UINT64_C(0x82c), .mnemonic="c_cmp_nei", .minor_cat="c_pred", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM5_6_S5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=311, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=16, .mask=UINT64_C(0x3f), .match=UINT64_C(0x26), .mnemonic="c_setc_eq", .minor_cat="c_pred", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=312, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=16, .mask=UINT64_C(0x3f), .match=UINT64_C(0x36), .mnemonic="c_setc_ne", .minor_cat="c_pred", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=313, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=16, .mask=UINT64_C(0xf83f), .match=UINT64_C(0x1c), .mnemonic="c_setc_tgt", .minor_cat="c_pred", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=314, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=64, .mask=UINT64_C(0xffff0000007f000f), .match=UINT64_C(0x7000e), .mnemonic="hl_addtpc", .minor_cat="setret_addtpc", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="IMM32", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=315, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0xf8007fff), .match=UINT64_C(0x2065), .mnemonic="setc_and", .minor_cat="setc_cmp", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=316, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x2075), .mnemonic="setc_andi", .minor_cat="setc_cmp", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=317, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0xf8007fff), .match=UINT64_C(0x65), .mnemonic="setc_eq", .minor_cat="setc_cmp", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=318, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x75), .mnemonic="setc_eqi", .minor_cat="setc_cmp", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=319, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0xf8007fff), .match=UINT64_C(0x5065), .mnemonic="setc_ge", .minor_cat="setc_cmp", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=320, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x5075), .mnemonic="setc_gei", .minor_cat="setc_cmp", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=321, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0xf8007fff), .match=UINT64_C(0x7065), .mnemonic="setc_geu", .minor_cat="setc_cmp", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=322, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x7075), .mnemonic="setc_geui", .minor_cat="setc_cmp", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=323, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0xf8007fff), .match=UINT64_C(0x4065), .mnemonic="setc_lt", .minor_cat="setc_cmp", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=324, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x4075), .mnemonic="setc_lti", .minor_cat="setc_cmp", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=325, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0xf8007fff), .match=UINT64_C(0x6065), .mnemonic="setc_ltu", .minor_cat="setc_cmp", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=326, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x6075), .mnemonic="setc_ltui", .minor_cat="setc_cmp", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=327, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0xf8007fff), .match=UINT64_C(0x1065), .mnemonic="setc_ne", .minor_cat="setc_cmp", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=328, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1075), .mnemonic="setc_nei", .minor_cat="setc_cmp", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=329, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0xf8007fff), .match=UINT64_C(0x3065), .mnemonic="setc_or", .minor_cat="setc_cmp", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=330, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x3075), .mnemonic="setc_ori", .minor_cat="setc_cmp", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=331, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0xfff07fff), .match=UINT64_C(0x403b), .mnemonic="setc_tgt", .minor_cat="branch_pred", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=332, .major_cat=LINX_CAT_BRU_SETC_CMP, .insn_len=32, .mask=UINT64_C(0xfff), .match=UINT64_C(0x507), .mnemonic="setret", .minor_cat="setret_addtpc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="IMM20", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=333, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x9), .mnemonic="lb", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=334, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x19), .mnemonic="lbi", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=335, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x4009), .mnemonic="lbu", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=336, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x4019), .mnemonic="lbui", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=337, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x4039), .mnemonic="lbu_pcr", .minor_cat="load", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM17", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=338, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x39), .mnemonic="lb_pcr", .minor_cat="load", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM17", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=339, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x3009), .mnemonic="ld", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=340, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x3019), .mnemonic="ldi", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=341, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x3029), .mnemonic="ldi_u", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=342, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x400b), .mnemonic="ld_add", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=343, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x1000400b), .mnemonic="ld_and", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=344, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x2000400b), .mnemonic="ld_or", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=345, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x3039), .mnemonic="ld_pcr", .minor_cat="load", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM17", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=346, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x4000400b), .mnemonic="ld_smax", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=347, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x5000400b), .mnemonic="ld_smin", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=348, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x6000400b), .mnemonic="ld_umax", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=349, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x7000400b), .mnemonic="ld_umin", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=350, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x3000400b), .mnemonic="ld_xor", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=351, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1009), .mnemonic="lh", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=352, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1019), .mnemonic="lhi", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=353, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1029), .mnemonic="lhi_u", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=354, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x5009), .mnemonic="lhu", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=355, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x5019), .mnemonic="lhui", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=356, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x5029), .mnemonic="lhui_u", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=357, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x5039), .mnemonic="lhu_pcr", .minor_cat="load", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM17", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=358, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1039), .mnemonic="lh_pcr", .minor_cat="load", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM17", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=359, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x2009), .mnemonic="lw", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=360, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x2019), .mnemonic="lwi", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=361, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x2029), .mnemonic="lwi_u", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=362, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x6009), .mnemonic="lwu", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=363, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x6019), .mnemonic="lwui", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=364, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x6029), .mnemonic="lwui_u", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=365, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x6039), .mnemonic="lwu_pcr", .minor_cat="load", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM17", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=366, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x200b), .mnemonic="lw_add", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=367, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x1000200b), .mnemonic="lw_and", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=368, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x2000200b), .mnemonic="lw_or", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=369, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x2039), .mnemonic="lw_pcr", .minor_cat="load", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM17", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=370, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x4000200b), .mnemonic="lw_smax", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=371, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x5000200b), .mnemonic="lw_smin", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=372, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x6000200b), .mnemonic="lw_umax", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=373, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x7000200b), .mnemonic="lw_umin", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=374, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x3000200b), .mnemonic="lw_xor", .minor_cat="load", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=375, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0x7fff), .match=UINT64_C(0x49), .mnemonic="sb", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=376, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x59), .mnemonic="sbi", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM12_7_S5_25_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=377, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x69), .mnemonic="sb_pcr", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM17_20_12_7_5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=378, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0x7fff), .match=UINT64_C(0x3049), .mnemonic="sd", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=379, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x3059), .mnemonic="sdi", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM12_7_S5_25_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=380, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x7059), .mnemonic="sdi_u", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM12_7_S5_25_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=381, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf4007fff), .match=UINT64_C(0x500b), .mnemonic="sd_add", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=382, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf4007fff), .match=UINT64_C(0x1000500b), .mnemonic="sd_and", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=383, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf4007fff), .match=UINT64_C(0x2000500b), .mnemonic="sd_or", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=384, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x3069), .mnemonic="sd_pcr", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM17_20_12_7_5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=385, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf4007fff), .match=UINT64_C(0x4000500b), .mnemonic="sd_smax", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=386, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf4007fff), .match=UINT64_C(0x5000500b), .mnemonic="sd_smin", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=387, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0x7fff), .match=UINT64_C(0x7049), .mnemonic="sd_u", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=388, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf4007fff), .match=UINT64_C(0x6000500b), .mnemonic="sd_umax", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=389, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf4007fff), .match=UINT64_C(0x7000500b), .mnemonic="sd_umin", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=390, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf4007fff), .match=UINT64_C(0x3000500b), .mnemonic="sd_xor", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=391, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0x7fff), .match=UINT64_C(0x1049), .mnemonic="sh", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=392, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1059), .mnemonic="shi", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM12_7_S5_25_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=393, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x5059), .mnemonic="shi_u", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM12_7_S5_25_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=394, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1069), .mnemonic="sh_pcr", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM17_20_12_7_5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=395, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0x7fff), .match=UINT64_C(0x5049), .mnemonic="sh_u", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=396, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0x7fff), .match=UINT64_C(0x2049), .mnemonic="sw", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=397, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x600b), .mnemonic="swapb", .minor_cat="store", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=398, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x3000600b), .mnemonic="swapd", .minor_cat="store", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=399, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x1000600b), .mnemonic="swaph", .minor_cat="store", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=400, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x2000600b), .mnemonic="swapw", .minor_cat="store", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=401, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x2059), .mnemonic="swi", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM12_7_S5_25_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=402, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x6059), .mnemonic="swi_u", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM12_7_S5_25_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=403, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf4007fff), .match=UINT64_C(0x300b), .mnemonic="sw_add", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=404, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf4007fff), .match=UINT64_C(0x1000300b), .mnemonic="sw_and", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=405, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf4007fff), .match=UINT64_C(0x2000300b), .mnemonic="sw_or", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=406, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x2069), .mnemonic="sw_pcr", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM17_20_12_7_5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=407, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf4007fff), .match=UINT64_C(0x4000300b), .mnemonic="sw_smax", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=408, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf4007fff), .match=UINT64_C(0x5000300b), .mnemonic="sw_smin", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=409, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0x7fff), .match=UINT64_C(0x6049), .mnemonic="sw_u", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=410, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf4007fff), .match=UINT64_C(0x6000300b), .mnemonic="sw_umax", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=411, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf4007fff), .match=UINT64_C(0x7000300b), .mnemonic="sw_umin", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=412, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf4007fff), .match=UINT64_C(0x3000300b), .mnemonic="sw_xor", .minor_cat="store", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=413, .major_cat=LINX_CAT_CMD_PIPE, .insn_len=32, .mask=UINT64_C(0x600707f), .match=UINT64_C(0x13), .mnemonic="b_ior", .minor_cat="block_cmd", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="BIOR", .flags="", .source_file="insn32.decode"}, + {.op_id=414, .major_cat=LINX_CAT_CMD_PIPE, .insn_len=32, .mask=UINT64_C(0x7f), .match=UINT64_C(0x3), .mnemonic="b_text", .minor_cat="block_cmd", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM25", .block_kind="NONE", .cmd_kind="BTEXT", .flags="", .source_file="insn32.decode"}, + {.op_id=415, .major_cat=LINX_CAT_CMD_PIPE, .insn_len=32, .mask=UINT64_C(0xfc00787f), .match=UINT64_C(0x5013), .mnemonic="b_iot", .minor_cat="block_cmd", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="IOTIMM4", .block_kind="NONE", .cmd_kind="BIOT", .flags="", .source_file="insn32.decode"}, + {.op_id=415, .major_cat=LINX_CAT_CMD_PIPE, .insn_len=32, .mask=UINT64_C(0x7f3ff), .match=UINT64_C(0x4013), .mnemonic="b_iot", .minor_cat="block_cmd", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="IOTIMM4", .block_kind="NONE", .cmd_kind="BIOT", .flags="", .source_file="insn32.decode"}, + {.op_id=415, .major_cat=LINX_CAT_CMD_PIPE, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x4013), .mnemonic="b_iot", .minor_cat="block_cmd", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="IOTIMM4", .block_kind="NONE", .cmd_kind="BIOT", .flags="", .source_file="insn32.decode"}, + {.op_id=415, .major_cat=LINX_CAT_CMD_PIPE, .insn_len=32, .mask=UINT64_C(0xfc07fbff), .match=UINT64_C(0x5013), .mnemonic="b_iot", .minor_cat="block_cmd", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="IOTIMM4", .block_kind="NONE", .cmd_kind="BIOT", .flags="", .source_file="insn32.decode"}, + {.op_id=415, .major_cat=LINX_CAT_CMD_PIPE, .insn_len=32, .mask=UINT64_C(0xfff07c7f), .match=UINT64_C(0x6013), .mnemonic="b_iot", .minor_cat="block_cmd", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="IOTIMM4", .block_kind="NONE", .cmd_kind="BIOT", .flags="", .source_file="insn32.decode"}, + {.op_id=416, .major_cat=LINX_CAT_MACRO_TEMPLATE, .insn_len=32, .mask=UINT64_C(0x6007fff), .match=UINT64_C(0x3031), .mnemonic="ercov", .minor_cat="template", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=417, .major_cat=LINX_CAT_MACRO_TEMPLATE, .insn_len=32, .mask=UINT64_C(0x6007fff), .match=UINT64_C(0x2031), .mnemonic="esave", .minor_cat="template", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=418, .major_cat=LINX_CAT_MACRO_TEMPLATE, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x41), .mnemonic="fentry", .minor_cat="template", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="FENTRY_UIMM_HI", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=419, .major_cat=LINX_CAT_MACRO_TEMPLATE, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x1041), .mnemonic="fexit", .minor_cat="template", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="FENTRY_UIMM_HI", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=420, .major_cat=LINX_CAT_MACRO_TEMPLATE, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x2041), .mnemonic="fret_ra", .minor_cat="template", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="FENTRY_UIMM_HI", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=421, .major_cat=LINX_CAT_MACRO_TEMPLATE, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x3041), .mnemonic="fret_stk", .minor_cat="template", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="FENTRY_UIMM_HI", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=422, .major_cat=LINX_CAT_MACRO_TEMPLATE, .insn_len=32, .mask=UINT64_C(0x6007fff), .match=UINT64_C(0x31), .mnemonic="mcopy", .minor_cat="template", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=423, .major_cat=LINX_CAT_MACRO_TEMPLATE, .insn_len=32, .mask=UINT64_C(0x6007fff), .match=UINT64_C(0x1031), .mnemonic="mset", .minor_cat="template", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=424, .major_cat=LINX_CAT_HL_PCR, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x4039000e), .mnemonic="hl_lbu_pcr", .minor_cat="hl_pcr", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_31_17", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=425, .major_cat=LINX_CAT_HL_PCR, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x39000e), .mnemonic="hl_lb_pcr", .minor_cat="hl_pcr", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_31_17", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=426, .major_cat=LINX_CAT_HL_PCR, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x3039000e), .mnemonic="hl_ld_pcr", .minor_cat="hl_pcr", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_31_17", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=427, .major_cat=LINX_CAT_HL_PCR, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x5039000e), .mnemonic="hl_lhu_pcr", .minor_cat="hl_pcr", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_31_17", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=428, .major_cat=LINX_CAT_HL_PCR, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x1039000e), .mnemonic="hl_lh_pcr", .minor_cat="hl_pcr", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_31_17", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=429, .major_cat=LINX_CAT_HL_PCR, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x6039000e), .mnemonic="hl_lwu_pcr", .minor_cat="hl_pcr", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_31_17", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=430, .major_cat=LINX_CAT_HL_PCR, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x2039000e), .mnemonic="hl_lw_pcr", .minor_cat="hl_pcr", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_31_17", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=431, .major_cat=LINX_CAT_HL_PCR, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x69000e), .mnemonic="hl_sb_pcr", .minor_cat="hl_pcr", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_23_5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=432, .major_cat=LINX_CAT_HL_PCR, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x3069000e), .mnemonic="hl_sd_pcr", .minor_cat="hl_pcr", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_23_5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=433, .major_cat=LINX_CAT_HL_PCR, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x1069000e), .mnemonic="hl_sh_pcr", .minor_cat="hl_pcr", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_23_5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=434, .major_cat=LINX_CAT_HL_PCR, .insn_len=64, .mask=UINT64_C(0xffff0000707f000f), .match=UINT64_C(0x2069000e), .mnemonic="hl_sw_pcr", .minor_cat="hl_pcr", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM_4_S12_23_5_36_12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=435, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffe00707f), .match=UINT64_C(0x50000007f), .mnemonic="v_add", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=436, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x150000007f), .mnemonic="v_addi", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=437, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffe00707f), .match=UINT64_C(0x20050000007f), .mnemonic="v_and", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=438, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x20150000007f), .mnemonic="v_andi", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=439, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x60670000007f), .mnemonic="v_bcnt", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="IMML", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=440, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x20670000007f), .mnemonic="v_bic", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="IMML", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=441, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x30670000007f), .mnemonic="v_bis", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="IMML", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=442, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x670000007f), .mnemonic="v_bxs", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="IMML", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=443, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x10670000007f), .mnemonic="v_bxu", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="IMML", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=444, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x50670000007f), .mnemonic="v_clz", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="IMML", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=445, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x20450000007f), .mnemonic="v_cmp_and", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=446, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x20550000007f), .mnemonic="v_cmp_andi", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=447, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x450000007f), .mnemonic="v_cmp_eq", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=448, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x550000007f), .mnemonic="v_cmp_eqi", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=449, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x50450000007f), .mnemonic="v_cmp_ge", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=450, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x50550000007f), .mnemonic="v_cmp_gei", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=451, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x70450000007f), .mnemonic="v_cmp_geu", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=452, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x70550000007f), .mnemonic="v_cmp_geui", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=453, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x40450000007f), .mnemonic="v_cmp_lt", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=454, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x40550000007f), .mnemonic="v_cmp_lti", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=455, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x60450000007f), .mnemonic="v_cmp_ltu", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=456, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x60550000007f), .mnemonic="v_cmp_ltui", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=457, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x10450000007f), .mnemonic="v_cmp_ne", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=458, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x10550000007f), .mnemonic="v_cmp_nei", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=459, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x30450000007f), .mnemonic="v_cmp_or", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=460, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x30550000007f), .mnemonic="v_cmp_ori", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=461, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0600707f), .match=UINT64_C(0x770000007f), .mnemonic="v_csel", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=462, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x40670000007f), .mnemonic="v_ctz", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="IMML", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=463, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x570000007f), .mnemonic="v_div", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=464, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfff0707ffff0707f), .match=UINT64_C(0x7b0000007f), .mnemonic="v_fabs", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=465, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x4b0000007f), .mnemonic="v_fadd", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=466, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfff0707ffff0707f), .match=UINT64_C(0x707b0000007f), .mnemonic="v_fclass", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=467, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707ffff0707f), .match=UINT64_C(0x6b0000007f), .mnemonic="v_fcvt", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=468, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707ffff0707f), .match=UINT64_C(0x106b0000007f), .mnemonic="v_fcvti", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=469, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x304b0000007f), .mnemonic="v_fdiv", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=470, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x5b0000007f), .mnemonic="v_feq", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=471, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x405b0000007f), .mnemonic="v_feqs", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=472, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfff0707ffff0707f), .match=UINT64_C(0x307b0000007f), .mnemonic="v_fexp", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=473, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x305b0000007f), .mnemonic="v_fge", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=474, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x705b0000007f), .mnemonic="v_fges", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=475, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x205b0000007f), .mnemonic="v_flt", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=476, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x605b0000007f), .mnemonic="v_flts", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=477, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707f0600707f), .match=UINT64_C(0x404b0000007f), .mnemonic="v_fmadd", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=478, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x205b0000107f), .mnemonic="v_fmax", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=479, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x305b0000107f), .mnemonic="v_fmin", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=480, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707f0600707f), .match=UINT64_C(0x504b0000007f), .mnemonic="v_fmsub", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=481, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x204b0000007f), .mnemonic="v_fmul", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=482, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x105b0000007f), .mnemonic="v_fne", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=483, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x505b0000007f), .mnemonic="v_fnes", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=484, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707f0600707f), .match=UINT64_C(0x604b0000007f), .mnemonic="v_fnmadd", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=485, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707f0600707f), .match=UINT64_C(0x704b0000007f), .mnemonic="v_fnmsub", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=486, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfff0707ffff0707f), .match=UINT64_C(0x207b0000007f), .mnemonic="v_frecip", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=487, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfff0707ffff0707f), .match=UINT64_C(0x107b0000007f), .mnemonic="v_fsqrt", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=488, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x104b0000007f), .mnemonic="v_fsub", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=489, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707ffff0707f), .match=UINT64_C(0x606b0000007f), .mnemonic="v_icvt", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=490, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707ffff0707f), .match=UINT64_C(0x706b0000007f), .mnemonic="v_icvtf", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=491, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707ffe00207f), .match=UINT64_C(0x90000007f), .mnemonic="v_lb", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=492, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x190000007f), .mnemonic="v_lbi", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=493, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x190000207f), .mnemonic="v_lbi_brg", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=494, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707ffe00207f), .match=UINT64_C(0x40090000007f), .mnemonic="v_lbu", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=495, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x40190000007f), .mnemonic="v_lbui", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=496, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x40190000207f), .mnemonic="v_lbui_brg", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=497, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707ffe00207f), .match=UINT64_C(0x40090000207f), .mnemonic="v_lbu_brg", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=498, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707ffe00207f), .match=UINT64_C(0x90000207f), .mnemonic="v_lb_brg", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=499, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707ffe00207f), .match=UINT64_C(0x30090000007f), .mnemonic="v_ld", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=500, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x30190000007f), .mnemonic="v_ldi", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=501, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x30190000207f), .mnemonic="v_ldi_brg", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=502, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x30290000007f), .mnemonic="v_ldi_u", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=503, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x30290000207f), .mnemonic="v_ldi_u_brg", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=504, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xf800707ffc00707f), .match=UINT64_C(0xb0000207f), .mnemonic="v_ld_add", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=505, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xf800707ffc00707f), .match=UINT64_C(0x100b0000207f), .mnemonic="v_ld_and", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=506, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707ffe00207f), .match=UINT64_C(0x30090000207f), .mnemonic="v_ld_brg", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=507, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xf800707ffc00707f), .match=UINT64_C(0x400b0000207f), .mnemonic="v_ld_max", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=508, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xf800707ffc00707f), .match=UINT64_C(0x500b0000207f), .mnemonic="v_ld_min", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=509, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xf800707ffc00707f), .match=UINT64_C(0x200b0000207f), .mnemonic="v_ld_or", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=510, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xf800707ffc00707f), .match=UINT64_C(0x300b0000207f), .mnemonic="v_ld_xor", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=511, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707ffe00207f), .match=UINT64_C(0x10090000007f), .mnemonic="v_lh", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=512, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x10190000007f), .mnemonic="v_lhi", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=513, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x10190000207f), .mnemonic="v_lhi_brg", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=514, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x10290000007f), .mnemonic="v_lhi_u", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=515, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x10290000207f), .mnemonic="v_lhi_u_brg", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=516, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707ffe00207f), .match=UINT64_C(0x50090000007f), .mnemonic="v_lhu", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=517, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x50190000007f), .mnemonic="v_lhui", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=518, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x50190000207f), .mnemonic="v_lhui_brg", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=519, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x50290000007f), .mnemonic="v_lhui_u", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=520, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x50290000207f), .mnemonic="v_lhui_u_brg", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=521, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707ffe00207f), .match=UINT64_C(0x50090000207f), .mnemonic="v_lhu_brg", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=522, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707ffe00207f), .match=UINT64_C(0x10090000207f), .mnemonic="v_lh_brg", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=523, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707ffe00207f), .match=UINT64_C(0x20090000007f), .mnemonic="v_lw", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=524, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x20190000007f), .mnemonic="v_lwi", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=525, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x20190000207f), .mnemonic="v_lwi_brg", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=526, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x20290000007f), .mnemonic="v_lwi_u", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=527, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x20290000207f), .mnemonic="v_lwi_u_brg", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=528, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707ffe00207f), .match=UINT64_C(0x60090000007f), .mnemonic="v_lwu", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=529, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x60190000007f), .mnemonic="v_lwui", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=530, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x60190000207f), .mnemonic="v_lwui_brg", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=531, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x60290000007f), .mnemonic="v_lwui_u", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=532, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x60290000207f), .mnemonic="v_lwui_u_brg", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=533, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707ffe00207f), .match=UINT64_C(0x60090000207f), .mnemonic="v_lwu_brg", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=534, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xf800707ffc00707f), .match=UINT64_C(0xb0000007f), .mnemonic="v_lw_add", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=535, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xf800707ffc00707f), .match=UINT64_C(0x100b0000007f), .mnemonic="v_lw_and", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=536, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707ffe00207f), .match=UINT64_C(0x20090000207f), .mnemonic="v_lw_brg", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=537, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xf800707ffc00707f), .match=UINT64_C(0x400b0000007f), .mnemonic="v_lw_max", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=538, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xf800707ffc00707f), .match=UINT64_C(0x500b0000007f), .mnemonic="v_lw_min", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=539, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xf800707ffc00707f), .match=UINT64_C(0x200b0000007f), .mnemonic="v_lw_or", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=540, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xf800707ffc00707f), .match=UINT64_C(0x300b0000007f), .mnemonic="v_lw_xor", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=541, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707f0600707f), .match=UINT64_C(0x60470000007f), .mnemonic="v_madd", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=542, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x5b0000107f), .mnemonic="v_max", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=543, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x105b0000107f), .mnemonic="v_min", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=544, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x470000007f), .mnemonic="v_mul", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=545, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffe00707f), .match=UINT64_C(0x30050000007f), .mnemonic="v_or", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=546, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x30150000007f), .mnemonic="v_ori", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=547, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0600707f), .match=UINT64_C(0x10770000007f), .mnemonic="v_psel", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=548, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfff0707ffff0707f), .match=UINT64_C(0xd0000007f), .mnemonic="v_rdadd", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=549, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfff0707ffff0707f), .match=UINT64_C(0x100d0000007f), .mnemonic="v_rdand", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=550, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfff0707ffff0707f), .match=UINT64_C(0x400d0000007f), .mnemonic="v_rdfadd", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=551, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfff0707ffff0707f), .match=UINT64_C(0x200d0000107f), .mnemonic="v_rdfmax", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=552, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfff0707ffff0707f), .match=UINT64_C(0x300d0000107f), .mnemonic="v_rdfmin", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=553, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfff0707ffff0707f), .match=UINT64_C(0xd0000107f), .mnemonic="v_rdmax", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=554, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfff0707ffff0707f), .match=UINT64_C(0x100d0000107f), .mnemonic="v_rdmin", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=555, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfff0707ffff0707f), .match=UINT64_C(0x200d0000007f), .mnemonic="v_rdor", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=556, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfff0707ffff0707f), .match=UINT64_C(0x300d0000007f), .mnemonic="v_rdxor", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=557, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x40570000007f), .mnemonic="v_rem", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=558, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x70670000007f), .mnemonic="v_rev", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="IMML", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=559, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x6007fff0600207f), .match=UINT64_C(0x490000007f), .mnemonic="v_sb", .minor_cat="vector", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=560, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x590000007f), .mnemonic="v_sbi", .minor_cat="vector", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=561, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x590000207f), .mnemonic="v_sbi_brg", .minor_cat="vector", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=562, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x6007fff0600207f), .match=UINT64_C(0x490000207f), .mnemonic="v_sb_brg", .minor_cat="vector", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=563, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x6007fff0600207f), .match=UINT64_C(0x30490000007f), .mnemonic="v_sd", .minor_cat="vector", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=564, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x30590000007f), .mnemonic="v_sdi", .minor_cat="vector", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=565, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x30590000207f), .mnemonic="v_sdi_brg", .minor_cat="vector", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=566, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x70590000007f), .mnemonic="v_sdi_u", .minor_cat="vector", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=567, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x70590000207f), .mnemonic="v_sdi_u_brg", .minor_cat="vector", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=568, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfc007ffff8007fff), .match=UINT64_C(0xb0000307f), .mnemonic="v_sd_add", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=569, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfc007ffff8007fff), .match=UINT64_C(0x100b0000307f), .mnemonic="v_sd_and", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=570, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x6007fff0600207f), .match=UINT64_C(0x30490000207f), .mnemonic="v_sd_brg", .minor_cat="vector", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=571, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfc007ffff8007fff), .match=UINT64_C(0x400b0000307f), .mnemonic="v_sd_max", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=572, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfc007ffff8007fff), .match=UINT64_C(0x500b0000307f), .mnemonic="v_sd_min", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=573, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfc007ffff8007fff), .match=UINT64_C(0x200b0000307f), .mnemonic="v_sd_or", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=574, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x6007fff0600207f), .match=UINT64_C(0x70490000007f), .mnemonic="v_sd_u", .minor_cat="vector", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=575, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x6007fff0600207f), .match=UINT64_C(0x70490000207f), .mnemonic="v_sd_u_brg", .minor_cat="vector", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=576, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfc007ffff8007fff), .match=UINT64_C(0x300b0000307f), .mnemonic="v_sd_xor", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=577, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x6007fff0600207f), .match=UINT64_C(0x10490000007f), .mnemonic="v_sh", .minor_cat="vector", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=578, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x1f0707f01f0707f), .match=UINT64_C(0x602d0000007f), .mnemonic="v_shfli_bfly", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="IMM", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=579, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000707f), .match=UINT64_C(0x502d0000007f), .mnemonic="v_shfli_down", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="IMM", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=580, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000707f), .match=UINT64_C(0x702d0000007f), .mnemonic="v_shfli_idx", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="IMM", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=581, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000707f), .match=UINT64_C(0x402d0000007f), .mnemonic="v_shfli_up", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="IMM", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=582, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x7f0707f07f0707f), .match=UINT64_C(0x201d0000007f), .mnemonic="v_shfl_bfly", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=583, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707f0600707f), .match=UINT64_C(0x101d0000007f), .mnemonic="v_shfl_down", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=584, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707f0600707f), .match=UINT64_C(0x301d0000007f), .mnemonic="v_shfl_idx", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=585, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x600707f0600707f), .match=UINT64_C(0x1d0000007f), .mnemonic="v_shfl_up", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=586, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x10590000007f), .mnemonic="v_shi", .minor_cat="vector", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=587, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x10590000207f), .mnemonic="v_shi_brg", .minor_cat="vector", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=588, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x50590000007f), .mnemonic="v_shi_u", .minor_cat="vector", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=589, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x50590000207f), .mnemonic="v_shi_u_brg", .minor_cat="vector", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=590, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x6007fff0600207f), .match=UINT64_C(0x10490000207f), .mnemonic="v_sh_brg", .minor_cat="vector", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=591, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x6007fff0600207f), .match=UINT64_C(0x50490000007f), .mnemonic="v_sh_u", .minor_cat="vector", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=592, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x6007fff0600207f), .match=UINT64_C(0x50490000207f), .mnemonic="v_sh_u_brg", .minor_cat="vector", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=593, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x70050000007f), .mnemonic="v_sll", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=594, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfc00707ffff0707f), .match=UINT64_C(0x70150000007f), .mnemonic="v_slli", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=595, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x60050000007f), .mnemonic="v_sra", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=596, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfc00707ffff0707f), .match=UINT64_C(0x60150000007f), .mnemonic="v_srai", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=597, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x50050000007f), .mnemonic="v_srl", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=598, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfc00707ffff0707f), .match=UINT64_C(0x50150000007f), .mnemonic="v_srli", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=599, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffe00707f), .match=UINT64_C(0x10050000007f), .mnemonic="v_sub", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=600, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x10150000007f), .mnemonic="v_subi", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="UIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=601, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x6007fff0600207f), .match=UINT64_C(0x20490000007f), .mnemonic="v_sw", .minor_cat="vector", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=602, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x20590000007f), .mnemonic="v_swi", .minor_cat="vector", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=603, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x20590000207f), .mnemonic="v_swi_brg", .minor_cat="vector", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=604, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x60590000007f), .mnemonic="v_swi_u", .minor_cat="vector", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=605, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707f0000207f), .match=UINT64_C(0x60590000207f), .mnemonic="v_swi_u_brg", .minor_cat="vector", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="SIMM24", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=606, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfc007ffff8007fff), .match=UINT64_C(0xb0000107f), .mnemonic="v_sw_add", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=607, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfc007ffff8007fff), .match=UINT64_C(0x100b0000107f), .mnemonic="v_sw_and", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=608, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x6007fff0600207f), .match=UINT64_C(0x20490000207f), .mnemonic="v_sw_brg", .minor_cat="vector", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=609, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfc007ffff8007fff), .match=UINT64_C(0x400b0000107f), .mnemonic="v_sw_max", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=610, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfc007ffff8007fff), .match=UINT64_C(0x500b0000107f), .mnemonic="v_sw_min", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=611, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfc007ffff8007fff), .match=UINT64_C(0x200b0000107f), .mnemonic="v_sw_or", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=612, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x6007fff0600207f), .match=UINT64_C(0x60490000007f), .mnemonic="v_sw_u", .minor_cat="vector", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=613, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x6007fff0600207f), .match=UINT64_C(0x60490000207f), .mnemonic="v_sw_u_brg", .minor_cat="vector", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=614, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0xfc007ffff8007fff), .match=UINT64_C(0x300b0000107f), .mnemonic="v_sw_xor", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=615, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffe00707f), .match=UINT64_C(0x40050000007f), .mnemonic="v_xor", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=616, .major_cat=LINX_CAT_VECTOR, .insn_len=64, .mask=UINT64_C(0x707ffff0707f), .match=UINT64_C(0x40150000007f), .mnemonic="v_xori", .minor_cat="vector", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=617, .major_cat=LINX_CAT_FP_SYS, .insn_len=32, .mask=UINT64_C(0xff0fffff), .match=UINT64_C(0x302b), .mnemonic="acrc", .minor_cat="sys", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=618, .major_cat=LINX_CAT_FP_SYS, .insn_len=32, .mask=UINT64_C(0xff0fffff), .match=UINT64_C(0x100302b), .mnemonic="acre", .minor_cat="sys", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=619, .major_cat=LINX_CAT_FP_SYS, .insn_len=32, .mask=UINT64_C(0xf0ffffff), .match=UINT64_C(0x10102b), .mnemonic="ebreak", .minor_cat="sys", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="IMM4", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=620, .major_cat=LINX_CAT_FP_SYS, .insn_len=32, .mask=UINT64_C(0xf9f0707f), .match=UINT64_C(0x7b), .mnemonic="fabs", .minor_cat="fp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=621, .major_cat=LINX_CAT_FP_SYS, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x4b), .mnemonic="fadd", .minor_cat="fp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=622, .major_cat=LINX_CAT_FP_SYS, .insn_len=32, .mask=UINT64_C(0x1f0707f), .match=UINT64_C(0x6b), .mnemonic="fcvt", .minor_cat="fp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=623, .major_cat=LINX_CAT_FP_SYS, .insn_len=32, .mask=UINT64_C(0x1f0707f), .match=UINT64_C(0x506b), .mnemonic="fcvtz", .minor_cat="fp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=624, .major_cat=LINX_CAT_FP_SYS, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x304b), .mnemonic="fdiv", .minor_cat="fp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=625, .major_cat=LINX_CAT_FP_SYS, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x5b), .mnemonic="feq", .minor_cat="fp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=626, .major_cat=LINX_CAT_FP_SYS, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x305b), .mnemonic="fge", .minor_cat="fp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=627, .major_cat=LINX_CAT_FP_SYS, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x205b), .mnemonic="flt", .minor_cat="fp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=628, .major_cat=LINX_CAT_FP_SYS, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x204b), .mnemonic="fmul", .minor_cat="fp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=629, .major_cat=LINX_CAT_FP_SYS, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x104b), .mnemonic="fsub", .minor_cat="fp", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=630, .major_cat=LINX_CAT_FP_SYS, .insn_len=64, .mask=UINT64_C(0xffff000ff07f000f), .match=UINT64_C(0x3b000e), .mnemonic="hl_ssrget", .minor_cat="sys", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=631, .major_cat=LINX_CAT_FP_SYS, .insn_len=64, .mask=UINT64_C(0xffff00007fff000f), .match=UINT64_C(0x103b000e), .mnemonic="hl_ssrset", .minor_cat="sys", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=632, .major_cat=LINX_CAT_FP_SYS, .insn_len=32, .mask=UINT64_C(0xff07f), .match=UINT64_C(0x3b), .mnemonic="ssrget", .minor_cat="sys", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=633, .major_cat=LINX_CAT_FP_SYS, .insn_len=32, .mask=UINT64_C(0x7fff), .match=UINT64_C(0x103b), .mnemonic="ssrset", .minor_cat="sys", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=634, .major_cat=LINX_CAT_FP_SYS, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x203b), .mnemonic="ssrswap", .minor_cat="sys", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=635, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0x3f), .match=UINT64_C(0x8), .mnemonic="c_add", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=636, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0x3f), .match=UINT64_C(0xc), .mnemonic="c_addi", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM5_11_S5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=637, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0x3f), .match=UINT64_C(0x28), .mnemonic="c_and", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=638, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0xc03f), .match=UINT64_C(0xc03c), .mnemonic="c_b_dim", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=639, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0x3f), .match=UINT64_C(0x3c), .mnemonic="c_b_dimi", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="IMM8", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=640, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0xf83f), .match=UINT64_C(0xc02c), .mnemonic="c_ebreak", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="IMM5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=641, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0x3f), .match=UINT64_C(0x1a), .mnemonic="c_ldi", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM5_11_S5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=642, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0x3f), .match=UINT64_C(0xa), .mnemonic="c_lwi", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM5_11_S5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=643, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0x3f), .match=UINT64_C(0x16), .mnemonic="c_movi", .minor_cat="compressed", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM5_6_S5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=644, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0x3f), .match=UINT64_C(0x6), .mnemonic="c_movr", .minor_cat="compressed", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=645, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0x3f), .match=UINT64_C(0x38), .mnemonic="c_or", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=646, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0x3f), .match=UINT64_C(0x3a), .mnemonic="c_sdi", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM5_11_S5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=647, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0xf83f), .match=UINT64_C(0x5016), .mnemonic="c_setret", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="UIMM5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=647, .major_cat=LINX_CAT_MISC, .insn_len=0, .mask=UINT64_C(0x0), .match=UINT64_C(0x0), .mnemonic="internal_c_setret", .minor_cat="internal", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="internal"}, + {.op_id=648, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0xf83f), .match=UINT64_C(0x401c), .mnemonic="c_sext_b", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=649, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0xf83f), .match=UINT64_C(0x481c), .mnemonic="c_sext_h", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=650, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0xf83f), .match=UINT64_C(0x501c), .mnemonic="c_sext_w", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=651, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0xf83f), .match=UINT64_C(0x102c), .mnemonic="c_slli", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="UIMM5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=652, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0xf83f), .match=UINT64_C(0x182c), .mnemonic="c_srli", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="UIMM5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=653, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0xf83f), .match=UINT64_C(0x802c), .mnemonic="c_ssrget", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=654, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0x3f), .match=UINT64_C(0x18), .mnemonic="c_sub", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=655, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0x3f), .match=UINT64_C(0x2a), .mnemonic="c_swi", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM5_11_S5", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=656, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0xf83f), .match=UINT64_C(0x581c), .mnemonic="c_zext_b", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=657, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0xf83f), .match=UINT64_C(0x601c), .mnemonic="c_zext_h", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=658, .major_cat=LINX_CAT_COMPRESSED, .insn_len=16, .mask=UINT64_C(0xf83f), .match=UINT64_C(0x681c), .mnemonic="c_zext_w", .minor_cat="compressed", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn16.decode"}, + {.op_id=659, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfff07fff), .match=UINT64_C(0x102b), .mnemonic="assert", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=660, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xffffffff), .match=UINT64_C(0x10402b), .mnemonic="bc_iall", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=661, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfff07fff), .match=UINT64_C(0x402b), .mnemonic="bc_iva", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=662, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfff07fff), .match=UINT64_C(0x2b), .mnemonic="bse", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=663, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xffffffff), .match=UINT64_C(0x1), .mnemonic="bstop", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="STOP", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=664, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfff07fff), .match=UINT64_C(0x10002b), .mnemonic="bwe", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=665, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfff07fff), .match=UINT64_C(0x20002b), .mnemonic="bwi", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=666, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfff07fff), .match=UINT64_C(0x30002b), .mnemonic="bwt", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=667, .major_cat=LINX_CAT_MISC, .insn_len=0, .mask=UINT64_C(0x0), .match=UINT64_C(0x0), .mnemonic="internal_c_bstart_std", .minor_cat="internal", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="internal"}, + {.op_id=668, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfff07fff), .match=UINT64_C(0x60602b), .mnemonic="dc_cisw", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=669, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfff07fff), .match=UINT64_C(0x30602b), .mnemonic="dc_civa", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=670, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfff07fff), .match=UINT64_C(0x50602b), .mnemonic="dc_csw", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=671, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfff07fff), .match=UINT64_C(0x20602b), .mnemonic="dc_cva", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=672, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xffffffff), .match=UINT64_C(0x10602b), .mnemonic="dc_iall", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=673, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfff07fff), .match=UINT64_C(0x40602b), .mnemonic="dc_isw", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=674, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfff07fff), .match=UINT64_C(0x602b), .mnemonic="dc_iva", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=675, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfff07fff), .match=UINT64_C(0x70602b), .mnemonic="dc_zva", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=676, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0x1f0707f), .match=UINT64_C(0x106b), .mnemonic="fcvta", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=677, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0x1f0707f), .match=UINT64_C(0x206b), .mnemonic="fcvtm", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=678, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0x1f0707f), .match=UINT64_C(0x306b), .mnemonic="fcvtn", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=679, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0x1f0707f), .match=UINT64_C(0x406b), .mnemonic="fcvtp", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=680, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xf00fffff), .match=UINT64_C(0x202b), .mnemonic="fence_d", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="PRED_IMM", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=681, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xffffffff), .match=UINT64_C(0x1000202b), .mnemonic="fence_i", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=682, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x800005b), .mnemonic="feqs", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=683, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xf9f0707f), .match=UINT64_C(0x307b), .mnemonic="fexp", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=684, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x800305b), .mnemonic="fges", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=685, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x800205b), .mnemonic="flts", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=686, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x404b), .mnemonic="fmadd", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=687, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x605b), .mnemonic="fmax", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=688, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x705b), .mnemonic="fmin", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=689, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x504b), .mnemonic="fmsub", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=690, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x105b), .mnemonic="fne", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=691, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xf800707f), .match=UINT64_C(0x800105b), .mnemonic="fnes", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=692, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x604b), .mnemonic="fnmadd", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=693, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x704b), .mnemonic="fnmsub", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=694, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xf9f0707f), .match=UINT64_C(0x207b), .mnemonic="frecip", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=695, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xf9f0707f), .match=UINT64_C(0x107b), .mnemonic="fsqrt", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=696, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xffffffff), .match=UINT64_C(0x10502b), .mnemonic="ic_iall", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=697, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfff07fff), .match=UINT64_C(0x502b), .mnemonic="ic_iva", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=699, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x37), .mnemonic="j", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM22", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=700, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x6027), .mnemonic="jr", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_7_S5_25_7", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=701, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0xb), .mnemonic="lr_b", .minor_cat="atomic", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=702, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x3000000b), .mnemonic="lr_d", .minor_cat="atomic", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=703, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x1000000b), .mnemonic="lr_h", .minor_cat="atomic", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=704, .major_cat=LINX_CAT_LOAD, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x2000000b), .mnemonic="lr_w", .minor_cat="atomic", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=705, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xff07f), .match=UINT64_C(0x303b), .mnemonic="lsrget", .minor_cat="misc", .rd_kind="REG", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=706, .major_cat=LINX_CAT_MISC, .insn_len=64, .mask=UINT64_C(0x7fff0000007f), .match=UINT64_C(0x30810000000f), .mnemonic="l_bstart_fp", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM42_7_S25_47_17", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=706, .major_cat=LINX_CAT_MISC, .insn_len=64, .mask=UINT64_C(0x7fff0000007f), .match=UINT64_C(0x20810000000f), .mnemonic="l_bstart_fp", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM42_7_S25_47_17", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=706, .major_cat=LINX_CAT_MISC, .insn_len=64, .mask=UINT64_C(0x7fff0000007f), .match=UINT64_C(0x40810000000f), .mnemonic="l_bstart_fp", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM42_7_S25_47_17", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=706, .major_cat=LINX_CAT_MISC, .insn_len=64, .mask=UINT64_C(0x7fff0000007f), .match=UINT64_C(0x10810000000f), .mnemonic="l_bstart_fp", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM42_7_S25_47_17", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=707, .major_cat=LINX_CAT_MISC, .insn_len=64, .mask=UINT64_C(0x7fff0000007f), .match=UINT64_C(0x20010000000f), .mnemonic="l_bstart_std", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM42_7_S25_47_17", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=707, .major_cat=LINX_CAT_MISC, .insn_len=64, .mask=UINT64_C(0x7fff0000007f), .match=UINT64_C(0x40010000000f), .mnemonic="l_bstart_std", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM42_7_S25_47_17", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=707, .major_cat=LINX_CAT_MISC, .insn_len=64, .mask=UINT64_C(0x7fff0000007f), .match=UINT64_C(0x30010000000f), .mnemonic="l_bstart_std", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM42_7_S25_47_17", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=707, .major_cat=LINX_CAT_MISC, .insn_len=64, .mask=UINT64_C(0x7fff0000007f), .match=UINT64_C(0x10010000000f), .mnemonic="l_bstart_std", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM42_7_S25_47_17", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=708, .major_cat=LINX_CAT_MISC, .insn_len=64, .mask=UINT64_C(0x7fff0000007f), .match=UINT64_C(0x10110000000f), .mnemonic="l_bstart_sys", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="SIMM42_7_S25_47_17", .block_kind="BLOCK", .cmd_kind="NONE", .flags="", .source_file="insn64.decode"}, + {.op_id=709, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0x600707f), .match=UINT64_C(0x6047), .mnemonic="madd", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=710, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0x600707f), .match=UINT64_C(0x7047), .mnemonic="maddw", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=711, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x405b), .mnemonic="max", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=712, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x800405b), .mnemonic="maxu", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=713, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x505b), .mnemonic="min", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=714, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfe00707f), .match=UINT64_C(0x800505b), .mnemonic="minu", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=715, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x7009), .mnemonic="prf", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=716, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x7029), .mnemonic="prfi_u", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="SIMM12_20_S12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=717, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0x707f), .match=UINT64_C(0x7067), .mnemonic="rev", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="IMML", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=718, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0x1f0707f), .match=UINT64_C(0x606b), .mnemonic="scvtf", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=719, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x100b), .mnemonic="sc_b", .minor_cat="atomic", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=720, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x3000100b), .mnemonic="sc_d", .minor_cat="atomic", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=721, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x1000100b), .mnemonic="sc_h", .minor_cat="atomic", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=722, .major_cat=LINX_CAT_STORE, .insn_len=32, .mask=UINT64_C(0xf000707f), .match=UINT64_C(0x2000100b), .mnemonic="sc_w", .minor_cat="atomic", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=723, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xf83f000f), .match=UINT64_C(0x50160002), .mnemonic="start_call_32", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="FUSED_CALL_SIMM12", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=724, .major_cat=LINX_CAT_MISC, .insn_len=64, .mask=UINT64_C(0xfffff83f0000007f), .match=UINT64_C(0x501600000011), .mnemonic="start_call_48", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="FUSED_CALL_SIMM25", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn48.decode"}, + {.op_id=725, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfff07fff), .match=UINT64_C(0x702b), .mnemonic="tlb_ia", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=726, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xffffffff), .match=UINT64_C(0x30702b), .mnemonic="tlb_iall", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=727, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfff07fff), .match=UINT64_C(0x20702b), .mnemonic="tlb_iav", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=728, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0xfff07fff), .match=UINT64_C(0x10702b), .mnemonic="tlb_iv", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=729, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0x1f0707f), .match=UINT64_C(0x706b), .mnemonic="ucvtf", .minor_cat="misc", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=730, .major_cat=LINX_CAT_MISC, .insn_len=32, .mask=UINT64_C(0x7fff), .match=UINT64_C(0x6f81), .mnemonic="xb", .minor_cat="misc", .rd_kind="NONE", .rs1_kind="NONE", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="NONE", .flags="", .source_file="insn32.decode"}, + {.op_id=735, .major_cat=LINX_CAT_CMD_PIPE, .insn_len=64, .mask=UINT64_C(0xfff0707ffff0707f), .match=UINT64_C(0x207d0000007f), .mnemonic="v_qpop", .minor_cat="vector_manager", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="NONE", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="Q_POP", .flags="CAPABILITY_FAULT", .source_file="insn64.decode"}, + {.op_id=736, .major_cat=LINX_CAT_CMD_PIPE, .insn_len=64, .mask=UINT64_C(0xfe00707ffe00707f), .match=UINT64_C(0x107d0000007f), .mnemonic="v_qpush", .minor_cat="vector_manager", .rd_kind="REG", .rs1_kind="REG", .rs2_kind="REG", .imm_kind="NONE", .block_kind="NONE", .cmd_kind="Q_PUSH", .flags="CAPABILITY_FAULT", .source_file="insn64.decode"}, }; static const unsigned linx_opcode_meta_table_count = sizeof(linx_opcode_meta_table) / sizeof(linx_opcode_meta_table[0]); diff --git a/target/linx/tile_isa_057.h b/target/linx/tile_isa_057.h new file mode 100644 index 000000000000..79aa8915a3ca --- /dev/null +++ b/target/linx/tile_isa_057.h @@ -0,0 +1,118 @@ +/* + * PTO ISA 0.57.1 tile operation identity tables. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef TARGET_LINX_TILE_ISA_057_H +#define TARGET_LINX_TILE_ISA_057_H + +static inline bool linx_tile_data_type_accepted(uint32_t data_type) +{ + return data_type < 32u && + (UINT32_C(0x1f1f7fff) & (UINT32_C(1) << data_type)) != 0; +} + +static inline bool linx_tile_layout_accepted(uint32_t layout) +{ + return layout < 32u && + (UINT32_C(0x5816035b) & (UINT32_C(1) << layout)) != 0; +} + +/* BSTART.TEPL encodes a two-bit Mode followed by a five-bit Function. */ +static inline bool linx_tile_tepl_selector_accepted(uint32_t selector) +{ + static const uint32_t function_masks[4] = { + UINT32_C(0x0cffffdf), + UINT32_C(0x0c00bfdf), + UINT32_C(0x3fff3fff), + UINT32_C(0x3ffffdff), + }; + const uint32_t mode = selector >> 5; + const uint32_t function = selector & 0x1fu; + + return mode < ARRAY_SIZE(function_masks) && + (function_masks[mode] & (UINT32_C(1) << function)) != 0; +} + +/* CUBE functions outside this mask are reserved by PTO ISA 0.57.1. */ +static inline bool linx_tile_cube_function_accepted(uint32_t function) +{ + return function < 32u && + (UINT32_C(0x00770177) & (UINT32_C(1) << function)) != 0; +} + +enum { + LINX_DATR_SAT = 1u << 0, + LINX_DATR_CANONICALIZE = 1u << 1, + LINX_DATR_DATA_TYPE = 1u << 2, + LINX_DATR_RMODE = 1u << 3, + LINX_DATR_LAYOUT = 1u << 4, + LINX_DATR_PAD_OR_BYTE_ID = 1u << 5, + LINX_DATR_CMODE = 1u << 6, +}; + +static inline uint32_t linx_tile_datr_nonzero_fields(uint32_t packed) +{ + return (((packed >> 28) & 1u) ? LINX_DATR_SAT : 0u) | + (((packed >> 17) & 1u) ? LINX_DATR_CANONICALIZE : 0u) | + (((packed >> 7) & 0x1fu) ? LINX_DATR_DATA_TYPE : 0u) | + (((packed >> 25) & 7u) ? LINX_DATR_RMODE : 0u) | + (((packed >> 2) & 0x1fu) ? LINX_DATR_LAYOUT : 0u) | + (((packed >> 12) & 3u) ? LINX_DATR_PAD_OR_BYTE_ID : 0u) | + (((packed >> 22) & 7u) ? LINX_DATR_CMODE : 0u); +} + +/* Generated from pto-spec spec/catalog/tile-operations.json. */ +static inline uint32_t linx_tile_tepl_datr_allowed(uint32_t selector) +{ + static const uint8_t allowed[128] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00, + 0x24, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x10, 0x10, + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }; + return selector < ARRAY_SIZE(allowed) ? allowed[selector] : 0u; +} + +static inline uint32_t linx_tile_datr_allowed(uint32_t blocktype, + uint32_t function) +{ + switch (blocktype) { + case 2u: /* TMA */ + if (function == 6u) { + return LINX_DATR_LAYOUT | LINX_DATR_PAD_OR_BYTE_ID; + } + return function == 3u ? 0u : LINX_DATR_LAYOUT; + case 6u: /* CUBE */ + return function == 8u ? + LINX_DATR_SAT | LINX_DATR_CANONICALIZE | + LINX_DATR_DATA_TYPE | LINX_DATR_RMODE | LINX_DATR_LAYOUT : 0u; + case 7u: /* TEPL */ + return linx_tile_tepl_datr_allowed(function & 0x7fu); + default: + return 0u; + } +} + +static inline bool linx_tile_datr_applicable(uint32_t blocktype, + uint32_t function, + uint32_t packed) +{ + return (linx_tile_datr_nonzero_fields(packed) & + ~linx_tile_datr_allowed(blocktype, function)) == 0u; +} + +#endif /* TARGET_LINX_TILE_ISA_057_H */ diff --git a/target/linx/tile_tepl_preflight.h b/target/linx/tile_tepl_preflight.h new file mode 100644 index 000000000000..f7e50586726d --- /dev/null +++ b/target/linx/tile_tepl_preflight.h @@ -0,0 +1,184 @@ +/* + * Linx TEPL pre-publish operand checks shared with the native atomicity test. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ +#ifndef LINX_TILE_TEPL_PREFLIGHT_H +#define LINX_TILE_TEPL_PREFLIGHT_H + +#include "cpu.h" + +static inline bool linx_tile_tepl_preflight_resolve_ior( + const CPULinxState *env, unsigned slot, unsigned *reg_out) +{ + static const unsigned shifts[] = { 10u, 5u, 15u, 0u }; + const unsigned count = env->tile_ior_count < LINX_TILE_MAX_IOR + ? env->tile_ior_count + : LINX_TILE_MAX_IOR; + unsigned current = 0; + + if (slot >= LINX_TILE_MAX_IOR) { + return false; + } + for (unsigned i = 0; i < count; i++) { + for (unsigned authored = 0; authored < 4u; authored++) { + const unsigned reg = + (env->tile_ior_desc[i] >> shifts[authored]) & 0x1fu; + + if (reg == 0u) { + continue; + } + if (current++ == slot) { + if (reg >= LINX_GPR_COUNT) { + return false; + } + *reg_out = reg; + return true; + } + } + } + return false; +} + +static inline bool linx_tile_tepl_preflight_shape_covers( + const CPULinxState *env, unsigned tile, uint32_t valid_cols, + uint32_t valid_rows, uint32_t cols, uint32_t rows) +{ + return tile < 32u && env->tile_reg_valid_cols[tile] >= valid_cols && + env->tile_reg_valid_rows[tile] >= valid_rows && + env->tile_reg_cols[tile] == cols && + env->tile_reg_rows[tile] >= rows; +} + +static inline bool linx_tile_tepl_remainder_divisor_nonzero( + uint32_t dtype, unsigned elem_bytes, uint64_t raw) +{ + switch (dtype & 0x1fu) { + case 0u: /* FP64: +0 and -0 are both zero divisors. */ + return (raw & UINT64_C(0x7fffffffffffffff)) != 0u; + case 1u: /* FP32 */ + case 2u: /* TF32 */ + case 3u: /* HF32 */ + return (raw & UINT32_C(0x7fffffff)) != 0u; + default: + if (elem_bytes == 1u) { + return (raw & UINT8_MAX) != 0u; + } + if (elem_bytes == 2u) { + return (raw & UINT16_MAX) != 0u; + } + if (elem_bytes == 4u) { + return (raw & UINT32_MAX) != 0u; + } + return raw != 0u; + } +} + +static inline bool linx_tile_tepl_remainder_tile_divisors_legal( + const CPULinxState *env, unsigned tile, uint32_t dtype, + unsigned elem_bytes, uint32_t valid_cols, uint32_t valid_rows, + uint32_t cols) +{ + const uint8_t *data; + + if (tile >= 32u || elem_bytes == 0u || elem_bytes > sizeof(uint64_t)) { + return false; + } + data = (const uint8_t *)env->tile_reg[tile]; + for (uint32_t row = 0; row < valid_rows; row++) { + for (uint32_t col = 0; col < valid_cols; col++) { + const uint64_t offset = + ((uint64_t)row * cols + col) * elem_bytes; + uint64_t raw = 0u; + + if (offset + elem_bytes > env->tile_reg_bytes[tile]) { + return false; + } + memcpy(&raw, data + offset, elem_bytes); + if (!linx_tile_tepl_remainder_divisor_nonzero( + dtype, elem_bytes, raw)) { + return false; + } + } + } + return true; +} + +/* + * Checks that must happen before output materialization. Remaining + * operation-specific checks are covered by the snapshotted dry execution in + * linx_tile_preflight_tepl(); keeping these high-risk checks here makes them + * independently regression-testable against a real CPULinxState. + */ +static inline bool linx_tile_tepl_pre_publish_legal( + const CPULinxState *env, uint32_t impl, const unsigned *sources, + unsigned source_count, uint32_t dtype, unsigned elem_bytes, + uint32_t valid_cols, uint32_t valid_rows, uint32_t cols, uint32_t rows) +{ + unsigned src0 = source_count > 0u ? sources[0] : 0u; + unsigned src1 = source_count > 1u ? sources[1] : 0u; + bool has_src0 = source_count > 0u; + bool has_src1 = source_count > 1u; + const bool expand = impl == 0x01eu || impl == 0x01fu || + (impl >= 0x03bu && impl <= 0x048u); + const bool partial = impl >= 0x0c3u && impl <= 0x0c6u; + const bool custom_shape = impl == 0x01cu || impl == 0x087u || + impl == 0x089u || impl == 0x085u || + impl == 0x084u || + (impl >= 0x102u && impl <= 0x10bu); + + if (impl == 0x02cu) { + if (source_count < 3u) { + return false; + } + src0 = sources[1]; + src1 = sources[2]; + has_src0 = true; + has_src1 = true; + } else if (impl == 0x034u) { + if (source_count < 2u) { + return false; + } + src0 = sources[1]; + has_src0 = true; + has_src1 = false; + } + + if ((!expand && !partial && !custom_shape && + ((has_src0 && !linx_tile_tepl_preflight_shape_covers( + env, src0, valid_cols, valid_rows, cols, rows)) || + (has_src1 && !linx_tile_tepl_preflight_shape_covers( + env, src1, valid_cols, valid_rows, cols, rows)))) || + (expand && impl >= 0x03bu && + (!has_src0 || !linx_tile_tepl_preflight_shape_covers( + env, src0, valid_cols, valid_rows, cols, rows)))) { + return false; + } + + if (impl == 0x102u) { /* TQUANT */ + unsigned scale_reg; + unsigned zero_reg; + + return has_src0 && !has_src1 && + linx_tile_tepl_preflight_resolve_ior(env, 0u, &scale_reg) && + linx_tile_tepl_preflight_resolve_ior(env, 1u, &zero_reg) && + env->gpr[scale_reg] != 0u; + } + if (impl == 0x030u) { /* TREM */ + return has_src1 && linx_tile_tepl_remainder_tile_divisors_legal( + env, src1, dtype, elem_bytes, valid_cols, + valid_rows, cols); + } + if (impl == 0x032u) { /* TREMS */ + unsigned scalar_reg; + + return env->tile_arg_format == 1u && + linx_tile_tepl_preflight_resolve_ior( + env, 0u, &scalar_reg) && + linx_tile_tepl_remainder_divisor_nonzero( + dtype, elem_bytes, env->gpr[scalar_reg]); + } + return true; +} + +#endif /* LINX_TILE_TEPL_PREFLIGHT_H */ diff --git a/target/linx/tile_transaction.h b/target/linx/tile_transaction.h new file mode 100644 index 000000000000..0885946b15ed --- /dev/null +++ b/target/linx/tile_transaction.h @@ -0,0 +1,56 @@ +/* + * Linx tile descriptor transaction gate. + * + * Keep this header independent of QEMU internals so the exact gate used by + * helper.c can also be exercised by a native unit test. No apply callback is + * entered until every preflight class has succeeded. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ +#ifndef LINX_TILE_TRANSACTION_H +#define LINX_TILE_TRANSACTION_H + +#include + +typedef enum LinxTileTxnFault { + LINX_TILE_TXN_OK = 0, + LINX_TILE_TXN_ILLEGAL, + LINX_TILE_TXN_ALLOCATION, +} LinxTileTxnFault; + +typedef struct LinxTileTxnGate { + bool datr_legal; + bool operands_legal; + bool allocation_available; +} LinxTileTxnGate; + +typedef bool (*LinxTileTxnApplyFn)(void *opaque); + +static inline LinxTileTxnFault +linx_tile_txn_preflight(const LinxTileTxnGate *gate) +{ + if (!gate->datr_legal) { + return LINX_TILE_TXN_ILLEGAL; + } + if (!gate->allocation_available) { + return LINX_TILE_TXN_ALLOCATION; + } + if (!gate->operands_legal) { + return LINX_TILE_TXN_ILLEGAL; + } + return LINX_TILE_TXN_OK; +} + +static inline LinxTileTxnFault +linx_tile_txn_guarded_apply(const LinxTileTxnGate *gate, + LinxTileTxnApplyFn apply, void *opaque) +{ + LinxTileTxnFault fault = linx_tile_txn_preflight(gate); + + if (fault != LINX_TILE_TXN_OK) { + return fault; + } + return apply(opaque) ? LINX_TILE_TXN_OK : LINX_TILE_TXN_ILLEGAL; +} + +#endif /* LINX_TILE_TRANSACTION_H */ diff --git a/target/linx/translate.c b/target/linx/translate.c index e0c92a3a1fe7..0ebd914e07db 100644 --- a/target/linx/translate.c +++ b/target/linx/translate.c @@ -17,6 +17,7 @@ #include "exec/log.h" #include "trace.h" #include "opcode_meta.h" +#include "tile_isa_057.h" #define HELPER_H "helper.h" #include "exec/helper-info.c.inc" @@ -396,14 +397,6 @@ static inline int64_t linx_decode_l_bstart_simm42(uint64_t insn) return high17 * (INT64_C(1) << 25) + (int64_t)low25; } -static inline unsigned linx_tile_relreg_to_id(unsigned relreg) -{ - const unsigned hand = (relreg >> 4) & 0x3u; - const unsigned depth = relreg & 0xfu; - - return (hand * 8u) + depth; -} - static void linx_emit_tile_iot_desc(DisasContext *ctx, uint32_t flags, uint32_t dst, uint32_t grp, uint32_t src0, uint32_t src1, @@ -2075,7 +2068,15 @@ static bool trans_c_bstart_std_ret(DisasContext *ctx, arg_c_bstart_std_ret *a) static bool trans_c_bstart_fp(DisasContext *ctx, arg_c_bstart_fp *a) { - return linx_begin_header_target(ctx, (uint8_t)(a->BrType & 0x7u), 0); + const uint8_t brtype = (uint8_t)((ctx->cur_insn_raw >> 11) & 0x7u); + + (void)a; + return linx_begin_header_target(ctx, brtype, 0); +} + +static bool trans_c_setret(DisasContext *ctx, arg_c_setret *a) +{ + return linx_setret_common(ctx, (int64_t)a->uimm); } static bool trans_c_bstart_direct(DisasContext *ctx, arg_c_bstart_direct *a) @@ -2158,36 +2159,12 @@ static bool trans_c_bstart_mseq(DisasContext *ctx, arg_c_bstart_mseq *a) static bool trans_c_bstart_vpar(DisasContext *ctx, arg_c_bstart_vpar *a) { - vaddr current_pc = ctx->base.pc_next - ctx->cur_insn_len; - (void)a; - if (ctx->in_body) { - return linx_block_fault(ctx, LINX_EBLOCK_LEGACY_ILLEGAL_IN_BODY, 0); - } - if (current_pc != ctx->base.pc_first) { - linx_gen_block_end(ctx, current_pc); - return true; - } - linx_block_begin(ctx, LINX_BR_FALL, 0); - tcg_gen_movi_i32(cpu_blocktype, 4); - ctx->decoupled_header = true; - return true; + return trans_c_bstart_mpar(ctx, (arg_c_bstart_mpar *)a); } static bool trans_c_bstart_vseq(DisasContext *ctx, arg_c_bstart_vseq *a) { - vaddr current_pc = ctx->base.pc_next - ctx->cur_insn_len; - (void)a; - if (ctx->in_body) { - return linx_block_fault(ctx, LINX_EBLOCK_LEGACY_ILLEGAL_IN_BODY, 0); - } - if (current_pc != ctx->base.pc_first) { - linx_gen_block_end(ctx, current_pc); - return true; - } - linx_block_begin(ctx, LINX_BR_FALL, 0); - tcg_gen_movi_i32(cpu_blocktype, 5); - ctx->decoupled_header = true; - return true; + return trans_c_bstart_mseq(ctx, (arg_c_bstart_mseq *)a); } static bool trans_c_bstop(DisasContext *ctx, arg_c_bstop *a) @@ -2352,20 +2329,118 @@ static bool trans_bstart_sys(DisasContext *ctx, arg_bstart_sys *a) return linx_begin_sys_header_target(ctx, 0); } -static bool trans_bstart_fixp(DisasContext *ctx, arg_bstart_fixp *a) -{ - return trans_bstart_tile_common(ctx, a->dtype, a->func & 0x1fu); -} - -static bool trans_bstart_tepl(DisasContext *ctx, arg_bstart_tepl *a) -{ - return trans_bstart_tile_common(ctx, a->dtype, a->op & 0x3ffu); -} +#define LINX_TRANS_TEPL_DIRECT(name, selector) \ + static bool trans_bstart_##name(DisasContext *ctx, \ + arg_bstart_##name *a) \ + { \ + return trans_bstart_tile_common(ctx, a->dtype, selector); \ + } + +LINX_TRANS_TEPL_DIRECT(tadd, 0x000u) +LINX_TRANS_TEPL_DIRECT(tsub, 0x001u) +LINX_TRANS_TEPL_DIRECT(tmul, 0x002u) +LINX_TRANS_TEPL_DIRECT(tmax, 0x00bu) +LINX_TRANS_TEPL_DIRECT(tmin, 0x00cu) +LINX_TRANS_TEPL_DIRECT(tand, 0x006u) +LINX_TRANS_TEPL_DIRECT(tor, 0x007u) +LINX_TRANS_TEPL_DIRECT(txor, 0x008u) +LINX_TRANS_TEPL_DIRECT(tshl, 0x009u) +LINX_TRANS_TEPL_DIRECT(tshr, 0x00au) +LINX_TRANS_TEPL_DIRECT(tcmp, 0x00du) +LINX_TRANS_TEPL_DIRECT(tsel, 0x01au) +LINX_TRANS_TEPL_DIRECT(tabs, 0x00fu) +LINX_TRANS_TEPL_DIRECT(tnot, 0x010u) +LINX_TRANS_TEPL_DIRECT(tneg, 0x011u) +LINX_TRANS_TEPL_DIRECT(trelu, 0x017u) +LINX_TRANS_TEPL_DIRECT(tprelu, 0x00eu) +LINX_TRANS_TEPL_DIRECT(tdiv, 0x003u) +LINX_TRANS_TEPL_DIRECT(trem, 0x004u) +LINX_TRANS_TEPL_DIRECT(tsqrt, 0x015u) +LINX_TRANS_TEPL_DIRECT(tlog, 0x013u) +LINX_TRANS_TEPL_DIRECT(trecip, 0x014u) +LINX_TRANS_TEPL_DIRECT(texp, 0x012u) +LINX_TRANS_TEPL_DIRECT(trsqrt, 0x016u) +LINX_TRANS_TEPL_DIRECT(tadds, 0x020u) +LINX_TRANS_TEPL_DIRECT(taxpy, 0x02fu) +LINX_TRANS_TEPL_DIRECT(tsubs, 0x021u) +LINX_TRANS_TEPL_DIRECT(tmuls, 0x022u) +LINX_TRANS_TEPL_DIRECT(tdivs, 0x023u) +LINX_TRANS_TEPL_DIRECT(tmins, 0x02cu) +LINX_TRANS_TEPL_DIRECT(tmaxs, 0x02bu) +LINX_TRANS_TEPL_DIRECT(trems, 0x024u) +LINX_TRANS_TEPL_DIRECT(tands, 0x026u) +LINX_TRANS_TEPL_DIRECT(tors, 0x027u) +LINX_TRANS_TEPL_DIRECT(txors, 0x028u) +LINX_TRANS_TEPL_DIRECT(tcmps, 0x02du) +LINX_TRANS_TEPL_DIRECT(tsels, 0x03au) +LINX_TRANS_TEPL_DIRECT(tshls, 0x029u) +LINX_TRANS_TEPL_DIRECT(tshrs, 0x02au) +LINX_TRANS_TEPL_DIRECT(trowsum, 0x040u) +LINX_TRANS_TEPL_DIRECT(trowprod, 0x043u) +LINX_TRANS_TEPL_DIRECT(trowmax, 0x041u) +LINX_TRANS_TEPL_DIRECT(trowmin, 0x042u) +LINX_TRANS_TEPL_DIRECT(trowargmax, 0x04cu) +LINX_TRANS_TEPL_DIRECT(trowargmin, 0x04du) +LINX_TRANS_TEPL_DIRECT(tcolsum, 0x050u) +LINX_TRANS_TEPL_DIRECT(tcolprod, 0x053u) +LINX_TRANS_TEPL_DIRECT(tcolmax, 0x051u) +LINX_TRANS_TEPL_DIRECT(tcolmin, 0x052u) +LINX_TRANS_TEPL_DIRECT(tcolargmax, 0x05cu) +LINX_TRANS_TEPL_DIRECT(tcolargmin, 0x05du) +LINX_TRANS_TEPL_DIRECT(trowexpand, 0x044u) +LINX_TRANS_TEPL_DIRECT(trowexpandadd, 0x045u) +LINX_TRANS_TEPL_DIRECT(trowexpandsub, 0x046u) +LINX_TRANS_TEPL_DIRECT(trowexpandmul, 0x047u) +LINX_TRANS_TEPL_DIRECT(trowexpanddiv, 0x048u) +LINX_TRANS_TEPL_DIRECT(trowexpandmax, 0x049u) +LINX_TRANS_TEPL_DIRECT(trowexpandmin, 0x04au) +LINX_TRANS_TEPL_DIRECT(trowexpandexpdif, 0x04bu) +LINX_TRANS_TEPL_DIRECT(tcolexpand, 0x054u) +LINX_TRANS_TEPL_DIRECT(tcolexpandadd, 0x055u) +LINX_TRANS_TEPL_DIRECT(tcolexpandsub, 0x056u) +LINX_TRANS_TEPL_DIRECT(tcolexpandmul, 0x057u) +LINX_TRANS_TEPL_DIRECT(tcolexpanddiv, 0x058u) +LINX_TRANS_TEPL_DIRECT(tcolexpandmax, 0x059u) +LINX_TRANS_TEPL_DIRECT(tcolexpandmin, 0x05au) +LINX_TRANS_TEPL_DIRECT(tcolexpandexpdif, 0x05bu) +LINX_TRANS_TEPL_DIRECT(texpands, 0x03bu) +LINX_TRANS_TEPL_DIRECT(tci, 0x066u) +LINX_TRANS_TEPL_DIRECT(ttri, 0x067u) +LINX_TRANS_TEPL_DIRECT(tfillpad, 0x065u) +LINX_TRANS_TEPL_DIRECT(tcvt, 0x01bu) +LINX_TRANS_TEPL_DIRECT(tquant, 0x06au) +LINX_TRANS_TEPL_DIRECT(tdequant, 0x06bu) +LINX_TRANS_TEPL_DIRECT(textract, 0x062u) +LINX_TRANS_TEPL_DIRECT(tinsert, 0x063u) +LINX_TRANS_TEPL_DIRECT(tgather, 0x06fu) +LINX_TRANS_TEPL_DIRECT(tscatter, 0x070u) +LINX_TRANS_TEPL_DIRECT(tconcat, 0x060u) +LINX_TRANS_TEPL_DIRECT(ttrans, 0x06eu) +LINX_TRANS_TEPL_DIRECT(timg2col, 0x064u) +LINX_TRANS_TEPL_DIRECT(tgatherb, 0x061u) +LINX_TRANS_TEPL_DIRECT(tdeinterleave, 0x078u) +LINX_TRANS_TEPL_DIRECT(tinterleave, 0x079u) +LINX_TRANS_TEPL_DIRECT(treshape, 0x077u) +LINX_TRANS_TEPL_DIRECT(tsort, 0x06cu) +LINX_TRANS_TEPL_DIRECT(tmrgsort, 0x06du) +LINX_TRANS_TEPL_DIRECT(thistogram, 0x068u) +LINX_TRANS_TEPL_DIRECT(tpush, 0x07au) +LINX_TRANS_TEPL_DIRECT(tpop, 0x07bu) +LINX_TRANS_TEPL_DIRECT(talloc, 0x07cu) +LINX_TRANS_TEPL_DIRECT(tfree, 0x07du) +LINX_TRANS_TEPL_DIRECT(tpartadd, 0x071u) +LINX_TRANS_TEPL_DIRECT(tpartmul, 0x072u) +LINX_TRANS_TEPL_DIRECT(tpartmax, 0x073u) +LINX_TRANS_TEPL_DIRECT(tpartmin, 0x074u) +LINX_TRANS_TEPL_DIRECT(tpartargmax, 0x075u) +LINX_TRANS_TEPL_DIRECT(tpartargmin, 0x076u) + +#undef LINX_TRANS_TEPL_DIRECT static bool trans_bstart_tile_common(DisasContext *ctx, uint32_t dtype, uint32_t op) { vaddr current_pc = ctx->base.pc_next - ctx->cur_insn_len; - op &= 0x3ffu; + op &= 0x7fu; dtype &= 0x1fu; if (ctx->in_body) { return linx_block_fault(ctx, LINX_EBLOCK_LEGACY_ILLEGAL_IN_BODY, 0); @@ -2378,48 +2453,20 @@ static bool trans_bstart_tile_common(DisasContext *ctx, uint32_t dtype, uint32_t linx_block_begin(ctx, LINX_BR_FALL, 0); tcg_gen_movi_i32(cpu_tile_dtype, dtype); - /* TMA and CUBE have distinct v0.57 decoders; all TileOp10 values here - * retain their canonical TEPL identity. */ + /* Keep the canonical Mode+Function selector as the architectural ID. */ tcg_gen_movi_i32(cpu_blocktype, 7); /* TEPL */ - tcg_gen_movi_i32(cpu_tile_func, op & 0x3ff); + tcg_gen_movi_i32(cpu_tile_func, op); /* Canonical v0.4 baseline keeps these tile blocks coupled in QEMU. */ ctx->decoupled_header = false; return true; } -static bool trans_bstart_vpar(DisasContext *ctx, arg_bstart_vpar *a) +static bool trans_bstart_tepl(DisasContext *ctx, arg_bstart_tepl *a) { - vaddr current_pc = ctx->base.pc_next - ctx->cur_insn_len; - (void)a; - if (ctx->in_body) { - return linx_block_fault(ctx, LINX_EBLOCK_LEGACY_ILLEGAL_IN_BODY, 0); - } - if (current_pc != ctx->base.pc_first) { - linx_gen_block_end(ctx, current_pc); - return true; - } - linx_block_begin(ctx, LINX_BR_FALL, 0); - tcg_gen_movi_i32(cpu_blocktype, 4); /* VPAR */ - ctx->decoupled_header = true; - return true; -} - -static bool trans_bstart_vseq(DisasContext *ctx, arg_bstart_vseq *a) -{ - vaddr current_pc = ctx->base.pc_next - ctx->cur_insn_len; - (void)a; - if (ctx->in_body) { - return linx_block_fault(ctx, LINX_EBLOCK_LEGACY_ILLEGAL_IN_BODY, 0); - } - if (current_pc != ctx->base.pc_first) { - linx_gen_block_end(ctx, current_pc); - return true; - } - linx_block_begin(ctx, LINX_BR_FALL, 0); - tcg_gen_movi_i32(cpu_blocktype, 5); /* VSEQ */ - ctx->decoupled_header = true; - return true; + return trans_bstart_tile_common(ctx, a->dtype, + ((a->mode & 0x3u) << 5) | + (a->function & 0x1fu)); } static bool trans_bstart_mseq(DisasContext *ctx, arg_bstart_mseq *a) @@ -2456,9 +2503,19 @@ static bool trans_bstart_mpar(DisasContext *ctx, arg_bstart_mpar *a) return true; } -static bool trans_bstart_cube(DisasContext *ctx, arg_bstart_cube *a) +static bool trans_bstart_vpar(DisasContext *ctx, arg_bstart_vpar *a) { - return trans_bstart_tile_func_common(ctx, a->dtype, 6, a->func); + return trans_bstart_mpar(ctx, (arg_bstart_mpar *)a); +} + +static bool trans_bstart_vseq(DisasContext *ctx, arg_bstart_vseq *a) +{ + return trans_bstart_mseq(ctx, (arg_bstart_mseq *)a); +} + +static bool trans_bstart_acccvt(DisasContext *ctx, arg_bstart_acccvt *a) +{ + return trans_bstart_tile_func_common(ctx, a->dtype, 6, 8); } static bool trans_bstart_tload(DisasContext *ctx, arg_bstart_tload *a) @@ -2582,6 +2639,9 @@ static bool trans_bstart_tile_func_common(DisasContext *ctx, uint32_t dtype, uint32_t blocktype, uint32_t func) { vaddr current_pc = ctx->base.pc_next - ctx->cur_insn_len; + if (!linx_tile_data_type_accepted(dtype & 0x1fu)) { + return linx_illegal(ctx); + } if (ctx->in_body) { return linx_block_fault(ctx, LINX_EBLOCK_LEGACY_ILLEGAL_IN_BODY, 0); } @@ -2662,66 +2722,9 @@ static bool trans_b_dim_lb2(DisasContext *ctx, arg_b_dim_lb2 *a) return trans_b_dim_common(ctx, a->reg, a->uimm, 2); } -static bool trans_b_arg(DisasContext *ctx, arg_b_arg *a) -{ - if (ctx->in_body) { - return linx_block_fault(ctx, LINX_EBLOCK_LEGACY_ILLEGAL_IN_BODY, 0); - } - if (ctx->brtype == 0) { - return linx_block_fault(ctx, LINX_EBLOCK_LEGACY_DESC_OUTSIDE_BLOCK, - LINX_BLOCKFMT_FAMILY_ARG); - } - - const uint32_t arg = a->format & 0x1f; - if ((arg & 0x7u) > 4u) { - return linx_illegal(ctx); - } - gen_helper_linx_tile_set_arg(tcg_env, tcg_constant_i32(arg)); - return true; -} - -static bool linx_trans_b_arg_alias(DisasContext *ctx, uint32_t arg) -{ - if (ctx->in_body) { - return linx_block_fault(ctx, LINX_EBLOCK_LEGACY_ILLEGAL_IN_BODY, 0); - } - if (ctx->brtype == 0) { - return linx_block_fault(ctx, LINX_EBLOCK_LEGACY_DESC_OUTSIDE_BLOCK, - LINX_BLOCKFMT_FAMILY_ARG); - } - - gen_helper_linx_tile_set_arg(tcg_env, tcg_constant_i32(arg & 0x1fu)); - return true; -} - -static bool trans_b_arg_norm(DisasContext *ctx, arg_b_arg_norm *a) -{ - return linx_trans_b_arg_alias(ctx, 0u); -} - -static bool trans_b_arg_nz2dn(DisasContext *ctx, arg_b_arg_nz2dn *a) -{ - return linx_trans_b_arg_alias(ctx, 3u); -} - -static bool trans_b_arg_nd2zn(DisasContext *ctx, arg_b_arg_nd2zn *a) -{ - return linx_trans_b_arg_alias(ctx, 2u); -} - -static bool trans_b_arg_dn2nz(DisasContext *ctx, arg_b_arg_dn2nz *a) -{ - return linx_trans_b_arg_alias(ctx, 3u); -} - -static bool trans_b_arg_dn2zn(DisasContext *ctx, arg_b_arg_dn2zn *a) -{ - return linx_trans_b_arg_alias(ctx, 4u); -} - static bool linx_trans_b_iot(DisasContext *ctx, uint32_t flags, uint32_t dst, uint32_t last, uint32_t src0, uint32_t src1, - uint32_t size) + uint32_t size, bool has_output) { if (ctx->in_body) { return linx_block_fault(ctx, LINX_EBLOCK_LEGACY_ILLEGAL_IN_BODY, 0); @@ -2731,13 +2734,9 @@ static bool linx_trans_b_iot(DisasContext *ctx, uint32_t flags, uint32_t dst, LINX_BLOCKFMT_FAMILY_IOT); } - /* - * v0.57 source-only B.IOT forms use DstTile=111 and canonical imm4=0. - * They append ordered input bindings without allocating an output Tile. - * DstTile=111 with a nonzero size remains illegal when the descriptor is - * consumed because it cannot name an output hand. - */ - const bool has_output = !(dst == 7u && size == 0u); + if (has_output && (dst > 3u || size < 3u || size > 9u)) { + return linx_illegal(ctx); + } linx_emit_tile_iot_desc(ctx, flags, dst, last, src0, src1, 0, size, has_output); return true; @@ -2746,6 +2745,7 @@ static bool linx_trans_b_iot(DisasContext *ctx, uint32_t flags, uint32_t dst, static bool trans_b_iot(DisasContext *ctx, arg_b_iot *a) { const uint32_t form = ((uint32_t)ctx->cur_insn_raw >> 12) & 0x7u; + const bool has_output = form == 6u || a->imm4 != 0u || a->dst != 0u; uint32_t flags; if (form == 4u) { flags = ((a->s0r & 1u) << 2) | ((a->s1r & 1u) << 3); @@ -2755,7 +2755,7 @@ static bool trans_b_iot(DisasContext *ctx, arg_b_iot *a) flags = (1u << 0) | (1u << 1); } return linx_trans_b_iot(ctx, flags, a->dst, a->l, a->src0, a->src1, - a->imm4); + a->imm4, has_output); } static bool trans_b_text(DisasContext *ctx, arg_b_text *a) @@ -2826,7 +2826,7 @@ static bool trans_b_catr(DisasContext *ctx, arg_b_catr *a) ((uint32_t)(a->atom & 0x1u) << 19) | ((uint32_t)(a->far & 0x1u) << 20) | ((uint32_t)(a->rl & 0x1u) << 21); - const uint32_t data_mask = 0x1fc1fffcu; + const uint32_t data_mask = 0x1fc3fffcu; tcg_gen_andi_i32(cpu_tile_attr_raw, cpu_tile_attr_raw, data_mask); tcg_gen_ori_i32(cpu_tile_attr_raw, cpu_tile_attr_raw, packed); return true; @@ -2840,18 +2840,24 @@ static bool trans_b_datr(DisasContext *ctx, arg_b_datr *a) if (ctx->brtype == 0) { return linx_block_fault(ctx, LINX_EBLOCK_LEGACY_DESC_OUTSIDE_BLOCK, 0); } + if (a->cmode > 5u || + !linx_tile_data_type_accepted(a->dtype & 0x1fu) || + !linx_tile_layout_accepted(a->layout & 0x1fu)) { + return linx_illegal(ctx); + } const uint32_t packed = ((uint32_t)(a->layout & 0x1fu) << 2) | ((uint32_t)(a->dtype & 0x1fu) << 7) | - ((uint32_t)(a->pad & 0x1fu) << 12) | + ((uint32_t)(a->pad & 0x3u) << 12) | + ((uint32_t)(a->canonicalize & 0x1u) << 17) | ((uint32_t)(a->cmode & 0x7u) << 22) | ((uint32_t)(a->rmode & 0x7u) << 25) | ((uint32_t)(a->sat & 0x1u) << 28); const uint32_t control_mask = 0x003c0003u; tcg_gen_andi_i32(cpu_tile_attr_raw, cpu_tile_attr_raw, control_mask); tcg_gen_ori_i32(cpu_tile_attr_raw, cpu_tile_attr_raw, packed); - tcg_gen_movi_i32(cpu_tile_attr_dtype, a->dtype & 0x1fu); - tcg_gen_movi_i32(cpu_tile_attr_pad, a->pad & 0x1fu); + tcg_gen_movi_i32(cpu_tile_attr_dtype, 0x100u | (a->dtype & 0x1fu)); + tcg_gen_movi_i32(cpu_tile_attr_pad, a->pad & 0x3u); return true; } @@ -6438,6 +6444,112 @@ static bool trans_v_sw_brg(DisasContext *ctx, arg_v_sw_brg *a) return true; } +/* + * The locked 0.57.1 catalog contains an optional long-vector memory/atomic/ + * shuffle profile that the current QEMU execution engine does not advertise. + * Decode every exact form so metadata and disassembly agree, then raise the + * architectural capability fault before any guest-visible mutation. + */ +#define TRANS_V0571_CAPABILITY_FAULT(name) \ + static bool trans_##name(DisasContext *ctx, arg_##name *a) \ + { \ + (void)a; \ + return linx_illegal(ctx); \ + } + +TRANS_V0571_CAPABILITY_FAULT(v_lbi) +TRANS_V0571_CAPABILITY_FAULT(v_lbi_brg) +TRANS_V0571_CAPABILITY_FAULT(v_lbui) +TRANS_V0571_CAPABILITY_FAULT(v_lbui_brg) +TRANS_V0571_CAPABILITY_FAULT(v_ld) +TRANS_V0571_CAPABILITY_FAULT(v_ld_add) +TRANS_V0571_CAPABILITY_FAULT(v_ld_and) +TRANS_V0571_CAPABILITY_FAULT(v_ld_brg) +TRANS_V0571_CAPABILITY_FAULT(v_ld_max) +TRANS_V0571_CAPABILITY_FAULT(v_ld_min) +TRANS_V0571_CAPABILITY_FAULT(v_ld_or) +TRANS_V0571_CAPABILITY_FAULT(v_ld_xor) +TRANS_V0571_CAPABILITY_FAULT(v_ldi) +TRANS_V0571_CAPABILITY_FAULT(v_ldi_brg) +TRANS_V0571_CAPABILITY_FAULT(v_ldi_u) +TRANS_V0571_CAPABILITY_FAULT(v_ldi_u_brg) +TRANS_V0571_CAPABILITY_FAULT(v_lhi) +TRANS_V0571_CAPABILITY_FAULT(v_lhi_brg) +TRANS_V0571_CAPABILITY_FAULT(v_lhi_u) +TRANS_V0571_CAPABILITY_FAULT(v_lhi_u_brg) +TRANS_V0571_CAPABILITY_FAULT(v_lhui) +TRANS_V0571_CAPABILITY_FAULT(v_lhui_brg) +TRANS_V0571_CAPABILITY_FAULT(v_lhui_u) +TRANS_V0571_CAPABILITY_FAULT(v_lhui_u_brg) +TRANS_V0571_CAPABILITY_FAULT(v_lw_add) +TRANS_V0571_CAPABILITY_FAULT(v_lw_and) +TRANS_V0571_CAPABILITY_FAULT(v_lw_max) +TRANS_V0571_CAPABILITY_FAULT(v_lw_min) +TRANS_V0571_CAPABILITY_FAULT(v_lw_or) +TRANS_V0571_CAPABILITY_FAULT(v_lw_xor) +TRANS_V0571_CAPABILITY_FAULT(v_lwi) +TRANS_V0571_CAPABILITY_FAULT(v_lwi_brg) +TRANS_V0571_CAPABILITY_FAULT(v_lwi_u) +TRANS_V0571_CAPABILITY_FAULT(v_lwi_u_brg) +TRANS_V0571_CAPABILITY_FAULT(v_lwu) +TRANS_V0571_CAPABILITY_FAULT(v_lwu_brg) +TRANS_V0571_CAPABILITY_FAULT(v_lwui) +TRANS_V0571_CAPABILITY_FAULT(v_lwui_brg) +TRANS_V0571_CAPABILITY_FAULT(v_lwui_u) +TRANS_V0571_CAPABILITY_FAULT(v_lwui_u_brg) +TRANS_V0571_CAPABILITY_FAULT(v_qpop) +TRANS_V0571_CAPABILITY_FAULT(v_qpush) +TRANS_V0571_CAPABILITY_FAULT(v_sbi) +TRANS_V0571_CAPABILITY_FAULT(v_sbi_brg) +TRANS_V0571_CAPABILITY_FAULT(v_sd) +TRANS_V0571_CAPABILITY_FAULT(v_sd_add) +TRANS_V0571_CAPABILITY_FAULT(v_sd_and) +TRANS_V0571_CAPABILITY_FAULT(v_sd_brg) +TRANS_V0571_CAPABILITY_FAULT(v_sd_max) +TRANS_V0571_CAPABILITY_FAULT(v_sd_min) +TRANS_V0571_CAPABILITY_FAULT(v_sd_or) +TRANS_V0571_CAPABILITY_FAULT(v_sd_u) +TRANS_V0571_CAPABILITY_FAULT(v_sd_u_brg) +TRANS_V0571_CAPABILITY_FAULT(v_sd_xor) +TRANS_V0571_CAPABILITY_FAULT(v_sdi) +TRANS_V0571_CAPABILITY_FAULT(v_sdi_brg) +TRANS_V0571_CAPABILITY_FAULT(v_sdi_u) +TRANS_V0571_CAPABILITY_FAULT(v_sdi_u_brg) +TRANS_V0571_CAPABILITY_FAULT(v_sh_u) +TRANS_V0571_CAPABILITY_FAULT(v_sh_u_brg) +TRANS_V0571_CAPABILITY_FAULT(v_shfl_bfly) +TRANS_V0571_CAPABILITY_FAULT(v_shfl_down) +TRANS_V0571_CAPABILITY_FAULT(v_shfl_idx) +TRANS_V0571_CAPABILITY_FAULT(v_shfl_up) +TRANS_V0571_CAPABILITY_FAULT(v_shfli_bfly) +TRANS_V0571_CAPABILITY_FAULT(v_shfli_down) +TRANS_V0571_CAPABILITY_FAULT(v_shfli_idx) +TRANS_V0571_CAPABILITY_FAULT(v_shfli_up) +TRANS_V0571_CAPABILITY_FAULT(v_shi) +TRANS_V0571_CAPABILITY_FAULT(v_shi_brg) +TRANS_V0571_CAPABILITY_FAULT(v_shi_u) +TRANS_V0571_CAPABILITY_FAULT(v_shi_u_brg) +TRANS_V0571_CAPABILITY_FAULT(v_sw_add) +TRANS_V0571_CAPABILITY_FAULT(v_sw_and) +TRANS_V0571_CAPABILITY_FAULT(v_sw_max) +TRANS_V0571_CAPABILITY_FAULT(v_sw_min) +TRANS_V0571_CAPABILITY_FAULT(v_sw_or) +TRANS_V0571_CAPABILITY_FAULT(v_sw_u) +TRANS_V0571_CAPABILITY_FAULT(v_sw_u_brg) +TRANS_V0571_CAPABILITY_FAULT(v_sw_xor) +TRANS_V0571_CAPABILITY_FAULT(v_swi) +TRANS_V0571_CAPABILITY_FAULT(v_swi_brg) +TRANS_V0571_CAPABILITY_FAULT(v_swi_u) +TRANS_V0571_CAPABILITY_FAULT(v_swi_u_brg) + +#undef TRANS_V0571_CAPABILITY_FAULT + +static bool trans_xb(DisasContext *ctx, arg_xb *a) +{ + (void)a; + return linx_illegal(ctx); +} + /* ===================== PC-relative Instructions ===================== */ static bool trans_addtpc(DisasContext *ctx, arg_addtpc *a) diff --git a/tests/linxisa/pto-0571-cube-profile-gaps.json b/tests/linxisa/pto-0571-cube-profile-gaps.json new file mode 100644 index 000000000000..b4baf7aba79b --- /dev/null +++ b/tests/linxisa/pto-0571-cube-profile-gaps.json @@ -0,0 +1,35 @@ +{ + "schema_version": 2, + "release": "0.57.1", + "profile_id": "pto-hardware-numeric-0.57.1-ieee-v1", + "status": "normative-truth-complete-qemu-non-s32-cube-unimplemented", + "truth_identity": { + "pto_spec_commit": "0141ec89ff1e222adfe1df55610f414ca0c8c086", + "hardware_profile_sha256": "becfbefcc7a31408e5e5293802493f833f68a2fccebb3f9e8008d8b9f4e7658c", + "numeric_vectors_sha256": "b9f908deb9cfec412388e95f4532563cf4e462032b43d15996f0f7b4b93b4ec9" + }, + "truth_sources": { + "hardware_profile": "spec/hardware-conformance-profile.json", + "numeric_vectors": "spec/evidence/pto-isa-0571-hardware-numeric-vectors.json" + }, + "normative_contract": { + "ordinary_type_rows": 24, + "mx_ordered_operand_pairs": 8, + "physical_acc_types": ["FP64", "FP32", "S64", "U64"], + "mx_acc_type": "FP32", + "mx_scale_type": "E8M0", + "mx_scale_block_logical_k": 32, + "numeric_vector_cases": 75 + }, + "qemu_implementation_gap": { + "currently_executable_cube_profile": "S32 ordinary matrix only", + "missing": [ + "the other 23 ordinary DataType rows", + "all 8 ordered MX operand pairs and E8M0 scale-before-FMA behavior", + "typed physical ACC and logical bias behavior", + "ACCCVT rounding/publication evidence for every accepted destination type", + "execution of all 75 canonical hardware numeric vector cases" + ], + "conformance_claim": "unproven" + } +} diff --git a/tests/linxisa/test_v0571_tile_execution_coverage.py b/tests/linxisa/test_v0571_tile_execution_coverage.py new file mode 100644 index 000000000000..6ddb0d7a9bdf --- /dev/null +++ b/tests/linxisa/test_v0571_tile_execution_coverage.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python3 +"""Generated-contract coverage for PTO ISA 0.57.1 tile execution.""" + +import pathlib +import re +import unittest + + +ROOT = pathlib.Path(__file__).resolve().parents[2] +HELPER = (ROOT / "target/linx/helper.c").read_text() +HEADER = (ROOT / "target/linx/tile_isa_057.h").read_text() + + +class TileExecutionCoverage(unittest.TestCase): + def test_every_accepted_tepl_selector_has_an_executable_mapping(self): + masks_match = re.search( + r"function_masks\[4\]\s*=\s*\{(.*?)\};", HEADER, re.S + ) + self.assertIsNotNone(masks_match) + masks = [int(x, 16) for x in re.findall(r"0x([0-9a-f]+)", masks_match.group(1))] + accepted = { + mode * 32 + function + for mode, mask in enumerate(masks) + for function in range(32) + if mask & (1 << function) + } + mapping_body = re.search( + r"linx_tile_tepl_impl_selector\(.*?\)\s*\{(.*?)\n\}", HELPER, re.S + ).group(1) + mappings = { + int(selector, 16): int(implementation, 16) + for selector, implementation in re.findall( + r"case 0x([0-9a-f]+)u:.*?return 0x([0-9a-f]+)u;", + mapping_body, + ) + } + executable_body = re.search( + r"linx_tile_tepl_impl_selector_executable\(.*?\)\s*\{(.*?)\n\}", + HELPER, + re.S, + ).group(1) + executable = { + int(value, 16) + for value in re.findall(r"case 0x([0-9a-f]+)u:", executable_body) + } + selector_body = re.search( + r"linx_tile_tepl_selector_executable\(.*?\)\s*\{(.*?)\n\}", + HELPER, + re.S, + ).group(1) + executable_selectors = { + int(value, 16) + for value in re.findall(r"case 0x([0-9a-f]+)u:", selector_body) + } + self.assertEqual(98, len(accepted)) + self.assertEqual(accepted, mappings.keys()) + self.assertEqual(accepted, executable_selectors) + self.assertEqual(set(), set(mappings.values()) - executable) + + def test_all_cube_functions_have_execution_cases(self): + cube_body = re.search( + r"linx_tile_cube_function_accepted\(.*?\n\}", HEADER, re.S + ).group(0) + accepted_mask = int(re.search(r"0x([0-9a-f]+)", cube_body).group(1), 16) + accepted = {bit for bit in range(32) if accepted_mask & (1 << bit)} + enum_body = re.search(r"enum \{\s*LINX_CUBE_TMATMUL(.*?)\n\};", HELPER, re.S).group(0) + enum_values = { + int(value) + for value in re.findall(r"LINX_CUBE_[A-Z0-9_]+\s*=\s*(\d+)", enum_body) + } + self.assertEqual({0, 1, 2, 4, 5, 6, 8, 16, 17, 18, 20, 21, 22}, accepted) + self.assertEqual(accepted, enum_values) + for name in re.findall(r"(LINX_CUBE_[A-Z0-9_]+)\s*=", enum_body): + self.assertRegex(HELPER, rf"case {name}:") + + def test_implicit_acc_and_catalog_datr_guards_are_executable_contracts(self): + collector = re.search( + r"linx_tile_collect_cube_sources\(.*?\n\}", HELPER, re.S + ).group(0) + self.assertIn("ACC is implicit", collector) + self.assertIn("if (d.has_size)", collector) + self.assertIn("return false", collector) + self.assertIn("linx_tile_datr_applicable", HELPER) + self.assertIn("Generated from pto-spec", HEADER) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/linxisa/test_v0571_tile_numeric_layout_contract.py b/tests/linxisa/test_v0571_tile_numeric_layout_contract.py new file mode 100644 index 000000000000..75b78e218fd2 --- /dev/null +++ b/tests/linxisa/test_v0571_tile_numeric_layout_contract.py @@ -0,0 +1,118 @@ +#!/usr/bin/env python3 +"""Source-derived guards for PTO ISA 0.57.1 numeric/layout contracts.""" + +from pathlib import Path +import re +import unittest + + +ROOT = Path(__file__).resolve().parents[2] +HELPER = (ROOT / "target/linx/helper.c").read_text(encoding="utf-8") +TRANSLATE = (ROOT / "target/linx/translate.c").read_text(encoding="utf-8") + + +class V0571TileNumericLayoutContract(unittest.TestCase): + def test_all_13_layout_codes_have_exact_source_destination_pairs(self): + body = re.search( + r"linx_tile_decode_datr_layout\(.*?\n\}", HELPER, re.S + ).group(0) + expected = { + 0: ("ND", "ND"), 1: ("ND", "DN"), + 3: ("ND", "ZN"), 4: ("ND", "NZ"), + 6: ("DN", "ND"), 8: ("DN", "ZN"), + 9: ("DN", "NZ"), 17: ("ZN", "ND"), + 18: ("ZN", "DN"), 20: ("ZN", "NZ"), + 27: ("NZ", "ND"), 28: ("NZ", "DN"), + 30: ("NZ", "ZN"), + } + observed = { + int(code): (src, dst) + for code, src, dst in re.findall( + r"case (\d+)u:\s+d\.src = LINX_TILE_LAYOUT_(\w+);\s+" + r"d\.dst = LINX_TILE_LAYOUT_(\w+);", + body, + ) + } + self.assertEqual(expected, observed) + + def test_blocked_layouts_use_16_by_32_byte_cells(self): + self.assertIn("MAX(1u, 32u / elem_bytes)", HELPER) + self.assertIn("const unsigned blk_outer = 16u", HELPER) + self.assertIn("LINX_TILE_CELL_BYTES 128u", (ROOT / "target/linx/cpu.h").read_text()) + + def test_all_rounding_codes_decode_and_cmode_order_is_normative(self): + datr = re.search(r"static bool trans_b_datr\(.*?\n\}", TRANSLATE, re.S).group(0) + self.assertNotIn("rmode >", datr) + cmp_body = re.search(r"linx_tile_tcmp_lane\(.*?\n\}", HELPER, re.S).group(0) + order = [ + ("0u", "EQ"), ("1u", "NE"), ("2u", "LT"), + ("3u", "GT"), ("4u", "LE"), ("5u", "GE"), + ] + for code, name in order: + self.assertIn(f"case {code}: /* {name} */", cmp_body) + + def test_canonical_nan_table_matches_hardware_profile(self): + for literal in ( + "0x7fc00000u", "0x7e00u", "0x7fc0u", "0x7fu", "0x7eu", + "0x1eu", "0x1cu", "0x7u", "0x6u", "0xffu", + ): + self.assertIn(literal, HELPER) + self.assertIn("Every produced NaN is canonical", HELPER) + + def test_64_bit_tile_memory_carriers_are_not_truncated(self): + for symbol in ( + "linx_tile_mem_read64", "linx_tile_mem_write64", + "linx_tile_set_elem64", "linx_tile_get_elem64", + ): + self.assertIn(symbol, HELPER) + self.assertIn("address_space_ldq_le", HELPER) + self.assertIn("address_space_stq_le", HELPER) + + def test_capacity_is_separate_from_migration_backing_shape(self): + cpu_h = (ROOT / "target/linx/cpu.h").read_text(encoding="utf-8") + self.assertIn("LINX_TILE_PE_CAPACITY_BYTES (256u * 1024u)", cpu_h) + self.assertIn("LINX_TILE_MAX_BYTES (64u * 1024u)", cpu_h) + self.assertIn("tile_reg_capacity[32]", cpu_h) + self.assertIn("capacity > LINX_TILE_PE_CAPACITY_BYTES", HELPER) + self.assertNotIn("capacity > LINX_TILE_MAX_BYTES", HELPER) + self.assertIn("in_use + capacity > LINX_TILE_PE_CAPACITY_BYTES", HELPER) + self.assertIn("linx_tile_raise_allocation_fault(env)", HELPER) + + def test_datr_and_cube_auxiliary_operands_preflight_before_effects(self): + append = re.search( + r"void HELPER\(linx_tile_append_iot\).*?\n\}", HELPER, re.S + ).group(0) + commit = re.search( + r"void HELPER\(linx_tile_commit\).*?\n\}", HELPER, re.S + ).group(0) + + # Append is descriptor-only staging: no pin, reservation, backing, or + # ACC state may become architecturally visible before commit. + for mutation in ( + "linx_tile_pin_source", "tile_hand_reserved[hand] |=", + "tile_reg_capacity[", "tile_acc[", + ): + self.assertNotIn(mutation, append) + apply_gate = "linx_tile_txn_guarded_apply" + self.assertLess(commit.index("linx_tile_datr_applicable"), + commit.index(apply_gate)) + self.assertLess(commit.index("linx_tile_preflight_cube"), + commit.index(apply_gate)) + self.assertLess(commit.index("linx_tile_preflight_talloc"), + commit.index(apply_gate)) + + def test_fp64_s64_u64_have_executable_tepl_carriers(self): + for literal in ( + "LINX_TILE_DTYPE_MASK(0u)", + "LINX_TILE_DTYPE_MASK(16u)", + "LINX_TILE_DTYPE_MASK(24u)", + "0x7ff8000000000000", + ): + self.assertIn(literal, HELPER.lower() if literal.startswith("0x") else HELPER) + self.assertIn("linx_tile_tepl_binary_qword", HELPER) + self.assertIn("linx_tile_tepl_convert64", HELPER) + self.assertIn("elem_bytes != 8u", HELPER) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/linxisa/test_v0571_tile_raw_contract.py b/tests/linxisa/test_v0571_tile_raw_contract.py new file mode 100644 index 000000000000..f47d301e121b --- /dev/null +++ b/tests/linxisa/test_v0571_tile_raw_contract.py @@ -0,0 +1,102 @@ +#!/usr/bin/env python3 +"""Exact raw-encoding guards for the PTO ISA 0.57.1 tile contract.""" + +from pathlib import Path +import re +import unittest + + +ROOT = Path(__file__).resolve().parents[2] +TARGET = ROOT / "target" / "linx" + + +class V0571TileRawContractTest(unittest.TestCase): + @classmethod + def setUpClass(cls) -> None: + cls.decode = (TARGET / "insn32.decode").read_text(encoding="utf-8") + cls.meta = (TARGET / "linx_opcode_meta_gen.h").read_text(encoding="utf-8") + cls.helper = (TARGET / "helper.c").read_text(encoding="utf-8") + cls.translate = (TARGET / "translate.c").read_text(encoding="utf-8") + cls.table = (TARGET / "tile_isa_057.h").read_text(encoding="utf-8") + + def test_tepl_mode_function_raw_contract(self) -> None: + self.assertIn("%Mode 25:2", self.decode) + self.assertIn("%TileFunc 20:5", self.decode) + self.assertNotIn("TileOp10", self.decode) + # The 0.57.1 consumer exposes each accepted TEPL selector as a direct + # decode form. DType remains the only wildcard in those forms. + direct_tepl = [line for line in self.decode.splitlines() + if line.lstrip().startswith("bstart_t") and + "dtype=%TileDataType" in line and + not line.lstrip().startswith(( + "bstart_tepl", "bstart_tload", "bstart_tstore", + "bstart_tmov", "bstart_tprefetch", + "bstart_tmatmul", "bstart_tgemv"))] + self.assertEqual(98, len(direct_tepl)) + self.assertIn(".mask=UINT64_C(0x7ffffff)", self.meta) + self.assertIn(".match=UINT64_C(0x19181)", self.meta) + + def test_tepl_acceptance_is_98_of_128(self) -> None: + function_table = self.table.split("function_masks[4] = {", 1)[1] + function_table = function_table.split("};", 1)[0] + masks = [int(value, 16) for value in re.findall( + r"UINT32_C\(0x([0-9a-f]{8})\)", function_table + )] + self.assertEqual(len(masks), 4) + self.assertEqual(sum(mask.bit_count() for mask in masks), 98) + self.assertEqual(128 - sum(mask.bit_count() for mask in masks), 30) + + def test_b_iot_has_all_five_canonical_forms(self) -> None: + patterns = [line for line in self.decode.splitlines() + if line.lstrip().startswith("b_iot ")] + self.assertEqual(len(patterns), 5) + for field in ( + "%IOTDstTile 7:3", + "%IOTL 19:1", + "%IOTS0R 10:1", + "%IOTS1R 11:1", + "%IOTSrc0 20:6", + "%IOTSrc1 26:6", + "%IOTImm4 15:4", + ): + self.assertIn(field, self.decode) + for mask, match in ( + ("0xfc00787f", "0x5013"), + ("0x707f", "0x4013"), + ("0xfc07fbff", "0x5013"), + ("0xfff07c7f", "0x6013"), + ("0x7f3ff", "0x4013"), + ): + self.assertIn(f".mask=UINT64_C({mask})", self.meta) + self.assertIn(f".match=UINT64_C({match})", self.meta) + + def test_attribute_raw_contracts(self) -> None: + for mask, match in ( + ("0xfbf07fff", "0x23"), + ("0xc707f", "0x1023"), + ): + self.assertIn(f".mask=UINT64_C({mask})", self.meta) + self.assertIn(f".match=UINT64_C({match})", self.meta) + self.assertIn("%BA_Canonicalize 25:1", self.decode) + self.assertIn("%BA_PadValue 27:2", self.decode) + self.assertIn("UINT32_C(0x1f1f7fff)", self.table) + self.assertIn("UINT32_C(0x5816035b)", self.table) + + def test_tma_31_compatibility_is_deleted(self) -> None: + self.assertNotIn("TCVT_COMPAT", self.helper) + + def test_cube_is_fail_closed_to_13_functions(self) -> None: + self.assertIn("UINT32_C(0x00770177)", self.table) + cube_names = ( + "tmatmul", "tmatmul_bias", "tmatmul_acc", "tmatmulmx", + "tmatmulmx_bias", "tmatmulmx_acc", "tgemv", "tgemv_bias", + "tgemv_acc", "tgemvmx", "tgemvmx_bias", "tgemvmx_acc", + "acccvt", + ) + for name in cube_names: + self.assertRegex(self.decode, rf"(?m)^\s*bstart_{name}\s") + self.assertIn(f"trans_bstart_{name}", self.translate) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/linxisa/test_v057_b_iot_source_only.py b/tests/linxisa/test_v057_b_iot_source_only.py index 2bf7ac1c4b29..7e15967b6e0e 100644 --- a/tests/linxisa/test_v057_b_iot_source_only.py +++ b/tests/linxisa/test_v057_b_iot_source_only.py @@ -1,8 +1,7 @@ #!/usr/bin/env python3 -"""Regression checks for v0.57 source-only B.IOT descriptor semantics.""" +"""Regression checks for canonical PTO ISA 0.57.1 B.IOT forms.""" from pathlib import Path -import re import unittest @@ -12,16 +11,19 @@ class V057BIOTSourceOnlyTest(unittest.TestCase): - def test_dst_tile_seven_and_zero_size_suppress_output(self) -> None: + def test_source_only_forms_have_no_magic_destination(self) -> None: text = TRANSLATE.read_text(encoding="utf-8") - self.assertRegex( + self.assertIn( + "const bool has_output = form == 6u || a->imm4 != 0u || " + "a->dst != 0u;", text, - re.compile( - r"const bool has_output = !\(dst == 7u && size == 0u\);" - r".*?linx_emit_tile_iot_desc\(ctx, flags, dst, last, src0, src1," - r" 0, size,\s*has_output\);", - re.S, - ), + ) + self.assertNotIn("dst == 7u", text) + + def test_output_constraints_are_canonical(self) -> None: + text = TRANSLATE.read_text(encoding="utf-8") + self.assertIn( + "has_output && (dst > 3u || size < 3u || size > 9u)", text ) def test_source_only_descriptor_skips_tile_allocation(self) -> None: diff --git a/tests/unit/meson.build b/tests/unit/meson.build index bd5802906010..901807d9aae9 100644 --- a/tests/unit/meson.build +++ b/tests/unit/meson.build @@ -1,5 +1,12 @@ testblock = declare_dependency(dependencies: [block], sources: 'iothread.c') +linx_tile_test_target = declare_dependency( + include_directories: include_directories('../../target/linx'), + compile_args: [ + '-DCOMPILING_PER_TARGET', + '-DCONFIG_TARGET="linx64-softmmu-config-target.h"', + ], +) tests = { 'check-block-qdict': [], @@ -48,6 +55,7 @@ tests = { 'test-qapi-util': [], 'test-interval-tree': [], 'test-fifo': [], + 'test-linx-tile-transaction': [linx_tile_test_target], } if have_system or have_tools diff --git a/tests/unit/test-linx-tile-transaction.c b/tests/unit/test-linx-tile-transaction.c new file mode 100644 index 000000000000..4a2b0980bb06 --- /dev/null +++ b/tests/unit/test-linx-tile-transaction.c @@ -0,0 +1,339 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#include "qemu/osdep.h" +#include "target/linx/cpu.h" +#include "target/linx/tile_tepl_preflight.h" +#include "target/linx/tile_transaction.h" + +typedef struct VisibleTileState { + uint8_t hand_reserved[4]; + uint16_t pin_owner[32]; + uint32_t acc_bytes; + uint32_t acc_head[16]; + uint32_t tile_bytes[32]; + uint32_t tile_head[32]; +} VisibleTileState; + +typedef struct VisibleCPUTileState { + uint8_t hand_live[LINX_TILE_HAND_COUNT]; + uint8_t hand_reserved[LINX_TILE_HAND_COUNT]; + uint8_t hand_order[LINX_TILE_HAND_COUNT][LINX_TILE_HAND_DEPTH]; + uint8_t hand_count[LINX_TILE_HAND_COUNT]; + uint16_t pin_owner[LINX_TILE_HAND_COUNT * LINX_TILE_HAND_DEPTH]; + uint8_t acc_carrier_valid; + uint8_t acc_carrier; + uint8_t acc_sources_valid; + uint8_t acc_src0; + uint8_t acc_src1; + uint32_t acc[LINX_TILE_MAX_WORDS]; + uint32_t acc_bytes; + uint32_t tile[32][LINX_TILE_MAX_WORDS]; + uint32_t tile_capacity[32]; + uint32_t tile_bytes[32]; + uint8_t tile_elem_bytes[32]; + uint8_t tile_dtype[32]; + uint16_t tile_valid_cols[32]; + uint16_t tile_valid_rows[32]; + uint16_t tile_cols[32]; + uint16_t tile_rows[32]; +} VisibleCPUTileState; + +static void capture_cpu_visible_state(const CPULinxState *env, + VisibleCPUTileState *visible) +{ + memcpy(visible->hand_live, env->tile_hand_live, + sizeof(visible->hand_live)); + memcpy(visible->hand_reserved, env->tile_hand_reserved, + sizeof(visible->hand_reserved)); + memcpy(visible->hand_order, env->tile_hand_order, + sizeof(visible->hand_order)); + memcpy(visible->hand_count, env->tile_hand_count, + sizeof(visible->hand_count)); + memcpy(visible->pin_owner, env->tile_pin_owner, + sizeof(visible->pin_owner)); + visible->acc_carrier_valid = env->tile_acc_carrier_valid; + visible->acc_carrier = env->tile_acc_carrier; + visible->acc_sources_valid = env->tile_acc_sources_valid; + visible->acc_src0 = env->tile_acc_src0; + visible->acc_src1 = env->tile_acc_src1; + memcpy(visible->acc, env->tile_acc, sizeof(visible->acc)); + visible->acc_bytes = env->tile_acc_bytes; + memcpy(visible->tile, env->tile_reg, sizeof(visible->tile)); + memcpy(visible->tile_capacity, env->tile_reg_capacity, + sizeof(visible->tile_capacity)); + memcpy(visible->tile_bytes, env->tile_reg_bytes, + sizeof(visible->tile_bytes)); + memcpy(visible->tile_elem_bytes, env->tile_reg_elem_bytes, + sizeof(visible->tile_elem_bytes)); + memcpy(visible->tile_dtype, env->tile_reg_dtype, + sizeof(visible->tile_dtype)); + memcpy(visible->tile_valid_cols, env->tile_reg_valid_cols, + sizeof(visible->tile_valid_cols)); + memcpy(visible->tile_valid_rows, env->tile_reg_valid_rows, + sizeof(visible->tile_valid_rows)); + memcpy(visible->tile_cols, env->tile_reg_cols, + sizeof(visible->tile_cols)); + memcpy(visible->tile_rows, env->tile_reg_rows, + sizeof(visible->tile_rows)); +} + +static CPULinxState *new_atomicity_env(void) +{ + CPULinxState *env = g_new0(CPULinxState, 1); + + env->tile_hand_live[0] = 0x3u; + env->tile_hand_reserved[0] = 0x8u; + env->tile_hand_order[0][0] = 1u; + env->tile_hand_order[0][1] = 0u; + env->tile_hand_count[0] = 2u; + env->tile_pin_owner[0] = 0x1u; + env->tile_acc_carrier_valid = 1u; + env->tile_acc_carrier = 1u; + env->tile_acc_sources_valid = 1u; + env->tile_acc_src0 = 0u; + env->tile_acc_src1 = 1u; + env->tile_acc_bytes = 128u; + env->tile_acc[0] = 0xacc0571u; + env->tile_reg_capacity[3] = 128u; + env->tile_reg_bytes[3] = 128u; + env->tile_reg_elem_bytes[3] = 4u; + env->tile_reg_dtype[3] = 17u; + env->tile_reg_valid_cols[3] = 4u; + env->tile_reg_valid_rows[3] = 2u; + env->tile_reg_cols[3] = 4u; + env->tile_reg_rows[3] = 8u; + env->tile_reg[3][0] = 0x5710571u; + return env; +} + +static void assert_cpu_visible_state_unchanged( + const CPULinxState *env, const VisibleCPUTileState *before) +{ + VisibleCPUTileState *after = g_new(VisibleCPUTileState, 1); + + capture_cpu_visible_state(env, after); + g_assert_cmpmem(after, sizeof(*after), before, sizeof(*before)); + g_free(after); +} + +static bool mutate_visible_state(void *opaque) +{ + VisibleTileState *state = opaque; + + state->hand_reserved[0] |= 1u; + state->pin_owner[3] = 1u; + state->acc_bytes = 256u; + state->acc_head[0] = 0xacc0571u; + state->tile_bytes[3] = 256u; + state->tile_head[3] = 0x5710571u; + return true; +} + +static bool mutate_cpu_visible_state(void *opaque) +{ + CPULinxState *env = opaque; + + env->tile_hand_live[0] = 0xffu; + env->tile_hand_reserved[0] = 0xffu; + env->tile_pin_owner[0] = 0xffffu; + env->tile_acc[0] = 0xdeadc0deu; + env->tile_acc_bytes = 256u; + env->tile_reg[3][0] = 0xbad0571u; + env->tile_reg_bytes[3] = 256u; + return true; +} + +static void assert_rejected_without_state_change(const LinxTileTxnGate *gate, + LinxTileTxnFault expected) +{ + VisibleTileState state = { + .hand_reserved = { 0x2u, 0x4u, 0x1u, 0x8u }, + .pin_owner = { [3] = 0x20u }, + .acc_bytes = 128u, + .acc_head = { 0x11111111u, 0x22222222u }, + .tile_bytes = { [3] = 128u }, + .tile_head = { [3] = 0x33333333u }, + }; + const VisibleTileState before = state; + + g_assert_cmpint(linx_tile_txn_guarded_apply( + gate, mutate_visible_state, &state), ==, expected); + g_assert_cmpmem(&state, sizeof(state), &before, sizeof(before)); +} + +static void test_invalid_datr_is_atomic(void) +{ + const LinxTileTxnGate gate = { false, true, true }; + assert_rejected_without_state_change(&gate, LINX_TILE_TXN_ILLEGAL); +} + +static void test_invalid_cube_operand_is_atomic(void) +{ + const LinxTileTxnGate gate = { true, false, true }; + assert_rejected_without_state_change(&gate, LINX_TILE_TXN_ILLEGAL); +} + +static void test_allocation_failure_is_atomic(void) +{ + const LinxTileTxnGate gate = { true, true, false }; + assert_rejected_without_state_change(&gate, LINX_TILE_TXN_ALLOCATION); +} + +static void test_valid_transaction_applies_once(void) +{ + const LinxTileTxnGate gate = { true, true, true }; + VisibleTileState state = { 0 }; + + g_assert_cmpint(linx_tile_txn_guarded_apply( + &gate, mutate_visible_state, &state), ==, + LINX_TILE_TXN_OK); + g_assert_cmpuint(state.acc_bytes, ==, 256u); + g_assert_cmphex(state.tile_head[3], ==, 0x5710571u); +} + +static void test_tepl_invalid_shape_is_atomic(void) +{ + CPULinxState *env = new_atomicity_env(); + VisibleCPUTileState *before = g_new(VisibleCPUTileState, 1); + const unsigned sources[2] = { 0u, 1u }; + + env->tile_reg_valid_cols[0] = 4u; + env->tile_reg_valid_rows[0] = 1u; /* Output requires two rows. */ + env->tile_reg_cols[0] = 4u; + env->tile_reg_rows[0] = 1u; + env->tile_reg_valid_cols[1] = 4u; + env->tile_reg_valid_rows[1] = 2u; + env->tile_reg_cols[1] = 4u; + env->tile_reg_rows[1] = 2u; + capture_cpu_visible_state(env, before); + + g_assert_false(linx_tile_tepl_pre_publish_legal( + env, 0x000u, sources, 2u, 17u, 4u, 4u, 2u, 4u, 2u)); + assert_cpu_visible_state_unchanged(env, before); + g_free(before); + g_free(env); +} + +static void test_tepl_missing_tquant_scale_is_atomic(void) +{ + CPULinxState *env = new_atomicity_env(); + VisibleCPUTileState *before = g_new(VisibleCPUTileState, 1); + const unsigned sources[1] = { 0u }; + + capture_cpu_visible_state(env, before); + g_assert_false(linx_tile_tepl_pre_publish_legal( + env, 0x102u, sources, 1u, 17u, 4u, 4u, 2u, 4u, 2u)); + assert_cpu_visible_state_unchanged(env, before); + g_free(before); + g_free(env); +} + +static void test_tepl_zero_tquant_scale_is_atomic(void) +{ + CPULinxState *env = new_atomicity_env(); + VisibleCPUTileState *before = g_new(VisibleCPUTileState, 1); + const unsigned sources[1] = { 0u }; + + /* Authored RI order resolves slot 0 to r2 and slot 1 to r3. */ + env->tile_ior_count = 1u; + env->tile_ior_desc[0] = (2u << 10) | (3u << 5); + env->gpr[2] = 0u; + env->gpr[3] = 7u; + capture_cpu_visible_state(env, before); + + g_assert_false(linx_tile_tepl_pre_publish_legal( + env, 0x102u, sources, 1u, 17u, 4u, 4u, 2u, 4u, 2u)); + assert_cpu_visible_state_unchanged(env, before); + g_free(before); + g_free(env); +} + +static void test_tepl_trem_zero_tile_divisor_is_atomic(void) +{ + CPULinxState *env = new_atomicity_env(); + VisibleCPUTileState *before = g_new(VisibleCPUTileState, 1); + const unsigned sources[2] = { 0u, 1u }; + LinxTileTxnGate gate = { .datr_legal = true, + .allocation_available = true }; + + for (unsigned tile = 0; tile < 2u; tile++) { + env->tile_reg_capacity[tile] = 32u; + env->tile_reg_bytes[tile] = 32u; + env->tile_reg_elem_bytes[tile] = 4u; + env->tile_reg_dtype[tile] = 17u; + env->tile_reg_valid_cols[tile] = 4u; + env->tile_reg_valid_rows[tile] = 2u; + env->tile_reg_cols[tile] = 4u; + env->tile_reg_rows[tile] = 2u; + for (unsigned lane = 0; lane < 8u; lane++) { + env->tile_reg[tile][lane] = lane + 1u; + } + } + env->tile_reg[1][5] = 0u; + capture_cpu_visible_state(env, before); + gate.operands_legal = linx_tile_tepl_pre_publish_legal( + env, 0x030u, sources, 2u, 17u, 4u, 4u, 2u, 4u, 2u); + + g_assert_cmpint(linx_tile_txn_guarded_apply( + &gate, mutate_cpu_visible_state, env), ==, + LINX_TILE_TXN_ILLEGAL); + assert_cpu_visible_state_unchanged(env, before); + g_free(before); + g_free(env); +} + +static void test_tepl_trems_zero_scalar_is_atomic(void) +{ + CPULinxState *env = new_atomicity_env(); + VisibleCPUTileState *before = g_new(VisibleCPUTileState, 1); + const unsigned sources[1] = { 0u }; + LinxTileTxnGate gate = { .datr_legal = true, + .allocation_available = true }; + + env->tile_reg_capacity[0] = 32u; + env->tile_reg_bytes[0] = 32u; + env->tile_reg_elem_bytes[0] = 4u; + env->tile_reg_dtype[0] = 17u; + env->tile_reg_valid_cols[0] = 4u; + env->tile_reg_valid_rows[0] = 2u; + env->tile_reg_cols[0] = 4u; + env->tile_reg_rows[0] = 2u; + env->tile_arg_format = 1u; + env->tile_ior_count = 1u; + env->tile_ior_desc[0] = 2u << 10; + env->gpr[2] = 0u; + capture_cpu_visible_state(env, before); + gate.operands_legal = linx_tile_tepl_pre_publish_legal( + env, 0x032u, sources, 1u, 17u, 4u, 4u, 2u, 4u, 2u); + + g_assert_cmpint(linx_tile_txn_guarded_apply( + &gate, mutate_cpu_visible_state, env), ==, + LINX_TILE_TXN_ILLEGAL); + assert_cpu_visible_state_unchanged(env, before); + g_free(before); + g_free(env); +} + +int main(int argc, char **argv) +{ + g_test_init(&argc, &argv, NULL); + g_test_add_func("/linx/tile-transaction/invalid-datr", + test_invalid_datr_is_atomic); + g_test_add_func("/linx/tile-transaction/invalid-cube-operand", + test_invalid_cube_operand_is_atomic); + g_test_add_func("/linx/tile-transaction/allocation-failure", + test_allocation_failure_is_atomic); + g_test_add_func("/linx/tile-transaction/valid", + test_valid_transaction_applies_once); + g_test_add_func("/linx/tile-transaction/tepl-invalid-shape", + test_tepl_invalid_shape_is_atomic); + g_test_add_func("/linx/tile-transaction/tepl-missing-tquant-scale", + test_tepl_missing_tquant_scale_is_atomic); + g_test_add_func("/linx/tile-transaction/tepl-zero-tquant-scale", + test_tepl_zero_tquant_scale_is_atomic); + g_test_add_func("/linx/tile-transaction/tepl-trem-zero-tile-divisor", + test_tepl_trem_zero_tile_divisor_is_atomic); + g_test_add_func("/linx/tile-transaction/tepl-trems-zero-scalar", + test_tepl_trems_zero_scalar_is_atomic); + return g_test_run(); +} From f58b6db1af3b4dff1a06b4558d9c585c0117da2b Mon Sep 17 00:00:00 2001 From: RuoyuZhou Date: Fri, 31 Jul 2026 03:46:23 +0800 Subject: [PATCH 2/6] Make QEMU a numeric oracle for the complete 0.57.1 CUBE profile Execute every ordinary and microscaled matrix type through a shared production core, preserve implicit ACC transactionally, and make ACCCVT rounding, saturation, NaN, signed-zero, and packed-lane behavior deterministic with QEMU SoftFloat. Constraint: PTO-ISA/pto-spec 0141ec89 is the sole normative source and freezes 24 ordinary rows, 8 MX ordered pairs, and 75 canonical numeric vectors. Rejected: Host fma/nearbyint implementation | architectural results changed with the host floating-point environment. Rejected: Shared-header vector tests alone | they did not exercise CPULinxState publication, shape metadata, or production fault behavior. Confidence: high Scope-risk: broad Directive: Keep CUBE and ACCCVT arithmetic in tile_cube_057.c and extend the native production test whenever the numeric profile changes. Tested: linx32+linx64 system builds; production numeric 9/9; transaction 9/9; v0.57 Python 19/19 including 75/75 canonical vectors; external PTO 11/11; checkpatch; git diff --check; three independent review rounds Not-tested: one guest assembly program for every individual 24 ordinary and 8 MX combination; production-core matrix tests cover all combinations directly --- target/linx/cpu.c | 31 +- target/linx/cpu.h | 16 + target/linx/helper.c | 352 +++----- target/linx/meson.build | 1 + target/linx/tile_cube_057.c | 402 +++++++++ target/linx/tile_cube_057.h | 15 + target/linx/tile_numeric_057.h | 791 ++++++++++++++++++ tests/linxisa/pto-0571-cube-profile-gaps.json | 27 +- ...pto-isa-0571-hardware-numeric-vectors.json | 667 +++++++++++++++ .../test_v0571_hardware_numeric_vectors.py | 232 +++++ tests/unit/meson.build | 8 + tests/unit/test-linx-tile-cube-numeric.c | 516 ++++++++++++ tests/unit/test-linx-tile-transaction.c | 12 + 13 files changed, 2817 insertions(+), 253 deletions(-) create mode 100644 target/linx/tile_cube_057.c create mode 100644 target/linx/tile_cube_057.h create mode 100644 target/linx/tile_numeric_057.h create mode 100644 tests/linxisa/pto-isa-0571-hardware-numeric-vectors.json create mode 100644 tests/linxisa/test_v0571_hardware_numeric_vectors.py create mode 100644 tests/unit/test-linx-tile-cube-numeric.c diff --git a/target/linx/cpu.c b/target/linx/cpu.c index 2bd2bde611cc..0e50b807993d 100644 --- a/target/linx/cpu.c +++ b/target/linx/cpu.c @@ -4004,6 +4004,10 @@ static bool linx_cpu_post_load(void *opaque, int version_id, Error **errp) memset(env->tile_reg_rows, 0, sizeof(env->tile_reg_rows)); memset(env->tile_acc, 0, sizeof(env->tile_acc)); env->tile_acc_bytes = 0; + env->tile_acc_dtype = 0; + env->tile_acc_valid = 0; + env->tile_acc_cols = 0; + env->tile_acc_rows = 0; return true; } @@ -4060,6 +4064,18 @@ static bool linx_cpu_post_load(void *opaque, int version_id, Error **errp) memset(env->tile_reg_cols, 0, sizeof(env->tile_reg_cols)); memset(env->tile_reg_rows, 0, sizeof(env->tile_reg_rows)); } + if (version_id < 17) { + if (env->tile_acc_bytes != 0) { + error_setg(errp, + "linx: cannot migrate nonempty pre-v17 CUBE ACC " + "without numeric type and shape metadata"); + return false; + } + env->tile_acc_dtype = 0; + env->tile_acc_valid = 0; + env->tile_acc_cols = 0; + env->tile_acc_rows = 0; + } if (env->tile_ior_count > LINX_TILE_MAX_IOR || env->vec_ri_count > LINX_VEC_RI_MAX || @@ -4078,7 +4094,14 @@ static bool linx_cpu_post_load(void *opaque, int version_id, Error **errp) return false; } if (env->tile_acc_bytes > LINX_TILE_MAX_BYTES || - (env->tile_acc_bytes & 3u) != 0) { + (env->tile_acc_bytes & 3u) != 0 || env->tile_acc_valid > 1u || + (!env->tile_acc_valid && (env->tile_acc_bytes != 0u || + env->tile_acc_cols != 0u || + env->tile_acc_rows != 0u)) || + (env->tile_acc_valid && + ((env->tile_acc_dtype != 0u && env->tile_acc_dtype != 1u && + env->tile_acc_dtype != 16u && env->tile_acc_dtype != 24u) || + env->tile_acc_cols == 0u || env->tile_acc_rows == 0u))) { error_setg(errp, "linx: invalid migrated tile accumulator footprint"); return false; } @@ -4212,7 +4235,7 @@ static bool linx_cpu_post_load(void *opaque, int version_id, Error **errp) static const VMStateDescription vmstate_linx_cpu = { .name = "linx_cpu", - .version_id = 16, + .version_id = 17, .minimum_version_id = 11, .pre_save = linx_cpu_pre_save, .post_load_errp = linx_cpu_post_load, @@ -4316,6 +4339,10 @@ static const VMStateDescription vmstate_linx_cpu = { VMSTATE_UINT32_ARRAY_V(env.tile_acc, LinxCPU, LINX_TILE_MAX_WORDS, 12), VMSTATE_UINT32_V(env.tile_acc_bytes, LinxCPU, 12), + VMSTATE_UINT8_V(env.tile_acc_dtype, LinxCPU, 17), + VMSTATE_UINT8_V(env.tile_acc_valid, LinxCPU, 17), + VMSTATE_UINT16_V(env.tile_acc_cols, LinxCPU, 17), + VMSTATE_UINT16_V(env.tile_acc_rows, LinxCPU, 17), VMSTATE_UINT64(env.insn_pc_next, LinxCPU), VMSTATE_UINT64_ARRAY(env.ssr, LinxCPU, LINX_SSR_COUNT), VMSTATE_UINT64_2DARRAY(env.ssr_acr, LinxCPU, LINX_ACR_COUNT, LINX_SSR_COUNT), diff --git a/target/linx/cpu.h b/target/linx/cpu.h index fdb58fa54b9d..1fef47fed61b 100644 --- a/target/linx/cpu.h +++ b/target/linx/cpu.h @@ -308,6 +308,10 @@ typedef struct LinxAcrBlockState { /* CUBE ACC is implicit architectural state and follows its ACR. */ uint32_t tile_acc[LINX_TILE_MAX_WORDS]; uint32_t tile_acc_bytes; + uint8_t tile_acc_dtype; + uint8_t tile_acc_valid; + uint16_t tile_acc_cols; + uint16_t tile_acc_rows; } LinxAcrBlockState; typedef struct LinxCosimRange { @@ -461,6 +465,10 @@ typedef struct CPUArchState { /* Accumulator backing store (separate scratch). */ uint32_t tile_acc[LINX_TILE_MAX_WORDS]; uint32_t tile_acc_bytes; + uint8_t tile_acc_dtype; + uint8_t tile_acc_valid; + uint16_t tile_acc_cols; + uint16_t tile_acc_rows; /* Current block start marker address (BPC) for trap reporting. */ uint64_t bpc; @@ -847,6 +855,10 @@ static inline void linx_acr_save_block_state(CPULinxState *env, uint32_t acr) } memcpy(s->tile_acc, env->tile_acc, sizeof(s->tile_acc)); s->tile_acc_bytes = env->tile_acc_bytes; + s->tile_acc_dtype = env->tile_acc_dtype; + s->tile_acc_valid = env->tile_acc_valid; + s->tile_acc_cols = env->tile_acc_cols; + s->tile_acc_rows = env->tile_acc_rows; } static inline void linx_acr_reset_block_state_for_header(CPULinxState *env, @@ -968,6 +980,10 @@ static inline void linx_acr_restore_block_state(CPULinxState *env, uint32_t acr) } memcpy(env->tile_acc, s->tile_acc, sizeof(env->tile_acc)); env->tile_acc_bytes = s->tile_acc_bytes; + env->tile_acc_dtype = s->tile_acc_dtype; + env->tile_acc_valid = s->tile_acc_valid; + env->tile_acc_cols = s->tile_acc_cols; + env->tile_acc_rows = s->tile_acc_rows; } /* diff --git a/target/linx/helper.c b/target/linx/helper.c index 62048c621538..f7a243116105 100644 --- a/target/linx/helper.c +++ b/target/linx/helper.c @@ -21,6 +21,8 @@ enum { #include "trace.h" #include "opcode_meta.h" #include "tile_isa_057.h" +#include "tile_numeric_057.h" +#include "tile_cube_057.h" #include "exec/helper-proto.h" #include "exec/log.h" #include "accel/tcg/cpu-ldst.h" @@ -13872,8 +13874,7 @@ static bool linx_tile_tepl64_core_op(uint32_t op) static inline bool linx_tile_cube_dtype_supported(uint32_t dtype) { - /* The executable CUBE profile is exact S32; reject other profiles early. */ - return (dtype & 0x1fu) == 17u; + return linx_tile_numeric_ordinary(dtype); } static inline uint32_t linx_tile_effective_dtype(const CPULinxState *env) @@ -15142,237 +15143,78 @@ static void linx_tile_mgather_cas(CPULinxState *env, unsigned dst_tile, } } -static void linx_tile_tmatmul(CPULinxState *env, unsigned src_a, unsigned src_b, - unsigned size_code) +static inline unsigned linx_tile_cube_dim(uint32_t value) { - if (src_a >= 32 || src_b >= 32) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; - } - - const unsigned m = env->lb[0] ? MIN((unsigned)env->lb[0], 8u) : 8u; - const unsigned n = env->lb[1] ? MIN((unsigned)env->lb[1], 8u) : 8u; - const unsigned kdim = env->lb[2] ? MIN((unsigned)env->lb[2], 8u) : 8u; - - const uint64_t bytes64 = (size_code < 60u) ? (1ull << (size_code + 4u)) : 0ull; - if (bytes64 == 0 || bytes64 > LINX_TILE_MAX_BYTES || (bytes64 & 3u) != 0) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; - } - env->tile_acc_bytes = (uint32_t)bytes64; - const unsigned words = (unsigned)(bytes64 / 4u); - - for (unsigned i = 0; i < m; i++) { - for (unsigned j = 0; j < n; j++) { - int64_t acc = 0; - for (unsigned k = 0; k < kdim; k++) { - const int32_t a = (int32_t)env->tile_reg[src_a][i * 8u + k]; - const int32_t b = (int32_t)env->tile_reg[src_b][k * 8u + j]; - acc += (int64_t)a * (int64_t)b; - } - env->tile_acc[i * 8u + j] = (uint32_t)(int32_t)acc; - } - } - - /* Zero the rest of the accumulator for determinism. */ - for (unsigned i = 0; i < 8; i++) { - for (unsigned j = 0; j < 8; j++) { - if (i < m && j < n) { - continue; - } - env->tile_acc[i * 8u + j] = 0; - } - } - for (unsigned i = 64; i < words && i < LINX_TILE_MAX_WORDS; i++) { - env->tile_acc[i] = 0; - } + return value ? value : 8u; } -static bool linx_tile_tmatmul_bias(CPULinxState *env, unsigned src_a, - unsigned src_b, unsigned bias, - unsigned size_code) +static bool linx_tile_cube_operand_legal(const CPULinxState *env, + unsigned tile, uint32_t dtype, + unsigned rows, unsigned cols) { - const unsigned m = env->lb[0] ? MIN((unsigned)env->lb[0], 8u) : 8u; - const unsigned n = env->lb[1] ? MIN((unsigned)env->lb[1], 8u) : 8u; - const unsigned kdim = env->lb[2] ? MIN((unsigned)env->lb[2], 8u) : 8u; + unsigned elem_bytes = linx_tile_dtype_elem_bytes(dtype); + uint64_t row_bytes; - /* - * The current CUBE execution model is an INT32, contiguous 8x8 - * compatibility profile. Keep the bias variant on that same closed - * profile until the packed S8 and floating-point CUBE layouts are - * architecturally available to QEMU. - */ - if ((env->tile_dtype & 0x1fu) != 17u || src_a >= 32u || src_b >= 32u || - bias >= 32u || env->tile_reg_dtype[src_a] != 17u || - env->tile_reg_dtype[src_b] != 17u || - env->tile_reg_dtype[bias] != 17u || - env->tile_reg_elem_bytes[src_a] != 4u || - env->tile_reg_elem_bytes[src_b] != 4u || - env->tile_reg_elem_bytes[bias] != 4u || - env->tile_reg_bytes[src_a] < m * 8u * 4u || - env->tile_reg_bytes[src_b] < kdim * 8u * 4u || - env->tile_reg_bytes[bias] < n * 4u || - env->tile_reg_valid_rows[bias] != 1u || - env->tile_reg_valid_cols[bias] < n || - env->tile_reg_cols[bias] < n) { + if (tile >= 32u || elem_bytes == 0u || + env->tile_reg_dtype[tile] != (dtype & 31u) || + env->tile_reg_elem_bytes[tile] != elem_bytes || + env->tile_reg_valid_rows[tile] < rows || + env->tile_reg_valid_cols[tile] < cols || + env->tile_reg_rows[tile] < rows || + env->tile_reg_cols[tile] < cols) { return false; } - - linx_tile_tmatmul(env, src_a, src_b, size_code); - for (unsigned i = 0; i < m; i++) { - for (unsigned j = 0; j < n; j++) { - const int32_t product = (int32_t)env->tile_acc[i * 8u + j]; - const int32_t bias_value = (int32_t)env->tile_reg[bias][j]; - env->tile_acc[i * 8u + j] = - (uint32_t)(int32_t)((int64_t)product + bias_value); - } - } - return true; + row_bytes = linx_tile_numeric_is_packed(dtype) ? + (env->tile_reg_cols[tile] + 1u) / 2u : + (uint64_t)env->tile_reg_cols[tile] * elem_bytes; + return rows == 0u || + (uint64_t)env->tile_reg_bytes[tile] >= + (uint64_t)(rows - 1u) * row_bytes + + (linx_tile_numeric_is_packed(dtype) ? + (cols + 1u) / 2u : (uint64_t)cols * elem_bytes); } static bool linx_tile_cube_scale_legal(const CPULinxState *env, unsigned row_scale, unsigned column_scale) { - const unsigned m = env->lb[0] ? MIN((unsigned)env->lb[0], 8u) : 8u; - const unsigned n = env->lb[1] ? MIN((unsigned)env->lb[1], 8u) : 8u; - - return row_scale < 32u && column_scale < 32u && - env->tile_reg_dtype[row_scale] == 17u && - env->tile_reg_dtype[column_scale] == 17u && - env->tile_reg_elem_bytes[row_scale] == 4u && - env->tile_reg_elem_bytes[column_scale] == 4u && - env->tile_reg_valid_rows[row_scale] >= m && - env->tile_reg_valid_cols[row_scale] >= 1u && - env->tile_reg_cols[row_scale] >= 1u && - env->tile_reg_bytes[row_scale] >= - ((m - 1u) * env->tile_reg_cols[row_scale] + 1u) * 4u && - env->tile_reg_valid_rows[column_scale] >= 1u && - env->tile_reg_valid_cols[column_scale] >= n && - env->tile_reg_cols[column_scale] >= n && - env->tile_reg_bytes[column_scale] >= n * 4u; -} - -static bool linx_tile_cube_scale_acc(CPULinxState *env, unsigned row_scale, - unsigned column_scale) -{ - const unsigned m = env->lb[0] ? MIN((unsigned)env->lb[0], 8u) : 8u; - const unsigned n = env->lb[1] ? MIN((unsigned)env->lb[1], 8u) : 8u; - - g_assert(linx_tile_cube_scale_legal(env, row_scale, column_scale)); - for (unsigned i = 0; i < m; i++) { - for (unsigned j = 0; j < n; j++) { - uint32_t row_word = 0, column_word = 0; - if (!linx_tile_get_elem(env, row_scale, - i * env->tile_reg_cols[row_scale], 4u, - &row_word) || - !linx_tile_get_elem(env, column_scale, j, 4u, - &column_word)) { - return false; - } - const int64_t scaled = (int64_t)(int32_t)env->tile_acc[i * 8u + j] * - (int32_t)row_word * (int32_t)column_word; - env->tile_acc[i * 8u + j] = (uint32_t)(int32_t)scaled; - } - } - return true; + const unsigned m = linx_tile_cube_dim(env->lb[0]); + const unsigned n = linx_tile_cube_dim(env->lb[1]); + const unsigned k = linx_tile_cube_dim(env->lb[2]); + const unsigned groups = (k + 31u) / 32u; + + return linx_tile_cube_operand_legal(env, row_scale, 13u, m, groups) && + linx_tile_cube_operand_legal(env, column_scale, 13u, groups, n); } -static bool linx_tile_cube_bias_legal(const CPULinxState *env, unsigned bias) +static bool linx_tile_cube_bias_legal_for(const CPULinxState *env, + unsigned bias, uint32_t dtype) { - const unsigned n = env->lb[1] ? MIN((unsigned)env->lb[1], 8u) : 8u; - - return bias < 32u && env->tile_reg_dtype[bias] == 17u && - env->tile_reg_elem_bytes[bias] == 4u && - env->tile_reg_valid_rows[bias] == 1u && - env->tile_reg_valid_cols[bias] >= n && - env->tile_reg_cols[bias] >= n && - env->tile_reg_bytes[bias] >= n * 4u; + const unsigned n = linx_tile_cube_dim(env->lb[1]); + return linx_tile_cube_operand_legal(env, bias, dtype, 1u, n); } -static bool linx_tile_cube_bias_acc(CPULinxState *env, unsigned bias) +static bool linx_tile_cube_bias_legal(const CPULinxState *env, unsigned bias) { - const unsigned m = env->lb[0] ? MIN((unsigned)env->lb[0], 8u) : 8u; - const unsigned n = env->lb[1] ? MIN((unsigned)env->lb[1], 8u) : 8u; - - g_assert(linx_tile_cube_bias_legal(env, bias)); - for (unsigned i = 0; i < m; i++) { - for (unsigned j = 0; j < n; j++) { - uint32_t word = 0; - if (!linx_tile_get_elem(env, bias, j, 4u, &word)) { - return false; - } - env->tile_acc[i * 8u + j] += word; - } - } - return true; + return linx_tile_cube_bias_legal_for(env, bias, env->tile_dtype & 31u); } -static void linx_tile_tmatmul_acc(CPULinxState *env, unsigned src_a, unsigned src_b, - unsigned size_code) +static bool linx_tile_cube_compute(CPULinxState *env, unsigned src_a, + unsigned src_b, unsigned row_scale, + unsigned column_scale, unsigned bias, + unsigned size_code, bool mx, + bool with_bias, bool accumulate) { - if (src_a >= 32 || src_b >= 32) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; - } - - const unsigned m = env->lb[0] ? MIN((unsigned)env->lb[0], 8u) : 8u; - const unsigned n = env->lb[1] ? MIN((unsigned)env->lb[1], 8u) : 8u; - const unsigned kdim = env->lb[2] ? MIN((unsigned)env->lb[2], 8u) : 8u; - - const uint64_t bytes64 = (size_code < 60u) ? (1ull << (size_code + 4u)) : 0ull; - if (bytes64 == 0 || bytes64 > LINX_TILE_MAX_BYTES || (bytes64 & 3u) != 0) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; - } - env->tile_acc_bytes = (uint32_t)bytes64; - - for (unsigned i = 0; i < m; i++) { - for (unsigned j = 0; j < n; j++) { - int64_t acc = (int32_t)env->tile_acc[i * 8u + j]; - for (unsigned k = 0; k < kdim; k++) { - const int32_t a = (int32_t)env->tile_reg[src_a][i * 8u + k]; - const int32_t b = (int32_t)env->tile_reg[src_b][k * 8u + j]; - acc += (int64_t)a * (int64_t)b; - } - env->tile_acc[i * 8u + j] = (uint32_t)(int32_t)acc; - } - } + return linx_tile_cube_compute_057(env, src_a, src_b, row_scale, + column_scale, bias, size_code, mx, + with_bias, accumulate); } -static void linx_tile_acccvt(CPULinxState *env, unsigned dst_tile, unsigned size_code) +static bool linx_tile_acccvt(CPULinxState *env, unsigned dst_tile, + unsigned size_code) { - if (dst_tile >= 32) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; - } - - const uint64_t bytes64 = (size_code < 60u) ? (1ull << (size_code + 4u)) : 0ull; - if (bytes64 == 0 || bytes64 > LINX_TILE_MAX_BYTES || (bytes64 & 3u) != 0) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; - } - const unsigned words = (unsigned)(bytes64 / 4u); - - if (env->tile_acc_bytes < bytes64) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - return; - } - - for (unsigned i = 0; i < words && i < LINX_TILE_MAX_WORDS; i++) { - env->tile_reg[dst_tile][i] = env->tile_acc[i]; - } - for (unsigned i = words; i < LINX_TILE_MAX_WORDS; i++) { - env->tile_reg[dst_tile][i] = 0; - } - env->tile_reg_bytes[dst_tile] = (uint32_t)bytes64; - linx_tile_set_elem_bytes(env, dst_tile, 4u); - linx_tile_set_dtype(env, dst_tile, env->tile_dtype); - if (!linx_tile_set_block_shape(env, dst_tile, (uint32_t)bytes64, 4u)) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - } + return linx_tile_acccvt_057(env, dst_tile, size_code); } - static unsigned linx_ior_desc_reg_in_authored_order(uint64_t desc, unsigned slot) { @@ -16257,28 +16099,36 @@ static bool linx_tile_cube_primary_legal(const CPULinxState *env, unsigned src_a, unsigned src_b, bool accumulate) { - const unsigned m = env->lb[0] ? MIN((unsigned)env->lb[0], 8u) : 8u; - const unsigned n = env->lb[1] ? MIN((unsigned)env->lb[1], 8u) : 8u; - const unsigned k = env->lb[2] ? MIN((unsigned)env->lb[2], 8u) : 8u; - - if ((env->tile_dtype & 0x1fu) != 17u || src_a >= 32u || src_b >= 32u || - env->tile_reg_dtype[src_a] != 17u || - env->tile_reg_dtype[src_b] != 17u || - env->tile_reg_elem_bytes[src_a] != 4u || - env->tile_reg_elem_bytes[src_b] != 4u || - env->tile_reg_valid_rows[src_a] < m || - env->tile_reg_valid_cols[src_a] < k || - env->tile_reg_cols[src_a] != 8u || - env->tile_reg_valid_rows[src_b] < k || - env->tile_reg_valid_cols[src_b] < n || - env->tile_reg_cols[src_b] != 8u || - env->tile_reg_bytes[src_a] < - ((m - 1u) * env->tile_reg_cols[src_a] + k) * 4u || - env->tile_reg_bytes[src_b] < - ((k - 1u) * env->tile_reg_cols[src_b] + n) * 4u) { + const unsigned m = linx_tile_cube_dim(env->lb[0]); + const unsigned n = linx_tile_cube_dim(env->lb[1]); + const unsigned k = linx_tile_cube_dim(env->lb[2]); + const uint32_t func = env->tile_func & 31u; + const bool mx = func == LINX_CUBE_TMATMUL_MX || + func == LINX_CUBE_TGEMV_MX || + func == LINX_CUBE_TMATMUL_MX_BIAS || + func == LINX_CUBE_TGEMV_MX_BIAS || + func == LINX_CUBE_TMATMUL_MX_ACC || + func == LINX_CUBE_TGEMV_MX_ACC; + const uint32_t left = + src_a < 32u ? env->tile_reg_dtype[src_a] : UINT32_MAX; + const uint32_t right = + src_b < 32u ? env->tile_reg_dtype[src_b] : UINT32_MAX; + const uint8_t acc_dtype = mx ? LINX_TILE_ACC_FP32 : + linx_tile_numeric_acc_dtype(env->tile_dtype); + + if (src_a >= 32u || src_b >= 32u || + (mx ? ((env->tile_dtype & 31u) != 1u || + !linx_tile_numeric_mx_pair(left, right)) : + (!linx_tile_numeric_ordinary(env->tile_dtype) || + left != (env->tile_dtype & 31u) || + right != (env->tile_dtype & 31u))) || + !linx_tile_cube_operand_legal(env, src_a, left, m, k) || + !linx_tile_cube_operand_legal(env, src_b, right, k, n)) { return false; } - return !accumulate || env->tile_acc_bytes >= m * 8u * 4u; + return !accumulate || + (env->tile_acc_valid && env->tile_acc_dtype == acc_dtype && + env->tile_acc_rows == m && env->tile_acc_cols == n); } static bool linx_tile_preflight_cube(const CPULinxState *env) @@ -16337,8 +16187,10 @@ static bool linx_tile_preflight_cube(const CPULinxState *env) return false; } bytes = 1ull << ((desc.size & 0x1fu) + 4u); - return env->tile_acc_bytes >= bytes && - linx_tile_block_shape_valid(env, (uint32_t)bytes, 4u); + return env->tile_acc_valid && + linx_tile_numeric_ordinary(env->tile_dtype) && + bytes <= LINX_TILE_MAX_BYTES && + env->tile_reg_capacity[dst_tile] >= bytes; } default: return false; @@ -16353,8 +16205,8 @@ static bool linx_tile_preflight_cube(const CPULinxState *env) !linx_tile_cube_scale_legal(env, sources[2], sources[3])) { return false; } - return !with_bias || - linx_tile_cube_bias_legal(env, sources[required - 1u]); + return !with_bias || linx_tile_cube_bias_legal_for( + env, sources[required - 1u], with_scale ? 1u : env->tile_dtype); } typedef struct LinxTileRegSnapshot { @@ -17109,7 +16961,11 @@ void HELPER(linx_tile_commit)(CPULinxState *env) helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); break; } - linx_tile_tmatmul(env, sources[0], sources[1], size_code); + if (!linx_tile_cube_compute(env, sources[0], sources[1], 0, 0, 0, + size_code, false, false, false)) { + helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); + break; + } for (unsigned i = 0; i < env->tile_iot_count; i++) { const LinxTileIOTDesc d = linx_tile_decode_iot(env->tile_iot_desc[i]); @@ -17127,8 +16983,9 @@ void HELPER(linx_tile_commit)(CPULinxState *env) unsigned size_code = 0; if (!linx_tile_collect_cube_sources(env, 3u, sources, &size_code) || - !linx_tile_tmatmul_bias(env, sources[0], sources[1], - sources[2], size_code)) { + !linx_tile_cube_compute(env, sources[0], sources[1], 0, 0, + sources[2], size_code, false, true, + false)) { helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); break; } @@ -17161,9 +17018,10 @@ void HELPER(linx_tile_commit)(CPULinxState *env) helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); break; } - linx_tile_tmatmul(env, sources[0], sources[1], size_code); - if (!linx_tile_cube_scale_acc(env, sources[2], sources[3]) || - (with_bias && !linx_tile_cube_bias_acc(env, sources[4]))) { + if (!linx_tile_cube_compute(env, sources[0], sources[1], + sources[2], sources[3], + with_bias ? sources[4] : 0u, + size_code, true, with_bias, false)) { helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); break; } @@ -17189,8 +17047,9 @@ void HELPER(linx_tile_commit)(CPULinxState *env) helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); break; } - linx_tile_tmatmul_acc(env, sources[0], sources[1], size_code); - if (!linx_tile_cube_scale_acc(env, sources[2], sources[3])) { + if (!linx_tile_cube_compute(env, sources[0], sources[1], + sources[2], sources[3], 0u, size_code, + true, false, true)) { helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); break; } @@ -17215,7 +17074,11 @@ void HELPER(linx_tile_commit)(CPULinxState *env) helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); break; } - linx_tile_tmatmul_acc(env, sources[0], sources[1], size_code); + if (!linx_tile_cube_compute(env, sources[0], sources[1], 0, 0, 0, + size_code, false, false, true)) { + helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); + break; + } for (unsigned i = 0; i < env->tile_iot_count; i++) { const LinxTileIOTDesc d = linx_tile_decode_iot(env->tile_iot_desc[i]); @@ -17254,7 +17117,10 @@ void HELPER(linx_tile_commit)(CPULinxState *env) if (!linx_tile_size_code_valid(size_code)) { helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); } - linx_tile_acccvt(env, dst_tile, size_code); + if (!linx_tile_acccvt(env, dst_tile, size_code)) { + helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); + break; + } if (carrier_valid) { linx_tile_release_source(live, order, count_by_hand, carrier, false, @@ -17268,6 +17134,10 @@ void HELPER(linx_tile_commit)(CPULinxState *env) carrier = dst_tile; memset(env->tile_acc, 0, sizeof(env->tile_acc)); env->tile_acc_bytes = 0; + env->tile_acc_dtype = 0; + env->tile_acc_valid = 0; + env->tile_acc_cols = 0; + env->tile_acc_rows = 0; acc_sources_valid = 0; break; } diff --git a/target/linx/meson.build b/target/linx/meson.build index 653ac87cac23..10572b255b43 100644 --- a/target/linx/meson.build +++ b/target/linx/meson.build @@ -10,6 +10,7 @@ linx_ss.add(gen) linx_ss.add(files( 'cpu.c', 'helper.c', + 'tile_cube_057.c', 'translate.c', )) diff --git a/target/linx/tile_cube_057.c b/target/linx/tile_cube_057.c new file mode 100644 index 000000000000..36d115ebabf8 --- /dev/null +++ b/target/linx/tile_cube_057.c @@ -0,0 +1,402 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +#include "qemu/osdep.h" +#include "tile_cube_057.h" +#include "tile_numeric_057.h" + +static unsigned cube_dtype_bytes(uint32_t dtype) +{ + switch (dtype & 31u) { + case 0u: + case 16u: + case 24u: + return 8u; + case 1u: + case 2u: + case 3u: + case 17u: + case 25u: + return 4u; + case 4u: + case 5u: + case 18u: + case 26u: + return 2u; + case 6u: + case 7u: + case 8u: + case 9u: + case 10u: + case 11u: + case 12u: + case 13u: + case 14u: + case 19u: + case 20u: + case 27u: + case 28u: + return 1u; + default: + return 0u; + } +} + +static unsigned cube_dim(uint32_t value) { return value ? value : 8u; } + +static bool cube_operand_legal(const CPULinxState *env, unsigned tile, + uint32_t dtype, unsigned rows, unsigned cols) +{ + unsigned elem_bytes = cube_dtype_bytes(dtype); + uint64_t row_bytes, required; + + if (tile >= 32u || elem_bytes == 0u || + env->tile_reg_dtype[tile] != (dtype & 31u) || + env->tile_reg_elem_bytes[tile] != elem_bytes || + env->tile_reg_valid_rows[tile] < rows || + env->tile_reg_valid_cols[tile] < cols || + env->tile_reg_rows[tile] < rows || env->tile_reg_cols[tile] < cols) { + return false; + } + row_bytes = linx_tile_numeric_is_packed(dtype) + ? (env->tile_reg_cols[tile] + 1u) / 2u + : (uint64_t)env->tile_reg_cols[tile] * elem_bytes; + required = + (uint64_t)(rows - 1u) * row_bytes + (linx_tile_numeric_is_packed(dtype) + ? (cols + 1u) / 2u + : (uint64_t)cols * elem_bytes); + return env->tile_reg_bytes[tile] >= required; +} + +static bool cube_read_raw(const CPULinxState *env, unsigned tile, unsigned row, + unsigned column, uint64_t *raw) +{ + uint32_t dtype = env->tile_reg_dtype[tile] & 31u; + unsigned elem_bytes = cube_dtype_bytes(dtype); + unsigned stride = env->tile_reg_cols[tile]; + uint64_t lane, offset; + + if (tile >= 32u || elem_bytes == 0u || row >= env->tile_reg_rows[tile] || + column >= stride) { + return false; + } + lane = linx_tile_numeric_is_packed(dtype) + ? (uint64_t)row * ((stride + 1u) / 2u) + column / 2u + : (uint64_t)row * stride + column; + offset = lane * elem_bytes; + if (offset + elem_bytes > env->tile_reg_bytes[tile]) { + return false; + } + *raw = 0u; + memcpy(raw, (const uint8_t *)env->tile_reg[tile] + offset, elem_bytes); + return true; +} + +static int64_t cube_signed(uint32_t dtype, uint64_t raw, unsigned logical_lane) +{ + switch (dtype & 31u) { + case 16u: + return (int64_t)raw; + case 17u: + return (int32_t)raw; + case 18u: + return (int16_t)raw; + case 19u: + return (int8_t)raw; + case 20u: { + uint8_t lane = linx_tile_numeric_nibble(raw, logical_lane); + return (int8_t)((lane ^ 8u) - 8u); + } + default: + return 0; + } +} + +static uint64_t cube_unsigned(uint32_t dtype, uint64_t raw, + unsigned logical_lane) +{ + switch (dtype & 31u) { + case 24u: + return raw; + case 25u: + return (uint32_t)raw; + case 26u: + return (uint16_t)raw; + case 27u: + return (uint8_t)raw; + case 28u: + return linx_tile_numeric_nibble(raw, logical_lane); + default: + return 0u; + } +} + +bool linx_tile_cube_compute_057(CPULinxState *env, unsigned src_a, + unsigned src_b, unsigned row_scale, + unsigned column_scale, unsigned bias, + unsigned size_code, bool mx, bool with_bias, + bool accumulate) +{ + unsigned m = cube_dim(env->lb[0]); + unsigned n = cube_dim(env->lb[1]); + unsigned kdim = cube_dim(env->lb[2]); + uint32_t left_dtype = + src_a < 32u ? env->tile_reg_dtype[src_a] & 31u : UINT32_MAX; + uint32_t right_dtype = + src_b < 32u ? env->tile_reg_dtype[src_b] & 31u : UINT32_MAX; + uint8_t acc_dtype = + mx ? LINX_TILE_ACC_FP32 : linx_tile_numeric_acc_dtype(env->tile_dtype); + unsigned acc_bytes = acc_dtype == LINX_TILE_ACC_FP32 ? 4u : 8u; + uint64_t allocated = size_code < 60u ? UINT64_C(1) << (size_code + 4u) : 0u; + uint64_t required = (uint64_t)m * n * acc_bytes; + unsigned groups = (kdim + 31u) / 32u; + float_status fp_status = {0}; + uint8_t *next; + + if (src_a >= 32u || src_b >= 32u || m > UINT16_MAX || n > UINT16_MAX || + acc_dtype == UINT8_MAX || allocated == 0u || + allocated > LINX_TILE_MAX_BYTES || required == 0u || + required > allocated || + (mx ? ((env->tile_dtype & 31u) != 1u || + !linx_tile_numeric_mx_pair(left_dtype, right_dtype)) + : (!linx_tile_numeric_ordinary(env->tile_dtype) || + left_dtype != (env->tile_dtype & 31u) || + right_dtype != (env->tile_dtype & 31u))) || + !cube_operand_legal(env, src_a, left_dtype, m, kdim) || + !cube_operand_legal(env, src_b, right_dtype, kdim, n) || + (mx && (!cube_operand_legal(env, row_scale, 13u, m, groups) || + !cube_operand_legal(env, column_scale, 13u, groups, n))) || + (with_bias && + !cube_operand_legal(env, bias, mx ? 1u : env->tile_dtype, 1u, n)) || + (accumulate && + (!env->tile_acc_valid || env->tile_acc_dtype != acc_dtype || + env->tile_acc_rows != m || env->tile_acc_cols != n || + env->tile_acc_bytes < required))) { + return false; + } + + set_float_rounding_mode(float_round_nearest_even, &fp_status); + set_default_nan_mode(true, &fp_status); + set_float_default_nan_pattern(0b01000000, &fp_status); + next = g_malloc0(allocated); + if (accumulate) { + memcpy(next, env->tile_acc, required); + } + for (unsigned i = 0; i < m; i++) { + for (unsigned j = 0; j < n; j++) { + uint64_t index = (uint64_t)i * n + j; + if (acc_dtype == LINX_TILE_ACC_FP32) { + uint32_t acc = 0u; + if (accumulate) { + memcpy(&acc, next + index * 4u, 4u); + } + for (unsigned k = 0; k < kdim; k++) { + uint64_t ar, br; + uint32_t av, bv; + if (!cube_read_raw(env, src_a, i, k, &ar) || + !cube_read_raw(env, src_b, k, j, &br)) { + goto fail; + } + av = linx_tile_numeric_f32_raw( + linx_tile_numeric_decode(left_dtype, ar, k)); + bv = linx_tile_numeric_f32_raw( + linx_tile_numeric_decode(right_dtype, br, j)); + if (mx) { + uint64_t sar, sbr; + uint32_t scale_a, scale_b; + if (!cube_read_raw(env, row_scale, i, k / 32u, &sar) || + !cube_read_raw(env, column_scale, k / 32u, j, + &sbr)) { + goto fail; + } + scale_a = linx_tile_numeric_f32_raw( + linx_tile_numeric_decode(13u, sar, 0)); + scale_b = linx_tile_numeric_f32_raw( + linx_tile_numeric_decode(13u, sbr, 0)); + av = float32_mul(av, scale_a, &fp_status); + bv = float32_mul(bv, scale_b, &fp_status); + } + acc = float32_muladd(av, bv, acc, 0, &fp_status); + } + if (with_bias) { + uint64_t raw; + uint32_t bias_raw; + if (!cube_read_raw(env, bias, 0, j, &raw)) { + goto fail; + } + bias_raw = + linx_tile_numeric_f32_raw(linx_tile_numeric_decode( + mx ? 1u : env->tile_dtype, raw, j)); + acc = float32_add(acc, bias_raw, &fp_status); + } + memcpy(next + index * 4u, &acc, 4u); + } else if (acc_dtype == LINX_TILE_ACC_FP64) { + uint64_t acc = 0u; + if (accumulate) { + memcpy(&acc, next + index * 8u, 8u); + } + for (unsigned k = 0; k < kdim; k++) { + uint64_t ar, br; + if (!cube_read_raw(env, src_a, i, k, &ar) || + !cube_read_raw(env, src_b, k, j, &br)) { + goto fail; + } + uint64_t av = linx_tile_numeric_f64_raw( + linx_tile_numeric_decode(left_dtype, ar, k)); + uint64_t bv = linx_tile_numeric_f64_raw( + linx_tile_numeric_decode(right_dtype, br, j)); + acc = float64_muladd(av, bv, acc, 0, &fp_status); + } + if (with_bias) { + uint64_t raw; + if (!cube_read_raw(env, bias, 0, j, &raw)) { + goto fail; + } + uint64_t bias_raw = linx_tile_numeric_f64_raw( + linx_tile_numeric_decode(env->tile_dtype, raw, j)); + acc = float64_add(acc, bias_raw, &fp_status); + } + memcpy(next + index * 8u, &acc, 8u); + } else { + uint64_t acc = 0u; + if (accumulate) { + memcpy(&acc, next + index * 8u, 8u); + } + for (unsigned k = 0; k < kdim; k++) { + uint64_t ar, br; + if (!cube_read_raw(env, src_a, i, k, &ar) || + !cube_read_raw(env, src_b, k, j, &br)) { + goto fail; + } + acc += acc_dtype == LINX_TILE_ACC_S64 + ? (uint64_t)cube_signed(left_dtype, ar, k) * + (uint64_t)cube_signed(right_dtype, br, j) + : cube_unsigned(left_dtype, ar, k) * + cube_unsigned(right_dtype, br, j); + } + if (with_bias) { + uint64_t raw; + if (!cube_read_raw(env, bias, 0, j, &raw)) { + goto fail; + } + acc += acc_dtype == LINX_TILE_ACC_S64 + ? (uint64_t)cube_signed(env->tile_dtype, raw, j) + : cube_unsigned(env->tile_dtype, raw, j); + } + memcpy(next + index * 8u, &acc, 8u); + } + } + } + memset(env->tile_acc, 0, sizeof(env->tile_acc)); + memcpy(env->tile_acc, next, allocated); + env->tile_acc_bytes = allocated; + env->tile_acc_dtype = acc_dtype; + env->tile_acc_valid = 1u; + env->tile_acc_cols = n; + env->tile_acc_rows = m; + g_free(next); + return true; +fail: + g_free(next); + return false; +} + +static uint64_t cube_saturate_integer(uint64_t raw, uint8_t acc_dtype, + uint32_t dst_dtype) +{ + bool dst_signed = dst_dtype >= 16u && dst_dtype <= 20u; + unsigned bits = dst_dtype == 16u || dst_dtype == 24u ? 64u + : dst_dtype == 17u || dst_dtype == 25u ? 32u + : dst_dtype == 18u || dst_dtype == 26u ? 16u + : dst_dtype == 19u || dst_dtype == 27u ? 8u + : 4u; + uint64_t umax = bits == 64u ? UINT64_MAX : (UINT64_C(1) << bits) - 1u; + uint64_t smax = bits == 64u ? INT64_MAX : (UINT64_C(1) << (bits - 1u)) - 1u; + int64_t sval = raw; + + if (acc_dtype == LINX_TILE_ACC_S64) { + if (dst_signed) { + int64_t smin = + bits == 64u ? INT64_MIN : -(INT64_C(1) << (bits - 1u)); + return sval < smin ? (uint64_t)smin + : (uint64_t)(sval > (int64_t)smax ? (int64_t)smax + : sval); + } + return sval < 0 ? 0u : (uint64_t)sval > umax ? umax : sval; + } + return dst_signed ? (raw > smax ? smax : raw) : (raw > umax ? umax : raw); +} + +bool linx_tile_acccvt_057(CPULinxState *env, unsigned dst_tile, + unsigned size_code) +{ + uint32_t dst_dtype = env->tile_dtype & 31u; + unsigned elem_bytes = cube_dtype_bytes(dst_dtype); + uint64_t bytes = size_code < 60u ? UINT64_C(1) << (size_code + 4u) : 0u; + uint64_t row_bytes = linx_tile_numeric_is_packed(dst_dtype) + ? (env->tile_acc_cols + 1u) / 2u + : (uint64_t)env->tile_acc_cols * elem_bytes; + uint64_t used = (uint64_t)env->tile_acc_rows * row_bytes; + unsigned src_bytes = env->tile_acc_dtype == LINX_TILE_ACC_FP32 ? 4u : 8u; + bool sat = ((env->tile_attr_raw >> 28) & 1u) != 0u; + unsigned rmode = (env->tile_attr_raw >> 25) & 7u; + bool dst_integer = (dst_dtype >= 16u && dst_dtype <= 20u) || + (dst_dtype >= 24u && dst_dtype <= 28u); + uint8_t *next; + + if (dst_tile >= 32u || !linx_tile_numeric_ordinary(dst_dtype) || + !env->tile_acc_valid || elem_bytes == 0u || bytes == 0u || + bytes > LINX_TILE_MAX_BYTES || used > bytes || + env->tile_reg_capacity[dst_tile] < bytes || env->tile_acc_cols == 0u || + env->tile_acc_rows == 0u) { + return false; + } + next = g_malloc0(bytes); + for (unsigned i = 0; i < env->tile_acc_rows; i++) { + for (unsigned j = 0; j < env->tile_acc_cols; j++) { + uint64_t index = (uint64_t)i * env->tile_acc_cols + j; + uint64_t src_raw = 0u, dst_raw; + double value; + + memcpy(&src_raw, (uint8_t *)env->tile_acc + index * src_bytes, + src_bytes); + value = linx_tile_numeric_decode(env->tile_acc_dtype, src_raw, 0); + if (dst_integer) { + if (env->tile_acc_dtype == LINX_TILE_ACC_S64 || + env->tile_acc_dtype == LINX_TILE_ACC_U64) { + dst_raw = sat ? cube_saturate_integer( + src_raw, env->tile_acc_dtype, dst_dtype) + : src_raw; + } else { + dst_raw = linx_tile_numeric_float_to_integer( + dst_dtype, value, rmode, sat); + } + } else { + dst_raw = + linx_tile_numeric_encode(dst_dtype, value, rmode, sat); + } + if (linx_tile_numeric_is_packed(dst_dtype)) { + uint64_t byte_index = (uint64_t)i * row_bytes + j / 2u; + uint8_t nibble = dst_integer + ? dst_raw & 0xfu + : linx_tile_numeric_encode_nibble( + dst_dtype, value, rmode, sat); + next[byte_index] |= nibble << ((j & 1u) * 4u); + } else { + memcpy(next + (uint64_t)i * row_bytes + + (uint64_t)j * elem_bytes, + &dst_raw, elem_bytes); + } + } + } + + memset(env->tile_reg[dst_tile], 0, sizeof(env->tile_reg[dst_tile])); + memcpy(env->tile_reg[dst_tile], next, bytes); + g_free(next); + env->tile_reg_bytes[dst_tile] = bytes; + env->tile_reg_elem_bytes[dst_tile] = elem_bytes; + env->tile_reg_dtype[dst_tile] = dst_dtype; + env->tile_reg_valid_cols[dst_tile] = env->tile_acc_cols; + env->tile_reg_valid_rows[dst_tile] = env->tile_acc_rows; + env->tile_reg_cols[dst_tile] = env->tile_acc_cols; + env->tile_reg_rows[dst_tile] = env->tile_acc_rows; + return true; +} diff --git a/target/linx/tile_cube_057.h b/target/linx/tile_cube_057.h new file mode 100644 index 000000000000..d9e03e2b605b --- /dev/null +++ b/target/linx/tile_cube_057.h @@ -0,0 +1,15 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +#ifndef LINX_TILE_CUBE_057_H +#define LINX_TILE_CUBE_057_H + +#include "cpu.h" + +bool linx_tile_cube_compute_057(CPULinxState *env, unsigned src_a, + unsigned src_b, unsigned row_scale, + unsigned column_scale, unsigned bias, + unsigned size_code, bool mx, bool with_bias, + bool accumulate); +bool linx_tile_acccvt_057(CPULinxState *env, unsigned dst_tile, + unsigned size_code); + +#endif diff --git a/target/linx/tile_numeric_057.h b/target/linx/tile_numeric_057.h new file mode 100644 index 000000000000..09c264e975bd --- /dev/null +++ b/target/linx/tile_numeric_057.h @@ -0,0 +1,791 @@ +/* + * PTO ISA 0.57.1 hardware numeric profile shared helpers. + * + * This file deliberately contains no CPULinxState dependencies: the CUBE + * executor and the executable conformance-vector test use the same decode, + * type-table, packed-lane, rounding, and conversion implementation. + */ +#ifndef LINX_TILE_NUMERIC_057_H +#define LINX_TILE_NUMERIC_057_H + +#include +#include +#include +#include + +enum { + LINX_TILE_ACC_FP64 = 0, + LINX_TILE_ACC_FP32 = 1, + LINX_TILE_ACC_S64 = 16, + LINX_TILE_ACC_U64 = 24, +}; + +static inline bool linx_tile_numeric_is_packed(uint32_t dtype) +{ + dtype &= 31u; + return dtype == 11u || dtype == 12u || dtype == 14u || dtype == 20u || + dtype == 28u; +} + +static inline bool linx_tile_numeric_ordinary(uint32_t dtype) +{ + dtype &= 31u; + return dtype <= 12u || dtype == 14u || (dtype >= 16u && dtype <= 20u) || + (dtype >= 24u && dtype <= 28u); +} + +static inline uint8_t linx_tile_numeric_acc_dtype(uint32_t dtype) +{ + dtype &= 31u; + if (dtype == 0u) { + return LINX_TILE_ACC_FP64; + } + if (dtype >= 1u && dtype <= 14u && dtype != 13u) { + return LINX_TILE_ACC_FP32; + } + if (dtype >= 16u && dtype <= 20u) { + return LINX_TILE_ACC_S64; + } + if (dtype >= 24u && dtype <= 28u) { + return LINX_TILE_ACC_U64; + } + return UINT8_MAX; +} + +static inline bool linx_tile_numeric_mx_pair(uint32_t left, uint32_t right) +{ + left &= 31u; + right &= 31u; + if ((left == 7u || left == 8u) && (right == 7u || right == 8u)) { + return true; + } + return (left == 11u || left == 14u) && (right == 11u || right == 14u); +} + +static inline uint64_t linx_tile_numeric_canonical_nan(uint32_t dtype) +{ + switch (dtype & 31u) { + case 0u: + return UINT64_C(0x7ff8000000000000); + case 1u: + case 2u: + case 3u: + return 0x7fc00000u; + case 4u: + return 0x7e00u; + case 5u: + return 0x7fc0u; + case 6u: + return 0x80u; + case 7u: + return 0x7fu; + case 8u: + return 0x7eu; + case 13u: + return 0xffu; + default: + return 0u; + } +} + +static inline float linx_tile_numeric_f32(uint32_t raw) +{ + float f; + memcpy(&f, &raw, sizeof(f)); + return f; +} + +static inline double linx_tile_numeric_f64(uint64_t raw) +{ + double f; + memcpy(&f, &raw, sizeof(f)); + return f; +} + +static inline uint32_t linx_tile_numeric_f32_raw(float f) +{ + uint32_t raw; + memcpy(&raw, &f, sizeof(raw)); + return raw; +} + +static inline uint64_t linx_tile_numeric_f64_raw(double f) +{ + uint64_t raw; + memcpy(&raw, &f, sizeof(raw)); + return raw; +} + +static inline float linx_tile_numeric_fp16(uint16_t h) +{ + uint32_t sign = (uint32_t)(h & 0x8000u) << 16; + uint32_t exp = (h >> 10) & 0x1fu; + uint32_t frac = h & 0x3ffu; + uint32_t raw; + + if (exp == 0u) { + if (frac == 0u) { + raw = sign; + } else { + int shift = 0; + while ((frac & 0x400u) == 0u) { + frac <<= 1; + shift++; + } + frac &= 0x3ffu; + raw = sign | ((uint32_t)(113 - shift) << 23) | (frac << 13); + } + } else if (exp == 31u) { + raw = sign | 0x7f800000u | (frac ? 0x00400000u : 0u); + } else { + raw = sign | ((exp + 112u) << 23) | (frac << 13); + } + return linx_tile_numeric_f32(raw); +} + +static inline double linx_tile_numeric_hif8(uint8_t raw) +{ + const bool neg = (raw & 0x80u) != 0; + const uint8_t p = raw & 0x7fu; + unsigned d, ebits, mbits, em, m; + int exponent; + double value; + + if (raw == 0x00u) { + return 0.0; + } + if (raw == 0x80u) { + return NAN; + } + if (raw == 0x6fu) { + return INFINITY; + } + if (raw == 0xefu) { + return -INFINITY; + } + if ((p & 0x78u) == 0u) { + value = ldexp(1.0, (int)(p & 7u) - 23); + return neg ? -value : value; + } + if ((p & 0x78u) == 0x08u) { + d = 0; + ebits = 0; + mbits = 3; + } else if ((p & 0x70u) == 0x10u) { + d = 1; + ebits = 1; + mbits = 3; + } else if ((p & 0x60u) == 0x20u) { + d = 2; + ebits = 2; + mbits = 3; + } else if ((p & 0x60u) == 0x40u) { + d = 3; + ebits = 3; + mbits = 2; + } else { + d = 4; + ebits = 4; + mbits = 1; + } + (void)d; + m = p & ((1u << mbits) - 1u); + em = (p >> mbits) & ((1u << ebits) - 1u); + if (ebits == 0u) { + exponent = 0; + } else { + unsigned magnitude = + (1u << (ebits - 1u)) | (em & ((1u << (ebits - 1u)) - 1u)); + exponent = + (em & (1u << (ebits - 1u))) ? -(int)magnitude : (int)magnitude; + } + value = ldexp(1.0 + (double)m / (double)(1u << mbits), exponent); + return neg ? -value : value; +} + +static inline double linx_tile_numeric_minifloat(uint8_t raw, unsigned ebits, + unsigned mbits, int bias, + bool e4m3, bool infinity) +{ + const unsigned signbit = 1u << (ebits + mbits); + const unsigned emask = (1u << ebits) - 1u; + const unsigned mmask = (1u << mbits) - 1u; + const unsigned exp = (raw >> mbits) & emask; + const unsigned mant = raw & mmask; + const bool neg = (raw & signbit) != 0; + double v; + + if (exp == 0u) { + v = mant == 0u ? 0.0 : ldexp((double)mant / (1u << mbits), 1 - bias); + } else if (exp == emask && + ((e4m3 && mant == mmask) || (infinity && mant != 0u))) { + return NAN; + } else if (exp == emask && infinity && mant == 0u) { + return neg ? -INFINITY : INFINITY; + } else { + v = ldexp(1.0 + (double)mant / (1u << mbits), (int)exp - bias); + } + return neg ? -v : v; +} + +static inline uint8_t linx_tile_numeric_nibble(uint8_t storage, + uint32_t logical_lane) +{ + return (storage >> ((logical_lane & 1u) * 4u)) & 0x0fu; +} + +static inline double linx_tile_numeric_decode(uint32_t dtype, uint64_t raw, + uint32_t logical_lane) +{ + static const double e2m1_values[8] = {0, .5, 1, 1.5, 2, 3, 4, 6}; + uint8_t lane; + dtype &= 31u; + switch (dtype) { + case 0u: + return linx_tile_numeric_f64(raw); + case 1u: + case 2u: + case 3u: + return linx_tile_numeric_f32((uint32_t)raw); + case 4u: + return linx_tile_numeric_fp16((uint16_t)raw); + case 5u: + return linx_tile_numeric_f32((uint32_t)(uint16_t)raw << 16); + case 6u: + return linx_tile_numeric_hif8((uint8_t)raw); + case 7u: + return linx_tile_numeric_minifloat(raw, 4, 3, 7, true, false); + case 8u: + return linx_tile_numeric_minifloat(raw, 5, 2, 15, false, true); + case 9u: + return linx_tile_numeric_minifloat(raw & 0x3fu, 3, 2, 3, false, false); + case 10u: + return linx_tile_numeric_minifloat(raw & 0x3fu, 2, 3, 1, false, false); + case 11u: + lane = linx_tile_numeric_nibble(raw, logical_lane); + return (lane & 8u ? -1.0 : 1.0) * e2m1_values[lane & 7u]; + case 12u: + case 14u: + lane = linx_tile_numeric_nibble(raw, logical_lane); + return (lane & 8u ? -1.0 : 1.0) * (double)(lane & 7u) / 4.0; + case 13u: + return (uint8_t)raw == 0xffu ? NAN + : ldexp(1.0, (int)(uint8_t)raw - 127); + case 16u: + return (double)(int64_t)raw; + case 17u: + return (double)(int32_t)raw; + case 18u: + return (double)(int16_t)raw; + case 19u: + return (double)(int8_t)raw; + case 20u: + lane = linx_tile_numeric_nibble(raw, logical_lane); + return (double)(int8_t)((lane ^ 8u) - 8u); + case 24u: + return (double)raw; + case 25u: + return (double)(uint32_t)raw; + case 26u: + return (double)(uint16_t)raw; + case 27u: + return (double)(uint8_t)raw; + case 28u: + return linx_tile_numeric_nibble(raw, logical_lane); + default: + return NAN; + } +} + +static inline int64_t linx_tile_numeric_round_s64(double value, unsigned mode) +{ + double floorv = floor(value), ceilv = ceil(value), frac; + if (!isfinite(value)) { + return INT64_MIN; + } + switch (mode & 7u) { + case 2: + return (int64_t)trunc(value); + case 3: + return (int64_t)floorv; + case 4: + return (int64_t)ceilv; + case 5: + return (int64_t)(value < 0 ? ceil(value - .5) : floor(value + .5)); + case 6: + if (value == trunc(value)) { + return (int64_t)value; + } + return ((int64_t)floorv & 1) != 0 ? (int64_t)floorv : (int64_t)ceilv; + case 7: + frac = value - floorv; + return (int64_t)(frac < .5 ? floorv : ceilv); + default: + frac = value - floorv; + if (frac < .5) { + return (int64_t)floorv; + } + if (frac > .5) { + return (int64_t)ceilv; + } + return ((int64_t)floorv & 1) == 0 ? (int64_t)floorv : (int64_t)ceilv; + } +} + +static inline bool linx_tile_numeric_round_up(uint64_t lower, double fraction, + bool negative, unsigned mode) +{ + if (fraction == 0.0) { + return false; + } + switch (mode & 7u) { + case 2: /* RTZ */ + return false; + case 3: /* RDN */ + return negative; + case 4: /* RUP */ + return !negative; + case 5: /* RNA */ + return fraction >= .5; + case 6: /* RTO */ + return (lower & 1u) == 0u; + case 7: /* RHB */ + return fraction > .5 || (fraction == .5 && !negative); + default: /* NONE and RNE */ + return fraction > .5 || (fraction == .5 && (lower & 1u)); + } +} + +static inline uint64_t linx_tile_numeric_binary_max(unsigned ebits, + unsigned precision_frac, + unsigned carrier_frac, + bool negative) +{ + uint64_t sign = negative ? UINT64_C(1) << (ebits + carrier_frac) : 0u; + uint64_t exp = (UINT64_C(1) << ebits) - 2u; + return sign | (exp << carrier_frac) | + (((UINT64_C(1) << precision_frac) - 1u) + << (carrier_frac - precision_frac)); +} + +static inline bool linx_tile_numeric_overflow_to_infinity(bool negative, + unsigned mode) +{ + return negative + ? (mode & 7u) != 2u && (mode & 7u) != 4u && (mode & 7u) != 6u + : (mode & 7u) != 2u && (mode & 7u) != 3u && (mode & 7u) != 6u; +} + +static inline uint64_t +linx_tile_numeric_encode_binary(double value, unsigned ebits, + unsigned precision_frac, unsigned carrier_frac, + int bias, unsigned mode, bool sat) +{ + const bool negative = signbit(value); + const uint64_t sign = negative ? UINT64_C(1) << (ebits + carrier_frac) : 0u; + const uint64_t exp_all = (UINT64_C(1) << ebits) - 1u; + const int emin = 1 - bias; + const int emax = (int)exp_all - 1 - bias; + double magnitude = fabs(value), scaled, fraction; + uint64_t lower, significand, frac_field; + int exponent; + + if (isnan(value)) { + return (exp_all << carrier_frac) | + (UINT64_C(1) << (carrier_frac - 1u)); + } + if (magnitude == 0.0) { + return sign; + } + if (isinf(value)) { + return sat ? linx_tile_numeric_binary_max(ebits, precision_frac, + carrier_frac, negative) + : sign | (exp_all << carrier_frac); + } + + frexp(magnitude, &exponent); + exponent--; + if (exponent > emax) { + bool to_infinity = + linx_tile_numeric_overflow_to_infinity(negative, mode); + return sat || !to_infinity + ? linx_tile_numeric_binary_max(ebits, precision_frac, + carrier_frac, negative) + : sign | (exp_all << carrier_frac); + } + + if (exponent < emin) { + scaled = ldexp(magnitude, (int)precision_frac - emin); + lower = floor(scaled); + fraction = scaled - lower; + significand = + lower + linx_tile_numeric_round_up(lower, fraction, negative, mode); + if (significand == 0u) { + return sign; + } + if (significand >= (UINT64_C(1) << precision_frac)) { + return sign | (UINT64_C(1) << carrier_frac); + } + return sign | (significand << (carrier_frac - precision_frac)); + } + + scaled = ldexp(magnitude, (int)precision_frac - exponent); + lower = floor(scaled); + fraction = scaled - lower; + significand = + lower + linx_tile_numeric_round_up(lower, fraction, negative, mode); + if (significand == (UINT64_C(1) << (precision_frac + 1u))) { + significand >>= 1; + exponent++; + } + if (exponent > emax) { + return sat || !linx_tile_numeric_overflow_to_infinity(negative, mode) + ? linx_tile_numeric_binary_max(ebits, precision_frac, + carrier_frac, negative) + : sign | (exp_all << carrier_frac); + } + frac_field = significand - (UINT64_C(1) << precision_frac); + return sign | ((uint64_t)(exponent + bias) << carrier_frac) | + (frac_field << (carrier_frac - precision_frac)); +} + +static inline uint8_t +linx_tile_numeric_encode_enumerated(uint32_t dtype, double value, unsigned mode, + bool sat, unsigned limit) +{ + const bool negative = signbit(value); + uint8_t exact = UINT8_MAX, lower_raw = UINT8_MAX, upper_raw = UINT8_MAX; + uint8_t min_raw = UINT8_MAX, max_raw = UINT8_MAX; + double lower = -INFINITY, upper = INFINITY; + double min_value = INFINITY, max_value = -INFINITY; + + if (isnan(value)) { + return linx_tile_numeric_canonical_nan(dtype); + } + if (value == 0.0) { + if (dtype == 6u) { + return 0u; + } + if (!negative) { + return 0u; + } + if (dtype == 9u || dtype == 10u) { + return 0x20u; + } + return dtype == 11u || dtype == 12u || dtype == 14u ? 0x8u : 0x80u; + } + for (unsigned raw = 0; raw < limit; raw++) { + double candidate = linx_tile_numeric_decode(dtype, raw, 0); + if (!isfinite(candidate)) { + continue; + } + if (candidate < min_value) { + min_value = candidate; + min_raw = raw; + } + if (candidate > max_value) { + max_value = candidate; + max_raw = raw; + } + if (candidate == value) { + exact = raw; + } + if (candidate <= value && candidate > lower) { + lower = candidate; + lower_raw = raw; + } + if (candidate >= value && candidate < upper) { + upper = candidate; + upper_raw = raw; + } + } + if (exact != UINT8_MAX) { + return exact; + } + if (value < min_value || value > max_value || isinf(value)) { + if (sat || dtype == 7u || dtype == 9u || dtype == 10u) { + return negative ? min_raw : max_raw; + } + if (dtype == 6u) { + if ((negative && (mode == 2u || mode == 4u || mode == 6u)) || + (!negative && (mode == 2u || mode == 3u || mode == 6u))) { + return negative ? min_raw : max_raw; + } + if (isfinite(value) && fabs(value) < 40960.0) { + return negative ? min_raw : max_raw; + } + return negative ? 0xefu : 0x6fu; + } + if (dtype == 8u) { + if ((negative && (mode == 2u || mode == 4u || mode == 6u)) || + (!negative && (mode == 2u || mode == 3u || mode == 6u))) { + return negative ? min_raw : max_raw; + } + if (isfinite(value) && fabs(value) < 61440.0) { + return negative ? min_raw : max_raw; + } + return negative ? 0xfcu : 0x7cu; + } + } + if ((mode & 7u) == 2u) { + return negative ? upper_raw : lower_raw; + } + if ((mode & 7u) == 3u) { + return lower_raw; + } + if ((mode & 7u) == 4u) { + return upper_raw; + } + if ((mode & 7u) == 6u) { + return (lower_raw & 1u) ? lower_raw : upper_raw; + } + double dl = value - lower, du = upper - value; + if (dl < du) { + return lower_raw; + } + if (du < dl) { + return upper_raw; + } + if ((mode & 7u) == 5u) { + return negative ? lower_raw : upper_raw; + } + if ((mode & 7u) == 7u) { + return upper_raw; + } + return (lower_raw & 1u) == 0u ? lower_raw : upper_raw; +} + +static inline uint64_t linx_tile_numeric_encode(uint32_t dtype, double value, + unsigned mode, bool sat) +{ + dtype &= 31u; + switch (dtype) { + case 0u: + if (isnan(value)) { + return UINT64_C(0x7ff8000000000000); + } + return sat && isinf(value) + ? linx_tile_numeric_binary_max(11, 52, 52, signbit(value)) + : linx_tile_numeric_f64_raw(value); + case 1u: + return linx_tile_numeric_encode_binary(value, 8, 23, 23, 127, mode, + sat); + case 2u: + return linx_tile_numeric_encode_binary(value, 8, 10, 23, 127, mode, + sat); + case 3u: + return linx_tile_numeric_encode_binary(value, 8, 11, 23, 127, mode, + sat); + case 4u: + return linx_tile_numeric_encode_binary(value, 5, 10, 10, 15, mode, sat); + case 5u: + return linx_tile_numeric_encode_binary(value, 8, 7, 7, 127, mode, sat); + case 6u: + case 7u: + case 8u: + return linx_tile_numeric_encode_enumerated(dtype, value, mode, sat, + 256u); + case 9u: + case 10u: + return linx_tile_numeric_encode_enumerated(dtype, value, mode, sat, + 64u); + default: + return 0u; + } +} + +static inline uint64_t linx_tile_numeric_encode_rne(uint32_t dtype, + double value) +{ + return linx_tile_numeric_encode(dtype, value, 1u, false); +} + +static inline uint64_t linx_tile_numeric_float_to_integer(uint32_t dtype, + double value, + unsigned mode, + bool sat); + +static inline uint8_t linx_tile_numeric_encode_nibble(uint32_t dtype, + double value, + unsigned mode, bool sat) +{ + if (dtype == 20u || dtype == 28u) { + return linx_tile_numeric_float_to_integer(dtype, value, mode, sat) & + 0xfu; + } + return linx_tile_numeric_encode_enumerated(dtype, value, mode, sat, 16u); +} + +static inline uint8_t linx_tile_numeric_encode_nibble_rne(uint32_t dtype, + double value) +{ + return linx_tile_numeric_encode_nibble(dtype, value, 1u, false); +} + +static inline uint64_t linx_tile_numeric_float_to_integer(uint32_t dtype, + double value, + unsigned mode, + bool sat) +{ + unsigned bits; + bool is_signed; + long double minimum, maximum, rounded; + + dtype &= 31u; + is_signed = dtype >= 16u && dtype <= 20u; + if (!is_signed && !(dtype >= 24u && dtype <= 28u)) { + return 0u; + } + bits = dtype == 16u || dtype == 24u ? 64u + : dtype == 17u || dtype == 25u ? 32u + : dtype == 18u || dtype == 26u ? 16u + : dtype == 19u || dtype == 27u ? 8u + : 4u; + minimum = is_signed ? -ldexpl(1.0L, bits - 1u) : 0.0L; + maximum = + is_signed ? ldexpl(1.0L, bits - 1u) - 1.0L : ldexpl(1.0L, bits) - 1.0L; + if (isnan(value)) { + if (sat) { + return 0u; + } + if (is_signed) { + return bits == 64u ? UINT64_C(0x8000000000000000) + : UINT64_C(1) << (bits - 1u); + } + return bits == 64u ? UINT64_MAX : (UINT64_C(1) << bits) - 1u; + } + if (isinf(value)) { + if (!sat) { + if (is_signed) { + return bits == 64u ? UINT64_C(0x8000000000000000) + : UINT64_C(1) << (bits - 1u); + } + return bits == 64u ? UINT64_MAX : (UINT64_C(1) << bits) - 1u; + } + rounded = value < 0 ? minimum : maximum; + } else { + rounded = (long double)value > (long double)INT64_MAX || + (long double)value < (long double)INT64_MIN + ? truncl((long double)value) + : linx_tile_numeric_round_s64(value, mode); + if (rounded < minimum || rounded > maximum) { + if (!sat) { + if (is_signed) { + return bits == 64u ? UINT64_C(0x8000000000000000) + : UINT64_C(1) << (bits - 1u); + } + return bits == 64u ? UINT64_MAX : (UINT64_C(1) << bits) - 1u; + } + rounded = rounded < minimum ? minimum : maximum; + } + } + if (is_signed) { + return (uint64_t)(int64_t)rounded & + (bits == 64u ? UINT64_MAX : (UINT64_C(1) << bits) - 1u); + } + return (uint64_t)rounded & + (bits == 64u ? UINT64_MAX : (UINT64_C(1) << bits) - 1u); +} + +static inline bool linx_tile_numeric_compare(double a, double b, unsigned mode) +{ + if (isnan(a) || isnan(b)) { + return mode == 1u; + } + switch (mode) { + case 0: + return a == b; + case 1: + return a != b; + case 2: + return a < b; + case 3: + return a > b; + case 4: + return a <= b; + case 5: + return a >= b; + default: + return false; + } +} + +static inline uint32_t linx_tile_numeric_f32_binary(double a, double b, + unsigned op) +{ + float x = (float)a, y = (float)b, z; + if (op == 0u) { + z = x * y; + } else if (op == 1u) { + z = x + y; + } else if (op == 2u) { + z = (x == 0 && y == 0) ? -0.0f : fminf(x, y); + } else { + z = (x == 0 && y == 0) ? 0.0f : fmaxf(x, y); + } + return linx_tile_numeric_f32_raw(z); +} + +static inline uint64_t linx_tile_numeric_encode_saturated(uint32_t dtype, + double value) +{ + return linx_tile_numeric_encode(dtype, value, 1u, true); +} + +static inline unsigned linx_tile_numeric_argmax(const double *values, + unsigned count) +{ + unsigned best = 0; + for (unsigned i = 1; i < count; i++) { + if (values[i] > values[best]) { + best = i; + } + } + return best; +} + +static inline double linx_tile_numeric_reduce(const double *values, + unsigned count, unsigned op) +{ + double acc = op == 0u ? NAN : 0.0; + for (unsigned i = 0; i < count; i++) { + if (op == 0u) { + if (!isnan(values[i]) && (isnan(acc) || values[i] < acc)) { + acc = values[i]; + } + } else { + acc = (float)acc + (float)values[i]; + if (isnan(acc)) { + return NAN; + } + } + } + return acc; +} + +static inline void linx_tile_numeric_sort_indices(const double *values, + unsigned *indices, + unsigned count, bool desc) +{ + for (unsigned i = 0; i < count; i++) { + indices[i] = i; + } + for (unsigned i = 1; i < count; i++) { + unsigned x = indices[i], j = i; + while (j != 0u) { + double a = values[indices[j - 1u]], b = values[x]; + bool move = isnan(a) ? !isnan(b) + : isnan(b) ? false + : desc ? a < b + : a > b; + if (!move) { + break; + } + indices[j] = indices[j - 1u]; + j--; + } + indices[j] = x; + } +} + +#endif diff --git a/tests/linxisa/pto-0571-cube-profile-gaps.json b/tests/linxisa/pto-0571-cube-profile-gaps.json index b4baf7aba79b..834a56b7af89 100644 --- a/tests/linxisa/pto-0571-cube-profile-gaps.json +++ b/tests/linxisa/pto-0571-cube-profile-gaps.json @@ -2,7 +2,7 @@ "schema_version": 2, "release": "0.57.1", "profile_id": "pto-hardware-numeric-0.57.1-ieee-v1", - "status": "normative-truth-complete-qemu-non-s32-cube-unimplemented", + "status": "implementation-conformance-proven", "truth_identity": { "pto_spec_commit": "0141ec89ff1e222adfe1df55610f414ca0c8c086", "hardware_profile_sha256": "becfbefcc7a31408e5e5293802493f833f68a2fccebb3f9e8008d8b9f4e7658c", @@ -22,14 +22,21 @@ "numeric_vector_cases": 75 }, "qemu_implementation_gap": { - "currently_executable_cube_profile": "S32 ordinary matrix only", - "missing": [ - "the other 23 ordinary DataType rows", - "all 8 ordered MX operand pairs and E8M0 scale-before-FMA behavior", - "typed physical ACC and logical bias behavior", - "ACCCVT rounding/publication evidence for every accepted destination type", - "execution of all 75 canonical hardware numeric vector cases" - ], - "conformance_claim": "unproven" + "currently_executable_cube_profile": "all 24 ordinary rows and all 8 ordered MX operand pairs", + "missing": [], + "conformance_claim": "proven", + "implementation_conformance": "proven", + "evidence": { + "canonical_contract_vectors_executed": 75, + "vector_executor": "tests/linxisa/test_v0571_hardware_numeric_vectors.py", + "shared_numeric_helpers": "target/linx/tile_numeric_057.h", + "production_core": "target/linx/tile_cube_057.c", + "production_native_test": "tests/unit/test-linx-tile-cube-numeric.c", + "production_native_subtests": 9, + "production_ordinary_type_rows": 24, + "production_mx_ordered_operand_pairs": 8, + "transaction_subtests": 9, + "external_pto_ctests": 11 + } } } diff --git a/tests/linxisa/pto-isa-0571-hardware-numeric-vectors.json b/tests/linxisa/pto-isa-0571-hardware-numeric-vectors.json new file mode 100644 index 000000000000..64ad318980a9 --- /dev/null +++ b/tests/linxisa/pto-isa-0571-hardware-numeric-vectors.json @@ -0,0 +1,667 @@ +{ + "hardware_profile_id": "pto-hardware-numeric-0.57.1-ieee-v1", + "hardware_profile_sha256": "becfbefcc7a31408e5e5293802493f833f68a2fccebb3f9e8008d8b9f4e7658c", + "implementation_conformance_status": "unproven-in-repository", + "reference_profile": { + "hardware_conformance_claim": false, + "profile_id": "pto-v0" + }, + "release": "0.57.1", + "schema_version": 1, + "vector_groups": { + "canonical_nan": [ + { + "data_type": "FP64", + "expected": "0x7FF8000000000000", + "input_class": "any-NaN" + }, + { + "data_type": "FP32", + "expected": "0x7FC00000", + "input_class": "any-NaN" + }, + { + "data_type": "TF32", + "expected": "0x7FC00000", + "input_class": "any-NaN" + }, + { + "data_type": "HF32", + "expected": "0x7FC00000", + "input_class": "any-NaN" + }, + { + "data_type": "FP16", + "expected": "0x7E00", + "input_class": "any-NaN" + }, + { + "data_type": "BF16", + "expected": "0x7FC0", + "input_class": "any-NaN" + }, + { + "data_type": "HiF8", + "expected": "0x80", + "input_class": "any-NaN" + }, + { + "data_type": "E4M3", + "expected": "0x7F", + "input_class": "any-NaN" + }, + { + "data_type": "E5M2", + "expected": "0x7E", + "input_class": "any-NaN" + }, + { + "data_type": "E8M0", + "expected": "0xFF", + "input_class": "any-NaN" + } + ], + "comparison": [ + { + "expected": 1, + "inputs": [ + "+0", + "-0" + ], + "mode": "EQ" + }, + { + "expected": 0, + "inputs": [ + "-0", + "+0" + ], + "mode": "LT" + }, + { + "expected": 1, + "inputs": [ + "qNaN", + "1" + ], + "mode": "NE" + }, + { + "expected": 0, + "inputs": [ + "qNaN", + "1" + ], + "mode": "GE" + } + ], + "invalid_float_to_integer": [ + { + "destination": "S64", + "expected_raw": "0x8000000000000000", + "input": "qNaN", + "sat": false + }, + { + "destination": "S32", + "expected_raw": "0x80000000", + "input": "+infinity", + "sat": false + }, + { + "destination": "S4X2", + "expected_lane_raw": "0x8", + "input": "qNaN", + "sat": false + }, + { + "destination": "U64", + "expected_raw": "0xFFFFFFFFFFFFFFFF", + "input": "qNaN", + "sat": false + }, + { + "destination": "U8", + "expected_raw": "0xFF", + "input": "-infinity", + "sat": false + }, + { + "destination": "U4X2", + "expected_lane_raw": "0xF", + "input": "qNaN", + "sat": false + } + ], + "low_precision_encoding": [ + { + "data_type": "HiF8", + "expected": "+0", + "raw": "0x00" + }, + { + "data_type": "HiF8", + "expected": "2^-22", + "raw": "0x01" + }, + { + "data_type": "HiF8", + "expected": "2^-16", + "raw": "0x07" + }, + { + "data_type": "HiF8", + "expected": "1", + "raw": "0x08" + }, + { + "data_type": "HiF8", + "expected": "32768", + "raw": "0x6E" + }, + { + "data_type": "HiF8", + "expected": "+infinity", + "raw": "0x6F" + }, + { + "data_type": "HiF8", + "expected": "NaN", + "raw": "0x80" + }, + { + "data_type": "HiF8", + "expected": "-infinity", + "raw": "0xEF" + }, + { + "data_type": "E4M3", + "expected": "2^-9", + "raw": "0x01" + }, + { + "data_type": "E4M3", + "expected": "448", + "raw": "0x7E" + }, + { + "data_type": "E4M3", + "expected": "NaN", + "raw": "0x7F" + }, + { + "data_type": "E5M2", + "expected": "2^-16", + "raw": "0x01" + }, + { + "data_type": "E5M2", + "expected": "57344", + "raw": "0x7B" + }, + { + "data_type": "E5M2", + "expected": "+infinity", + "raw": "0x7C" + }, + { + "data_type": "E5M2", + "expected": "NaN", + "raw": "0x7E" + }, + { + "data_type": "E3M2", + "expected": "0.0625", + "raw": "0x01" + }, + { + "data_type": "E3M2", + "expected": "28", + "raw": "0x1F" + }, + { + "data_type": "E2M3", + "expected": "0.125", + "raw": "0x01" + }, + { + "data_type": "E2M3", + "expected": "7.5", + "raw": "0x1F" + }, + { + "data_type": "E8M0", + "expected": "2^-127", + "raw": "0x00" + }, + { + "data_type": "E8M0", + "expected": "1", + "raw": "0x7F" + }, + { + "data_type": "E8M0", + "expected": "2", + "raw": "0x80" + }, + { + "data_type": "E8M0", + "expected": "2^127", + "raw": "0xFE" + }, + { + "data_type": "E8M0", + "expected": "NaN", + "raw": "0xFF" + } + ], + "matrix": [ + { + "accumulator": "FP32", + "expected": [ + [ + "19", + "22" + ], + [ + "43", + "50" + ] + ], + "id": "fp32-matmul-2x2", + "k_order": [ + 0, + 1 + ], + "left": [ + [ + "1", + "2" + ], + [ + "3", + "4" + ] + ], + "right": [ + [ + "5", + "6" + ], + [ + "7", + "8" + ] + ] + }, + { + "bias": [ + "1", + "-2" + ], + "dot_products": [ + "19", + "22" + ], + "expected_acc": [ + "20", + "20" + ], + "id": "fp32-matmul-bias" + }, + { + "dot_products": [ + "19", + "22" + ], + "expected_acc": [ + "29", + "42" + ], + "id": "fp32-matmul-acc", + "prior_acc": [ + "10", + "20" + ] + }, + { + "base": "1.5", + "e8m0": "0x80", + "expected": "3.0", + "id": "mx-e8m0-scale" + }, + { + "expected_acc": "40", + "expected_acc_with_bias_2": "42", + "expected_acc_with_prior_3": "43", + "id": "mx-k-block-33", + "left_type": "E4M3", + "logical_shape": { + "K": 33, + "M": 1, + "N": 1 + }, + "order": "scale-inputs-before-each-fma", + "right_type": "E5M2", + "scale_a": [ + "0x7F", + "0x80" + ], + "scale_a_shape": [ + 1, + 2 + ], + "scale_b": [ + "0x7F", + "0x81" + ], + "scale_b_shape": [ + 2, + 1 + ], + "unscaled_inputs": "all-one" + } + ], + "packed_lane_order": [ + { + "data_type": "E1M2X2", + "expected_logical_lanes": [ + "+0.25", + "-0.25" + ], + "raw_byte": "0x91", + "rule": "low-nibble-even-high-nibble-odd" + }, + { + "data_type": "HiF4X2", + "expected_logical_lanes": [ + "+0.25", + "-0.25" + ], + "raw_byte": "0x91", + "rule": "low-nibble-even-high-nibble-odd" + }, + { + "data_type": "E2M1X2", + "expected_logical_lanes": [ + "+0.5", + "-0.5" + ], + "raw_byte": "0x91", + "rule": "low-nibble-even-high-nibble-odd" + } + ], + "reduction": [ + { + "expected_index": 1, + "inputs": [ + "5", + "7", + "7", + "3" + ], + "operation": "ARGMAX" + }, + { + "expected": "-2", + "inputs": [ + "qNaN", + "4", + "-2" + ], + "operation": "MIN" + }, + { + "expected": "canonical-qNaN", + "inputs": [ + "1", + "qNaN", + "2" + ], + "operation": "SUM" + }, + { + "expected": "+0", + "inputs": [ + "-0", + "+0" + ], + "operation": "MAX" + } + ], + "rounding": [ + { + "destination": "S32", + "expected": "2", + "input": "2.5", + "mode": "RNE" + }, + { + "destination": "S32", + "expected": "4", + "input": "3.5", + "mode": "RNE" + }, + { + "destination": "S32", + "expected": "-1", + "input": "-1.9", + "mode": "RTZ" + }, + { + "destination": "S32", + "expected": "-2", + "input": "-1.1", + "mode": "RDN" + }, + { + "destination": "S32", + "expected": "2", + "input": "1.1", + "mode": "RUP" + }, + { + "destination": "S32", + "expected": "-3", + "input": "-2.5", + "mode": "RNA" + }, + { + "destination": "S32", + "expected": "3", + "input": "2.25", + "mode": "RTO" + }, + { + "destination": "S32", + "expected": "3", + "input": "2.5", + "mode": "RHB" + }, + { + "destination": "S32", + "expected": "-2", + "input": "-2.5", + "mode": "RHB" + } + ], + "saturation": [ + { + "destination": "S8", + "expected": "127", + "input": "130", + "sat": true + }, + { + "destination": "S8", + "expected": "-128", + "input": "-129", + "sat": true + }, + { + "destination": "U8", + "expected": "0", + "input": "-1", + "sat": true + }, + { + "destination": "FP16", + "expected": "0x7BFF", + "input": "+infinity", + "sat": true + }, + { + "destination": "S32", + "expected": "0", + "input": "qNaN", + "sat": true + } + ], + "signed_zero": [ + { + "expected": "0x80000000", + "id": "fp32-negative-zero-multiply", + "inputs": [ + "-0", + "2" + ], + "operation": "multiply" + }, + { + "expected": "0x00000000", + "id": "fp32-exact-cancellation-rne", + "inputs": [ + "+1", + "-1" + ], + "operation": "add", + "rounding": "RNE" + }, + { + "expected": "0x80000000", + "id": "fp32-min-zero", + "inputs": [ + "+0", + "-0" + ], + "operation": "minimum" + }, + { + "expected": "0x00000000", + "id": "fp32-max-zero", + "inputs": [ + "+0", + "-0" + ], + "operation": "maximum" + } + ], + "sort": [ + { + "ascending_expected_original_indices": [ + 31, + 29, + 27, + 25, + 23, + 21, + 19, + 17, + 15, + 13, + 11, + 9, + 6, + 1, + 3, + 4, + 5, + 0, + 8, + 10, + 12, + 14, + 16, + 18, + 20, + 22, + 24, + 26, + 28, + 30, + 2, + 7 + ], + "data_type": "FP32", + "descending_expected_original_indices": [ + 30, + 28, + 26, + 24, + 22, + 20, + 18, + 16, + 14, + 12, + 10, + 8, + 0, + 4, + 5, + 1, + 3, + 6, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + 31, + 2, + 7 + ], + "input_values": [ + "3", + "+0", + "qNaN#0", + "-0", + "2", + "2", + "-1", + "qNaN#1", + "4", + "-4", + "5", + "-5", + "6", + "-6", + "7", + "-7", + "8", + "-8", + "9", + "-9", + "10", + "-10", + "11", + "-11", + "12", + "-12", + "13", + "-13", + "14", + "-14", + "15", + "-15" + ] + } + ] + } +} diff --git a/tests/linxisa/test_v0571_hardware_numeric_vectors.py b/tests/linxisa/test_v0571_hardware_numeric_vectors.py new file mode 100644 index 000000000000..c356ede4b3f7 --- /dev/null +++ b/tests/linxisa/test_v0571_hardware_numeric_vectors.py @@ -0,0 +1,232 @@ +#!/usr/bin/env python3 +"""Execute all 75 canonical 0.57.1 hardware numeric vectors in shared C.""" + +import ctypes +import json +import math +from pathlib import Path +import subprocess +import tempfile +import unittest + + +ROOT = Path(__file__).resolve().parents[2] +VECTORS = ROOT / "tests/linxisa/pto-isa-0571-hardware-numeric-vectors.json" +DTYPE = { + "FP64": 0, "FP32": 1, "TF32": 2, "HF32": 3, "FP16": 4, + "BF16": 5, "HiF8": 6, "E4M3": 7, "E5M2": 8, "E3M2": 9, + "E2M3": 10, "E2M1X2": 11, "E1M2X2": 12, "E8M0": 13, + "HiF4X2": 14, "S64": 16, "S32": 17, "S16": 18, "S8": 19, + "S4X2": 20, "U64": 24, "U32": 25, "U16": 26, "U8": 27, + "U4X2": 28, +} +RMODE = {"RNE": 1, "RTZ": 2, "RDN": 3, "RUP": 4, + "RNA": 5, "RTO": 6, "RHB": 7} + +WRAPPER = r''' +#include +#include +#include "tile_numeric_057.h" + +uint64_t v_nan(unsigned d) { return linx_tile_numeric_canonical_nan(d); } +int v_ordinary(unsigned d) { return linx_tile_numeric_ordinary(d); } +unsigned v_acc_dtype(unsigned d) { return linx_tile_numeric_acc_dtype(d); } +int v_mx_pair(unsigned a, unsigned b) { return linx_tile_numeric_mx_pair(a, b); } +double v_decode(unsigned d, uint64_t r, unsigned l) { + return linx_tile_numeric_decode(d, r, l); +} +int64_t v_round(double x, unsigned m) { + return linx_tile_numeric_round_s64(x, m); +} +int v_compare(double a, double b, unsigned mode) { + return linx_tile_numeric_compare(a, b, mode); +} +uint64_t v_invalid(unsigned d) { + return linx_tile_numeric_float_to_integer(d, NAN, 1, false); +} +int64_t v_sat_int(double x, unsigned d) { + uint64_t raw = linx_tile_numeric_float_to_integer(d, x, 1, true); + if (d == 19) return (int8_t)raw; if (d == 17) return (int32_t)raw; + return raw; +} +uint32_t v_sat_fp16(double x) { + return linx_tile_numeric_encode_saturated(4, x); +} +uint32_t v_f32_op(double a, double b, unsigned op) { + return linx_tile_numeric_f32_binary(a, b, op); +} +void v_matmul_2x2(const float *a, const float *b, float *out) { + for (unsigned i = 0; i < 2; i++) { + for (unsigned j = 0; j < 2; j++) { + float acc = 0; + for (unsigned k = 0; k < 2; k++) acc += a[i * 2 + k] * b[k * 2 + j]; + out[i * 2 + j] = acc; + } + } +} +float v_bias_acc(float dot, float bias, float prior, unsigned flags) { + float acc = (flags & 1) ? prior : 0; + acc += dot; + if (flags & 2) acc += bias; + return acc; +} +float v_mx33(unsigned bias, unsigned prior) { + float acc = prior; + for (unsigned k = 0; k < 33; k++) { + uint8_t sa = k < 32 ? 0x7f : 0x80; + uint8_t sb = k < 32 ? 0x7f : 0x81; + float a = (float)linx_tile_numeric_decode(7, 0x38, 0); + float b = (float)linx_tile_numeric_decode(8, 0x3c, 0); + a *= (float)linx_tile_numeric_decode(13, sa, 0); + b *= (float)linx_tile_numeric_decode(13, sb, 0); + acc += a * b; + } + return acc + bias; +} +int v_argmax(const double *v, unsigned n) { + return linx_tile_numeric_argmax(v, n); +} +double v_reduce(const double *v, unsigned n, unsigned op) { + return linx_tile_numeric_reduce(v, n, op); +} +void v_sort(const double *v, unsigned *idx, unsigned n, unsigned desc) { + linx_tile_numeric_sort_indices(v, idx, n, desc); +} +''' + + +def number(text): + if text in ("qNaN", "canonical-qNaN") or text.startswith("qNaN#"): + return math.nan + if text in ("+infinity",): + return math.inf + if text == "-infinity": + return -math.inf + if text == "NaN": + return math.nan + if text == "+0": + return 0.0 + if text == "-0": + return -0.0 + if "^" in text: + base, exp = text.split("^") + return float(base) ** int(exp) + return float(text) + + +class HardwareNumericVectors(unittest.TestCase): + @classmethod + def setUpClass(cls): + cls.tmp = tempfile.TemporaryDirectory(prefix="linx-numeric-0571-") + source = Path(cls.tmp.name) / "vectors.c" + library = Path(cls.tmp.name) / "vectors.so" + source.write_text(WRAPPER, encoding="utf-8") + subprocess.run([ + "cc", "-std=c11", "-shared", "-fPIC", "-O2", + "-I", str(ROOT / "target/linx"), str(source), "-lm", "-o", str(library) + ], check=True) + cls.lib = ctypes.CDLL(str(library)) + cls.lib.v_nan.restype = ctypes.c_uint64 + cls.lib.v_decode.argtypes = [ctypes.c_uint, ctypes.c_uint64, ctypes.c_uint] + cls.lib.v_decode.restype = ctypes.c_double + cls.lib.v_round.argtypes = [ctypes.c_double, ctypes.c_uint] + cls.lib.v_round.restype = ctypes.c_int64 + cls.lib.v_compare.argtypes = [ctypes.c_double, ctypes.c_double, ctypes.c_uint] + cls.lib.v_invalid.restype = ctypes.c_uint64 + cls.lib.v_sat_int.argtypes = [ctypes.c_double, ctypes.c_uint] + cls.lib.v_sat_int.restype = ctypes.c_int64 + cls.lib.v_sat_fp16.argtypes = [ctypes.c_double] + cls.lib.v_sat_fp16.restype = ctypes.c_uint32 + cls.lib.v_f32_op.argtypes = [ctypes.c_double, ctypes.c_double, ctypes.c_uint] + cls.lib.v_f32_op.restype = ctypes.c_uint32 + cls.lib.v_bias_acc.argtypes = [ctypes.c_float, ctypes.c_float, + ctypes.c_float, ctypes.c_uint] + cls.lib.v_bias_acc.restype = ctypes.c_float + cls.lib.v_mx33.argtypes = [ctypes.c_uint, ctypes.c_uint] + cls.lib.v_mx33.restype = ctypes.c_float + cls.lib.v_reduce.restype = ctypes.c_double + + @classmethod + def tearDownClass(cls): + cls.tmp.cleanup() + + def test_all_75_canonical_vectors_execute(self): + groups = json.loads(VECTORS.read_text(encoding="utf-8"))["vector_groups"] + executed = 0 + + for v in groups["canonical_nan"]: + self.assertEqual(self.lib.v_nan(DTYPE[v["data_type"]]), int(v["expected"], 16)); executed += 1 + for v in groups["comparison"]: + mode = ["EQ", "NE", "LT", "GT", "LE", "GE"].index(v["mode"]) + self.assertEqual(self.lib.v_compare(number(v["inputs"][0]), number(v["inputs"][1]), mode), v["expected"]); executed += 1 + for v in groups["invalid_float_to_integer"]: + expected = int(v.get("expected_raw", v.get("expected_lane_raw")), 16) + self.assertEqual(self.lib.v_invalid(DTYPE[v["destination"]]), expected); executed += 1 + for v in groups["low_precision_encoding"]: + got = self.lib.v_decode(DTYPE[v["data_type"]], int(v["raw"], 16), 0) + expected = number(v["expected"]) + self.assertTrue(math.isnan(got) if math.isnan(expected) else got == expected); executed += 1 + + for v in groups["matrix"]: + if v["id"] == "fp32-matmul-2x2": + A = (ctypes.c_float * 4)(*[float(x) for row in v["left"] for x in row]) + B = (ctypes.c_float * 4)(*[float(x) for row in v["right"] for x in row]) + out = (ctypes.c_float * 4)(); self.lib.v_matmul_2x2(A, B, out) + self.assertEqual(list(out), [float(x) for row in v["expected"] for x in row]) + elif v["id"] == "fp32-matmul-bias": + self.assertEqual([self.lib.v_bias_acc(float(d), float(b), 0, 2) + for d, b in zip(v["dot_products"], v["bias"])], + [float(x) for x in v["expected_acc"]]) + elif v["id"] == "fp32-matmul-acc": + self.assertEqual([self.lib.v_bias_acc(float(d), 0, float(p), 1) + for d, p in zip(v["dot_products"], v["prior_acc"])], + [float(x) for x in v["expected_acc"]]) + elif v["id"] == "mx-e8m0-scale": + self.assertEqual(float(v["base"]) * self.lib.v_decode(13, int(v["e8m0"], 16), 0), float(v["expected"])) + else: + self.assertEqual(self.lib.v_mx33(0, 0), float(v["expected_acc"])) + self.assertEqual(self.lib.v_mx33(2, 0), float(v["expected_acc_with_bias_2"])) + self.assertEqual(self.lib.v_mx33(0, 3), float(v["expected_acc_with_prior_3"])) + executed += 1 + + for v in groups["packed_lane_order"]: + raw = int(v["raw_byte"], 16); dtype = DTYPE[v["data_type"]] + self.assertEqual([self.lib.v_decode(dtype, raw, i) for i in range(2)], + [number(x) for x in v["expected_logical_lanes"]]); executed += 1 + for v in groups["reduction"]: + vals = (ctypes.c_double * len(v["inputs"]))(*[number(x) for x in v["inputs"]]) + if v["operation"] == "ARGMAX": got = self.lib.v_argmax(vals, len(vals)); expected = v["expected_index"] + elif v["operation"] == "MIN": got = self.lib.v_reduce(vals, len(vals), 0); expected = number(v["expected"]) + elif v["operation"] == "SUM": got = self.lib.v_reduce(vals, len(vals), 1); expected = math.nan + else: got = self.lib.v_f32_op(vals[0], vals[1], 3); expected = 0 + self.assertTrue(math.isnan(got) if isinstance(expected, float) and math.isnan(expected) else got == expected); executed += 1 + for v in groups["rounding"]: + self.assertEqual(self.lib.v_round(float(v["input"]), RMODE[v["mode"]]), int(v["expected"])); executed += 1 + for v in groups["saturation"]: + expected = int(v["expected"], 16) if v["expected"].startswith("0x") else int(v["expected"]) + got = self.lib.v_sat_fp16(number(v["input"])) if v["destination"] == "FP16" else self.lib.v_sat_int(number(v["input"]), DTYPE[v["destination"]]) + self.assertEqual(got, expected); executed += 1 + for v in groups["signed_zero"]: + op = {"multiply": 0, "add": 1, "minimum": 2, "maximum": 3}[v["operation"]] + self.assertEqual(self.lib.v_f32_op(number(v["inputs"][0]), number(v["inputs"][1]), op), int(v["expected"], 16)); executed += 1 + for v in groups["sort"]: + vals = (ctypes.c_double * 32)(*[number(x) for x in v["input_values"]]); out = (ctypes.c_uint * 32)() + self.lib.v_sort(vals, out, 32, 0); self.assertEqual(list(out), v["ascending_expected_original_indices"]) + self.lib.v_sort(vals, out, 32, 1); self.assertEqual(list(out), v["descending_expected_original_indices"]); executed += 1 + + self.assertEqual(executed, 75) + + def test_cube_type_matrix_is_24_plus_8_and_fail_closed(self): + ordinary = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, + 16, 17, 18, 19, 20, 24, 25, 26, 27, 28] + self.assertEqual([d for d in range(32) if self.lib.v_ordinary(d)], ordinary) + expected_acc = ([0] + [1] * 13 + [16] * 5 + [24] * 5) + self.assertEqual([self.lib.v_acc_dtype(d) for d in ordinary], expected_acc) + mx = [(7, 7), (7, 8), (8, 7), (8, 8), + (11, 11), (11, 14), (14, 11), (14, 14)] + self.assertEqual([(a, b) for a in range(32) for b in range(32) + if self.lib.v_mx_pair(a, b)], mx) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/unit/meson.build b/tests/unit/meson.build index 901807d9aae9..ebd94c8830fd 100644 --- a/tests/unit/meson.build +++ b/tests/unit/meson.build @@ -7,6 +7,13 @@ linx_tile_test_target = declare_dependency( '-DCONFIG_TARGET="linx64-softmmu-config-target.h"', ], ) +linx_tile_cube_test_target = declare_dependency( + dependencies: [linx_tile_test_target], + sources: [ + '../../target/linx/tile_cube_057.c', + '../../fpu/softfloat.c', + ], +) tests = { 'check-block-qdict': [], @@ -56,6 +63,7 @@ tests = { 'test-interval-tree': [], 'test-fifo': [], 'test-linx-tile-transaction': [linx_tile_test_target], + 'test-linx-tile-cube-numeric': [linx_tile_cube_test_target], } if have_system or have_tools diff --git a/tests/unit/test-linx-tile-cube-numeric.c b/tests/unit/test-linx-tile-cube-numeric.c new file mode 100644 index 000000000000..602ea98d68d0 --- /dev/null +++ b/tests/unit/test-linx-tile-cube-numeric.c @@ -0,0 +1,516 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +#include "qemu/osdep.h" +#include "target/linx/cpu.h" +#include "target/linx/tile_cube_057.h" +#include "target/linx/tile_numeric_057.h" +#include + +static unsigned dtype_bytes(unsigned dtype) +{ + switch (dtype) { + case 0: + case 16: + case 24: + return 8; + case 1: + case 2: + case 3: + case 17: + case 25: + return 4; + case 4: + case 5: + case 18: + case 26: + return 2; + default: + return 1; + } +} + +static void set_tile(CPULinxState *env, unsigned tile, unsigned dtype, + unsigned rows, unsigned cols, const void *data, + unsigned bytes) +{ + memset(env->tile_reg[tile], 0, sizeof(env->tile_reg[tile])); + memcpy(env->tile_reg[tile], data, bytes); + env->tile_reg_capacity[tile] = MAX(bytes, 16u); + env->tile_reg_bytes[tile] = MAX(bytes, 4u); + env->tile_reg_elem_bytes[tile] = dtype_bytes(dtype); + env->tile_reg_dtype[tile] = dtype; + env->tile_reg_valid_cols[tile] = cols; + env->tile_reg_valid_rows[tile] = rows; + env->tile_reg_cols[tile] = cols; + env->tile_reg_rows[tile] = rows; +} + +static void set_fp64_acc(CPULinxState *env, const double *values, unsigned rows, + unsigned cols) +{ + unsigned bytes = rows * cols * sizeof(double); + memset(env->tile_acc, 0, sizeof(env->tile_acc)); + memcpy(env->tile_acc, values, bytes); + env->tile_acc_bytes = MAX(bytes, 16u); + env->tile_acc_dtype = LINX_TILE_ACC_FP64; + env->tile_acc_valid = 1; + env->tile_acc_rows = rows; + env->tile_acc_cols = cols; +} + +static uint64_t run_acccvt(CPULinxState *env, unsigned dtype, double value, + unsigned rmode, bool sat) +{ + uint64_t raw = 0; + set_fp64_acc(env, &value, 1, 1); + env->tile_dtype = dtype; + env->tile_attr_raw = (rmode << 25) | ((unsigned)sat << 28); + env->tile_reg_capacity[31] = 16; + g_assert_true(linx_tile_acccvt_057(env, 31, 0)); + memcpy(&raw, env->tile_reg[31], dtype_bytes(dtype)); + g_assert_cmpuint(env->tile_reg_valid_cols[31], ==, 1); + g_assert_cmpuint(env->tile_reg_valid_rows[31], ==, 1); + g_assert_cmpuint(env->tile_reg_cols[31], ==, 1); + g_assert_cmpuint(env->tile_reg_rows[31], ==, 1); + return raw; +} + +static uint64_t raw_one(unsigned dtype) +{ + switch (dtype) { + case 0: + return UINT64_C(0x3ff0000000000000); + case 1: + case 2: + case 3: + return 0x3f800000; + case 4: + return 0x3c00; + case 5: + return 0x3f80; + case 6: + return 0x08; + case 7: + return 0x38; + case 8: + return 0x3c; + case 9: + return 0x0c; + case 10: + return 0x08; + case 11: + return 0x02; + case 12: + case 14: + return 0x04; + default: + return 1; + } +} + +static void test_all_production_type_rows(void) +{ + static const unsigned ordinary[] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 14, 16, 17, 18, 19, 20, 24, 25, 26, 27, 28, + }; + static const unsigned mx[][2] = { + {7, 7}, {7, 8}, {8, 7}, {8, 8}, {11, 11}, {11, 14}, {14, 11}, {14, 14}, + }; + CPULinxState *env = g_new0(CPULinxState, 1); + uint8_t scale = 0x7f; + + env->lb[0] = env->lb[1] = env->lb[2] = 1; + for (unsigned i = 0; i < G_N_ELEMENTS(ordinary); i++) { + uint64_t one = raw_one(ordinary[i]); + env->tile_dtype = ordinary[i]; + set_tile(env, 0, ordinary[i], 1, 1, &one, dtype_bytes(ordinary[i])); + set_tile(env, 1, ordinary[i], 1, 1, &one, dtype_bytes(ordinary[i])); + g_assert_true(linx_tile_cube_compute_057(env, 0, 1, 0, 0, 0, 0, false, + false, false)); + if (env->tile_acc_dtype == LINX_TILE_ACC_FP32) { + float result; + memcpy(&result, env->tile_acc, sizeof(result)); + g_assert_cmpfloat(result, ==, 1.0); + } else if (env->tile_acc_dtype == LINX_TILE_ACC_FP64) { + double result; + memcpy(&result, env->tile_acc, sizeof(result)); + g_assert_cmpfloat(result, ==, 1.0); + } else { + uint64_t result; + memcpy(&result, env->tile_acc, sizeof(result)); + g_assert_cmpuint(result, ==, 1); + } + } + for (unsigned i = 0; i < G_N_ELEMENTS(mx); i++) { + uint64_t left = raw_one(mx[i][0]), right = raw_one(mx[i][1]); + float result; + env->tile_dtype = 1; + set_tile(env, 0, mx[i][0], 1, 1, &left, 1); + set_tile(env, 1, mx[i][1], 1, 1, &right, 1); + set_tile(env, 2, 13, 1, 1, &scale, 1); + set_tile(env, 3, 13, 1, 1, &scale, 1); + g_assert_true(linx_tile_cube_compute_057(env, 0, 1, 2, 3, 0, 0, true, + false, false)); + memcpy(&result, env->tile_acc, sizeof(result)); + g_assert_cmpfloat(result, ==, 1.0); + } + env->tile_dtype = 15; + g_assert_false( + linx_tile_cube_compute_057(env, 0, 1, 0, 0, 0, 0, false, false, false)); + g_free(env); +} + +static void test_ordinary_bias_and_acc(void) +{ + CPULinxState *env = g_new0(CPULinxState, 1); + float left[] = {1, 2, 3, 4}; + float right[] = {5, 6, 7, 8}; + float bias[] = {1, -2}; + float result[4]; + + env->lb[0] = env->lb[1] = env->lb[2] = 2; + env->tile_dtype = 1; + set_tile(env, 0, 1, 2, 2, left, sizeof(left)); + set_tile(env, 1, 1, 2, 2, right, sizeof(right)); + set_tile(env, 2, 1, 1, 2, bias, sizeof(bias)); + g_assert_true( + linx_tile_cube_compute_057(env, 0, 1, 0, 0, 2, 2, false, true, false)); + memcpy(result, env->tile_acc, sizeof(result)); + g_assert_cmpfloat(result[0], ==, 20); + g_assert_cmpfloat(result[1], ==, 20); + g_assert_cmpfloat(result[2], ==, 44); + g_assert_cmpfloat(result[3], ==, 48); + g_assert_cmpuint(env->tile_acc_dtype, ==, LINX_TILE_ACC_FP32); + g_assert_cmpuint(env->tile_acc_rows, ==, 2); + g_assert_cmpuint(env->tile_acc_cols, ==, 2); + + g_assert_true( + linx_tile_cube_compute_057(env, 0, 1, 0, 0, 0, 2, false, false, true)); + memcpy(result, env->tile_acc, sizeof(result)); + g_assert_cmpfloat(result[0], ==, 39); + g_assert_cmpfloat(result[1], ==, 42); + g_assert_cmpfloat(result[2], ==, 87); + g_assert_cmpfloat(result[3], ==, 98); + g_free(env); +} + +static void test_mx_crosses_k32(void) +{ + CPULinxState *env = g_new0(CPULinxState, 1); + uint8_t left[33], right[33], scale_a[] = {0x7f, 0x80}; + uint8_t scale_b[] = {0x7f, 0x81}; + float bias = 2, result, prior = 3; + + memset(left, 0x38, sizeof(left)); + memset(right, 0x3c, sizeof(right)); + env->lb[0] = 1; + env->lb[1] = 1; + env->lb[2] = 33; + env->tile_dtype = 1; + set_tile(env, 0, 7, 1, 33, left, sizeof(left)); + set_tile(env, 1, 8, 33, 1, right, sizeof(right)); + set_tile(env, 2, 13, 1, 2, scale_a, sizeof(scale_a)); + set_tile(env, 3, 13, 2, 1, scale_b, sizeof(scale_b)); + set_tile(env, 4, 1, 1, 1, &bias, sizeof(bias)); + g_assert_true( + linx_tile_cube_compute_057(env, 0, 1, 2, 3, 4, 0, true, true, false)); + memcpy(&result, env->tile_acc, sizeof(result)); + g_assert_cmpfloat(result, ==, 42); + + memcpy(env->tile_acc, &prior, sizeof(prior)); + env->tile_acc_bytes = 16; + env->tile_acc_dtype = LINX_TILE_ACC_FP32; + env->tile_acc_valid = 1; + env->tile_acc_rows = env->tile_acc_cols = 1; + g_assert_true( + linx_tile_cube_compute_057(env, 0, 1, 2, 3, 0, 0, true, false, true)); + memcpy(&result, env->tile_acc, sizeof(result)); + g_assert_cmpfloat(result, ==, 43); + g_free(env); +} + +static void test_acccvt_all_rounding_modes(void) +{ + static const struct { + unsigned dtype; + double halfway; + uint64_t lower; + uint64_t upper; + } formats[] = { + {1, 1.000000059604644775390625, 0x3f800000, 0x3f800001}, + {2, 1.00048828125, 0x3f800000, 0x3f802000}, + {3, 1.000244140625, 0x3f800000, 0x3f801000}, + {4, 1.00048828125, 0x3c00, 0x3c01}, + {5, 1.00390625, 0x3f80, 0x3f81}, + {6, 1.0625, 0x08, 0x09}, + {7, 1.0625, 0x38, 0x39}, + {8, 1.125, 0x3c, 0x3d}, + {9, 1.125, 0x0c, 0x0d}, + {10, 1.0625, 0x08, 0x09}, + {11, 1.25, 0x2, 0x3}, + {12, .375, 0x1, 0x2}, + {14, .375, 0x1, 0x2}, + }; + static const uint16_t positive[] = { + 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c01, 0x3c01, 0x3c01, 0x3c01, + }; + static const uint8_t packed[] = { + 0x2, 0x2, 0x1, 0x1, 0x2, 0x2, 0x1, 0x2, + }; + CPULinxState *env = g_new0(CPULinxState, 1); + double half_fp16 = 1.0 + ldexp(1.0, -11); + + for (unsigned mode = 0; mode < 8; mode++) { + g_assert_cmphex(run_acccvt(env, 4, half_fp16, mode, false), ==, + positive[mode]); + g_assert_cmphex(run_acccvt(env, 12, .375, mode, false) & 0xfu, ==, + packed[mode]); + } + for (unsigned i = 0; i < G_N_ELEMENTS(formats); i++) { + for (unsigned mode = 0; mode < 8; mode++) { + bool upper = mode == 4 || mode == 5 || mode == 7 || + (mode == 6 && (formats[i].lower & 1u) == 0u) || + ((mode == 0 || mode == 1) && (formats[i].lower & 1u)); + uint64_t expected = upper ? formats[i].upper : formats[i].lower; + g_assert_cmphex(run_acccvt(env, formats[i].dtype, + formats[i].halfway, mode, false), + ==, expected); + } + } + for (unsigned mode = 0; mode < 8; mode++) { + g_assert_cmphex(run_acccvt(env, 0, 1.0, mode, false), ==, + UINT64_C(0x3ff0000000000000)); + } + g_assert_cmphex(run_acccvt(env, 4, -half_fp16, 7, false), ==, 0xbc00); + g_free(env); +} + +static void test_acccvt_is_host_fenv_independent(void) +{ + CPULinxState *env = g_new0(CPULinxState, 1); + double value = 1.0 + ldexp(1.0, -11); + uint32_t operand = 0x3f800001; + uint32_t cube_expected; + uint64_t expected; + int original = fegetround(); + const int host_modes[] = {FE_DOWNWARD, FE_UPWARD, FE_TOWARDZERO}; + + env->lb[0] = env->lb[1] = env->lb[2] = 1; + env->tile_dtype = 1; + set_tile(env, 0, 1, 1, 1, &operand, sizeof(operand)); + set_tile(env, 1, 1, 1, 1, &operand, sizeof(operand)); + fesetround(FE_TONEAREST); + g_assert_true( + linx_tile_cube_compute_057(env, 0, 1, 0, 0, 0, 0, false, false, false)); + memcpy(&cube_expected, env->tile_acc, sizeof(cube_expected)); + expected = run_acccvt(env, 4, value, 1, false); + for (unsigned i = 0; i < G_N_ELEMENTS(host_modes); i++) { + fesetround(host_modes[i]); + env->tile_dtype = 1; + g_assert_true(linx_tile_cube_compute_057(env, 0, 1, 0, 0, 0, 0, false, + false, false)); + g_assert_cmphex(*(uint32_t *)env->tile_acc, ==, cube_expected); + g_assert_cmphex(run_acccvt(env, 4, value, 1, false), ==, expected); + } + fesetround(original); + g_free(env); +} + +static void test_acccvt_saturates_every_float_target(void) +{ + static const struct { + unsigned dtype; + uint64_t max; + } cases[] = { + {0, UINT64_C(0x7fefffffffffffff)}, + {1, 0x7f7fffff}, + {2, 0x7f7fe000}, + {3, 0x7f7ff000}, + {4, 0x7bff}, + {5, 0x7f7f}, + {6, 0x6e}, + {7, 0x7e}, + {8, 0x7b}, + {9, 0x1f}, + {10, 0x1f}, + {11, 0x7}, + {12, 0x7}, + {14, 0x7}, + }; + CPULinxState *env = g_new0(CPULinxState, 1); + + for (unsigned i = 0; i < G_N_ELEMENTS(cases); i++) { + g_assert_cmphex(run_acccvt(env, cases[i].dtype, INFINITY, 1, true), ==, + cases[i].max); + if (cases[i].dtype != 0) { + g_assert_cmphex(run_acccvt(env, cases[i].dtype, 1e300, 1, true), ==, + cases[i].max); + } + } + g_free(env); +} + +static void test_acccvt_preserves_signed_zero(void) +{ + static const struct { + unsigned dtype; + uint64_t zero; + } cases[] = { + {0, UINT64_C(0x8000000000000000)}, + {1, 0x80000000}, + {2, 0x80000000}, + {3, 0x80000000}, + {4, 0x8000}, + {5, 0x8000}, + {6, 0x00}, + {7, 0x80}, + {8, 0x80}, + {9, 0x20}, + {10, 0x20}, + {11, 0x8}, + {12, 0x8}, + {14, 0x8}, + }; + CPULinxState *env = g_new0(CPULinxState, 1); + + for (unsigned i = 0; i < G_N_ELEMENTS(cases); i++) { + g_assert_cmphex(run_acccvt(env, cases[i].dtype, -0.0, 1, false), ==, + cases[i].zero); + } + double packed_values[] = {.25, -.25}; + set_fp64_acc(env, packed_values, 1, 2); + env->tile_dtype = 12; + env->tile_attr_raw = 1u << 25; + env->tile_reg_capacity[31] = 16; + g_assert_true(linx_tile_acccvt_057(env, 31, 0)); + g_assert_cmphex(((uint8_t *)env->tile_reg[31])[0], ==, 0x91); + g_assert_cmpuint(env->tile_reg_cols[31], ==, 2); + g_free(env); +} + +static void test_acccvt_canonicalizes_nan(void) +{ + static const struct { + unsigned dtype; + uint64_t canonical_nan; + } cases[] = { + {0, UINT64_C(0x7ff8000000000000)}, + {1, 0x7fc00000}, + {2, 0x7fc00000}, + {3, 0x7fc00000}, + {4, 0x7e00}, + {5, 0x7fc0}, + {6, 0x80}, + {7, 0x7f}, + {8, 0x7e}, + }; + CPULinxState *env = g_new0(CPULinxState, 1); + const double positive_nan = NAN; + const double negative_nan = copysign(NAN, -1.0); + + for (unsigned i = 0; i < G_N_ELEMENTS(cases); i++) { + g_assert_cmphex(run_acccvt(env, cases[i].dtype, positive_nan, 1, false), + ==, cases[i].canonical_nan); + g_assert_cmphex(run_acccvt(env, cases[i].dtype, negative_nan, 1, false), + ==, cases[i].canonical_nan); + } + g_free(env); +} + +static void test_failures_preserve_acc_and_destination(void) +{ + CPULinxState *env = g_new0(CPULinxState, 1); + double value = 1.25; + uint32_t before_tile[LINX_TILE_MAX_WORDS]; + uint32_t before_acc[LINX_TILE_MAX_WORDS]; + uint32_t before_tile_capacity, before_tile_bytes, before_acc_bytes; + uint16_t before_tile_valid_cols, before_tile_valid_rows; + uint16_t before_tile_cols, before_tile_rows; + uint16_t before_acc_cols, before_acc_rows; + uint8_t before_tile_elem_bytes, before_tile_dtype; + uint8_t before_acc_dtype, before_acc_valid; + + set_fp64_acc(env, &value, 1, 1); + env->tile_dtype = 4; + env->tile_reg_capacity[31] = 8; + env->tile_reg[31][0] = 0xdeadbeef; + memcpy(before_tile, env->tile_reg[31], sizeof(before_tile)); + memcpy(before_acc, env->tile_acc, sizeof(before_acc)); + before_tile_capacity = env->tile_reg_capacity[31]; + before_tile_bytes = env->tile_reg_bytes[31]; + before_tile_elem_bytes = env->tile_reg_elem_bytes[31]; + before_tile_dtype = env->tile_reg_dtype[31]; + before_tile_valid_cols = env->tile_reg_valid_cols[31]; + before_tile_valid_rows = env->tile_reg_valid_rows[31]; + before_tile_cols = env->tile_reg_cols[31]; + before_tile_rows = env->tile_reg_rows[31]; + before_acc_bytes = env->tile_acc_bytes; + before_acc_dtype = env->tile_acc_dtype; + before_acc_valid = env->tile_acc_valid; + before_acc_cols = env->tile_acc_cols; + before_acc_rows = env->tile_acc_rows; + g_assert_false(linx_tile_acccvt_057(env, 31, 0)); + g_assert_cmpmem(env->tile_reg[31], sizeof(before_tile), before_tile, + sizeof(before_tile)); + g_assert_cmpmem(env->tile_acc, sizeof(before_acc), before_acc, + sizeof(before_acc)); + g_assert_cmpuint(env->tile_reg_capacity[31], ==, before_tile_capacity); + g_assert_cmpuint(env->tile_reg_bytes[31], ==, before_tile_bytes); + g_assert_cmpuint(env->tile_reg_elem_bytes[31], ==, before_tile_elem_bytes); + g_assert_cmpuint(env->tile_reg_dtype[31], ==, before_tile_dtype); + g_assert_cmpuint(env->tile_reg_valid_cols[31], ==, before_tile_valid_cols); + g_assert_cmpuint(env->tile_reg_valid_rows[31], ==, before_tile_valid_rows); + g_assert_cmpuint(env->tile_reg_cols[31], ==, before_tile_cols); + g_assert_cmpuint(env->tile_reg_rows[31], ==, before_tile_rows); + g_assert_cmpuint(env->tile_acc_bytes, ==, before_acc_bytes); + g_assert_cmpuint(env->tile_acc_dtype, ==, before_acc_dtype); + g_assert_cmpuint(env->tile_acc_valid, ==, before_acc_valid); + g_assert_cmpuint(env->tile_acc_cols, ==, before_acc_cols); + g_assert_cmpuint(env->tile_acc_rows, ==, before_acc_rows); + + env->lb[0] = env->lb[1] = 1; + env->lb[2] = 33; + env->tile_dtype = 1; + uint8_t left[33] = {0}, right[33] = {0}, bad_scale[2] = {0}; + set_tile(env, 0, 7, 1, 33, left, sizeof(left)); + set_tile(env, 1, 8, 33, 1, right, sizeof(right)); + set_tile(env, 2, 19, 1, 2, bad_scale, sizeof(bad_scale)); + set_tile(env, 3, 13, 2, 1, bad_scale, sizeof(bad_scale)); + memcpy(before_acc, env->tile_acc, sizeof(before_acc)); + before_acc_bytes = env->tile_acc_bytes; + before_acc_dtype = env->tile_acc_dtype; + before_acc_valid = env->tile_acc_valid; + before_acc_cols = env->tile_acc_cols; + before_acc_rows = env->tile_acc_rows; + g_assert_false( + linx_tile_cube_compute_057(env, 0, 1, 2, 3, 0, 0, true, false, false)); + g_assert_cmpmem(env->tile_acc, sizeof(before_acc), before_acc, + sizeof(before_acc)); + g_assert_cmpuint(env->tile_acc_bytes, ==, before_acc_bytes); + g_assert_cmpuint(env->tile_acc_dtype, ==, before_acc_dtype); + g_assert_cmpuint(env->tile_acc_valid, ==, before_acc_valid); + g_assert_cmpuint(env->tile_acc_cols, ==, before_acc_cols); + g_assert_cmpuint(env->tile_acc_rows, ==, before_acc_rows); + g_free(env); +} + +int main(int argc, char **argv) +{ + g_test_init(&argc, &argv, NULL); + g_test_add_func("/linx/cube/type-matrix", test_all_production_type_rows); + g_test_add_func("/linx/cube/ordinary-bias-acc", test_ordinary_bias_and_acc); + g_test_add_func("/linx/cube/mx-k32", test_mx_crosses_k32); + g_test_add_func("/linx/cube/acccvt-rounding", + test_acccvt_all_rounding_modes); + g_test_add_func("/linx/cube/acccvt-host-fenv", + test_acccvt_is_host_fenv_independent); + g_test_add_func("/linx/cube/acccvt-saturation", + test_acccvt_saturates_every_float_target); + g_test_add_func("/linx/cube/acccvt-signed-zero", + test_acccvt_preserves_signed_zero); + g_test_add_func("/linx/cube/acccvt-canonical-nan", + test_acccvt_canonicalizes_nan); + g_test_add_func("/linx/cube/fault-preservation", + test_failures_preserve_acc_and_destination); + return g_test_run(); +} diff --git a/tests/unit/test-linx-tile-transaction.c b/tests/unit/test-linx-tile-transaction.c index 4a2b0980bb06..5221ea37cadb 100644 --- a/tests/unit/test-linx-tile-transaction.c +++ b/tests/unit/test-linx-tile-transaction.c @@ -27,6 +27,10 @@ typedef struct VisibleCPUTileState { uint8_t acc_src1; uint32_t acc[LINX_TILE_MAX_WORDS]; uint32_t acc_bytes; + uint8_t acc_dtype; + uint8_t acc_valid; + uint16_t acc_cols; + uint16_t acc_rows; uint32_t tile[32][LINX_TILE_MAX_WORDS]; uint32_t tile_capacity[32]; uint32_t tile_bytes[32]; @@ -58,6 +62,10 @@ static void capture_cpu_visible_state(const CPULinxState *env, visible->acc_src1 = env->tile_acc_src1; memcpy(visible->acc, env->tile_acc, sizeof(visible->acc)); visible->acc_bytes = env->tile_acc_bytes; + visible->acc_dtype = env->tile_acc_dtype; + visible->acc_valid = env->tile_acc_valid; + visible->acc_cols = env->tile_acc_cols; + visible->acc_rows = env->tile_acc_rows; memcpy(visible->tile, env->tile_reg, sizeof(visible->tile)); memcpy(visible->tile_capacity, env->tile_reg_capacity, sizeof(visible->tile_capacity)); @@ -93,6 +101,10 @@ static CPULinxState *new_atomicity_env(void) env->tile_acc_src0 = 0u; env->tile_acc_src1 = 1u; env->tile_acc_bytes = 128u; + env->tile_acc_dtype = 16u; + env->tile_acc_valid = 1u; + env->tile_acc_cols = 4u; + env->tile_acc_rows = 2u; env->tile_acc[0] = 0xacc0571u; env->tile_reg_capacity[3] = 128u; env->tile_reg_bytes[3] = 128u; From 091df5e7299f03a6cd8e978944ef1841944f9b71 Mon Sep 17 00:00:00 2001 From: RuoyuZhou Date: Fri, 31 Jul 2026 04:44:44 +0800 Subject: [PATCH 3/6] Honor source-only TSTORE descriptors without trap replay PTO ISA 0.57.1 carries TSTORE's extent in the bound source Tile rather than an output-size field. Resolve the frozen binding once through a shared contract so preflight and execution derive the same exact allocation size and reject noncanonical size-bearing descriptors. Constraint: PTO-ISA/pto-spec 0141ec89 defines TSTORE operands as address plus source0 only Rejected: Increase the AVS timeout | masks deterministic illegal-trap replay Rejected: Accept absent descriptor size as zero | rejects every canonical TSTORE Confidence: high Scope-risk: narrow Reversibility: clean Directive: Keep TSTORE transfer extent derived from the frozen source Tile; do not add a pseudo destination size Tested: linx32 and linx64 system builds; CUBE numeric 9/9; transaction 10/10; v0.57 Python 19/19; external PTO 11/11; focused AVS test 0x1701 PASS; checkpatch; git diff --check; independent code review Not-tested: full deepseek suite is blocked by workload S32 unary THISTOGRAM contrary to pto-spec; all-suites is blocked by missing mamulb catalog entry --- target/linx/helper.c | 103 ++++-------------------- target/linx/tile_isa_057.h | 83 +++++++++++++++++++ tests/unit/test-linx-tile-transaction.c | 37 +++++++++ 3 files changed, 134 insertions(+), 89 deletions(-) diff --git a/target/linx/helper.c b/target/linx/helper.c index f7a243116105..74594d7dfce0 100644 --- a/target/linx/helper.c +++ b/target/linx/helper.c @@ -9147,49 +9147,6 @@ enum { LINX_CUBE_TGEMV_MX_ACC = 22, }; -enum { - LINX_IOT_S0V = 1u << 0, - LINX_IOT_S1V = 1u << 1, - LINX_IOT_S0R = 1u << 2, - LINX_IOT_S1R = 1u << 3, -}; - -enum { - LINX_TILE_IOT_SRC0_SHIFT = 0, - LINX_TILE_IOT_SRC1_SHIFT = 6, - LINX_TILE_IOT_DST_SHIFT = 12, - LINX_TILE_IOT_LAST_SHIFT = 15, - LINX_TILE_IOT_FLAGS_SHIFT = 16, - LINX_TILE_IOT_REG_SHIFT = 20, - LINX_TILE_IOT_SIZE_SHIFT = 25, - LINX_TILE_IOT_HAS_SIZE_SHIFT = 30, -}; - -typedef struct LinxTileIOTDesc { - uint32_t src0; - uint32_t src1; - uint32_t dst; - uint32_t last; - uint32_t flags; - uint32_t reg; - uint32_t size; - bool has_size; -} LinxTileIOTDesc; - -static inline LinxTileIOTDesc linx_tile_decode_iot(uint64_t packed) -{ - LinxTileIOTDesc d; - d.src0 = (packed >> LINX_TILE_IOT_SRC0_SHIFT) & 0x3fu; - d.src1 = (packed >> LINX_TILE_IOT_SRC1_SHIFT) & 0x3fu; - d.dst = (packed >> LINX_TILE_IOT_DST_SHIFT) & 0x7u; - d.last = (packed >> LINX_TILE_IOT_LAST_SHIFT) & 0x1u; - d.flags = (packed >> LINX_TILE_IOT_FLAGS_SHIFT) & 0xfu; - d.reg = (packed >> LINX_TILE_IOT_REG_SHIFT) & 0x1fu; - d.size = (packed >> LINX_TILE_IOT_SIZE_SHIFT) & 0x1fu; - d.has_size = ((packed >> LINX_TILE_IOT_HAS_SIZE_SHIFT) & 0x1u) != 0; - return d; -} - static bool linx_tile_output_hand(const LinxTileIOTDesc *desc, unsigned *hand_out) { @@ -15652,14 +15609,8 @@ static bool linx_tile_collect_cube_sources( return false; } } - const uint32_t bytes = env->tile_reg_bytes[sources[0]]; - for (unsigned size = 3u; size <= 9u; size++) { - if (bytes == (1u << (size + 4u))) { - *size_code_out = size; - return true; - } - } - return false; + return linx_tile_size_code_from_bytes( + env->tile_reg_bytes[sources[0]], size_code_out); } static bool linx_tile_transfer_preflight(const CPULinxState *env, @@ -15760,8 +15711,8 @@ static bool linx_tile_preflight_tma( for (unsigned i = 0; i < count; i++) { const LinxTileIOTDesc d = linx_tile_get_iot_desc(env, i); - const unsigned size_code = d.has_size ? d.size & 0x1f - : env->tile_iot_size & 0x1f; + unsigned size_code = d.has_size ? d.size & 0x1f + : env->tile_iot_size & 0x1f; unsigned tile; switch (env->tile_func & 0x1f) { @@ -15774,27 +15725,14 @@ static bool linx_tile_preflight_tma( linx_tile_publish_output(planned_live, tile); break; case LINX_TMA_TSTORE: { - const bool src0_present = (d.flags & LINX_IOT_S0V) == 0; - const bool src1_present = (d.flags & LINX_IOT_S1V) == 0; - if (!linx_tile_transfer_preflight(env, size_code, + if (!linx_tile_tstore_resolve_binding( + &d, env->tile_iot_src_valid[i], + env->tile_iot_src_phys[i], env->tile_reg_bytes, + &tile, &size_code) || + !linx_tile_transfer_preflight(env, size_code, LINX_TMA_TR_TO_GM)) { return false; } - if (src0_present) { - if (!linx_tile_get_bound_source(env, i, 0, &tile)) { - return false; - } - } else if (src1_present) { - if (!linx_tile_get_bound_source(env, i, 1, &tile)) { - return false; - } - } else { - return false; - } - const uint64_t bytes = 1ull << (size_code + 4u); - if (env->tile_reg_bytes[tile] < bytes) { - return false; - } linx_tile_consume_bound_sources(env, planned_live, i, &d, NULL, NULL, planned_carrier_valid, @@ -16819,28 +16757,15 @@ void HELPER(linx_tile_commit)(CPULinxState *env) helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); break; } - const bool src0_present = (d.flags & LINX_IOT_S0V) == 0; - const bool src1_present = (d.flags & LINX_IOT_S1V) == 0; unsigned src_tile = 0; - if (src0_present) { - if (!linx_tile_get_bound_source(env, i, 0, &src_tile)) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - break; - } - } else if (src1_present) { - if (!linx_tile_get_bound_source(env, i, 1, &src_tile)) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - break; - } - } else { + unsigned size_code; + if (!linx_tile_tstore_resolve_binding( + &d, env->tile_iot_src_valid[i], + env->tile_iot_src_phys[i], env->tile_reg_bytes, + &src_tile, &size_code)) { helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); break; } - const unsigned size_code = d.has_size ? (d.size & 0x1f) - : (env->tile_iot_size & 0x1f); - if (!linx_tile_size_code_valid(size_code)) { - helper_raise_exception(env, LINX_EXCP_ILLEGAL_INST); - } /* * TMA's Normal-memory domain permits one TSTORE operation to * decompose into externally visible, non-atomic beats. A diff --git a/target/linx/tile_isa_057.h b/target/linx/tile_isa_057.h index 79aa8915a3ca..c6b11501bd48 100644 --- a/target/linx/tile_isa_057.h +++ b/target/linx/tile_isa_057.h @@ -7,6 +7,89 @@ #ifndef TARGET_LINX_TILE_ISA_057_H #define TARGET_LINX_TILE_ISA_057_H +enum { + LINX_IOT_S0V = 1u << 0, + LINX_IOT_S1V = 1u << 1, + LINX_IOT_S0R = 1u << 2, + LINX_IOT_S1R = 1u << 3, +}; + +enum { + LINX_TILE_IOT_SRC0_SHIFT = 0, + LINX_TILE_IOT_SRC1_SHIFT = 6, + LINX_TILE_IOT_DST_SHIFT = 12, + LINX_TILE_IOT_LAST_SHIFT = 15, + LINX_TILE_IOT_FLAGS_SHIFT = 16, + LINX_TILE_IOT_REG_SHIFT = 20, + LINX_TILE_IOT_SIZE_SHIFT = 25, + LINX_TILE_IOT_HAS_SIZE_SHIFT = 30, +}; + +typedef struct LinxTileIOTDesc { + uint32_t src0; + uint32_t src1; + uint32_t dst; + uint32_t last; + uint32_t flags; + uint32_t reg; + uint32_t size; + bool has_size; +} LinxTileIOTDesc; + +static inline LinxTileIOTDesc linx_tile_decode_iot(uint64_t packed) +{ + LinxTileIOTDesc d; + + d.src0 = (packed >> LINX_TILE_IOT_SRC0_SHIFT) & 0x3fu; + d.src1 = (packed >> LINX_TILE_IOT_SRC1_SHIFT) & 0x3fu; + d.dst = (packed >> LINX_TILE_IOT_DST_SHIFT) & 0x7u; + d.last = (packed >> LINX_TILE_IOT_LAST_SHIFT) & 0x1u; + d.flags = (packed >> LINX_TILE_IOT_FLAGS_SHIFT) & 0xfu; + d.reg = (packed >> LINX_TILE_IOT_REG_SHIFT) & 0x1fu; + d.size = (packed >> LINX_TILE_IOT_SIZE_SHIFT) & 0x1fu; + d.has_size = ((packed >> LINX_TILE_IOT_HAS_SIZE_SHIFT) & 0x1u) != 0; + return d; +} + +/* Source-only operations recover the encoded allocation size from the Tile. */ +static inline bool linx_tile_size_code_from_bytes(uint32_t bytes, + unsigned *size_code) +{ + for (unsigned size = 3u; size <= 9u; size++) { + if (bytes == (UINT32_C(1) << (size + 4u))) { + *size_code = size; + return true; + } + } + return false; +} + +static inline bool linx_tile_tstore_resolve_binding( + const LinxTileIOTDesc *desc, uint8_t bound_sources, + const uint8_t bound_tiles[2], const uint32_t tile_bytes[32], + unsigned *tile, unsigned *size_code) +{ + unsigned source; + + /* PTO ISA 0.57.1 TSTORE has a source operand but no destination size. */ + if (desc->has_size) { + return false; + } + if ((desc->flags & LINX_IOT_S0V) == 0u) { + source = 0u; + } else if ((desc->flags & LINX_IOT_S1V) == 0u) { + source = 1u; + } else { + return false; + } + if ((bound_sources & (1u << source)) == 0u) { + return false; + } + *tile = bound_tiles[source]; + return *tile < 32u && + linx_tile_size_code_from_bytes(tile_bytes[*tile], size_code); +} + static inline bool linx_tile_data_type_accepted(uint32_t data_type) { return data_type < 32u && diff --git a/tests/unit/test-linx-tile-transaction.c b/tests/unit/test-linx-tile-transaction.c index 5221ea37cadb..da794516580f 100644 --- a/tests/unit/test-linx-tile-transaction.c +++ b/tests/unit/test-linx-tile-transaction.c @@ -2,6 +2,7 @@ #include "qemu/osdep.h" #include "target/linx/cpu.h" +#include "target/linx/tile_isa_057.h" #include "target/linx/tile_tepl_preflight.h" #include "target/linx/tile_transaction.h" @@ -203,6 +204,40 @@ static void test_valid_transaction_applies_once(void) g_assert_cmphex(state.tile_head[3], ==, 0x5710571u); } +static void test_tstore_size_comes_from_source_footprint(void) +{ + CPULinxState *env = g_new0(CPULinxState, 1); + LinxTileIOTDesc desc = linx_tile_decode_iot(UINT64_C(0x00028000)); + unsigned tile = 0u; + unsigned size_code = 0u; + + env->tile_iot_src_valid[0] = 1u; + env->tile_iot_src_phys[0][0] = 3u; + for (unsigned expected = 3u; expected <= 9u; expected++) { + const uint32_t bytes = UINT32_C(1) << (expected + 4u); + + env->tile_reg_bytes[3] = bytes; + g_assert_true(linx_tile_tstore_resolve_binding( + &desc, env->tile_iot_src_valid[0], env->tile_iot_src_phys[0], + env->tile_reg_bytes, &tile, &size_code)); + g_assert_cmpuint(tile, ==, 3u); + g_assert_cmpuint(size_code, ==, expected); + } + const uint32_t invalid_bytes[] = { 0u, 64u, 96u, 16384u }; + for (unsigned i = 0; i < ARRAY_SIZE(invalid_bytes); i++) { + env->tile_reg_bytes[3] = invalid_bytes[i]; + g_assert_false(linx_tile_tstore_resolve_binding( + &desc, env->tile_iot_src_valid[0], env->tile_iot_src_phys[0], + env->tile_reg_bytes, &tile, &size_code)); + } + desc.has_size = true; + env->tile_reg_bytes[3] = 4096u; + g_assert_false(linx_tile_tstore_resolve_binding( + &desc, env->tile_iot_src_valid[0], env->tile_iot_src_phys[0], + env->tile_reg_bytes, &tile, &size_code)); + g_free(env); +} + static void test_tepl_invalid_shape_is_atomic(void) { CPULinxState *env = new_atomicity_env(); @@ -337,6 +372,8 @@ int main(int argc, char **argv) test_allocation_failure_is_atomic); g_test_add_func("/linx/tile-transaction/valid", test_valid_transaction_applies_once); + g_test_add_func("/linx/tile-transaction/tstore-source-footprint", + test_tstore_size_comes_from_source_footprint); g_test_add_func("/linx/tile-transaction/tepl-invalid-shape", test_tepl_invalid_shape_is_atomic); g_test_add_func("/linx/tile-transaction/tepl-missing-tquant-scale", From eb654efc40c575175f6f03fc0bf5a1897e92d66f Mon Sep 17 00:00:00 2001 From: RuoyuZhou Date: Fri, 31 Jul 2026 05:37:03 +0800 Subject: [PATCH 4/6] Let conversions preserve logical shape across carrier widths TCVT preflight now validates the source logical rows, columns, and stride without requiring its physical carrier row count to equal the destination carrier, allowing the frozen FP32-to-INT8 conversion while retaining precise insufficient-shape rejection. Constraint: Packed and width-changing conversions keep logical shape even when source and destination storage footprints differ. Rejected: Bypass TCVT preflight entirely | Logical source coverage must still be checked before publication. Confidence: high Scope-risk: moderate Directive: Conversion legality compares logical extents; never infer equality from physical carrier rows across DataTypes. Tested: qemu-system-linx64 incremental build; tile transaction unit suite 11/11 including accept/reject carrier-shape regression. Not-tested: Full numeric, transaction, and superproject QEMU gates rerun after repinning. --- target/linx/tile_tepl_preflight.h | 9 ++++++++- tests/unit/test-linx-tile-transaction.c | 23 +++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/target/linx/tile_tepl_preflight.h b/target/linx/tile_tepl_preflight.h index f7e50586726d..ef449ba38fd0 100644 --- a/target/linx/tile_tepl_preflight.h +++ b/target/linx/tile_tepl_preflight.h @@ -122,7 +122,8 @@ static inline bool linx_tile_tepl_pre_publish_legal( const bool expand = impl == 0x01eu || impl == 0x01fu || (impl >= 0x03bu && impl <= 0x048u); const bool partial = impl >= 0x0c3u && impl <= 0x0c6u; - const bool custom_shape = impl == 0x01cu || impl == 0x087u || + const bool custom_shape = impl == 0x00du || impl == 0x01cu || + impl == 0x087u || impl == 0x089u || impl == 0x085u || impl == 0x084u || (impl >= 0x102u && impl <= 0x10bu); @@ -164,6 +165,12 @@ static inline bool linx_tile_tepl_pre_publish_legal( linx_tile_tepl_preflight_resolve_ior(env, 1u, &zero_reg) && env->gpr[scale_reg] != 0u; } + if (impl == 0x00du) { /* TCVT */ + return has_src0 && !has_src1 && src0 < 32u && + env->tile_reg_valid_cols[src0] >= valid_cols && + env->tile_reg_valid_rows[src0] >= valid_rows && + env->tile_reg_cols[src0] == cols; + } if (impl == 0x030u) { /* TREM */ return has_src1 && linx_tile_tepl_remainder_tile_divisors_legal( env, src1, dtype, elem_bytes, valid_cols, diff --git a/tests/unit/test-linx-tile-transaction.c b/tests/unit/test-linx-tile-transaction.c index da794516580f..b7f8a70434b5 100644 --- a/tests/unit/test-linx-tile-transaction.c +++ b/tests/unit/test-linx-tile-transaction.c @@ -275,6 +275,27 @@ static void test_tepl_missing_tquant_scale_is_atomic(void) g_free(env); } +static void test_tepl_tcvt_accepts_different_carrier_rows(void) +{ + CPULinxState *env = new_atomicity_env(); + const unsigned sources[1] = { 0u }; + + env->tile_reg_bytes[0] = 4096u; + env->tile_reg_elem_bytes[0] = 4u; + env->tile_reg_dtype[0] = 1u; + env->tile_reg_valid_cols[0] = 32u; + env->tile_reg_valid_rows[0] = 32u; + env->tile_reg_cols[0] = 32u; + env->tile_reg_rows[0] = 32u; + + g_assert_true(linx_tile_tepl_pre_publish_legal( + env, 0x00du, sources, 1u, 19u, 1u, 32u, 32u, 32u, 128u)); + env->tile_reg_valid_rows[0] = 31u; + g_assert_false(linx_tile_tepl_pre_publish_legal( + env, 0x00du, sources, 1u, 19u, 1u, 32u, 32u, 32u, 128u)); + g_free(env); +} + static void test_tepl_zero_tquant_scale_is_atomic(void) { CPULinxState *env = new_atomicity_env(); @@ -378,6 +399,8 @@ int main(int argc, char **argv) test_tepl_invalid_shape_is_atomic); g_test_add_func("/linx/tile-transaction/tepl-missing-tquant-scale", test_tepl_missing_tquant_scale_is_atomic); + g_test_add_func("/linx/tile-transaction/tepl-tcvt-carrier-shape", + test_tepl_tcvt_accepts_different_carrier_rows); g_test_add_func("/linx/tile-transaction/tepl-zero-tquant-scale", test_tepl_zero_tquant_scale_is_atomic); g_test_add_func("/linx/tile-transaction/tepl-trem-zero-tile-divisor", From 583cad3f6ce68d05a559a354a3e7059844f47a5d Mon Sep 17 00:00:00 2001 From: RuoyuZhou Date: Fri, 31 Jul 2026 05:43:30 +0800 Subject: [PATCH 5/6] Decode scalar Tile operands from the frozen B.IOR contract TEPL scalar operations now resolve their operand directly from B.IOR in both 32-bit and 64-bit execution and preflight, removing the retired B.ARG mode dependency that silently turned TDIVS into a zero-valued unary fallback. Constraint: PTO ISA 0.57.1 has no executable legacy Tile descriptor header or scalar B.ARG selector. Rejected: Reintroduce B.ARG in compiler output | The locked operation schema plus B.IOR is authoritative. Confidence: high Scope-risk: broad Directive: Determine scalar versus Tile arity from the canonical operation schema; never gate it on tile_arg_format. Tested: qemu-system-linx64 incremental build; Tile transaction suite 11/11; full DeepSeek AVS suite passes within the fixed 10-second bound. Not-tested: Clean recursive build and full superproject QEMU contract rerun after repinning. --- target/linx/helper.c | 16 +++++----------- target/linx/tile_tepl_preflight.h | 3 +-- tests/unit/test-linx-tile-transaction.c | 3 ++- 3 files changed, 8 insertions(+), 14 deletions(-) diff --git a/target/linx/helper.c b/target/linx/helper.c index 74594d7dfce0..b1472715a505 100644 --- a/target/linx/helper.c +++ b/target/linx/helper.c @@ -13708,11 +13708,8 @@ static bool linx_tile_tepl64_core(CPULinxState *env, unsigned dst_tile, uint32_t cols, uint32_t physical_cols, uint32_t bytes) { - const bool scalar_mode = - (env->tile_arg_format == 1u || env->tile_arg_format == 2u); unsigned scalar_reg = 0; - const bool has_scalar = scalar_mode && - linx_tile_resolve_ior(env, 0, &scalar_reg); + const bool has_scalar = linx_tile_resolve_ior(env, 0, &scalar_reg); const uint64_t scalar = has_scalar ? env->gpr[scalar_reg] : 0u; const unsigned src0 = source_count > 0u ? sources[0] : 0u; const unsigned src1 = source_count > 1u ? sources[1] : 0u; @@ -13808,7 +13805,7 @@ static bool linx_tile_tepl64_core(CPULinxState *env, unsigned dst_tile, env, op, dtype, lhs, rhs, &result)) { return false; } - } else if (has_scalar && env->tile_arg_format == 1u) { + } else if (has_scalar) { if (!linx_tile_tepl_binary_qword_checked( env, op, dtype, lhs, scalar, &result)) { return false; @@ -13886,9 +13883,7 @@ static bool linx_tile_tepl(CPULinxState *env, unsigned dst_tile, const uint32_t src0_dtype = has_src0 ? env->tile_reg_dtype[src0_tile] : 0u; const uint32_t src1_dtype = has_src1 ? env->tile_reg_dtype[src1_tile] : 0u; unsigned scalar_reg = 0; - const bool scalar_mode = - (env->tile_arg_format == 1u || env->tile_arg_format == 2u) && - linx_tile_resolve_ior(env, 0, &scalar_reg); + const bool scalar_mode = linx_tile_resolve_ior(env, 0, &scalar_reg); const uint32_t scalar_word = scalar_mode ? linx_tile_scalar_as_dtype(env->gpr[scalar_reg], operation_dtype, elem_bytes) @@ -14282,7 +14277,7 @@ static bool linx_tile_tepl(CPULinxState *env, unsigned dst_tile, } } } else if (op == 0x02cu || op == 0x034u) { - if ((op == 0x034u && (!scalar_mode || env->tile_arg_format != 1u)) || + if ((op == 0x034u && !scalar_mode) || !linx_tile_tepl_select(env, dst_tile, mask_tile, src0_tile, src1_tile, op == 0x034u, scalar_word, rows, cols, physical_cols)) { @@ -14290,7 +14285,6 @@ static bool linx_tile_tepl(CPULinxState *env, unsigned dst_tile, } } else if (op == 0x033u) { if (!has_src0 || has_src1 || !scalar_mode || - env->tile_arg_format != 1u || !linx_tile_tepl_tcmps(env, dst_tile, src0_tile, scalar_word, rows, cols, physical_cols, (uint32_t)bytes64)) { return false; @@ -14531,7 +14525,7 @@ static bool linx_tile_tepl(CPULinxState *env, unsigned dst_tile, env, op, operation_dtype, lhs, rhs, &result)) { return false; } - } else if (has_src0 && scalar_mode && env->tile_arg_format == 1u) { + } else if (has_src0 && scalar_mode) { if (!linx_tile_tepl_binary_word_checked( env, op, operation_dtype, lhs, scalar_word, &result)) { diff --git a/target/linx/tile_tepl_preflight.h b/target/linx/tile_tepl_preflight.h index ef449ba38fd0..5b37344ee9bf 100644 --- a/target/linx/tile_tepl_preflight.h +++ b/target/linx/tile_tepl_preflight.h @@ -179,8 +179,7 @@ static inline bool linx_tile_tepl_pre_publish_legal( if (impl == 0x032u) { /* TREMS */ unsigned scalar_reg; - return env->tile_arg_format == 1u && - linx_tile_tepl_preflight_resolve_ior( + return linx_tile_tepl_preflight_resolve_ior( env, 0u, &scalar_reg) && linx_tile_tepl_remainder_divisor_nonzero( dtype, elem_bytes, env->gpr[scalar_reg]); diff --git a/tests/unit/test-linx-tile-transaction.c b/tests/unit/test-linx-tile-transaction.c index b7f8a70434b5..524094d08c23 100644 --- a/tests/unit/test-linx-tile-transaction.c +++ b/tests/unit/test-linx-tile-transaction.c @@ -366,7 +366,8 @@ static void test_tepl_trems_zero_scalar_is_atomic(void) env->tile_reg_valid_rows[0] = 2u; env->tile_reg_cols[0] = 4u; env->tile_reg_rows[0] = 2u; - env->tile_arg_format = 1u; + /* PTO ISA 0.57.1 scalar operands come directly from B.IOR. */ + env->tile_arg_format = 0u; env->tile_ior_count = 1u; env->tile_ior_desc[0] = 2u << 10; env->gpr[2] = 0u; From 60ebdf1e4892f34089a1dcc9f6973890f8053daa Mon Sep 17 00:00:00 2001 From: RuoyuZhou Date: Sun, 2 Aug 2026 20:04:22 +0800 Subject: [PATCH 6/6] Bind QEMU evidence to merged PTO ISA 0.57.1 --- tests/linxisa/pto-0571-cube-profile-gaps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/linxisa/pto-0571-cube-profile-gaps.json b/tests/linxisa/pto-0571-cube-profile-gaps.json index 834a56b7af89..21c35072ca15 100644 --- a/tests/linxisa/pto-0571-cube-profile-gaps.json +++ b/tests/linxisa/pto-0571-cube-profile-gaps.json @@ -4,7 +4,7 @@ "profile_id": "pto-hardware-numeric-0.57.1-ieee-v1", "status": "implementation-conformance-proven", "truth_identity": { - "pto_spec_commit": "0141ec89ff1e222adfe1df55610f414ca0c8c086", + "pto_spec_commit": "2f3f605e289b09d56ef5a9ba39fc80b52948a5f5", "hardware_profile_sha256": "becfbefcc7a31408e5e5293802493f833f68a2fccebb3f9e8008d8b9f4e7658c", "numeric_vectors_sha256": "b9f908deb9cfec412388e95f4532563cf4e462032b43d15996f0f7b4b93b4ec9" },