| author | |
| committer | |
| log | cc6694a323950d53e79afc76ba5a8000386f555b |
| tree | cd2b3ab83fa10e402dd53533e40156fad50120e0 |
| parent | c2ec518fe2704422017b09c0808ec1a40c0ec0ed |
7 files changed, 13 insertions(+), 15 deletions(-)
src/arch/x86_64/CodeGen.zig+5-6| ... | @@ -12566,7 +12566,7 @@ fn resolveCallingConventionValues( | ... | @@ -12566,7 +12566,7 @@ fn resolveCallingConventionValues( |
| 12566 | abi.getCAbiIntReturnRegs(resolved_cc)[0..classes.len], | 12566 | abi.getCAbiIntReturnRegs(resolved_cc)[0..classes.len], |
| 12567 | 0.., | 12567 | 0.., |
| 12568 | ) |class, ret_reg, ret_reg_i| { | 12568 | ) |class, ret_reg, ret_reg_i| { |
| 12569 | result.return_value = switch (classes[0]) { | 12569 | result.return_value = switch (class) { |
| 12570 | .integer => switch (ret_reg_i) { | 12570 | .integer => switch (ret_reg_i) { |
| 12571 | 0 => InstTracking.init(.{ .register = registerAlias( | 12571 | 0 => InstTracking.init(.{ .register = registerAlias( |
| 12572 | ret_reg, | 12572 | ret_reg, |
| ... | @@ -12582,6 +12582,7 @@ fn resolveCallingConventionValues( | ... | @@ -12582,6 +12582,7 @@ fn resolveCallingConventionValues( |
| 12582 | 0 => InstTracking.init(.{ .register = .xmm0 }), | 12582 | 0 => InstTracking.init(.{ .register = .xmm0 }), |
| 12583 | else => return self.fail("TODO handle multiple classes per type", .{}), | 12583 | else => return self.fail("TODO handle multiple classes per type", .{}), |
| 12584 | }, | 12584 | }, |
| 12585 | .sseup => continue, | ||
| 12585 | .memory => switch (ret_reg_i) { | 12586 | .memory => switch (ret_reg_i) { |
| 12586 | 0 => ret: { | 12587 | 0 => ret: { |
| 12587 | const ret_indirect_reg = | 12588 | const ret_indirect_reg = |
| ... | @@ -12602,7 +12603,7 @@ fn resolveCallingConventionValues( | ... | @@ -12602,7 +12603,7 @@ fn resolveCallingConventionValues( |
| 12602 | } | 12603 | } |
| 12603 | 12604 | ||
| 12604 | // Input params | 12605 | // Input params |
| 12605 | next_param: for (param_types, result.args) |ty, *arg| { | 12606 | for (param_types, result.args) |ty, *arg| { |
| 12606 | assert(ty.hasRuntimeBitsIgnoreComptime(mod)); | 12607 | assert(ty.hasRuntimeBitsIgnoreComptime(mod)); |
| 12607 | 12608 | ||
| 12608 | const classes = switch (self.target.os.tag) { | 12609 | const classes = switch (self.target.os.tag) { |
| ... | @@ -12620,7 +12621,6 @@ fn resolveCallingConventionValues( | ... | @@ -12620,7 +12621,6 @@ fn resolveCallingConventionValues( |
| 12620 | 1 => .{ .register_pair = .{ arg.register, param_reg } }, | 12621 | 1 => .{ .register_pair = .{ arg.register, param_reg } }, |
| 12621 | else => return self.fail("TODO handle multiple classes per type", .{}), | 12622 | else => return self.fail("TODO handle multiple classes per type", .{}), |
| 12622 | }; | 12623 | }; |
| 12623 | continue; | ||
| 12624 | } else break, | 12624 | } else break, |
| 12625 | .float, .sse => switch (self.target.os.tag) { | 12625 | .float, .sse => switch (self.target.os.tag) { |
| 12626 | .windows => if (param_reg_i < 4) { | 12626 | .windows => if (param_reg_i < 4) { |
| ... | @@ -12630,7 +12630,6 @@ fn resolveCallingConventionValues( | ... | @@ -12630,7 +12630,6 @@ fn resolveCallingConventionValues( |
| 12630 | .register = @enumFromInt(@intFromEnum(Register.xmm0) + param_reg_i), | 12630 | .register = @enumFromInt(@intFromEnum(Register.xmm0) + param_reg_i), |
| 12631 | }; | 12631 | }; |
| 12632 | param_reg_i += 1; | 12632 | param_reg_i += 1; |
| 12633 | continue; | ||
| 12634 | } else break, | 12633 | } else break, |
| 12635 | else => if (param_sse_reg_i < 8) { | 12634 | else => if (param_sse_reg_i < 8) { |
| 12636 | if (class_i > 0) | 12635 | if (class_i > 0) |
| ... | @@ -12639,15 +12638,15 @@ fn resolveCallingConventionValues( | ... | @@ -12639,15 +12638,15 @@ fn resolveCallingConventionValues( |
| 12639 | @intFromEnum(Register.xmm0) + param_sse_reg_i, | 12638 | @intFromEnum(Register.xmm0) + param_sse_reg_i, |
| 12640 | ) }; | 12639 | ) }; |
| 12641 | param_sse_reg_i += 1; | 12640 | param_sse_reg_i += 1; |
| 12642 | continue; | ||
| 12643 | } else break, | 12641 | } else break, |
| 12644 | }, | 12642 | }, |
| 12643 | .sseup => {}, | ||
| 12645 | .memory => break, | 12644 | .memory => break, |
| 12646 | else => return self.fail("TODO handle calling convention class {s}", .{ | 12645 | else => return self.fail("TODO handle calling convention class {s}", .{ |
| 12647 | @tagName(class), | 12646 | @tagName(class), |
| 12648 | }), | 12647 | }), |
| 12649 | } | 12648 | } |
| 12650 | } else continue :next_param; | 12649 | } else continue; |
| 12651 | 12650 | ||
| 12652 | const param_size: u31 = @intCast(ty.abiSize(mod)); | 12651 | const param_size: u31 = @intCast(ty.abiSize(mod)); |
| 12653 | const param_align: u31 = @intCast(ty.abiAlignment(mod).toByteUnitsOptional().?); | 12652 | const param_align: u31 = @intCast(ty.abiAlignment(mod).toByteUnitsOptional().?); |
test/behavior/abs.zig+1-1| ... | @@ -97,7 +97,7 @@ test "@abs floats" { | ... | @@ -97,7 +97,7 @@ test "@abs floats" { |
| 97 | try comptime testAbsFloats(f80); | 97 | try comptime testAbsFloats(f80); |
| 98 | if (builtin.zig_backend != .stage2_x86_64 and builtin.zig_backend != .stage2_wasm) try testAbsFloats(f80); | 98 | if (builtin.zig_backend != .stage2_x86_64 and builtin.zig_backend != .stage2_wasm) try testAbsFloats(f80); |
| 99 | try comptime testAbsFloats(f128); | 99 | try comptime testAbsFloats(f128); |
| 100 | if (builtin.zig_backend != .stage2_x86_64 and builtin.zig_backend != .stage2_wasm) try testAbsFloats(f128); | 100 | if (builtin.zig_backend != .stage2_wasm) try testAbsFloats(f128); |
| 101 | } | 101 | } |
| 102 | 102 | ||
| 103 | fn testAbsFloats(comptime T: type) !void { | 103 | fn testAbsFloats(comptime T: type) !void { |
test/behavior/bitcast.zig+1-1| ... | @@ -297,11 +297,11 @@ test "triple level result location with bitcast sandwich passed as tuple element | ... | @@ -297,11 +297,11 @@ test "triple level result location with bitcast sandwich passed as tuple element |
| 297 | test "@bitCast packed struct of floats" { | 297 | test "@bitCast packed struct of floats" { |
| 298 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; | 298 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; |
| 299 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; | 299 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; |
| 300 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | ||
| 301 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; | 300 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 302 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; | 301 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| 303 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO | 302 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 304 | if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; | 303 | if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; |
| 304 | if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf) return error.SkipZigTest; | ||
| 305 | 305 | ||
| 306 | const Foo = packed struct { | 306 | const Foo = packed struct { |
| 307 | a: f16 = 0, | 307 | a: f16 = 0, |
test/behavior/cast.zig+2-2| ... | @@ -1369,10 +1369,10 @@ fn boolToStr(b: bool) []const u8 { | ... | @@ -1369,10 +1369,10 @@ fn boolToStr(b: bool) []const u8 { |
| 1369 | test "cast f16 to wider types" { | 1369 | test "cast f16 to wider types" { |
| 1370 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; | 1370 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 1371 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 1371 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 1372 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | ||
| 1373 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO | 1372 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 1374 | if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; | 1373 | if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; |
| 1375 | if (builtin.zig_backend == .stage2_c and comptime builtin.cpu.arch.isArmOrThumb()) return error.SkipZigTest; | 1374 | if (builtin.zig_backend == .stage2_c and comptime builtin.cpu.arch.isArmOrThumb()) return error.SkipZigTest; |
| 1375 | if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf) return error.SkipZigTest; | ||
| 1376 | 1376 | ||
| 1377 | const S = struct { | 1377 | const S = struct { |
| 1378 | fn doTheTest() !void { | 1378 | fn doTheTest() !void { |
| ... | @@ -1389,9 +1389,9 @@ test "cast f16 to wider types" { | ... | @@ -1389,9 +1389,9 @@ test "cast f16 to wider types" { |
| 1389 | test "cast f128 to narrower types" { | 1389 | test "cast f128 to narrower types" { |
| 1390 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; | 1390 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 1391 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 1391 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 1392 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | ||
| 1393 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO | 1392 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 1394 | if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; | 1393 | if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; |
| 1394 | if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf) return error.SkipZigTest; | ||
| 1395 | 1395 | ||
| 1396 | const S = struct { | 1396 | const S = struct { |
| 1397 | fn doTheTest() !void { | 1397 | fn doTheTest() !void { |
test/behavior/floatop.zig+1-1| ... | @@ -130,7 +130,7 @@ test "cmp f128" { | ... | @@ -130,7 +130,7 @@ test "cmp f128" { |
| 130 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 130 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 131 | if (builtin.zig_backend == .stage2_c and builtin.cpu.arch.isArmOrThumb()) return error.SkipZigTest; | 131 | if (builtin.zig_backend == .stage2_c and builtin.cpu.arch.isArmOrThumb()) return error.SkipZigTest; |
| 132 | if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; | 132 | if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; |
| 133 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | 133 | if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf) return error.SkipZigTest; |
| 134 | 134 | ||
| 135 | try testCmp(f128); | 135 | try testCmp(f128); |
| 136 | try comptime testCmp(f128); | 136 | try comptime testCmp(f128); |
test/behavior/math.zig+2-3| ... | @@ -637,11 +637,11 @@ fn testShrTrunc(x: u16) !void { | ... | @@ -637,11 +637,11 @@ fn testShrTrunc(x: u16) !void { |
| 637 | } | 637 | } |
| 638 | 638 | ||
| 639 | test "f128" { | 639 | test "f128" { |
| 640 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | ||
| 641 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 640 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 642 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 641 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 643 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO | 642 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 644 | if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; | 643 | if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; |
| 644 | if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf) return error.SkipZigTest; | ||
| 645 | 645 | ||
| 646 | try test_f128(); | 646 | try test_f128(); |
| 647 | try comptime test_f128(); | 647 | try comptime test_f128(); |
| ... | @@ -1481,7 +1481,6 @@ test "@round f80" { | ... | @@ -1481,7 +1481,6 @@ test "@round f80" { |
| 1481 | test "@round f128" { | 1481 | test "@round f128" { |
| 1482 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 1482 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 1483 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 1483 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 1484 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | ||
| 1485 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO | 1484 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 1486 | if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; | 1485 | if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; |
| 1487 | if (builtin.zig_backend == .stage2_c and comptime builtin.cpu.arch.isArmOrThumb()) return error.SkipZigTest; | 1486 | if (builtin.zig_backend == .stage2_c and comptime builtin.cpu.arch.isArmOrThumb()) return error.SkipZigTest; |
| ... | @@ -1522,9 +1521,9 @@ test "vector integer addition" { | ... | @@ -1522,9 +1521,9 @@ test "vector integer addition" { |
| 1522 | test "NaN comparison" { | 1521 | test "NaN comparison" { |
| 1523 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 1522 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 1524 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 1523 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 1525 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | ||
| 1526 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO | 1524 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 1527 | if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; | 1525 | if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; |
| 1526 | if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf) return error.SkipZigTest; | ||
| 1528 | 1527 | ||
| 1529 | try testNanEqNan(f16); | 1528 | try testNanEqNan(f16); |
| 1530 | try testNanEqNan(f32); | 1529 | try testNanEqNan(f32); |
test/behavior/widening.zig+1-1| ... | @@ -60,11 +60,11 @@ test "float widening" { | ... | @@ -60,11 +60,11 @@ test "float widening" { |
| 60 | } | 60 | } |
| 61 | 61 | ||
| 62 | test "float widening f16 to f128" { | 62 | test "float widening f16 to f128" { |
| 63 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | ||
| 64 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 63 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 65 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 64 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 66 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO | 65 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 67 | if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; | 66 | if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; |
| 67 | if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf) return error.SkipZigTest; | ||
| 68 | 68 | ||
| 69 | var x: f16 = 12.34; | 69 | var x: f16 = 12.34; |
| 70 | var y: f128 = x; | 70 | var y: f128 = x; |