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