// Copyright 2021 The IREE Authors
//
// Licensed under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

#ifndef IREE_VM_BYTECODE_DISASM_H_
#define IREE_VM_BYTECODE_DISASM_H_

#include <stdio.h>

#include "iree/base/string_builder.h"
#include "iree/vm/bytecode_dispatch_util.h"
#include "iree/vm/bytecode_module_impl.h"
#include "iree/vm/stack.h"

// Controls how bytecode disassembly is formatted.
typedef enum iree_vm_bytecode_disasm_format_e {
  IREE_VM_BYTECODE_DISASM_FORMAT_DEFAULT = 0,
  // Includes the input register values inline in the op text.
  // Example: `%i0 <= ShrI32U %i2(5), %i3(6)`
  IREE_VM_BYTECODE_DISASM_FORMAT_INLINE_VALUES = 1u << 0,
} iree_vm_bytecode_disasm_format_t;

// Disassembles the bytecode operation at |pc| using the provided module state.
// Appends the disasembled op to |string_builder| in a format based on |format|.
// If |regs| are available then values can be added using the format mode.
//
// Example: `%i0 <= ShrI32U %i2, %i3`
//
// WARNING: this does not currently perform any verification on the bytecode;
// it's assumed all bytecode is valid. This is a debug tool: you shouldn't be
// running this in production on untrusted inputs anyway.
iree_status_t iree_vm_bytecode_disasm_op(
    iree_vm_bytecode_module_t* module,
    iree_vm_bytecode_module_state_t* module_state, uint16_t function_ordinal,
    iree_vm_source_offset_t pc, const iree_vm_registers_t* regs,
    iree_vm_bytecode_disasm_format_t format,
    iree_string_builder_t* string_builder);

iree_status_t iree_vm_bytecode_trace_disasm(iree_vm_stack_frame_t* frame,
                                            iree_vm_source_offset_t pc,
                                            const iree_vm_registers_t* regs,
                                            FILE* file);

#endif  // IREE_VM_BYTECODE_DISASM_H_
