RPA Toolkit
8ec32bded0a6fc5aa26d265c7024b32733e5fa0c
[rpatk.git] / rvm / rvmcodegen.h
1 #ifndef _RVMCODEGEN_H_
2 #define _RVMCODEGEN_H_
3
4 #include "rtypes.h"
5 #include "rvmerror.h"
6 #include "rarray.h"
7 #include "rhash.h"
8 #include "rvmcpu.h"
9 #include "rvmcodemap.h"
10 #include "rvmrelocmap.h"
11
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15
16 #define RVM_CODEGEN_FUNCINITOFFSET 3
17 #define RVM_CODEGEN_E_NONE 0
18
19 typedef struct rvm_codegen_s {
20         rarray_t *code;
21         rarray_t *data;
22         ruint codeoff;
23         rvm_codemap_t *codemap;
24         rvm_relocmap_t *relocmap;
25 } rvm_codegen_t;
26
27
28 rvm_codegen_t *rvm_codegen_create();
29 void rvm_codegen_destroy(rvm_codegen_t *cg);
30 ruint rvm_codegen_funcstart(rvm_codegen_t *cg, const rchar* name, ruint namesize, ruint args);
31 ruint rvm_codegen_funcstart_s(rvm_codegen_t *cg, const rchar* name, ruint args);
32 ruint rvm_codegen_vargs_funcstart(rvm_codegen_t *cg, const rchar* name, ruint namesize);
33 ruint rvm_codegen_vargs_funcstart_s(rvm_codegen_t *cg, const rchar* name);
34 void rvm_codegen_funcend(rvm_codegen_t *cg);
35 ruint rvm_codegen_addins(rvm_codegen_t *cg, rvm_asmins_t ins);
36 ruint rvm_codegen_addlabelins(rvm_codegen_t *cg, const rchar* name, ruint namesize, rvm_asmins_t ins);
37 ruint rvm_codegen_addlabelins_s(rvm_codegen_t *cg, const rchar* name, rvm_asmins_t ins);
38 ruint rvm_codegen_index_addrelocins(rvm_codegen_t *cg, rvm_reloctype_t type, rulong index, rvm_asmins_t ins);
39 ruint rvm_codegen_addrelocins(rvm_codegen_t *cg, rvm_reloctype_t type, const rchar* name, ruint namesize, rvm_asmins_t ins);
40 ruint rvm_codegen_addrelocins_s(rvm_codegen_t *cg, rvm_reloctype_t type, const rchar* name, rvm_asmins_t ins);
41 ruint rvm_codegen_insertins(rvm_codegen_t *cg, ruint index, rvm_asmins_t ins);
42 ruint rvm_codegen_replaceins(rvm_codegen_t *cg, ruint index, rvm_asmins_t ins);
43 rvm_asmins_t *rvm_codegen_getcode(rvm_codegen_t *cg, ruint index);
44 rulong rvm_codegen_getcodesize(rvm_codegen_t *cg);
45 void rvm_codegen_setcodesize(rvm_codegen_t *cg, ruint size);
46 void rvm_codegen_clear(rvm_codegen_t *cg);
47 rint rvm_codegen_relocate(rvm_codegen_t *cg, rvm_codelabel_t **err);
48 rlong rvm_codegen_redefinelabel(rvm_codegen_t *cg, rlong index);
49 rlong rvm_codegen_addlabel(rvm_codegen_t *cg, const rchar* name, ruint namesize);
50 rlong rvm_codegen_addlabel_s(rvm_codegen_t *cg, const rchar* name);
51 rlong rvm_codegen_invalid_addlabel(rvm_codegen_t *cg, const rchar* name, ruint namesize);
52 rlong rvm_codegen_invalid_addlabel_s(rvm_codegen_t *cg, const rchar* name);
53 rlong rvm_codegen_adddata(rvm_codegen_t *cg, const rchar *name, ruint namesize, rconstpointer data, rsize_t size);
54 rlong rvm_codegen_adddata_s(rvm_codegen_t *cg, const rchar *name, rconstpointer data, rsize_t size);
55 rlong rvm_codegen_addstring(rvm_codegen_t *cg, const rchar *name, ruint namesize, const rchar* data);
56 rlong rvm_codegen_addstring_s(rvm_codegen_t *cg, const rchar *name, const rchar* data);
57
58 #ifdef __cplusplus
59 }
60 #endif
61
62 #endif
63