/* libs/pixelflinger/codeflinger/MIPSAssembler.h
**
** Copyright 2012, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
**     http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/

#ifndef ANDROID_MIPSASSEMBLER_H
#define ANDROID_MIPSASSEMBLER_H

#include <stdint.h>
#include <sys/types.h>

#include "tinyutils/smartpointer.h"
#include "utils/KeyedVector.h"
#include "utils/Vector.h"

#include "ARMAssemblerInterface.h"
#include "CodeCache.h"

namespace android {

class MIPSAssembler;    // forward reference

// this class mimics ARMAssembler interface
//  intent is to translate each ARM instruction to 1 or more MIPS instr
//  implementation calls MIPSAssembler class to generate mips code
class ArmToMipsAssembler : public ARMAssemblerInterface
{
public:
                ArmToMipsAssembler(const sp<Assembly>& assembly,
                        char *abuf = 0, int linesz = 0, int instr_count = 0);
    virtual     ~ArmToMipsAssembler();

    uint32_t*   base() const;
    uint32_t*   pc() const;
    void        disassemble(const char* name);

    virtual void    reset();

    virtual int     generate(const char* name);
    virtual int     getCodegenArch();

    virtual void    prolog();
    virtual void    epilog(uint32_t touched);
    virtual void    comment(const char* string);


    // -----------------------------------------------------------------------
    // shifters and addressing modes
    // -----------------------------------------------------------------------

    // shifters...
    virtual bool        isValidImmediate(uint32_t immed);
    virtual int         buildImmediate(uint32_t i, uint32_t& rot, uint32_t& imm);

    virtual uint32_t    imm(uint32_t immediate);
    virtual uint32_t    reg_imm(int Rm, int type, uint32_t shift);
    virtual uint32_t    reg_rrx(int Rm);
    virtual uint32_t    reg_reg(int Rm, int type, int Rs);

    // addressing modes...
    // LDR(B)/STR(B)/PLD
    // (immediate and Rm can be negative, which indicates U=0)
    virtual uint32_t    immed12_pre(int32_t immed12, int W=0);
    virtual uint32_t    immed12_post(int32_t immed12);
    virtual uint32_t    reg_scale_pre(int Rm, int type=0, uint32_t shift=0, int W=0);
    virtual uint32_t    reg_scale_post(int Rm, int type=0, uint32_t shift=0);

    // LDRH/LDRSB/LDRSH/STRH
    // (immediate and Rm can be negative, which indicates U=0)
    virtual uint32_t    immed8_pre(int32_t immed8, int W=0);
    virtual uint32_t    immed8_post(int32_t immed8);
    virtual uint32_t    reg_pre(int Rm, int W=0);
    virtual uint32_t    reg_post(int Rm);




    virtual void    dataProcessing(int opcode, int cc, int s,
                                int Rd, int Rn,
                                uint32_t Op2);
    virtual void MLA(int cc, int s,
                int Rd, int Rm, int Rs, int Rn);
    virtual void MUL(int cc, int s,
                int Rd, int Rm, int Rs);
    virtual void UMULL(int cc, int s,
                int RdLo, int RdHi, int Rm, int Rs);
    virtual void UMUAL(int cc, int s,
                int RdLo, int RdHi, int Rm, int Rs);
    virtual void SMULL(int cc, int s,
                int RdLo, int RdHi, int Rm, int Rs);
    virtual void SMUAL(int cc, int s,
                int RdLo, int RdHi, int Rm, int Rs);

    virtual void B(int cc, uint32_t* pc);
    virtual void BL(int cc, uint32_t* pc);
    virtual void BX(int cc, int Rn);
    virtual void label(const char* theLabel);
    virtual void B(int cc, const char* label);
    virtual void BL(int cc, const char* label);

    virtual uint32_t* pcForLabel(const char* label);

    virtual void LDR (int cc, int Rd,
                int Rn, uint32_t offset = 0);
    virtual void LDRB(int cc, int Rd,
                int Rn, uint32_t offset = 0);
    virtual void STR (int cc, int Rd,
                int Rn, uint32_t offset = 0);
    virtual void STRB(int cc, int Rd,
                int Rn, uint32_t offset = 0);
    virtual void LDRH (int cc, int Rd,
                int Rn, uint32_t offset = 0);
    virtual void LDRSB(int cc, int Rd,
                int Rn, uint32_t offset = 0);
    virtual void LDRSH(int cc, int Rd,
                int Rn, uint32_t offset = 0);
    virtual void STRH (int cc, int Rd,
                int Rn, uint32_t offset = 0);

    virtual void LDM(int cc, int dir,
                int Rn, int W, uint32_t reg_list);
    virtual void STM(int cc, int dir,
                int Rn, int W, uint32_t reg_list);

    virtual void SWP(int cc, int Rn, int Rd, int Rm);
    virtual void SWPB(int cc, int Rn, int Rd, int Rm);
    virtual void SWI(int cc, uint32_t comment);

    virtual void PLD(int Rn, uint32_t offset);
    virtual void CLZ(int cc, int Rd, int Rm);
    virtual void QADD(int cc, int Rd, int Rm, int Rn);
    virtual void QDADD(int cc, int Rd, int Rm, int Rn);
    virtual void QSUB(int cc, int Rd, int Rm, int Rn);
    virtual void QDSUB(int cc, int Rd, int Rm, int Rn);
    virtual void SMUL(int cc, int xy,
                int Rd, int Rm, int Rs);
    virtual void SMULW(int cc, int y,
                int Rd, int Rm, int Rs);
    virtual void SMLA(int cc, int xy,
                int Rd, int Rm, int Rs, int Rn);
    virtual void SMLAL(int cc, int xy,
                int RdHi, int RdLo, int Rs, int Rm);
    virtual void SMLAW(int cc, int y,
                int Rd, int Rm, int Rs, int Rn);

    // byte/half word extract...
    virtual void UXTB16(int cc, int Rd, int Rm, int rotate);

    // bit manipulation...
    virtual void UBFX(int cc, int Rd, int Rn, int lsb, int width);

    // this is some crap to share is MIPSAssembler class for debug
    char *      mArmDisassemblyBuffer;
    int         mArmLineLength;
    int         mArmInstrCount;

    int         mInum;      // current arm instuction number (0..n)
    uint32_t**  mArmPC;     // array: PC for 1st mips instr of
                            //      each translated ARM instr


private:
    ArmToMipsAssembler(const ArmToMipsAssembler& rhs);
    ArmToMipsAssembler& operator = (const ArmToMipsAssembler& rhs);

    void init_conditional_labels(void);

    void protectConditionalOperands(int Rd);

    // reg__tmp set to MIPS AT, reg 1
    int dataProcAdrModes(int op, int& source, bool sign = false, int reg_tmp = 1);

    sp<Assembly>        mAssembly;
    MIPSAssembler*      mMips;


    enum misc_constants_t {
        ARM_MAX_INSTUCTIONS = 512  // based on ASSEMBLY_SCRATCH_SIZE
    };

    enum {
        SRC_REG = 0,
        SRC_IMM,
        SRC_ERROR = -1
    };

    enum addr_modes {
        // start above the range of legal mips reg #'s (0-31)
        AMODE_REG = 0x20,
        AMODE_IMM, AMODE_REG_IMM,               // for data processing
        AMODE_IMM_12_PRE, AMODE_IMM_12_POST,    // for load/store
        AMODE_REG_SCALE_PRE, AMODE_IMM_8_PRE,
        AMODE_IMM_8_POST, AMODE_REG_PRE,
        AMODE_UNSUPPORTED
    };

    struct addr_mode_t {    // address modes for current ARM instruction
        int         reg;
        int         stype;
        uint32_t    value;
        bool        writeback;  // writeback the adr reg after modification
    } amode;

    enum cond_types {
        CMP_COND = 1,
        SBIT_COND
    };

    struct cond_mode_t {    // conditional-execution info for current ARM instruction
        cond_types  type;
        int         r1;
        int         r2;
        int         labelnum;
        char        label[100][10];
    } cond;

};




// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------

// This is the basic MIPS assembler, which just creates the opcodes in memory.
// All the more complicated work is done in ArmToMipsAssember above.

class MIPSAssembler
{
public:
                MIPSAssembler(const sp<Assembly>& assembly, ArmToMipsAssembler *parent);
    virtual     ~MIPSAssembler();

    virtual uint32_t*   base() const;
    virtual uint32_t*   pc() const;
    virtual void        reset();

    virtual void        disassemble(const char* name);

    virtual void        prolog();
    virtual void        epilog(uint32_t touched);
    virtual int         generate(const char* name);
    virtual void        comment(const char* string);
    virtual void        label(const char* string);

    // valid only after generate() has been called
    virtual uint32_t*   pcForLabel(const char* label);


    // ------------------------------------------------------------------------
    // MIPSAssemblerInterface...
    // ------------------------------------------------------------------------

#if 0
#pragma mark -
#pragma mark Arithmetic...
#endif

    void ADDU(int Rd, int Rs, int Rt);
    void ADDIU(int Rt, int Rs, int16_t imm);
    void SUBU(int Rd, int Rs, int Rt);
    void SUBIU(int Rt, int Rs, int16_t imm);
    void NEGU(int Rd, int Rs);
    void MUL(int Rd, int Rs, int Rt);
    void MULT(int Rs, int Rt);      // dest is hi,lo
    void MULTU(int Rs, int Rt);     // dest is hi,lo
    void MADD(int Rs, int Rt);      // hi,lo = hi,lo + Rs * Rt
    void MADDU(int Rs, int Rt);     // hi,lo = hi,lo + Rs * Rt
    void MSUB(int Rs, int Rt);      // hi,lo = hi,lo - Rs * Rt
    void MSUBU(int Rs, int Rt);     // hi,lo = hi,lo - Rs * Rt
    void SEB(int Rd, int Rt);       // sign-extend byte (mips32r2)
    void SEH(int Rd, int Rt);       // sign-extend half-word (mips32r2)


#if 0
#pragma mark -
#pragma mark Comparisons...
#endif

    void SLT(int Rd, int Rs, int Rt);
    void SLTI(int Rt, int Rs, int16_t imm);
    void SLTU(int Rd, int Rs, int Rt);
    void SLTIU(int Rt, int Rs, int16_t imm);


#if 0
#pragma mark -
#pragma mark Logical...
#endif

    void AND(int Rd, int Rs, int Rt);
    void ANDI(int Rd, int Rs, uint16_t imm);
    void OR(int Rd, int Rs, int Rt);
    void ORI(int Rt, int Rs, uint16_t imm);
    void NOR(int Rd, int Rs, int Rt);
    void NOT(int Rd, int Rs);
    void XOR(int Rd, int Rs, int Rt);
    void XORI(int Rt, int Rs, uint16_t imm);

    void SLL(int Rd, int Rt, int shft);
    void SLLV(int Rd, int Rt, int Rs);
    void SRL(int Rd, int Rt, int shft);
    void SRLV(int Rd, int Rt, int Rs);
    void SRA(int Rd, int Rt, int shft);
    void SRAV(int Rd, int Rt, int Rs);
    void ROTR(int Rd, int Rt, int shft);    // mips32r2
    void ROTRV(int Rd, int Rt, int Rs);     // mips32r2
    void RORsyn(int Rd, int Rs, int Rt);    // synthetic: d = s rotated by t
    void RORIsyn(int Rd, int Rt, int rot);  // synthetic: d = s rotated by immed

    void CLO(int Rd, int Rs);
    void CLZ(int Rd, int Rs);
    void WSBH(int Rd, int Rt);


#if 0
#pragma mark -
#pragma mark Load/store...
#endif

    void LW(int Rt, int Rbase, int16_t offset);
    void SW(int Rt, int Rbase, int16_t offset);
    void LB(int Rt, int Rbase, int16_t offset);
    void LBU(int Rt, int Rbase, int16_t offset);
    void SB(int Rt, int Rbase, int16_t offset);
    void LH(int Rt, int Rbase, int16_t offset);
    void LHU(int Rt, int Rbase, int16_t offset);
    void SH(int Rt, int Rbase, int16_t offset);
    void LUI(int Rt, int16_t offset);

#if 0
#pragma mark -
#pragma mark Register moves...
#endif

    void MOVE(int Rd, int Rs);
    void MOVN(int Rd, int Rs, int Rt);
    void MOVZ(int Rd, int Rs, int Rt);
    void MFHI(int Rd);
    void MFLO(int Rd);
    void MTHI(int Rs);
    void MTLO(int Rs);

#if 0
#pragma mark -
#pragma mark Branch...
#endif

    void B(const char* label);
    void BEQ(int Rs, int Rt, const char* label);
    void BNE(int Rs, int Rt, const char* label);
    void BGEZ(int Rs, const char* label);
    void BGTZ(int Rs, const char* label);
    void BLEZ(int Rs, const char* label);
    void BLTZ(int Rs, const char* label);
    void JR(int Rs);


#if 0
#pragma mark -
#pragma mark Synthesized Branch...
#endif

    // synthetic variants of above (using slt & friends)
    void BEQZ(int Rs, const char* label);
    void BNEZ(int Rs, const char* label);
    void BGE(int Rs, int Rt, const char* label);
    void BGEU(int Rs, int Rt, const char* label);
    void BGT(int Rs, int Rt, const char* label);
    void BGTU(int Rs, int Rt, const char* label);
    void BLE(int Rs, int Rt, const char* label);
    void BLEU(int Rs, int Rt, const char* label);
    void BLT(int Rs, int Rt, const char* label);
    void BLTU(int Rs, int Rt, const char* label);

#if 0
#pragma mark -
#pragma mark Misc...
#endif

    void NOP(void);
    void NOP2(void);
    void UNIMPL(void);





protected:
    virtual void string_detab(char *s);
    virtual void string_pad(char *s, int padded_len);

    ArmToMipsAssembler *mParent;
    sp<Assembly>    mAssembly;
    uint32_t*       mBase;
    uint32_t*       mPC;
    uint32_t*       mPrologPC;
    int64_t         mDuration;
#if defined(WITH_LIB_HARDWARE)
    bool            mQemuTracing;
#endif

    struct branch_target_t {
        inline branch_target_t() : label(0), pc(0) { }
        inline branch_target_t(const char* l, uint32_t* p)
            : label(l), pc(p) { }
        const char* label;
        uint32_t*   pc;
    };

    Vector<branch_target_t>                 mBranchTargets;
    KeyedVector< const char*, uint32_t* >   mLabels;
    KeyedVector< uint32_t*, const char* >   mLabelsInverseMapping;
    KeyedVector< uint32_t*, const char* >   mComments;




    // opcode field of all instructions
    enum opcode_field {
        spec_op, regimm_op, j_op, jal_op,           // 00
        beq_op, bne_op, blez_op, bgtz_op,
        addi_op, addiu_op, slti_op, sltiu_op,       // 08
        andi_op, ori_op, xori_op, lui_op,
        cop0_op, cop1_op, cop2_op, cop1x_op,        // 10
        beql_op, bnel_op, blezl_op, bgtzl_op,
        daddi_op, daddiu_op, ldl_op, ldr_op,        // 18
        spec2_op, jalx_op, mdmx_op, spec3_op,
        lb_op, lh_op, lwl_op, lw_op,                // 20
        lbu_op, lhu_op, lwr_op, lwu_op,
        sb_op, sh_op, swl_op, sw_op,                // 28
        sdl_op, sdr_op, swr_op, cache_op,
        ll_op, lwc1_op, lwc2_op, pref_op,           // 30
        lld_op, ldc1_op, ldc2_op, ld_op,
        sc_op, swc1_op, swc2_op, rsrv_3b_op,        // 38
        scd_op, sdc1_op, sdc2_op, sd_op
    };


    // func field for special opcode
    enum func_spec_op {
        sll_fn, movc_fn, srl_fn, sra_fn,            // 00
        sllv_fn, pmon_fn, srlv_fn, srav_fn,
        jr_fn, jalr_fn, movz_fn, movn_fn,           // 08
        syscall_fn, break_fn, spim_fn, sync_fn,
        mfhi_fn, mthi_fn, mflo_fn, mtlo_fn,         // 10
        dsllv_fn, rsrv_spec_2, dsrlv_fn, dsrav_fn,
        mult_fn, multu_fn, div_fn, divu_fn,         // 18
        dmult_fn, dmultu_fn, ddiv_fn, ddivu_fn,
        add_fn, addu_fn, sub_fn, subu_fn,           // 20
        and_fn, or_fn, xor_fn, nor_fn,
        rsrv_spec_3, rsrv_spec_4, slt_fn, sltu_fn,  // 28
        dadd_fn, daddu_fn, dsub_fn, dsubu_fn,
        tge_fn, tgeu_fn, tlt_fn, tltu_fn,           // 30
        teq_fn, rsrv_spec_5, tne_fn, rsrv_spec_6,
        dsll_fn, rsrv_spec_7, dsrl_fn, dsra_fn,     // 38
        dsll32_fn, rsrv_spec_8, dsrl32_fn, dsra32_fn
    };

    // func field for spec2 opcode
    enum func_spec2_op {
        madd_fn, maddu_fn, mul_fn, rsrv_spec2_3,
        msub_fn, msubu_fn,
        clz_fn = 0x20, clo_fn,
        dclz_fn = 0x24, dclo_fn,
        sdbbp_fn = 0x3f
    };

    // func field for spec3 opcode
    enum func_spec3_op {
        ext_fn, dextm_fn, dextu_fn, dext_fn,
        ins_fn, dinsm_fn, dinsu_fn, dins_fn,
        bshfl_fn = 0x20,
        dbshfl_fn = 0x24,
        rdhwr_fn = 0x3b
    };

    // sa field for spec3 opcodes, with BSHFL function
    enum func_spec3_bshfl {
        wsbh_fn = 0x02,
        seb_fn = 0x10,
        seh_fn = 0x18
    };

    // rt field of regimm opcodes.
    enum regimm_fn {
        bltz_fn, bgez_fn, bltzl_fn, bgezl_fn,
        rsrv_ri_fn4, rsrv_ri_fn5, rsrv_ri_fn6, rsrv_ri_fn7,
        tgei_fn, tgeiu_fn, tlti_fn, tltiu_fn,
        teqi_fn, rsrv_ri_fn_0d, tnei_fn, rsrv_ri_fn0f,
        bltzal_fn, bgezal_fn, bltzall_fn, bgezall_fn,
        bposge32_fn= 0x1c,
        synci_fn = 0x1f
    };


    // func field for mad opcodes (MIPS IV).
    enum mad_func {
        madd_fp_op      = 0x08, msub_fp_op      = 0x0a,
        nmadd_fp_op     = 0x0c, nmsub_fp_op     = 0x0e
    };


    enum mips_inst_shifts {
        OP_SHF       = 26,
        JTARGET_SHF  = 0,
        RS_SHF       = 21,
        RT_SHF       = 16,
        RD_SHF       = 11,
        RE_SHF       = 6,
        SA_SHF       = RE_SHF,  // synonym
        IMM_SHF      = 0,
        FUNC_SHF     = 0,

        // mask values
        MSK_16       = 0xffff,


        CACHEOP_SHF  = 18,
        CACHESEL_SHF = 16,
    };
};

enum mips_regnames {
    R_zero = 0,
            R_at,   R_v0,   R_v1,   R_a0,   R_a1,   R_a2,   R_a3,
#if __mips_isa_rev < 6
    R_t0,   R_t1,   R_t2,   R_t3,   R_t4,   R_t5,   R_t6,   R_t7,
#else
    R_a4,   R_a5,   R_a6,   R_a7,   R_t0,   R_t1,   R_t2,   R_t3,
#endif
    R_s0,   R_s1,   R_s2,   R_s3,   R_s4,   R_s5,   R_s6,   R_s7,
    R_t8,   R_t9,   R_k0,   R_k1,   R_gp,   R_sp,   R_s8,   R_ra,
    R_lr = R_s8,

    // arm regs 0-15 are mips regs 2-17 (meaning s0 & s1 are used)
    R_at2  = R_s2,    // R_at2 = 18 = s2
    R_cmp  = R_s3,    // R_cmp = 19 = s3
    R_cmp2 = R_s4     // R_cmp2 = 20 = s4
};



}; // namespace android

#endif //ANDROID_MIPSASSEMBLER_H
