pub enum AsmOperand {
In {
reg: AsmRegister,
value: Operand,
},
Out {
reg: AsmRegister,
late: bool,
place: Option<Place>,
},
InOut {
reg: AsmRegister,
late: bool,
in_value: Operand,
out_place: Option<Place>,
},
Const(ConstantExpr),
SymFn(FnPtr),
SymStatic(GlobalDeclRef),
Label(BranchId),
}Expand description
An operand supplied to inline assembly.
Variants§
In
in(reg) value: read value into the register before running the assembly.
Out
out(reg) place or lateout(reg) place: the contents of the register are written to
place at the end of the block, or discarded if place is None (essentially acting as a
clobber).
InOut
inout(reg) value => place or inlateout(reg) value => place. Combines in(reg) value
and out/lateout(reg) place. The input and output places may be the same.
Const(ConstantExpr)
An integer constant substituted into the template.
SymFn(FnPtr)
A function symbol substituted into the template.
SymStatic(GlobalDeclRef)
A static symbol substituted into the template.
Label(BranchId)
The address of a block that the assembly may jump to. That BranchId corresponds to the
targets listed in ullbc_ast::TerminatorKind::InlineAsm and
llbc_ast::StatementKind::InlineAsm.
Trait Implementations§
Source§impl AstVisitable for AsmOperand
impl AstVisitable for AsmOperand
Source§fn drive<V: VisitAst>(&self, v: &mut V) -> ControlFlow<V::Break>
fn drive<V: VisitAst>(&self, v: &mut V) -> ControlFlow<V::Break>
visit_$any
method if it exists, otherwise visit_inner.Source§fn drive_mut<V: VisitAstMut>(&mut self, v: &mut V) -> ControlFlow<V::Break>
fn drive_mut<V: VisitAstMut>(&mut self, v: &mut V) -> ControlFlow<V::Break>
visit_$any
method if it exists, otherwise visit_inner.Source§fn drive_two<V: ZipAst>(&self, other: &Self, v: &mut V) -> ControlFlow<V::Break>
fn drive_two<V: ZipAst>(&self, other: &Self, v: &mut V) -> ControlFlow<V::Break>
visit_$any
method if it exists, otherwise visit_inner.Source§fn dyn_visit<T: AstVisitable>(&self, f: impl FnMut(&T))where
Self: Sized,
fn dyn_visit<T: AstVisitable>(&self, f: impl FnMut(&T))where
Self: Sized,
self, in pre-order traversal.Source§fn dyn_visit_mut<T: AstVisitable>(&mut self, f: impl FnMut(&mut T))where
Self: Sized,
fn dyn_visit_mut<T: AstVisitable>(&mut self, f: impl FnMut(&mut T))where
Self: Sized,
self, in pre-order traversal.Source§impl BodyVisitable for AsmOperand
impl BodyVisitable for AsmOperand
Source§fn drive_body<V: VisitBody>(&self, v: &mut V) -> ControlFlow<V::Break>
fn drive_body<V: VisitBody>(&self, v: &mut V) -> ControlFlow<V::Break>
visit_$any
method if it exists, otherwise visit_inner.Source§fn drive_body_mut<V: VisitBodyMut>(
&mut self,
v: &mut V,
) -> ControlFlow<V::Break>
fn drive_body_mut<V: VisitBodyMut>( &mut self, v: &mut V, ) -> ControlFlow<V::Break>
visit_$any
method if it exists, otherwise visit_inner.Source§fn dyn_visit_in_body<T: BodyVisitable>(&self, f: impl FnMut(&T))where
Self: Sized,
fn dyn_visit_in_body<T: BodyVisitable>(&self, f: impl FnMut(&T))where
Self: Sized,
self, in pre-order traversal.Source§fn dyn_visit_in_body_mut<T: BodyVisitable>(&mut self, f: impl FnMut(&mut T))where
Self: Sized,
fn dyn_visit_in_body_mut<T: BodyVisitable>(&mut self, f: impl FnMut(&mut T))where
Self: Sized,
self, in pre-order traversal.Source§impl Clone for AsmOperand
impl Clone for AsmOperand
Source§fn clone(&self) -> AsmOperand
fn clone(&self) -> AsmOperand
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for AsmOperand
impl Debug for AsmOperand
Source§impl<'de, __State: ?Sized> DeserializeState<'de, __State> for AsmOperandwhere
AsmRegister: DeserializeState<'de, __State>,
Operand: DeserializeState<'de, __State>,
bool: DeserializeState<'de, __State>,
Option<Place>: DeserializeState<'de, __State>,
ConstantExpr: DeserializeState<'de, __State>,
FnPtr: DeserializeState<'de, __State>,
GlobalDeclRef: DeserializeState<'de, __State>,
BranchId: DeserializeState<'de, __State>,
impl<'de, __State: ?Sized> DeserializeState<'de, __State> for AsmOperandwhere
AsmRegister: DeserializeState<'de, __State>,
Operand: DeserializeState<'de, __State>,
bool: DeserializeState<'de, __State>,
Option<Place>: DeserializeState<'de, __State>,
ConstantExpr: DeserializeState<'de, __State>,
FnPtr: DeserializeState<'de, __State>,
GlobalDeclRef: DeserializeState<'de, __State>,
BranchId: DeserializeState<'de, __State>,
fn deserialize_state<__D>(
__state: &__State,
__deserializer: __D,
) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl<'s, V> Drive<'s, V> for AsmOperandwhere
V: Visitor + Visit<'s, AsmRegister> + Visit<'s, Operand> + Visit<'s, bool> + Visit<'s, Option<Place>> + Visit<'s, ConstantExpr> + Visit<'s, FnPtr> + Visit<'s, GlobalDeclRef> + Visit<'s, BranchId>,
impl<'s, V> Drive<'s, V> for AsmOperandwhere
V: Visitor + Visit<'s, AsmRegister> + Visit<'s, Operand> + Visit<'s, bool> + Visit<'s, Option<Place>> + Visit<'s, ConstantExpr> + Visit<'s, FnPtr> + Visit<'s, GlobalDeclRef> + Visit<'s, BranchId>,
Source§fn drive_inner(&'s self, visitor: &mut V) -> ControlFlow<V::Break>
fn drive_inner(&'s self, visitor: &mut V) -> ControlFlow<V::Break>
v.visit() on the immediate contents of self.Source§impl<'s, V> DriveMut<'s, V> for AsmOperandwhere
V: Visitor + VisitMut<'s, AsmRegister> + VisitMut<'s, Operand> + VisitMut<'s, bool> + VisitMut<'s, Option<Place>> + VisitMut<'s, ConstantExpr> + VisitMut<'s, FnPtr> + VisitMut<'s, GlobalDeclRef> + VisitMut<'s, BranchId>,
impl<'s, V> DriveMut<'s, V> for AsmOperandwhere
V: Visitor + VisitMut<'s, AsmRegister> + VisitMut<'s, Operand> + VisitMut<'s, bool> + VisitMut<'s, Option<Place>> + VisitMut<'s, ConstantExpr> + VisitMut<'s, FnPtr> + VisitMut<'s, GlobalDeclRef> + VisitMut<'s, BranchId>,
Source§fn drive_inner_mut(&'s mut self, visitor: &mut V) -> ControlFlow<V::Break>
fn drive_inner_mut(&'s mut self, visitor: &mut V) -> ControlFlow<V::Break>
v.visit() on the immediate contents of self.Source§impl<'s, V> DriveTwo<'s, V> for AsmOperandwhere
V: Visitor<Break: Default> + VisitTwo<'s, AsmRegister> + VisitTwo<'s, Operand> + VisitTwo<'s, bool> + VisitTwo<'s, Option<Place>> + VisitTwo<'s, ConstantExpr> + VisitTwo<'s, FnPtr> + VisitTwo<'s, GlobalDeclRef> + VisitTwo<'s, BranchId>,
impl<'s, V> DriveTwo<'s, V> for AsmOperandwhere
V: Visitor<Break: Default> + VisitTwo<'s, AsmRegister> + VisitTwo<'s, Operand> + VisitTwo<'s, bool> + VisitTwo<'s, Option<Place>> + VisitTwo<'s, ConstantExpr> + VisitTwo<'s, FnPtr> + VisitTwo<'s, GlobalDeclRef> + VisitTwo<'s, BranchId>,
Source§fn drive_two_inner(
&'s self,
other: &'s Self,
visitor: &mut V,
) -> ControlFlow<V::Break>
fn drive_two_inner( &'s self, other: &'s Self, visitor: &mut V, ) -> ControlFlow<V::Break>
v.visit() on the immediate contents of self and other, if they correspond. If
the values don’t match up, this returns Break(Default::default()).impl Eq for AsmOperand
Source§impl<C: AstFormatter> FmtWithCtx<C> for AsmOperand
impl<C: AstFormatter> FmtWithCtx<C> for AsmOperand
Source§impl PartialEq for AsmOperand
impl PartialEq for AsmOperand
Source§impl<__State: ?Sized> SerializeState<__State> for AsmOperandwhere
AsmRegister: SerializeState<__State>,
Operand: SerializeState<__State>,
bool: SerializeState<__State>,
Option<Place>: SerializeState<__State>,
ConstantExpr: SerializeState<__State>,
FnPtr: SerializeState<__State>,
GlobalDeclRef: SerializeState<__State>,
BranchId: SerializeState<__State>,
impl<__State: ?Sized> SerializeState<__State> for AsmOperandwhere
AsmRegister: SerializeState<__State>,
Operand: SerializeState<__State>,
bool: SerializeState<__State>,
Option<Place>: SerializeState<__State>,
ConstantExpr: SerializeState<__State>,
FnPtr: SerializeState<__State>,
GlobalDeclRef: SerializeState<__State>,
BranchId: SerializeState<__State>,
fn serialize_state<__S>(
&self,
__state: &__State,
__serializer: __S,
) -> Result<__S::Ok, __S::Error>where
__S: Serializer,
impl StructuralPartialEq for AsmOperand
Auto Trait Implementations§
impl Freeze for AsmOperand
impl RefUnwindSafe for AsmOperand
impl Send for AsmOperand
impl Sync for AsmOperand
impl Unpin for AsmOperand
impl UnsafeUnpin for AsmOperand
impl UnwindSafe for AsmOperand
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,
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> 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 moreimpl<T> Mappable for T
Source§impl<T> TyVisitable for Twhere
T: AstVisitable,
impl<T> TyVisitable for Twhere
T: AstVisitable,
Source§fn type_info(&self) -> TypeInfo
fn type_info(&self) -> TypeInfo
TypeInfo.Source§fn visit_vars(&mut self, v: &mut impl VarsVisitor)
fn visit_vars(&mut self, v: &mut impl VarsVisitor)
self, as seen from the outside of self. This means
that any variable bound inside self will be skipped, and all the seen De Bruijn indices
will count from the outside of self.Source§fn substitute(self, generics: &GenericArgs) -> Self
fn substitute(self, generics: &GenericArgs) -> Self
self by replacing them with the provided values.
Note: if self is an item that comes from a TraitDecl, you must use
substitute_with_self or substitute_inner_binder, otherwise you’ll get panics.Source§fn substitute_inner_binder(self, generics: &GenericArgs) -> Self
fn substitute_inner_binder(self, generics: &GenericArgs) -> Self
self by replacing them with the provided values.
This is appropriate when substituting an inner binder.Source§fn substitute_explicits(self, generics: &GenericArgs) -> Self
fn substitute_explicits(self, generics: &GenericArgs) -> Self
Source§fn substitute_with_self(
self,
generics: &GenericArgs,
self_ref: &TraitRefKind,
) -> Self
fn substitute_with_self( self, generics: &GenericArgs, self_ref: &TraitRefKind, ) -> Self
TraitRefKind::SelfId trait ref.Source§fn substitute_with_tref(self, tref: &TraitRef) -> Self
fn substitute_with_tref(self, tref: &TraitRef) -> Self
TraitRefKind::SelfId trait ref.Source§fn try_substitute_with_tref(
self,
tref: &TraitRef,
) -> Result<Self, GenericsMismatch>
fn try_substitute_with_tref( self, tref: &TraitRef, ) -> Result<Self, GenericsMismatch>
TraitRefKind::SelfId trait ref.fn try_substitute( self, generics: &GenericArgs, ) -> Result<Self, GenericsMismatch>
fn try_substitute_with_self( self, generics: &GenericArgs, self_ref: &TraitRefKind, ) -> Result<Self, GenericsMismatch>
Source§fn move_under_binder(self) -> Self
fn move_under_binder(self) -> Self
Source§fn move_under_binders(self, depth: DeBruijnId) -> Self
fn move_under_binders(self, depth: DeBruijnId) -> Self
depth binders.Source§fn move_from_under_binder(self) -> Option<Self>
fn move_from_under_binder(self) -> Option<Self>
Source§fn move_from_under_binders(self, depth: DeBruijnId) -> Option<Self>
fn move_from_under_binders(self, depth: DeBruijnId) -> Option<Self>
depth binders. Returns None if it contains a variable bound in
one of these depth binders.Source§fn visit_db_id<B>(
&mut self,
f: impl FnMut(&mut DeBruijnId) -> ControlFlow<B>,
) -> ControlFlow<B>
fn visit_db_id<B>( &mut self, f: impl FnMut(&mut DeBruijnId) -> ControlFlow<B>, ) -> ControlFlow<B>
self, as seen from the outside of self. This means
that any variable bound inside self will be skipped, and all the seen indices will count
from the outside of self.Source§fn collect_regions(&self) -> impl Iterator<Item = Region>
fn collect_regions(&self) -> impl Iterator<Item = Region>
self.