upgrade to Fayalite edcc5927a5f9ebca6

as part of this I switched to using Fayalite's UIntInRangeInclusive instead of using a custom Length struct
This commit is contained in:
Jacob Lifshay 2025-10-23 23:22:27 -07:00
parent 0e7a518bd0
commit 5e8bc3e580
Signed by: programmerjake
SSH key fingerprint: SHA256:HnFTLGpSm4Q4Fj502oCFisjZSoakwEuTsJJMSke63RQ
6 changed files with 608 additions and 691 deletions

166
Cargo.lock generated
View file

@ -1,18 +1,6 @@
# This file is automatically @generated by Cargo. # This file is automatically @generated by Cargo.
# It is not intended for manual editing. # It is not intended for manual editing.
version = 3 version = 4
[[package]]
name = "ahash"
version = "0.8.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
dependencies = [
"cfg-if",
"once_cell",
"version_check",
"zerocopy",
]
[[package]] [[package]]
name = "allocator-api2" name = "allocator-api2"
@ -93,6 +81,12 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf"
[[package]]
name = "base64"
version = "0.22.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
[[package]] [[package]]
name = "bitflags" name = "bitflags"
version = "2.6.0" version = "2.6.0"
@ -172,6 +166,15 @@ dependencies = [
"strsim", "strsim",
] ]
[[package]]
name = "clap_complete"
version = "4.5.59"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2348487adcd4631696ced64ccdb40d38ac4d31cae7f2eec8817fcea1b9d1c43c"
dependencies = [
"clap",
]
[[package]] [[package]]
name = "clap_derive" name = "clap_derive"
version = "4.5.18" version = "4.5.18"
@ -300,20 +303,22 @@ checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6"
[[package]] [[package]]
name = "fayalite" name = "fayalite"
version = "0.3.0" version = "0.3.0"
source = "git+https://git.libre-chip.org/libre-chip/fayalite.git?branch=master#bd75fdfefd642f6dd2210cfb003fa63f9dce114e" source = "git+https://git.libre-chip.org/libre-chip/fayalite.git?branch=master#edcc5927a5f9ebca6df5720bb1f5931e50095a57"
dependencies = [ dependencies = [
"base64",
"bitvec", "bitvec",
"blake3", "blake3",
"clap", "clap",
"clap_complete",
"ctor", "ctor",
"eyre", "eyre",
"fayalite-proc-macros", "fayalite-proc-macros",
"fayalite-visit-gen", "fayalite-visit-gen",
"hashbrown", "hashbrown 0.15.5",
"jobslot", "jobslot",
"num-bigint", "num-bigint",
"num-traits", "num-traits",
"os_pipe", "ordered-float",
"petgraph", "petgraph",
"serde", "serde",
"serde_json", "serde_json",
@ -325,7 +330,7 @@ dependencies = [
[[package]] [[package]]
name = "fayalite-proc-macros" name = "fayalite-proc-macros"
version = "0.3.0" version = "0.3.0"
source = "git+https://git.libre-chip.org/libre-chip/fayalite.git?branch=master#bd75fdfefd642f6dd2210cfb003fa63f9dce114e" source = "git+https://git.libre-chip.org/libre-chip/fayalite.git?branch=master#edcc5927a5f9ebca6df5720bb1f5931e50095a57"
dependencies = [ dependencies = [
"fayalite-proc-macros-impl", "fayalite-proc-macros-impl",
] ]
@ -333,7 +338,7 @@ dependencies = [
[[package]] [[package]]
name = "fayalite-proc-macros-impl" name = "fayalite-proc-macros-impl"
version = "0.3.0" version = "0.3.0"
source = "git+https://git.libre-chip.org/libre-chip/fayalite.git?branch=master#bd75fdfefd642f6dd2210cfb003fa63f9dce114e" source = "git+https://git.libre-chip.org/libre-chip/fayalite.git?branch=master#edcc5927a5f9ebca6df5720bb1f5931e50095a57"
dependencies = [ dependencies = [
"base16ct", "base16ct",
"num-bigint", "num-bigint",
@ -348,7 +353,7 @@ dependencies = [
[[package]] [[package]]
name = "fayalite-visit-gen" name = "fayalite-visit-gen"
version = "0.3.0" version = "0.3.0"
source = "git+https://git.libre-chip.org/libre-chip/fayalite.git?branch=master#bd75fdfefd642f6dd2210cfb003fa63f9dce114e" source = "git+https://git.libre-chip.org/libre-chip/fayalite.git?branch=master#edcc5927a5f9ebca6df5720bb1f5931e50095a57"
dependencies = [ dependencies = [
"indexmap", "indexmap",
"prettyplease", "prettyplease",
@ -366,6 +371,12 @@ version = "0.5.7"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99"
[[package]]
name = "foldhash"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
[[package]] [[package]]
name = "funty" name = "funty"
version = "2.0.0" version = "2.0.0"
@ -384,13 +395,14 @@ dependencies = [
[[package]] [[package]]
name = "getrandom" name = "getrandom"
version = "0.2.15" version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"libc", "libc",
"wasi", "r-efi",
"wasip2",
] ]
[[package]] [[package]]
@ -398,9 +410,16 @@ name = "hashbrown"
version = "0.14.5" version = "0.14.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
[[package]]
name = "hashbrown"
version = "0.15.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
dependencies = [ dependencies = [
"ahash",
"allocator-api2", "allocator-api2",
"equivalent",
"foldhash",
] ]
[[package]] [[package]]
@ -431,7 +450,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5"
dependencies = [ dependencies = [
"equivalent", "equivalent",
"hashbrown", "hashbrown 0.14.5",
"serde", "serde",
] ]
@ -449,16 +468,16 @@ checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b"
[[package]] [[package]]
name = "jobslot" name = "jobslot"
version = "0.2.19" version = "0.2.23"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fe10868679d7a24c2c67d862d0e64a342ce9aef7cdde9ce8019bd35d353d458d" checksum = "58715c67c327da7f1558708348d68c207fd54900c4ae0529e29305d04d795b8c"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"derive_destructure2", "derive_destructure2",
"getrandom", "getrandom",
"libc", "libc",
"scopeguard", "scopeguard",
"windows-sys 0.59.0", "windows-sys 0.61.2",
] ]
[[package]] [[package]]
@ -514,22 +533,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775"
[[package]] [[package]]
name = "os_pipe" name = "ordered-float"
version = "1.2.1" version = "5.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5ffd2b0a5634335b135d5728d84c5e0fd726954b87111f7506a61c502280d982" checksum = "7f4779c6901a562440c3786d08192c6fbda7c1c2060edd10006b05ee35d10f2d"
dependencies = [ dependencies = [
"libc", "num-traits",
"windows-sys 0.59.0", "rand",
"serde",
] ]
[[package]] [[package]]
name = "petgraph" name = "petgraph"
version = "0.6.5" version = "0.8.3"
source = "git+https://github.com/programmerjake/petgraph.git?rev=258ea8071209a924b73fe96f9f87a3b7b45cbc9f#258ea8071209a924b73fe96f9f87a3b7b45cbc9f" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455"
dependencies = [ dependencies = [
"fixedbitset", "fixedbitset",
"hashbrown 0.15.5",
"indexmap", "indexmap",
"serde",
] ]
[[package]] [[package]]
@ -560,12 +583,37 @@ dependencies = [
"proc-macro2", "proc-macro2",
] ]
[[package]]
name = "r-efi"
version = "5.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
[[package]] [[package]]
name = "radium" name = "radium"
version = "0.7.0" version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09"
[[package]]
name = "rand"
version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
dependencies = [
"rand_core",
"serde",
]
[[package]]
name = "rand_core"
version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
dependencies = [
"serde",
]
[[package]] [[package]]
name = "rustix" name = "rustix"
version = "0.38.37" version = "0.38.37"
@ -728,10 +776,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
[[package]] [[package]]
name = "wasi" name = "wasip2"
version = "0.11.0+wasi-snapshot-preview1" version = "1.0.1+wasi-0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7"
dependencies = [
"wit-bindgen",
]
[[package]] [[package]]
name = "which" name = "which"
@ -745,6 +796,12 @@ dependencies = [
"winsafe", "winsafe",
] ]
[[package]]
name = "windows-link"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
[[package]] [[package]]
name = "windows-sys" name = "windows-sys"
version = "0.52.0" version = "0.52.0"
@ -763,6 +820,15 @@ dependencies = [
"windows-targets", "windows-targets",
] ]
[[package]]
name = "windows-sys"
version = "0.61.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
dependencies = [
"windows-link",
]
[[package]] [[package]]
name = "windows-targets" name = "windows-targets"
version = "0.52.6" version = "0.52.6"
@ -833,6 +899,12 @@ version = "0.0.19"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904" checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904"
[[package]]
name = "wit-bindgen"
version = "0.46.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59"
[[package]] [[package]]
name = "wyz" name = "wyz"
version = "0.5.1" version = "0.5.1"
@ -841,23 +913,3 @@ checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed"
dependencies = [ dependencies = [
"tap", "tap",
] ]
[[package]]
name = "zerocopy"
version = "0.7.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
dependencies = [
"zerocopy-derive",
]
[[package]]
name = "zerocopy-derive"
version = "0.7.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
dependencies = [
"proc-macro2",
"quote",
"syn",
]

View file

@ -5,6 +5,7 @@ use fayalite::{
expr::ops::{ArrayLiteral, ExprPartialEq}, expr::ops::{ArrayLiteral, ExprPartialEq},
intern::Interned, intern::Interned,
prelude::*, prelude::*,
sim::value::SimValuePartialEq,
}; };
use std::{fmt, marker::PhantomData, ops::Range}; use std::{fmt, marker::PhantomData, ops::Range};
@ -181,6 +182,12 @@ impl ExprPartialEq<Self> for OutputIntegerMode {
} }
} }
impl SimValuePartialEq<Self> for OutputIntegerMode {
fn sim_value_eq(this: &SimValue<Self>, other: &SimValue<Self>) -> bool {
SimValue::opaque(this) == SimValue::opaque(other)
}
}
pub const MOP_IMM_WIDTH: usize = 34; pub const MOP_IMM_WIDTH: usize = 34;
pub const MOP_MIN_REG_WIDTH: usize = 8; pub const MOP_MIN_REG_WIDTH: usize = 8;
pub const COMMON_MOP_SRC_LEN: usize = 3; pub const COMMON_MOP_SRC_LEN: usize = 3;

View file

@ -120,10 +120,7 @@ pub fn unit_free_regs_tracker(
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use fayalite::{ use fayalite::{firrtl::ExportOptions, module::transform::simplify_enums::SimplifyEnumsKind};
cli::FormalMode, firrtl::ExportOptions,
module::transform::simplify_enums::SimplifyEnumsKind, testing::assert_formal,
};
use std::num::NonZero; use std::num::NonZero;
fn test_unit_free_regs_tracker( fn test_unit_free_regs_tracker(

View file

@ -1,147 +1,10 @@
// SPDX-License-Identifier: LGPL-3.0-or-later // SPDX-License-Identifier: LGPL-3.0-or-later
// See Notices.txt for copyright information // See Notices.txt for copyright information
use fayalite::{ use fayalite::{expr::ops::ExprIndex, int::UIntInRangeInclusiveType, prelude::*};
expr::ops::{ExprCastTo, ExprIndex, ExprPartialEq, ExprPartialOrd},
int::SizeType,
intern::{Intern, Interned},
prelude::*,
ty::{MatchVariantWithoutScope, StaticType, TypeProperties},
};
use std::{marker::PhantomData, ops::Index};
#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)] #[hdl]
pub struct Length<Max: Size> { pub type Length<Max: Size> = UIntInRangeInclusiveType<ConstUsize<0>, Max>;
ty: UInt,
_phantom: PhantomData<Max>,
}
impl<Max: Size> Length<Max> {
pub fn new(max: Max::SizeType) -> Self {
Self {
ty: UInt::range_inclusive(0..=Max::as_usize(max)),
_phantom: PhantomData,
}
}
pub fn ty(self) -> UInt {
self.ty
}
pub fn zero(self) -> Expr<Self> {
Self::from_uint_unchecked(self.ty.zero())
}
pub fn from_uint_unchecked(v: impl ToExpr<Type = UInt>) -> Expr<Self> {
Expr::from_canonical(Expr::canonical(v.to_expr()))
}
pub fn cast_from_uint_unchecked<SrcWidth: Size>(
self,
v: impl ToExpr<Type = UIntType<SrcWidth>>,
) -> Expr<Self> {
Self::from_uint_unchecked(v.to_expr().cast_to(self.ty))
}
pub fn as_uint(this: impl ToExpr<Type = Self>) -> Expr<UInt> {
let this = this.to_expr();
this.cast_to(Expr::ty(this).ty)
}
}
impl<Max: Size, DestWidth: Size> ExprCastTo<UIntType<DestWidth>> for Length<Max> {
fn cast_to(src: Expr<Self>, to_type: UIntType<DestWidth>) -> Expr<UIntType<DestWidth>> {
Expr::<UInt>::from_canonical(Expr::canonical(src)).cast_to(to_type)
}
}
#[allow(non_upper_case_globals)]
pub const Length: __LengthWithoutGenerics = __LengthWithoutGenerics {};
#[non_exhaustive]
pub struct __LengthWithoutGenerics {}
impl<M: SizeType> Index<M> for __LengthWithoutGenerics {
type Output = Length<M::Size>;
fn index(&self, max: M) -> &Self::Output {
Interned::into_inner(Length::new(max).intern_sized())
}
}
impl<Max: Size> Type for Length<Max> {
type BaseType = UInt;
type MaskType = Bool;
type MatchVariant = Expr<Self>;
type MatchActiveScope = ();
type MatchVariantAndInactiveScope = MatchVariantWithoutScope<Self::MatchVariant>;
type MatchVariantsIter = std::iter::Once<Self::MatchVariantAndInactiveScope>;
fn match_variants(
this: Expr<Self>,
source_location: SourceLocation,
) -> Self::MatchVariantsIter {
let _ = source_location;
std::iter::once(MatchVariantWithoutScope(this))
}
fn mask_type(&self) -> Self::MaskType {
Bool
}
fn canonical(&self) -> CanonicalType {
self.ty.canonical()
}
fn from_canonical(canonical_type: CanonicalType) -> Self {
let ty = <UInt>::from_canonical(canonical_type);
if let Some(known_max) = Max::KNOWN_VALUE {
assert_eq!(ty, UInt::range_inclusive(0..=known_max));
}
Self {
ty,
_phantom: PhantomData,
}
}
fn source_location() -> SourceLocation {
SourceLocation::caller()
}
}
impl<Max: KnownSize> StaticType for Length<Max> {
const TYPE: Self = Self {
ty: UInt {
width: Max::VALUE.next_power_of_two().ilog2() as usize,
},
_phantom: PhantomData,
};
const MASK_TYPE: Self::MaskType = Bool;
const TYPE_PROPERTIES: TypeProperties = {
let mut p = <UInt<1>>::TYPE_PROPERTIES;
p.bit_width = Self::TYPE.ty.width;
p
};
const MASK_TYPE_PROPERTIES: TypeProperties = Bool::TYPE_PROPERTIES;
}
impl<Max: Size> ExprPartialEq<Self> for Length<Max> {
fn cmp_eq(lhs: Expr<Self>, rhs: Expr<Self>) -> Expr<Bool> {
Self::as_uint(lhs).cmp_eq(Self::as_uint(rhs))
}
fn cmp_ne(lhs: Expr<Self>, rhs: Expr<Self>) -> Expr<Bool> {
Self::as_uint(lhs).cmp_ne(Self::as_uint(rhs))
}
}
impl<Max: Size> ExprPartialOrd<Self> for Length<Max> {
fn cmp_lt(lhs: Expr<Self>, rhs: Expr<Self>) -> Expr<Bool> {
Self::as_uint(lhs).cmp_lt(Self::as_uint(rhs))
}
fn cmp_le(lhs: Expr<Self>, rhs: Expr<Self>) -> Expr<Bool> {
Self::as_uint(lhs).cmp_le(Self::as_uint(rhs))
}
fn cmp_gt(lhs: Expr<Self>, rhs: Expr<Self>) -> Expr<Bool> {
Self::as_uint(lhs).cmp_gt(Self::as_uint(rhs))
}
fn cmp_ge(lhs: Expr<Self>, rhs: Expr<Self>) -> Expr<Bool> {
Self::as_uint(lhs).cmp_ge(Self::as_uint(rhs))
}
}
/// like [`std::vec::Vec`], except with a [`Expr`] for [`len()`][`Self::len()`] and a fixed capacity /// like [`std::vec::Vec`], except with a [`Expr`] for [`len()`][`Self::len()`] and a fixed capacity
#[hdl] #[hdl]
@ -156,7 +19,7 @@ impl<T: Type, N: Size> ArrayVec<T, N> {
#[hdl] #[hdl]
ArrayVec { ArrayVec {
elements: self.elements.uninit(), elements: self.elements.uninit(),
len: self.len.zero(), len: 0u8.cast_to(self.len),
} }
} }
pub fn element(self) -> T { pub fn element(self) -> T {
@ -176,7 +39,7 @@ impl<T: Type, N: Size> ArrayVec<T, N> {
let elements = elements.to_expr(); let elements = elements.to_expr();
let len = len.to_expr(); let len = len.to_expr();
assert_eq!( assert_eq!(
Length::new(N::from_usize(Expr::ty(elements).len())), Length[N::from_usize(Expr::ty(elements).len())],
Expr::ty(len), Expr::ty(len),
"len type mismatch", "len type mismatch",
); );
@ -191,7 +54,7 @@ impl<T: Type, N: Size> ArrayVec<T, N> {
} }
pub fn is_empty(this: impl ToExpr<Type = Self>) -> Expr<Bool> { pub fn is_empty(this: impl ToExpr<Type = Self>) -> Expr<Bool> {
let len = Self::len(this); let len = Self::len(this);
len.cmp_eq(Expr::ty(len).zero()) len.cmp_eq(0u8)
} }
pub fn capacity(self) -> usize { pub fn capacity(self) -> usize {
self.elements.len() self.elements.len()
@ -207,7 +70,7 @@ impl<T: Type, N: Size> ArrayVec<T, N> {
let this = this.to_expr(); let this = this.to_expr();
for (index, element) in this.elements.into_iter().enumerate() { for (index, element) in this.elements.into_iter().enumerate() {
#[hdl] #[hdl]
if index.cmp_lt(Length::as_uint(this.len)) { if index.cmp_lt(this.len) {
f(index, element); f(index, element);
} }
} }

View file

@ -16832,38 +16832,6 @@ $upscope $end
$upscope $end $upscope $end
$enddefinitions $end $enddefinitions $end
$dumpvars $dumpvars
0vg
0wg
0xg
0yg
0zg
0{g
0|g
0}g
0~g
0!h
0"h
0#h
0$h
0%h
0&h
0'h
0(h
0)h
0*h
0+h
0,h
0-h
0.h
0/h
00h
01h
02h
03h
04h
05h
06h
07h
b0 (_ b0 (_
b0 ia b0 ia
b0 )_ b0 )_
@ -17370,6 +17338,26 @@ b0 ga
b0 Jd b0 Jd
b0 ha b0 ha
b0 Kd b0 Kd
b0 Ld
b0 Nd
b0 Md
b0 Od
0Pd
0Qd
0Rd
0Sd
0Td
0Ud
0Vd
0Wd
0Xd
0Yd
0Zd
0[d
0\d
0]d
0^d
0_d
0`d 0`d
0ad 0ad
0bd 0bd
@ -17386,438 +17374,6 @@ b0 Kd
0md 0md
0nd 0nd
0od 0od
b0 8h
0Hh
0Xh
0hh
0xh
0*i
0:i
0Ji
0Zi
b0 9h
0Ih
0Yh
0ih
0yh
0+i
0;i
0Ki
0[i
b0 :h
0Jh
0Zh
0jh
0zh
0,i
0<i
0Li
0\i
b0 ;h
0Kh
0[h
0kh
0{h
0-i
0=i
0Mi
0]i
b0 <h
0Lh
0\h
0lh
0|h
0.i
0>i
0Ni
0^i
b0 =h
0Mh
0]h
0mh
0}h
0/i
0?i
0Oi
0_i
b0 >h
0Nh
0^h
0nh
0~h
00i
0@i
0Pi
0`i
b0 ?h
0Oh
0_h
0oh
0!i
01i
0Ai
0Qi
0ai
b0 @h
0Ph
0`h
0ph
0"i
02i
0Bi
0Ri
0bi
b0 Ah
0Qh
0ah
0qh
0#i
03i
0Ci
0Si
0ci
b0 Bh
0Rh
0bh
0rh
0$i
04i
0Di
0Ti
0di
b0 Ch
0Sh
0ch
0sh
0%i
05i
0Ei
0Ui
0ei
b0 Dh
0Th
0dh
0th
0&i
06i
0Fi
0Vi
0fi
b0 Eh
0Uh
0eh
0uh
0'i
07i
0Gi
0Wi
0gi
b0 Fh
0Vh
0fh
0vh
0(i
08i
0Hi
0Xi
0hi
b0 Gh
0Wh
0gh
0wh
0)i
09i
0Ii
0Yi
0ii
b0 Df
0Tf
0df
0tf
0&g
06g
0Fg
0Vg
0fg
b0 Ef
0Uf
0ef
0uf
0'g
07g
0Gg
0Wg
0gg
b0 Ff
0Vf
0ff
0vf
0(g
08g
0Hg
0Xg
0hg
b0 Gf
0Wf
0gf
0wf
0)g
09g
0Ig
0Yg
0ig
b0 Hf
0Xf
0hf
0xf
0*g
0:g
0Jg
0Zg
0jg
b0 If
0Yf
0if
0yf
0+g
0;g
0Kg
0[g
0kg
b0 Jf
0Zf
0jf
0zf
0,g
0<g
0Lg
0\g
0lg
b0 Kf
0[f
0kf
0{f
0-g
0=g
0Mg
0]g
0mg
b0 Lf
0\f
0lf
0|f
0.g
0>g
0Ng
0^g
0ng
b0 Mf
0]f
0mf
0}f
0/g
0?g
0Og
0_g
0og
b0 Nf
0^f
0nf
0~f
00g
0@g
0Pg
0`g
0pg
b0 Of
0_f
0of
0!g
01g
0Ag
0Qg
0ag
0qg
b0 Pf
0`f
0pf
0"g
02g
0Bg
0Rg
0bg
0rg
b0 Qf
0af
0qf
0#g
03g
0Cg
0Sg
0cg
0sg
b0 Rf
0bf
0rf
0$g
04g
0Dg
0Tg
0dg
0tg
b0 Sf
0cf
0sf
0%g
05g
0Eg
0Ug
0eg
0ug
b0 ji
0zi
0,j
0<j
0Lj
0\j
0lj
0|j
0.k
b0 ki
0{i
0-j
0=j
0Mj
0]j
0mj
0}j
0/k
b0 li
0|i
0.j
0>j
0Nj
0^j
0nj
0~j
00k
b0 mi
0}i
0/j
0?j
0Oj
0_j
0oj
0!k
01k
b0 ni
0~i
00j
0@j
0Pj
0`j
0pj
0"k
02k
b0 oi
0!j
01j
0Aj
0Qj
0aj
0qj
0#k
03k
b0 pi
0"j
02j
0Bj
0Rj
0bj
0rj
0$k
04k
b0 qi
0#j
03j
0Cj
0Sj
0cj
0sj
0%k
05k
b0 ri
0$j
04j
0Dj
0Tj
0dj
0tj
0&k
06k
b0 si
0%j
05j
0Ej
0Uj
0ej
0uj
0'k
07k
b0 ti
0&j
06j
0Fj
0Vj
0fj
0vj
0(k
08k
b0 ui
0'j
07j
0Gj
0Wj
0gj
0wj
0)k
09k
b0 vi
0(j
08j
0Hj
0Xj
0hj
0xj
0*k
0:k
b0 wi
0)j
09j
0Ij
0Yj
0ij
0yj
0+k
0;k
b0 xi
0*j
0:j
0Jj
0Zj
0jj
0zj
0,k
0<k
b0 yi
0+j
0;j
0Kj
0[j
0kj
0{j
0-k
0=k
b0 pd b0 pd
0"e 0"e
02e 02e
@ -17962,26 +17518,470 @@ b0 !e
0#f 0#f
03f 03f
0Cf 0Cf
0Pd b0 Df
0Qd 0Tf
0Rd 0df
0Sd 0tf
0Td 0&g
0Ud 06g
0Vd 0Fg
0Wd 0Vg
0Xd 0fg
0Yd b0 Ef
0Zd 0Uf
0[d 0ef
0\d 0uf
0]d 0'g
0^d 07g
0_d 0Gg
b0 Ld 0Wg
b0 Nd 0gg
b0 Md b0 Ff
b0 Od 0Vf
0ff
0vf
0(g
08g
0Hg
0Xg
0hg
b0 Gf
0Wf
0gf
0wf
0)g
09g
0Ig
0Yg
0ig
b0 Hf
0Xf
0hf
0xf
0*g
0:g
0Jg
0Zg
0jg
b0 If
0Yf
0if
0yf
0+g
0;g
0Kg
0[g
0kg
b0 Jf
0Zf
0jf
0zf
0,g
0<g
0Lg
0\g
0lg
b0 Kf
0[f
0kf
0{f
0-g
0=g
0Mg
0]g
0mg
b0 Lf
0\f
0lf
0|f
0.g
0>g
0Ng
0^g
0ng
b0 Mf
0]f
0mf
0}f
0/g
0?g
0Og
0_g
0og
b0 Nf
0^f
0nf
0~f
00g
0@g
0Pg
0`g
0pg
b0 Of
0_f
0of
0!g
01g
0Ag
0Qg
0ag
0qg
b0 Pf
0`f
0pf
0"g
02g
0Bg
0Rg
0bg
0rg
b0 Qf
0af
0qf
0#g
03g
0Cg
0Sg
0cg
0sg
b0 Rf
0bf
0rf
0$g
04g
0Dg
0Tg
0dg
0tg
b0 Sf
0cf
0sf
0%g
05g
0Eg
0Ug
0eg
0ug
0vg
0wg
0xg
0yg
0zg
0{g
0|g
0}g
0~g
0!h
0"h
0#h
0$h
0%h
0&h
0'h
0(h
0)h
0*h
0+h
0,h
0-h
0.h
0/h
00h
01h
02h
03h
04h
05h
06h
07h
b0 8h
0Hh
0Xh
0hh
0xh
0*i
0:i
0Ji
0Zi
b0 9h
0Ih
0Yh
0ih
0yh
0+i
0;i
0Ki
0[i
b0 :h
0Jh
0Zh
0jh
0zh
0,i
0<i
0Li
0\i
b0 ;h
0Kh
0[h
0kh
0{h
0-i
0=i
0Mi
0]i
b0 <h
0Lh
0\h
0lh
0|h
0.i
0>i
0Ni
0^i
b0 =h
0Mh
0]h
0mh
0}h
0/i
0?i
0Oi
0_i
b0 >h
0Nh
0^h
0nh
0~h
00i
0@i
0Pi
0`i
b0 ?h
0Oh
0_h
0oh
0!i
01i
0Ai
0Qi
0ai
b0 @h
0Ph
0`h
0ph
0"i
02i
0Bi
0Ri
0bi
b0 Ah
0Qh
0ah
0qh
0#i
03i
0Ci
0Si
0ci
b0 Bh
0Rh
0bh
0rh
0$i
04i
0Di
0Ti
0di
b0 Ch
0Sh
0ch
0sh
0%i
05i
0Ei
0Ui
0ei
b0 Dh
0Th
0dh
0th
0&i
06i
0Fi
0Vi
0fi
b0 Eh
0Uh
0eh
0uh
0'i
07i
0Gi
0Wi
0gi
b0 Fh
0Vh
0fh
0vh
0(i
08i
0Hi
0Xi
0hi
b0 Gh
0Wh
0gh
0wh
0)i
09i
0Ii
0Yi
0ii
b0 ji
0zi
0,j
0<j
0Lj
0\j
0lj
0|j
0.k
b0 ki
0{i
0-j
0=j
0Mj
0]j
0mj
0}j
0/k
b0 li
0|i
0.j
0>j
0Nj
0^j
0nj
0~j
00k
b0 mi
0}i
0/j
0?j
0Oj
0_j
0oj
0!k
01k
b0 ni
0~i
00j
0@j
0Pj
0`j
0pj
0"k
02k
b0 oi
0!j
01j
0Aj
0Qj
0aj
0qj
0#k
03k
b0 pi
0"j
02j
0Bj
0Rj
0bj
0rj
0$k
04k
b0 qi
0#j
03j
0Cj
0Sj
0cj
0sj
0%k
05k
b0 ri
0$j
04j
0Dj
0Tj
0dj
0tj
0&k
06k
b0 si
0%j
05j
0Ej
0Uj
0ej
0uj
0'k
07k
b0 ti
0&j
06j
0Fj
0Vj
0fj
0vj
0(k
08k
b0 ui
0'j
07j
0Gj
0Wj
0gj
0wj
0)k
09k
b0 vi
0(j
08j
0Hj
0Xj
0hj
0xj
0*k
0:k
b0 wi
0)j
09j
0Ij
0Yj
0ij
0yj
0+k
0;k
b0 xi
0*j
0:j
0Jj
0Zj
0jj
0zj
0,k
0<k
b0 yi
0+j
0;j
0Kj
0[j
0kj
0{j
0-k
0=k
0! 0!
1" 1"
sHdlSome\x20(1) # sHdlSome\x20(1) #

View file

@ -9,8 +9,6 @@ use cpu::{
unit::{GlobalState, UnitKind}, unit::{GlobalState, UnitKind},
}; };
use fayalite::{ use fayalite::{
assert_export_firrtl,
firrtl::ExportOptions,
prelude::*, prelude::*,
sim::{Simulation, time::SimDuration, vcd::VcdWriterDecls}, sim::{Simulation, time::SimDuration, vcd::VcdWriterDecls},
util::RcWriter, util::RcWriter,