xref: /aosp_15_r20/external/capstone/arch/Mips/MipsModule.c (revision 9a0e4156d50a75a99ec4f1653a0e9602a5d45c18)
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 Ebrahimi static 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 Ebrahimi cs_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 Ebrahimi cs_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