| ... | ... | @@ -7474,7 +7474,10 @@ fn zirShl( |
| 7474 | 7474 | } |
| 7475 | 7475 | const val = switch (air_tag) { |
| 7476 | 7476 | .shl_exact => return sema.fail(block, lhs_src, "TODO implement Sema for comptime shl_exact", .{}), |
| 7477 | | .shl_sat => try lhs_val.shlSat(rhs_val, lhs_ty, sema.arena, sema.mod.getTarget()), |
| 7477 | .shl_sat => if (lhs_ty.zigTypeTag() == .ComptimeInt) |
| 7478 | try lhs_val.shl(rhs_val, sema.arena) |
| 7479 | else |
| 7480 | try lhs_val.shlSat(rhs_val, lhs_ty, sema.arena, sema.mod.getTarget()), |
| 7478 | 7481 | .shl => try lhs_val.shl(rhs_val, sema.arena), |
| 7479 | 7482 | else => unreachable, |
| 7480 | 7483 | }; |
| ... | ... | @@ -8189,10 +8192,12 @@ fn analyzeArithmetic( |
| 8189 | 8192 | return casted_lhs; |
| 8190 | 8193 | } |
| 8191 | 8194 | if (maybe_lhs_val) |lhs_val| { |
| 8192 | | return sema.addConstant( |
| 8193 | | scalar_type, |
| 8194 | | try lhs_val.intAddSat(rhs_val, scalar_type, sema.arena, target), |
| 8195 | | ); |
| 8195 | const val = if (scalar_tag == .ComptimeInt) |
| 8196 | try lhs_val.intAdd(rhs_val, sema.arena) |
| 8197 | else |
| 8198 | try lhs_val.intAddSat(rhs_val, scalar_type, sema.arena, target); |
| 8199 | |
| 8200 | return sema.addConstant(scalar_type, val); |
| 8196 | 8201 | } else break :rs .{ .src = lhs_src, .air_tag = .add_sat }; |
| 8197 | 8202 | } else break :rs .{ .src = rhs_src, .air_tag = .add_sat }; |
| 8198 | 8203 | }, |
| ... | ... | @@ -8280,10 +8285,12 @@ fn analyzeArithmetic( |
| 8280 | 8285 | return sema.addConstUndef(scalar_type); |
| 8281 | 8286 | } |
| 8282 | 8287 | if (maybe_rhs_val) |rhs_val| { |
| 8283 | | return sema.addConstant( |
| 8284 | | scalar_type, |
| 8285 | | try lhs_val.intSubSat(rhs_val, scalar_type, sema.arena, target), |
| 8286 | | ); |
| 8288 | const val = if (scalar_tag == .ComptimeInt) |
| 8289 | try lhs_val.intSub(rhs_val, sema.arena) |
| 8290 | else |
| 8291 | try lhs_val.intSubSat(rhs_val, scalar_type, sema.arena, target); |
| 8292 | |
| 8293 | return sema.addConstant(scalar_type, val); |
| 8287 | 8294 | } else break :rs .{ .src = rhs_src, .air_tag = .sub_sat }; |
| 8288 | 8295 | } else break :rs .{ .src = lhs_src, .air_tag = .sub_sat }; |
| 8289 | 8296 | }, |
| ... | ... | @@ -8663,10 +8670,13 @@ fn analyzeArithmetic( |
| 8663 | 8670 | if (lhs_val.isUndef()) { |
| 8664 | 8671 | return sema.addConstUndef(scalar_type); |
| 8665 | 8672 | } |
| 8666 | | return sema.addConstant( |
| 8667 | | scalar_type, |
| 8668 | | try lhs_val.intMulSat(rhs_val, scalar_type, sema.arena, target), |
| 8669 | | ); |
| 8673 | |
| 8674 | const val = if (scalar_tag == .ComptimeInt) |
| 8675 | try lhs_val.intMul(rhs_val, sema.arena) |
| 8676 | else |
| 8677 | try lhs_val.intMulSat(rhs_val, scalar_type, sema.arena, target); |
| 8678 | |
| 8679 | return sema.addConstant(scalar_type, val); |
| 8670 | 8680 | } else break :rs .{ .src = lhs_src, .air_tag = .mul_sat }; |
| 8671 | 8681 | } else break :rs .{ .src = rhs_src, .air_tag = .mul_sat }; |
| 8672 | 8682 | }, |