@@ -334,7 +334,8 @@ impl IntrinsicCallMethods<'tcx> for Builder<'a, 'll, 'tcx> {
334
334
"ctlz" | "ctlz_nonzero" | "cttz" | "cttz_nonzero" | "ctpop" | "bswap" |
335
335
"bitreverse" | "add_with_overflow" | "sub_with_overflow" |
336
336
"mul_with_overflow" | "overflowing_add" | "overflowing_sub" | "overflowing_mul" |
337
- "unchecked_div" | "unchecked_rem" | "unchecked_shl" | "unchecked_shr" | "exact_div" |
337
+ "unchecked_div" | "unchecked_rem" | "unchecked_shl" | "unchecked_shr" |
338
+ "unchecked_add" | "unchecked_sub" | "unchecked_mul" | "exact_div" |
338
339
"rotate_left" | "rotate_right" | "saturating_add" | "saturating_sub" => {
339
340
let ty = arg_tys[ 0 ] ;
340
341
match int_type_width_signed ( ty, self ) {
@@ -430,6 +431,27 @@ impl IntrinsicCallMethods<'tcx> for Builder<'a, 'll, 'tcx> {
430
431
} else {
431
432
self . lshr ( args[ 0 ] . immediate ( ) , args[ 1 ] . immediate ( ) )
432
433
} ,
434
+ "unchecked_add" => {
435
+ if signed {
436
+ self . unchecked_sadd ( args[ 0 ] . immediate ( ) , args[ 1 ] . immediate ( ) )
437
+ } else {
438
+ self . unchecked_uadd ( args[ 0 ] . immediate ( ) , args[ 1 ] . immediate ( ) )
439
+ }
440
+ } ,
441
+ "unchecked_sub" => {
442
+ if signed {
443
+ self . unchecked_ssub ( args[ 0 ] . immediate ( ) , args[ 1 ] . immediate ( ) )
444
+ } else {
445
+ self . unchecked_usub ( args[ 0 ] . immediate ( ) , args[ 1 ] . immediate ( ) )
446
+ }
447
+ } ,
448
+ "unchecked_mul" => {
449
+ if signed {
450
+ self . unchecked_smul ( args[ 0 ] . immediate ( ) , args[ 1 ] . immediate ( ) )
451
+ } else {
452
+ self . unchecked_umul ( args[ 0 ] . immediate ( ) , args[ 1 ] . immediate ( ) )
453
+ }
454
+ } ,
433
455
"rotate_left" | "rotate_right" => {
434
456
let is_left = name == "rotate_left" ;
435
457
let val = args[ 0 ] . immediate ( ) ;
0 commit comments