diff options
| author | joachimschmidt557 <joachim.schmidt557@outlook.com> | 2022-03-12 21:02:53 +0100 |
|---|---|---|
| committer | joachimschmidt557 <joachim.schmidt557@outlook.com> | 2022-03-13 11:32:08 +0100 |
| commit | b74cd902c6abf46644329409dae493335a1708bc (patch) | |
| tree | 660c3d3afaf2d3cd1c2f996d2ba1fe92ddd2baea /src | |
| parent | 1f28c72c395e9418cbb074d1490426b3dc359a5f (diff) | |
| download | zig-b74cd902c6abf46644329409dae493335a1708bc.tar.gz zig-b74cd902c6abf46644329409dae493335a1708bc.zip | |
stage2 AArch64: enable mul for ints with <= 64 bits
Diffstat (limited to 'src')
| -rw-r--r-- | src/arch/aarch64/CodeGen.zig | 12 |
1 files changed, 4 insertions, 8 deletions
diff --git a/src/arch/aarch64/CodeGen.zig b/src/arch/aarch64/CodeGen.zig index 5e9f1ecd81..9534e31a01 100644 --- a/src/arch/aarch64/CodeGen.zig +++ b/src/arch/aarch64/CodeGen.zig @@ -538,7 +538,7 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void { .sub, .ptr_sub => try self.airBinOp(inst), .subwrap => try self.airSubWrap(inst), .sub_sat => try self.airSubSat(inst), - .mul => try self.airMul(inst), + .mul => try self.airBinOp(inst), .mulwrap => try self.airMulWrap(inst), .mul_sat => try self.airMulSat(inst), .rem => try self.airRem(inst), @@ -820,7 +820,9 @@ fn allocMemPtr(self: *Self, inst: Air.Inst.Index) !u32 { const elem_ty = self.air.typeOfIndex(inst).elemType(); if (!elem_ty.hasRuntimeBits()) { - return self.allocMem(inst, @sizeOf(usize), @alignOf(usize)); + // As this stack item will never be dereferenced at runtime, + // return the current stack offset + return self.next_stack_offset; } const abi_size = math.cast(u32, elem_ty.abiSize(self.target.*)) catch { @@ -1540,12 +1542,6 @@ fn airSubSat(self: *Self, inst: Air.Inst.Index) !void { return self.finishAir(inst, result, .{ bin_op.lhs, bin_op.rhs, .none }); } -fn airMul(self: *Self, inst: Air.Inst.Index) !void { - const bin_op = self.air.instructions.items(.data)[inst].bin_op; - const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement mul for {}", .{self.target.cpu.arch}); - return self.finishAir(inst, result, .{ bin_op.lhs, bin_op.rhs, .none }); -} - fn airMulWrap(self: *Self, inst: Air.Inst.Index) !void { const bin_op = self.air.instructions.items(.data)[inst].bin_op; const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement mulwrap for {}", .{self.target.cpu.arch}); |
