struct disassemble_info *info)
{
size_t len = 0;
+ uint64_t VLi = svp64_insn_get_prefix_rm_normal_ffrc1_VLi (&svp64->insn);
uint64_t inv = svp64_insn_get_prefix_rm_normal_ffrc1_inv (&svp64->insn);
uint64_t CR = svp64_insn_get_prefix_rm_normal_ffrc1_CR (&svp64->insn);
len += svp64_spec_ffrc1 (info, inv, CR);
+ len += svp64_spec_VLi (info, VLi);
len += svp64_spec_normal (svp64, info);
return len;
struct disassemble_info *info)
{
size_t len = 0;
- uint64_t inv = svp64_insn_get_prefix_rm_normal_ffrc0_inv (&svp64->insn);
uint64_t VLi = svp64_insn_get_prefix_rm_normal_ffrc0_VLi (&svp64->insn);
+ uint64_t inv = svp64_insn_get_prefix_rm_normal_ffrc0_inv (&svp64->insn);
uint64_t RC1 = svp64_insn_get_prefix_rm_normal_ffrc0_RC1 (&svp64->insn);
- len += svp64_spec_VLi (info, VLi);
len += svp64_spec_ffrc0 (info, inv, RC1);
+ len += svp64_spec_VLi (info, VLi);
len += svp64_spec_normal (svp64, info);
return len;
}
static size_t
-svp64_spec_ldst_imm_simple (const struct svp64_ctx *svp64,
- struct disassemble_info *info)
+svp64_spec_pi (struct disassemble_info *info, bool pi)
{
- size_t len = 0;
- uint64_t zz = svp64_insn_get_prefix_rm_ldst_imm_simple_zz (&svp64->insn);
- uint64_t els = svp64_insn_get_prefix_rm_ldst_imm_simple_els (&svp64->insn);
+ if (pi)
+ return svp64_spec_printf (info, "pi");
- len += svp64_spec_dz_sz_zz (info, zz, zz);
- len += svp64_spec_els (info, els);
- len += svp64_spec_ldst_imm (svp64, info);
+ return 0;
+}
- return len;
+static size_t
+svp64_spec_lf (struct disassemble_info *info, bool lf)
+{
+ if (lf)
+ return svp64_spec_printf (info, "lf");
+
+ return 0;
}
static size_t
-svp64_spec_ldst_imm_post (const struct svp64_ctx *svp64,
+svp64_spec_ldst_imm_simple (const struct svp64_ctx *svp64,
struct disassemble_info *info)
{
size_t len = 0;
- uint64_t pi = svp64_insn_get_prefix_rm_ldst_imm_post_pi (&svp64->insn);
- uint64_t lf = svp64_insn_get_prefix_rm_ldst_imm_post_lf (&svp64->insn);
+ uint64_t pi = svp64_insn_get_prefix_rm_ldst_imm_simple_pi (&svp64->insn);
+ uint64_t lf = svp64_insn_get_prefix_rm_ldst_imm_simple_lf (&svp64->insn);
+ uint64_t els = svp64_insn_get_prefix_rm_ldst_imm_simple_els (&svp64->insn);
+ uint64_t zz = svp64_insn_get_prefix_rm_ldst_imm_simple_zz (&svp64->insn);
- if (pi)
- len += svp64_spec_printf (info, "pi");
- if (lf)
- len += svp64_spec_printf (info, "lf");
+ len += svp64_spec_pi (info, pi);
+ len += svp64_spec_lf (info, lf);
+ len += svp64_spec_els (info, els);
+ len += svp64_spec_dz_sz_zz (info, zz, zz);
+ len += svp64_spec_ldst_imm (svp64, info);
- return 0;
+ return len;
}
static size_t
{
size_t len = 0;
uint64_t inv = svp64_insn_get_prefix_rm_ldst_imm_ffrc0_inv (&svp64->insn);
- uint64_t els = svp64_insn_get_prefix_rm_ldst_imm_ffrc0_els (&svp64->insn);
+ uint64_t VLi = svp64_insn_get_prefix_rm_ldst_imm_ffrc0_VLi (&svp64->insn);
uint64_t RC1 = svp64_insn_get_prefix_rm_ldst_imm_ffrc0_RC1 (&svp64->insn);
len += svp64_spec_ffrc0 (info, inv, RC1);
- len += svp64_spec_els (info, els);
+ len += svp64_spec_VLi (info, VLi);
len += svp64_spec_ldst_imm (svp64, info);
return len;
}
-static size_t
-svp64_spec_ldst_imm_sat (const struct svp64_ctx *svp64,
- struct disassemble_info *info)
-{
- size_t len = 0;
- uint64_t N = svp64_insn_get_prefix_rm_ldst_imm_sat_N (&svp64->insn);
- uint64_t zz = svp64_insn_get_prefix_rm_ldst_imm_sat_zz (&svp64->insn);
- uint64_t els = svp64_insn_get_prefix_rm_ldst_imm_sat_els (&svp64->insn);
-
- len += svp64_spec_sat (info, N);
- len += svp64_spec_dz_sz_zz (info, zz, zz);
- len += svp64_spec_els (info, els);
- len += svp64_spec_normal (svp64, info);
-
- return len;
-}
-
static size_t
svp64_spec_ldst_idx (const struct svp64_ctx *svp64,
struct disassemble_info *info)
struct disassemble_info *info)
{
size_t len = 0;
+ uint64_t pi = svp64_insn_get_prefix_rm_ldst_idx_simple_pi (&svp64->insn);
+ uint64_t els = svp64_insn_get_prefix_rm_ldst_idx_simple_els (&svp64->insn);
uint64_t SEA = svp64_insn_get_prefix_rm_ldst_idx_simple_SEA (&svp64->insn);
uint64_t dz = svp64_insn_get_prefix_rm_ldst_idx_simple_dz (&svp64->insn);
uint64_t sz = svp64_insn_get_prefix_rm_ldst_idx_simple_sz (&svp64->insn);
+ len += svp64_spec_pi (info, pi);
+ len += svp64_spec_els (info, els);
len += svp64_spec_SEA (info, SEA);
len += svp64_spec_dz_sz_zz (info, dz, sz);
len += svp64_spec_ldst_idx (svp64, info);
return len;
}
+
static size_t
svp64_spec_ldst_idx_ffrc1 (const struct svp64_ctx *svp64,
struct disassemble_info *info)
{
size_t len = 0;
- uint64_t N = svp64_insn_get_prefix_rm_ldst_idx_sat_N (&svp64->insn);
- uint64_t dz = svp64_insn_get_prefix_rm_ldst_idx_sat_dz (&svp64->insn);
- uint64_t sz = svp64_insn_get_prefix_rm_ldst_idx_sat_sz (&svp64->insn);
+ uint64_t inv = svp64_insn_get_prefix_rm_ldst_idx_ffrc1_inv (&svp64->insn);
+ uint64_t CR = svp64_insn_get_prefix_rm_ldst_idx_ffrc1_CR (&svp64->insn);
- len += svp64_spec_sat (info, N);
- len += svp64_spec_dz_sz_zz (info, dz, sz);
+ len += svp64_spec_ffrc1 (info, inv, CR);
len += svp64_spec_ldst_idx (svp64, info);
return len;
struct disassemble_info *info)
{
size_t len = 0;
- uint64_t N = svp64_insn_get_prefix_rm_ldst_idx_sat_N (&svp64->insn);
- uint64_t dz = svp64_insn_get_prefix_rm_ldst_idx_sat_dz (&svp64->insn);
- uint64_t sz = svp64_insn_get_prefix_rm_ldst_idx_sat_sz (&svp64->insn);
+ uint64_t inv = svp64_insn_get_prefix_rm_ldst_idx_ffrc0_inv (&svp64->insn);
+ uint64_t VLi = svp64_insn_get_prefix_rm_ldst_idx_ffrc0_VLi (&svp64->insn);
+ uint64_t RC1 = svp64_insn_get_prefix_rm_ldst_idx_ffrc0_RC1 (&svp64->insn);
- len += svp64_spec_sat (info, N);
- len += svp64_spec_dz_sz_zz (info, dz, sz);
+ len += svp64_spec_ffrc0 (info, inv, RC1);
+ len += svp64_spec_VLi (info, VLi);
len += svp64_spec_ldst_idx (svp64, info);
return len;
size_t len = 0;
uint64_t VLi = svp64_insn_get_prefix_rm_crop_ff3_VLi (&svp64->insn);
uint64_t inv = svp64_insn_get_prefix_rm_crop_ff3_inv (&svp64->insn);
- uint64_t sz = svp64_insn_get_prefix_rm_crop_ff3_sz (&svp64->insn);
- uint64_t dz = svp64_insn_get_prefix_rm_crop_ff3_dz (&svp64->insn);
- uint64_t RC1 = svp64_insn_get_prefix_rm_crop_ff3_RC1 (&svp64->insn);
+ uint64_t zz = svp64_insn_get_prefix_rm_crop_ff3_zz (&svp64->insn);
+ uint64_t CR = svp64_insn_get_prefix_rm_crop_ff3_CR (&svp64->insn);
+ len += svp64_spec_ffrc0 (info, inv, CR);
len += svp64_spec_VLi (info, VLi);
- len += svp64_spec_ffrc0 (info, inv, RC1);
- len += svp64_spec_dz_sz_zz (info, dz, sz);
+ len += svp64_spec_dz_sz_zz (info, zz, zz);
return len;
}
{
size_t len = 0;
uint64_t VLi = svp64_insn_get_prefix_rm_crop_ff5_VLi (&svp64->insn);
+ uint64_t RC1 = 1;
uint64_t inv = svp64_insn_get_prefix_rm_crop_ff5_inv (&svp64->insn);
- uint64_t CR = svp64_insn_get_prefix_rm_crop_ff5_CR (&svp64->insn);
uint64_t dz = svp64_insn_get_prefix_rm_crop_ff5_dz (&svp64->insn);
uint64_t sz = svp64_insn_get_prefix_rm_crop_ff5_sz (&svp64->insn);
+ len += svp64_spec_ffrc1 (info, inv, RC1);
len += svp64_spec_VLi (info, VLi);
- len += svp64_spec_ffrc1 (info, inv, CR);
len += svp64_spec_dz_sz_zz (info, dz, sz);
return len;
{0x20, 0x30, svp64_spec_normal_sat}, /* saturation (no Rc) */
};
static const struct svp64_spec_subtable ldst_imm[] = {
- {0x00, 0x38, svp64_spec_ldst_imm_simple}, /* simple (no Rc) */
- {0x08, 0x38, svp64_spec_ldst_imm_post}, /* post (no Rc) */
+ {0x00, 0x10, svp64_spec_ldst_imm_simple}, /* simple (no Rc) */
{0x11, 0x11, svp64_spec_ldst_imm_ffrc1}, /* ffirst, Rc=1 */
{0x10, 0x11, svp64_spec_ldst_imm_ffrc0}, /* ffirst, Rc=0 */
- {0x20, 0x30, svp64_spec_ldst_imm_sat}, /* saturation (no Rc) */
};
static const struct svp64_spec_subtable ldst_idx[] = {
{0x00, 0x10, svp64_spec_ldst_idx_simple}, /* simple (no Rc) */
static const struct svp64_spec_subtable crop[] = {
{0x00, 0x38, svp64_spec_crop_simple}, /* simple */
{0x08, 0x38, svp64_spec_crop_mr}, /* mapreduce */
- {0x21, 0x21, svp64_spec_crop_ff3}, /* ffirst, 3-bit CR */
- {0x20, 0x20, svp64_spec_crop_ff5}, /* ffirst, 5-bit CR */
+ {0x11, 0x11, svp64_spec_crop_ff3}, /* ffirst, 3-bit CR */
+ {0x10, 0x10, svp64_spec_crop_ff5}, /* ffirst, 5-bit CR */
};
static const struct svp64_spec_subtable branch[] = {
{0x00, 0x03, svp64_spec_branch_simple}, /* simple */