1 /*	see copyright notice in squirrel.h */
2 #ifndef _SQOPCODES_H_
3 #define _SQOPCODES_H_
4 
5 #define MAX_FUNC_STACKSIZE 0xFF
6 #define MAX_LITERALS 0xFFFFFFFF
7 
8 enum BitWiseOP {
9 	BW_AND = 0,
10 	BW_OR = 2,	//like ADD
11 	BW_XOR = 3,
12 	BW_SHIFTL = 4,
13 	BW_SHIFTR = 5,
14 	BW_USHIFTR = 6
15 };
16 
17 enum CmpOP {
18 	CMP_G = 0,
19 	CMP_GE = 2,	//like ADD
20 	CMP_L = 3,
21 	CMP_LE = 4
22 };
23 enum SQOpcode
24 {
25 	_OP_LINE=				0x00,
26 	_OP_LOAD=				0x01,
27 	_OP_DLOAD=				0x02,
28 	_OP_TAILCALL=			0x03,
29 	_OP_CALL=				0x04,
30 	_OP_PREPCALL=			0x05,
31 	_OP_PREPCALLK=			0x06,
32 	_OP_GETK=				0x07,
33 	_OP_MOVE=				0x08,
34 	_OP_NEWSLOT=			0x09,
35 	_OP_DELETE=				0x0A,
36 	_OP_SET=				0x0B,
37 	_OP_GET=				0x0C,
38 	_OP_EQ=					0x0D,
39 	_OP_NE=					0x0E,
40 	_OP_ARITH=				0x0F,
41 	_OP_BITW=				0x10,
42 	_OP_RETURN=				0x11,
43 	_OP_LOADNULLS=			0x12,
44 	_OP_LOADROOTTABLE=		0x13,
45 	_OP_LOADBOOL=			0x14,
46 	_OP_DMOVE=				0x15,
47 	_OP_JMP=				0x16,
48 	_OP_JNZ=				0x17,
49 	_OP_JZ=					0x18,
50 	_OP_LOADFREEVAR=		0x19,
51 	_OP_VARGC=				0x1A,
52 	_OP_GETVARGV=			0x1B,
53 	_OP_NEWTABLE=			0x1C,
54 	_OP_NEWARRAY=			0x1D,
55 	_OP_APPENDARRAY=		0x1E,
56 	_OP_GETPARENT=			0x1F,
57 	_OP_COMPARITH=			0x20,
58 	_OP_COMPARITHL=			0x21,
59 	_OP_INC=				0x22,
60 	_OP_INCL=				0x23,
61 	_OP_PINC=				0x24,
62 	_OP_PINCL=				0x25,
63 	_OP_CMP=				0x26,
64 	_OP_EXISTS=				0x27,
65 	_OP_INSTANCEOF=			0x28,
66 	_OP_AND=				0x29,
67 	_OP_OR=					0x2A,
68 	_OP_NEG=				0x2B,
69 	_OP_NOT=				0x2C,
70 	_OP_BWNOT=				0x2D,
71 	_OP_CLOSURE=			0x2E,
72 	_OP_YIELD=				0x2F,
73 	_OP_RESUME=				0x30,
74 	_OP_FOREACH=			0x31,
75 	_OP_DELEGATE=			0x32,
76 	_OP_CLONE=				0x33,
77 	_OP_TYPEOF=				0x34,
78 	_OP_PUSHTRAP=			0x35,
79 	_OP_POPTRAP=			0x36,
80 	_OP_THROW=				0x37,
81 	_OP_CLASS=				0x38,
82 	_OP_NEWSLOTA=			0x39,
83 
84 
85 };
86 struct SQInstructionDesc {
87 	const SQChar *name;
88 };
89 
90 struct SQInstruction
91 {
SQInstructionSQInstruction92 	SQInstruction(){};
93 	SQInstruction(SQOpcode _op,SQInteger a0=0,SQInteger a1=0,SQInteger a2=0,SQInteger a3=0)
94 	{	op = _op;
95 		_arg0 = a0;_arg1 = a1;
96 		_arg2 = a2;_arg3 = a3;
97 	}
98 
99 
100 	SQInt32 _arg1;
101 	unsigned char op;
102 	unsigned char _arg0;
103 	unsigned char _arg2;
104 	unsigned char _arg3;
105 };
106 
107 #include "squtils.h"
108 typedef sqvector<SQInstruction> SQInstructionVec;
109 
110 #endif // _SQOPCODES_H_
111