x86_64: fix @divTrunc and @divFloor of f16
This commit is contained in:
@@ -7177,6 +7177,23 @@ fn genBinOp(
|
||||
dst_reg,
|
||||
tmp_reg,
|
||||
);
|
||||
switch (air_tag) {
|
||||
.div_trunc, .div_floor => try self.asmRegisterRegisterRegisterImmediate(
|
||||
.{ .v_ss, .round },
|
||||
dst_reg,
|
||||
dst_reg,
|
||||
dst_reg,
|
||||
Immediate.u(@as(u5, @bitCast(RoundMode{
|
||||
.mode = switch (air_tag) {
|
||||
.div_trunc => .zero,
|
||||
.div_floor => .down,
|
||||
else => unreachable,
|
||||
},
|
||||
.precision = .inexact,
|
||||
}))),
|
||||
),
|
||||
else => {},
|
||||
}
|
||||
try self.asmRegisterRegisterImmediate(
|
||||
.{ .v_, .cvtps2ph },
|
||||
dst_reg,
|
||||
|
||||
@@ -495,11 +495,11 @@ fn testDivision() !void {
|
||||
}
|
||||
|
||||
test "division half-precision floats" {
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
|
||||
if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf) return error.SkipZigTest;
|
||||
|
||||
try testDivisionFP16();
|
||||
try comptime testDivisionFP16();
|
||||
|
||||
Reference in New Issue
Block a user