| author | |
| committer | |
| log | db76ae82607b941373064b05a348950802a21217 |
| tree | 45839e9e12480ccc343e76d432cf3df4eb281f78 |
| parent | 1fd48815c6e22b266b318f58c6b3c828b20ace80 |
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( |
| 91 | 91 | ||
| 92 | fn writeFloat(comptime F: type, f: F, target: Target, endian: std.builtin.Endian, code: []u8) void { | 92 | fn 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 | } |
| 101 | 99 | ||
| 102 | pub fn generateLazySymbol( | 100 | pub 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" { |
| 1023 | 1023 | ||
| 1024 | test "comptime fixed-width float non-zero divided by zero produces signed Inf" { | 1024 | test "comptime fixed-width float non-zero divided by zero produces signed Inf" { |
| 1025 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO | 1025 | 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; // TODO | 1026 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 1028 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 1027 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 1029 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO | 1028 | 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; // TODO | 1535 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 1536 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 1536 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 1537 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 1537 | 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; // TODO | 1538 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 1540 | 1539 | ||
| 1541 | const S = struct { | 1540 | const S = struct { |