2222 .syntax unified
2323 .p2align 2
2424DEFINE_COMPILERRT_FUNCTION(__aeabi_cdcmpeq)
25+ PACBTI_LANDING
26+ #if defined(__ARM_FEATURE_PAC_DEFAULT)
27+ push {r0 - r3 , r12 , lr}
28+ #else
2529 push {r0 - r3 , lr}
30+ #endif
2631 bl __aeabi_cdcmpeq_check_nan
2732 cmp r0 , # 1
2833#if defined(USE_THUMB_1)
@@ -37,8 +42,13 @@ DEFINE_COMPILERRT_FUNCTION(__aeabi_cdcmpeq)
3742 movs r0 , # 0xF
3843 lsls r0 , r0 , # 31
3944 pop {r0 - r3 , pc}
45+ #else
46+ #if defined(__ARM_FEATURE_PAC_DEFAULT)
47+ pop {r0 - r3 , r12 , lr}
48+ aut r12 , lr , sp
4049#else
4150 pop {r0 - r3 , lr}
51+ #endif
4252
4353 // NaN has been ruled out , so __aeabi_cdcmple can't trap
4454 // Use "it ne" + unconditional branch to guarantee a supported relocation if
@@ -47,8 +57,8 @@ DEFINE_COMPILERRT_FUNCTION(__aeabi_cdcmpeq)
4757 bne __aeabi_cdcmple
4858
4959#if defined(USE_THUMB_2)
50- mov ip , #APSR_C
51- msr APSR_nzcvq , ip
60+ mov r12 , #APSR_C
61+ msr APSR_nzcvq , r12
5262#else
5363 msr APSR_nzcvq , #APSR_C
5464#endif
@@ -70,9 +80,14 @@ END_COMPILERRT_FUNCTION(__aeabi_cdcmpeq)
7080 .syntax unified
7181 .p2align 2
7282DEFINE_COMPILERRT_FUNCTION(__aeabi_cdcmple)
83+ PACBTI_LANDING
7384 // Per the RTABI , this function must preserve r0 - r11 .
7485 // Save lr in the same instruction for compactness
86+ #if defined(__ARM_FEATURE_PAC_DEFAULT)
87+ push {r0 - r3 , r12 , lr}
88+ #else
7589 push {r0 - r3 , lr}
90+ #endif
7691
7792 bl __aeabi_dcmplt
7893 cmp r0 , # 1
@@ -111,9 +126,14 @@ DEFINE_COMPILERRT_FUNCTION(__aeabi_cdcmple)
111126
1121271 :
113128 msr APSR_nzcvq , ip
129+ #if defined(__ARM_FEATURE_PAC_DEFAULT)
130+ pop {r0 - r3 , r12 , lr}
131+ bxaut r12 , lr , sp
132+ #else
114133 pop {r0 - r3}
115134 POP_PC()
116135#endif
136+ #endif
117137END_COMPILERRT_FUNCTION(__aeabi_cdcmple)
118138
119139// int __aeabi_cdrcmple(double a , double b) {
@@ -123,6 +143,9 @@ END_COMPILERRT_FUNCTION(__aeabi_cdcmple)
123143 .syntax unified
124144 .p2align 2
125145DEFINE_COMPILERRT_FUNCTION(__aeabi_cdrcmple)
146+ #if defined(__ARM_FEATURE_BTI_DEFAULT)
147+ bti
148+ #endif
126149 // Swap r0 and r2
127150 mov ip , r0
128151 mov r0 , r2
0 commit comments