Skip to content

Commit 42931e5

Browse files
committed
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.
1 parent 614ab5e commit 42931e5

File tree

1 file changed

+15
-18
lines changed

1 file changed

+15
-18
lines changed

compiler-builtins/src/arm.rs

+15-18
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,13 @@
11
#![cfg(not(feature = "no-asm"))]
2-
#![allow(unused_imports)]
32

4-
use core::intrinsics;
5-
6-
// Apple symbols have a leading underscore.
7-
#[cfg(target_vendor = "apple")]
8-
macro_rules! bl {
9-
($func:literal) => {
10-
concat!("bl _", $func)
11-
};
3+
extern "C" {
4+
fn __udivmodsi4(n: u32, d: u32, rem: *mut u32) -> u32;
5+
fn __divmoddi4(a: i64, b: i64, rem: *mut i64) -> i64;
6+
fn __udivmoddi4(n: u64, d: u64, rem: *mut u64) -> u64;
127
}
13-
#[cfg(not(target_vendor = "apple"))]
14-
macro_rules! bl {
15-
($func:literal) => {
16-
concat!("bl ", $func)
17-
};
8+
9+
extern "aapcs" {
10+
fn __aeabi_idiv(a: i32, b: i32) -> i32;
1811
}
1912

2013
intrinsics! {
@@ -27,10 +20,11 @@ intrinsics! {
2720
"push {{lr}}",
2821
"sub sp, sp, #4",
2922
"mov r2, sp",
30-
bl!("__udivmodsi4"),
23+
"bl {trampoline}",
3124
"ldr r1, [sp]",
3225
"add sp, sp, #4",
3326
"pop {{pc}}",
27+
trampoline = sym crate::arm::__udivmodsi4
3428
);
3529
}
3630

@@ -41,23 +35,25 @@ intrinsics! {
4135
"sub sp, sp, #16",
4236
"add r4, sp, #8",
4337
"str r4, [sp]",
44-
bl!("__udivmoddi4"),
38+
"bl {trampoline}",
4539
"ldr r2, [sp, #8]",
4640
"ldr r3, [sp, #12]",
4741
"add sp, sp, #16",
4842
"pop {{r4, pc}}",
43+
trampoline = sym crate::arm::__udivmoddi4
4944
);
5045
}
5146

5247
#[unsafe(naked)]
5348
pub unsafe extern "C" fn __aeabi_idivmod() {
5449
core::arch::naked_asm!(
5550
"push {{r0, r1, r4, lr}}",
56-
bl!("__aeabi_idiv"),
51+
"bl {trampoline}",
5752
"pop {{r1, r2}}",
5853
"muls r2, r2, r0",
5954
"subs r1, r1, r2",
6055
"pop {{r4, pc}}",
56+
trampoline = sym crate::arm::__aeabi_idiv,
6157
);
6258
}
6359

@@ -68,11 +64,12 @@ intrinsics! {
6864
"sub sp, sp, #16",
6965
"add r4, sp, #8",
7066
"str r4, [sp]",
71-
bl!("__divmoddi4"),
67+
"bl {trampoline}",
7268
"ldr r2, [sp, #8]",
7369
"ldr r3, [sp, #12]",
7470
"add sp, sp, #16",
7571
"pop {{r4, pc}}",
72+
trampoline = sym crate::arm::__divmoddi4,
7673
);
7774
}
7875

0 commit comments

Comments
 (0)