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(
9191
9292fn writeFloat(comptime F: type, f: F, target: Target, endian: std.builtin.Endian, code: []u8) void {
9393 _ = target;
94 const Int = @Type(.{ .Int = .{
95 .signedness = .unsigned,
96 .bits = @typeInfo(F).Float.bits,
97 } });
94 const bits = @typeInfo(F).Float.bits;
95 const Int = @Type(.{ .Int = .{ .signedness = .unsigned, .bits = bits } });
9896 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);
10098}
10199
102100pub fn generateLazySymbol(
......@@ -187,18 +185,14 @@ pub fn generateSymbol(
187185 };
188186 },
189187 .Float => {
190 const float_bits = typed_value.ty.floatBits(target);
191 switch (float_bits) {
188 switch (typed_value.ty.floatBits(target)) {
192189 16 => writeFloat(f16, typed_value.val.toFloat(f16), target, endian, try code.addManyAsArray(2)),
193190 32 => writeFloat(f32, typed_value.val.toFloat(f32), target, endian, try code.addManyAsArray(4)),
194191 64 => writeFloat(f64, typed_value.val.toFloat(f64), target, endian, try code.addManyAsArray(8)),
195 80 => return Result{
196 .fail = try ErrorMsg.create(
197 bin_file.allocator,
198 src_loc,
199 "TODO handle f80 in generateSymbol",
200 .{},
201 ),
192 80 => {
193 writeFloat(f80, typed_value.val.toFloat(f80), target, endian, try code.addManyAsArray(10));
194 const abi_size = math.cast(usize, typed_value.ty.abiSize(target)) orelse return error.Overflow;
195 try code.appendNTimes(0, abi_size - 10);
202196 },
203197 128 => writeFloat(f128, typed_value.val.toFloat(f128), target, endian, try code.addManyAsArray(16)),
204198 else => unreachable,
test/behavior/floatop.zig-1
......@@ -1023,7 +1023,6 @@ test "comptime fixed-width float zero divided by zero produces NaN" {
10231023
10241024test "comptime fixed-width float non-zero divided by zero produces signed Inf" {
10251025 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1026 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
10271026 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
10281027 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
10291028 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" {
15351535 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
15361536 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
15371537 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
1538 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
15391538 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
15401539
15411540 const S = struct {