File tree Expand file tree Collapse file tree 1 file changed +10
-4
lines changed
src/tools/miri/src/shims/x86 Expand file tree Collapse file tree 1 file changed +10
-4
lines changed Original file line number Diff line number Diff line change @@ -739,14 +739,20 @@ fn int_abs<'tcx>(
739
739
740
740
assert_eq ! ( op_len, dest_len) ;
741
741
742
+ let zero = ImmTy :: from_int ( 0 , op. layout . field ( this, 0 ) ) ;
743
+
742
744
for i in 0 ..dest_len {
743
- let op = this. read_scalar ( & this. project_index ( & op, i) ?) ?;
745
+ let op = this. read_immediate ( & this. project_index ( & op, i) ?) ?;
744
746
let dest = this. project_index ( & dest, i) ?;
745
747
746
- // Converting to a host "i128" works since the input is always signed.
747
- let res = op. to_int ( dest. layout . size ) ?. unsigned_abs ( ) ;
748
+ let lt_zero = this. wrapping_binary_op ( mir:: BinOp :: Lt , & op, & zero) ?;
749
+ let res = if lt_zero. to_scalar ( ) . to_bool ( ) ? {
750
+ this. wrapping_unary_op ( mir:: UnOp :: Neg , & op) ?
751
+ } else {
752
+ op
753
+ } ;
748
754
749
- this. write_scalar ( Scalar :: from_uint ( res, dest . layout . size ) , & dest) ?;
755
+ this. write_immediate ( * res, & dest) ?;
750
756
}
751
757
752
758
Ok ( ( ) )
You can’t perform that action at this time.
0 commit comments