pub struct AsmCompiler { /* private fields */ }Expand description
The backend for the circuit compiler.
Implementations§
Source§impl AsmCompilerwhere
SP1Field: PrimeField64,
impl AsmCompilerwhere
SP1Field: PrimeField64,
Sourcepub fn alloc(next_addr: &mut SP1Field) -> Address<SP1Field>
pub fn alloc(next_addr: &mut SP1Field) -> Address<SP1Field>
Allocate a fresh address. Checks that the address space is not full.
Sourcepub fn read_ghost_vaddr(&mut self, vaddr: usize) -> Address<SP1Field>
pub fn read_ghost_vaddr(&mut self, vaddr: usize) -> Address<SP1Field>
Map fp to its existing address without changing its mult.
Ensures that fp has already been assigned an address.
Sourcepub fn read_vaddr(&mut self, vaddr: usize) -> Address<SP1Field>
pub fn read_vaddr(&mut self, vaddr: usize) -> Address<SP1Field>
Map fp to its existing address and increment its mult.
Ensures that fp has already been assigned an address.
pub fn read_vaddr_internal( &mut self, vaddr: usize, increment_mult: bool, ) -> Address<SP1Field>
Sourcepub fn write_fp(&mut self, vaddr: usize) -> Address<SP1Field>
pub fn write_fp(&mut self, vaddr: usize) -> Address<SP1Field>
Map fp to a fresh address and initialize the mult to 0.
Ensures that fp has not already been written to.
Sourcepub fn read_addr(&mut self, addr: Address<SP1Field>) -> &mut SP1Field
pub fn read_addr(&mut self, addr: Address<SP1Field>) -> &mut SP1Field
Increment the existing mult associated with addr.
Ensures that addr has already been assigned a mult.
Sourcepub fn read_ghost_addr(&mut self, addr: Address<SP1Field>) -> &mut SP1Field
pub fn read_ghost_addr(&mut self, addr: Address<SP1Field>) -> &mut SP1Field
Retrieves mult associated with addr.
Ensures that addr has already been assigned a mult.
Sourcepub fn write_addr(&mut self, addr: Address<SP1Field>) -> &mut SP1Field
pub fn write_addr(&mut self, addr: Address<SP1Field>) -> &mut SP1Field
Associate a mult of zero with addr.
Ensures that addr has not already been written to.
Sourcepub fn read_const(
&mut self,
imm: Imm<SP1Field, SP1ExtensionField>,
) -> Address<SP1Field>
pub fn read_const( &mut self, imm: Imm<SP1Field, SP1ExtensionField>, ) -> Address<SP1Field>
Read a constant (a.k.a. immediate).
Increments the mult, first creating an entry if it does not yet exist.
Sourcepub fn read_ghost_const(
&mut self,
imm: Imm<SP1Field, SP1ExtensionField>,
) -> Address<SP1Field>
pub fn read_ghost_const( &mut self, imm: Imm<SP1Field, SP1ExtensionField>, ) -> Address<SP1Field>
Read a constant (a.k.a. immediate).
Does not increment the mult. Creates an entry if it does not yet exist.
Sourcepub fn compile_one<C: Config<N = SP1Field>>(
&mut self,
ir_instr: DslIr<C>,
consumer: impl FnMut(Result<Instruction<SP1Field>, CompileOneErr<C>>),
)
pub fn compile_one<C: Config<N = SP1Field>>( &mut self, ir_instr: DslIr<C>, consumer: impl FnMut(Result<Instruction<SP1Field>, CompileOneErr<C>>), )
Compiles one instruction, passing one or more instructions to consumer.
We do not simply return a Vec for performance reasons — results would be immediately fed
to flat_map, so we employ fusion/deforestation to eliminate intermediate data structures.
Sourcepub fn compile<C: Config<N = SP1Field>>(
&mut self,
program: DslIrProgram<C>,
) -> RecursionProgram<SP1Field>
pub fn compile<C: Config<N = SP1Field>>( &mut self, program: DslIrProgram<C>, ) -> RecursionProgram<SP1Field>
Compile a DslIrProgram that is definitionally assumed to be well-formed.
Returns a well-formed program.
Sourcepub fn compile_inner<C: Config<N = SP1Field>>(
&mut self,
root_block: DslIrBlock<C>,
) -> RootProgram<SP1Field>
pub fn compile_inner<C: Config<N = SP1Field>>( &mut self, root_block: DslIrBlock<C>, ) -> RootProgram<SP1Field>
Compile a root DslIrBlock that has not necessarily been validated.
Returns a program that may be ill-formed.
Trait Implementations§
Source§impl Clone for AsmCompiler
impl Clone for AsmCompiler
Source§fn clone(&self) -> AsmCompiler
fn clone(&self) -> AsmCompiler
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for AsmCompiler
impl Debug for AsmCompiler
Source§impl Default for AsmCompiler
impl Default for AsmCompiler
Source§fn default() -> AsmCompiler
fn default() -> AsmCompiler
Auto Trait Implementations§
impl Freeze for AsmCompiler
impl RefUnwindSafe for AsmCompiler
impl Send for AsmCompiler
impl Sync for AsmCompiler
impl Unpin for AsmCompiler
impl UnsafeUnpin for AsmCompiler
impl UnwindSafe for AsmCompiler
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<F, EF, E> ExtensionOperand<F, EF> for E
impl<F, EF, E> ExtensionOperand<F, EF> for E
fn to_operand(self) -> ExtOperand<F, EF>
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<Challenger, A> FromChallenger<Challenger, A> for Challengerwhere
Challenger: Clone,
impl<Challenger, A> FromChallenger<Challenger, A> for Challengerwhere
Challenger: Clone,
fn from_challenger(challenger: &Challenger, _backend: &A) -> Challenger
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> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.