opcodes.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /**
  2. * \file
  3. */
  4. #ifndef __MONO_METADATA_OPCODES_H__
  5. #define __MONO_METADATA_OPCODES_H__
  6. /*
  7. * opcodes.h: CIL instruction information
  8. *
  9. * Author:
  10. * Paolo Molaro (lupus@ximian.com)
  11. *
  12. * (C) 2002 Ximian, Inc.
  13. */
  14. #include <mono/utils/mono-publib.h>
  15. MONO_BEGIN_DECLS
  16. #define MONO_CUSTOM_PREFIX 0xf0
  17. #define OPDEF(a,b,c,d,e,f,g,h,i,j) \
  18. MONO_ ## a,
  19. typedef enum MonoOpcodeEnum {
  20. MonoOpcodeEnum_Invalid = -1,
  21. #include "mono/cil/opcode.def"
  22. MONO_CEE_LAST
  23. } MonoOpcodeEnum;
  24. #undef OPDEF
  25. enum {
  26. MONO_FLOW_NEXT,
  27. MONO_FLOW_BRANCH,
  28. MONO_FLOW_COND_BRANCH,
  29. MONO_FLOW_ERROR,
  30. MONO_FLOW_CALL,
  31. MONO_FLOW_RETURN,
  32. MONO_FLOW_META
  33. };
  34. enum {
  35. MonoInlineNone = 0,
  36. MonoInlineType = 1,
  37. MonoInlineField = 2,
  38. MonoInlineMethod = 3,
  39. MonoInlineTok = 4,
  40. MonoInlineString = 5,
  41. MonoInlineSig = 6,
  42. MonoInlineVar = 7,
  43. MonoShortInlineVar = 8,
  44. MonoInlineBrTarget = 9,
  45. MonoShortInlineBrTarget = 10,
  46. MonoInlineSwitch = 11,
  47. MonoInlineR = 12,
  48. MonoShortInlineR = 13,
  49. MonoInlineI = 14,
  50. MonoShortInlineI = 15,
  51. MonoInlineI8 = 16,
  52. };
  53. typedef struct {
  54. unsigned char argument;
  55. unsigned char flow_type;
  56. unsigned short opval;
  57. } MonoOpcode;
  58. MONO_API_DATA const MonoOpcode mono_opcodes [];
  59. MONO_API const char*
  60. mono_opcode_name (int opcode);
  61. MONO_API MonoOpcodeEnum
  62. mono_opcode_value (const mono_byte **ip, const mono_byte *end);
  63. MONO_END_DECLS
  64. #endif /* __MONO_METADATA_OPCODES_H__ */