Skip to content

Commit 2029641

Browse files
committed
implement fabs using soft floats
1 parent 39c72db commit 2029641

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

src/shims/intrinsics.rs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,20 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
9090
}
9191

9292
// Floating-point operations
93+
"fabsf32" => {
94+
let &[ref f] = check_arg_count(args)?;
95+
let f = this.read_scalar(f)?.to_f32()?;
96+
// Can be implemented in soft-floats.
97+
this.write_scalar(Scalar::from_f32(f.abs()), dest)?;
98+
}
99+
"fabsf64" => {
100+
let &[ref f] = check_arg_count(args)?;
101+
let f = this.read_scalar(f)?.to_f64()?;
102+
// Can be implemented in soft-floats.
103+
this.write_scalar(Scalar::from_f64(f.abs()), dest)?;
104+
}
93105
#[rustfmt::skip]
94106
| "sinf32"
95-
| "fabsf32"
96107
| "cosf32"
97108
| "sqrtf32"
98109
| "expf32"
@@ -110,7 +121,6 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
110121
let f = f32::from_bits(this.read_scalar(f)?.to_u32()?);
111122
let f = match intrinsic_name {
112123
"sinf32" => f.sin(),
113-
"fabsf32" => f.abs(),
114124
"cosf32" => f.cos(),
115125
"sqrtf32" => f.sqrt(),
116126
"expf32" => f.exp(),
@@ -129,7 +139,6 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
129139

130140
#[rustfmt::skip]
131141
| "sinf64"
132-
| "fabsf64"
133142
| "cosf64"
134143
| "sqrtf64"
135144
| "expf64"
@@ -147,7 +156,6 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
147156
let f = f64::from_bits(this.read_scalar(f)?.to_u64()?);
148157
let f = match intrinsic_name {
149158
"sinf64" => f.sin(),
150-
"fabsf64" => f.abs(),
151159
"cosf64" => f.cos(),
152160
"sqrtf64" => f.sqrt(),
153161
"expf64" => f.exp(),

0 commit comments

Comments
 (0)