Struct GfaCore

Source
pub struct GfaCore { /* private fields */ }
Expand description

An extension of AluVM core for the GFA256 ISA.

Implementations§

Source§

impl GfaCore

Microcode for finite field arithmetics.

Source

pub fn fq(&self) -> u256

Get value of the field order register (FQ).

Source

pub fn test(&self, src: RegE) -> Status

Test whether the register has a value, returning a status.

§Register modification

No registers are modified, including CK and CO.

Source

pub fn fits(&self, src: RegE, bits: Bits) -> Option<bool>

Check whether a register value fits the provided number of bits.

§Returns

None, if the register contains no value. Otherwise, a boolean value indicating the test result.

§Register modification

No registers are modified, including CK and CO.

Source

pub fn mov(&mut self, dst: RegE, src: RegE)

Move a value from the src to dst register.

The value of the src register is not changed.

If the src register does not have a value, sets dst to None, clearing any previous value in it.

Source

pub fn eqv(&mut self, src1: RegE, src2: RegE) -> Status

Checks the equivalence of values in src1 and src2.

If both registers do not have a value, returns Status::Fail.

Source

pub fn add_mod(&mut self, dst_src: RegE, src: RegE) -> Status

Add a value from the src register to dst_src value, storing the result back in dst_src.

Overflow is handled according to finite field arithmetics, by doing a modulo-division. The fact of the overflow cannot be determined in order to keep the implementation compatible with zk-STARK and zk-SNARK circuits and arithmetizations.

§Returns

If any of src or dst_src registers do not have a value, returns Status::Fail. Otherwise, returns success.

Source

pub fn mul_mod(&mut self, dst_src: RegE, src: RegE) -> Status

Multiply a value from the src register to dst_src value, storing the result back in dst_src.

Overflow is handled according to finite field arithmetics, by doing a modulo-division. The fact of the overflow cannot be determined in order to keep the implementation compatible with zk-STARK and zk-SNARK circuits and arithmetizations.

§Returns

If any of src or dst_src registers do not have a value, returns Status::Fail. Otherwise, returns success.

Source

pub fn neg_mod(&mut self, dst_src: RegE, src: RegE) -> Status

Negate a value in the dst_src register by subtracting it from the field order, stored in FQ register.

§Returns

If the dst_src register does not have a value, returns Status::Fail. Otherwise, returns success.

Trait Implementations§

Source§

impl Clone for GfaCore

Source§

fn clone(&self) -> GfaCore

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl CoreExt for GfaCore

Source§

type Reg = RegE

A type of registers provided by the ISA.
Source§

type Config = GfaConfig

A configuration used in initializing the core extension.
Source§

fn with(config: <GfaCore as CoreExt>::Config) -> GfaCore

Constructs the core extensions to be added to AluVM core.
Source§

fn get(&self, reg: <GfaCore as CoreExt>::Reg) -> Option<fe256>

Read the value of a register.
Source§

fn clr(&mut self, reg: <GfaCore as CoreExt>::Reg)

Clear the register by setting it to None.
Source§

fn put(&mut self, reg: <GfaCore as CoreExt>::Reg, val: Option<fe256>)

Put either a value or None to the register.
Source§

fn reset(&mut self)

Reset the core extension by setting all the registers to None.
Source§

fn set(&mut self, reg: Self::Reg, val: <Self::Reg as Register>::Value)

Set the register to the provided value.
Source§

impl Debug for GfaCore

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl PartialEq for GfaCore

Source§

fn eq(&self, other: &GfaCore) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Supercore<GfaCore> for UsonicCore

Source§

fn subcore(&self) -> GfaCore

An ISA extension subcore.
Source§

fn merge_subcore(&mut self, subcore: GfaCore)

Merge the values generated in the subcore ISA extension with the main core.
Source§

impl Supercore<NoExt> for GfaCore

Source§

fn subcore(&self) -> NoExt

An ISA extension subcore.
Source§

fn merge_subcore(&mut self, _subcore: NoExt)

Merge the values generated in the subcore ISA extension with the main core.
Source§

impl Copy for GfaCore

Source§

impl Eq for GfaCore

Source§

impl StructuralPartialEq for GfaCore

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> VerifyEq for T
where T: Eq,

Source§

fn verify_eq(&self, other: &T) -> bool

Verifies commit-equivalence of two instances of the same type.