pub enum PassMode {
Ignore,
Direct(ArgAttributes),
Pair(ArgAttributes, ArgAttributes),
Cast {
pad_i32_count: u8,
cast: Box<CastTarget>,
},
Indirect {
attrs: ArgAttributes,
meta_attrs: Option<ArgAttributes>,
address_space: Option<AddressSpace>,
mode: IndirectMode,
},
}Variants§
Ignore
Ignore the argument.
The argument is a ZST.
Direct(ArgAttributes)
Pass the argument directly.
The argument has a layout abi of Scalar or Vector.
Unfortunately due to past mistakes, in rare cases on wasm, it can also be Aggregate.
This is bad since it leaks LLVM implementation details into the ABI.
(Also see https://github.com/rust-lang/rust/issues/115666.)
Pair(ArgAttributes, ArgAttributes)
Pass a pair’s elements directly in two arguments.
The argument has a layout abi of ScalarPair.
Cast
Pass the argument after casting it. See the CastTarget docs for details.
pad_i32 indicates how many Reg::i32() dummy arguments are emitted before the real
argument.
Indirect
Pass the argument indirectly via a hidden pointer.
The meta_attrs value, if any, is for the metadata (vtable or length) of an unsized
argument. (This is the only mode that supports unsized arguments.)
address_space specifies if the pointer is in a special address space or the default one.
mode can be a special way to pass an argument indirectly.
OnStack and AmdgpuKernelArg cannot be used for unsized arguments, i.e., when
meta_attrs is Some.
Fields
attrs: ArgAttributesmeta_attrs: Option<ArgAttributes>address_space: Option<AddressSpace>mode: IndirectModeImplementations§
Trait Implementations§
impl Eq for PassMode
Source§impl StableHash for PassMode
impl StableHash for PassMode
fn stable_hash<__Hcx: StableHashCtxt>( &self, __hcx: &mut __Hcx, __hasher: &mut StableHasher, )
impl StructuralPartialEq for PassMode
Auto Trait Implementations§
impl DynSend for PassMode
impl DynSync for PassMode
impl Freeze for PassMode
impl RefUnwindSafe for PassMode
impl Send for PassMode
impl Sync for PassMode
impl Unpin for PassMode
impl UnsafeUnpin for PassMode
impl UnwindSafe for PassMode
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
Source§fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 48 bytes
Size for each variant:
Ignore: 0 bytesDirect: 24 bytesPair: 40 bytesCast: 24 bytesIndirect: 48 bytes