mirror of
https://github.com/odin-lang/Odin.git
synced 2026-09-03 10:40:20 +00:00
rexcode/arm32: VFMA/VFMS carried VMLA/VMLS encodings; drop three duplicate mnemonics
Asking for a VFMA with a lane operand emitted a VMLA. NEON's fused multiply-add
has no by-element form at all -- llvm-mc rejects `vfma.f32 d0, d1, d2[0]` -- and
the four rows sitting under VFMA/VFMS held VMLA/VMLS's lane encodings, which
VMLA and VMLS already own. Their data type gave it away too: `.I32` on a
fused multiply-add, which is float-only. Deleted.
They were also the reason `bits & ~mask` looked wrong on those rows: as
authored they were F2A000C0, and clearing the Vn high bit -- correct, since
bit 7 is the top of the register number -- landed them exactly on VMLA's
F2A00040.
Found by asking which (bits, mask, mode) triples more than one mnemonic
claims. That check found 18; this commit takes it to 9.
Three of the eighteen were whole mnemonics duplicating a base:
VRECPE_F, VRSQRTE_F every form already present under VRECPE / VRSQRTE,
which carry both the U32 and F32 variants.
VPADD_F its F32 form duplicated VPADD's; its F16 form was the
only thing it owned, so that moves to VPADD, where the
data type now selects it.
All three were on the list of names no assembler spells, so that count goes
from 14 to 11 -- and nine of the remaining eleven are the *_LANE group, still
waiting on register-list and lane-index modelling. The other two are
`psb csync` and `tsb csync`, which are correct as they are.
Two smoke checks asserted the VFMA/VFMS by-element forms and are gone with
them; a third moved index.
Verified against llvm-mc: vpadd.i8/.f32/.f16, vrecpe.u32/.f32 and vrsqrte.f32
all byte-exact, 1656/1656 decode sweep, every suite at baseline.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -693,13 +693,9 @@ emit_vnmla_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruc
|
||||
inst_vnmls_s_s_s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VNMLS, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} }
|
||||
emit_vnmls_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vnmls_s_s_s(dst, src, src2)) }
|
||||
inst_vfma_s_s_s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VFMA, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} }
|
||||
inst_vfma_d_d_dlane :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, lane: u8) -> Instruction { return Instruction{mnemonic = .VFMA, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_dpr_lane(src2, lane), {}}} }
|
||||
emit_vfma_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vfma_s_s_s(dst, src, src2)) }
|
||||
emit_vfma_d_d_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8) { append(instructions, inst_vfma_d_d_dlane(dst, src, src2, lane)) }
|
||||
inst_vfms_s_s_s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VFMS, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} }
|
||||
inst_vfms_d_d_dlane :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, lane: u8) -> Instruction { return Instruction{mnemonic = .VFMS, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_dpr_lane(src2, lane), {}}} }
|
||||
emit_vfms_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vfms_s_s_s(dst, src, src2)) }
|
||||
emit_vfms_d_d_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8) { append(instructions, inst_vfms_d_d_dlane(dst, src, src2, lane)) }
|
||||
inst_vfnma_s_s_s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VFNMA, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} }
|
||||
emit_vfnma_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vfnma_s_s_s(dst, src, src2)) }
|
||||
inst_vfnms_s_s_s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VFNMS, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} }
|
||||
@@ -976,12 +972,6 @@ inst_vclz_d_d :: #force_inline proc "contextless" (dst: Register, s
|
||||
emit_vclz_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vclz_d_d(dst, src)) }
|
||||
inst_vcnt_d_d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VCNT, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} }
|
||||
emit_vcnt_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vcnt_d_d(dst, src)) }
|
||||
inst_vpadd_f_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VPADD_F, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} }
|
||||
emit_vpadd_f_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vpadd_f_d_d_d(dst, src, src2)) }
|
||||
inst_vrecpe_f_d_d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VRECPE_F, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} }
|
||||
emit_vrecpe_f_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vrecpe_f_d_d(dst, src)) }
|
||||
inst_vrsqrte_f_d_d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VRSQRTE_F, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} }
|
||||
emit_vrsqrte_f_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vrsqrte_f_d_d(dst, src)) }
|
||||
inst_vrev16_d_d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VREV16, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} }
|
||||
emit_vrev16_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vrev16_d_d(dst, src)) }
|
||||
inst_vrev32_d_d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VREV32, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} }
|
||||
@@ -1985,10 +1975,10 @@ inst_vnmla :: inst_vnmla_s_s_s
|
||||
emit_vnmla :: emit_vnmla_s_s_s
|
||||
inst_vnmls :: inst_vnmls_s_s_s
|
||||
emit_vnmls :: emit_vnmls_s_s_s
|
||||
inst_vfma :: proc{ inst_vfma_s_s_s, inst_vfma_d_d_dlane }
|
||||
emit_vfma :: proc{ emit_vfma_s_s_s, emit_vfma_d_d_dlane }
|
||||
inst_vfms :: proc{ inst_vfms_s_s_s, inst_vfms_d_d_dlane }
|
||||
emit_vfms :: proc{ emit_vfms_s_s_s, emit_vfms_d_d_dlane }
|
||||
inst_vfma :: inst_vfma_s_s_s
|
||||
emit_vfma :: emit_vfma_s_s_s
|
||||
inst_vfms :: inst_vfms_s_s_s
|
||||
emit_vfms :: emit_vfms_s_s_s
|
||||
inst_vfnma :: inst_vfnma_s_s_s
|
||||
emit_vfnma :: emit_vfnma_s_s_s
|
||||
inst_vfnms :: inst_vfnms_s_s_s
|
||||
@@ -2211,12 +2201,6 @@ inst_vclz :: inst_vclz_d_d
|
||||
emit_vclz :: emit_vclz_d_d
|
||||
inst_vcnt :: inst_vcnt_d_d
|
||||
emit_vcnt :: emit_vcnt_d_d
|
||||
inst_vpadd_f :: inst_vpadd_f_d_d_d
|
||||
emit_vpadd_f :: emit_vpadd_f_d_d_d
|
||||
inst_vrecpe_f :: inst_vrecpe_f_d_d
|
||||
emit_vrecpe_f :: emit_vrecpe_f_d_d
|
||||
inst_vrsqrte_f :: inst_vrsqrte_f_d_d
|
||||
emit_vrsqrte_f :: emit_vrsqrte_f_d_d
|
||||
inst_vrev16 :: inst_vrev16_d_d
|
||||
emit_vrev16 :: emit_vrev16_d_d
|
||||
inst_vrev32 :: inst_vrev32_d_d
|
||||
|
||||
@@ -290,7 +290,7 @@ Mnemonic :: enum u16 {
|
||||
VSHLL, // shift-left long
|
||||
|
||||
VCLS, VCLZ, VCNT,
|
||||
VPADD_F, VRECPE_F, VRSQRTE_F, // (placeholders; canonical via operand types)
|
||||
// (placeholders; canonical via operand types)
|
||||
|
||||
VREV16, VREV32, VREV64,
|
||||
VEXT, // vector extract
|
||||
|
||||
@@ -1376,8 +1376,6 @@ ENCODING_TABLE := #partial [Mnemonic][]Encoding{
|
||||
// MVE FP vector + scalar
|
||||
{.VFMA, {.QPR, .QPR, .QPR, .NONE}, {.VD_Q, .VN_Q, .VM_Q, .NONE}, 0xEF000C50, 0xEFA10F51, .MVE_FP, .T32, {thumb32=true, cond_in_28=false}, {.F32, .NONE}},
|
||||
{.VFMA, {.QPR, .QPR, .GPR, .NONE}, {.VD_Q, .VN_Q, .RM_T32, .NONE}, 0xEE310E40, 0xEFB10F51, .MVE_FP, .T32, {thumb32=true, cond_in_28=false}, {.F32, .NONE}},
|
||||
{.VFMA, {.DPR, .DPR, .DPR_ELEM, .NONE}, {.VD_D, .VN_D, .VM_D, .NONE}, 0xF2A00040, 0xFFB00F50, .VFPV4, .A32, {cond_in_28=false}, {.I32, .NONE}},
|
||||
{.VFMA, {.QPR, .QPR, .DPR_ELEM, .NONE}, {.VD_Q, .VN_Q, .VM_D, .NONE}, 0xF3A00040, 0xFFB00F50, .VFPV4, .A32, {cond_in_28=false}, {.I32, .NONE}},
|
||||
{.VFMA, {.QPR, .QPR, .QPR, .NONE}, {.VD_Q, .VN_Q, .VM_Q, .NONE}, 0xFC300850, 0xFFB00F50, .BF16, .A32, {cond_in_28=false}, {.BF16, .NONE}},
|
||||
},
|
||||
.VFMS = {
|
||||
@@ -1390,8 +1388,6 @@ ENCODING_TABLE := #partial [Mnemonic][]Encoding{
|
||||
{.VFMS, {.QPR, .QPR, .QPR, .NONE}, {.VD_Q, .VN_Q, .VM_Q, .NONE}, 0xF2200C50, 0xFFB00F50, .NEON, .A32, {cond_in_28=false}, {.F32, .NONE}},
|
||||
// MVE FP vector
|
||||
{.VFMS, {.QPR, .QPR, .QPR, .NONE}, {.VD_Q, .VN_Q, .VM_Q, .NONE}, 0xEF200C50, 0xEFA10F51, .MVE_FP, .T32, {thumb32=true, cond_in_28=false}, {.F32, .NONE}},
|
||||
{.VFMS, {.DPR, .DPR, .DPR_ELEM, .NONE}, {.VD_D, .VN_D, .VM_D, .NONE}, 0xF2A00440, 0xFFB00F50, .VFPV4, .A32, {cond_in_28=false}, {.I32, .NONE}},
|
||||
{.VFMS, {.QPR, .QPR, .DPR_ELEM, .NONE}, {.VD_Q, .VN_Q, .VM_D, .NONE}, 0xF3A00440, 0xFFB00F50, .VFPV4, .A32, {cond_in_28=false}, {.I32, .NONE}},
|
||||
},
|
||||
.VFNMS = {
|
||||
{.VFNMS, {.SPR, .SPR, .SPR, .NONE}, {.VD_S, .VN_S, .VM_S, .NONE}, 0x0E900A00, 0x0FB00B50, .VFPV4, .A32, {}, {.F32, .NONE}},
|
||||
@@ -2005,6 +2001,7 @@ ENCODING_TABLE := #partial [Mnemonic][]Encoding{
|
||||
// F32
|
||||
{.VPADD, {.DPR, .DPR, .DPR, .NONE}, {.VD_D, .VN_D, .VM_D, .NONE}, 0xF3000D00, 0xFFB00F10, .NEON, .A32, {cond_in_28=false}, {.F32, .NONE}},
|
||||
// (VPADD MVE form doesn't exist; MVE uses VADDV reduction instead)
|
||||
{.VPADD, {.DPR, .DPR, .DPR, .NONE}, {.VD_D, .VN_D, .VM_D, .NONE}, 0xF3100D00, 0xFFB00F10, .NEON_HALF_FP, .A32, {cond_in_28=false}, {.F16, .NONE}},
|
||||
},
|
||||
// ---- VPMAX / VPMIN (D-form only) ----
|
||||
.VPMAX = {
|
||||
@@ -3556,18 +3553,6 @@ ENCODING_TABLE := #partial [Mnemonic][]Encoding{
|
||||
{.VRSRA, {.DPR, .DPR, .IMM, .NONE}, {.VD_D, .VM_D, .NEON_SHIFT_IMM6, .NONE}, 0xF2800310, 0xFE800F10, .NEON, .A32, {cond_in_28=false}, {.I32, .NONE}},
|
||||
{.VRSRA, {.QPR, .QPR, .IMM, .NONE}, {.VD_Q, .VM_Q, .NEON_SHIFT_IMM6, .NONE}, 0xF2800350, 0xFE800F50, .NEON, .A32, {cond_in_28=false}, {.I32, .NONE}},
|
||||
},
|
||||
.VRECPE_F = {
|
||||
{.VRECPE_F, {.DPR, .DPR, .NONE, .NONE}, {.VD_D, .VM_D, .NONE, .NONE}, 0xF3BB0500, 0xFFBF0FD0, .NEON, .A32, {cond_in_28=false}, {.F32, .NONE}},
|
||||
{.VRECPE_F, {.QPR, .QPR, .NONE, .NONE}, {.VD_Q, .VM_Q, .NONE, .NONE}, 0xF3BB0540, 0xFFBF0FD0, .NEON, .A32, {cond_in_28=false}, {.F32, .NONE}},
|
||||
},
|
||||
.VRSQRTE_F = {
|
||||
{.VRSQRTE_F, {.DPR, .DPR, .NONE, .NONE}, {.VD_D, .VM_D, .NONE, .NONE}, 0xF3BB0580, 0xFFBF0FD0, .NEON, .A32, {cond_in_28=false}, {.F32, .NONE}},
|
||||
{.VRSQRTE_F, {.QPR, .QPR, .NONE, .NONE}, {.VD_Q, .VM_Q, .NONE, .NONE}, 0xF3BB05C0, 0xFFBF0FD0, .NEON, .A32, {cond_in_28=false}, {.F32, .NONE}},
|
||||
},
|
||||
.VPADD_F = {
|
||||
{.VPADD_F, {.DPR, .DPR, .DPR, .NONE}, {.VD_D, .VN_D, .VM_D, .NONE}, 0xF3000D00, 0xFFB00F10, .NEON, .A32, {cond_in_28=false}, {.F32, .NONE}},
|
||||
{.VPADD_F, {.DPR, .DPR, .DPR, .NONE}, {.VD_D, .VN_D, .VM_D, .NONE}, 0xF3100D00, 0xFFB00F10, .NEON_HALF_FP, .A32, {cond_in_28=false}, {.F16, .NONE}},
|
||||
},
|
||||
.VCVTR = {
|
||||
{.VCVTR, {.SPR, .SPR, .NONE, .NONE}, {.VD_S, .VM_S, .NONE, .NONE}, 0x0EBD0A40, 0x0FBF0FD0, .VFPV2, .A32, {}, {.S32, .F32}},
|
||||
{.VCVTR, {.SPR, .SPR, .NONE, .NONE}, {.VD_S, .VM_S, .NONE, .NONE}, 0x0EBC0A40, 0x0FBF0FD0, .VFPV2, .A32, {}, {.U32, .F32}},
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -8,7 +8,7 @@ package rexcode_arm32_generated
|
||||
import lib "../.."
|
||||
|
||||
@(rodata)
|
||||
ENCODE_FORMS := [1665]lib.Encoding{
|
||||
ENCODE_FORMS := [1656]lib.Encoding{
|
||||
// .AND
|
||||
{ .AND, {.GPR,.GPR,.IMM_MOD,.NONE}, {.RD,.RN_A32,.A32_IMM_MOD,.NONE}, 0x02000000, 0x0FE00000, .BASE, .A32, {}, {.NONE,.NONE} },
|
||||
{ .AND, {.GPR,.GPR,.GPR_SHIFTED,.NONE}, {.RD,.RN_A32,.RM_A32,.NONE}, 0x00000000, 0x0FE00010, .BASE, .A32, {}, {.NONE,.NONE} },
|
||||
@@ -993,8 +993,6 @@ ENCODE_FORMS := [1665]lib.Encoding{
|
||||
{ .VFMA, {.QPR,.QPR,.QPR,.NONE}, {.VD_Q,.VN_Q,.VM_Q,.NONE}, 0xF2000C50, 0xFFB00F50, .NEON, .A32, {}, {.F32,.NONE} },
|
||||
{ .VFMA, {.QPR,.QPR,.QPR,.NONE}, {.VD_Q,.VN_Q,.VM_Q,.NONE}, 0xEF000C50, 0xEFA10F51, .MVE_FP, .T32, {thumb32=true}, {.F32,.NONE} },
|
||||
{ .VFMA, {.QPR,.QPR,.GPR,.NONE}, {.VD_Q,.VN_Q,.RM_T32,.NONE}, 0xEE310E40, 0xEFB10F51, .MVE_FP, .T32, {thumb32=true}, {.F32,.NONE} },
|
||||
{ .VFMA, {.DPR,.DPR,.DPR_ELEM,.NONE}, {.VD_D,.VN_D,.VM_D,.NONE}, 0xF2A00040, 0xFFB00F50, .VFPV4, .A32, {}, {.I32,.NONE} },
|
||||
{ .VFMA, {.QPR,.QPR,.DPR_ELEM,.NONE}, {.VD_Q,.VN_Q,.VM_D,.NONE}, 0xF3A00040, 0xFFB00F50, .VFPV4, .A32, {}, {.I32,.NONE} },
|
||||
{ .VFMA, {.QPR,.QPR,.QPR,.NONE}, {.VD_Q,.VN_Q,.VM_Q,.NONE}, 0xFC300850, 0xFFB00F50, .BF16, .A32, {}, {.BF16,.NONE} },
|
||||
// .VFMS
|
||||
{ .VFMS, {.SPR,.SPR,.SPR,.NONE}, {.VD_S,.VN_S,.VM_S,.NONE}, 0x0EA00A40, 0x0FB00B50, .VFPV4, .A32, {}, {.F32,.NONE} },
|
||||
@@ -1003,8 +1001,6 @@ ENCODE_FORMS := [1665]lib.Encoding{
|
||||
{ .VFMS, {.DPR,.DPR,.DPR,.NONE}, {.VD_D,.VN_D,.VM_D,.NONE}, 0xF2200C10, 0xFFB00F10, .NEON, .A32, {}, {.F32,.NONE} },
|
||||
{ .VFMS, {.QPR,.QPR,.QPR,.NONE}, {.VD_Q,.VN_Q,.VM_Q,.NONE}, 0xF2200C50, 0xFFB00F50, .NEON, .A32, {}, {.F32,.NONE} },
|
||||
{ .VFMS, {.QPR,.QPR,.QPR,.NONE}, {.VD_Q,.VN_Q,.VM_Q,.NONE}, 0xEF200C50, 0xEFA10F51, .MVE_FP, .T32, {thumb32=true}, {.F32,.NONE} },
|
||||
{ .VFMS, {.DPR,.DPR,.DPR_ELEM,.NONE}, {.VD_D,.VN_D,.VM_D,.NONE}, 0xF2A00440, 0xFFB00F50, .VFPV4, .A32, {}, {.I32,.NONE} },
|
||||
{ .VFMS, {.QPR,.QPR,.DPR_ELEM,.NONE}, {.VD_Q,.VN_Q,.VM_D,.NONE}, 0xF3A00440, 0xFFB00F50, .VFPV4, .A32, {}, {.I32,.NONE} },
|
||||
// .VFNMA
|
||||
{ .VFNMA, {.SPR,.SPR,.SPR,.NONE}, {.VD_S,.VN_S,.VM_S,.NONE}, 0x0E900A40, 0x0FB00B50, .VFPV4, .A32, {}, {.F32,.NONE} },
|
||||
{ .VFNMA, {.DPR,.DPR,.DPR,.NONE}, {.VD_D,.VN_D,.VM_D,.NONE}, 0x0E900B40, 0x0FB00B50, .VFPV4, .A32, {}, {.F64,.NONE} },
|
||||
@@ -1603,6 +1599,7 @@ ENCODE_FORMS := [1665]lib.Encoding{
|
||||
{ .VPADD, {.DPR,.DPR,.DPR,.NONE}, {.VD_D,.VN_D,.VM_D,.NONE}, 0xF2100B10, 0xFFB00F10, .NEON, .A32, {}, {.I16,.NONE} },
|
||||
{ .VPADD, {.DPR,.DPR,.DPR,.NONE}, {.VD_D,.VN_D,.VM_D,.NONE}, 0xF2200B10, 0xFFB00F10, .NEON, .A32, {}, {.I32,.NONE} },
|
||||
{ .VPADD, {.DPR,.DPR,.DPR,.NONE}, {.VD_D,.VN_D,.VM_D,.NONE}, 0xF3000D00, 0xFFB00F10, .NEON, .A32, {}, {.F32,.NONE} },
|
||||
{ .VPADD, {.DPR,.DPR,.DPR,.NONE}, {.VD_D,.VN_D,.VM_D,.NONE}, 0xF3100D00, 0xFFB00F10, .NEON_HALF_FP, .A32, {}, {.F16,.NONE} },
|
||||
// .VPADDL
|
||||
{ .VPADDL, {.DPR,.DPR,.NONE,.NONE}, {.VD_D,.VM_D,.NONE,.NONE}, 0xF3B00200, 0xFFB30FD0, .NEON, .A32, {}, {.S8,.NONE} },
|
||||
{ .VPADDL, {.DPR,.DPR,.NONE,.NONE}, {.VD_D,.VM_D,.NONE,.NONE}, 0xF3B40200, 0xFFB30FD0, .NEON, .A32, {}, {.S16,.NONE} },
|
||||
@@ -1727,15 +1724,6 @@ ENCODE_FORMS := [1665]lib.Encoding{
|
||||
// .VCNT
|
||||
{ .VCNT, {.DPR,.DPR,.NONE,.NONE}, {.VD_D,.VM_D,.NONE,.NONE}, 0xF3B00500, 0xFFB30FD0, .NEON, .A32, {}, {.SZ8,.NONE} },
|
||||
{ .VCNT, {.QPR,.QPR,.NONE,.NONE}, {.VD_Q,.VM_Q,.NONE,.NONE}, 0xF3B00540, 0xFFB30FD0, .NEON, .A32, {}, {.SZ8,.NONE} },
|
||||
// .VPADD_F
|
||||
{ .VPADD_F, {.DPR,.DPR,.DPR,.NONE}, {.VD_D,.VN_D,.VM_D,.NONE}, 0xF3000D00, 0xFFB00F10, .NEON, .A32, {}, {.F32,.NONE} },
|
||||
{ .VPADD_F, {.DPR,.DPR,.DPR,.NONE}, {.VD_D,.VN_D,.VM_D,.NONE}, 0xF3100D00, 0xFFB00F10, .NEON_HALF_FP, .A32, {}, {.F16,.NONE} },
|
||||
// .VRECPE_F
|
||||
{ .VRECPE_F, {.DPR,.DPR,.NONE,.NONE}, {.VD_D,.VM_D,.NONE,.NONE}, 0xF3BB0500, 0xFFBF0FD0, .NEON, .A32, {}, {.F32,.NONE} },
|
||||
{ .VRECPE_F, {.QPR,.QPR,.NONE,.NONE}, {.VD_Q,.VM_Q,.NONE,.NONE}, 0xF3BB0540, 0xFFBF0FD0, .NEON, .A32, {}, {.F32,.NONE} },
|
||||
// .VRSQRTE_F
|
||||
{ .VRSQRTE_F, {.DPR,.DPR,.NONE,.NONE}, {.VD_D,.VM_D,.NONE,.NONE}, 0xF3BB0580, 0xFFBF0FD0, .NEON, .A32, {}, {.F32,.NONE} },
|
||||
{ .VRSQRTE_F, {.QPR,.QPR,.NONE,.NONE}, {.VD_Q,.VM_Q,.NONE,.NONE}, 0xF3BB05C0, 0xFFBF0FD0, .NEON, .A32, {}, {.F32,.NONE} },
|
||||
// .VREV16
|
||||
{ .VREV16, {.DPR,.DPR,.NONE,.NONE}, {.VD_D,.VM_D,.NONE,.NONE}, 0xF3B00100, 0xFFB30FD0, .NEON, .A32, {}, {.SZ8,.NONE} },
|
||||
{ .VREV16, {.QPR,.QPR,.NONE,.NONE}, {.VD_Q,.VM_Q,.NONE,.NONE}, 0xF3B00140, 0xFFB30FD0, .NEON, .A32, {}, {.SZ8,.NONE} },
|
||||
@@ -2540,335 +2528,332 @@ ENCODE_RUNS := [lib.Mnemonic]lib.Encode_Run{
|
||||
.VNMUL = { 704, 2},
|
||||
.VNMLA = { 706, 2},
|
||||
.VNMLS = { 708, 2},
|
||||
.VFMA = { 710, 10},
|
||||
.VFMS = { 720, 8},
|
||||
.VFNMA = { 728, 3},
|
||||
.VFNMS = { 731, 3},
|
||||
.VABS = { 734, 12},
|
||||
.VNEG = { 746, 12},
|
||||
.VSQRT = { 758, 3},
|
||||
.VCMP = { 761, 8},
|
||||
.VCMPE = { 769, 4},
|
||||
.VCVT = { 773, 21},
|
||||
.VCVTB = { 794, 2},
|
||||
.VCVTT = { 796, 2},
|
||||
.VCVTA = { 798, 2},
|
||||
.VCVTN = { 800, 2},
|
||||
.VCVTP = { 802, 2},
|
||||
.VCVTM = { 804, 2},
|
||||
.VCVTR = { 806, 4},
|
||||
.VMOV = { 810, 31},
|
||||
.VMRS = { 841, 1},
|
||||
.VMSR = { 842, 1},
|
||||
.VLDR = { 843, 2},
|
||||
.VSTR = { 845, 2},
|
||||
.VLDM = { 847, 2},
|
||||
.VSTM = { 849, 2},
|
||||
.VPUSH = { 851, 2},
|
||||
.VPOP = { 853, 2},
|
||||
.VSEL = { 855, 2},
|
||||
.VMAXNM = { 857, 2},
|
||||
.VMINNM = { 859, 2},
|
||||
.VRINTA = { 861, 3},
|
||||
.VRINTN = { 864, 3},
|
||||
.VRINTP = { 867, 3},
|
||||
.VRINTM = { 870, 3},
|
||||
.VRINTR = { 873, 2},
|
||||
.VRINTZ = { 875, 3},
|
||||
.VRINTX = { 878, 3},
|
||||
.VADDL = { 881, 6},
|
||||
.VADDW = { 887, 6},
|
||||
.VSUBL = { 893, 6},
|
||||
.VSUBW = { 899, 6},
|
||||
.VHADD = { 905, 9},
|
||||
.VHSUB = { 914, 9},
|
||||
.VRHADD = { 923, 3},
|
||||
.VQADD = { 926, 11},
|
||||
.VQSUB = { 937, 11},
|
||||
.VMULL = { 948, 11},
|
||||
.VMLAL = { 959, 10},
|
||||
.VMLSL = { 969, 10},
|
||||
.VQDMULL = { 979, 4},
|
||||
.VQDMLAL = { 983, 4},
|
||||
.VQDMLSL = { 987, 4},
|
||||
.VQDMULH = { 991, 8},
|
||||
.VQRDMULH = { 999, 8},
|
||||
.VQRDMLAH = { 1007, 8},
|
||||
.VQRDMLSH = { 1015, 8},
|
||||
.VABA = { 1023, 8},
|
||||
.VABAL = { 1031, 6},
|
||||
.VABD = { 1037, 10},
|
||||
.VABDL = { 1047, 6},
|
||||
.VAND = { 1053, 3},
|
||||
.VBIC = { 1056, 3},
|
||||
.VORR = { 1059, 3},
|
||||
.VORN = { 1062, 3},
|
||||
.VEOR = { 1065, 3},
|
||||
.VBSL = { 1068, 2},
|
||||
.VBIT = { 1070, 2},
|
||||
.VBIF = { 1072, 2},
|
||||
.VMVN = { 1074, 13},
|
||||
.VMOVN = { 1087, 3},
|
||||
.VQMOVN = { 1090, 6},
|
||||
.VQMOVUN = { 1096, 3},
|
||||
.VMOVL = { 1099, 6},
|
||||
.VTST = { 1105, 6},
|
||||
.VCEQ = { 1111, 14},
|
||||
.VCGE = { 1125, 16},
|
||||
.VCGT = { 1141, 16},
|
||||
.VCLE = { 1157, 18},
|
||||
.VCLT = { 1175, 18},
|
||||
.VACGE = { 1193, 2},
|
||||
.VACGT = { 1195, 2},
|
||||
.VACLE = { 1197, 2},
|
||||
.VACLT = { 1199, 2},
|
||||
.VMAX = { 1201, 13},
|
||||
.VMIN = { 1214, 13},
|
||||
.VPMAX = { 1227, 5},
|
||||
.VPMIN = { 1232, 5},
|
||||
.VPADD = { 1237, 4},
|
||||
.VPADDL = { 1241, 6},
|
||||
.VPADAL = { 1247, 4},
|
||||
.VRECPE = { 1251, 4},
|
||||
.VRECPS = { 1255, 2},
|
||||
.VRSQRTE = { 1257, 4},
|
||||
.VRSQRTS = { 1261, 2},
|
||||
.VSHL = { 1263, 9},
|
||||
.VSHR = { 1272, 3},
|
||||
.VSRA = { 1275, 3},
|
||||
.VRSHL = { 1278, 5},
|
||||
.VRSHR = { 1283, 3},
|
||||
.VRSRA = { 1286, 2},
|
||||
.VSLI = { 1288, 2},
|
||||
.VSRI = { 1290, 2},
|
||||
.VQSHL = { 1292, 7},
|
||||
.VQSHRN = { 1299, 1},
|
||||
.VQSHRUN = { 1300, 1},
|
||||
.VQRSHL = { 1301, 16},
|
||||
.VQRSHRN = { 1317, 1},
|
||||
.VQRSHRUN = { 1318, 1},
|
||||
.VSHRN = { 1319, 1},
|
||||
.VRSHRN = { 1320, 1},
|
||||
.VSHLL = { 1321, 4},
|
||||
.VCLS = { 1325, 6},
|
||||
.VCLZ = { 1331, 6},
|
||||
.VCNT = { 1337, 2},
|
||||
.VPADD_F = { 1339, 2},
|
||||
.VRECPE_F = { 1341, 2},
|
||||
.VRSQRTE_F = { 1343, 2},
|
||||
.VREV16 = { 1345, 2},
|
||||
.VREV32 = { 1347, 4},
|
||||
.VREV64 = { 1351, 6},
|
||||
.VEXT = { 1357, 2},
|
||||
.VTBL = { 1359, 4},
|
||||
.VTBX = { 1363, 4},
|
||||
.VTRN = { 1367, 6},
|
||||
.VUZP = { 1373, 5},
|
||||
.VZIP = { 1378, 5},
|
||||
.VDUP = { 1383, 5},
|
||||
.VSWP = { 1388, 2},
|
||||
.VMOV_LANE = { 1390, 3},
|
||||
.VLD1 = { 1393, 8},
|
||||
.VLD2 = { 1401, 3},
|
||||
.VLD3 = { 1404, 2},
|
||||
.VLD4 = { 1406, 2},
|
||||
.VST1 = { 1408, 7},
|
||||
.VST2 = { 1415, 3},
|
||||
.VST3 = { 1418, 2},
|
||||
.VST4 = { 1420, 2},
|
||||
.AESE = { 1422, 1},
|
||||
.AESD = { 1423, 1},
|
||||
.AESMC = { 1424, 1},
|
||||
.AESIMC = { 1425, 1},
|
||||
.SHA1H = { 1426, 1},
|
||||
.SHA1SU0 = { 1427, 1},
|
||||
.SHA1SU1 = { 1428, 1},
|
||||
.SHA1C = { 1429, 1},
|
||||
.SHA1M = { 1430, 1},
|
||||
.SHA1P = { 1431, 1},
|
||||
.SHA256H = { 1432, 1},
|
||||
.SHA256H2 = { 1433, 1},
|
||||
.SHA256SU0 = { 1434, 1},
|
||||
.SHA256SU1 = { 1435, 1},
|
||||
.VJCVT = { 1436, 1},
|
||||
.VSDOT = { 1437, 4},
|
||||
.VUDOT = { 1441, 4},
|
||||
.VDOT = { 1445, 2},
|
||||
.VMMLA = { 1447, 1},
|
||||
.VFMAL = { 1448, 2},
|
||||
.VFMSL = { 1450, 2},
|
||||
.VCMLA = { 1452, 5},
|
||||
.VCADD = { 1457, 2},
|
||||
.VSMMLA = { 1459, 1},
|
||||
.VUMMLA = { 1460, 1},
|
||||
.VUSMMLA = { 1461, 1},
|
||||
.VSUDOT = { 1462, 2},
|
||||
.VUSDOT = { 1464, 4},
|
||||
.VQABS = { 1468, 1},
|
||||
.VQNEG = { 1469, 1},
|
||||
.VMOVX = { 1470, 1},
|
||||
.VINS = { 1471, 1},
|
||||
.VLD2R = { 1472, 1},
|
||||
.VLD3R = { 1473, 1},
|
||||
.VLD4R = { 1474, 1},
|
||||
.VLD1_LANE = { 1475, 3},
|
||||
.VLD2_LANE = { 1478, 3},
|
||||
.VLD3_LANE = { 1481, 3},
|
||||
.VLD4_LANE = { 1484, 3},
|
||||
.VST1_LANE = { 1487, 3},
|
||||
.VST2_LANE = { 1490, 3},
|
||||
.VST3_LANE = { 1493, 3},
|
||||
.VST4_LANE = { 1496, 3},
|
||||
.IT = { 1499, 1},
|
||||
.TT = { 1500, 1},
|
||||
.TTT = { 1501, 1},
|
||||
.TTA = { 1502, 1},
|
||||
.TTAT = { 1503, 1},
|
||||
.SG = { 1504, 1},
|
||||
.BXNS = { 1505, 1},
|
||||
.BLXNS = { 1506, 1},
|
||||
.PAC = { 1507, 1},
|
||||
.PACBTI = { 1508, 1},
|
||||
.AUT = { 1509, 1},
|
||||
.AUTG = { 1510, 1},
|
||||
.BTI = { 1511, 1},
|
||||
.WLS = { 1512, 1},
|
||||
.WLSTP = { 1513, 1},
|
||||
.DLS = { 1514, 1},
|
||||
.DLSTP = { 1515, 1},
|
||||
.LE = { 1516, 1},
|
||||
.LETP = { 1517, 1},
|
||||
.LCTP = { 1518, 1},
|
||||
.BF = { 1519, 1},
|
||||
.BFX = { 1520, 1},
|
||||
.BFL = { 1521, 1},
|
||||
.BFLX = { 1522, 1},
|
||||
.BFCSEL = { 1523, 1},
|
||||
.CX1 = { 1524, 1},
|
||||
.CX1A = { 1525, 1},
|
||||
.CX1D = { 1526, 1},
|
||||
.CX1DA = { 1527, 1},
|
||||
.CX2 = { 1528, 1},
|
||||
.CX2A = { 1529, 1},
|
||||
.CX2D = { 1530, 1},
|
||||
.CX2DA = { 1531, 1},
|
||||
.CX3 = { 1532, 1},
|
||||
.CX3A = { 1533, 1},
|
||||
.CX3D = { 1534, 1},
|
||||
.CX3DA = { 1535, 1},
|
||||
.VCX1 = { 1536, 2},
|
||||
.VCX1A = { 1538, 2},
|
||||
.VCX2 = { 1540, 2},
|
||||
.VCX2A = { 1542, 2},
|
||||
.VCX3 = { 1544, 2},
|
||||
.VCX3A = { 1546, 2},
|
||||
.VPT = { 1548, 1},
|
||||
.VPST = { 1549, 1},
|
||||
.VPSEL = { 1550, 1},
|
||||
.VPNOT = { 1551, 1},
|
||||
.VCTP = { 1552, 1},
|
||||
.VADDV = { 1553, 1},
|
||||
.VADDVA = { 1554, 1},
|
||||
.VADDLV = { 1555, 1},
|
||||
.VADDLVA = { 1556, 1},
|
||||
.VMAXV = { 1557, 1},
|
||||
.VMAXAV = { 1558, 1},
|
||||
.VMINV = { 1559, 1},
|
||||
.VMINAV = { 1560, 1},
|
||||
.VMAXNMV = { 1561, 1},
|
||||
.VMAXNMAV = { 1562, 1},
|
||||
.VMINNMV = { 1563, 1},
|
||||
.VMINNMAV = { 1564, 1},
|
||||
.VABAV = { 1565, 1},
|
||||
.VMLADAV = { 1566, 1},
|
||||
.VMLADAVA = { 1567, 1},
|
||||
.VMLADAVX = { 1568, 1},
|
||||
.VMLADAVAX = { 1569, 1},
|
||||
.VMLALDAV = { 1570, 1},
|
||||
.VMLALDAVA = { 1571, 1},
|
||||
.VMLALDAVX = { 1572, 1},
|
||||
.VMLALDAVAX = { 1573, 1},
|
||||
.VMLSDAV = { 1574, 1},
|
||||
.VMLSDAVA = { 1575, 1},
|
||||
.VMLSDAVX = { 1576, 1},
|
||||
.VMLSDAVAX = { 1577, 1},
|
||||
.VMLSLDAV = { 1578, 1},
|
||||
.VMLSLDAVA = { 1579, 1},
|
||||
.VMLSLDAVX = { 1580, 1},
|
||||
.VMLSLDAVAX = { 1581, 1},
|
||||
.VRMLALDAVH = { 1582, 1},
|
||||
.VRMLALDAVHA = { 1583, 1},
|
||||
.VRMLALDAVHX = { 1584, 1},
|
||||
.VRMLALDAVHAX = { 1585, 1},
|
||||
.VRMLSLDAVH = { 1586, 1},
|
||||
.VRMLSLDAVHA = { 1587, 1},
|
||||
.VRMLSLDAVHX = { 1588, 1},
|
||||
.VRMLSLDAVHAX = { 1589, 1},
|
||||
.VMLAV = { 1590, 1},
|
||||
.VMLAVA = { 1591, 1},
|
||||
.VMLSV = { 1592, 1},
|
||||
.VMLSVA = { 1593, 1},
|
||||
.VCMUL = { 1594, 1},
|
||||
.VHCADD = { 1595, 2},
|
||||
.VBRSR = { 1597, 1},
|
||||
.VSHLC = { 1598, 1},
|
||||
.VDDUP = { 1599, 1},
|
||||
.VIDUP = { 1600, 1},
|
||||
.VDWDUP = { 1601, 1},
|
||||
.VIWDUP = { 1602, 1},
|
||||
.VMOVNB = { 1603, 1},
|
||||
.VMOVNT = { 1604, 1},
|
||||
.VQMOVNB = { 1605, 1},
|
||||
.VQMOVNT = { 1606, 1},
|
||||
.VQMOVUNB = { 1607, 1},
|
||||
.VQMOVUNT = { 1608, 1},
|
||||
.VSHLLB = { 1609, 1},
|
||||
.VSHLLT = { 1610, 1},
|
||||
.VMULLB = { 1611, 1},
|
||||
.VMULLT = { 1612, 1},
|
||||
.VMLALB = { 1613, 1},
|
||||
.VMLALT = { 1614, 1},
|
||||
.VMLSLB = { 1615, 1},
|
||||
.VMLSLT = { 1616, 1},
|
||||
.VSHRNB = { 1617, 1},
|
||||
.VSHRNT = { 1618, 1},
|
||||
.VRSHRNB = { 1619, 1},
|
||||
.VRSHRNT = { 1620, 1},
|
||||
.VQSHRNB = { 1621, 1},
|
||||
.VQSHRNT = { 1622, 1},
|
||||
.VQRSHRNB = { 1623, 1},
|
||||
.VQRSHRNT = { 1624, 1},
|
||||
.VQSHRUNB = { 1625, 1},
|
||||
.VQSHRUNT = { 1626, 1},
|
||||
.VQRSHRUNB = { 1627, 1},
|
||||
.VQRSHRUNT = { 1628, 1},
|
||||
.VQDMLADH = { 1629, 1},
|
||||
.VQDMLADHX = { 1630, 1},
|
||||
.VQDMLSDH = { 1631, 1},
|
||||
.VQDMLSDHX = { 1632, 1},
|
||||
.VQRDMLADH = { 1633, 1},
|
||||
.VQRDMLADHX = { 1634, 1},
|
||||
.VQRDMLSDH = { 1635, 1},
|
||||
.VQRDMLSDHX = { 1636, 1},
|
||||
.VLDRB = { 1637, 2},
|
||||
.VLDRH = { 1639, 2},
|
||||
.VLDRW = { 1641, 2},
|
||||
.VLDRD = { 1643, 2},
|
||||
.VSTRB = { 1645, 2},
|
||||
.VSTRH = { 1647, 2},
|
||||
.VSTRW = { 1649, 2},
|
||||
.VSTRD = { 1651, 2},
|
||||
.VLD20 = { 1653, 1},
|
||||
.VLD21 = { 1654, 1},
|
||||
.VLD40 = { 1655, 1},
|
||||
.VLD41 = { 1656, 1},
|
||||
.VLD42 = { 1657, 1},
|
||||
.VLD43 = { 1658, 1},
|
||||
.VST20 = { 1659, 1},
|
||||
.VST21 = { 1660, 1},
|
||||
.VST40 = { 1661, 1},
|
||||
.VST41 = { 1662, 1},
|
||||
.VST42 = { 1663, 1},
|
||||
.VST43 = { 1664, 1},
|
||||
._COUNT = { 1665, 0},
|
||||
.VFMA = { 710, 8},
|
||||
.VFMS = { 718, 6},
|
||||
.VFNMA = { 724, 3},
|
||||
.VFNMS = { 727, 3},
|
||||
.VABS = { 730, 12},
|
||||
.VNEG = { 742, 12},
|
||||
.VSQRT = { 754, 3},
|
||||
.VCMP = { 757, 8},
|
||||
.VCMPE = { 765, 4},
|
||||
.VCVT = { 769, 21},
|
||||
.VCVTB = { 790, 2},
|
||||
.VCVTT = { 792, 2},
|
||||
.VCVTA = { 794, 2},
|
||||
.VCVTN = { 796, 2},
|
||||
.VCVTP = { 798, 2},
|
||||
.VCVTM = { 800, 2},
|
||||
.VCVTR = { 802, 4},
|
||||
.VMOV = { 806, 31},
|
||||
.VMRS = { 837, 1},
|
||||
.VMSR = { 838, 1},
|
||||
.VLDR = { 839, 2},
|
||||
.VSTR = { 841, 2},
|
||||
.VLDM = { 843, 2},
|
||||
.VSTM = { 845, 2},
|
||||
.VPUSH = { 847, 2},
|
||||
.VPOP = { 849, 2},
|
||||
.VSEL = { 851, 2},
|
||||
.VMAXNM = { 853, 2},
|
||||
.VMINNM = { 855, 2},
|
||||
.VRINTA = { 857, 3},
|
||||
.VRINTN = { 860, 3},
|
||||
.VRINTP = { 863, 3},
|
||||
.VRINTM = { 866, 3},
|
||||
.VRINTR = { 869, 2},
|
||||
.VRINTZ = { 871, 3},
|
||||
.VRINTX = { 874, 3},
|
||||
.VADDL = { 877, 6},
|
||||
.VADDW = { 883, 6},
|
||||
.VSUBL = { 889, 6},
|
||||
.VSUBW = { 895, 6},
|
||||
.VHADD = { 901, 9},
|
||||
.VHSUB = { 910, 9},
|
||||
.VRHADD = { 919, 3},
|
||||
.VQADD = { 922, 11},
|
||||
.VQSUB = { 933, 11},
|
||||
.VMULL = { 944, 11},
|
||||
.VMLAL = { 955, 10},
|
||||
.VMLSL = { 965, 10},
|
||||
.VQDMULL = { 975, 4},
|
||||
.VQDMLAL = { 979, 4},
|
||||
.VQDMLSL = { 983, 4},
|
||||
.VQDMULH = { 987, 8},
|
||||
.VQRDMULH = { 995, 8},
|
||||
.VQRDMLAH = { 1003, 8},
|
||||
.VQRDMLSH = { 1011, 8},
|
||||
.VABA = { 1019, 8},
|
||||
.VABAL = { 1027, 6},
|
||||
.VABD = { 1033, 10},
|
||||
.VABDL = { 1043, 6},
|
||||
.VAND = { 1049, 3},
|
||||
.VBIC = { 1052, 3},
|
||||
.VORR = { 1055, 3},
|
||||
.VORN = { 1058, 3},
|
||||
.VEOR = { 1061, 3},
|
||||
.VBSL = { 1064, 2},
|
||||
.VBIT = { 1066, 2},
|
||||
.VBIF = { 1068, 2},
|
||||
.VMVN = { 1070, 13},
|
||||
.VMOVN = { 1083, 3},
|
||||
.VQMOVN = { 1086, 6},
|
||||
.VQMOVUN = { 1092, 3},
|
||||
.VMOVL = { 1095, 6},
|
||||
.VTST = { 1101, 6},
|
||||
.VCEQ = { 1107, 14},
|
||||
.VCGE = { 1121, 16},
|
||||
.VCGT = { 1137, 16},
|
||||
.VCLE = { 1153, 18},
|
||||
.VCLT = { 1171, 18},
|
||||
.VACGE = { 1189, 2},
|
||||
.VACGT = { 1191, 2},
|
||||
.VACLE = { 1193, 2},
|
||||
.VACLT = { 1195, 2},
|
||||
.VMAX = { 1197, 13},
|
||||
.VMIN = { 1210, 13},
|
||||
.VPMAX = { 1223, 5},
|
||||
.VPMIN = { 1228, 5},
|
||||
.VPADD = { 1233, 5},
|
||||
.VPADDL = { 1238, 6},
|
||||
.VPADAL = { 1244, 4},
|
||||
.VRECPE = { 1248, 4},
|
||||
.VRECPS = { 1252, 2},
|
||||
.VRSQRTE = { 1254, 4},
|
||||
.VRSQRTS = { 1258, 2},
|
||||
.VSHL = { 1260, 9},
|
||||
.VSHR = { 1269, 3},
|
||||
.VSRA = { 1272, 3},
|
||||
.VRSHL = { 1275, 5},
|
||||
.VRSHR = { 1280, 3},
|
||||
.VRSRA = { 1283, 2},
|
||||
.VSLI = { 1285, 2},
|
||||
.VSRI = { 1287, 2},
|
||||
.VQSHL = { 1289, 7},
|
||||
.VQSHRN = { 1296, 1},
|
||||
.VQSHRUN = { 1297, 1},
|
||||
.VQRSHL = { 1298, 16},
|
||||
.VQRSHRN = { 1314, 1},
|
||||
.VQRSHRUN = { 1315, 1},
|
||||
.VSHRN = { 1316, 1},
|
||||
.VRSHRN = { 1317, 1},
|
||||
.VSHLL = { 1318, 4},
|
||||
.VCLS = { 1322, 6},
|
||||
.VCLZ = { 1328, 6},
|
||||
.VCNT = { 1334, 2},
|
||||
.VREV16 = { 1336, 2},
|
||||
.VREV32 = { 1338, 4},
|
||||
.VREV64 = { 1342, 6},
|
||||
.VEXT = { 1348, 2},
|
||||
.VTBL = { 1350, 4},
|
||||
.VTBX = { 1354, 4},
|
||||
.VTRN = { 1358, 6},
|
||||
.VUZP = { 1364, 5},
|
||||
.VZIP = { 1369, 5},
|
||||
.VDUP = { 1374, 5},
|
||||
.VSWP = { 1379, 2},
|
||||
.VMOV_LANE = { 1381, 3},
|
||||
.VLD1 = { 1384, 8},
|
||||
.VLD2 = { 1392, 3},
|
||||
.VLD3 = { 1395, 2},
|
||||
.VLD4 = { 1397, 2},
|
||||
.VST1 = { 1399, 7},
|
||||
.VST2 = { 1406, 3},
|
||||
.VST3 = { 1409, 2},
|
||||
.VST4 = { 1411, 2},
|
||||
.AESE = { 1413, 1},
|
||||
.AESD = { 1414, 1},
|
||||
.AESMC = { 1415, 1},
|
||||
.AESIMC = { 1416, 1},
|
||||
.SHA1H = { 1417, 1},
|
||||
.SHA1SU0 = { 1418, 1},
|
||||
.SHA1SU1 = { 1419, 1},
|
||||
.SHA1C = { 1420, 1},
|
||||
.SHA1M = { 1421, 1},
|
||||
.SHA1P = { 1422, 1},
|
||||
.SHA256H = { 1423, 1},
|
||||
.SHA256H2 = { 1424, 1},
|
||||
.SHA256SU0 = { 1425, 1},
|
||||
.SHA256SU1 = { 1426, 1},
|
||||
.VJCVT = { 1427, 1},
|
||||
.VSDOT = { 1428, 4},
|
||||
.VUDOT = { 1432, 4},
|
||||
.VDOT = { 1436, 2},
|
||||
.VMMLA = { 1438, 1},
|
||||
.VFMAL = { 1439, 2},
|
||||
.VFMSL = { 1441, 2},
|
||||
.VCMLA = { 1443, 5},
|
||||
.VCADD = { 1448, 2},
|
||||
.VSMMLA = { 1450, 1},
|
||||
.VUMMLA = { 1451, 1},
|
||||
.VUSMMLA = { 1452, 1},
|
||||
.VSUDOT = { 1453, 2},
|
||||
.VUSDOT = { 1455, 4},
|
||||
.VQABS = { 1459, 1},
|
||||
.VQNEG = { 1460, 1},
|
||||
.VMOVX = { 1461, 1},
|
||||
.VINS = { 1462, 1},
|
||||
.VLD2R = { 1463, 1},
|
||||
.VLD3R = { 1464, 1},
|
||||
.VLD4R = { 1465, 1},
|
||||
.VLD1_LANE = { 1466, 3},
|
||||
.VLD2_LANE = { 1469, 3},
|
||||
.VLD3_LANE = { 1472, 3},
|
||||
.VLD4_LANE = { 1475, 3},
|
||||
.VST1_LANE = { 1478, 3},
|
||||
.VST2_LANE = { 1481, 3},
|
||||
.VST3_LANE = { 1484, 3},
|
||||
.VST4_LANE = { 1487, 3},
|
||||
.IT = { 1490, 1},
|
||||
.TT = { 1491, 1},
|
||||
.TTT = { 1492, 1},
|
||||
.TTA = { 1493, 1},
|
||||
.TTAT = { 1494, 1},
|
||||
.SG = { 1495, 1},
|
||||
.BXNS = { 1496, 1},
|
||||
.BLXNS = { 1497, 1},
|
||||
.PAC = { 1498, 1},
|
||||
.PACBTI = { 1499, 1},
|
||||
.AUT = { 1500, 1},
|
||||
.AUTG = { 1501, 1},
|
||||
.BTI = { 1502, 1},
|
||||
.WLS = { 1503, 1},
|
||||
.WLSTP = { 1504, 1},
|
||||
.DLS = { 1505, 1},
|
||||
.DLSTP = { 1506, 1},
|
||||
.LE = { 1507, 1},
|
||||
.LETP = { 1508, 1},
|
||||
.LCTP = { 1509, 1},
|
||||
.BF = { 1510, 1},
|
||||
.BFX = { 1511, 1},
|
||||
.BFL = { 1512, 1},
|
||||
.BFLX = { 1513, 1},
|
||||
.BFCSEL = { 1514, 1},
|
||||
.CX1 = { 1515, 1},
|
||||
.CX1A = { 1516, 1},
|
||||
.CX1D = { 1517, 1},
|
||||
.CX1DA = { 1518, 1},
|
||||
.CX2 = { 1519, 1},
|
||||
.CX2A = { 1520, 1},
|
||||
.CX2D = { 1521, 1},
|
||||
.CX2DA = { 1522, 1},
|
||||
.CX3 = { 1523, 1},
|
||||
.CX3A = { 1524, 1},
|
||||
.CX3D = { 1525, 1},
|
||||
.CX3DA = { 1526, 1},
|
||||
.VCX1 = { 1527, 2},
|
||||
.VCX1A = { 1529, 2},
|
||||
.VCX2 = { 1531, 2},
|
||||
.VCX2A = { 1533, 2},
|
||||
.VCX3 = { 1535, 2},
|
||||
.VCX3A = { 1537, 2},
|
||||
.VPT = { 1539, 1},
|
||||
.VPST = { 1540, 1},
|
||||
.VPSEL = { 1541, 1},
|
||||
.VPNOT = { 1542, 1},
|
||||
.VCTP = { 1543, 1},
|
||||
.VADDV = { 1544, 1},
|
||||
.VADDVA = { 1545, 1},
|
||||
.VADDLV = { 1546, 1},
|
||||
.VADDLVA = { 1547, 1},
|
||||
.VMAXV = { 1548, 1},
|
||||
.VMAXAV = { 1549, 1},
|
||||
.VMINV = { 1550, 1},
|
||||
.VMINAV = { 1551, 1},
|
||||
.VMAXNMV = { 1552, 1},
|
||||
.VMAXNMAV = { 1553, 1},
|
||||
.VMINNMV = { 1554, 1},
|
||||
.VMINNMAV = { 1555, 1},
|
||||
.VABAV = { 1556, 1},
|
||||
.VMLADAV = { 1557, 1},
|
||||
.VMLADAVA = { 1558, 1},
|
||||
.VMLADAVX = { 1559, 1},
|
||||
.VMLADAVAX = { 1560, 1},
|
||||
.VMLALDAV = { 1561, 1},
|
||||
.VMLALDAVA = { 1562, 1},
|
||||
.VMLALDAVX = { 1563, 1},
|
||||
.VMLALDAVAX = { 1564, 1},
|
||||
.VMLSDAV = { 1565, 1},
|
||||
.VMLSDAVA = { 1566, 1},
|
||||
.VMLSDAVX = { 1567, 1},
|
||||
.VMLSDAVAX = { 1568, 1},
|
||||
.VMLSLDAV = { 1569, 1},
|
||||
.VMLSLDAVA = { 1570, 1},
|
||||
.VMLSLDAVX = { 1571, 1},
|
||||
.VMLSLDAVAX = { 1572, 1},
|
||||
.VRMLALDAVH = { 1573, 1},
|
||||
.VRMLALDAVHA = { 1574, 1},
|
||||
.VRMLALDAVHX = { 1575, 1},
|
||||
.VRMLALDAVHAX = { 1576, 1},
|
||||
.VRMLSLDAVH = { 1577, 1},
|
||||
.VRMLSLDAVHA = { 1578, 1},
|
||||
.VRMLSLDAVHX = { 1579, 1},
|
||||
.VRMLSLDAVHAX = { 1580, 1},
|
||||
.VMLAV = { 1581, 1},
|
||||
.VMLAVA = { 1582, 1},
|
||||
.VMLSV = { 1583, 1},
|
||||
.VMLSVA = { 1584, 1},
|
||||
.VCMUL = { 1585, 1},
|
||||
.VHCADD = { 1586, 2},
|
||||
.VBRSR = { 1588, 1},
|
||||
.VSHLC = { 1589, 1},
|
||||
.VDDUP = { 1590, 1},
|
||||
.VIDUP = { 1591, 1},
|
||||
.VDWDUP = { 1592, 1},
|
||||
.VIWDUP = { 1593, 1},
|
||||
.VMOVNB = { 1594, 1},
|
||||
.VMOVNT = { 1595, 1},
|
||||
.VQMOVNB = { 1596, 1},
|
||||
.VQMOVNT = { 1597, 1},
|
||||
.VQMOVUNB = { 1598, 1},
|
||||
.VQMOVUNT = { 1599, 1},
|
||||
.VSHLLB = { 1600, 1},
|
||||
.VSHLLT = { 1601, 1},
|
||||
.VMULLB = { 1602, 1},
|
||||
.VMULLT = { 1603, 1},
|
||||
.VMLALB = { 1604, 1},
|
||||
.VMLALT = { 1605, 1},
|
||||
.VMLSLB = { 1606, 1},
|
||||
.VMLSLT = { 1607, 1},
|
||||
.VSHRNB = { 1608, 1},
|
||||
.VSHRNT = { 1609, 1},
|
||||
.VRSHRNB = { 1610, 1},
|
||||
.VRSHRNT = { 1611, 1},
|
||||
.VQSHRNB = { 1612, 1},
|
||||
.VQSHRNT = { 1613, 1},
|
||||
.VQRSHRNB = { 1614, 1},
|
||||
.VQRSHRNT = { 1615, 1},
|
||||
.VQSHRUNB = { 1616, 1},
|
||||
.VQSHRUNT = { 1617, 1},
|
||||
.VQRSHRUNB = { 1618, 1},
|
||||
.VQRSHRUNT = { 1619, 1},
|
||||
.VQDMLADH = { 1620, 1},
|
||||
.VQDMLADHX = { 1621, 1},
|
||||
.VQDMLSDH = { 1622, 1},
|
||||
.VQDMLSDHX = { 1623, 1},
|
||||
.VQRDMLADH = { 1624, 1},
|
||||
.VQRDMLADHX = { 1625, 1},
|
||||
.VQRDMLSDH = { 1626, 1},
|
||||
.VQRDMLSDHX = { 1627, 1},
|
||||
.VLDRB = { 1628, 2},
|
||||
.VLDRH = { 1630, 2},
|
||||
.VLDRW = { 1632, 2},
|
||||
.VLDRD = { 1634, 2},
|
||||
.VSTRB = { 1636, 2},
|
||||
.VSTRH = { 1638, 2},
|
||||
.VSTRW = { 1640, 2},
|
||||
.VSTRD = { 1642, 2},
|
||||
.VLD20 = { 1644, 1},
|
||||
.VLD21 = { 1645, 1},
|
||||
.VLD40 = { 1646, 1},
|
||||
.VLD41 = { 1647, 1},
|
||||
.VLD42 = { 1648, 1},
|
||||
.VLD43 = { 1649, 1},
|
||||
.VST20 = { 1650, 1},
|
||||
.VST21 = { 1651, 1},
|
||||
.VST40 = { 1652, 1},
|
||||
.VST41 = { 1653, 1},
|
||||
.VST42 = { 1654, 1},
|
||||
.VST43 = { 1655, 1},
|
||||
._COUNT = { 1656, 0},
|
||||
}
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.2 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -389,7 +389,7 @@ run_smoke :: proc() {
|
||||
check("VFMSL Q", .VFMSL, 1, 0xFCA00850, 0xFFB00F50)
|
||||
check("VCVT BF16", .VCVT, 10, 0xF3B60600, 0xFFBF0FD0)
|
||||
check("VDOT BF16 D", .VDOT, 0, 0xFC000D00, 0xFFB00F10)
|
||||
check("VFMA BF16 Q", .VFMA, 9, 0xFC300850, 0xFFB00F50)
|
||||
check("VFMA BF16 Q", .VFMA, 7, 0xFC300850, 0xFFB00F50)
|
||||
check("VMMLA BF16 Q", .VMMLA, 0, 0xFC000C40, 0xFFB00F50)
|
||||
|
||||
// ---- Barriers / hints: ESB, PSB CSYNC, TSB CSYNC, CSDB, SB ----
|
||||
@@ -513,8 +513,6 @@ run_smoke :: proc() {
|
||||
check("VQDMULL lane .S16",.VQDMULL, 2, 0xF2900B40, 0xFFB00F50)
|
||||
check("VQDMLAL lane .S32",.VQDMLAL, 3, 0xF2A00340, 0xFFB00F50)
|
||||
check("VQDMLSL lane", .VQDMLSL, 2, 0xF2900740, 0xFFB00F50)
|
||||
check("VFMA lane D", .VFMA, 7, 0xF2A00040, 0xFFB00F50)
|
||||
check("VFMS lane Q", .VFMS, 7, 0xF3A00440, 0xFFB00F50)
|
||||
check("VQRDMLAH lane", .VQRDMLAH, 4, 0xF2900E40, 0xFFB00F50)
|
||||
check("VQRDMLSH lane", .VQRDMLSH, 4, 0xF2900F40, 0xFFB00F50)
|
||||
check("VCMLA lane D", .VCMLA, 2, 0xFE000800, 0xFFB00F10)
|
||||
|
||||
Reference in New Issue
Block a user