x86_64: fix @divTrunc and @divFloor of f16

This commit is contained in:
Jacob Young
2023-10-08 02:13:33 -04:00
parent 9fc9235ac8
commit 3bf9a8feb5
2 changed files with 18 additions and 1 deletions

View File

@@ -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,

View File

@@ -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();