rust/compiler
Matthias Krüger 6c9e922685
Rollup merge of #131323 - jfrimmel:avr-inline-asm-clobber-abi, r=Amanieu
Support `clobber_abi` in AVR inline assembly

This PR implements the `clobber_abi` part necessary to eventually stabilize the inline assembly for AVR. This is tracked in #93335.
This is heavily inspired by the sibling-PR #131310 for the MSP430. I've explained my reasoning in the first commit message in detail, which is reproduced below for easier reviewing:

This follows the [ABI documentation] of AVR-GCC:

> The [...] call-clobbered general purpose registers (GPRs) are registers that might be destroyed (clobbered) by a function call.
>
> - **R18–R27, R30, R31**
>
>   These GPRs are call clobbered. An ordinary function may use them without restoring the contents. [...]
>
> - **R0, T-Flag**
>
>   The temporary register and the T-flag in SREG are also call-clobbered, but this knowledge is not exposed explicitly to the compiler (R0 is a fixed register).

Therefore this commit lists the aforementioned registers `r18–r27`, `r30` and `r31` as clobbered registers. Since the `r0` register (listed above as well) is not available in inline assembly at all (potentially because the AVR-GCC considers it a fixed register causing the register to never be used in register allocation and LLVM adopting this), there is no need to list it in the clobber list (the `r0`-variant is not even available). A comment was added to ensure, that the `r0` gets added to the clobber-list once the register gets usable in inline ASM.
Since the SREG is normally considered clobbered anyways (unless the user supplies the `preserve_flags`-option), there is no need to explicitly list a bit in this register (which is not possible to list anyways).

Note, that this commit completely ignores the case of interrupts (that are described in the ABI-specification), since every register touched in an ISR need to be saved anyways.

[ABI documentation]: https://gcc.gnu.org/wiki/avr-gcc#Call-Used_Registers

r? ``@Amanieu``

``@rustbot`` label +O-AVR
2024-11-29 16:02:20 +01:00
..
rustc Auto merge of #132282 - Noratrieb:it-is-the-end-of-serial, r=cjgillot 2024-11-12 15:14:56 +00:00
rustc_abi Auto merge of #130867 - michirakara:steps_between, r=dtolnay 2024-11-22 10:54:22 +00:00
rustc_arena move strict provenance lints to new feature gate, remove old feature gates 2024-10-21 15:22:17 +01:00
rustc_ast always create DefIds when lowering anon-consts 2024-11-28 12:22:02 +00:00
rustc_ast_ir Add sugar for &pin (const|mut) types 2024-10-07 11:15:04 -07:00
rustc_ast_lowering Auto merge of #133468 - lcnr:uwu4, r=BoxyUwU 2024-11-28 15:58:17 +00:00
rustc_ast_passes Refactor where predicates, and reserve for attributes support 2024-11-25 16:38:35 +08:00
rustc_ast_pretty Rollup merge of #133140 - dtolnay:precedence, r=fmease 2024-11-26 12:03:41 -05:00
rustc_attr ensure that all publicly reachable const fn have const stability info 2024-11-10 10:16:26 +01:00
rustc_baked_icu_data Delete the cfg(not(parallel)) serial compiler 2024-11-12 13:38:58 +00:00
rustc_borrowck uplift fold_regions to rustc_type_ir 2024-11-28 10:40:58 +01:00
rustc_builtin_macros Auto merge of #132894 - frank-king:feature/where-refactor, r=cjgillot 2024-11-26 04:12:33 +00:00
rustc_codegen_cranelift Rollup merge of #133422 - taiki-e:riscv-e-clobber-abi, r=Amanieu 2024-11-28 12:06:01 +01:00
rustc_codegen_gcc Support predicate registers (clobber-only) in Hexagon inline assembly 2024-11-25 23:11:17 +09:00
rustc_codegen_llvm Revert "Rollup merge of #133418 - Zalathar:spans, r=jieyouxu" 2024-11-29 14:57:01 +11:00
rustc_codegen_ssa Auto merge of #123244 - Mark-Simulacrum:share-inline-never-generics, r=saethlin 2024-11-28 21:44:34 +00:00
rustc_const_eval Move always_storage_live_locals. 2024-11-26 12:05:57 +11:00
rustc_data_structures Add UnordMap::clear method 2024-11-20 18:11:37 +01:00
rustc_driver Use tidy to sort crate attributes for all compiler crates. 2024-06-12 15:49:10 +10:00
rustc_driver_impl Rollup merge of #133590 - nnethercote:rename-parse-only, r=estebank 2024-11-29 10:19:00 +01:00
rustc_error_codes remove support for rustc_safe_intrinsic attribute; use rustc_intrinsic functions instead 2024-11-08 09:16:00 +01:00
rustc_error_messages Delete the cfg(not(parallel)) serial compiler 2024-11-12 13:38:58 +00:00
rustc_errors Auto merge of #132954 - matthiaskrgr:rollup-x3rww9h, r=matthiaskrgr 2024-11-12 18:04:27 +00:00
rustc_expand Implement the unsafe-fields RFC. 2024-11-21 19:32:07 +01:00
rustc_feature Rollup merge of #131664 - taiki-e:s390x-asm-vreg-inout, r=Amanieu 2024-11-25 07:01:37 +01:00
rustc_fluent_macro use tracked_path in rustc_fluent_macro 2024-10-19 22:32:38 +08:00
rustc_fs_util Couple of changes to make it easier to compile rustc for wasm 2024-09-26 19:51:14 +00:00
rustc_graphviz Reformat using the new identifier sorting from rustfmt 2024-09-22 19:11:29 -04:00
rustc_hir update comment 2024-11-28 12:22:02 +00:00
rustc_hir_analysis support revealing defined opaque post borrowck 2024-11-28 10:40:58 +01:00
rustc_hir_pretty Rollup merge of #133140 - dtolnay:precedence, r=fmease 2024-11-26 12:03:41 -05:00
rustc_hir_typeck Rollup merge of #133538 - dev-ardi:69232-better-diag, r=compiler-errors 2024-11-29 10:18:59 +01:00
rustc_incremental Move some code from Compiler::enter to GlobalCtxt::finish 2024-11-09 17:55:39 +00:00
rustc_index Remove HybridBitSet. 2024-11-29 17:23:34 +11:00
rustc_index_macros Auto merge of #130867 - michirakara:steps_between, r=dtolnay 2024-11-22 10:54:22 +00:00
rustc_infer support revealing defined opaque post borrowck 2024-11-28 10:40:58 +01:00
rustc_interface Rollup merge of #133590 - nnethercote:rename-parse-only, r=estebank 2024-11-29 10:19:00 +01:00
rustc_lexer Clean up c_or_byte_string. 2024-11-25 16:10:55 +11:00
rustc_lint Rollup merge of #133487 - pitaj:reserve-guarded-strings, r=fee1-dead 2024-11-28 12:06:04 +01:00
rustc_lint_defs fix confusing diagnostic for reserved ## 2024-11-25 22:29:14 -07:00
rustc_llvm Rollup merge of #127483 - BertalanD:no_sanitize-global-var, r=rcvalle 2024-11-23 20:19:51 +08:00
rustc_log Reformat using the new identifier sorting from rustfmt 2024-09-22 19:11:29 -04:00
rustc_macros give a better error for tuple structs in derive(Diagnostic) 2024-10-27 21:23:28 -04:00
rustc_metadata always create DefIds when lowering anon-consts 2024-11-28 12:22:02 +00:00
rustc_middle Rollup merge of #133501 - lcnr:post-borrowck-analysis, r=compiler-errors 2024-11-29 10:18:57 +01:00
rustc_mir_build Auto merge of #131859 - chriskrycho:update-trpl, r=onur-ozkan 2024-11-23 23:26:19 +00:00
rustc_mir_dataflow Stop using HybridBitSet in dataflow diffs. 2024-11-29 17:23:34 +11:00
rustc_mir_transform Revert "Rollup merge of #133418 - Zalathar:spans, r=jieyouxu" 2024-11-29 14:57:01 +11:00
rustc_monomorphize Share inline(never) generics across crates 2024-11-28 13:43:05 -05:00
rustc_next_trait_solver support revealing defined opaque post borrowck 2024-11-28 10:40:58 +01:00
rustc_parse Rollup merge of #133560 - clubby789:mut-mut-space, r=jieyouxu 2024-11-28 12:06:07 +01:00
rustc_parse_format Remove 'apostrophes' from rustc_parse_format 2024-10-14 23:22:51 +02:00
rustc_passes Refactor where predicates, and reserve for attributes support 2024-11-25 16:38:35 +08:00
rustc_pattern_analysis no more Reveal :( 2024-11-23 13:52:54 +01:00
rustc_privacy Simplify some places that deal with generic parameter defaults 2024-11-11 21:29:18 +01:00
rustc_query_impl Rollup merge of #132410 - bjorn3:yet_another_driver_refactor_round, r=cjgillot 2024-11-27 22:23:24 +01:00
rustc_query_system Auto merge of #124780 - Mark-Simulacrum:lockless-cache, r=lcnr 2024-11-19 02:07:48 +00:00
rustc_resolve always create DefIds when lowering anon-consts 2024-11-28 12:22:02 +00:00
rustc_sanitizers use TypingEnv when no infcx is available 2024-11-18 10:38:56 +01:00
rustc_serialize Fix explicit_iter_loop in rustc_serialize 2024-10-16 15:44:16 +02:00
rustc_session Update -Zshow-span help message. 2024-11-29 06:10:16 +11:00
rustc_smir Rollup merge of #132410 - bjorn3:yet_another_driver_refactor_round, r=cjgillot 2024-11-27 22:23:24 +01:00
rustc_span Rollup merge of #133463 - taiki-e:aarch64-asm-x18, r=Amanieu 2024-11-28 12:06:02 +01:00
rustc_symbol_mangling additional TypingEnv cleanups 2024-11-19 21:36:23 +01:00
rustc_target Rollup merge of #131323 - jfrimmel:avr-inline-asm-clobber-abi, r=Amanieu 2024-11-29 16:02:20 +01:00
rustc_trait_selection support revealing defined opaque post borrowck 2024-11-28 10:40:58 +01:00
rustc_traits Delay a bug when encountering an impl with unconstrained generics in codegen_select 2024-11-23 05:27:45 +00:00
rustc_transmute use TypingEnv when no infcx is available 2024-11-18 10:38:56 +01:00
rustc_ty_utils support revealing defined opaque post borrowck 2024-11-28 10:40:58 +01:00
rustc_type_ir support revealing defined opaque post borrowck 2024-11-28 10:40:58 +01:00
rustc_type_ir_macros do not relate Abi and Safety 2024-10-22 23:13:04 +02:00
stable_mir Rollup merge of #132161 - celinval:smir-fix-indent, r=compiler-errors 2024-11-08 18:51:28 +11:00