478 lines
20 KiB
C
478 lines
20 KiB
C
/* This file is autogenerated by scripts/decodetree.py. */
|
|
|
|
#ifdef CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE
|
|
# pragma GCC diagnostic push
|
|
# pragma GCC diagnostic ignored "-Wredundant-decls"
|
|
# ifdef __clang__
|
|
# pragma GCC diagnostic ignored "-Wtypedef-redefinition"
|
|
# endif
|
|
#endif
|
|
|
|
typedef arg_empty arg_illegal;
|
|
static bool trans_illegal(DisasContext *ctx, arg_illegal *a);
|
|
typedef arg_i arg_addi;
|
|
static bool trans_addi(DisasContext *ctx, arg_addi *a);
|
|
typedef arg_i arg_fld;
|
|
static bool trans_fld(DisasContext *ctx, arg_fld *a);
|
|
typedef arg_i arg_lw;
|
|
static bool trans_lw(DisasContext *ctx, arg_lw *a);
|
|
typedef arg_s arg_fsd;
|
|
static bool trans_fsd(DisasContext *ctx, arg_fsd *a);
|
|
typedef arg_s arg_sw;
|
|
static bool trans_sw(DisasContext *ctx, arg_sw *a);
|
|
typedef arg_u arg_lui;
|
|
static bool trans_lui(DisasContext *ctx, arg_lui *a);
|
|
typedef arg_shift arg_srli;
|
|
static bool trans_srli(DisasContext *ctx, arg_srli *a);
|
|
typedef arg_shift arg_srai;
|
|
static bool trans_srai(DisasContext *ctx, arg_srai *a);
|
|
typedef arg_i arg_andi;
|
|
static bool trans_andi(DisasContext *ctx, arg_andi *a);
|
|
typedef arg_r arg_sub;
|
|
static bool trans_sub(DisasContext *ctx, arg_sub *a);
|
|
typedef arg_r arg_xor;
|
|
static bool trans_xor(DisasContext *ctx, arg_xor *a);
|
|
typedef arg_r arg_or;
|
|
static bool trans_or(DisasContext *ctx, arg_or *a);
|
|
typedef arg_r arg_and;
|
|
static bool trans_and(DisasContext *ctx, arg_and *a);
|
|
typedef arg_j arg_jal;
|
|
static bool trans_jal(DisasContext *ctx, arg_jal *a);
|
|
typedef arg_b arg_beq;
|
|
static bool trans_beq(DisasContext *ctx, arg_beq *a);
|
|
typedef arg_b arg_bne;
|
|
static bool trans_bne(DisasContext *ctx, arg_bne *a);
|
|
typedef arg_shift arg_slli;
|
|
static bool trans_slli(DisasContext *ctx, arg_slli *a);
|
|
typedef arg_i arg_jalr;
|
|
static bool trans_jalr(DisasContext *ctx, arg_jalr *a);
|
|
typedef arg_empty arg_ebreak;
|
|
static bool trans_ebreak(DisasContext *ctx, arg_ebreak *a);
|
|
typedef arg_r arg_add;
|
|
static bool trans_add(DisasContext *ctx, arg_add *a);
|
|
typedef arg_i arg_flw;
|
|
static bool trans_flw(DisasContext *ctx, arg_flw *a);
|
|
typedef arg_s arg_fsw;
|
|
static bool trans_fsw(DisasContext *ctx, arg_fsw *a);
|
|
|
|
#ifdef CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE
|
|
# pragma GCC diagnostic pop
|
|
#endif
|
|
|
|
static void decode_insn16_extract_c_addi16sp(DisasContext *ctx, arg_i *a, uint16_t insn)
|
|
{
|
|
a->imm = ex_shift_4(ctx, deposit32(deposit32(deposit32(deposit32(extract32(insn, 6, 1), 1, 31, extract32(insn, 2, 1)), 2, 30, extract32(insn, 5, 1)), 3, 29, extract32(insn, 3, 2)), 5, 27, sextract32(insn, 12, 1)));
|
|
a->rs1 = 2;
|
|
a->rd = 2;
|
|
}
|
|
|
|
static void decode_insn16_extract_c_addi4spn(DisasContext *ctx, arg_i *a, uint16_t insn)
|
|
{
|
|
a->imm = ex_shift_2(ctx, deposit32(deposit32(deposit32(extract32(insn, 6, 1), 1, 31, extract32(insn, 5, 1)), 2, 30, extract32(insn, 11, 2)), 4, 28, extract32(insn, 7, 4)));
|
|
a->rs1 = 2;
|
|
a->rd = ex_rvc_register(ctx, extract32(insn, 2, 3));
|
|
}
|
|
|
|
static void decode_insn16_extract_c_andi(DisasContext *ctx, arg_i *a, uint16_t insn)
|
|
{
|
|
a->imm = deposit32(extract32(insn, 2, 5), 5, 27, sextract32(insn, 12, 1));
|
|
a->rs1 = ex_rvc_register(ctx, extract32(insn, 7, 3));
|
|
a->rd = ex_rvc_register(ctx, extract32(insn, 7, 3));
|
|
}
|
|
|
|
static void decode_insn16_extract_c_jalr(DisasContext *ctx, arg_i *a, uint16_t insn)
|
|
{
|
|
a->imm = 0;
|
|
a->rs1 = extract32(insn, 7, 5);
|
|
}
|
|
|
|
static void decode_insn16_extract_c_ldsp(DisasContext *ctx, arg_i *a, uint16_t insn)
|
|
{
|
|
a->imm = ex_shift_3(ctx, deposit32(deposit32(extract32(insn, 5, 2), 2, 30, extract32(insn, 12, 1)), 3, 29, extract32(insn, 2, 3)));
|
|
a->rs1 = 2;
|
|
a->rd = extract32(insn, 7, 5);
|
|
}
|
|
|
|
static void decode_insn16_extract_c_li(DisasContext *ctx, arg_i *a, uint16_t insn)
|
|
{
|
|
a->imm = deposit32(extract32(insn, 2, 5), 5, 27, sextract32(insn, 12, 1));
|
|
a->rs1 = 0;
|
|
a->rd = extract32(insn, 7, 5);
|
|
}
|
|
|
|
static void decode_insn16_extract_c_lui(DisasContext *ctx, arg_u *a, uint16_t insn)
|
|
{
|
|
a->imm = ex_shift_12(ctx, deposit32(extract32(insn, 2, 5), 5, 27, sextract32(insn, 12, 1)));
|
|
a->rd = extract32(insn, 7, 5);
|
|
}
|
|
|
|
static void decode_insn16_extract_c_lwsp(DisasContext *ctx, arg_i *a, uint16_t insn)
|
|
{
|
|
a->imm = ex_shift_2(ctx, deposit32(deposit32(extract32(insn, 4, 3), 3, 29, extract32(insn, 12, 1)), 4, 28, extract32(insn, 2, 2)));
|
|
a->rs1 = 2;
|
|
a->rd = extract32(insn, 7, 5);
|
|
}
|
|
|
|
static void decode_insn16_extract_c_mv(DisasContext *ctx, arg_i *a, uint16_t insn)
|
|
{
|
|
a->imm = 0;
|
|
a->rs1 = extract32(insn, 2, 5);
|
|
a->rd = extract32(insn, 7, 5);
|
|
}
|
|
|
|
static void decode_insn16_extract_c_sdsp(DisasContext *ctx, arg_s *a, uint16_t insn)
|
|
{
|
|
a->imm = ex_shift_3(ctx, deposit32(extract32(insn, 10, 3), 3, 29, extract32(insn, 7, 3)));
|
|
a->rs1 = 2;
|
|
a->rs2 = extract32(insn, 2, 5);
|
|
}
|
|
|
|
static void decode_insn16_extract_c_shift(DisasContext *ctx, arg_shift *a, uint16_t insn)
|
|
{
|
|
a->rd = ex_rvc_register(ctx, extract32(insn, 7, 3));
|
|
a->rs1 = ex_rvc_register(ctx, extract32(insn, 7, 3));
|
|
a->shamt = ex_rvc_shifti(ctx, deposit32(extract32(insn, 2, 5), 5, 27, extract32(insn, 12, 1)));
|
|
}
|
|
|
|
static void decode_insn16_extract_c_shift2(DisasContext *ctx, arg_shift *a, uint16_t insn)
|
|
{
|
|
a->rd = extract32(insn, 7, 5);
|
|
a->rs1 = extract32(insn, 7, 5);
|
|
a->shamt = ex_rvc_shifti(ctx, deposit32(extract32(insn, 2, 5), 5, 27, extract32(insn, 12, 1)));
|
|
}
|
|
|
|
static void decode_insn16_extract_c_swsp(DisasContext *ctx, arg_s *a, uint16_t insn)
|
|
{
|
|
a->imm = ex_shift_2(ctx, deposit32(extract32(insn, 9, 4), 4, 28, extract32(insn, 7, 2)));
|
|
a->rs1 = 2;
|
|
a->rs2 = extract32(insn, 2, 5);
|
|
}
|
|
|
|
static void decode_insn16_extract_cb_z(DisasContext *ctx, arg_b *a, uint16_t insn)
|
|
{
|
|
a->imm = ex_shift_1(ctx, deposit32(deposit32(deposit32(deposit32(extract32(insn, 3, 2), 2, 30, extract32(insn, 10, 2)), 4, 28, extract32(insn, 2, 1)), 5, 27, extract32(insn, 5, 2)), 7, 25, sextract32(insn, 12, 1)));
|
|
a->rs1 = ex_rvc_register(ctx, extract32(insn, 7, 3));
|
|
a->rs2 = 0;
|
|
}
|
|
|
|
static void decode_insn16_extract_ci(DisasContext *ctx, arg_i *a, uint16_t insn)
|
|
{
|
|
a->imm = deposit32(extract32(insn, 2, 5), 5, 27, sextract32(insn, 12, 1));
|
|
a->rs1 = extract32(insn, 7, 5);
|
|
a->rd = extract32(insn, 7, 5);
|
|
}
|
|
|
|
static void decode_insn16_extract_cj(DisasContext *ctx, arg_j *a, uint16_t insn)
|
|
{
|
|
a->imm = ex_shift_1(ctx, deposit32(deposit32(deposit32(deposit32(deposit32(deposit32(deposit32(extract32(insn, 3, 3), 3, 29, extract32(insn, 11, 1)), 4, 28, extract32(insn, 2, 1)), 5, 27, extract32(insn, 7, 1)), 6, 26, extract32(insn, 6, 1)), 7, 25, extract32(insn, 9, 2)), 9, 23, extract32(insn, 8, 1)), 10, 22, sextract32(insn, 12, 1)));
|
|
}
|
|
|
|
static void decode_insn16_extract_cl_d(DisasContext *ctx, arg_i *a, uint16_t insn)
|
|
{
|
|
a->imm = ex_shift_3(ctx, deposit32(extract32(insn, 10, 3), 3, 29, extract32(insn, 5, 2)));
|
|
a->rs1 = ex_rvc_register(ctx, extract32(insn, 7, 3));
|
|
a->rd = ex_rvc_register(ctx, extract32(insn, 2, 3));
|
|
}
|
|
|
|
static void decode_insn16_extract_cl_w(DisasContext *ctx, arg_i *a, uint16_t insn)
|
|
{
|
|
a->imm = ex_shift_2(ctx, deposit32(deposit32(extract32(insn, 6, 1), 1, 31, extract32(insn, 10, 3)), 4, 28, extract32(insn, 5, 1)));
|
|
a->rs1 = ex_rvc_register(ctx, extract32(insn, 7, 3));
|
|
a->rd = ex_rvc_register(ctx, extract32(insn, 2, 3));
|
|
}
|
|
|
|
static void decode_insn16_extract_cr(DisasContext *ctx, arg_r *a, uint16_t insn)
|
|
{
|
|
a->rs2 = extract32(insn, 2, 5);
|
|
a->rs1 = extract32(insn, 7, 5);
|
|
a->rd = extract32(insn, 7, 5);
|
|
}
|
|
|
|
static void decode_insn16_extract_cs_2(DisasContext *ctx, arg_r *a, uint16_t insn)
|
|
{
|
|
a->rs2 = ex_rvc_register(ctx, extract32(insn, 2, 3));
|
|
a->rs1 = ex_rvc_register(ctx, extract32(insn, 7, 3));
|
|
a->rd = ex_rvc_register(ctx, extract32(insn, 7, 3));
|
|
}
|
|
|
|
static void decode_insn16_extract_cs_d(DisasContext *ctx, arg_s *a, uint16_t insn)
|
|
{
|
|
a->imm = ex_shift_3(ctx, deposit32(extract32(insn, 10, 3), 3, 29, extract32(insn, 5, 2)));
|
|
a->rs1 = ex_rvc_register(ctx, extract32(insn, 7, 3));
|
|
a->rs2 = ex_rvc_register(ctx, extract32(insn, 2, 3));
|
|
}
|
|
|
|
static void decode_insn16_extract_cs_w(DisasContext *ctx, arg_s *a, uint16_t insn)
|
|
{
|
|
a->imm = ex_shift_2(ctx, deposit32(deposit32(extract32(insn, 6, 1), 1, 31, extract32(insn, 10, 3)), 4, 28, extract32(insn, 5, 1)));
|
|
a->rs1 = ex_rvc_register(ctx, extract32(insn, 7, 3));
|
|
a->rs2 = ex_rvc_register(ctx, extract32(insn, 2, 3));
|
|
}
|
|
|
|
static void decode_insn16_extract_decode_insn16_Fmt_22(DisasContext *ctx, arg_empty *a, uint16_t insn)
|
|
{
|
|
}
|
|
|
|
static bool decode_insn16(DisasContext *ctx, uint16_t insn)
|
|
{
|
|
union {
|
|
arg_b f_b;
|
|
arg_empty f_empty;
|
|
arg_i f_i;
|
|
arg_j f_j;
|
|
arg_r f_r;
|
|
arg_s f_s;
|
|
arg_shift f_shift;
|
|
arg_u f_u;
|
|
} u;
|
|
|
|
switch (insn & 0x0000e003) {
|
|
case 0x00000000:
|
|
/* 000..... ......00 */
|
|
if ((insn & 0x00001fe0) == 0x00000000) {
|
|
/* 00000000 000...00 */
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16.decode:87 */
|
|
decode_insn16_extract_decode_insn16_Fmt_22(ctx, &u.f_empty, insn);
|
|
ctx->invalid = true;
|
|
if (trans_illegal(ctx, &u.f_empty)) return true;
|
|
}
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16.decode:88 */
|
|
decode_insn16_extract_c_addi4spn(ctx, &u.f_i, insn);
|
|
if (trans_addi(ctx, &u.f_i)) return true;
|
|
return false;
|
|
case 0x00000001:
|
|
/* 000..... ......01 */
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16.decode:96 */
|
|
decode_insn16_extract_ci(ctx, &u.f_i, insn);
|
|
if (trans_addi(ctx, &u.f_i)) return true;
|
|
return false;
|
|
case 0x00000002:
|
|
/* 000..... ......10 */
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16.decode:115 */
|
|
decode_insn16_extract_c_shift2(ctx, &u.f_shift, insn);
|
|
if (trans_slli(ctx, &u.f_shift)) return true;
|
|
return false;
|
|
case 0x00002000:
|
|
/* 001..... ......00 */
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16.decode:90 */
|
|
decode_insn16_extract_cl_d(ctx, &u.f_i, insn);
|
|
if (trans_fld(ctx, &u.f_i)) return true;
|
|
return false;
|
|
case 0x00002001:
|
|
/* 001..... ......01 */
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16-32.decode:24 */
|
|
decode_insn16_extract_cj(ctx, &u.f_j, insn);
|
|
u.f_j.rd = 1;
|
|
if (trans_jal(ctx, &u.f_j)) return true;
|
|
return false;
|
|
case 0x00002002:
|
|
/* 001..... ......10 */
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16.decode:116 */
|
|
decode_insn16_extract_c_ldsp(ctx, &u.f_i, insn);
|
|
if (trans_fld(ctx, &u.f_i)) return true;
|
|
return false;
|
|
case 0x00004000:
|
|
/* 010..... ......00 */
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16.decode:91 */
|
|
decode_insn16_extract_cl_w(ctx, &u.f_i, insn);
|
|
if (trans_lw(ctx, &u.f_i)) return true;
|
|
return false;
|
|
case 0x00004001:
|
|
/* 010..... ......01 */
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16.decode:97 */
|
|
decode_insn16_extract_c_li(ctx, &u.f_i, insn);
|
|
if (trans_addi(ctx, &u.f_i)) return true;
|
|
return false;
|
|
case 0x00004002:
|
|
/* 010..... ......10 */
|
|
if ((insn & 0x00000f80) == 0x00000000) {
|
|
/* 010.0000 0.....10 */
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16.decode:118 */
|
|
decode_insn16_extract_decode_insn16_Fmt_22(ctx, &u.f_empty, insn);
|
|
if (trans_illegal(ctx, &u.f_empty)) return true;
|
|
}
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16.decode:119 */
|
|
decode_insn16_extract_c_lwsp(ctx, &u.f_i, insn);
|
|
if (trans_lw(ctx, &u.f_i)) return true;
|
|
return false;
|
|
case 0x00006000:
|
|
/* 011..... ......00 */
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16-32.decode:20 */
|
|
decode_insn16_extract_cl_w(ctx, &u.f_i, insn);
|
|
if (trans_flw(ctx, &u.f_i)) return true;
|
|
return false;
|
|
case 0x00006001:
|
|
/* 011..... ......01 */
|
|
if ((insn & 0x0000107c) == 0x00000000) {
|
|
/* 0110.... .0000001 */
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16.decode:99 */
|
|
decode_insn16_extract_decode_insn16_Fmt_22(ctx, &u.f_empty, insn);
|
|
if (trans_illegal(ctx, &u.f_empty)) return true;
|
|
}
|
|
if ((insn & 0x00000f80) == 0x00000100) {
|
|
/* 011.0001 0.....01 */
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16.decode:100 */
|
|
decode_insn16_extract_c_addi16sp(ctx, &u.f_i, insn);
|
|
if (trans_addi(ctx, &u.f_i)) return true;
|
|
}
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16.decode:101 */
|
|
decode_insn16_extract_c_lui(ctx, &u.f_u, insn);
|
|
if (trans_lui(ctx, &u.f_u)) return true;
|
|
return false;
|
|
case 0x00006002:
|
|
/* 011..... ......10 */
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16-32.decode:27 */
|
|
decode_insn16_extract_c_lwsp(ctx, &u.f_i, insn);
|
|
if (trans_flw(ctx, &u.f_i)) return true;
|
|
return false;
|
|
case 0x00008001:
|
|
/* 100..... ......01 */
|
|
switch ((insn >> 10) & 0x3) {
|
|
case 0x0:
|
|
/* 100.00.. ......01 */
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16.decode:103 */
|
|
decode_insn16_extract_c_shift(ctx, &u.f_shift, insn);
|
|
if (trans_srli(ctx, &u.f_shift)) return true;
|
|
return false;
|
|
case 0x1:
|
|
/* 100.01.. ......01 */
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16.decode:104 */
|
|
decode_insn16_extract_c_shift(ctx, &u.f_shift, insn);
|
|
if (trans_srai(ctx, &u.f_shift)) return true;
|
|
return false;
|
|
case 0x2:
|
|
/* 100.10.. ......01 */
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16.decode:105 */
|
|
decode_insn16_extract_c_andi(ctx, &u.f_i, insn);
|
|
if (trans_andi(ctx, &u.f_i)) return true;
|
|
return false;
|
|
case 0x3:
|
|
/* 100.11.. ......01 */
|
|
decode_insn16_extract_cs_2(ctx, &u.f_r, insn);
|
|
switch (insn & 0x00001060) {
|
|
case 0x00000000:
|
|
/* 100011.. .00...01 */
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16.decode:106 */
|
|
if (trans_sub(ctx, &u.f_r)) return true;
|
|
return false;
|
|
case 0x00000020:
|
|
/* 100011.. .01...01 */
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16.decode:107 */
|
|
if (trans_xor(ctx, &u.f_r)) return true;
|
|
return false;
|
|
case 0x00000040:
|
|
/* 100011.. .10...01 */
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16.decode:108 */
|
|
if (trans_or(ctx, &u.f_r)) return true;
|
|
return false;
|
|
case 0x00000060:
|
|
/* 100011.. .11...01 */
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16.decode:109 */
|
|
if (trans_and(ctx, &u.f_r)) return true;
|
|
return false;
|
|
}
|
|
return false;
|
|
}
|
|
return false;
|
|
case 0x00008002:
|
|
/* 100..... ......10 */
|
|
switch ((insn >> 12) & 0x1) {
|
|
case 0x0:
|
|
/* 1000.... ......10 */
|
|
if ((insn & 0x00000ffc) == 0x00000000) {
|
|
/* 10000000 00000010 */
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16.decode:122 */
|
|
decode_insn16_extract_decode_insn16_Fmt_22(ctx, &u.f_empty, insn);
|
|
if (trans_illegal(ctx, &u.f_empty)) return true;
|
|
}
|
|
if ((insn & 0x0000007c) == 0x00000000) {
|
|
/* 1000.... .0000010 */
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16.decode:123 */
|
|
decode_insn16_extract_c_jalr(ctx, &u.f_i, insn);
|
|
u.f_i.rd = 0;
|
|
if (trans_jalr(ctx, &u.f_i)) return true;
|
|
}
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16.decode:124 */
|
|
decode_insn16_extract_c_mv(ctx, &u.f_i, insn);
|
|
if (trans_addi(ctx, &u.f_i)) return true;
|
|
return false;
|
|
case 0x1:
|
|
/* 1001.... ......10 */
|
|
if ((insn & 0x00000ffc) == 0x00000000) {
|
|
/* 10010000 00000010 */
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16.decode:127 */
|
|
decode_insn16_extract_decode_insn16_Fmt_22(ctx, &u.f_empty, insn);
|
|
if (trans_ebreak(ctx, &u.f_empty)) return true;
|
|
}
|
|
if ((insn & 0x0000007c) == 0x00000000) {
|
|
/* 1001.... .0000010 */
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16.decode:128 */
|
|
decode_insn16_extract_c_jalr(ctx, &u.f_i, insn);
|
|
u.f_i.rd = 1;
|
|
if (trans_jalr(ctx, &u.f_i)) return true;
|
|
}
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16.decode:129 */
|
|
decode_insn16_extract_cr(ctx, &u.f_r, insn);
|
|
if (trans_add(ctx, &u.f_r)) return true;
|
|
return false;
|
|
}
|
|
return false;
|
|
case 0x0000a000:
|
|
/* 101..... ......00 */
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16.decode:92 */
|
|
decode_insn16_extract_cs_d(ctx, &u.f_s, insn);
|
|
if (trans_fsd(ctx, &u.f_s)) return true;
|
|
return false;
|
|
case 0x0000a001:
|
|
/* 101..... ......01 */
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16.decode:110 */
|
|
decode_insn16_extract_cj(ctx, &u.f_j, insn);
|
|
u.f_j.rd = 0;
|
|
if (trans_jal(ctx, &u.f_j)) return true;
|
|
return false;
|
|
case 0x0000a002:
|
|
/* 101..... ......10 */
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16.decode:131 */
|
|
decode_insn16_extract_c_sdsp(ctx, &u.f_s, insn);
|
|
if (trans_fsd(ctx, &u.f_s)) return true;
|
|
return false;
|
|
case 0x0000c000:
|
|
/* 110..... ......00 */
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16.decode:93 */
|
|
decode_insn16_extract_cs_w(ctx, &u.f_s, insn);
|
|
if (trans_sw(ctx, &u.f_s)) return true;
|
|
return false;
|
|
case 0x0000c001:
|
|
/* 110..... ......01 */
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16.decode:111 */
|
|
decode_insn16_extract_cb_z(ctx, &u.f_b, insn);
|
|
if (trans_beq(ctx, &u.f_b)) return true;
|
|
return false;
|
|
case 0x0000c002:
|
|
/* 110..... ......10 */
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16.decode:132 */
|
|
decode_insn16_extract_c_swsp(ctx, &u.f_s, insn);
|
|
if (trans_sw(ctx, &u.f_s)) return true;
|
|
return false;
|
|
case 0x0000e000:
|
|
/* 111..... ......00 */
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16-32.decode:21 */
|
|
decode_insn16_extract_cs_w(ctx, &u.f_s, insn);
|
|
if (trans_fsw(ctx, &u.f_s)) return true;
|
|
return false;
|
|
case 0x0000e001:
|
|
/* 111..... ......01 */
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16.decode:112 */
|
|
decode_insn16_extract_cb_z(ctx, &u.f_b, insn);
|
|
if (trans_bne(ctx, &u.f_b)) return true;
|
|
return false;
|
|
case 0x0000e002:
|
|
/* 111..... ......10 */
|
|
/* /home/me/projects/unicorn2/qemu-5.0.0-build/target/riscv/insn16-32.decode:28 */
|
|
decode_insn16_extract_c_swsp(ctx, &u.f_s, insn);
|
|
if (trans_fsw(ctx, &u.f_s)) return true;
|
|
return false;
|
|
}
|
|
return false;
|
|
}
|