@@ -539,11 +539,6 @@ let box_vec128 mode (arg : H.expr_primitive) ~current_region : H.expr_primitive
539
539
let unbox_vec128 (arg : H.simple_or_prim ) : H.simple_or_prim =
540
540
Prim (Unary (Unbox_number Naked_vec128 , arg))
541
541
542
- let bint_unary_prim bi mode prim arg1 =
543
- box_bint bi mode
544
- (Unary
545
- (Int_arith (standard_int_of_boxed_integer bi, prim), unbox_bint bi arg1))
546
-
547
542
let bint_binary_prim bi mode prim arg1 arg2 =
548
543
box_bint bi mode
549
544
(Binary
@@ -1547,7 +1542,10 @@ let convert_lprim ~big_endian (prim : L.primitive) (args : Simple.t list list)
1547
1542
Printlambda. primitive prim
1548
1543
in
1549
1544
[Unary (Duplicate_block { kind }, arg)]
1550
- | Pnegint , [[arg]] -> [Unary (Int_arith (I. Tagged_immediate , Neg ), arg)]
1545
+ | Pnegint , [[arg]] ->
1546
+ let kind = I. Tagged_immediate in
1547
+ let zero = Simple. const_int_of_kind (I. to_kind kind) 0 in
1548
+ [Binary (Int_arith (kind, Sub ), Simple zero, arg)]
1551
1549
| Paddint , [[arg1]; [arg2]] ->
1552
1550
[Binary (Int_arith (I. Tagged_immediate , Add ), arg1, arg2)]
1553
1551
| Psubint , [[arg1]; [arg2]] ->
@@ -1890,7 +1888,12 @@ let convert_lprim ~big_endian (prim : L.primitive) (args : Simple.t list list)
1890
1888
unbox_bint source arg ))
1891
1889
~current_region ]
1892
1890
| Pnegbint (bi , mode ), [[arg]] ->
1893
- [bint_unary_prim bi mode Neg arg ~current_region ]
1891
+ let size = standard_int_of_boxed_integer bi in
1892
+ [ box_bint bi mode ~current_region
1893
+ (Binary
1894
+ ( Int_arith (size, Sub ),
1895
+ Simple (Simple. const_int_of_kind (I. to_kind size) 0 ),
1896
+ unbox_bint bi arg )) ]
1894
1897
| Paddbint (bi , mode ), [[arg1]; [arg2]] ->
1895
1898
[bint_binary_prim bi mode Add arg1 arg2 ~current_region ]
1896
1899
| Psubbint (bi , mode ), [[arg1]; [arg2]] ->
0 commit comments