/* This file is autogenerated by scripts/decodetree.py.  */

typedef struct {
    int l;
    int rn;
    int op;
} arg_disas_m_nocp2;

typedef struct {
    int imm;
    int vd;
    int size;
} arg_disas_m_nocp3;

typedef struct {
    int l;
    int reg;
    int rt;
} arg_disas_m_nocp4;

typedef struct {
    int cp;
} arg_nocp;

typedef struct {
    int rn;
    int reg;
    int imm;
    int a;
    int w;
    int p;
} arg_vldr_sysreg;

typedef arg_disas_m_nocp2 arg_VLLDM_VLSTM;
static bool trans_VLLDM_VLSTM(DisasContext *ctx, arg_VLLDM_VLSTM *a);
typedef arg_disas_m_nocp3 arg_VSCCLRM;
static bool trans_VSCCLRM(DisasContext *ctx, arg_VSCCLRM *a);
typedef arg_disas_m_nocp4 arg_VMSR_VMRS;
static bool trans_VMSR_VMRS(DisasContext *ctx, arg_VMSR_VMRS *a);
typedef arg_vldr_sysreg arg_VLDR_sysreg;
static bool trans_VLDR_sysreg(DisasContext *ctx, arg_VLDR_sysreg *a);
typedef arg_vldr_sysreg arg_VSTR_sysreg;
static bool trans_VSTR_sysreg(DisasContext *ctx, arg_VSTR_sysreg *a);
typedef arg_nocp arg_NOCP;
static bool trans_NOCP(DisasContext *ctx, arg_NOCP *a);
typedef arg_nocp arg_NOCP_8_1;
static bool trans_NOCP_8_1(DisasContext *ctx, arg_NOCP_8_1 *a);

static void disas_m_nocp_extract_disas_m_nocp_Fmt_1(DisasContext *ctx, arg_disas_m_nocp2 *a, uint32_t insn)
{
    a->op = extract32(insn, 7, 1);
    a->rn = extract32(insn, 16, 4);
    a->l = extract32(insn, 20, 1);
}

static void disas_m_nocp_extract_disas_m_nocp_Fmt_2(DisasContext *ctx, arg_disas_m_nocp3 *a, uint32_t insn)
{
    a->size = 3;
    a->vd = deposit32(extract32(insn, 12, 4), 4, 28, extract32(insn, 22, 1));
    a->imm = extract32(insn, 1, 7);
}

static void disas_m_nocp_extract_disas_m_nocp_Fmt_3(DisasContext *ctx, arg_disas_m_nocp3 *a, uint32_t insn)
{
    a->size = 2;
    a->vd = deposit32(extract32(insn, 22, 1), 1, 31, extract32(insn, 12, 4));
    a->imm = extract32(insn, 0, 8);
}

static void disas_m_nocp_extract_disas_m_nocp_Fmt_4(DisasContext *ctx, arg_disas_m_nocp4 *a, uint32_t insn)
{
    a->reg = extract32(insn, 16, 4);
    a->l = extract32(insn, 20, 1);
    a->rt = extract32(insn, 12, 4);
}

static void disas_m_nocp_extract_disas_m_nocp_Fmt_5(DisasContext *ctx, arg_nocp *a, uint32_t insn)
{
    a->cp = extract32(insn, 8, 4);
}

static void disas_m_nocp_extract_disas_m_nocp_Fmt_6(DisasContext *ctx, arg_nocp *a, uint32_t insn)
{
    a->cp = 10;
}

static void disas_m_nocp_extract_vldr_sysreg(DisasContext *ctx, arg_vldr_sysreg *a, uint32_t insn)
{
    a->reg = deposit32(extract32(insn, 13, 3), 3, 29, extract32(insn, 22, 1));
    a->a = extract32(insn, 23, 1);
    a->rn = extract32(insn, 16, 4);
    a->imm = times_4(ctx, extract32(insn, 0, 7));
}

bool disas_m_nocp(DisasContext *ctx, uint32_t insn)
{
    union {
        arg_disas_m_nocp2 f_disas_m_nocp2;
        arg_disas_m_nocp3 f_disas_m_nocp3;
        arg_disas_m_nocp4 f_disas_m_nocp4;
        arg_nocp f_nocp;
        arg_vldr_sysreg f_vldr_sysreg;
    } u;

    switch ((insn >> 26) & 0x3) {
    case 0x3:
        /* ....11.. ........ ........ ........ */
        if ((insn & 0xf3e0ff7fu) == 0xe0200a00u) {
            /* 11101100 001..... 00001010 .0000000 */
            /* ../git/target/arm/tcg/m-nocp.decode:47 */
            disas_m_nocp_extract_disas_m_nocp_Fmt_1(ctx, &u.f_disas_m_nocp2, insn);
            if (trans_VLLDM_VLSTM(ctx, &u.f_disas_m_nocp2)) return true;
        }
        if ((insn & 0xf3bf0f01u) == 0xe09f0b00u) {
            /* 11101100 1.011111 ....1011 .......0 */
            /* ../git/target/arm/tcg/m-nocp.decode:49 */
            disas_m_nocp_extract_disas_m_nocp_Fmt_2(ctx, &u.f_disas_m_nocp3, insn);
            if (trans_VSCCLRM(ctx, &u.f_disas_m_nocp3)) return true;
        }
        if ((insn & 0xf3bf0f00u) == 0xe09f0a00u) {
            /* 11101100 1.011111 ....1010 ........ */
            /* ../git/target/arm/tcg/m-nocp.decode:50 */
            disas_m_nocp_extract_disas_m_nocp_Fmt_3(ctx, &u.f_disas_m_nocp3, insn);
            if (trans_VSCCLRM(ctx, &u.f_disas_m_nocp3)) return true;
        }
        if ((insn & 0x03e00fff) == 0x02e00a10) {
            /* ....1110 111..... ....1010 00010000 */
            /* ../git/target/arm/tcg/m-nocp.decode:60 */
            disas_m_nocp_extract_disas_m_nocp_Fmt_4(ctx, &u.f_disas_m_nocp4, insn);
            if (trans_VMSR_VMRS(ctx, &u.f_disas_m_nocp4)) return true;
        }
        if ((insn & 0x03101f80) == 0x01100f80) {
            /* ....1101 ...1.... ...01111 1....... */
            /* ../git/target/arm/tcg/m-nocp.decode:63 */
            disas_m_nocp_extract_vldr_sysreg(ctx, &u.f_vldr_sysreg, insn);
            u.f_vldr_sysreg.p = 1;
            u.f_vldr_sysreg.w = extract32(insn, 21, 1);
            if (trans_VLDR_sysreg(ctx, &u.f_vldr_sysreg)) return true;
        }
        if ((insn & 0x03301f80) == 0x00300f80) {
            /* ....1100 ..11.... ...01111 1....... */
            /* ../git/target/arm/tcg/m-nocp.decode:64 */
            disas_m_nocp_extract_vldr_sysreg(ctx, &u.f_vldr_sysreg, insn);
            u.f_vldr_sysreg.p = 0;
            u.f_vldr_sysreg.w = 1;
            if (trans_VLDR_sysreg(ctx, &u.f_vldr_sysreg)) return true;
        }
        if ((insn & 0x03101f80) == 0x01000f80) {
            /* ....1101 ...0.... ...01111 1....... */
            /* ../git/target/arm/tcg/m-nocp.decode:65 */
            disas_m_nocp_extract_vldr_sysreg(ctx, &u.f_vldr_sysreg, insn);
            u.f_vldr_sysreg.p = 1;
            u.f_vldr_sysreg.w = extract32(insn, 21, 1);
            if (trans_VSTR_sysreg(ctx, &u.f_vldr_sysreg)) return true;
        }
        if ((insn & 0x03301f80) == 0x00200f80) {
            /* ....1100 ..10.... ...01111 1....... */
            /* ../git/target/arm/tcg/m-nocp.decode:66 */
            disas_m_nocp_extract_vldr_sysreg(ctx, &u.f_vldr_sysreg, insn);
            u.f_vldr_sysreg.p = 0;
            u.f_vldr_sysreg.w = 1;
            if (trans_VSTR_sysreg(ctx, &u.f_vldr_sysreg)) return true;
        }
        if ((insn & 0xe3000000u) == 0xe2000000u) {
            /* 111.1110 ........ ........ ........ */
            /* ../git/target/arm/tcg/m-nocp.decode:68 */
            disas_m_nocp_extract_disas_m_nocp_Fmt_5(ctx, &u.f_nocp, insn);
            if (trans_NOCP(ctx, &u.f_nocp)) return true;
        }
        if ((insn & 0xe2000000u) == 0xe0000000u) {
            /* 111.110. ........ ........ ........ */
            /* ../git/target/arm/tcg/m-nocp.decode:69 */
            disas_m_nocp_extract_disas_m_nocp_Fmt_5(ctx, &u.f_nocp, insn);
            if (trans_NOCP(ctx, &u.f_nocp)) return true;
        }
        if ((insn & 0xe3000000u) == 0xe3000000u) {
            /* 111.1111 ........ ........ ........ */
            /* ../git/target/arm/tcg/m-nocp.decode:71 */
            disas_m_nocp_extract_disas_m_nocp_Fmt_6(ctx, &u.f_nocp, insn);
            if (trans_NOCP_8_1(ctx, &u.f_nocp)) return true;
        }
        break;
    }
    return false;
}
