about summary refs log tree commit diff
path: root/library
diff options
context:
space:
mode:
authorTrevor Gross <tmgross@umich.edu>2025-04-17 08:19:50 +0000
committerTrevor Gross <t.gross35@gmail.com>2025-04-17 04:02:54 -0500
commit92725845336bf8dc4ceb1c2e5f04a6839b6dc5f5 (patch)
treef10fd54d4c90f3c017329261cfd53400d01135dd /library
parent7fb882c3fdf78bc1e3fe06c869e2d62ca64f3810 (diff)
downloadrust-92725845336bf8dc4ceb1c2e5f04a6839b6dc5f5.tar.gz
rust-92725845336bf8dc4ceb1c2e5f04a6839b6dc5f5.zip
Replace the `bl!` macro with `asm_sym`
`bl!` is being used to add a leading underscore on Apple targets.
`asm_sym` has been around since 2022 and handles platform-specific
symbol names automatically, so make use of this instead.

I have verified that `armv7s-apple-ios` still builds correctly.
Diffstat (limited to 'library')
-rw-r--r--library/compiler-builtins/compiler-builtins/src/arm.rs36
1 files changed, 18 insertions, 18 deletions
diff --git a/library/compiler-builtins/compiler-builtins/src/arm.rs b/library/compiler-builtins/compiler-builtins/src/arm.rs
index 878bb8c4331..7859b51207c 100644
--- a/library/compiler-builtins/compiler-builtins/src/arm.rs
+++ b/library/compiler-builtins/compiler-builtins/src/arm.rs
@@ -1,20 +1,16 @@
 #![cfg(not(feature = "no-asm"))]
-#![allow(unused_imports)]
 
-use core::intrinsics;
-
-// Apple symbols have a leading underscore.
-#[cfg(target_vendor = "apple")]
-macro_rules! bl {
-    ($func:literal) => {
-        concat!("bl _", $func)
-    };
+// Interfaces used by naked trampolines.
+extern "C" {
+    fn __udivmodsi4(a: u32, b: u32, rem: *mut u32) -> u32;
+    fn __udivmoddi4(a: u64, b: u64, rem: *mut u64) -> u64;
+    fn __divmoddi4(a: i64, b: i64, rem: *mut i64) -> i64;
 }
-#[cfg(not(target_vendor = "apple"))]
-macro_rules! bl {
-    ($func:literal) => {
-        concat!("bl ", $func)
-    };
+
+extern "aapcs" {
+    // AAPCS is not always the correct ABI for these intrinsics, but we only use this to
+    // forward another `__aeabi_` call so it doesn't matter.
+    fn __aeabi_idiv(a: i32, b: i32) -> i32;
 }
 
 intrinsics! {
@@ -27,10 +23,11 @@ intrinsics! {
             "push {{lr}}",
             "sub sp, sp, #4",
             "mov r2, sp",
-            bl!("__udivmodsi4"),
+            "bl {trampoline}",
             "ldr r1, [sp]",
             "add sp, sp, #4",
             "pop {{pc}}",
+            trampoline = sym crate::arm::__udivmodsi4
         );
     }
 
@@ -41,11 +38,12 @@ intrinsics! {
             "sub sp, sp, #16",
             "add r4, sp, #8",
             "str r4, [sp]",
-            bl!("__udivmoddi4"),
+            "bl {trampoline}",
             "ldr r2, [sp, #8]",
             "ldr r3, [sp, #12]",
             "add sp, sp, #16",
             "pop {{r4, pc}}",
+            trampoline = sym crate::arm::__udivmoddi4
         );
     }
 
@@ -53,11 +51,12 @@ intrinsics! {
     pub unsafe extern "C" fn __aeabi_idivmod() {
         core::arch::naked_asm!(
             "push {{r0, r1, r4, lr}}",
-            bl!("__aeabi_idiv"),
+            "bl {trampoline}",
             "pop {{r1, r2}}",
             "muls r2, r2, r0",
             "subs r1, r1, r2",
             "pop {{r4, pc}}",
+            trampoline = sym crate::arm::__aeabi_idiv,
         );
     }
 
@@ -68,11 +67,12 @@ intrinsics! {
             "sub sp, sp, #16",
             "add r4, sp, #8",
             "str r4, [sp]",
-            bl!("__divmoddi4"),
+            "bl {trampoline}",
             "ldr r2, [sp, #8]",
             "ldr r3, [sp, #12]",
             "add sp, sp, #16",
             "pop {{r4, pc}}",
+            trampoline = sym crate::arm::__divmoddi4,
         );
     }