RPA Toolkit
work on the RJS code segments
[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
17 #define RVM_CODEGEN_FUNCINITOFFSET 3
18 #define RVM_CODEGEN_E_NONE 0
19
20
21 typedef struct rvm_codegen_s {
22         rarray_t *code;
23         rarray_t *data;
24         ruint codeoff;
25         rvm_codemap_t *codemap;
26         rvm_relocmap_t *relocmap;
27         rulong userdata;
28 } rvm_codegen_t;
29
30
31 rvm_codegen_t *rvm_codegen_create();
32 void rvm_codegen_destroy(rvm_codegen_t *cg);
33 ruint rvm_codegen_funcstart(rvm_codegen_t *cg, const rchar* name, ruint namesize, ruint args);
34 ruint rvm_codegen_funcstart_s(rvm_codegen_t *cg, const rchar* name, ruint args);
35 ruint rvm_codegen_vargs_funcstart(rvm_codegen_t *cg, const rchar* name, ruint namesize);
36 ruint rvm_codegen_vargs_funcstart_s(rvm_codegen_t *cg, const rchar* name);
37 void rvm_codegen_funcend(rvm_codegen_t *cg);
38 ruint rvm_codegen_addins(rvm_codegen_t *cg, rvm_asmins_t ins);
39 ruint rvm_codegen_addlabelins(rvm_codegen_t *cg, const rchar* name, ruint namesize, rvm_asmins_t ins);
40 ruint rvm_codegen_addlabelins_s(rvm_codegen_t *cg, const rchar* name, rvm_asmins_t ins);
41 ruint rvm_codegen_index_addrelocins(rvm_codegen_t *cg, rvm_reloctype_t type, rulong index, rvm_asmins_t ins);
42 ruint rvm_codegen_addrelocins(rvm_codegen_t *cg, rvm_reloctype_t type, const rchar* name, ruint namesize, rvm_asmins_t ins);
43 ruint rvm_codegen_addrelocins_s(rvm_codegen_t *cg, rvm_reloctype_t type, const rchar* name, rvm_asmins_t ins);
44 ruint rvm_codegen_insertins(rvm_codegen_t *cg, ruint index, rvm_asmins_t ins);
45 ruint rvm_codegen_replaceins(rvm_codegen_t *cg, ruint index, rvm_asmins_t ins);
46 rvm_asmins_t *rvm_codegen_getcode(rvm_codegen_t *cg, ruint index);
47 rulong rvm_codegen_getcodesize(rvm_codegen_t *cg);
48 void rvm_codegen_setcodesize(rvm_codegen_t *cg, ruint size);
49 void rvm_codegen_clear(rvm_codegen_t *cg);
50 rint rvm_codegen_relocate(rvm_codegen_t *cg, rvm_codelabel_t **err);
51 rlong rvm_codegen_validlabel(rvm_codegen_t *cg, rlong index);
52 rlong rvm_codegen_redefinelabel(rvm_codegen_t *cg, rlong index, rulong offset);
53 rlong rvm_codegen_redefinelabel_default(rvm_codegen_t *cg, rlong index);
54 rlong rvm_codegen_redefinepointer(rvm_codegen_t *cg, rlong index, rpointer data);
55 rlong rvm_codegen_addlabel(rvm_codegen_t *cg, const rchar* name, ruint namesize, rulong offset);
56 rlong rvm_codegen_addlabel_s(rvm_codegen_t *cg, const rchar* name, rulong offset);
57 rlong rvm_codegen_addlabel_default(rvm_codegen_t *cg, const rchar* name, ruint namesize);
58 rlong rvm_codegen_addlabel_default_s(rvm_codegen_t *cg, const rchar* name);
59 rlong rvm_codegen_invalid_addlabel(rvm_codegen_t *cg, const rchar* name, ruint namesize);
60 rlong rvm_codegen_invalid_addlabel_s(rvm_codegen_t *cg, const rchar* name);
61 rlong rvm_codegen_adddata(rvm_codegen_t *cg, const rchar *name, ruint namesize, rconstpointer data, rsize_t size);
62 rlong rvm_codegen_adddata_s(rvm_codegen_t *cg, const rchar *name, rconstpointer data, rsize_t size);
63 rlong rvm_codegen_addstring(rvm_codegen_t *cg, const rchar *name, ruint namesize, const rchar* data);
64 rlong rvm_codegen_addstring_s(rvm_codegen_t *cg, const rchar *name, const rchar* data);
65 rlong rvm_codegen_add_numlabel_s(rvm_codegen_t *cg, const rchar *alphaname, rlong numname);
66 rlong rvm_codegen_invalid_add_numlabel_s(rvm_codegen_t *cg, const rchar *alphaname, rlong numname);
67
68 #ifdef __cplusplus
69 }
70 #endif
71
72 #endif
73