#ifndef POTION_OPCODES_H
#define POTION_OPCODES_H
#if defined(__GNUC__)
#pragma pack(1)
#else
#pragma pack(push, 1)
#endif
typedef struct {
  u8 code:8; 
  int a:12;  
  int b:12;  
} PN_OP;
#if defined(__GNUC__)
#pragma pack()
#else
#pragma pack(pop)
#endif
#define PN_OP_AT(asmb, n) ((PN_OP *)((PNFlex *)asmb)->ptr)[n]
#define PN_OP_LEN(asmb)   (PN_FLEX_SIZE(asmb) / sizeof(PN_OP))
enum PN_OPCODE {
  OP_NONE,
  OP_MOVE,
  OP_LOADK,
  OP_LOADPN,
  OP_SELF,
  OP_NEWTUPLE,
  OP_SETTUPLE,
  OP_GETLOCAL,
  OP_SETLOCAL,
  OP_GETUPVAL,
  OP_SETUPVAL,
  OP_GLOBAL,
  OP_GETTABLE,
  OP_SETTABLE,
  OP_NEWLICK,
  OP_GETPATH,
  OP_SETPATH,
  OP_ADD,
  OP_SUB,
  OP_MULT,
  OP_DIV,
  OP_REM,
  OP_POW,
  OP_NOT,
  OP_CMP,
  OP_EQ,
  OP_NEQ,
  OP_LT,
  OP_LTE,
  OP_GT,
  OP_GTE,
  OP_BITN,
  OP_BITL,
  OP_BITR,
  OP_DEF,
  OP_BIND,
  OP_MSG,
  OP_JMP,
  OP_TEST,
  OP_TESTJMP,
  OP_NOTJMP,
  OP_NAMED,
  OP_CALL,
  OP_CALLSET,
  OP_TAILCALL,
  OP_RETURN,
  OP_PROTO,
  OP_CLASS,
  OP_DBG
};
#endif