From 0502ab1052dcac37e07cbab3becd4cdeedea98c3 Mon Sep 17 00:00:00 2001 From: SSD Date: Thu, 1 Jan 2026 21:59:38 +0100 Subject: [PATCH 01/11] cranelift-assembler-x64: no_std support --- .github/workflows/main.yml | 1 + cranelift/assembler-x64/Cargo.toml | 1 + cranelift/assembler-x64/meta/src/dsl/format.rs | 6 +++--- cranelift/assembler-x64/meta/src/generate.rs | 6 +++--- .../assembler-x64/meta/src/generate/inst.rs | 8 ++++---- cranelift/assembler-x64/src/api.rs | 9 +++++---- cranelift/assembler-x64/src/custom.rs | 5 +++-- cranelift/assembler-x64/src/features.rs | 2 +- cranelift/assembler-x64/src/fixed.rs | 1 + cranelift/assembler-x64/src/fuzz.rs | 6 +++--- cranelift/assembler-x64/src/gpr.rs | 1 + cranelift/assembler-x64/src/imm.rs | 12 +++++++----- cranelift/assembler-x64/src/inst.rs | 3 +++ cranelift/assembler-x64/src/lib.rs | 2 ++ cranelift/assembler-x64/src/main.rs | 11 +++++++++++ cranelift/assembler-x64/src/mem.rs | 18 ++++++++++-------- cranelift/assembler-x64/src/xmm.rs | 3 +++ 17 files changed, 62 insertions(+), 33 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 99a6b0204d59..592cea2b3635 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -550,6 +550,7 @@ jobs: cargo check -p wasmtime --no-default-features --features runtime,component-model && cargo check -p wasmtime --no-default-features --features runtime,gc,component-model,async,debug-builtins && cargo check -p cranelift-control --no-default-features && + cargo check -p cranelift-assembler-x64 --no-default-features -F core && cargo check -p pulley-interpreter --features encode,decode,disas,interp && cargo check -p wasmtime-wasi-io --no-default-features # Use `cross` for illumos to have a C compiler/linker available. diff --git a/cranelift/assembler-x64/Cargo.toml b/cranelift/assembler-x64/Cargo.toml index 6935ec669950..424d26f206ce 100644 --- a/cranelift/assembler-x64/Cargo.toml +++ b/cranelift/assembler-x64/Cargo.toml @@ -23,3 +23,4 @@ workspace = true [features] fuzz = ['dep:arbitrary', 'dep:capstone'] +core = [] diff --git a/cranelift/assembler-x64/meta/src/dsl/format.rs b/cranelift/assembler-x64/meta/src/dsl/format.rs index fe39d1892db3..cb6b8e5a9645 100644 --- a/cranelift/assembler-x64/meta/src/dsl/format.rs +++ b/cranelift/assembler-x64/meta/src/dsl/format.rs @@ -535,7 +535,7 @@ impl Default for Mutability { } impl core::fmt::Display for Mutability { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { match self { Self::Read => write!(f, "r"), Self::ReadWrite => write!(f, "rw"), @@ -576,7 +576,7 @@ impl Default for Extension { } impl core::fmt::Display for Extension { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { match self { Extension::None => write!(f, ""), Extension::SignExtendQuad => write!(f, "sxq"), @@ -627,7 +627,7 @@ impl Default for Eflags { } impl core::fmt::Display for Eflags { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { match self { Self::None => write!(f, ""), Self::R => write!(f, "r"), diff --git a/cranelift/assembler-x64/meta/src/generate.rs b/cranelift/assembler-x64/meta/src/generate.rs index b4b13e19d33e..4191a53d6833 100644 --- a/cranelift/assembler-x64/meta/src/generate.rs +++ b/cranelift/assembler-x64/meta/src/generate.rs @@ -53,11 +53,11 @@ fn match_variants(f: &mut Formatter, insts: &[dsl::Inst], invoke: &str) { }); } -/// `impl std::fmt::Display for Inst { ... }` +/// `impl core::fmt::Display for Inst { ... }` fn generate_inst_display_impl(f: &mut Formatter, insts: &[dsl::Inst]) { - f.add_block("impl std::fmt::Display for Inst", |f| { + f.add_block("impl core::fmt::Display for Inst", |f| { f.add_block( - "fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result", + "fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result", |f| { match_variants(f, insts, "fmt(f)"); }, diff --git a/cranelift/assembler-x64/meta/src/generate/inst.rs b/cranelift/assembler-x64/meta/src/generate/inst.rs index 0991b4134be8..6d5e8b8862fe 100644 --- a/cranelift/assembler-x64/meta/src/generate/inst.rs +++ b/cranelift/assembler-x64/meta/src/generate/inst.rs @@ -107,12 +107,12 @@ impl dsl::Inst { fmtln!(f, "#[must_use]"); fmtln!(f, "#[inline]"); f.add_block( - &format!("pub fn mnemonic(&self) -> std::borrow::Cow<'static, str>"), + &format!("pub fn mnemonic(&self) -> alloc::borrow::Cow<'static, str>"), |f| { if self.custom.contains(Mnemonic) { fmtln!(f, "crate::custom::mnemonic::{}(self)", self.name()); } else { - fmtln!(f, "std::borrow::Cow::Borrowed(\"{}\")", self.mnemonic); + fmtln!(f, "alloc::borrow::Cow::Borrowed(\"{}\")", self.mnemonic); } }, ); @@ -265,10 +265,10 @@ impl dsl::Inst { let impl_block = self.generate_impl_block_start(); let struct_name = self.struct_name_with_generic(); f.add_block( - &format!("{impl_block} std::fmt::Display for {struct_name}"), + &format!("{impl_block} core::fmt::Display for {struct_name}"), |f| { f.add_block( - "fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result", + "fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result", |f| { if self.custom.contains(Display) { fmtln!(f, "crate::custom::display::{}(f, self)", self.name()); diff --git a/cranelift/assembler-x64/src/api.rs b/cranelift/assembler-x64/src/api.rs index c27101985b2c..f65cfc338045 100644 --- a/cranelift/assembler-x64/src/api.rs +++ b/cranelift/assembler-x64/src/api.rs @@ -3,9 +3,10 @@ use crate::gpr; use crate::xmm; use crate::{Amode, DeferredTarget, GprMem, XmmMem}; -use std::fmt; -use std::{num::NonZeroU8, vec::Vec}; - +use alloc::vec::Vec; +use core::fmt; +use core::num::NonZeroU8; +use alloc::string::String; /// Describe how an instruction is emitted into a code buffer. pub trait CodeSink { /// Add 1 byte to the code section. @@ -113,7 +114,7 @@ pub trait Registers { } /// Describe how to interact with an external register type. -pub trait AsReg: Copy + Clone + std::fmt::Debug + PartialEq { +pub trait AsReg: Copy + Clone + core::fmt::Debug + PartialEq { /// Create a register from its hardware encoding. /// /// This is primarily useful for fuzzing, though it is also useful for diff --git a/cranelift/assembler-x64/src/custom.rs b/cranelift/assembler-x64/src/custom.rs index adbfd2c6acc9..c2b70fecbc24 100644 --- a/cranelift/assembler-x64/src/custom.rs +++ b/cranelift/assembler-x64/src/custom.rs @@ -75,7 +75,7 @@ pub mod encode { pub mod mnemonic { use crate::inst; use crate::{Registers, XmmMem}; - use std::borrow::Cow; + use alloc::borrow::Cow; macro_rules! lock { ($name:tt => $mnemonic:expr) => { @@ -191,7 +191,8 @@ pub mod mnemonic { pub mod display { use crate::inst; use crate::{Amode, Gpr, GprMem, Registers, Size}; - use std::fmt; + use core::fmt; + use alloc::string::ToString; pub fn callq_d(f: &mut fmt::Formatter, inst: &inst::callq_d) -> fmt::Result { let inst::callq_d { imm32 } = inst; diff --git a/cranelift/assembler-x64/src/features.rs b/cranelift/assembler-x64/src/features.rs index 3559b9755662..77864e74db92 100644 --- a/cranelift/assembler-x64/src/features.rs +++ b/cranelift/assembler-x64/src/features.rs @@ -32,7 +32,7 @@ //! [`Inst::features`]: crate::inst::Inst::features use crate::inst::for_each_feature; -use std::fmt; +use core::fmt; // Helpfully generate `enum Feature`. macro_rules! create_feature_enum { diff --git a/cranelift/assembler-x64/src/fixed.rs b/cranelift/assembler-x64/src/fixed.rs index d689874c9a5a..c17ca3b944ef 100644 --- a/cranelift/assembler-x64/src/fixed.rs +++ b/cranelift/assembler-x64/src/fixed.rs @@ -1,6 +1,7 @@ //! Operands with fixed register encodings. use crate::{AsReg, Size}; +use alloc::string::String; /// A _fixed_ register. /// diff --git a/cranelift/assembler-x64/src/fuzz.rs b/cranelift/assembler-x64/src/fuzz.rs index 250e08a43e57..9bbcaf83509f 100644 --- a/cranelift/assembler-x64/src/fuzz.rs +++ b/cranelift/assembler-x64/src/fuzz.rs @@ -146,7 +146,7 @@ fn disassemble(assembled: &[u8], original: &Inst) -> String { } fn pretty_print_hexadecimal(hex: &[u8]) -> String { - use std::fmt::Write; + use core::fmt::Write; let mut s = String::with_capacity(hex.len() * 2); for b in hex { write!(&mut s, "{b:02X}").unwrap(); @@ -183,7 +183,7 @@ macro_rules! hex_print_signed_imm { /// - print negative values as `-0x...` (signed hex) instead of `0xff...` /// (normal hex) /// - print `mov` immediates as base-10 instead of base-16 (?!). -fn replace_signed_immediates(dis: &str) -> std::borrow::Cow<'_, str> { +fn replace_signed_immediates(dis: &str) -> alloc::borrow::Cow<'_, str> { match dis.find('$') { None => dis.into(), Some(idx) => { @@ -259,7 +259,7 @@ fn remove_after_parenthesis_test() { } /// Run some post-processing on the disassembly to make it match Capstone. -fn fix_up(dis: &str) -> std::borrow::Cow<'_, str> { +fn fix_up(dis: &str) -> alloc::borrow::Cow<'_, str> { let dis = remove_after_semicolon(dis); replace_signed_immediates(&dis) } diff --git a/cranelift/assembler-x64/src/gpr.rs b/cranelift/assembler-x64/src/gpr.rs index 4013c60686de..5489b513ce29 100644 --- a/cranelift/assembler-x64/src/gpr.rs +++ b/cranelift/assembler-x64/src/gpr.rs @@ -1,6 +1,7 @@ //! Pure register operands; see [`Gpr`]. use crate::AsReg; +use alloc::string::String; /// A general purpose x64 register (e.g., `%rax`). /// diff --git a/cranelift/assembler-x64/src/imm.rs b/cranelift/assembler-x64/src/imm.rs index eeb5a27d4d0d..b46f2cc2b868 100644 --- a/cranelift/assembler-x64/src/imm.rs +++ b/cranelift/assembler-x64/src/imm.rs @@ -1,7 +1,9 @@ //! Immediate operands to instructions. use crate::api::CodeSink; -use std::fmt; +use core::fmt; + +use alloc::{format, string::String}; /// This helper function prints the unsigned hexadecimal representation of the /// immediate value: e.g., this prints `$0xfe` to represent both the signed `-2` @@ -49,7 +51,7 @@ impl From for Imm8 { } impl TryFrom for Imm8 { - type Error = std::num::TryFromIntError; + type Error = core::num::TryFromIntError; fn try_from(simm32: i32) -> Result { Ok(Self(u8::try_from(simm32)?)) } @@ -100,7 +102,7 @@ impl From for Simm8 { } impl TryFrom for Simm8 { - type Error = std::num::TryFromIntError; + type Error = core::num::TryFromIntError; fn try_from(simm32: i32) -> Result { Ok(Self(i8::try_from(simm32)?)) } @@ -134,7 +136,7 @@ impl From for Imm16 { } impl TryFrom for Imm16 { - type Error = std::num::TryFromIntError; + type Error = core::num::TryFromIntError; fn try_from(simm32: i32) -> Result { Ok(Self(u16::try_from(simm32)?)) } @@ -185,7 +187,7 @@ impl From for Simm16 { } impl TryFrom for Simm16 { - type Error = std::num::TryFromIntError; + type Error = core::num::TryFromIntError; fn try_from(simm32: i32) -> Result { Ok(Self(i16::try_from(simm32)?)) } diff --git a/cranelift/assembler-x64/src/inst.rs b/cranelift/assembler-x64/src/inst.rs index 173336a7372d..e4f23849cd12 100644 --- a/cranelift/assembler-x64/src/inst.rs +++ b/cranelift/assembler-x64/src/inst.rs @@ -14,6 +14,9 @@ use crate::rex::RexPrefix; use crate::vex::VexPrefix; use crate::xmm::{self, Xmm}; +use alloc::string::ToString; + + // Include code generated by the `meta` crate. include!(concat!(env!("OUT_DIR"), "/assembler.rs")); diff --git a/cranelift/assembler-x64/src/lib.rs b/cranelift/assembler-x64/src/lib.rs index 7b5b6db7fc3a..d28e102ffeb7 100644 --- a/cranelift/assembler-x64/src/lib.rs +++ b/cranelift/assembler-x64/src/lib.rs @@ -41,6 +41,8 @@ non_camel_case_types, reason = "all of the generated struct names use snake case" )] +#![cfg_attr(feature = "core", no_std)] +extern crate alloc; mod api; mod custom; diff --git a/cranelift/assembler-x64/src/main.rs b/cranelift/assembler-x64/src/main.rs index c50a80fea5b9..4361d85624f9 100644 --- a/cranelift/assembler-x64/src/main.rs +++ b/cranelift/assembler-x64/src/main.rs @@ -1,8 +1,19 @@ //! Print the path to the generated code. +#![cfg_attr(feature = "core", no_std)] +#[cfg(not(feature = "core"))] fn main() { let paths: Vec = include!(concat!(env!("OUT_DIR"), "/generated-files.rs")); for path in paths { println!("{}", path.display()); } } + +#[cfg(feature = "core")] +fn main() {} + +#[cfg(feature = "core")] +#[panic_handler] +fn panic(_info: &core::panic::PanicInfo) -> ! { + loop {} +} \ No newline at end of file diff --git a/cranelift/assembler-x64/src/mem.rs b/cranelift/assembler-x64/src/mem.rs index 19cf06707e54..9b21e0483d8b 100644 --- a/cranelift/assembler-x64/src/mem.rs +++ b/cranelift/assembler-x64/src/mem.rs @@ -4,6 +4,8 @@ use crate::api::{AsReg, CodeSink, Constant, KnownOffset, Label, TrapCode}; use crate::gpr::{self, NonRspGpr, Size}; use crate::rex::{Disp, RexPrefix, encode_modrm, encode_sib}; +use alloc::string::{String, ToString}; + /// x64 memory addressing modes. #[derive(Copy, Clone, Debug, PartialEq)] #[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] @@ -99,8 +101,8 @@ impl From for AmodeOffset { } } -impl std::fmt::LowerHex for AmodeOffset { - fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { +impl core::fmt::LowerHex for AmodeOffset { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { // This rather complex implementation is necessary to match how // `capstone` pretty-prints memory immediates. if self.0 == 0 { @@ -116,7 +118,7 @@ impl std::fmt::LowerHex for AmodeOffset { Some(i) => i, None => -2_147_483_648, }; - std::fmt::LowerHex::fmt(&abs, f) + core::fmt::LowerHex::fmt(&abs, f) } } @@ -154,12 +156,12 @@ impl AmodeOffsetPlusKnownOffset { } } -impl std::fmt::LowerHex for AmodeOffsetPlusKnownOffset { - fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { +impl core::fmt::LowerHex for AmodeOffsetPlusKnownOffset { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { if let Some(offset) = self.offset { write!(f, "+")?; } - std::fmt::LowerHex::fmt(&self.simm32, f) + core::fmt::LowerHex::fmt(&self.simm32, f) } } @@ -172,8 +174,8 @@ pub enum DeferredTarget { None, } -impl std::fmt::Display for Amode { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { +impl core::fmt::Display for Amode { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { let pointer_width = Size::Quadword; match self { Amode::ImmReg { simm32, base, .. } => { diff --git a/cranelift/assembler-x64/src/xmm.rs b/cranelift/assembler-x64/src/xmm.rs index 9b2a00a9d489..9522a7e93376 100644 --- a/cranelift/assembler-x64/src/xmm.rs +++ b/cranelift/assembler-x64/src/xmm.rs @@ -2,6 +2,9 @@ use crate::{AsReg, CodeSink, rex::encode_modrm}; +use alloc::string::String; +//use core::convert::{AsMut, AsRef, From}; + /// An x64 SSE register (e.g., `%xmm0`). #[derive(Clone, Copy, Debug)] pub struct Xmm(pub(crate) R); From f3097c8d58725830ffc15d67a1e0b13be59d774b Mon Sep 17 00:00:00 2001 From: SSD Date: Thu, 1 Jan 2026 22:07:30 +0100 Subject: [PATCH 02/11] cargo fmt --- cranelift/assembler-x64/src/api.rs | 2 +- cranelift/assembler-x64/src/custom.rs | 2 +- cranelift/assembler-x64/src/inst.rs | 1 - cranelift/assembler-x64/src/main.rs | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/cranelift/assembler-x64/src/api.rs b/cranelift/assembler-x64/src/api.rs index f65cfc338045..0a24c13c5553 100644 --- a/cranelift/assembler-x64/src/api.rs +++ b/cranelift/assembler-x64/src/api.rs @@ -3,10 +3,10 @@ use crate::gpr; use crate::xmm; use crate::{Amode, DeferredTarget, GprMem, XmmMem}; +use alloc::string::String; use alloc::vec::Vec; use core::fmt; use core::num::NonZeroU8; -use alloc::string::String; /// Describe how an instruction is emitted into a code buffer. pub trait CodeSink { /// Add 1 byte to the code section. diff --git a/cranelift/assembler-x64/src/custom.rs b/cranelift/assembler-x64/src/custom.rs index c2b70fecbc24..25c63e239cf4 100644 --- a/cranelift/assembler-x64/src/custom.rs +++ b/cranelift/assembler-x64/src/custom.rs @@ -191,8 +191,8 @@ pub mod mnemonic { pub mod display { use crate::inst; use crate::{Amode, Gpr, GprMem, Registers, Size}; - use core::fmt; use alloc::string::ToString; + use core::fmt; pub fn callq_d(f: &mut fmt::Formatter, inst: &inst::callq_d) -> fmt::Result { let inst::callq_d { imm32 } = inst; diff --git a/cranelift/assembler-x64/src/inst.rs b/cranelift/assembler-x64/src/inst.rs index e4f23849cd12..c9073401b040 100644 --- a/cranelift/assembler-x64/src/inst.rs +++ b/cranelift/assembler-x64/src/inst.rs @@ -16,7 +16,6 @@ use crate::xmm::{self, Xmm}; use alloc::string::ToString; - // Include code generated by the `meta` crate. include!(concat!(env!("OUT_DIR"), "/assembler.rs")); diff --git a/cranelift/assembler-x64/src/main.rs b/cranelift/assembler-x64/src/main.rs index 4361d85624f9..b0e84e8870c1 100644 --- a/cranelift/assembler-x64/src/main.rs +++ b/cranelift/assembler-x64/src/main.rs @@ -16,4 +16,4 @@ fn main() {} #[panic_handler] fn panic(_info: &core::panic::PanicInfo) -> ! { loop {} -} \ No newline at end of file +} From 88c1dbaaaf63aa29862e8d004fadec1dbdf715f2 Mon Sep 17 00:00:00 2001 From: SSD <96286755+the-ssd@users.noreply.github.com> Date: Thu, 1 Jan 2026 22:41:52 +0100 Subject: [PATCH 03/11] Update cranelift/assembler-x64/src/xmm.rs Co-authored-by: bjorn3 <17426603+bjorn3@users.noreply.github.com> --- cranelift/assembler-x64/src/xmm.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/cranelift/assembler-x64/src/xmm.rs b/cranelift/assembler-x64/src/xmm.rs index 9522a7e93376..d016e270b8e9 100644 --- a/cranelift/assembler-x64/src/xmm.rs +++ b/cranelift/assembler-x64/src/xmm.rs @@ -3,7 +3,6 @@ use crate::{AsReg, CodeSink, rex::encode_modrm}; use alloc::string::String; -//use core::convert::{AsMut, AsRef, From}; /// An x64 SSE register (e.g., `%xmm0`). #[derive(Clone, Copy, Debug)] From b14010c49b1f6c2d40fce4c1a00fb69e5e9250f0 Mon Sep 17 00:00:00 2001 From: SSD <96286755+the-ssd@users.noreply.github.com> Date: Thu, 1 Jan 2026 22:43:45 +0100 Subject: [PATCH 04/11] Update cranelift/assembler-x64/src/imm.rs Co-authored-by: bjorn3 <17426603+bjorn3@users.noreply.github.com> --- cranelift/assembler-x64/src/imm.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cranelift/assembler-x64/src/imm.rs b/cranelift/assembler-x64/src/imm.rs index b46f2cc2b868..f350952dd23f 100644 --- a/cranelift/assembler-x64/src/imm.rs +++ b/cranelift/assembler-x64/src/imm.rs @@ -1,9 +1,8 @@ //! Immediate operands to instructions. use crate::api::CodeSink; -use core::fmt; - use alloc::{format, string::String}; +use core::fmt; /// This helper function prints the unsigned hexadecimal representation of the /// immediate value: e.g., this prints `$0xfe` to represent both the signed `-2` From ca60524b13788d65f86e718b66824848d930d9ff Mon Sep 17 00:00:00 2001 From: SSD <96286755+the-ssd@users.noreply.github.com> Date: Thu, 1 Jan 2026 22:43:54 +0100 Subject: [PATCH 05/11] Update cranelift/assembler-x64/src/api.rs Co-authored-by: bjorn3 <17426603+bjorn3@users.noreply.github.com> --- cranelift/assembler-x64/src/api.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/cranelift/assembler-x64/src/api.rs b/cranelift/assembler-x64/src/api.rs index 0a24c13c5553..f861b7726822 100644 --- a/cranelift/assembler-x64/src/api.rs +++ b/cranelift/assembler-x64/src/api.rs @@ -7,6 +7,7 @@ use alloc::string::String; use alloc::vec::Vec; use core::fmt; use core::num::NonZeroU8; + /// Describe how an instruction is emitted into a code buffer. pub trait CodeSink { /// Add 1 byte to the code section. From bb544101854534a632e5e32a39add4da4cf9d733 Mon Sep 17 00:00:00 2001 From: SSD <96286755+the-ssd@users.noreply.github.com> Date: Thu, 1 Jan 2026 22:45:26 +0100 Subject: [PATCH 06/11] Reorder import of alloc --- cranelift/assembler-x64/src/mem.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cranelift/assembler-x64/src/mem.rs b/cranelift/assembler-x64/src/mem.rs index 9b21e0483d8b..8235f9b5bfa9 100644 --- a/cranelift/assembler-x64/src/mem.rs +++ b/cranelift/assembler-x64/src/mem.rs @@ -1,11 +1,11 @@ //! Memory operands to instructions. +use alloc::string::{String, ToString}; + use crate::api::{AsReg, CodeSink, Constant, KnownOffset, Label, TrapCode}; use crate::gpr::{self, NonRspGpr, Size}; use crate::rex::{Disp, RexPrefix, encode_modrm, encode_sib}; -use alloc::string::{String, ToString}; - /// x64 memory addressing modes. #[derive(Copy, Clone, Debug, PartialEq)] #[cfg_attr(any(test, feature = "fuzz"), derive(arbitrary::Arbitrary))] From c374cc92fde015cc2ca444b0bb94f5151a87b2b1 Mon Sep 17 00:00:00 2001 From: SSD Date: Thu, 1 Jan 2026 23:08:03 +0100 Subject: [PATCH 07/11] #![no_std] --- cranelift/assembler-x64/src/fuzz.rs | 4 ++++ cranelift/assembler-x64/src/lib.rs | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/cranelift/assembler-x64/src/fuzz.rs b/cranelift/assembler-x64/src/fuzz.rs index 9bbcaf83509f..290d888f5a00 100644 --- a/cranelift/assembler-x64/src/fuzz.rs +++ b/cranelift/assembler-x64/src/fuzz.rs @@ -4,6 +4,10 @@ //! throughout this crate to avoid depending on the `arbitrary` crate //! unconditionally (use the `fuzz` feature instead). +use std::string::{String, ToString}; +use std::vec::Vec; +use std::{format, println}; + use crate::{ AmodeOffset, AmodeOffsetPlusKnownOffset, AsReg, CodeSink, DeferredTarget, Fixed, Gpr, Inst, KnownOffset, NonRspGpr, Registers, TrapCode, Xmm, diff --git a/cranelift/assembler-x64/src/lib.rs b/cranelift/assembler-x64/src/lib.rs index d28e102ffeb7..bf781a50de44 100644 --- a/cranelift/assembler-x64/src/lib.rs +++ b/cranelift/assembler-x64/src/lib.rs @@ -41,8 +41,10 @@ non_camel_case_types, reason = "all of the generated struct names use snake case" )] -#![cfg_attr(feature = "core", no_std)] +#![no_std] extern crate alloc; +#[cfg(any(test, feature = "fuzz"))] +extern crate std; mod api; mod custom; From afd80f14be94805b72d1250c4add565be60851f7 Mon Sep 17 00:00:00 2001 From: SSD Date: Thu, 1 Jan 2026 23:10:14 +0100 Subject: [PATCH 08/11] revert main.rs --- cranelift/assembler-x64/src/main.rs | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/cranelift/assembler-x64/src/main.rs b/cranelift/assembler-x64/src/main.rs index b0e84e8870c1..4ecb448870fc 100644 --- a/cranelift/assembler-x64/src/main.rs +++ b/cranelift/assembler-x64/src/main.rs @@ -1,19 +1,7 @@ //! Print the path to the generated code. -#![cfg_attr(feature = "core", no_std)] - -#[cfg(not(feature = "core"))] fn main() { let paths: Vec = include!(concat!(env!("OUT_DIR"), "/generated-files.rs")); for path in paths { println!("{}", path.display()); } -} - -#[cfg(feature = "core")] -fn main() {} - -#[cfg(feature = "core")] -#[panic_handler] -fn panic(_info: &core::panic::PanicInfo) -> ! { - loop {} -} +} \ No newline at end of file From ae0694862b75afbcc8769134a20d75a1ec37343f Mon Sep 17 00:00:00 2001 From: SSD Date: Thu, 1 Jan 2026 23:14:13 +0100 Subject: [PATCH 09/11] cargo fmt --- cranelift/assembler-x64/src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cranelift/assembler-x64/src/main.rs b/cranelift/assembler-x64/src/main.rs index 4ecb448870fc..31ae7a7d55c5 100644 --- a/cranelift/assembler-x64/src/main.rs +++ b/cranelift/assembler-x64/src/main.rs @@ -4,4 +4,4 @@ fn main() { for path in paths { println!("{}", path.display()); } -} \ No newline at end of file +} From 678630e5f25525e73991cbe3e449d931cfbb45ba Mon Sep 17 00:00:00 2001 From: SSD Date: Thu, 1 Jan 2026 23:33:33 +0100 Subject: [PATCH 10/11] remove core feature --- .github/workflows/main.yml | 2 +- cranelift/assembler-x64/Cargo.toml | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 592cea2b3635..39e6898c6b38 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -550,7 +550,7 @@ jobs: cargo check -p wasmtime --no-default-features --features runtime,component-model && cargo check -p wasmtime --no-default-features --features runtime,gc,component-model,async,debug-builtins && cargo check -p cranelift-control --no-default-features && - cargo check -p cranelift-assembler-x64 --no-default-features -F core && + cargo check -p cranelift-assembler-x64 && cargo check -p pulley-interpreter --features encode,decode,disas,interp && cargo check -p wasmtime-wasi-io --no-default-features # Use `cross` for illumos to have a C compiler/linker available. diff --git a/cranelift/assembler-x64/Cargo.toml b/cranelift/assembler-x64/Cargo.toml index 424d26f206ce..6935ec669950 100644 --- a/cranelift/assembler-x64/Cargo.toml +++ b/cranelift/assembler-x64/Cargo.toml @@ -23,4 +23,3 @@ workspace = true [features] fuzz = ['dep:arbitrary', 'dep:capstone'] -core = [] From 55ce2b5eb52d35e1d50ee62fcaeb1b32690f83e2 Mon Sep 17 00:00:00 2001 From: SSD <96286755+the-ssd@users.noreply.github.com> Date: Fri, 2 Jan 2026 01:21:39 +0100 Subject: [PATCH 11/11] Fix CI --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 39e6898c6b38..fe35d822d676 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -550,7 +550,7 @@ jobs: cargo check -p wasmtime --no-default-features --features runtime,component-model && cargo check -p wasmtime --no-default-features --features runtime,gc,component-model,async,debug-builtins && cargo check -p cranelift-control --no-default-features && - cargo check -p cranelift-assembler-x64 && + cargo check -p cranelift-assembler-x64 --lib && cargo check -p pulley-interpreter --features encode,decode,disas,interp && cargo check -p wasmtime-wasi-io --no-default-features # Use `cross` for illumos to have a C compiler/linker available.