Skip to content

Commit d9f4f1e

Browse files
authored
Rollup merge of rust-lang#145913 - heiher:loong-hint, r=joshtriplett
Add spin_loop hint for LoongArch
2 parents 769d26b + d05376a commit d9f4f1e

File tree

1 file changed

+23
-33
lines changed

1 file changed

+23
-33
lines changed

core/src/hint.rs

Lines changed: 23 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -267,39 +267,29 @@ pub const unsafe fn assert_unchecked(cond: bool) {
267267
#[inline(always)]
268268
#[stable(feature = "renamed_spin_loop", since = "1.49.0")]
269269
pub fn spin_loop() {
270-
#[cfg(target_arch = "x86")]
271-
{
272-
// SAFETY: the `cfg` attr ensures that we only execute this on x86 targets.
273-
unsafe { crate::arch::x86::_mm_pause() };
274-
}
275-
276-
#[cfg(target_arch = "x86_64")]
277-
{
278-
// SAFETY: the `cfg` attr ensures that we only execute this on x86_64 targets.
279-
unsafe { crate::arch::x86_64::_mm_pause() };
280-
}
281-
282-
#[cfg(target_arch = "riscv32")]
283-
{
284-
crate::arch::riscv32::pause();
285-
}
286-
287-
#[cfg(target_arch = "riscv64")]
288-
{
289-
crate::arch::riscv64::pause();
290-
}
291-
292-
#[cfg(any(target_arch = "aarch64", target_arch = "arm64ec"))]
293-
{
294-
// SAFETY: the `cfg` attr ensures that we only execute this on aarch64 targets.
295-
unsafe { crate::arch::aarch64::__isb(crate::arch::aarch64::SY) };
296-
}
297-
298-
#[cfg(all(target_arch = "arm", target_feature = "v6"))]
299-
{
300-
// SAFETY: the `cfg` attr ensures that we only execute this on arm targets
301-
// with support for the v6 feature.
302-
unsafe { crate::arch::arm::__yield() };
270+
crate::cfg_select! {
271+
target_arch = "x86" => {
272+
// SAFETY: the `cfg` attr ensures that we only execute this on x86 targets.
273+
unsafe { crate::arch::x86::_mm_pause() }
274+
}
275+
target_arch = "x86_64" => {
276+
// SAFETY: the `cfg` attr ensures that we only execute this on x86_64 targets.
277+
unsafe { crate::arch::x86_64::_mm_pause() }
278+
}
279+
target_arch = "riscv32" => crate::arch::riscv32::pause(),
280+
target_arch = "riscv64" => crate::arch::riscv64::pause(),
281+
any(target_arch = "aarch64", target_arch = "arm64ec") => {
282+
// SAFETY: the `cfg` attr ensures that we only execute this on aarch64 targets.
283+
unsafe { crate::arch::aarch64::__isb(crate::arch::aarch64::SY) }
284+
}
285+
all(target_arch = "arm", target_feature = "v6") => {
286+
// SAFETY: the `cfg` attr ensures that we only execute this on arm targets
287+
// with support for the v6 feature.
288+
unsafe { crate::arch::arm::__yield() }
289+
}
290+
target_arch = "loongarch32" => crate::arch::loongarch32::ibar::<0>(),
291+
target_arch = "loongarch64" => crate::arch::loongarch64::ibar::<0>(),
292+
_ => { /* do nothing */ }
303293
}
304294
}
305295

0 commit comments

Comments
 (0)