blob: 1eb01d5a9070153aafd7453d8d3240642b7f6d80 [file] [log] [blame]
Nguyen Anh Quynh05e27132014-03-10 11:58:57 +08001/* Capstone Disassembly Engine */
2/* By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2014 */
3
Nguyen Anh Quynh8598a212014-05-14 11:26:41 +08004#ifdef CAPSTONE_HAS_SPARC
5
Nguyen Anh Quynh05e27132014-03-10 11:58:57 +08006#include "../../utils.h"
7#include "../../MCRegisterInfo.h"
8#include "SparcDisassembler.h"
9#include "SparcInstPrinter.h"
10#include "SparcMapping.h"
11
12static cs_err init(cs_struct *ud)
13{
14 MCRegisterInfo *mri;
15
16 // verify if requested mode is valid
17 if (ud->mode & ~(CS_MODE_BIG_ENDIAN | CS_MODE_V9))
18 return CS_ERR_MODE;
19
20 mri = cs_mem_malloc(sizeof(*mri));
21
22 Sparc_init(mri);
23 ud->printer = Sparc_printInst;
24 ud->printer_info = mri;
25 ud->getinsn_info = mri;
26 ud->disasm = Sparc_getInstruction;
27 ud->post_printer = Sparc_post_printer;
28
29 ud->reg_name = Sparc_reg_name;
30 ud->insn_id = Sparc_get_insn_id;
31 ud->insn_name = Sparc_insn_name;
Nguyen Anh Quynh650f96c2014-07-08 08:59:27 +080032 ud->group_name = Sparc_group_name;
Nguyen Anh Quynh05e27132014-03-10 11:58:57 +080033
34 return CS_ERR_OK;
35}
36
37static cs_err option(cs_struct *handle, cs_opt_type type, size_t value)
38{
39 if (type == CS_OPT_SYNTAX)
flyingsymbols298d4132014-06-30 01:45:40 -040040 handle->syntax = (int) value;
Nguyen Anh Quynh05e27132014-03-10 11:58:57 +080041
42 return CS_ERR_OK;
43}
44
45static void destroy(cs_struct *handle)
46{
47}
48
49void Sparc_enable(void)
50{
51 arch_init[CS_ARCH_SPARC] = init;
52 arch_option[CS_ARCH_SPARC] = option;
53 arch_destroy[CS_ARCH_SPARC] = destroy;
54
55 // support this arch
56 all_arch |= (1 << CS_ARCH_SPARC);
57}
Nguyen Anh Quynh8598a212014-05-14 11:26:41 +080058
59#endif