about summary refs log tree commit diff
path: root/library/compiler-builtins/compiler-builtins/src/float/sub.rs
diff options
context:
space:
mode:
Diffstat (limited to 'library/compiler-builtins/compiler-builtins/src/float/sub.rs')
-rw-r--r--library/compiler-builtins/compiler-builtins/src/float/sub.rs24
1 files changed, 24 insertions, 0 deletions
diff --git a/library/compiler-builtins/compiler-builtins/src/float/sub.rs b/library/compiler-builtins/compiler-builtins/src/float/sub.rs
new file mode 100644
index 00000000000..a0fd9dff97f
--- /dev/null
+++ b/library/compiler-builtins/compiler-builtins/src/float/sub.rs
@@ -0,0 +1,24 @@
+use crate::float::Float;
+
+intrinsics! {
+    #[arm_aeabi_alias = __aeabi_fsub]
+    pub extern "C" fn __subsf3(a: f32, b: f32) -> f32 {
+        crate::float::add::__addsf3(a, f32::from_bits(b.to_bits() ^ f32::SIGN_MASK))
+    }
+
+    #[arm_aeabi_alias = __aeabi_dsub]
+    pub extern "C" fn __subdf3(a: f64, b: f64) -> f64 {
+        crate::float::add::__adddf3(a, f64::from_bits(b.to_bits() ^ f64::SIGN_MASK))
+    }
+
+    #[ppc_alias = __subkf3]
+    #[cfg(f128_enabled)]
+    pub extern "C" fn __subtf3(a: f128, b: f128) -> f128 {
+        #[cfg(any(target_arch = "powerpc", target_arch = "powerpc64"))]
+        use crate::float::add::__addkf3 as __addtf3;
+        #[cfg(not(any(target_arch = "powerpc", target_arch = "powerpc64")))]
+        use crate::float::add::__addtf3;
+
+        __addtf3(a, f128::from_bits(b.to_bits() ^ f128::SIGN_MASK))
+    }
+}