1*9a0e4156SSadaf Ebrahimi /* Capstone Disassembly Engine */ 2*9a0e4156SSadaf Ebrahimi /* By Dang Hoang Vu <[email protected]> 2013 */ 3*9a0e4156SSadaf Ebrahimi 4*9a0e4156SSadaf Ebrahimi #ifdef CAPSTONE_HAS_MIPS 5*9a0e4156SSadaf Ebrahimi 6*9a0e4156SSadaf Ebrahimi #include "../../utils.h" 7*9a0e4156SSadaf Ebrahimi #include "../../MCRegisterInfo.h" 8*9a0e4156SSadaf Ebrahimi #include "MipsDisassembler.h" 9*9a0e4156SSadaf Ebrahimi #include "MipsInstPrinter.h" 10*9a0e4156SSadaf Ebrahimi #include "MipsMapping.h" 11*9a0e4156SSadaf Ebrahimi #include "MipsModule.h" 12*9a0e4156SSadaf Ebrahimi 13*9a0e4156SSadaf Ebrahimi // Returns mode value with implied bits set updated_mode(cs_mode mode)14*9a0e4156SSadaf Ebrahimistatic cs_mode updated_mode(cs_mode mode) 15*9a0e4156SSadaf Ebrahimi { 16*9a0e4156SSadaf Ebrahimi if (mode & CS_MODE_MIPS32R6) { 17*9a0e4156SSadaf Ebrahimi mode |= CS_MODE_32; 18*9a0e4156SSadaf Ebrahimi } 19*9a0e4156SSadaf Ebrahimi 20*9a0e4156SSadaf Ebrahimi return mode; 21*9a0e4156SSadaf Ebrahimi } 22*9a0e4156SSadaf Ebrahimi Mips_global_init(cs_struct * ud)23*9a0e4156SSadaf Ebrahimics_err Mips_global_init(cs_struct *ud) 24*9a0e4156SSadaf Ebrahimi { 25*9a0e4156SSadaf Ebrahimi MCRegisterInfo *mri; 26*9a0e4156SSadaf Ebrahimi mri = cs_mem_malloc(sizeof(*mri)); 27*9a0e4156SSadaf Ebrahimi 28*9a0e4156SSadaf Ebrahimi Mips_init(mri); 29*9a0e4156SSadaf Ebrahimi ud->printer = Mips_printInst; 30*9a0e4156SSadaf Ebrahimi ud->printer_info = mri; 31*9a0e4156SSadaf Ebrahimi ud->getinsn_info = mri; 32*9a0e4156SSadaf Ebrahimi ud->reg_name = Mips_reg_name; 33*9a0e4156SSadaf Ebrahimi ud->insn_id = Mips_get_insn_id; 34*9a0e4156SSadaf Ebrahimi ud->insn_name = Mips_insn_name; 35*9a0e4156SSadaf Ebrahimi ud->group_name = Mips_group_name; 36*9a0e4156SSadaf Ebrahimi 37*9a0e4156SSadaf Ebrahimi ud->disasm = Mips_getInstruction; 38*9a0e4156SSadaf Ebrahimi 39*9a0e4156SSadaf Ebrahimi return CS_ERR_OK; 40*9a0e4156SSadaf Ebrahimi } 41*9a0e4156SSadaf Ebrahimi Mips_option(cs_struct * handle,cs_opt_type type,size_t value)42*9a0e4156SSadaf Ebrahimics_err Mips_option(cs_struct *handle, cs_opt_type type, size_t value) 43*9a0e4156SSadaf Ebrahimi { 44*9a0e4156SSadaf Ebrahimi if (type == CS_OPT_MODE) { 45*9a0e4156SSadaf Ebrahimi handle->mode = updated_mode(value); 46*9a0e4156SSadaf Ebrahimi } 47*9a0e4156SSadaf Ebrahimi 48*9a0e4156SSadaf Ebrahimi return CS_ERR_OK; 49*9a0e4156SSadaf Ebrahimi } 50*9a0e4156SSadaf Ebrahimi 51*9a0e4156SSadaf Ebrahimi #endif 52