From 77cec97af7966dacf3467468120e142e9dcfbe90 Mon Sep 17 00:00:00 2001 From: Sergey Fedorov Date: Sat, 3 Jan 2026 07:58:38 +0800 Subject: [PATCH 1/2] target.cpp: non-functional: use ARCH_POWERPC instead of ARCH_POWERPC32 Follow existing convention: both triples and arch name normally do not use 32, it is implicit. --- src/trans/target.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/trans/target.cpp b/src/trans/target.cpp index f4a0c2d29..4b4c8d7bf 100644 --- a/src/trans/target.cpp +++ b/src/trans/target.cpp @@ -59,18 +59,18 @@ const TargetArch ARCH_POWERPC64 = { { /*atomic(u8)=*/true, true, true, true, true }, TargetArch::Alignments(2, 4, 8, 16, 4, 8, 8) }; -const TargetArch ARCH_POWERPC32 = { - "powerpc", - 32, true, - { /*atomic(u8)=*/true, false, true, false, true }, - TargetArch::Alignments(2, 4, 8, 8, 4, 8, 4) -}; const TargetArch ARCH_POWERPC64LE = { "powerpc64", 64, false, { /*atomic(u8)=*/true, true, true, true, true }, TargetArch::Alignments(2, 4, 8, 16, 4, 8, 8) }; +const TargetArch ARCH_POWERPC = { + "powerpc", + 32, true, + { /*atomic(u8)=*/true, false, true, false, true }, + TargetArch::Alignments(2, 4, 8, 8, 4, 8, 4) +}; const TargetArch ARCH_RISCV64 = { "riscv64", 64, false, @@ -155,9 +155,9 @@ namespace { rv.m_arch = ARCH_M68K; } - else if( key_val.value.as_string() == ARCH_POWERPC32.m_name ) + else if( key_val.value.as_string() == ARCH_POWERPC.m_name ) { - rv.m_arch = ARCH_POWERPC32; + rv.m_arch = ARCH_POWERPC; } else if( key_val.value.as_string() == ARCH_POWERPC64.m_name ) { @@ -634,7 +634,7 @@ namespace // NOTE: OSX uses Mach-O binaries, which don't fully support the defaults used for GNU targets return TargetSpec { "unix", "macos", "gnu", {CodegenMode::Gnu11, true, "powerpc-apple-darwin", {}, {}}, - ARCH_POWERPC32 + ARCH_POWERPC }; } else if(target_name == "powerpc64-apple-darwin") From 5e16175a8de545395cca827d626a329c981db47c Mon Sep 17 00:00:00 2001 From: Sergey Fedorov Date: Sat, 3 Jan 2026 08:02:21 +0800 Subject: [PATCH 2/2] target.cpp: enable 16-bit atomics on 32-bit powerpc Closes: https://github.com/thepowersgang/mrustc/issues/381 See also: https://github.com/crossbeam-rs/crossbeam/issues/1213 --- src/trans/target.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/trans/target.cpp b/src/trans/target.cpp index 4b4c8d7bf..d07000286 100644 --- a/src/trans/target.cpp +++ b/src/trans/target.cpp @@ -68,7 +68,7 @@ const TargetArch ARCH_POWERPC64LE = { const TargetArch ARCH_POWERPC = { "powerpc", 32, true, - { /*atomic(u8)=*/true, false, true, false, true }, + { /*atomic(u8)=*/true, true, true, false, true }, TargetArch::Alignments(2, 4, 8, 8, 4, 8, 4) }; const TargetArch ARCH_RISCV64 = {