let get_stack_offset inst = match inst with 
    Push -> 1
  | Pop -> -1
  | Read -> 0
  | Print -> 0
  | PrintLn -> 0
  | Swap -> 0
  | Stop -> 0
  | Return -> 0
  | Cons -> -1
  | Car -> 0
  | Cdr -> 0
  | IsNull -> 0
  | Nil -> 0
  | GetElem -> -1
  | SetElem -> -2
  | And -> -1
  | Or -> -1
  | Add -> -1
  | Sub -> -1
  | Mul -> -1
  | Div -> -1
  | DivI -> -1
  | RemI -> -1
  | Concat -> -1
  | Neg -> 0
  | Frac -> 0
  | Int -> 0
  | Lt -> -1
  | Gt -> -1
  | Lte -> -1
  | Gte -> -1
  | Eq -> -1
  | Neq -> -1
  | ConstUninit -> 0
  | ConstInt _ -> 0
  | ConstFloat _ -> 0
  | ConstString _ -> 0
  | PushSf _ -> 2
  | Assign _ -> 0
  | Acc _ -> 0
  | Rev _ -> 0
  | MakeBlock _ -> 0
  | AllocFields _ -> 0
  | GetField _ -> 0
  | SetField _ -> 0
  | Call _ -> 0
  | Apply -> 0
  | Jmp _ -> 0
  | Jz _ -> 0
  | Jnz _ -> 0
  | RPC _ -> 0
  | Label _ -> 0
  | Comment _ -> 0
  | Annotation _ -> 0
  | GetElemStatic _ -> 0
  | SetElemStatic _ -> -1
  | MakeBlockStatic (_,n) -> -n
  | MakeBlockFilled _ -> -1