Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rollup of 7 pull requests #133634

Merged
merged 21 commits into from
Nov 29, 2024
Merged
Changes from 5 commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
8fb6c08
Increase impl items indent and decrease documentation indent for impl…
GuillaumeGomez Oct 14, 2024
4f20626
Update GUI tests for documentation indent changes
GuillaumeGomez Oct 14, 2024
bf6fcc9
Align impl doc block with `impl` keyword
GuillaumeGomez Nov 13, 2024
807e978
chore: fix 404 status URL
longxiangqiao Nov 28, 2024
dae1bf3
fix typo in RELEASES.md
slanterns Nov 28, 2024
ba73166
Support `clobber_abi` for AVR inline assembly
jfrimmel Oct 6, 2024
d7e0a3e
Add test case for the clobber options
jfrimmel Oct 6, 2024
2bd3bbb
Move & rename test case to match naming of #132456
jfrimmel Nov 2, 2024
67d2f3f
Reword error message of reserved AVR registers
jfrimmel Nov 28, 2024
ac9324c
Document s390x machine access via community cloud
uweigand Nov 28, 2024
c52d952
add instructions for generating `flake.lock` to `envrc-flake`
WaffleLapkin Nov 28, 2024
33f13f2
ignore `/build` instead of `build/` in gitignore
WaffleLapkin Nov 28, 2024
8e77349
fix a comment with uneven number of backticks in rustc_mir_build
WaffleLapkin Nov 28, 2024
6005d1c
Update more 2024 tests to remove -Zunstable-options
ehuss Nov 28, 2024
6c9e922
Rollup merge of #131323 - jfrimmel:avr-inline-asm-clobber-abi, r=Amanieu
matthiaskrgr Nov 29, 2024
f46ed97
Rollup merge of #131718 - GuillaumeGomez:impl-items-indent, r=rustdoc
matthiaskrgr Nov 29, 2024
11ee1ce
Rollup merge of #133565 - longxiangqiao:master, r=ehuss
matthiaskrgr Nov 29, 2024
271ff44
Rollup merge of #133575 - slanterns:typo, r=compiler-errors
matthiaskrgr Nov 29, 2024
fbad22e
Rollup merge of #133577 - uweigand:s390x-doc-cloudaccess, r=jieyouxu
matthiaskrgr Nov 29, 2024
53bc38b
Rollup merge of #133584 - ehuss:more-2024-unstable-options, r=compile…
matthiaskrgr Nov 29, 2024
eabe6db
Rollup merge of #133592 - WaffleLapkin:misc-meowing, r=jieyouxu
matthiaskrgr Nov 29, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion compiler/rustc_target/src/asm/avr.rs
Original file line number Diff line number Diff line change
@@ -105,7 +105,12 @@ def_regs! {
#error = ["SP", "SPL", "SPH"] =>
"the stack pointer cannot be used as an operand for inline asm",
#error = ["r0", "r1", "r1r0"] =>
"r0 and r1 are not available due to an issue in LLVM",
"LLVM reserves r0 (scratch register) and r1 (zero register)",
// If this changes within LLVM, the compiler might use the registers
// in the future. This must be reflected in the set of clobbered
// registers, else the clobber ABI implementation is *unsound*, as
// this generates invalid code (register is not marked as clobbered
// but may change the register content).
}
}

22 changes: 22 additions & 0 deletions compiler/rustc_target/src/asm/mod.rs
Original file line number Diff line number Diff line change
@@ -928,6 +928,7 @@ pub enum InlineAsmClobberAbi {
AArch64,
AArch64NoX18,
Arm64EC,
Avr,
RiscV,
RiscVE,
LoongArch,
@@ -986,6 +987,10 @@ impl InlineAsmClobberAbi {
}),
_ => Err(&["C", "system", "efiapi"]),
},
InlineAsmArch::Avr => match name {
"C" | "system" => Ok(InlineAsmClobberAbi::Avr),
_ => Err(&["C", "system"]),
},
InlineAsmArch::LoongArch64 => match name {
"C" | "system" => Ok(InlineAsmClobberAbi::LoongArch),
_ => Err(&["C", "system"]),
@@ -1133,6 +1138,23 @@ impl InlineAsmClobberAbi {
d24, d25, d26, d27, d28, d29, d30, d31,
}
},
InlineAsmClobberAbi::Avr => clobbered_regs! {
Avr AvrInlineAsmReg {
// The list of "Call-Used Registers" according to
// https://gcc.gnu.org/wiki/avr-gcc#Call-Used_Registers

// Clobbered registers available in inline assembly
r18, r19, r20, r21, r22, r23, r24, r25, r26, r27, r30, r31,
// As per the AVR-GCC-ABI documentation linked above, the R0
// register is a clobbered register as well. Since we don't
// allow the usage of R0 in inline assembly, nothing has to
// be done here.
// Likewise, the T-flag in the SREG should be clobbered, but
// this is not necessary to be listed here, since the SREG
// is considered clobbered anyways unless `preserve_flags`
// is used.
}
},
InlineAsmClobberAbi::RiscV => clobbered_regs! {
RiscV RiscVInlineAsmReg {
// ra
43 changes: 43 additions & 0 deletions tests/codegen/asm/avr-clobbers.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
//@ assembly-output: emit-asm
//@ compile-flags: --target avr-unknown-gnu-atmega328
//@ needs-llvm-components: avr

#![crate_type = "rlib"]
#![feature(no_core, rustc_attrs, lang_items, asm_experimental_arch)]
#![no_core]

#[lang = "sized"]
trait Sized {}

#[rustc_builtin_macro]
macro_rules! asm {
() => {};
}

// CHECK-LABEL: @sreg_is_clobbered
// CHECK: void asm sideeffect "", "~{sreg}"()
#[no_mangle]
pub unsafe fn sreg_is_clobbered() {
asm!("", options(nostack, nomem));
}

// CHECK-LABEL: @sreg_is_not_clobbered_if_preserve_flags_is_used
// CHECK: void asm sideeffect "", ""()
#[no_mangle]
pub unsafe fn sreg_is_not_clobbered_if_preserve_flags_is_used() {
asm!("", options(nostack, nomem, preserves_flags));
}

// CHECK-LABEL: @clobber_abi
// CHECK: asm sideeffect "", "={r18},={r19},={r20},={r21},={r22},={r23},={r24},={r25},={r26},={r27},={r30},={r31},~{sreg}"()
#[no_mangle]
pub unsafe fn clobber_abi() {
asm!("", clobber_abi("C"), options(nostack, nomem));
}

// CHECK-LABEL: @clobber_abi_with_preserved_flags
// CHECK: asm sideeffect "", "={r18},={r19},={r20},={r21},={r22},={r23},={r24},={r25},={r26},={r27},={r30},={r31}"()
#[no_mangle]
pub unsafe fn clobber_abi_with_preserved_flags() {
asm!("", clobber_abi("C"), options(nostack, nomem, preserves_flags));
}