| ... | @@ -1814,10 +1814,8 @@ fn genInst(func: *CodeGen, inst: Air.Inst.Index) InnerError!void { | ... | @@ -1814,10 +1814,8 @@ fn genInst(func: *CodeGen, inst: Air.Inst.Index) InnerError!void { |
| 1814 | .subwrap => func.airWrapBinOp(inst, .sub), | 1814 | .subwrap => func.airWrapBinOp(inst, .sub), |
| 1815 | .mul => func.airBinOp(inst, .mul), | 1815 | .mul => func.airBinOp(inst, .mul), |
| 1816 | .mulwrap => func.airWrapBinOp(inst, .mul), | 1816 | .mulwrap => func.airWrapBinOp(inst, .mul), |
| 1817 | .div_float, | 1817 | .div_float, .div_exact => func.airDiv(inst), |
| 1818 | .div_exact, | 1818 | .div_trunc => func.airDivTrunc(inst), |
| 1819 | .div_trunc, | | |
| 1820 | => func.airDiv(inst), | | |
| 1821 | .div_floor => func.airDivFloor(inst), | 1819 | .div_floor => func.airDivFloor(inst), |
| 1822 | .bit_and => func.airBinOp(inst, .@"and"), | 1820 | .bit_and => func.airBinOp(inst, .@"and"), |
| 1823 | .bit_or => func.airBinOp(inst, .@"or"), | 1821 | .bit_or => func.airBinOp(inst, .@"or"), |
| ... | @@ -6138,6 +6136,26 @@ fn airDiv(func: *CodeGen, inst: Air.Inst.Index) InnerError!void { | ... | @@ -6138,6 +6136,26 @@ fn airDiv(func: *CodeGen, inst: Air.Inst.Index) InnerError!void { |
| 6138 | func.finishAir(inst, result, &.{ bin_op.lhs, bin_op.rhs }); | 6136 | func.finishAir(inst, result, &.{ bin_op.lhs, bin_op.rhs }); |
| 6139 | } | 6137 | } |
| 6140 | | 6138 | |
| | 6139 | fn airDivTrunc(func: *CodeGen, inst: Air.Inst.Index) InnerError!void { |
| | 6140 | const bin_op = func.air.instructions.items(.data)[inst].bin_op; |
| | 6141 | |
| | 6142 | const ty = func.air.typeOfIndex(inst); |
| | 6143 | const lhs = try func.resolveInst(bin_op.lhs); |
| | 6144 | const rhs = try func.resolveInst(bin_op.rhs); |
| | 6145 | |
| | 6146 | const div_result = if (ty.isSignedInt()) |
| | 6147 | try func.divSigned(lhs, rhs, ty) |
| | 6148 | else |
| | 6149 | try (try func.binOp(lhs, rhs, ty, .div)).toLocal(func, ty); |
| | 6150 | |
| | 6151 | if (ty.isAnyFloat()) { |
| | 6152 | const trunc_result = try (try func.floatOp(.trunc, ty, &.{div_result})).toLocal(func, ty); |
| | 6153 | return func.finishAir(inst, trunc_result, &.{ bin_op.lhs, bin_op.rhs }); |
| | 6154 | } |
| | 6155 | |
| | 6156 | return func.finishAir(inst, div_result, &.{ bin_op.lhs, bin_op.rhs }); |
| | 6157 | } |
| | 6158 | |
| 6141 | fn airDivFloor(func: *CodeGen, inst: Air.Inst.Index) InnerError!void { | 6159 | fn airDivFloor(func: *CodeGen, inst: Air.Inst.Index) InnerError!void { |
| 6142 | const bin_op = func.air.instructions.items(.data)[inst].bin_op; | 6160 | const bin_op = func.air.instructions.items(.data)[inst].bin_op; |
| 6143 | | 6161 | |