sqopcodes.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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. #define ENUM_OP(a,b) a = b,
  96. enum SQOpcode
  97. {
  98. SQ_OP_CODE_LIST()
  99. };
  100. #undef ENUM_OP
  101. struct SQInstructionDesc {
  102. const SQChar *name;
  103. };
  104. struct SQInstruction
  105. {
  106. SQInstruction(){};
  107. SQInstruction(SQOpcode _op,SQInteger a0=0,SQInteger a1=0,SQInteger a2=0,SQInteger a3=0)
  108. { op = _op;
  109. _arg0 = (unsigned char)a0;_arg1 = (SQInt32)a1;
  110. _arg2 = (unsigned char)a2;_arg3 = (unsigned char)a3;
  111. }
  112. SQInt32 _arg1;
  113. unsigned char op;
  114. unsigned char _arg0;
  115. unsigned char _arg2;
  116. unsigned char _arg3;
  117. };
  118. #include "squtils.h"
  119. typedef sqvector<SQInstruction> SQInstructionVec;
  120. #define NEW_SLOT_ATTRIBUTES_FLAG 0x01
  121. #define NEW_SLOT_STATIC_FLAG 0x02
  122. #endif // _SQOPCODES_H_