static void gen_flt3_ldst (DisasContext *ctx, uint32_t opc, int fd,

                           int fs, int base, int index)

{

    const char *opn = "extended float load/store";

    int store = 0;



    /* All of those work only on 64bit FPUs. */

    gen_op_cp1_64bitmode();

    if (base == 0) {

        if (index == 0)

            gen_op_reset_T0();

        else

            GEN_LOAD_REG_TN(T0, index);

    } else if (index == 0) {

        GEN_LOAD_REG_TN(T0, base);

    } else {

        GEN_LOAD_REG_TN(T0, base);

        GEN_LOAD_REG_TN(T1, index);

        gen_op_addr_add();

    }

    /* Don't do NOP if destination is zero: we must perform the actual

     * memory access

     */

    switch (opc) {

    case OPC_LWXC1:

        op_ldst(lwc1);

        GEN_STORE_FTN_FREG(fd, WT0);

        opn = "lwxc1";

        break;

    case OPC_LDXC1:

        op_ldst(ldc1);

        GEN_STORE_FTN_FREG(fd, DT0);

        opn = "ldxc1";

        break;

    case OPC_LUXC1:

        op_ldst(luxc1);

        GEN_STORE_FTN_FREG(fd, DT0);

        opn = "luxc1";

        break;

    case OPC_SWXC1:

        GEN_LOAD_FREG_FTN(WT0, fs);

        op_ldst(swc1);

        opn = "swxc1";

        store = 1;

        break;

    case OPC_SDXC1:

        GEN_LOAD_FREG_FTN(DT0, fs);

        op_ldst(sdc1);

        opn = "sdxc1";

        store = 1;

        break;

    case OPC_SUXC1:

        GEN_LOAD_FREG_FTN(DT0, fs);

        op_ldst(suxc1);

        opn = "suxc1";

        store = 1;

        break;

    default:

        MIPS_INVAL(opn);

        generate_exception(ctx, EXCP_RI);

        return;

    }

    MIPS_DEBUG("%s %s, %s(%s)", opn, fregnames[store ? fs : fd],

               regnames[index], regnames[base]);

}

static void gen_flt3_ldst (DisasContext *ctx, uint32_t opc, int fd,

                           int fs, int base, int index)

{

    const char *opn = "extended float load/store";

    int store = 0;



    

    gen_op_cp1_64bitmode();

    if (base == 0) {

        if (index == 0)

            gen_op_reset_T0();

        else

            GEN_LOAD_REG_TN(T0, index);

    } else if (index == 0) {

        GEN_LOAD_REG_TN(T0, base);

    } else {

        GEN_LOAD_REG_TN(T0, base);

        GEN_LOAD_REG_TN(T1, index);

        gen_op_addr_add();

    }

    





    switch (opc) {

    case OPC_LWXC1:

        op_ldst(lwc1);

        GEN_STORE_FTN_FREG(fd, WT0);

        opn = "lwxc1";

        break;

    case OPC_LDXC1:

        op_ldst(ldc1);

        GEN_STORE_FTN_FREG(fd, DT0);

        opn = "ldxc1";

        break;

    case OPC_LUXC1:

        op_ldst(luxc1);

        GEN_STORE_FTN_FREG(fd, DT0);

        opn = "luxc1";

        break;

    case OPC_SWXC1:

        GEN_LOAD_FREG_FTN(WT0, fs);

        op_ldst(swc1);

        opn = "swxc1";

        store = 1;

        break;

    case OPC_SDXC1:

        GEN_LOAD_FREG_FTN(DT0, fs);

        op_ldst(sdc1);

        opn = "sdxc1";

        store = 1;

        break;

    case OPC_SUXC1:

        GEN_LOAD_FREG_FTN(DT0, fs);

        op_ldst(suxc1);

        opn = "suxc1";

        store = 1;

        break;

    default:

        MIPS_INVAL(opn);

        generate_exception(ctx, EXCP_RI);

        return;

    }

    MIPS_DEBUG("%s %s, %s(%s)", opn, fregnames[store ? fs : fd],

               regnames[index], regnames[base]);

}

static void FUNC_0 (DisasContext *VAR_0, uint32_t VAR_1, int VAR_2,

                           int VAR_3, int VAR_4, int VAR_5)

{

    const char *VAR_6 = "extended float load/VAR_7";

    int VAR_7 = 0;



    

    gen_op_cp1_64bitmode();

    if (VAR_4 == 0) {

        if (VAR_5 == 0)

            gen_op_reset_T0();

        else

            GEN_LOAD_REG_TN(T0, VAR_5);

    } else if (VAR_5 == 0) {

        GEN_LOAD_REG_TN(T0, VAR_4);

    } else {

        GEN_LOAD_REG_TN(T0, VAR_4);

        GEN_LOAD_REG_TN(T1, VAR_5);

        gen_op_addr_add();

    }

    





    switch (VAR_1) {

    case OPC_LWXC1:

        op_ldst(lwc1);

        GEN_STORE_FTN_FREG(VAR_2, WT0);

        VAR_6 = "lwxc1";

        break;

    case OPC_LDXC1:

        op_ldst(ldc1);

        GEN_STORE_FTN_FREG(VAR_2, DT0);

        VAR_6 = "ldxc1";

        break;

    case OPC_LUXC1:

        op_ldst(luxc1);

        GEN_STORE_FTN_FREG(VAR_2, DT0);

        VAR_6 = "luxc1";

        break;

    case OPC_SWXC1:

        GEN_LOAD_FREG_FTN(WT0, VAR_3);

        op_ldst(swc1);

        VAR_6 = "swxc1";

        VAR_7 = 1;

        break;

    case OPC_SDXC1:

        GEN_LOAD_FREG_FTN(DT0, VAR_3);

        op_ldst(sdc1);

        VAR_6 = "sdxc1";

        VAR_7 = 1;

        break;

    case OPC_SUXC1:

        GEN_LOAD_FREG_FTN(DT0, VAR_3);

        op_ldst(suxc1);

        VAR_6 = "suxc1";

        VAR_7 = 1;

        break;

    default:

        MIPS_INVAL(VAR_6);

        generate_exception(VAR_0, EXCP_RI);

        return;

    }

    MIPS_DEBUG("%s %s, %s(%s)", VAR_6, fregnames[VAR_7 ? VAR_3 : VAR_2],

               regnames[VAR_5], regnames[VAR_4]);

}

static void FUNC_0 (DisasContext *VAR_0, uint32_t VAR_1, int VAR_2,
int VAR_3, int VAR_4, int VAR_5)
{ const char *VAR_6 = "extended float load/VAR_7"; int VAR_7 = 0; gen_op_cp1_64bitmode(); if (VAR_4 == 0) { if (VAR_5 == 0)
gen_op_reset_T0(); else
GEN_LOAD_REG_TN(T0, VAR_5); } else if (VAR_5 == 0) { GEN_LOAD_REG_TN(T0, VAR_4); } else { GEN_LOAD_REG_TN(T0, VAR_4); GEN_LOAD_REG_TN(T1, VAR_5); gen_op_addr_add(); } switch (VAR_1) { case OPC_LWXC1:
op_ldst(lwc1); GEN_STORE_FTN_FREG(VAR_2, WT0); VAR_6 = "lwxc1"; break; case OPC_LDXC1:
op_ldst(ldc1); GEN_STORE_FTN_FREG(VAR_2, DT0); VAR_6 = "ldxc1"; break; case OPC_LUXC1:
op_ldst(luxc1); GEN_STORE_FTN_FREG(VAR_2, DT0); VAR_6 = "luxc1"; break; case OPC_SWXC1:
GEN_LOAD_FREG_FTN(WT0, VAR_3); op_ldst(swc1); VAR_6 = "swxc1"; VAR_7 = 1; break; case OPC_SDXC1:
GEN_LOAD_FREG_FTN(DT0, VAR_3); op_ldst(sdc1); VAR_6 = "sdxc1"; VAR_7 = 1; break; case OPC_SUXC1:
GEN_LOAD_FREG_FTN(DT0, VAR_3); op_ldst(suxc1); VAR_6 = "suxc1"; VAR_7 = 1; break; default:
MIPS_INVAL(VAR_6); generate_exception(VAR_0, EXCP_RI); return; } MIPS_DEBUG("%s %s, %s(%s)", VAR_6, fregnames[VAR_7 ? VAR_3 : VAR_2],
regnames[VAR_5], regnames[VAR_4]); }