|
| 1 | +//@ revisions: aarch64 aarch64_fixed_x18 aarch64_no_x18 aarch64_reserve_x18 arm64ec |
| 2 | +//@[aarch64] compile-flags: --target aarch64-unknown-linux-gnu |
| 3 | +//@[aarch64] needs-llvm-components: aarch64 |
| 4 | +//@[aarch64_fixed_x18] compile-flags: --target aarch64-unknown-linux-gnu -Zfixed-x18 |
| 5 | +//@[aarch64_fixed_x18] needs-llvm-components: aarch64 |
| 6 | +//@[aarch64_no_x18] compile-flags: --target aarch64-pc-windows-msvc |
| 7 | +//@[aarch64_no_x18] needs-llvm-components: aarch64 |
| 8 | +// aarch64-unknown-trusty uses aarch64-unknown-unknown-musl which doesn't |
| 9 | +// reserve x18 by default as llvm_target, and pass +reserve-x18 in target-spec. |
| 10 | +//@[aarch64_reserve_x18] compile-flags: --target aarch64-unknown-trusty |
| 11 | +//@[aarch64_reserve_x18] needs-llvm-components: aarch64 |
| 12 | +//@[arm64ec] compile-flags: --target arm64ec-pc-windows-msvc |
| 13 | +//@[arm64ec] needs-llvm-components: aarch64 |
| 14 | +// ignore-tidy-linelength |
| 15 | + |
| 16 | +#![crate_type = "rlib"] |
| 17 | +#![feature(no_core, rustc_attrs, lang_items)] |
| 18 | +#![no_core] |
| 19 | + |
| 20 | +#[lang = "sized"] |
| 21 | +trait Sized {} |
| 22 | + |
| 23 | +#[rustc_builtin_macro] |
| 24 | +macro_rules! asm { |
| 25 | + () => {}; |
| 26 | +} |
| 27 | + |
| 28 | +// CHECK-LABEL: @cc_clobber |
| 29 | +// CHECK: call void asm sideeffect "", "~{cc}"() |
| 30 | +#[no_mangle] |
| 31 | +pub unsafe fn cc_clobber() { |
| 32 | + asm!("", options(nostack, nomem)); |
| 33 | +} |
| 34 | + |
| 35 | +// CHECK-LABEL: @no_clobber |
| 36 | +// CHECK: call void asm sideeffect "", ""() |
| 37 | +#[no_mangle] |
| 38 | +pub unsafe fn no_clobber() { |
| 39 | + asm!("", options(nostack, nomem, preserves_flags)); |
| 40 | +} |
| 41 | + |
| 42 | +// CHECK-LABEL: @clobber_abi |
| 43 | +// aarch64: asm sideeffect "", "={w0},={w1},={w2},={w3},={w4},={w5},={w6},={w7},={w8},={w9},={w10},={w11},={w12},={w13},={w14},={w15},={w16},={w17},={w18},={w30},={q0},={q1},={q2},={q3},={q4},={q5},={q6},={q7},={q8},={q9},={q10},={q11},={q12},={q13},={q14},={q15},={q16},={q17},={q18},={q19},={q20},={q21},={q22},={q23},={q24},={q25},={q26},={q27},={q28},={q29},={q30},={q31},~{p0},~{p1},~{p2},~{p3},~{p4},~{p5},~{p6},~{p7},~{p8},~{p9},~{p10},~{p11},~{p12},~{p13},~{p14},~{p15},~{ffr}"() |
| 44 | +// aarch64_fixed_x18: asm sideeffect "", "={w0},={w1},={w2},={w3},={w4},={w5},={w6},={w7},={w8},={w9},={w10},={w11},={w12},={w13},={w14},={w15},={w16},={w17},={w30},={q0},={q1},={q2},={q3},={q4},={q5},={q6},={q7},={q8},={q9},={q10},={q11},={q12},={q13},={q14},={q15},={q16},={q17},={q18},={q19},={q20},={q21},={q22},={q23},={q24},={q25},={q26},={q27},={q28},={q29},={q30},={q31},~{p0},~{p1},~{p2},~{p3},~{p4},~{p5},~{p6},~{p7},~{p8},~{p9},~{p10},~{p11},~{p12},~{p13},~{p14},~{p15},~{ffr}"() |
| 45 | +// aarch64_no_x18: asm sideeffect "", "={w0},={w1},={w2},={w3},={w4},={w5},={w6},={w7},={w8},={w9},={w10},={w11},={w12},={w13},={w14},={w15},={w16},={w17},={w30},={q0},={q1},={q2},={q3},={q4},={q5},={q6},={q7},={q8},={q9},={q10},={q11},={q12},={q13},={q14},={q15},={q16},={q17},={q18},={q19},={q20},={q21},={q22},={q23},={q24},={q25},={q26},={q27},={q28},={q29},={q30},={q31},~{p0},~{p1},~{p2},~{p3},~{p4},~{p5},~{p6},~{p7},~{p8},~{p9},~{p10},~{p11},~{p12},~{p13},~{p14},~{p15},~{ffr}"() |
| 46 | +// aarch64_reserve_x18: asm sideeffect "", "={w0},={w1},={w2},={w3},={w4},={w5},={w6},={w7},={w8},={w9},={w10},={w11},={w12},={w13},={w14},={w15},={w16},={w17},={w30},={q0},={q1},={q2},={q3},={q4},={q5},={q6},={q7},={q8},={q9},={q10},={q11},={q12},={q13},={q14},={q15},={q16},={q17},={q18},={q19},={q20},={q21},={q22},={q23},={q24},={q25},={q26},={q27},={q28},={q29},={q30},={q31},~{p0},~{p1},~{p2},~{p3},~{p4},~{p5},~{p6},~{p7},~{p8},~{p9},~{p10},~{p11},~{p12},~{p13},~{p14},~{p15},~{ffr}"() |
| 47 | +// arm64ec: asm sideeffect "", "={w0},={w1},={w2},={w3},={w4},={w5},={w6},={w7},={w8},={w9},={w10},={w11},={w12},={w15},={w16},={w17},={w30},={q0},={q1},={q2},={q3},={q4},={q5},={q6},={q7},={q8},={q9},={q10},={q11},={q12},={q13},={q14},={q15}"() |
| 48 | +#[no_mangle] |
| 49 | +pub unsafe fn clobber_abi() { |
| 50 | + asm!("", clobber_abi("C"), options(nostack, nomem, preserves_flags)); |
| 51 | +} |
0 commit comments