diff options
| author | Julian Frimmel <julian@fri-me.de> | 2024-10-06 13:09:29 +0200 |
|---|---|---|
| committer | Julian Frimmel <julian@fri-me.de> | 2024-11-28 16:12:03 +0100 |
| commit | d7e0a3eee0c5e79134664293eea3c46b91f0bec7 (patch) | |
| tree | 0337f3f094b5353c17527d04cf398cc0641266dd /tests/codegen | |
| parent | ba7316655645c020263e207ee9c036131b511d45 (diff) | |
| download | rust-d7e0a3eee0c5e79134664293eea3c46b91f0bec7.tar.gz rust-d7e0a3eee0c5e79134664293eea3c46b91f0bec7.zip | |
Add test case for the clobber options
Diffstat (limited to 'tests/codegen')
| -rw-r--r-- | tests/codegen/asm-clobber_abi-avr.rs | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/tests/codegen/asm-clobber_abi-avr.rs b/tests/codegen/asm-clobber_abi-avr.rs new file mode 100644 index 00000000000..6e0c75368e2 --- /dev/null +++ b/tests/codegen/asm-clobber_abi-avr.rs @@ -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)); +} |
