]> git.lizzy.rs Git - rust.git/commitdiff
implement fabs using soft floats
authorRalf Jung <post@ralfj.de>
Wed, 16 Mar 2022 22:33:59 +0000 (18:33 -0400)
committerRalf Jung <post@ralfj.de>
Wed, 16 Mar 2022 22:33:59 +0000 (18:33 -0400)
src/shims/intrinsics.rs

index b4416bfa985989b84c2bcc034a7d71c3b47d2db0..24aeb448912b4665e6057a6c226dbb4735a25b4a 100644 (file)
@@ -90,9 +90,20 @@ fn call_intrinsic(
             }
 
             // Floating-point operations
+            "fabsf32" => {
+                let &[ref f] = check_arg_count(args)?;
+                let f = this.read_scalar(f)?.to_f32()?;
+                // Can be implemented in soft-floats.
+                this.write_scalar(Scalar::from_f32(f.abs()), dest)?;
+            }
+            "fabsf64" => {
+                let &[ref f] = check_arg_count(args)?;
+                let f = this.read_scalar(f)?.to_f64()?;
+                // Can be implemented in soft-floats.
+                this.write_scalar(Scalar::from_f64(f.abs()), dest)?;
+            }
             #[rustfmt::skip]
             | "sinf32"
-            | "fabsf32"
             | "cosf32"
             | "sqrtf32"
             | "expf32"
@@ -110,7 +121,6 @@ fn call_intrinsic(
                 let f = f32::from_bits(this.read_scalar(f)?.to_u32()?);
                 let f = match intrinsic_name {
                     "sinf32" => f.sin(),
-                    "fabsf32" => f.abs(),
                     "cosf32" => f.cos(),
                     "sqrtf32" => f.sqrt(),
                     "expf32" => f.exp(),
@@ -129,7 +139,6 @@ fn call_intrinsic(
 
             #[rustfmt::skip]
             | "sinf64"
-            | "fabsf64"
             | "cosf64"
             | "sqrtf64"
             | "expf64"
@@ -147,7 +156,6 @@ fn call_intrinsic(
                 let f = f64::from_bits(this.read_scalar(f)?.to_u64()?);
                 let f = match intrinsic_name {
                     "sinf64" => f.sin(),
-                    "fabsf64" => f.abs(),
                     "cosf64" => f.cos(),
                     "sqrtf64" => f.sqrt(),
                     "expf64" => f.exp(),