aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/cxxsupp/builtins/arm/aeabi_cfcmp.S
diff options
context:
space:
mode:
authorAnton Samokhvalov <pg83@yandex.ru>2022-02-10 16:45:15 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:45:15 +0300
commit72cb13b4aff9bc9cf22e49251bc8fd143f82538f (patch)
treeda2c34829458c7d4e74bdfbdf85dff449e9e7fb8 /contrib/libs/cxxsupp/builtins/arm/aeabi_cfcmp.S
parent778e51ba091dc39e7b7fcab2b9cf4dbedfb6f2b5 (diff)
downloadydb-72cb13b4aff9bc9cf22e49251bc8fd143f82538f.tar.gz
Restoring authorship annotation for Anton Samokhvalov <pg83@yandex.ru>. Commit 1 of 2.
Diffstat (limited to 'contrib/libs/cxxsupp/builtins/arm/aeabi_cfcmp.S')
-rw-r--r--contrib/libs/cxxsupp/builtins/arm/aeabi_cfcmp.S182
1 files changed, 91 insertions, 91 deletions
diff --git a/contrib/libs/cxxsupp/builtins/arm/aeabi_cfcmp.S b/contrib/libs/cxxsupp/builtins/arm/aeabi_cfcmp.S
index 43594e5c39..af8a19b18a 100644
--- a/contrib/libs/cxxsupp/builtins/arm/aeabi_cfcmp.S
+++ b/contrib/libs/cxxsupp/builtins/arm/aeabi_cfcmp.S
@@ -1,91 +1,91 @@
-//===-- aeabi_cfcmp.S - EABI cfcmp* implementation ------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-#if __BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__
-#error big endian support not implemented
-#endif
-
-#define APSR_Z (1 << 30)
-#define APSR_C (1 << 29)
-
-// void __aeabi_cfcmpeq(float a, float b) {
-// if (isnan(a) || isnan(b)) {
-// Z = 0; C = 1;
-// } else {
-// __aeabi_cfcmple(a, b);
-// }
-// }
-
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__aeabi_cfcmpeq)
- push {r0-r3, lr}
- bl __aeabi_cfcmpeq_check_nan
- cmp r0, #1
- pop {r0-r3, lr}
-
- // NaN has been ruled out, so __aeabi_cfcmple can't trap
- bne __aeabi_cfcmple
-
- msr CPSR_f, #APSR_C
- JMP(lr)
-END_COMPILERRT_FUNCTION(__aeabi_cfcmpeq)
-
-
-// void __aeabi_cfcmple(float a, float b) {
-// if (__aeabi_fcmplt(a, b)) {
-// Z = 0; C = 0;
-// } else if (__aeabi_fcmpeq(a, b)) {
-// Z = 1; C = 1;
-// } else {
-// Z = 0; C = 1;
-// }
-// }
-
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__aeabi_cfcmple)
- // Per the RTABI, this function must preserve r0-r11.
- // Save lr in the same instruction for compactness
- push {r0-r3, lr}
-
- bl __aeabi_fcmplt
- cmp r0, #1
- moveq ip, #0
- beq 1f
-
- ldm sp, {r0-r3}
- bl __aeabi_fcmpeq
- cmp r0, #1
- moveq ip, #(APSR_C | APSR_Z)
- movne ip, #(APSR_C)
-
-1:
- msr CPSR_f, ip
- pop {r0-r3}
- POP_PC()
-END_COMPILERRT_FUNCTION(__aeabi_cfcmple)
-
-// int __aeabi_cfrcmple(float a, float b) {
-// return __aeabi_cfcmple(b, a);
-// }
-
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__aeabi_cfrcmple)
- // Swap r0 and r1
- mov ip, r0
- mov r0, r1
- mov r1, ip
-
- b __aeabi_cfcmple
-END_COMPILERRT_FUNCTION(__aeabi_cfrcmple)
-
+//===-- aeabi_cfcmp.S - EABI cfcmp* implementation ------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "../assembly.h"
+
+#if __BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__
+#error big endian support not implemented
+#endif
+
+#define APSR_Z (1 << 30)
+#define APSR_C (1 << 29)
+
+// void __aeabi_cfcmpeq(float a, float b) {
+// if (isnan(a) || isnan(b)) {
+// Z = 0; C = 1;
+// } else {
+// __aeabi_cfcmple(a, b);
+// }
+// }
+
+ .syntax unified
+ .p2align 2
+DEFINE_COMPILERRT_FUNCTION(__aeabi_cfcmpeq)
+ push {r0-r3, lr}
+ bl __aeabi_cfcmpeq_check_nan
+ cmp r0, #1
+ pop {r0-r3, lr}
+
+ // NaN has been ruled out, so __aeabi_cfcmple can't trap
+ bne __aeabi_cfcmple
+
+ msr CPSR_f, #APSR_C
+ JMP(lr)
+END_COMPILERRT_FUNCTION(__aeabi_cfcmpeq)
+
+
+// void __aeabi_cfcmple(float a, float b) {
+// if (__aeabi_fcmplt(a, b)) {
+// Z = 0; C = 0;
+// } else if (__aeabi_fcmpeq(a, b)) {
+// Z = 1; C = 1;
+// } else {
+// Z = 0; C = 1;
+// }
+// }
+
+ .syntax unified
+ .p2align 2
+DEFINE_COMPILERRT_FUNCTION(__aeabi_cfcmple)
+ // Per the RTABI, this function must preserve r0-r11.
+ // Save lr in the same instruction for compactness
+ push {r0-r3, lr}
+
+ bl __aeabi_fcmplt
+ cmp r0, #1
+ moveq ip, #0
+ beq 1f
+
+ ldm sp, {r0-r3}
+ bl __aeabi_fcmpeq
+ cmp r0, #1
+ moveq ip, #(APSR_C | APSR_Z)
+ movne ip, #(APSR_C)
+
+1:
+ msr CPSR_f, ip
+ pop {r0-r3}
+ POP_PC()
+END_COMPILERRT_FUNCTION(__aeabi_cfcmple)
+
+// int __aeabi_cfrcmple(float a, float b) {
+// return __aeabi_cfcmple(b, a);
+// }
+
+ .syntax unified
+ .p2align 2
+DEFINE_COMPILERRT_FUNCTION(__aeabi_cfrcmple)
+ // Swap r0 and r1
+ mov ip, r0
+ mov r0, r1
+ mov r1, ip
+
+ b __aeabi_cfcmple
+END_COMPILERRT_FUNCTION(__aeabi_cfrcmple)
+