| ... | @@ -645,13 +645,13 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void { | ... | @@ -645,13 +645,13 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void { |
| 645 | switch (air_tags[inst]) { | 645 | switch (air_tags[inst]) { |
| 646 | // zig fmt: off | 646 | // zig fmt: off |
| 647 | .add => try self.airAdd(inst), | 647 | .add => try self.airAdd(inst), |
| 648 | .addwrap => try self.airAddWrap(inst), | 648 | .addwrap => try self.airAdd(inst), |
| 649 | .add_sat => try self.airAddSat(inst), | 649 | .add_sat => try self.airAddSat(inst), |
| 650 | .sub => try self.airSub(inst), | 650 | .sub => try self.airSub(inst), |
| 651 | .subwrap => try self.airSubWrap(inst), | 651 | .subwrap => try self.airSub(inst), |
| 652 | .sub_sat => try self.airSubSat(inst), | 652 | .sub_sat => try self.airSubSat(inst), |
| 653 | .mul => try self.airMul(inst), | 653 | .mul => try self.airMul(inst), |
| 654 | .mulwrap => try self.airMulWrap(inst), | 654 | .mulwrap => try self.airMul(inst), |
| 655 | .mul_sat => try self.airMulSat(inst), | 655 | .mul_sat => try self.airMulSat(inst), |
| 656 | .rem => try self.airRem(inst), | 656 | .rem => try self.airRem(inst), |
| 657 | .mod => try self.airMod(inst), | 657 | .mod => try self.airMod(inst), |
| ... | @@ -1318,7 +1318,7 @@ fn airAddWrap(self: *Self, inst: Air.Inst.Index) !void { | ... | @@ -1318,7 +1318,7 @@ fn airAddWrap(self: *Self, inst: Air.Inst.Index) !void { |
| 1318 | const result: MCValue = if (self.liveness.isUnused(inst)) | 1318 | const result: MCValue = if (self.liveness.isUnused(inst)) |
| 1319 | .dead | 1319 | .dead |
| 1320 | else | 1320 | else |
| 1321 | return self.fail("TODO implement addwrap for {}", .{self.target.cpu.arch}); | 1321 | try self.genBinMathOp(inst, bin_op.lhs, bin_op.rhs); |
| 1322 | return self.finishAir(inst, result, .{ bin_op.lhs, bin_op.rhs, .none }); | 1322 | return self.finishAir(inst, result, .{ bin_op.lhs, bin_op.rhs, .none }); |
| 1323 | } | 1323 | } |
| 1324 | | 1324 | |
| ... | @@ -1375,15 +1375,6 @@ fn airSub(self: *Self, inst: Air.Inst.Index) !void { | ... | @@ -1375,15 +1375,6 @@ fn airSub(self: *Self, inst: Air.Inst.Index) !void { |
| 1375 | return self.finishAir(inst, result, .{ bin_op.lhs, bin_op.rhs, .none }); | 1375 | return self.finishAir(inst, result, .{ bin_op.lhs, bin_op.rhs, .none }); |
| 1376 | } | 1376 | } |
| 1377 | | 1377 | |
| 1378 | fn airSubWrap(self: *Self, inst: Air.Inst.Index) !void { | | |
| 1379 | const bin_op = self.air.instructions.items(.data)[inst].bin_op; | | |
| 1380 | const result: MCValue = if (self.liveness.isUnused(inst)) | | |
| 1381 | .dead | | |
| 1382 | else | | |
| 1383 | return self.fail("TODO implement subwrap for {}", .{self.target.cpu.arch}); | | |
| 1384 | return self.finishAir(inst, result, .{ bin_op.lhs, bin_op.rhs, .none }); | | |
| 1385 | } | | |
| 1386 | | | |
| 1387 | fn airSubSat(self: *Self, inst: Air.Inst.Index) !void { | 1378 | fn airSubSat(self: *Self, inst: Air.Inst.Index) !void { |
| 1388 | const bin_op = self.air.instructions.items(.data)[inst].bin_op; | 1379 | const bin_op = self.air.instructions.items(.data)[inst].bin_op; |
| 1389 | const result: MCValue = if (self.liveness.isUnused(inst)) | 1380 | const result: MCValue = if (self.liveness.isUnused(inst)) |
| ... | @@ -1421,15 +1412,6 @@ fn airMul(self: *Self, inst: Air.Inst.Index) !void { | ... | @@ -1421,15 +1412,6 @@ fn airMul(self: *Self, inst: Air.Inst.Index) !void { |
| 1421 | return self.finishAir(inst, result, .{ bin_op.lhs, bin_op.rhs, .none }); | 1412 | return self.finishAir(inst, result, .{ bin_op.lhs, bin_op.rhs, .none }); |
| 1422 | } | 1413 | } |
| 1423 | | 1414 | |
| 1424 | fn airMulWrap(self: *Self, inst: Air.Inst.Index) !void { | | |
| 1425 | const bin_op = self.air.instructions.items(.data)[inst].bin_op; | | |
| 1426 | const result: MCValue = if (self.liveness.isUnused(inst)) | | |
| 1427 | .dead | | |
| 1428 | else | | |
| 1429 | return self.fail("TODO implement mulwrap for {}", .{self.target.cpu.arch}); | | |
| 1430 | return self.finishAir(inst, result, .{ bin_op.lhs, bin_op.rhs, .none }); | | |
| 1431 | } | | |
| 1432 | | | |
| 1433 | fn airMulSat(self: *Self, inst: Air.Inst.Index) !void { | 1415 | fn airMulSat(self: *Self, inst: Air.Inst.Index) !void { |
| 1434 | const bin_op = self.air.instructions.items(.data)[inst].bin_op; | 1416 | const bin_op = self.air.instructions.items(.data)[inst].bin_op; |
| 1435 | const result: MCValue = if (self.liveness.isUnused(inst)) | 1417 | const result: MCValue = if (self.liveness.isUnused(inst)) |
| ... | @@ -1826,7 +1808,7 @@ fn airXor(self: *Self, inst: Air.Inst.Index) !void { | ... | @@ -1826,7 +1808,7 @@ fn airXor(self: *Self, inst: Air.Inst.Index) !void { |
| 1826 | const result: MCValue = if (self.liveness.isUnused(inst)) | 1808 | const result: MCValue = if (self.liveness.isUnused(inst)) |
| 1827 | .dead | 1809 | .dead |
| 1828 | else | 1810 | else |
| 1829 | return self.fail("TODO implement xor for {}", .{self.target.cpu.arch}); | 1811 | try self.genBinMathOp(inst, bin_op.lhs, bin_op.rhs); |
| 1830 | return self.finishAir(inst, result, .{ bin_op.lhs, bin_op.rhs, .none }); | 1812 | return self.finishAir(inst, result, .{ bin_op.lhs, bin_op.rhs, .none }); |
| 1831 | } | 1813 | } |
| 1832 | | 1814 | |