sqopcodes.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. /* see copyright notice in squirrel.h */
  2. #ifndef _SQOPCODES_H_
  3. #define _SQOPCODES_H_
  4. #define MAX_FUNC_STACKSIZE 0xFF
  5. #define MAX_LITERALS ((SQInteger)0x7FFFFFFF)
  6. enum BitWiseOP {
  7. BW_AND = 0,
  8. BW_OR = 2,
  9. BW_XOR = 3,
  10. BW_SHIFTL = 4,
  11. BW_SHIFTR = 5,
  12. BW_USHIFTR = 6
  13. };
  14. enum CmpOP {
  15. CMP_G = 0,
  16. CMP_GE = 2,
  17. CMP_L = 3,
  18. CMP_LE = 4,
  19. CMP_3W = 5
  20. };
  21. enum NewObjectType {
  22. NOT_TABLE = 0,
  23. NOT_ARRAY = 1,
  24. NOT_CLASS = 2
  25. };
  26. enum AppendArrayType {
  27. AAT_STACK = 0,
  28. AAT_LITERAL = 1,
  29. AAT_INT = 2,
  30. AAT_FLOAT = 3,
  31. AAT_BOOL = 4
  32. };
  33. #define SQ_OP_CODE_LIST() \
  34. ENUM_OP(_OP_LINE, 0x00)\
  35. ENUM_OP(_OP_LOAD, 0x01)\
  36. ENUM_OP(_OP_LOADINT, 0x02)\
  37. ENUM_OP(_OP_LOADFLOAT, 0x03)\
  38. ENUM_OP(_OP_DLOAD, 0x04)\
  39. ENUM_OP(_OP_TAILCALL, 0x05)\
  40. ENUM_OP(_OP_CALL, 0x06)\
  41. ENUM_OP(_OP_PREPCALL, 0x07)\
  42. ENUM_OP(_OP_PREPCALLK, 0x08)\
  43. ENUM_OP(_OP_GETK, 0x09)\
  44. ENUM_OP(_OP_MOVE, 0x0A)\
  45. ENUM_OP(_OP_NEWSLOT, 0x0B)\
  46. ENUM_OP(_OP_DELETE, 0x0C)\
  47. ENUM_OP(_OP_SET, 0x0D)\
  48. ENUM_OP(_OP_GET, 0x0E)\
  49. ENUM_OP(_OP_EQ, 0x0F)\
  50. ENUM_OP(_OP_NE, 0x10)\
  51. ENUM_OP(_OP_ADD, 0x11)\
  52. ENUM_OP(_OP_SUB, 0x12)\
  53. ENUM_OP(_OP_MUL, 0x13)\
  54. ENUM_OP(_OP_DIV, 0x14)\
  55. ENUM_OP(_OP_MOD, 0x15)\
  56. ENUM_OP(_OP_BITW, 0x16)\
  57. ENUM_OP(_OP_RETURN, 0x17)\
  58. ENUM_OP(_OP_LOADNULLS, 0x18)\
  59. ENUM_OP(_OP_LOADROOT, 0x19)\
  60. ENUM_OP(_OP_LOADBOOL, 0x1A)\
  61. ENUM_OP(_OP_DMOVE, 0x1B)\
  62. ENUM_OP(_OP_JMP, 0x1C)\
  63. ENUM_OP(_OP_JCMP, 0x1D)\
  64. ENUM_OP(_OP_JZ, 0x1E)\
  65. ENUM_OP(_OP_SETOUTER, 0x1F)\
  66. ENUM_OP(_OP_GETOUTER, 0x20)\
  67. ENUM_OP(_OP_NEWOBJ, 0x21)\
  68. ENUM_OP(_OP_APPENDARRAY, 0x22)\
  69. ENUM_OP(_OP_COMPARITH, 0x23)\
  70. ENUM_OP(_OP_INC, 0x24)\
  71. ENUM_OP(_OP_INCL, 0x25)\
  72. ENUM_OP(_OP_PINC, 0x26)\
  73. ENUM_OP(_OP_PINCL, 0x27)\
  74. ENUM_OP(_OP_CMP, 0x28)\
  75. ENUM_OP(_OP_EXISTS, 0x29)\
  76. ENUM_OP(_OP_INSTANCEOF, 0x2A)\
  77. ENUM_OP(_OP_AND, 0x2B)\
  78. ENUM_OP(_OP_OR, 0x2C)\
  79. ENUM_OP(_OP_NEG, 0x2D)\
  80. ENUM_OP(_OP_NOT, 0x2E)\
  81. ENUM_OP(_OP_BWNOT, 0x2F)\
  82. ENUM_OP(_OP_CLOSURE, 0x30)\
  83. ENUM_OP(_OP_YIELD, 0x31)\
  84. ENUM_OP(_OP_RESUME, 0x32)\
  85. ENUM_OP(_OP_FOREACH, 0x33)\
  86. ENUM_OP(_OP_POSTFOREACH, 0x34)\
  87. ENUM_OP(_OP_CLONE, 0x35)\
  88. ENUM_OP(_OP_TYPEOF, 0x36)\
  89. ENUM_OP(_OP_PUSHTRAP, 0x37)\
  90. ENUM_OP(_OP_POPTRAP, 0x38)\
  91. ENUM_OP(_OP_THROW, 0x39)\
  92. ENUM_OP(_OP_NEWSLOTA, 0x3A)\
  93. ENUM_OP(_OP_GETBASE, 0x3B)\
  94. ENUM_OP(_OP_CLOSE, 0x3C)\
  95. ENUM_OP(_OP_EQI, 0x3D)\
  96. ENUM_OP(_OP_NEI, 0x3E)\
  97. ENUM_OP(_OP_NOP, 0x3F)\
  98. ENUM_OP(_OP__LAST__, 0x40)
  99. //#define ENUM_OP(a,b) a = b,
  100. //there is no point right now to manually number the opcodes
  101. #define ENUM_OP(a,b) a,
  102. enum SQOpcode
  103. {
  104. SQ_OP_CODE_LIST()
  105. };
  106. #undef ENUM_OP
  107. struct SQInstructionDesc {
  108. const SQChar *name;
  109. };
  110. struct SQInstruction
  111. {
  112. SQInstruction(){};
  113. SQInstruction(SQOpcode _op,SQInteger a0=0,SQInteger a1=0,SQInteger a2=0,SQInteger a3=0)
  114. : _arg1((SQInt32)a1),op((unsigned char)_op),_arg0((unsigned char)a0),
  115. _arg2((unsigned char)a2),_arg3((unsigned char)a3)
  116. {}
  117. SQInt32 _arg1;
  118. unsigned char op;
  119. unsigned char _arg0;
  120. unsigned char _arg2;
  121. unsigned char _arg3;
  122. };
  123. #include "squtils.h"
  124. typedef sqvector<SQInstruction> SQInstructionVec;
  125. #define NEW_SLOT_ATTRIBUTES_FLAG 0x01
  126. #define NEW_SLOT_STATIC_FLAG 0x02
  127. #endif // _SQOPCODES_H_