about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLevitatingLion <levitatinglion@web.de>2023-02-24 02:59:58 +0100
committerLevitatingLion <levitatinglion@web.de>2023-02-24 02:59:58 +0100
commita80f5272c6b4a29f4f6479d63a5753ed9b697d8c (patch)
treeaaa5bb117cc48c93bba24e5095bb7df3fdf7b164
parent2a979f8ba02f0c60e327c9764ea27837ba4bb028 (diff)
downloadrust-a80f5272c6b4a29f4f6479d63a5753ed9b697d8c.tar.gz
rust-a80f5272c6b4a29f4f6479d63a5753ed9b697d8c.zip
Add shim for `llvm.arm.hint`
This shim is required for `core::hint::spin_loop` on `arm` targets
-rw-r--r--src/tools/miri/src/shims/foreign_items.rs13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/tools/miri/src/shims/foreign_items.rs b/src/tools/miri/src/shims/foreign_items.rs
index 2d9eb37a258..03275ed4ed1 100644
--- a/src/tools/miri/src/shims/foreign_items.rs
+++ b/src/tools/miri/src/shims/foreign_items.rs
@@ -885,6 +885,19 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriInterpCxExt<'mir, 'tcx> {
                     }
                 }
             }
+            "llvm.arm.hint" if this.tcx.sess.target.arch == "arm" => {
+                let [arg] = this.check_shim(abi, Abi::Unadjusted, link_name, args)?;
+                let arg = this.read_scalar(arg)?.to_i32()?;
+                match arg {
+                    // YIELD
+                    1 => {
+                        this.yield_active_thread();
+                    }
+                    _ => {
+                        throw_unsup_format!("unsupported llvm.arm.hint argument {}", arg);
+                    }
+                }
+            }
 
             // Platform-specific shims
             _ =>