148a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh/* Capstone Disassembly Engine */
248a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh/* By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2014 */
348a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh
48598a219f303802198439f9fc0884dffe19b3b11Nguyen Anh Quynh#ifdef CAPSTONE_HAS_SYSZ
58598a219f303802198439f9fc0884dffe19b3b11Nguyen Anh Quynh
648a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh#include "../../utils.h"
748a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh#include "../../MCRegisterInfo.h"
848a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh#include "SystemZDisassembler.h"
948a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh#include "SystemZInstPrinter.h"
1048a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh#include "SystemZMapping.h"
1148a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh
1248a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynhstatic cs_err init(cs_struct *ud)
1348a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh{
1448a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh	MCRegisterInfo *mri;
1548a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh
1648a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh	mri = cs_mem_malloc(sizeof(*mri));
1748a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh
1848a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh	SystemZ_init(mri);
1948a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh	ud->printer = SystemZ_printInst;
2048a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh	ud->printer_info = mri;
2148a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh	ud->getinsn_info = mri;
2248a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh	ud->disasm = SystemZ_getInstruction;
2348a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh	ud->post_printer = SystemZ_post_printer;
2448a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh
2548a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh	ud->reg_name = SystemZ_reg_name;
2648a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh	ud->insn_id = SystemZ_get_insn_id;
2748a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh	ud->insn_name = SystemZ_insn_name;
28650f96ce431dc38f702641b3f1cf4320e9c9bf94Nguyen Anh Quynh	ud->group_name = SystemZ_group_name;
2948a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh
3048a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh	return CS_ERR_OK;
3148a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh}
3248a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh
3348a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynhstatic cs_err option(cs_struct *handle, cs_opt_type type, size_t value)
3448a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh{
3548a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh	if (type == CS_OPT_SYNTAX)
36298d413bbc996b09549067b4acb63ea26cde2d68flyingsymbols		handle->syntax = (int) value;
3748a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh
3848a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh	return CS_ERR_OK;
3948a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh}
4048a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh
4148a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynhstatic void destroy(cs_struct *handle)
4248a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh{
4348a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh}
4448a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh
4548a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynhvoid SystemZ_enable(void)
4648a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh{
4748a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh	arch_init[CS_ARCH_SYSZ] = init;
4848a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh	arch_option[CS_ARCH_SYSZ] = option;
4948a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh	arch_destroy[CS_ARCH_SYSZ] = destroy;
5048a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh
5148a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh	// support this arch
5248a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh	all_arch |= (1 << CS_ARCH_SYSZ);
5348a14ca4cedc1437876eea7357ab0c5e5769676cNguyen Anh Quynh}
548598a219f303802198439f9fc0884dffe19b3b11Nguyen Anh Quynh
558598a219f303802198439f9fc0884dffe19b3b11Nguyen Anh Quynh#endif
56