Sha256: 9ad1d5acd30f25ca4f5fdc162164a885544b69ebf61e80d779c71e509636e5f0

Contents?: true

Size: 1.65 KB

Versions: 12

Compression:

Stored size: 1.65 KB

Contents

use wasmtime_environ::WasmType;

/// Base register used to address the local slot.
///
/// Slots for stack arguments are addressed from the frame pointer.
/// Slots for function-defined locals and for registers are addressed
/// from the stack pointer.
#[derive(Clone, Eq, PartialEq)]
enum Base {
    FP,
    SP,
}

/// A local slot.
///
/// Represents the type, location and addressing mode of a local
/// in the stack's local and argument area.
#[derive(Clone)]
pub(crate) struct LocalSlot {
    /// The offset of the local slot.
    pub offset: u32,
    /// The type contained by this local slot.
    pub ty: WasmType,
    /// Base register associated to this local slot.
    base: Base,
}

impl LocalSlot {
    /// Creates a local slot for a function defined local or
    /// for a spilled argument register.
    pub fn new(ty: WasmType, offset: u32) -> Self {
        Self {
            ty,
            offset,
            base: Base::SP,
        }
    }

    /// Int32 shortcut for `new`.
    pub fn i32(offset: u32) -> Self {
        Self {
            ty: WasmType::I32,
            offset,
            base: Base::SP,
        }
    }

    /// Int64 shortcut for `new`.
    pub fn i64(offset: u32) -> Self {
        Self {
            ty: WasmType::I64,
            offset,
            base: Base::SP,
        }
    }

    /// Creates a local slot for a stack function argument.
    pub fn stack_arg(ty: WasmType, offset: u32) -> Self {
        Self {
            ty,
            offset,
            base: Base::FP,
        }
    }

    /// Check if the local is addressed from the stack pointer.
    pub fn addressed_from_sp(&self) -> bool {
        self.base == Base::SP
    }
}

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
wasmtime-15.0.1 ./ext/cargo-vendor/winch-codegen-0.13.1/src/abi/local.rs
wasmtime-15.0.0 ./ext/cargo-vendor/winch-codegen-0.13.0/src/abi/local.rs
wasmtime-14.0.4 ./ext/cargo-vendor/winch-codegen-0.12.4/src/abi/local.rs
wasmtime-14.0.3 ./ext/cargo-vendor/winch-codegen-0.12.3/src/abi/local.rs
wasmtime-14.0.1 ./ext/cargo-vendor/winch-codegen-0.12.1/src/abi/local.rs
wasmtime-14.0.0 ./ext/cargo-vendor/winch-codegen-0.12.0/src/abi/local.rs
wasmtime-13.0.0 ./ext/cargo-vendor/winch-codegen-0.11.0/src/abi/local.rs
wasmtime-12.0.1 ./ext/cargo-vendor/winch-codegen-0.10.1/src/abi/local.rs
wasmtime-12.0.0 ./ext/cargo-vendor/winch-codegen-0.10.0/src/abi/local.rs
wasmtime-11.0.0 ./ext/cargo-vendor/winch-codegen-0.9.0/src/abi/local.rs
wasmtime-10.0.1 ./ext/cargo-vendor/winch-codegen-0.8.1/src/abi/local.rs
wasmtime-10.0.0 ./ext/cargo-vendor/winch-codegen-0.8.0/src/abi/local.rs