4
|
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
|