/*
 * Copyright (c) 2026-present, the Ladybird developers.
 *
 * SPDX-License-Identifier: BSD-2-Clause
 */

#pragma once

/* Generated with cbindgen:0.29.2 */

#include <stdint.h>
#include <stddef.h>

namespace Wasm {
namespace Cranelift {

/// Immediates:
///   constants:    imm1 = value (i32 sign-extended, i64, or f32/f64 bits)
///   local ops:    imm1 = local index
///   branch:       imm1 = label index (from control stack)
///   block/loop:   imm1 = end_ip, imm2 = else_ip (-1 if none), imm3 = arity | (param_count << 16)
///   call:         imm1 = function index
///   memory ops:   imm1 = offset, imm3 = memory index
struct CraneliftInsn {
    uint64_t opcode;
    uint8_t sources[3];
    uint8_t destination;
    int64_t imm1;
    int64_t imm2;
    uint32_t imm3;
    uint32_t _pad;
};

struct RuntimeHelpers {
    size_t call_function;
    size_t set_trap;
    size_t memory_load8_s;
    size_t memory_load8_u;
    size_t memory_load16_s;
    size_t memory_load16_u;
    size_t memory_load32_s;
    size_t memory_load32_u;
    size_t memory_load64;
    size_t memory_store8;
    size_t memory_store16;
    size_t memory_store32;
    size_t memory_store64;
    size_t memory_size;
    size_t memory_grow;
    size_t read_global;
    size_t write_global;
    size_t stack_push;
    size_t stack_pop;
    size_t stack_size;
    size_t stack_cleanup;
    size_t callrec_read;
    size_t callrec_write;
    size_t call_with_record;
    size_t direct_call_0;
    size_t direct_call_1;
    size_t direct_call_2;
    size_t direct_call_3;
    size_t call_indirect;
    size_t memory_copy;
    size_t memory_fill;
    uint32_t regs_offset;
    uint32_t value_size;
    uint32_t locals_base_offset;
    uint32_t default_memory_base_offset;
    uint32_t compiled_call_result_scratch_offset;
};

}  // namespace Cranelift
}  // namespace Wasm
