authorgravatar for joachim.schmidt557@outlook.comJoachim Schmidt <joachim.schmidt557@outlook.com> 2022-03-12 21:02:53+01:00
committergravatar for joachim.schmidt557@outlook.comJoachim Schmidt <joachim.schmidt557@outlook.com> 2022-03-13 11:32:08+01:00
logb74cd902c6abf46644329409dae493335a1708bc
tree660c3d3afaf2d3cd1c2f996d2ba1fe92ddd2baea
parent1f28c72c395e9418cbb074d1490426b3dc359a5f
signaturelock-open Commit is signed but in an unrecognized format.

stage2 AArch64: enable mul for ints with <= 64 bits


10 files changed, 4 insertions(+), 24 deletions(-)

src/arch/aarch64/CodeGen.zig+4-8
......@@ -538,7 +538,7 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void {
538538 .sub, .ptr_sub => try self.airBinOp(inst),
539539 .subwrap => try self.airSubWrap(inst),
540540 .sub_sat => try self.airSubSat(inst),
541 .mul => try self.airMul(inst),
541 .mul => try self.airBinOp(inst),
542542 .mulwrap => try self.airMulWrap(inst),
543543 .mul_sat => try self.airMulSat(inst),
544544 .rem => try self.airRem(inst),
......@@ -820,7 +820,9 @@ fn allocMemPtr(self: *Self, inst: Air.Inst.Index) !u32 {
820820 const elem_ty = self.air.typeOfIndex(inst).elemType();
821821
822822 if (!elem_ty.hasRuntimeBits()) {
823 return self.allocMem(inst, @sizeOf(usize), @alignOf(usize));
823 // As this stack item will never be dereferenced at runtime,
824 // return the current stack offset
825 return self.next_stack_offset;
824826 }
825827
826828 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 {
15401542 return self.finishAir(inst, result, .{ bin_op.lhs, bin_op.rhs, .none });
15411543}
15421544
1543fn airMul(self: *Self, inst: Air.Inst.Index) !void {
1544 const bin_op = self.air.instructions.items(.data)[inst].bin_op;
1545 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement mul for {}", .{self.target.cpu.arch});
1546 return self.finishAir(inst, result, .{ bin_op.lhs, bin_op.rhs, .none });
1547}
1548
15491545fn airMulWrap(self: *Self, inst: Air.Inst.Index) !void {
15501546 const bin_op = self.air.instructions.items(.data)[inst].bin_op;
15511547 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement mulwrap for {}", .{self.target.cpu.arch});
test/behavior/align.zig-1
......@@ -351,7 +351,6 @@ test "read 128-bit field from default aligned struct in global memory" {
351351}
352352
353353test "struct field explicit alignment" {
354 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
355354 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
356355 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
357356 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
test/behavior/array.zig-1
......@@ -7,7 +7,6 @@ const expectEqual = testing.expectEqual;
77
88test "array to slice" {
99 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
10 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1110
1211 const a: u32 align(4) = 3;
1312 const b: u32 align(8) = 4;
test/behavior/bitcast.zig-1
......@@ -269,7 +269,6 @@ test "bitcast passed as tuple element" {
269269
270270test "triple level result location with bitcast sandwich passed as tuple element" {
271271 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
272 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
273272 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
274273
275274 const S = struct {
test/behavior/bugs/5474.zig-2
......@@ -50,7 +50,6 @@ fn constant() !void {
5050
5151test "pointer-to-array constness for zero-size elements, var" {
5252 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
53 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
5453
5554 try mutable();
5655 comptime try mutable();
......@@ -58,7 +57,6 @@ test "pointer-to-array constness for zero-size elements, var" {
5857
5958test "pointer-to-array constness for zero-size elements, const" {
6059 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
61 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
6260
6361 try constant();
6462 comptime try constant();
test/behavior/math.zig-1
......@@ -573,7 +573,6 @@ test "bit shift a u1" {
573573
574574test "truncating shift right" {
575575 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
576// if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
577576
578577 try testShrTrunc(maxInt(u16));
579578 comptime try testShrTrunc(maxInt(u16));
test/behavior/sizeof_and_typeof.zig-2
......@@ -187,7 +187,6 @@ test "@sizeOf(T) == 0 doesn't force resolving struct size" {
187187
188188test "@TypeOf() has no runtime side effects" {
189189 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
190 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
191190 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
192191 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
193192 const S = struct {
......@@ -204,7 +203,6 @@ test "@TypeOf() has no runtime side effects" {
204203
205204test "branching logic inside @TypeOf" {
206205 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
207 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
208206 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
209207 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
210208 const S = struct {
test/behavior/slice.zig-1
......@@ -204,7 +204,6 @@ test "slicing zero length array" {
204204const x = @intToPtr([*]i32, 0x1000)[0..0x500];
205205const y = x[0x100..];
206206test "compile time slice of pointer to hard coded address" {
207 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
208207 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
209208 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
210209 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
test/behavior/struct.zig-3
......@@ -927,7 +927,6 @@ test "anonymous struct literal syntax" {
927927test "fully anonymous struct" {
928928 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
929929 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
930 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
931930
932931 const S = struct {
933932 fn doTheTest() !void {
......@@ -953,7 +952,6 @@ test "fully anonymous struct" {
953952test "fully anonymous list literal" {
954953 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
955954 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
956 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
957955
958956 const S = struct {
959957 fn doTheTest() !void {
......@@ -983,7 +981,6 @@ test "tuple assigned to variable" {
983981
984982test "comptime struct field" {
985983 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
986 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
987984
988985 const T = struct {
989986 a: i32,
test/behavior/var_args.zig-4
......@@ -15,7 +15,6 @@ fn add(args: anytype) i32 {
1515test "add arbitrary args" {
1616 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
1717 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
18 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
1918
2019 try expect(add(.{ @as(i32, 1), @as(i32, 2), @as(i32, 3), @as(i32, 4) }) == 10);
2120 try expect(add(.{@as(i32, 1234)}) == 1234);
......@@ -27,7 +26,6 @@ fn readFirstVarArg(args: anytype) void {
2726}
2827
2928test "send void arg to var args" {
30 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
3129 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
3230 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
3331
......@@ -90,7 +88,6 @@ fn foo2(args: anytype) bool {
9088}
9189
9290test "array of var args functions" {
93 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
9491 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
9592 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
9693
......@@ -99,7 +96,6 @@ test "array of var args functions" {
9996}
10097
10198test "pass zero length array to var args param" {
102 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
10399 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
104100 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
105101