#include <Python.h>
#include "../JitCore.h"
#include "structmember.h"
#include <stdint.h>
#include <inttypes.h>
#include "../queue.h"
#include "../vm_mngr.h"
#include "../vm_mngr_py.h"
#include "JitCore_mips32.h"
Go to the source code of this file.
|
PyObject * | cpu_get_gpreg (JitCpu *self) |
|
PyObject * | cpu_set_gpreg (JitCpu *self, PyObject *args) |
|
PyObject * | cpu_init_regs (JitCpu *self) |
|
void | dump_gpregs (vm_cpu_t *vmcpu) |
|
PyObject * | cpu_dump_gpregs (JitCpu *self, PyObject *args) |
|
PyObject * | cpu_set_exception (JitCpu *self, PyObject *args) |
|
PyObject * | cpu_get_exception (JitCpu *self, PyObject *args) |
|
void | check_automod (JitCpu *jitcpu, uint64_t addr, uint64_t size) |
|
void | MEM_WRITE_08 (JitCpu *jitcpu, uint64_t addr, uint8_t src) |
|
void | MEM_WRITE_16 (JitCpu *jitcpu, uint64_t addr, uint16_t src) |
|
void | MEM_WRITE_32 (JitCpu *jitcpu, uint64_t addr, uint32_t src) |
|
void | MEM_WRITE_64 (JitCpu *jitcpu, uint64_t addr, uint64_t src) |
|
PyObject * | vm_set_mem (JitCpu *self, PyObject *args) |
|
static int | JitCpu_init (JitCpu *self, PyObject *args, PyObject *kwds) |
|
| getset_reg_u32 (ZERO) |
|
| getset_reg_u32 (AT) |
|
| getset_reg_u32 (V0) |
|
| getset_reg_u32 (V1) |
|
| getset_reg_u32 (A0) |
|
| getset_reg_u32 (A1) |
|
| getset_reg_u32 (A2) |
|
| getset_reg_u32 (A3) |
|
| getset_reg_u32 (T0) |
|
| getset_reg_u32 (T1) |
|
| getset_reg_u32 (T2) |
|
| getset_reg_u32 (T3) |
|
| getset_reg_u32 (T4) |
|
| getset_reg_u32 (T5) |
|
| getset_reg_u32 (T6) |
|
| getset_reg_u32 (T7) |
|
| getset_reg_u32 (S0) |
|
| getset_reg_u32 (S1) |
|
| getset_reg_u32 (S2) |
|
| getset_reg_u32 (S3) |
|
| getset_reg_u32 (S4) |
|
| getset_reg_u32 (S5) |
|
| getset_reg_u32 (S6) |
|
| getset_reg_u32 (S7) |
|
| getset_reg_u32 (T8) |
|
| getset_reg_u32 (T9) |
|
| getset_reg_u32 (K0) |
|
| getset_reg_u32 (K1) |
|
| getset_reg_u32 (GP) |
|
| getset_reg_u32 (SP) |
|
| getset_reg_u32 (FP) |
|
| getset_reg_u32 (RA) |
|
| getset_reg_u32 (PC) |
|
| getset_reg_u32 (PC_FETCH) |
|
| getset_reg_u32 (R_LO) |
|
| getset_reg_u32 (R_HI) |
|
PyObject * | get_gpreg_offset_all (void) |
|
PyMODINIT_FUNC | initJitCore_mips32 (void) |
|
void check_automod |
( |
JitCpu * |
jitcpu, |
|
|
uint64_t |
addr, |
|
|
uint64_t |
size |
|
) |
| |
Definition at line 212 of file JitCore_mips32.c.
218 result = PyObject_CallMethod(jitcpu->
jitter,
"automod_cb",
"LL", addr, size);
#define EXCEPT_CODE_AUTOMOD
PyObject_HEAD PyObject * pyvm
PyObject* cpu_dump_gpregs |
( |
JitCpu * |
self, |
|
|
PyObject * |
args |
|
) |
| |
PyObject* cpu_get_exception |
( |
JitCpu * |
self, |
|
|
PyObject * |
args |
|
) |
| |
PyObject* cpu_get_gpreg |
( |
JitCpu * |
self | ) |
|
PyObject* cpu_init_regs |
( |
JitCpu * |
self | ) |
|
PyObject* cpu_set_exception |
( |
JitCpu * |
self, |
|
|
PyObject * |
args |
|
) |
| |
Definition at line 187 of file JitCore_mips32.c.
192 if (!PyArg_ParseTuple(args,
"O", &item1))
#define PyGetInt(item, value)
PyObject* cpu_set_gpreg |
( |
JitCpu * |
self, |
|
|
PyObject * |
args |
|
) |
| |
Definition at line 103 of file JitCore_mips32.c.
106 PyObject *d_key, *d_value = NULL;
109 unsigned int i, found;
111 if (!PyArg_ParseTuple(args,
"O", &dict))
113 if(!PyDict_Check(dict))
114 RAISE(PyExc_TypeError,
"arg must be dict");
115 while(PyDict_Next(dict, &pos, &d_key, &d_value)){
116 if(!PyString_Check(d_key))
117 RAISE(PyExc_TypeError,
"key must be str");
132 fprintf(stderr,
"unkown key: %s\n", PyString_AsString(d_key));
133 RAISE(PyExc_ValueError,
"unkown reg");
#define RAISE(errtype, msg)
#define PyGetInt(item, value)
Definition at line 152 of file JitCore_mips32.c.
155 printf(
"ZR %.8"PRIX32
" AT %.8"PRIX32
" V0 %.8"PRIX32
" V1 %.8"PRIX32
" ",
156 vmcpu->
ZERO, vmcpu->
AT, vmcpu->
V0, vmcpu->
V1);
157 printf(
"A0 %.8"PRIX32
" A1 %.8"PRIX32
" A2 %.8"PRIX32
" A3 %.8"PRIX32
" ",
158 vmcpu->
A0, vmcpu->
A1, vmcpu->
A2, vmcpu->
A3);
159 printf(
"T0 %.8"PRIX32
" T1 %.8"PRIX32
" T2 %.8"PRIX32
" T3 %.8"PRIX32
" ",
160 vmcpu->
T0, vmcpu->
T1, vmcpu->
T2, vmcpu->
T3);
161 printf(
"T4 %.8"PRIX32
" T5 %.8"PRIX32
" T6 %.8"PRIX32
" T7 %.8"PRIX32
"\n",
162 vmcpu->
T4, vmcpu->
T5, vmcpu->
T6, vmcpu->
T7);
163 printf(
"S0 %.8"PRIX32
" S1 %.8"PRIX32
" S2 %.8"PRIX32
" S3 %.8"PRIX32
" ",
164 vmcpu->
S0, vmcpu->
S1, vmcpu->
S2, vmcpu->
S3);
165 printf(
"S4 %.8"PRIX32
" S5 %.8"PRIX32
" S6 %.8"PRIX32
" S7 %.8"PRIX32
" ",
166 vmcpu->
S4, vmcpu->
S5, vmcpu->
S6, vmcpu->
S7);
167 printf(
"T8 %.8"PRIX32
" T9 %.8"PRIX32
" K0 %.8"PRIX32
" K1 %.8"PRIX32
" ",
168 vmcpu->
T8, vmcpu->
T9, vmcpu->
K0, vmcpu->
K1);
169 printf(
"GP %.8"PRIX32
" SP %.8"PRIX32
" FP %.8"PRIX32
" RA %.8"PRIX32
"\n",
170 vmcpu->
GP, vmcpu->
SP, vmcpu->
FP, vmcpu->
RA);
171 printf(
"PC %.8"PRIX32
"\n",
PyObject* get_gpreg_offset_all |
( |
void |
| ) |
|
getset_reg_u32 |
( |
PC_FETCH |
| ) |
|
PyMODINIT_FUNC initJitCore_mips32 |
( |
void |
| ) |
|
Definition at line 638 of file JitCore_mips32.c.
654 PyModule_AddObject(m,
"JitCpu", (PyObject *)&
JitCpuType);
static PyMethodDef JitCore_mips32_Methods[]
static PyTypeObject JitCpuType
static PyObject * JitCore_mips32_Error
static int JitCpu_init |
( |
JitCpu * |
self, |
|
|
PyObject * |
args, |
|
|
PyObject * |
kwds |
|
) |
| |
|
static |
Definition at line 305 of file JitCore_mips32.c.
307 self->cpu = malloc(
sizeof(
vm_cpu_t));
308 if (self->
cpu == NULL) {
309 fprintf(stderr,
"cannot alloc vm_cpu_t\n");
void MEM_WRITE_08 |
( |
JitCpu * |
jitcpu, |
|
|
uint64_t |
addr, |
|
|
uint8_t |
src |
|
) |
| |
Definition at line 223 of file JitCore_mips32.c.
void check_automod(JitCpu *jitcpu, uint64_t addr, uint64_t size)
PyObject_HEAD PyObject * pyvm
void vm_MEM_WRITE_08(vm_mngr_t *vm_mngr, uint64_t addr, unsigned char src)
void MEM_WRITE_16 |
( |
JitCpu * |
jitcpu, |
|
|
uint64_t |
addr, |
|
|
uint16_t |
src |
|
) |
| |
Definition at line 229 of file JitCore_mips32.c.
void check_automod(JitCpu *jitcpu, uint64_t addr, uint64_t size)
void vm_MEM_WRITE_16(vm_mngr_t *vm_mngr, uint64_t addr, unsigned short src)
PyObject_HEAD PyObject * pyvm
void MEM_WRITE_32 |
( |
JitCpu * |
jitcpu, |
|
|
uint64_t |
addr, |
|
|
uint32_t |
src |
|
) |
| |
Definition at line 235 of file JitCore_mips32.c.
void check_automod(JitCpu *jitcpu, uint64_t addr, uint64_t size)
PyObject_HEAD PyObject * pyvm
void vm_MEM_WRITE_32(vm_mngr_t *vm_mngr, uint64_t addr, unsigned int src)
void MEM_WRITE_64 |
( |
JitCpu * |
jitcpu, |
|
|
uint64_t |
addr, |
|
|
uint64_t |
src |
|
) |
| |
Definition at line 241 of file JitCore_mips32.c.
void vm_MEM_WRITE_64(vm_mngr_t *vm_mngr, uint64_t addr, uint64_t src)
void check_automod(JitCpu *jitcpu, uint64_t addr, uint64_t size)
PyObject_HEAD PyObject * pyvm
PyObject* vm_set_mem |
( |
JitCpu * |
self, |
|
|
PyObject * |
args |
|
) |
| |
Definition at line 248 of file JitCore_mips32.c.
252 Py_ssize_t py_length;
259 if (!PyArg_ParseTuple(args,
"OO", &py_addr, &py_buffer))
264 if(!PyString_Check(py_buffer))
265 RAISE(PyExc_TypeError,
"arg must be str");
267 size = PyString_Size(py_buffer);
268 PyString_AsStringAndSize(py_buffer, &buffer, &py_length);
272 RAISE(PyExc_TypeError,
"arg must be str");
#define RAISE(errtype, msg)
#define PyGetInt(item, value)
int vm_write_mem(vm_mngr_t *vm_mngr, uint64_t addr, char *buffer, uint64_t size)
void check_automod(JitCpu *jitcpu, uint64_t addr, uint64_t size)
PyObject_HEAD PyObject * pyvm
PyObject* JitCore_mips32_Error |
|
static |
PyMethodDef JitCore_mips32_Methods[] |
|
static |
Initial value:= {
{NULL, NULL, 0, NULL}
}
PyObject * get_gpreg_offset_all(void)
Definition at line 625 of file JitCore_mips32.c.
PyGetSetDef JitCpu_getseters[] |
|
static |
PyMemberDef JitCpu_members[] |
|
static |
PyMethodDef JitCpu_methods[] |
|
static |
Initial value:= {
"X"},
"X"},
"X"},
"X"},
"X"},
"X"},
{
"set_mem", (PyCFunction)
vm_set_mem, METH_VARARGS,
"X"},
{
"get_mem", (PyCFunction)
vm_get_mem, METH_VARARGS,
"X"},
{NULL}
}
PyObject * cpu_init_regs(JitCpu *self)
PyObject * vm_get_mem(JitCpu *self, PyObject *args)
PyObject * cpu_get_exception(JitCpu *self, PyObject *args)
PyObject * vm_set_mem(JitCpu *self, PyObject *args)
PyObject * cpu_get_gpreg(JitCpu *self)
PyObject * cpu_set_exception(JitCpu *self, PyObject *args)
PyObject * cpu_dump_gpregs(JitCpu *self, PyObject *args)
PyObject * cpu_set_gpreg(JitCpu *self, PyObject *args)
Definition at line 283 of file JitCore_mips32.c.