4 #define RAISE(errtype, msg) {PyObject* p; p = PyErr_Format( errtype, msg ); return p;}
5 #define RAISE_ret0(errtype, msg) {PyObject* p; p = PyErr_Format( errtype, msg ); return 0;}
8 #define PyGetInt(item, value) \
9 if (PyInt_Check(item)){ \
10 value = (uint64_t)PyInt_AsLong(item); \
12 else if (PyLong_Check(item)){ \
13 value = (uint64_t)PyLong_AsUnsignedLongLong(item); \
16 RAISE(PyExc_TypeError,"arg must be int"); \
20 #define PyGetInt_ret0(item, value) \
21 if (PyInt_Check(item)){ \
22 value = (uint64_t)PyInt_AsLong(item); \
24 else if (PyLong_Check(item)){ \
25 value = (uint64_t)PyLong_AsUnsignedLongLong(item); \
28 printf("error\n"); return 0; \
33 #define getset_reg_u64(regname) \
34 static PyObject *JitCpu_get_ ## regname (JitCpu *self, void *closure) \
36 return PyLong_FromUnsignedLongLong((uint64_t)(((vm_cpu_t*)(self->cpu))-> regname )); \
38 static int JitCpu_set_ ## regname (JitCpu *self, PyObject *value, void *closure) \
41 PyGetInt_ret0(value, val); \
42 ((vm_cpu_t*)(self->cpu))-> regname = val; \
46 #define getset_reg_u32(regname) \
47 static PyObject *JitCpu_get_ ## regname (JitCpu *self, void *closure) \
49 return PyLong_FromUnsignedLongLong((uint32_t)(((vm_cpu_t*)(self->cpu))-> regname )); \
51 static int JitCpu_set_ ## regname (JitCpu *self, PyObject *value, void *closure) \
54 PyGetInt_ret0(value, val); \
55 ((vm_cpu_t*)(self->cpu))-> regname = val; \
60 #define getset_reg_u16(regname) \
61 static PyObject *JitCpu_get_ ## regname (JitCpu *self, void *closure) \
63 return PyLong_FromUnsignedLongLong((uint16_t)(((vm_cpu_t*)(self->cpu))-> regname )); \
65 static int JitCpu_set_ ## regname (JitCpu *self, PyObject *value, void *closure) \
68 PyGetInt_ret0(value, val); \
69 ((vm_cpu_t*)(self->cpu))-> regname = val; \
74 #define get_reg(reg) do { \
75 o = PyLong_FromUnsignedLongLong((uint64_t)((vm_cpu_t*)(self->cpu))->reg); \
76 PyDict_SetItemString(dict, #reg, o); \
81 #define get_reg_off(reg) do { \
82 o = PyLong_FromUnsignedLongLong((uint64_t)offsetof(vm_cpu_t, reg)); \
83 PyDict_SetItemString(dict, #reg, o); \
109 PyObject *
JitCpu_new(PyTypeObject *
type, PyObject *args, PyObject *kwds);
131 #define VM_exception_flag (((VmMngr*)jitcpu->pyvm)->vm_mngr.exception_flags)
132 #define CPU_exception_flag (((vm_cpu_t*)jitcpu->cpu)->exception_flags)
134 #define JIT_RET_EXCEPTION 1
135 #define JIT_RET_NO_EXCEPTION 0
uint8_t MEM_LOOKUP_08(JitCpu *jitcpu, uint64_t addr)
PyObject * JitCpu_set_vmmngr(JitCpu *self, PyObject *value, void *closure)
void JitCpu_dealloc(JitCpu *self)
PyObject * vm_get_mem(JitCpu *self, PyObject *args)
PyObject * JitCpu_get_jitter(JitCpu *self, void *closure)
struct _reg_dict reg_dict
void MEM_WRITE_32(JitCpu *jitcpu, uint64_t addr, uint32_t src)
void MEM_WRITE_08(JitCpu *jitcpu, uint64_t addr, uint8_t src)
void Resolve_dst(block_id *BlockDst, uint64_t addr, uint64_t is_local)
PyObject * JitCpu_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
PyObject_HEAD PyObject * pyvm
uint16_t MEM_LOOKUP_16(JitCpu *jitcpu, uint64_t addr)
void MEM_WRITE_64(JitCpu *jitcpu, uint64_t addr, uint64_t src)
uint32_t MEM_LOOKUP_32(JitCpu *jitcpu, uint64_t addr)
uint64_t MEM_LOOKUP_64(JitCpu *jitcpu, uint64_t addr)
PyObject * JitCpu_get_vmmngr(JitCpu *self, void *closure)
PyObject * JitCpu_set_jitter(JitCpu *self, PyObject *value, void *closure)
void MEM_WRITE_16(JitCpu *jitcpu, uint64_t addr, uint16_t src)