This commit goes through and updates various `#[cfg]` as appropriate to get the wasm64-unknown-unknown target behaving similarly to the wasm32-unknown-unknown target. Most of this is just updating various conditions for `target_arch = "wasm32"` to also account for `target_arch = "wasm64"` where appropriate. This commit also lists `wasm64` as an allow-listed architecture to not have the `restricted_std` feature enabled, enabling experimentation with `-Z build-std` externally. The main goal of this commit is to enable playing around with `wasm64-unknown-unknown` externally via `-Z build-std` in a way that's similar to the `wasm32-unknown-unknown` target. These targets are effectively the same and only differ in their pointer size, but wasm64 is much newer and has much less ecosystem/library support so it'll still take time to get wasm64 fully-fledged.
48 lines
1.3 KiB
Rust
48 lines
1.3 KiB
Rust
use crate::alloc::{GlobalAlloc, Layout, System};
|
|
use crate::cmp;
|
|
use crate::ptr;
|
|
|
|
// The minimum alignment guaranteed by the architecture. This value is used to
|
|
// add fast paths for low alignment values.
|
|
#[cfg(all(any(
|
|
target_arch = "x86",
|
|
target_arch = "arm",
|
|
target_arch = "mips",
|
|
target_arch = "powerpc",
|
|
target_arch = "powerpc64",
|
|
target_arch = "sparc",
|
|
target_arch = "asmjs",
|
|
target_arch = "wasm32",
|
|
target_arch = "hexagon",
|
|
target_arch = "riscv32",
|
|
target_arch = "xtensa"
|
|
)))]
|
|
pub const MIN_ALIGN: usize = 8;
|
|
#[cfg(all(any(
|
|
target_arch = "x86_64",
|
|
target_arch = "aarch64",
|
|
target_arch = "mips64",
|
|
target_arch = "s390x",
|
|
target_arch = "sparc64",
|
|
target_arch = "riscv64",
|
|
target_arch = "wasm64",
|
|
)))]
|
|
pub const MIN_ALIGN: usize = 16;
|
|
|
|
pub unsafe fn realloc_fallback(
|
|
alloc: &System,
|
|
ptr: *mut u8,
|
|
old_layout: Layout,
|
|
new_size: usize,
|
|
) -> *mut u8 {
|
|
// Docs for GlobalAlloc::realloc require this to be valid:
|
|
let new_layout = Layout::from_size_align_unchecked(new_size, old_layout.align());
|
|
|
|
let new_ptr = GlobalAlloc::alloc(alloc, new_layout);
|
|
if !new_ptr.is_null() {
|
|
let size = cmp::min(old_layout.size(), new_size);
|
|
ptr::copy_nonoverlapping(ptr, new_ptr, size);
|
|
GlobalAlloc::dealloc(alloc, ptr, old_layout);
|
|
}
|
|
new_ptr
|
|
}
|