Skip to content

Commit c628501

Browse files
committed
Auto merge of rust-lang#123144 - dpaoliello:arm64eclib, r=GuillaumeGomez,ChrisDenton,wesleywiser
Add support for Arm64EC to the Standard Library Adds the final pieces so that the standard library can be built for arm64ec-pc-windows-msvc (initially added in rust-lang#119199) * Bumps `windows-sys` to 0.56.0, which adds support for Arm64EC. * Correctly set the `isEC` parameter for LLVM's `writeArchive` function. * Add `#![feature(asm_experimental_arch)]` to library crates where Arm64EC inline assembly is used, as it is currently unstable.
2 parents 9699e68 + 9b3dfe9 commit c628501

File tree

6 files changed

+26
-23
lines changed

6 files changed

+26
-23
lines changed

core/src/hint.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ pub fn spin_loop() {
237237
crate::arch::riscv64::pause();
238238
}
239239

240-
#[cfg(target_arch = "aarch64")]
240+
#[cfg(any(target_arch = "aarch64", target_arch = "arm64ec"))]
241241
{
242242
// SAFETY: the `cfg` attr ensures that we only execute this on aarch64 targets.
243243
unsafe { crate::arch::aarch64::__isb(crate::arch::aarch64::SY) };

panic_abort/src/lib.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#![doc(issue_tracker_base_url = "https://github.com/rust-lang/rust/issues/")]
99
#![panic_runtime]
1010
#![allow(unused_features)]
11+
#![feature(asm_experimental_arch)]
1112
#![feature(core_intrinsics)]
1213
#![feature(panic_runtime)]
1314
#![feature(std_internals)]
@@ -78,7 +79,7 @@ pub unsafe fn __rust_start_panic(_payload: &mut dyn PanicPayload) -> u32 {
7879
core::arch::asm!("int $$0x29", in("ecx") FAST_FAIL_FATAL_APP_EXIT, options(noreturn, nostack));
7980
} else if #[cfg(all(target_arch = "arm", target_feature = "thumb-mode"))] {
8081
core::arch::asm!(".inst 0xDEFB", in("r0") FAST_FAIL_FATAL_APP_EXIT, options(noreturn, nostack));
81-
} else if #[cfg(target_arch = "aarch64")] {
82+
} else if #[cfg(any(target_arch = "aarch64", target_arch = "arm64ec"))] {
8283
core::arch::asm!("brk 0xF003", in("x0") FAST_FAIL_FATAL_APP_EXIT, options(noreturn, nostack));
8384
} else {
8485
core::intrinsics::abort();

std/src/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,7 @@
277277
#![feature(allocator_internals)]
278278
#![feature(allow_internal_unsafe)]
279279
#![feature(allow_internal_unstable)]
280+
#![feature(asm_experimental_arch)]
280281
#![feature(c_unwind)]
281282
#![feature(cfg_sanitizer_cfi)]
282283
#![feature(cfg_target_thread_local)]

std/src/sys/pal/common/alloc.rs

+1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ pub const MIN_ALIGN: usize = 8;
2323
#[cfg(any(
2424
target_arch = "x86_64",
2525
target_arch = "aarch64",
26+
target_arch = "arm64ec",
2627
target_arch = "loongarch64",
2728
target_arch = "mips64",
2829
target_arch = "mips64r6",

std/src/sys/pal/windows/c/windows_sys.rs

+20-20
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Bindings generated by `windows-bindgen` 0.55.0
1+
// Bindings generated by `windows-bindgen` 0.56.0
22

33
#![allow(non_snake_case, non_upper_case_globals, non_camel_case_types, dead_code, clippy::all)]
44
#[link(name = "advapi32")]
@@ -345,7 +345,7 @@ extern "system" {
345345
}
346346
#[link(name = "kernel32")]
347347
extern "system" {
348-
pub fn GetSystemTimePreciseAsFileTime(lpsystemtimeasfiletime: *mut FILETIME) -> ();
348+
pub fn GetSystemTimePreciseAsFileTime(lpsystemtimeasfiletime: *mut FILETIME);
349349
}
350350
#[link(name = "kernel32")]
351351
extern "system" {
@@ -1018,7 +1018,7 @@ impl Clone for CONTEXT_0_0 {
10181018
}
10191019
}
10201020
#[repr(C)]
1021-
#[cfg(target_arch = "x86_64")]
1021+
#[cfg(any(target_arch = "arm64ec", target_arch = "x86_64"))]
10221022
pub struct CONTEXT {
10231023
pub P1Home: u64,
10241024
pub P2Home: u64,
@@ -1067,30 +1067,30 @@ pub struct CONTEXT {
10671067
pub LastExceptionToRip: u64,
10681068
pub LastExceptionFromRip: u64,
10691069
}
1070-
#[cfg(target_arch = "x86_64")]
1070+
#[cfg(any(target_arch = "arm64ec", target_arch = "x86_64"))]
10711071
impl Copy for CONTEXT {}
1072-
#[cfg(target_arch = "x86_64")]
1072+
#[cfg(any(target_arch = "arm64ec", target_arch = "x86_64"))]
10731073
impl Clone for CONTEXT {
10741074
fn clone(&self) -> Self {
10751075
*self
10761076
}
10771077
}
10781078
#[repr(C)]
1079-
#[cfg(target_arch = "x86_64")]
1079+
#[cfg(any(target_arch = "arm64ec", target_arch = "x86_64"))]
10801080
pub union CONTEXT_0 {
10811081
pub FltSave: XSAVE_FORMAT,
10821082
pub Anonymous: CONTEXT_0_0,
10831083
}
1084-
#[cfg(target_arch = "x86_64")]
1084+
#[cfg(any(target_arch = "arm64ec", target_arch = "x86_64"))]
10851085
impl Copy for CONTEXT_0 {}
1086-
#[cfg(target_arch = "x86_64")]
1086+
#[cfg(any(target_arch = "arm64ec", target_arch = "x86_64"))]
10871087
impl Clone for CONTEXT_0 {
10881088
fn clone(&self) -> Self {
10891089
*self
10901090
}
10911091
}
10921092
#[repr(C)]
1093-
#[cfg(target_arch = "x86_64")]
1093+
#[cfg(any(target_arch = "arm64ec", target_arch = "x86_64"))]
10941094
pub struct CONTEXT_0_0 {
10951095
pub Header: [M128A; 2],
10961096
pub Legacy: [M128A; 8],
@@ -1111,9 +1111,9 @@ pub struct CONTEXT_0_0 {
11111111
pub Xmm14: M128A,
11121112
pub Xmm15: M128A,
11131113
}
1114-
#[cfg(target_arch = "x86_64")]
1114+
#[cfg(any(target_arch = "arm64ec", target_arch = "x86_64"))]
11151115
impl Copy for CONTEXT_0_0 {}
1116-
#[cfg(target_arch = "x86_64")]
1116+
#[cfg(any(target_arch = "arm64ec", target_arch = "x86_64"))]
11171117
impl Clone for CONTEXT_0_0 {
11181118
fn clone(&self) -> Self {
11191119
*self
@@ -3339,7 +3339,7 @@ pub const FILE_WRITE_EA: FILE_ACCESS_RIGHTS = 16u32;
33393339
pub const FILE_WRITE_THROUGH: NTCREATEFILE_CREATE_OPTIONS = 2u32;
33403340
pub const FIONBIO: i32 = -2147195266i32;
33413341
#[repr(C)]
3342-
#[cfg(any(target_arch = "aarch64", target_arch = "x86_64"))]
3342+
#[cfg(any(target_arch = "aarch64", target_arch = "arm64ec", target_arch = "x86_64"))]
33433343
pub struct FLOATING_SAVE_AREA {
33443344
pub ControlWord: u32,
33453345
pub StatusWord: u32,
@@ -3351,9 +3351,9 @@ pub struct FLOATING_SAVE_AREA {
33513351
pub RegisterArea: [u8; 80],
33523352
pub Cr0NpxState: u32,
33533353
}
3354-
#[cfg(any(target_arch = "aarch64", target_arch = "x86_64"))]
3354+
#[cfg(any(target_arch = "aarch64", target_arch = "arm64ec", target_arch = "x86_64"))]
33553355
impl Copy for FLOATING_SAVE_AREA {}
3356-
#[cfg(any(target_arch = "aarch64", target_arch = "x86_64"))]
3356+
#[cfg(any(target_arch = "aarch64", target_arch = "arm64ec", target_arch = "x86_64"))]
33573357
impl Clone for FLOATING_SAVE_AREA {
33583358
fn clone(&self) -> Self {
33593359
*self
@@ -4106,7 +4106,7 @@ impl Clone for WSABUF {
41064106
}
41074107
}
41084108
#[repr(C)]
4109-
#[cfg(any(target_arch = "aarch64", target_arch = "x86_64"))]
4109+
#[cfg(any(target_arch = "aarch64", target_arch = "arm64ec", target_arch = "x86_64"))]
41104110
pub struct WSADATA {
41114111
pub wVersion: u16,
41124112
pub wHighVersion: u16,
@@ -4116,9 +4116,9 @@ pub struct WSADATA {
41164116
pub szDescription: [i8; 257],
41174117
pub szSystemStatus: [i8; 129],
41184118
}
4119-
#[cfg(any(target_arch = "aarch64", target_arch = "x86_64"))]
4119+
#[cfg(any(target_arch = "aarch64", target_arch = "arm64ec", target_arch = "x86_64"))]
41204120
impl Copy for WSADATA {}
4121-
#[cfg(any(target_arch = "aarch64", target_arch = "x86_64"))]
4121+
#[cfg(any(target_arch = "aarch64", target_arch = "arm64ec", target_arch = "x86_64"))]
41224122
impl Clone for WSADATA {
41234123
fn clone(&self) -> Self {
41244124
*self
@@ -4286,7 +4286,7 @@ pub const WSA_SECURE_HOST_NOT_FOUND: WSA_ERROR = 11032i32;
42864286
pub const WSA_WAIT_EVENT_0: WSA_ERROR = 0i32;
42874287
pub const WSA_WAIT_IO_COMPLETION: WSA_ERROR = 192i32;
42884288
#[repr(C)]
4289-
#[cfg(any(target_arch = "aarch64", target_arch = "x86_64"))]
4289+
#[cfg(any(target_arch = "aarch64", target_arch = "arm64ec", target_arch = "x86_64"))]
42904290
pub struct XSAVE_FORMAT {
42914291
pub ControlWord: u16,
42924292
pub StatusWord: u16,
@@ -4305,9 +4305,9 @@ pub struct XSAVE_FORMAT {
43054305
pub XmmRegisters: [M128A; 16],
43064306
pub Reserved4: [u8; 96],
43074307
}
4308-
#[cfg(any(target_arch = "aarch64", target_arch = "x86_64"))]
4308+
#[cfg(any(target_arch = "aarch64", target_arch = "arm64ec", target_arch = "x86_64"))]
43094309
impl Copy for XSAVE_FORMAT {}
4310-
#[cfg(any(target_arch = "aarch64", target_arch = "x86_64"))]
4310+
#[cfg(any(target_arch = "aarch64", target_arch = "arm64ec", target_arch = "x86_64"))]
43114311
impl Clone for XSAVE_FORMAT {
43124312
fn clone(&self) -> Self {
43134313
*self

std/src/sys/pal/windows/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,7 @@ pub fn abort_internal() -> ! {
332332
core::arch::asm!("int $$0x29", in("ecx") c::FAST_FAIL_FATAL_APP_EXIT, options(noreturn, nostack));
333333
} else if #[cfg(all(target_arch = "arm", target_feature = "thumb-mode"))] {
334334
core::arch::asm!(".inst 0xDEFB", in("r0") c::FAST_FAIL_FATAL_APP_EXIT, options(noreturn, nostack));
335-
} else if #[cfg(target_arch = "aarch64")] {
335+
} else if #[cfg(any(target_arch = "aarch64", target_arch = "arm64ec"))] {
336336
core::arch::asm!("brk 0xF003", in("x0") c::FAST_FAIL_FATAL_APP_EXIT, options(noreturn, nostack));
337337
} else {
338338
core::intrinsics::abort();

0 commit comments

Comments
 (0)