pub enum ShowVal {
Int(i64),
BigInt(BigInt),
Float(f64),
Text(String),
Word32(u32),
}Expand description
One Show output of the soft-core, tagged by the datapath that produced it: an integer Show
(opcode 89, the 32-bit ALU/heap result) or a FLOAT Show (opcode 212 ShowF, an f64 from the
FPU float bank). The chip is dynamically typed at the VM level, but the encoder statically lowers
each Show to the one whose operand type it proved — so the model carries the same distinction and
ShowVal::fmt renders each exactly as the VM does (ints bare, floats via fmt_f64).
Variants§
Int(i64)
BigInt(BigInt)
A BIGINT integer Show — the same integer datapath as ShowVal::Int, but the value OVERFLOWED
the machine word and promoted to an exact BigInt, mirroring the VM’s RuntimeValue::BigInt. The
32-bit oracle and every in-range program stay on Int (the fast path is unchanged); only a value
genuinely exceeding i64 lands here, and ShowVal::fmt prints its full decimal byte-identically
to logicaffeine_base::BigInt’s Display (the same string the VM’s Show emits).
Float(f64)
Text(String)
A TEXT Show (opcode 217 ShowText) — the string decoded from the char-code list on the heap.
The chip sends the char bytes over UART (reply tag 2); the host reassembles the string. The model
carries the reconstituted String so fmt renders it byte-identically to the VM’s Text Show.
Word32(u32)
A WORD32 Show (opcode 221 ShowWord32) — the same 32-bit ALU/heap result as an integer Show,
but the register holds a Word32 (or an intOfWord32 unsigned value), so it renders UNSIGNED
(0..2³²−1) rather than the i32 two’s-complement reinterpretation. Carries the u32 so fmt
matches the VM’s Word32/unsigned-Int Show exactly (SHA-256’s hash words exceed 2³¹).
Implementations§
Source§impl ShowVal
impl ShowVal
Sourcepub fn fmt(&self) -> String
pub fn fmt(&self) -> String
Render exactly as the VM’s Show does: an integer bare, a float through the ONE float-display
authority (logicaffeine_data::fmt::fmt_f64 — the same path RuntimeValue::to_display_string
uses), a Text as its raw characters (RuntimeValue::Text(s) => s), a Word32 as its UNSIGNED
decimal value (Word32’s Display prints the underlying u32), so the model’s output string is
byte-identical to vm_outcome.
Sourcepub fn as_i64(&self) -> i64
pub fn as_i64(&self) -> i64
The integer payload of an integer Show — panics on a float / text / word Show. Used only by
the pure integer differential/testbench paths (run_soft_core), which never emit
ShowF/ShowText/ShowWord32. Returns the full i64 (the datapath width toggle carries 64-bit
values at width == 64; the 32-bit core’s values are the low 32 bits sign-extended, identical).
Trait Implementations§
impl StructuralPartialEq for ShowVal
Auto Trait Implementations§
impl Freeze for ShowVal
impl RefUnwindSafe for ShowVal
impl Send for ShowVal
impl Sync for ShowVal
impl Unpin for ShowVal
impl UnsafeUnpin for ShowVal
impl UnwindSafe for ShowVal
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<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.