authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-04-28 01:56:45-04:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-05-01 19:22:52-04:00
logdb76ae82607b941373064b05a348950802a21217
tree45839e9e12480ccc343e76d432cf3df4eb281f78
parent1fd48815c6e22b266b318f58c6b3c828b20ace80

x86_64: fix emitting f80 globals


3 files changed, 8 insertions(+), 16 deletions(-)

src/codegen.zig+8-14
...@@ -91,12 +91,10 @@ pub fn generateFunction(...@@ -91,12 +91,10 @@ pub fn generateFunction(
9191
92fn writeFloat(comptime F: type, f: F, target: Target, endian: std.builtin.Endian, code: []u8) void {92fn writeFloat(comptime F: type, f: F, target: Target, endian: std.builtin.Endian, code: []u8) void {
93 _ = target;93 _ = target;
94 const Int = @Type(.{ .Int = .{94 const bits = @typeInfo(F).Float.bits;
95 .signedness = .unsigned,95 const Int = @Type(.{ .Int = .{ .signedness = .unsigned, .bits = bits } });
96 .bits = @typeInfo(F).Float.bits,
97 } });
98 const int = @bitCast(Int, f);96 const int = @bitCast(Int, f);
99 mem.writeInt(Int, code[0..@sizeOf(Int)], int, endian);97 mem.writeInt(Int, code[0..@divExact(bits, 8)], int, endian);
100}98}
10199
102pub fn generateLazySymbol(100pub fn generateLazySymbol(
...@@ -187,18 +185,14 @@ pub fn generateSymbol(...@@ -187,18 +185,14 @@ pub fn generateSymbol(
187 };185 };
188 },186 },
189 .Float => {187 .Float => {
190 const float_bits = typed_value.ty.floatBits(target);188 switch (typed_value.ty.floatBits(target)) {
191 switch (float_bits) {
192 16 => writeFloat(f16, typed_value.val.toFloat(f16), target, endian, try code.addManyAsArray(2)),189 16 => writeFloat(f16, typed_value.val.toFloat(f16), target, endian, try code.addManyAsArray(2)),
193 32 => writeFloat(f32, typed_value.val.toFloat(f32), target, endian, try code.addManyAsArray(4)),190 32 => writeFloat(f32, typed_value.val.toFloat(f32), target, endian, try code.addManyAsArray(4)),
194 64 => writeFloat(f64, typed_value.val.toFloat(f64), target, endian, try code.addManyAsArray(8)),191 64 => writeFloat(f64, typed_value.val.toFloat(f64), target, endian, try code.addManyAsArray(8)),
195 80 => return Result{192 80 => {
196 .fail = try ErrorMsg.create(193 writeFloat(f80, typed_value.val.toFloat(f80), target, endian, try code.addManyAsArray(10));
197 bin_file.allocator,194 const abi_size = math.cast(usize, typed_value.ty.abiSize(target)) orelse return error.Overflow;
198 src_loc,195 try code.appendNTimes(0, abi_size - 10);
199 "TODO handle f80 in generateSymbol",
200 .{},
201 ),
202 },196 },
203 128 => writeFloat(f128, typed_value.val.toFloat(f128), target, endian, try code.addManyAsArray(16)),197 128 => writeFloat(f128, typed_value.val.toFloat(f128), target, endian, try code.addManyAsArray(16)),
204 else => unreachable,198 else => unreachable,
test/behavior/floatop.zig-1
...@@ -1023,7 +1023,6 @@ test "comptime fixed-width float zero divided by zero produces NaN" {...@@ -1023,7 +1023,6 @@ test "comptime fixed-width float zero divided by zero produces NaN" {
10231023
1024test "comptime fixed-width float non-zero divided by zero produces signed Inf" {1024test "comptime fixed-width float non-zero divided by zero produces signed Inf" {
1025 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO1025 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1026 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
1027 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1026 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1028 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO1027 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
1029 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1028 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
test/behavior/math.zig-1
...@@ -1535,7 +1535,6 @@ test "signed zeros are represented properly" {...@@ -1535,7 +1535,6 @@ test "signed zeros are represented properly" {
1535 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO1535 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1536 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1536 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1537 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO1537 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
1538 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
1539 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1538 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
15401539
1541 const S = struct {1540 const S = struct {