@@ -241,9 +241,6 @@ pub fn eval_op(op: &Op, args: &[&Value], var_vals: &FxHashMap<String, Value>) ->
241
241
}
242
242
} ) ,
243
243
Op :: FpBinOp ( o) => {
244
- // Promote to f64 if either operand is f64
245
- let promote_to_f64 =
246
- matches ! ( args[ 0 ] , Value :: F64 ( _) ) || matches ! ( args[ 1 ] , Value :: F64 ( _) ) ;
247
244
fn comp < T : Float > ( a : T , b : T , op : FpBinOp ) -> T {
248
245
match op {
249
246
FpBinOp :: Add => a + b,
@@ -255,16 +252,20 @@ pub fn eval_op(op: &Op, args: &[&Value], var_vals: &FxHashMap<String, Value>) ->
255
252
FpBinOp :: Min => a. min ( b) ,
256
253
}
257
254
}
258
- if promote_to_f64 {
259
- Value :: F64 ( comp ( args[ 0 ] . as_f64 ( ) , args[ 1 ] . as_f64 ( ) , * o) )
260
- } else {
261
- Value :: F32 ( comp ( args[ 0 ] . as_f32 ( ) , args[ 1 ] . as_f32 ( ) , * o) )
255
+ match ( args[ 0 ] , args[ 1 ] ) {
256
+ ( Value :: F32 ( _) , Value :: F32 ( _) ) => {
257
+ Value :: F32 ( comp ( args[ 0 ] . as_f32 ( ) , args[ 1 ] . as_f32 ( ) , * o) )
258
+ }
259
+ ( Value :: F64 ( _) , Value :: F64 ( _) ) => {
260
+ Value :: F64 ( comp ( args[ 0 ] . as_f64 ( ) , args[ 1 ] . as_f64 ( ) , * o) )
261
+ }
262
+ _ => panic ! (
263
+ "Expected two F32 or F64, got LHS {} and RHS {}" ,
264
+ args[ 0 ] , args[ 1 ]
265
+ ) ,
262
266
}
263
267
}
264
268
Op :: FpBinPred ( o) => Value :: Bool ( {
265
- // Promote to f64 if either operand is f64
266
- let promote_to_f64 =
267
- matches ! ( args[ 0 ] , Value :: F64 ( _) ) || matches ! ( args[ 1 ] , Value :: F64 ( _) ) ;
268
269
fn comp < T : Float > ( a : T , b : T , op : FpBinPred ) -> bool {
269
270
match op {
270
271
FpBinPred :: Le => a <= b,
@@ -274,10 +275,13 @@ pub fn eval_op(op: &Op, args: &[&Value], var_vals: &FxHashMap<String, Value>) ->
274
275
FpBinPred :: Gt => a > b,
275
276
}
276
277
}
277
- if promote_to_f64 {
278
- comp ( args[ 0 ] . as_f64 ( ) , args[ 1 ] . as_f64 ( ) , * o)
279
- } else {
280
- comp ( args[ 0 ] . as_f32 ( ) , args[ 1 ] . as_f32 ( ) , * o)
278
+ match ( args[ 0 ] , args[ 1 ] ) {
279
+ ( Value :: F32 ( _) , Value :: F32 ( _) ) => comp ( args[ 0 ] . as_f32 ( ) , args[ 1 ] . as_f32 ( ) , * o) ,
280
+ ( Value :: F64 ( _) , Value :: F64 ( _) ) => comp ( args[ 0 ] . as_f64 ( ) , args[ 1 ] . as_f64 ( ) , * o) ,
281
+ _ => panic ! (
282
+ "Expected two F32 or F64, got LHS {} and RHS {}" ,
283
+ args[ 0 ] , args[ 1 ]
284
+ ) ,
281
285
}
282
286
} ) ,
283
287
Op :: FpUnPred ( o) => Value :: Bool ( {
0 commit comments