Mercurial > hg > Members > nobuyasu > myCompiler
comparison Bison-Flex/BasicCompiler-MemoryBase/UTF8/vm_code.h @ 4:805d39d28230
add Compiler-stackbase
author | nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 17 May 2011 08:00:38 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
3:3cea2e8a0e4b | 4:805d39d28230 |
---|---|
1 #ifdef VM_ENUMDEF | |
2 #define VMCODE0(code_, name_) code_, | |
3 #define VMCODE1(code_, name_) code_, | |
4 #define VMCODE2(code_, name_) code_, | |
5 #define VMCODE3(code_, name_) code_, | |
6 #endif | |
7 | |
8 #ifdef VM_CREATE | |
9 #define VMCODE0(code_, name_) void name_() \ | |
10 { \ | |
11 statement.push_back(CVMCode(code_)); \ | |
12 } | |
13 #define VMCODE1(code_, name_) void name_(int arg1) \ | |
14 { \ | |
15 statement.push_back(CVMCode(code_, arg1)); \ | |
16 } | |
17 #define VMCODE2(code_, name_) void name_(int arg1, int arg2) \ | |
18 { \ | |
19 statement.push_back(CVMCode(code_, arg1, arg2)); \ | |
20 } | |
21 #define VMCODE3(code_, name_) void name_(int arg1, int arg2, int arg3) \ | |
22 { \ | |
23 statement.push_back(CVMCode(code_, arg1, arg2, arg3)); \ | |
24 } | |
25 #endif | |
26 | |
27 #ifdef VM_NAMETABLE | |
28 #define VMCODE0(code_, name_) #name_, | |
29 #define VMCODE1(code_, name_) #name_, | |
30 #define VMCODE2(code_, name_) #name_, | |
31 #define VMCODE3(code_, name_) #name_, | |
32 #endif | |
33 | |
34 #ifdef VM_SWITCHTABLE | |
35 #define VMCODE0(code_, name_) case code_: \ | |
36 { \ | |
37 name_(); \ | |
38 } \ | |
39 break; | |
40 #define VMCODE1(code_, name_) case code_: \ | |
41 { \ | |
42 const int *v = value(1); \ | |
43 name_(v[0]); \ | |
44 } \ | |
45 break; | |
46 #define VMCODE2(code_, name_) case code_: \ | |
47 { \ | |
48 const int *v = value(2); \ | |
49 name_(v[0], v[1]); \ | |
50 } \ | |
51 break; | |
52 #define VMCODE3(code_, name_) case code_: \ | |
53 { \ | |
54 const int *v = value(3); \ | |
55 name_(v[0], v[1], v[2]); \ | |
56 } \ | |
57 break; | |
58 #endif | |
59 | |
60 VMCODE1(VM_PUSHCONST, PushConst) | |
61 VMCODE1(VM_PUSHVALUE, PushValue) | |
62 VMCODE1(VM_POPVALUE, PopValue) | |
63 VMCODE0(VM_POP, OpPop) | |
64 VMCODE2(VM_MOV_C, OpMovC) | |
65 VMCODE2(VM_MOV_V, OpMovV) | |
66 VMCODE2(VM_NEG_C, OpNegC) | |
67 VMCODE2(VM_NEG_V, OpNegV) | |
68 VMCODE3(VM_EQ_CC, OpEqCC) | |
69 VMCODE3(VM_EQ_VC, OpEqVC) | |
70 VMCODE3(VM_EQ_CV, OpEqCV) | |
71 VMCODE3(VM_EQ_VV, OpEqVV) | |
72 VMCODE3(VM_NE_CC, OpNeCC) | |
73 VMCODE3(VM_NE_VC, OpNeVC) | |
74 VMCODE3(VM_NE_CV, OpNeCV) | |
75 VMCODE3(VM_NE_VV, OpNeVV) | |
76 VMCODE3(VM_GT_CC, OpGtCC) | |
77 VMCODE3(VM_GT_VC, OpGtVC) | |
78 VMCODE3(VM_GT_CV, OpGtCV) | |
79 VMCODE3(VM_GT_VV, OpGtVV) | |
80 VMCODE3(VM_GE_CC, OpGeCC) | |
81 VMCODE3(VM_GE_VC, OpGeVC) | |
82 VMCODE3(VM_GE_CV, OpGeCV) | |
83 VMCODE3(VM_GE_VV, OpGeVV) | |
84 VMCODE3(VM_LT_CC, OpLtCC) | |
85 VMCODE3(VM_LT_VC, OpLtVC) | |
86 VMCODE3(VM_LT_CV, OpLtCV) | |
87 VMCODE3(VM_LT_VV, OpLtVV) | |
88 VMCODE3(VM_LE_CC, OpLeCC) | |
89 VMCODE3(VM_LE_VC, OpLeVC) | |
90 VMCODE3(VM_LE_CV, OpLeCV) | |
91 VMCODE3(VM_LE_VV, OpLeVV) | |
92 VMCODE3(VM_ADD_CC, OpAddCC) | |
93 VMCODE3(VM_ADD_VC, OpAddVC) | |
94 VMCODE3(VM_ADD_CV, OpAddCV) | |
95 VMCODE3(VM_ADD_VV, OpAddVV) | |
96 VMCODE3(VM_SUB_CC, OpSubCC) | |
97 VMCODE3(VM_SUB_VC, OpSubVC) | |
98 VMCODE3(VM_SUB_CV, OpSubCV) | |
99 VMCODE3(VM_SUB_VV, OpSubVV) | |
100 VMCODE3(VM_MUL_CC, OpMulCC) | |
101 VMCODE3(VM_MUL_VC, OpMulVC) | |
102 VMCODE3(VM_MUL_CV, OpMulCV) | |
103 VMCODE3(VM_MUL_VV, OpMulVV) | |
104 VMCODE3(VM_DIV_CC, OpDivCC) | |
105 VMCODE3(VM_DIV_VC, OpDivVC) | |
106 VMCODE3(VM_DIV_CV, OpDivCV) | |
107 VMCODE3(VM_DIV_VV, OpDivVV) | |
108 VMCODE3(VM_MOD_CC, OpModCC) | |
109 VMCODE3(VM_MOD_VC, OpModVC) | |
110 VMCODE3(VM_MOD_CV, OpModCV) | |
111 VMCODE3(VM_MOD_VV, OpModVV) | |
112 VMCODE1(VM_JMP, OpJmp) | |
113 VMCODE2(VM_JMPC, OpJmpC) | |
114 VMCODE2(VM_JMPNC, OpJmpNC) | |
115 VMCODE1(VM_PRINT, OpPrint) | |
116 VMCODE2(VM_RAND_C, OpRandC) | |
117 VMCODE2(VM_RAND_V, OpRandV) | |
118 VMCODE0(VM_HALT, OpHalt) | |
119 | |
120 #undef VMCODE0 | |
121 #undef VMCODE1 | |
122 #undef VMCODE2 | |
123 #undef VMCODE3 |