pub struct SequencedVisitor<'a, F, V1, V2> { /* private fields */ }
decode
only.Expand description
An OpVisitor
combinator to sequence one visitor and then another.
Implementations§
Source§impl<'a, F, V1, V2> SequencedVisitor<'a, F, V1, V2>
impl<'a, F, V1, V2> SequencedVisitor<'a, F, V1, V2>
Sourcepub fn new(join: F, v1: &'a mut V1, v2: &'a mut V2) -> Self
pub fn new(join: F, v1: &'a mut V1, v2: &'a mut V2) -> Self
Create a new sequenced visitor.
The given join
function is used to combine the results of each
sub-visitor so that it can be returned from this combined visitor.
Trait Implementations§
Source§impl<F, T, V1, V2> ExtendedOpVisitor for SequencedVisitor<'_, F, V1, V2>where
F: FnMut(V1::Return, V2::Return) -> T,
V1: ExtendedOpVisitor,
V2: ExtendedOpVisitor<BytecodeStream = V1::BytecodeStream>,
impl<F, T, V1, V2> ExtendedOpVisitor for SequencedVisitor<'_, F, V1, V2>where
F: FnMut(V1::Return, V2::Return) -> T,
V1: ExtendedOpVisitor,
V2: ExtendedOpVisitor<BytecodeStream = V1::BytecodeStream>,
Source§impl<F, T, V1, V2> OpVisitor for SequencedVisitor<'_, F, V1, V2>
impl<F, T, V1, V2> OpVisitor for SequencedVisitor<'_, F, V1, V2>
Source§fn call(&mut self, offset: PcRelOffset) -> Self::Return
fn call(&mut self, offset: PcRelOffset) -> Self::Return
Transfer control to the PC at the given offset and set the lr
register to the PC just after this instruction.
Source§fn jump(&mut self, offset: PcRelOffset) -> Self::Return
fn jump(&mut self, offset: PcRelOffset) -> Self::Return
Unconditionally transfer control to the PC at the given offset.
Source§fn br_if(&mut self, cond: XReg, offset: PcRelOffset) -> Self::Return
fn br_if(&mut self, cond: XReg, offset: PcRelOffset) -> Self::Return
Conditionally transfer control to the given PC offset if cond
contains a non-zero value.
Source§fn br_if_not(&mut self, cond: XReg, offset: PcRelOffset) -> Self::Return
fn br_if_not(&mut self, cond: XReg, offset: PcRelOffset) -> Self::Return
Conditionally transfer control to the given PC offset if cond
contains a zero value.
Source§fn br_if_xeq32(&mut self, a: XReg, b: XReg, offset: PcRelOffset) -> Self::Return
fn br_if_xeq32(&mut self, a: XReg, b: XReg, offset: PcRelOffset) -> Self::Return
Branch if a == b
.
Source§fn br_if_xneq32(
&mut self,
a: XReg,
b: XReg,
offset: PcRelOffset,
) -> Self::Return
fn br_if_xneq32( &mut self, a: XReg, b: XReg, offset: PcRelOffset, ) -> Self::Return
Branch if a !=
b.
Source§fn br_if_xslt32(
&mut self,
a: XReg,
b: XReg,
offset: PcRelOffset,
) -> Self::Return
fn br_if_xslt32( &mut self, a: XReg, b: XReg, offset: PcRelOffset, ) -> Self::Return
Branch if signed a < b
.
Source§fn br_if_xslteq32(
&mut self,
a: XReg,
b: XReg,
offset: PcRelOffset,
) -> Self::Return
fn br_if_xslteq32( &mut self, a: XReg, b: XReg, offset: PcRelOffset, ) -> Self::Return
Branch if signed a <= b
.
Source§fn br_if_xult32(
&mut self,
a: XReg,
b: XReg,
offset: PcRelOffset,
) -> Self::Return
fn br_if_xult32( &mut self, a: XReg, b: XReg, offset: PcRelOffset, ) -> Self::Return
Branch if unsigned a < b
.
Source§fn br_if_xulteq32(
&mut self,
a: XReg,
b: XReg,
offset: PcRelOffset,
) -> Self::Return
fn br_if_xulteq32( &mut self, a: XReg, b: XReg, offset: PcRelOffset, ) -> Self::Return
Branch if unsigned a <= b
.
Source§fn br_if_xeq64(&mut self, a: XReg, b: XReg, offset: PcRelOffset) -> Self::Return
fn br_if_xeq64(&mut self, a: XReg, b: XReg, offset: PcRelOffset) -> Self::Return
Branch if a == b
.
Source§fn br_if_xneq64(
&mut self,
a: XReg,
b: XReg,
offset: PcRelOffset,
) -> Self::Return
fn br_if_xneq64( &mut self, a: XReg, b: XReg, offset: PcRelOffset, ) -> Self::Return
Branch if a !=
b.
Source§fn br_if_xslt64(
&mut self,
a: XReg,
b: XReg,
offset: PcRelOffset,
) -> Self::Return
fn br_if_xslt64( &mut self, a: XReg, b: XReg, offset: PcRelOffset, ) -> Self::Return
Branch if signed a < b
.
Source§fn br_if_xslteq64(
&mut self,
a: XReg,
b: XReg,
offset: PcRelOffset,
) -> Self::Return
fn br_if_xslteq64( &mut self, a: XReg, b: XReg, offset: PcRelOffset, ) -> Self::Return
Branch if signed a <= b
.
Source§fn br_if_xult64(
&mut self,
a: XReg,
b: XReg,
offset: PcRelOffset,
) -> Self::Return
fn br_if_xult64( &mut self, a: XReg, b: XReg, offset: PcRelOffset, ) -> Self::Return
Branch if unsigned a < b
.
Source§fn br_if_xulteq64(
&mut self,
a: XReg,
b: XReg,
offset: PcRelOffset,
) -> Self::Return
fn br_if_xulteq64( &mut self, a: XReg, b: XReg, offset: PcRelOffset, ) -> Self::Return
Branch if unsigned a <= b
.
Source§fn xadd32(&mut self, operands: BinaryOperands<XReg>) -> Self::Return
fn xadd32(&mut self, operands: BinaryOperands<XReg>) -> Self::Return
32-bit wrapping addition: low32(dst) = low32(src1) + low32(src2)
.
The upper 32-bits of dst
are unmodified.
Source§fn xadd64(&mut self, operands: BinaryOperands<XReg>) -> Self::Return
fn xadd64(&mut self, operands: BinaryOperands<XReg>) -> Self::Return
64-bit wrapping addition: dst = src1 + src2
.
Source§fn xslteq64(&mut self, operands: BinaryOperands<XReg>) -> Self::Return
fn xslteq64(&mut self, operands: BinaryOperands<XReg>) -> Self::Return
64-bit signed less-than-equal.
Source§fn xult64(&mut self, operands: BinaryOperands<XReg>) -> Self::Return
fn xult64(&mut self, operands: BinaryOperands<XReg>) -> Self::Return
64-bit unsigned less-than.
Source§fn xulteq64(&mut self, operands: BinaryOperands<XReg>) -> Self::Return
fn xulteq64(&mut self, operands: BinaryOperands<XReg>) -> Self::Return
64-bit unsigned less-than-equal.
Source§fn xslteq32(&mut self, operands: BinaryOperands<XReg>) -> Self::Return
fn xslteq32(&mut self, operands: BinaryOperands<XReg>) -> Self::Return
32-bit signed less-than-equal.
Source§fn xult32(&mut self, operands: BinaryOperands<XReg>) -> Self::Return
fn xult32(&mut self, operands: BinaryOperands<XReg>) -> Self::Return
32-bit unsigned less-than.
Source§fn xulteq32(&mut self, operands: BinaryOperands<XReg>) -> Self::Return
fn xulteq32(&mut self, operands: BinaryOperands<XReg>) -> Self::Return
32-bit unsigned less-than-equal.
Source§fn load32_u_offset8(&mut self, dst: XReg, ptr: XReg, offset: i8) -> Self::Return
fn load32_u_offset8(&mut self, dst: XReg, ptr: XReg, offset: i8) -> Self::Return
dst = zero_extend(load32(ptr + offset8))
Source§fn load32_s_offset8(&mut self, dst: XReg, ptr: XReg, offset: i8) -> Self::Return
fn load32_s_offset8(&mut self, dst: XReg, ptr: XReg, offset: i8) -> Self::Return
dst = sign_extend(load32(ptr + offset8))
Source§fn load64_offset8(&mut self, dst: XReg, ptr: XReg, offset: i8) -> Self::Return
fn load64_offset8(&mut self, dst: XReg, ptr: XReg, offset: i8) -> Self::Return
dst = load64(ptr + offset8)
Source§fn load32_u_offset64(
&mut self,
dst: XReg,
ptr: XReg,
offset: i64,
) -> Self::Return
fn load32_u_offset64( &mut self, dst: XReg, ptr: XReg, offset: i64, ) -> Self::Return
dst = zero_extend(load32(ptr + offset64))
Source§fn load32_s_offset64(
&mut self,
dst: XReg,
ptr: XReg,
offset: i64,
) -> Self::Return
fn load32_s_offset64( &mut self, dst: XReg, ptr: XReg, offset: i64, ) -> Self::Return
dst = sign_extend(load32(ptr + offset64))
Source§fn load64_offset64(&mut self, dst: XReg, ptr: XReg, offset: i64) -> Self::Return
fn load64_offset64(&mut self, dst: XReg, ptr: XReg, offset: i64) -> Self::Return
dst = load64(ptr + offset64)
Source§fn store32_offset8(&mut self, ptr: XReg, offset: i8, src: XReg) -> Self::Return
fn store32_offset8(&mut self, ptr: XReg, offset: i8, src: XReg) -> Self::Return
*(ptr + sign_extend(offset8)) = low32(src)
Source§fn store64_offset8(&mut self, ptr: XReg, offset: i8, src: XReg) -> Self::Return
fn store64_offset8(&mut self, ptr: XReg, offset: i8, src: XReg) -> Self::Return
*(ptr + sign_extend(offset8)) = src
Source§fn store32_offset64(
&mut self,
ptr: XReg,
offset: i64,
src: XReg,
) -> Self::Return
fn store32_offset64( &mut self, ptr: XReg, offset: i64, src: XReg, ) -> Self::Return
*(ptr + sign_extend(offset64)) = low32(src)
Source§fn store64_offset64(
&mut self,
ptr: XReg,
offset: i64,
src: XReg,
) -> Self::Return
fn store64_offset64( &mut self, ptr: XReg, offset: i64, src: XReg, ) -> Self::Return
*(ptr + sign_extend(offset64)) = src
Source§fn push_frame(&mut self) -> Self::Return
fn push_frame(&mut self) -> Self::Return
push lr; push fp; fp = sp
Source§fn xpush32_many(&mut self, srcs: RegSet<XReg>) -> Self::Return
fn xpush32_many(&mut self, srcs: RegSet<XReg>) -> Self::Return
for src in srcs { xpush32 src }
Source§fn xpush64_many(&mut self, srcs: RegSet<XReg>) -> Self::Return
fn xpush64_many(&mut self, srcs: RegSet<XReg>) -> Self::Return
for src in srcs { xpush64 src }
Source§fn xpop32_many(&mut self, dsts: RegSet<XReg>) -> Self::Return
fn xpop32_many(&mut self, dsts: RegSet<XReg>) -> Self::Return
for dst in dsts.rev() { xpop32 dst }
Source§fn xpop64_many(&mut self, dsts: RegSet<XReg>) -> Self::Return
fn xpop64_many(&mut self, dsts: RegSet<XReg>) -> Self::Return
for dst in dsts.rev() { xpop64 dst }
Source§fn bitcast_int_from_float_32(&mut self, dst: XReg, src: FReg) -> Self::Return
fn bitcast_int_from_float_32(&mut self, dst: XReg, src: FReg) -> Self::Return
low32(dst) = bitcast low32(src) as i32
Source§fn bitcast_int_from_float_64(&mut self, dst: XReg, src: FReg) -> Self::Return
fn bitcast_int_from_float_64(&mut self, dst: XReg, src: FReg) -> Self::Return
dst = bitcast src as i64
Source§fn bitcast_float_from_int_32(&mut self, dst: FReg, src: XReg) -> Self::Return
fn bitcast_float_from_int_32(&mut self, dst: FReg, src: XReg) -> Self::Return
low32(dst) = bitcast low32(src) as f32
Source§fn bitcast_float_from_int_64(&mut self, dst: FReg, src: XReg) -> Self::Return
fn bitcast_float_from_int_64(&mut self, dst: FReg, src: XReg) -> Self::Return
dst = bitcast src as f64