⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 x86assembler.h

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 H
📖 第 1 页 / 共 4 页
字号:
            m_formatter.immediate8(imm);        } else {            m_formatter.oneByteOp(OP_GROUP1_EvIz, GROUP1_OP_SUB, dst);            m_formatter.immediate32(imm);        }    }        void subl_im(int imm, int offset, RegisterID base)    {        if (CAN_SIGN_EXTEND_8_32(imm)) {            m_formatter.oneByteOp(OP_GROUP1_EvIb, GROUP1_OP_SUB, base, offset);            m_formatter.immediate8(imm);        } else {            m_formatter.oneByteOp(OP_GROUP1_EvIz, GROUP1_OP_SUB, base, offset);            m_formatter.immediate32(imm);        }    }#if PLATFORM(X86_64)    void subq_rr(RegisterID src, RegisterID dst)    {        m_formatter.oneByteOp64(OP_SUB_EvGv, src, dst);    }    void subq_ir(int imm, RegisterID dst)    {        if (CAN_SIGN_EXTEND_8_32(imm)) {            m_formatter.oneByteOp64(OP_GROUP1_EvIb, GROUP1_OP_SUB, dst);            m_formatter.immediate8(imm);        } else {            m_formatter.oneByteOp64(OP_GROUP1_EvIz, GROUP1_OP_SUB, dst);            m_formatter.immediate32(imm);        }    }#else    void subl_im(int imm, void* addr)    {        if (CAN_SIGN_EXTEND_8_32(imm)) {            m_formatter.oneByteOp(OP_GROUP1_EvIb, GROUP1_OP_SUB, addr);            m_formatter.immediate8(imm);        } else {            m_formatter.oneByteOp(OP_GROUP1_EvIz, GROUP1_OP_SUB, addr);            m_formatter.immediate32(imm);        }    }#endif    void xorl_rr(RegisterID src, RegisterID dst)    {        m_formatter.oneByteOp(OP_XOR_EvGv, src, dst);    }    void xorl_ir(int imm, RegisterID dst)    {        if (CAN_SIGN_EXTEND_8_32(imm)) {            m_formatter.oneByteOp(OP_GROUP1_EvIb, GROUP1_OP_XOR, dst);            m_formatter.immediate8(imm);        } else {            m_formatter.oneByteOp(OP_GROUP1_EvIz, GROUP1_OP_XOR, dst);            m_formatter.immediate32(imm);        }    }#if PLATFORM(X86_64)    void xorq_rr(RegisterID src, RegisterID dst)    {        m_formatter.oneByteOp64(OP_XOR_EvGv, src, dst);    }    void xorq_ir(int imm, RegisterID dst)    {        if (CAN_SIGN_EXTEND_8_32(imm)) {            m_formatter.oneByteOp64(OP_GROUP1_EvIb, GROUP1_OP_XOR, dst);            m_formatter.immediate8(imm);        } else {            m_formatter.oneByteOp64(OP_GROUP1_EvIz, GROUP1_OP_XOR, dst);            m_formatter.immediate32(imm);        }    }#endif    void sarl_i8r(int imm, RegisterID dst)    {        if (imm == 1)            m_formatter.oneByteOp(OP_GROUP2_Ev1, GROUP2_OP_SAR, dst);        else {            m_formatter.oneByteOp(OP_GROUP2_EvIb, GROUP2_OP_SAR, dst);            m_formatter.immediate8(imm);        }    }    void sarl_CLr(RegisterID dst)    {        m_formatter.oneByteOp(OP_GROUP2_EvCL, GROUP2_OP_SAR, dst);    }    void shll_i8r(int imm, RegisterID dst)    {        if (imm == 1)            m_formatter.oneByteOp(OP_GROUP2_Ev1, GROUP2_OP_SHL, dst);        else {            m_formatter.oneByteOp(OP_GROUP2_EvIb, GROUP2_OP_SHL, dst);            m_formatter.immediate8(imm);        }    }    void shll_CLr(RegisterID dst)    {        m_formatter.oneByteOp(OP_GROUP2_EvCL, GROUP2_OP_SHL, dst);    }#if PLATFORM(X86_64)    void sarq_CLr(RegisterID dst)    {        m_formatter.oneByteOp64(OP_GROUP2_EvCL, GROUP2_OP_SAR, dst);    }    void sarq_i8r(int imm, RegisterID dst)    {        if (imm == 1)            m_formatter.oneByteOp64(OP_GROUP2_Ev1, GROUP2_OP_SAR, dst);        else {            m_formatter.oneByteOp64(OP_GROUP2_EvIb, GROUP2_OP_SAR, dst);            m_formatter.immediate8(imm);        }    }#endif    void imull_rr(RegisterID src, RegisterID dst)    {        m_formatter.twoByteOp(OP2_IMUL_GvEv, dst, src);    }        void imull_i32r(RegisterID src, int32_t value, RegisterID dst)    {        m_formatter.oneByteOp(OP_IMUL_GvEvIz, dst, src);        m_formatter.immediate32(value);    }    void idivl_r(RegisterID dst)    {        m_formatter.oneByteOp(OP_GROUP3_Ev, GROUP3_OP_IDIV, dst);    }    // Comparisons:    void cmpl_rr(RegisterID src, RegisterID dst)    {        m_formatter.oneByteOp(OP_CMP_EvGv, src, dst);    }    void cmpl_rm(RegisterID src, int offset, RegisterID base)    {        m_formatter.oneByteOp(OP_CMP_EvGv, src, base, offset);    }    void cmpl_mr(int offset, RegisterID base, RegisterID src)    {        m_formatter.oneByteOp(OP_CMP_GvEv, src, base, offset);    }    void cmpl_ir(int imm, RegisterID dst)    {        if (CAN_SIGN_EXTEND_8_32(imm)) {            m_formatter.oneByteOp(OP_GROUP1_EvIb, GROUP1_OP_CMP, dst);            m_formatter.immediate8(imm);        } else {            m_formatter.oneByteOp(OP_GROUP1_EvIz, GROUP1_OP_CMP, dst);            m_formatter.immediate32(imm);        }    }    void cmpl_ir_force32(int imm, RegisterID dst)    {        m_formatter.oneByteOp(OP_GROUP1_EvIz, GROUP1_OP_CMP, dst);        m_formatter.immediate32(imm);    }    void cmpl_im(int imm, int offset, RegisterID base)    {        if (CAN_SIGN_EXTEND_8_32(imm)) {            m_formatter.oneByteOp(OP_GROUP1_EvIb, GROUP1_OP_CMP, base, offset);            m_formatter.immediate8(imm);        } else {            m_formatter.oneByteOp(OP_GROUP1_EvIz, GROUP1_OP_CMP, base, offset);            m_formatter.immediate32(imm);        }    }    void cmpl_im(int imm, int offset, RegisterID base, RegisterID index, int scale)    {        if (CAN_SIGN_EXTEND_8_32(imm)) {            m_formatter.oneByteOp(OP_GROUP1_EvIb, GROUP1_OP_CMP, base, index, scale, offset);            m_formatter.immediate8(imm);        } else {            m_formatter.oneByteOp(OP_GROUP1_EvIz, GROUP1_OP_CMP, base, index, scale, offset);            m_formatter.immediate32(imm);        }    }    void cmpl_im_force32(int imm, int offset, RegisterID base)    {        m_formatter.oneByteOp(OP_GROUP1_EvIz, GROUP1_OP_CMP, base, offset);        m_formatter.immediate32(imm);    }#if PLATFORM(X86_64)    void cmpq_rr(RegisterID src, RegisterID dst)    {        m_formatter.oneByteOp64(OP_CMP_EvGv, src, dst);    }    void cmpq_rm(RegisterID src, int offset, RegisterID base)    {        m_formatter.oneByteOp64(OP_CMP_EvGv, src, base, offset);    }    void cmpq_mr(int offset, RegisterID base, RegisterID src)    {        m_formatter.oneByteOp64(OP_CMP_GvEv, src, base, offset);    }    void cmpq_ir(int imm, RegisterID dst)    {        if (CAN_SIGN_EXTEND_8_32(imm)) {            m_formatter.oneByteOp64(OP_GROUP1_EvIb, GROUP1_OP_CMP, dst);            m_formatter.immediate8(imm);        } else {            m_formatter.oneByteOp64(OP_GROUP1_EvIz, GROUP1_OP_CMP, dst);            m_formatter.immediate32(imm);        }    }    void cmpq_im(int imm, int offset, RegisterID base)    {        if (CAN_SIGN_EXTEND_8_32(imm)) {            m_formatter.oneByteOp64(OP_GROUP1_EvIb, GROUP1_OP_CMP, base, offset);            m_formatter.immediate8(imm);        } else {            m_formatter.oneByteOp64(OP_GROUP1_EvIz, GROUP1_OP_CMP, base, offset);            m_formatter.immediate32(imm);        }    }    void cmpq_im(int imm, int offset, RegisterID base, RegisterID index, int scale)    {        if (CAN_SIGN_EXTEND_8_32(imm)) {            m_formatter.oneByteOp64(OP_GROUP1_EvIb, GROUP1_OP_CMP, base, index, scale, offset);            m_formatter.immediate8(imm);        } else {            m_formatter.oneByteOp64(OP_GROUP1_EvIz, GROUP1_OP_CMP, base, index, scale, offset);            m_formatter.immediate32(imm);        }    }#else    void cmpl_rm(RegisterID reg, void* addr)    {        m_formatter.oneByteOp(OP_CMP_EvGv, reg, addr);    }    void cmpl_im(int imm, void* addr)    {        if (CAN_SIGN_EXTEND_8_32(imm)) {            m_formatter.oneByteOp(OP_GROUP1_EvIb, GROUP1_OP_CMP, addr);            m_formatter.immediate8(imm);        } else {            m_formatter.oneByteOp(OP_GROUP1_EvIz, GROUP1_OP_CMP, addr);            m_formatter.immediate32(imm);        }    }#endif    void cmpw_rm(RegisterID src, int offset, RegisterID base, RegisterID index, int scale)    {        m_formatter.prefix(PRE_OPERAND_SIZE);        m_formatter.oneByteOp(OP_CMP_EvGv, src, base, index, scale, offset);    }    void testl_rr(RegisterID src, RegisterID dst)    {        m_formatter.oneByteOp(OP_TEST_EvGv, src, dst);    }        void testl_i32r(int imm, RegisterID dst)    {        m_formatter.oneByteOp(OP_GROUP3_EvIz, GROUP3_OP_TEST, dst);        m_formatter.immediate32(imm);    }    void testl_i32m(int imm, int offset, RegisterID base)    {        m_formatter.oneByteOp(OP_GROUP3_EvIz, GROUP3_OP_TEST, base, offset);        m_formatter.immediate32(imm);    }    void testl_i32m(int imm, int offset, RegisterID base, RegisterID index, int scale)    {        m_formatter.oneByteOp(OP_GROUP3_EvIz, GROUP3_OP_TEST, base, index, scale, offset);        m_formatter.immediate32(imm);    }#if PLATFORM(X86_64)    void testq_rr(RegisterID src, RegisterID dst)    {        m_formatter.oneByteOp64(OP_TEST_EvGv, src, dst);    }    void testq_i32r(int imm, RegisterID dst)    {        m_formatter.oneByteOp64(OP_GROUP3_EvIz, GROUP3_OP_TEST, dst);        m_formatter.immediate32(imm);    }    void testq_i32m(int imm, int offset, RegisterID base)    {        m_formatter.oneByteOp64(OP_GROUP3_EvIz, GROUP3_OP_TEST, base, offset);        m_formatter.immediate32(imm);    }    void testq_i32m(int imm, int offset, RegisterID base, RegisterID index, int scale)    {        m_formatter.oneByteOp64(OP_GROUP3_EvIz, GROUP3_OP_TEST, base, index, scale, offset);        m_formatter.immediate32(imm);    }#endif     void testb_i8r(int imm, RegisterID dst)    {        m_formatter.oneByteOp8(OP_GROUP3_EbIb, GROUP3_OP_TEST, dst);        m_formatter.immediate8(imm);    }    void setCC_r(Condition cond, RegisterID dst)    {        m_formatter.twoByteOp8(setccOpcode(cond), (GroupOpcodeID)0, dst);    }    void sete_r(RegisterID dst)    {        m_formatter.twoByteOp8(setccOpcode(ConditionE), (GroupOpcodeID)0, dst);    }    void setz_r(RegisterID dst)    {        sete_r(dst);    }    void setne_r(RegisterID dst)    {        m_formatter.twoByteOp8(setccOpcode(ConditionNE), (GroupOpcodeID)0, dst);    }    void setnz_r(RegisterID dst)    {        setne_r(dst);    }    // Various move ops:    void cdq()    {        m_formatter.oneByteOp(OP_CDQ);    }    void xchgl_rr(RegisterID src, RegisterID dst)    {        m_formatter.oneByteOp(OP_XCHG_EvGv, src, dst);    }#if PLATFORM(X86_64)    void xchgq_rr(RegisterID src, RegisterID dst)    {        m_formatter.oneByteOp64(OP_XCHG_EvGv, src, dst);    }#endif    void movl_rr(RegisterID src, RegisterID dst)    {        m_formatter.oneByteOp(OP_MOV_EvGv, src, dst);    }        void movl_rm(RegisterID src, int offset, RegisterID base)    {        m_formatter.oneByteOp(OP_MOV_EvGv, src, base, offset);    }    void movl_rm_disp32(RegisterID src, int offset, RegisterID base)    {        m_formatter.oneByteOp_disp32(OP_MOV_EvGv, src, base, offset);    }    void movl_rm(RegisterID src, int offset, RegisterID base, RegisterID index, int scale)    {        m_formatter.oneByteOp(OP_MOV_EvGv, src, base, index, scale, offset);    }        void movl_mEAX(void* addr)    {        m_formatter.oneByteOp(OP_MOV_EAXOv);#if PLATFORM(X86_64)        m_formatter.immediate64(reinterpret_cast<int64_t>(addr));#else        m_formatter.immediate32(reinterpret_cast<int>(addr));#endif    }    void movl_mr(int offset, RegisterID base, RegisterID dst)    {        m_formatter.oneByteOp(OP_MOV_GvEv, dst, base, offset);    }    void movl_mr_disp32(int offset, RegisterID base, RegisterID dst)    {        m_formatter.oneByteOp_disp32(OP_MOV_GvEv, dst, base, offset);    }    void movl_mr(int offset, RegisterID base, RegisterID index, int scale, RegisterID dst)    {        m_formatter.oneByteOp(OP_MOV_GvEv, dst, base, index, scale, offset);    }    void movl_i32r(int imm, RegisterID dst)    {        m_formatter.oneByteOp(OP_MOV_EAXIv, dst);        m_formatter.immediate32(imm);    }    void movl_i32m(int imm, int offset, RegisterID base)    {        m_formatter.oneByteOp(OP_GROUP11_EvIz, GROUP11_MOV, base, offset);        m_formatter.immediate32(imm);    }    void movl_EAXm(void* addr)    {        m_formatter.oneByteOp(OP_MOV_OvEAX);#if PLATFORM(X86_64)        m_formatter.immediate64(reinterpret_cast<int64_t>(addr));#else        m_formatter.immediate32(reinterpret_cast<int>(addr));#endif    }#if PLATFORM(X86_64)    void movq_rr(RegisterID src, RegisterID dst)    {        m_formatter.oneByteOp64(OP_MOV_EvGv, src, dst);    }    void movq_rm(RegisterID src, int offset, RegisterID base)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -