forked from AbleOS/holey-bytes
removing the regalloc dependency
This commit is contained in:
parent
e5d6b35f66
commit
e94b812b3b
40
Cargo.lock
generated
40
Cargo.lock
generated
|
@ -38,12 +38,6 @@ dependencies = [
|
||||||
"memchr",
|
"memchr",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "allocator-api2"
|
|
||||||
version = "0.2.18"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "anyhow"
|
name = "anyhow"
|
||||||
version = "1.0.89"
|
version = "1.0.89"
|
||||||
|
@ -235,7 +229,7 @@ dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"regex",
|
"regex",
|
||||||
"rustc-hash 1.1.0",
|
"rustc-hash",
|
||||||
"shlex",
|
"shlex",
|
||||||
"syn",
|
"syn",
|
||||||
"which",
|
"which",
|
||||||
|
@ -265,15 +259,6 @@ dependencies = [
|
||||||
"generic-array",
|
"generic-array",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "bumpalo"
|
|
||||||
version = "3.16.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
|
|
||||||
dependencies = [
|
|
||||||
"allocator-api2",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bytes"
|
name = "bytes"
|
||||||
version = "1.8.0"
|
version = "1.8.0"
|
||||||
|
@ -594,9 +579,6 @@ name = "hashbrown"
|
||||||
version = "0.15.0"
|
version = "0.15.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb"
|
checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb"
|
||||||
dependencies = [
|
|
||||||
"allocator-api2",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hashlink"
|
name = "hashlink"
|
||||||
|
@ -619,7 +601,6 @@ dependencies = [
|
||||||
"hbbytecode",
|
"hbbytecode",
|
||||||
"hbvm",
|
"hbvm",
|
||||||
"log",
|
"log",
|
||||||
"regalloc2",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -1058,19 +1039,6 @@ dependencies = [
|
||||||
"getrandom",
|
"getrandom",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "regalloc2"
|
|
||||||
version = "0.10.2"
|
|
||||||
source = "git+https://github.com/jakubDoka/regalloc2?branch=reuse-allocations#21c43e3ee182824e92e2b25f1d3c03ed47f9c02b"
|
|
||||||
dependencies = [
|
|
||||||
"allocator-api2",
|
|
||||||
"bumpalo",
|
|
||||||
"hashbrown 0.14.5",
|
|
||||||
"log",
|
|
||||||
"rustc-hash 2.0.0",
|
|
||||||
"smallvec",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "regex"
|
name = "regex"
|
||||||
version = "1.11.1"
|
version = "1.11.1"
|
||||||
|
@ -1141,12 +1109,6 @@ version = "1.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
|
checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "rustc-hash"
|
|
||||||
version = "2.0.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rustix"
|
name = "rustix"
|
||||||
version = "0.38.37"
|
version = "0.38.37"
|
||||||
|
|
|
@ -12,17 +12,12 @@ name = "fuzz"
|
||||||
path = "src/fuzz_main.rs"
|
path = "src/fuzz_main.rs"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
hashbrown = { version = "0.15.0", default-features = false, features = ["raw-entry", "allocator-api2"] }
|
|
||||||
hbbytecode = { workspace = true, features = ["disasm"] }
|
hbbytecode = { workspace = true, features = ["disasm"] }
|
||||||
hbvm = { workspace = true, features = ["nightly"] }
|
hbvm = { workspace = true, features = ["nightly"] }
|
||||||
|
hashbrown = { version = "0.15.0", default-features = false, features = ["raw-entry"] }
|
||||||
log = "0.4.22"
|
log = "0.4.22"
|
||||||
|
|
||||||
[dependencies.regalloc2]
|
|
||||||
git = "https://github.com/jakubDoka/regalloc2"
|
|
||||||
branch = "reuse-allocations"
|
|
||||||
default-features = false
|
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = ["std", "regalloc2/trace-log"]
|
default = ["std"]
|
||||||
std = []
|
std = []
|
||||||
no_log = ["log/max_level_off"]
|
no_log = ["log/max_level_off"]
|
||||||
|
|
|
@ -2,7 +2,7 @@ use {
|
||||||
crate::{
|
crate::{
|
||||||
parser::{Ast, Ctx, FileKind},
|
parser::{Ast, Ctx, FileKind},
|
||||||
son::{self, hbvm::HbvmBackend},
|
son::{self, hbvm::HbvmBackend},
|
||||||
ty,
|
ty, FnvBuildHasher,
|
||||||
},
|
},
|
||||||
alloc::{string::String, vec::Vec},
|
alloc::{string::String, vec::Vec},
|
||||||
core::{fmt::Write, num::NonZeroUsize, ops::Deref},
|
core::{fmt::Write, num::NonZeroUsize, ops::Deref},
|
||||||
|
@ -18,6 +18,8 @@ use {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type HashMap<K, V> = hashbrown::HashMap<K, V, FnvBuildHasher>;
|
||||||
|
|
||||||
pub struct Logger;
|
pub struct Logger;
|
||||||
|
|
||||||
impl log::Log for Logger {
|
impl log::Log for Logger {
|
||||||
|
@ -249,8 +251,8 @@ pub fn parse_from_fs(extra_threads: usize, root: &str) -> io::Result<Loaded> {
|
||||||
|
|
||||||
type Task = (usize, PathBuf);
|
type Task = (usize, PathBuf);
|
||||||
|
|
||||||
let seen_modules = Mutex::new(crate::HashMap::<PathBuf, usize>::default());
|
let seen_modules = Mutex::new(HashMap::<PathBuf, usize>::default());
|
||||||
let seen_embeds = Mutex::new(crate::HashMap::<PathBuf, usize>::default());
|
let seen_embeds = Mutex::new(HashMap::<PathBuf, usize>::default());
|
||||||
let tasks = TaskQueue::<Task>::new(extra_threads + 1);
|
let tasks = TaskQueue::<Task>::new(extra_threads + 1);
|
||||||
let ast = Mutex::new(Vec::<io::Result<Ast>>::new());
|
let ast = Mutex::new(Vec::<io::Result<Ast>>::new());
|
||||||
let embeds = Mutex::new(Vec::<Vec<u8>>::new());
|
let embeds = Mutex::new(Vec::<Vec<u8>>::new());
|
||||||
|
|
|
@ -1440,32 +1440,6 @@ impl OffsetIter {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type HashMap<K, V> = hashbrown::HashMap<K, V, FnvBuildHasher>;
|
|
||||||
type FnvBuildHasher = core::hash::BuildHasherDefault<FnvHasher>;
|
|
||||||
|
|
||||||
struct FnvHasher(u64);
|
|
||||||
|
|
||||||
impl core::hash::Hasher for FnvHasher {
|
|
||||||
fn finish(&self) -> u64 {
|
|
||||||
self.0
|
|
||||||
}
|
|
||||||
|
|
||||||
fn write(&mut self, bytes: &[u8]) {
|
|
||||||
self.0 = bytes.iter().fold(self.0, |hash, &byte| {
|
|
||||||
let mut hash = hash;
|
|
||||||
hash ^= byte as u64;
|
|
||||||
hash = hash.wrapping_mul(0x100000001B3);
|
|
||||||
hash
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Default for FnvHasher {
|
|
||||||
fn default() -> Self {
|
|
||||||
Self(0xCBF29CE484222325)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
pub fn run_test(
|
pub fn run_test(
|
||||||
name: &'static str,
|
name: &'static str,
|
||||||
|
@ -1682,3 +1656,28 @@ pub fn quad_sort<T>(mut slice: &mut [T], mut cmp: impl FnMut(&T, &T) -> core::cm
|
||||||
}
|
}
|
||||||
debug_assert!(slice.is_sorted_by(|a, b| cmp(a, b) != core::cmp::Ordering::Greater));
|
debug_assert!(slice.is_sorted_by(|a, b| cmp(a, b) != core::cmp::Ordering::Greater));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type FnvBuildHasher = core::hash::BuildHasherDefault<FnvHasher>;
|
||||||
|
|
||||||
|
struct FnvHasher(u64);
|
||||||
|
|
||||||
|
impl core::hash::Hasher for FnvHasher {
|
||||||
|
fn finish(&self) -> u64 {
|
||||||
|
self.0
|
||||||
|
}
|
||||||
|
|
||||||
|
fn write(&mut self, bytes: &[u8]) {
|
||||||
|
self.0 = bytes.iter().fold(self.0, |hash, &byte| {
|
||||||
|
let mut hash = hash;
|
||||||
|
hash ^= byte as u64;
|
||||||
|
hash = hash.wrapping_mul(0x100000001B3);
|
||||||
|
hash
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for FnvHasher {
|
||||||
|
fn default() -> Self {
|
||||||
|
Self(0xCBF29CE484222325)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ use {
|
||||||
PLoc, Sig, Types,
|
PLoc, Sig, Types,
|
||||||
},
|
},
|
||||||
alloc::{borrow::ToOwned, vec::Vec},
|
alloc::{borrow::ToOwned, vec::Vec},
|
||||||
core::{borrow::Borrow, mem, ops::Range},
|
core::{mem, ops::Range},
|
||||||
hbbytecode::{self as instrs},
|
hbbytecode::{self as instrs},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -108,7 +108,7 @@ impl HbvmBackend {
|
||||||
);
|
);
|
||||||
#[cfg(debug_assertions)]
|
#[cfg(debug_assertions)]
|
||||||
debug_assert!(
|
debug_assert!(
|
||||||
res.marked.borrow().contains(&(allc, nid))
|
res.marked.contains(&(allc, nid))
|
||||||
|| nid == allc
|
|| nid == allc
|
||||||
|| nodes.is_hard_zero(allc)
|
|| nodes.is_hard_zero(allc)
|
||||||
|| allc == MEM
|
|| allc == MEM
|
||||||
|
|
Loading…
Reference in a new issue