0
|
1 #ifdef VM_ENUMDEF
|
|
2 #define VMCODE0(code_, name_) code_,
|
|
3 #define VMCODE1(code_, name_) code_,
|
|
4 #endif
|
|
5 #ifdef VM_CREATE
|
|
6 #define VMCODE0(code_, name_) void name_() { statement.push_back(CVMCode(code_)); }
|
|
7 #define VMCODE1(code_, name_) void name_(int arg1) { statement.push_back(CVMCode(code_, arg1)); }
|
|
8 #endif
|
|
9 #ifdef VM_EXEC
|
|
10 #define VMCODE0(code_, name_) void name_();
|
|
11 #define VMCODE1(code_, name_) void name_();
|
|
12 #endif
|
|
13 #ifdef VM_EXECTABLE
|
|
14 #define VMCODE0(code_, name_) &vcpu::name_,
|
|
15 #define VMCODE1(code_, name_) &vcpu::name_,
|
|
16 #endif
|
|
17 #ifdef VM_NAMETABLE
|
|
18 #define VMCODE0(code_, name_) #name_,
|
|
19 #define VMCODE1(code_, name_) #name_,
|
|
20 #endif
|
|
21
|
|
22 VMCODE1(VM_PUSHCONST, PushConst)
|
|
23 VMCODE1(VM_PUSHVALUE, PushValue)
|
|
24 VMCODE1(VM_POPVALUE, PopValue)
|
|
25 VMCODE0(VM_POP, OpPop)
|
|
26 VMCODE0(VM_NEG, OpNeg)
|
|
27 VMCODE0(VM_EQ, OpEq)
|
|
28 VMCODE0(VM_NE, OpNe)
|
|
29 VMCODE0(VM_GT, OpGt)
|
|
30 VMCODE0(VM_GE, OpGe)
|
|
31 VMCODE0(VM_LT, OpLt)
|
|
32 VMCODE0(VM_LE, OpLe)
|
|
33 VMCODE0(VM_ADD, OpAdd)
|
|
34 VMCODE0(VM_SUB, OpSub)
|
|
35 VMCODE0(VM_MUL, OpMul)
|
|
36 VMCODE0(VM_DIV, OpDiv)
|
|
37 VMCODE0(VM_MOD, OpMod)
|
|
38 VMCODE1(VM_JMP, OpJmp)
|
|
39 VMCODE1(VM_JMPC, OpJmpC)
|
|
40 VMCODE1(VM_JMPNC, OpJmpNC)
|
|
41 VMCODE1(VM_PRINT, OpPrint)
|
|
42 VMCODE0(VM_RAND, OpRand)
|
|
43 VMCODE0(VM_HALT, OpHalt)
|
|
44
|
|
45 #undef VMCODE0
|
|
46 #undef VMCODE1
|