mirror of
https://github.com/ziglang/zig.git
synced 2024-11-26 06:10:15 +00:00
compiler_rt: fix fp sub being optimized to call itself
Closes #16844 Reduces #16846
This commit is contained in:
parent
8219711063
commit
d65318847f
@ -1,4 +1,5 @@
|
||||
const common = @import("./common.zig");
|
||||
const addf3 = @import("./addf3.zig").addf3;
|
||||
|
||||
pub const panic = common.panic;
|
||||
|
||||
@ -11,11 +12,14 @@ comptime {
|
||||
}
|
||||
|
||||
fn __subdf3(a: f64, b: f64) callconv(.C) f64 {
|
||||
const neg_b = @as(f64, @bitCast(@as(u64, @bitCast(b)) ^ (@as(u64, 1) << 63)));
|
||||
return a + neg_b;
|
||||
return sub(a, b);
|
||||
}
|
||||
|
||||
fn __aeabi_dsub(a: f64, b: f64) callconv(.AAPCS) f64 {
|
||||
const neg_b = @as(f64, @bitCast(@as(u64, @bitCast(b)) ^ (@as(u64, 1) << 63)));
|
||||
return a + neg_b;
|
||||
return sub(a, b);
|
||||
}
|
||||
|
||||
inline fn sub(a: f64, b: f64) f64 {
|
||||
const neg_b = @as(f64, @bitCast(@as(u64, @bitCast(b)) ^ (@as(u64, 1) << 63)));
|
||||
return addf3(f64, a, neg_b);
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
const common = @import("./common.zig");
|
||||
const addf3 = @import("./addf3.zig").addf3;
|
||||
|
||||
pub const panic = common.panic;
|
||||
|
||||
@ -8,5 +9,5 @@ comptime {
|
||||
|
||||
fn __subhf3(a: f16, b: f16) callconv(.C) f16 {
|
||||
const neg_b = @as(f16, @bitCast(@as(u16, @bitCast(b)) ^ (@as(u16, 1) << 15)));
|
||||
return a + neg_b;
|
||||
return addf3(f16, a, neg_b);
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
const common = @import("./common.zig");
|
||||
const addf3 = @import("./addf3.zig").addf3;
|
||||
|
||||
pub const panic = common.panic;
|
||||
|
||||
@ -11,11 +12,14 @@ comptime {
|
||||
}
|
||||
|
||||
fn __subsf3(a: f32, b: f32) callconv(.C) f32 {
|
||||
const neg_b = @as(f32, @bitCast(@as(u32, @bitCast(b)) ^ (@as(u32, 1) << 31)));
|
||||
return a + neg_b;
|
||||
return sub(a, b);
|
||||
}
|
||||
|
||||
fn __aeabi_fsub(a: f32, b: f32) callconv(.AAPCS) f32 {
|
||||
const neg_b = @as(f32, @bitCast(@as(u32, @bitCast(b)) ^ (@as(u32, 1) << 31)));
|
||||
return a + neg_b;
|
||||
return sub(a, b);
|
||||
}
|
||||
|
||||
inline fn sub(a: f32, b: f32) f32 {
|
||||
const neg_b = @as(f32, @bitCast(@as(u32, @bitCast(b)) ^ (@as(u32, 1) << 31)));
|
||||
return addf3(f32, a, neg_b);
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
const common = @import("./common.zig");
|
||||
const addf3 = @import("./addf3.zig").addf3;
|
||||
|
||||
pub const panic = common.panic;
|
||||
|
||||
@ -21,5 +22,5 @@ fn _Qp_sub(c: *f128, a: *const f128, b: *const f128) callconv(.C) void {
|
||||
|
||||
inline fn sub(a: f128, b: f128) f128 {
|
||||
const neg_b = @as(f128, @bitCast(@as(u128, @bitCast(b)) ^ (@as(u128, 1) << 127)));
|
||||
return a + neg_b;
|
||||
return addf3(f128, a, neg_b);
|
||||
}
|
||||
|
@ -243,11 +243,6 @@ test "atomicrmw with ints" {
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
|
||||
|
||||
if (builtin.zig_backend == .stage2_llvm and builtin.cpu.arch.isMIPS()) {
|
||||
// https://github.com/ziglang/zig/issues/16846
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
try testAtomicRmwInts();
|
||||
try comptime testAtomicRmwInts();
|
||||
}
|
||||
|
@ -711,18 +711,6 @@ test "@floor f80" {
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
if (builtin.zig_backend == .stage2_llvm and
|
||||
(builtin.cpu.arch == .powerpc64le or builtin.cpu.arch == .aarch64))
|
||||
{
|
||||
// https://github.com/ziglang/zig/issues/16844
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
if (builtin.zig_backend == .stage2_llvm and builtin.cpu.arch.isMIPS()) {
|
||||
// https://github.com/ziglang/zig/issues/16846
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
try testFloorLegacy(f80, 12.0);
|
||||
try comptime testFloorLegacy(f80, 12.0);
|
||||
}
|
||||
@ -734,13 +722,6 @@ test "@floor f128" {
|
||||
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
|
||||
if (builtin.zig_backend == .stage2_c and comptime builtin.cpu.arch.isArmOrThumb()) return error.SkipZigTest;
|
||||
|
||||
if (builtin.zig_backend == .stage2_llvm and
|
||||
(builtin.cpu.arch == .powerpc64le or builtin.cpu.arch == .aarch64))
|
||||
{
|
||||
// https://github.com/ziglang/zig/issues/16844
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
if (builtin.zig_backend == .stage2_llvm and builtin.cpu.arch.isARM()) {
|
||||
// https://github.com/ziglang/zig/issues/16848
|
||||
return error.SkipZigTest;
|
||||
@ -831,13 +812,6 @@ test "@ceil f80" {
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
if (builtin.zig_backend == .stage2_llvm and
|
||||
(builtin.cpu.arch == .powerpc64le or builtin.cpu.arch == .aarch64))
|
||||
{
|
||||
// https://github.com/ziglang/zig/issues/16844
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
try testCeilLegacy(f80, 12.0);
|
||||
try comptime testCeilLegacy(f80, 12.0);
|
||||
}
|
||||
@ -849,13 +823,6 @@ test "@ceil f128" {
|
||||
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
|
||||
if (builtin.zig_backend == .stage2_c and comptime builtin.cpu.arch.isArmOrThumb()) return error.SkipZigTest;
|
||||
|
||||
if (builtin.zig_backend == .stage2_llvm and
|
||||
(builtin.cpu.arch == .powerpc64le or builtin.cpu.arch == .aarch64))
|
||||
{
|
||||
// https://github.com/ziglang/zig/issues/16844
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
try testCeilLegacy(f128, 12.0);
|
||||
try comptime testCeilLegacy(f128, 12.0);
|
||||
}
|
||||
@ -962,13 +929,6 @@ test "@trunc f128" {
|
||||
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
|
||||
if (builtin.zig_backend == .stage2_c and comptime builtin.cpu.arch.isArmOrThumb()) return error.SkipZigTest;
|
||||
|
||||
if (builtin.zig_backend == .stage2_llvm and
|
||||
(builtin.cpu.arch == .powerpc64le or builtin.cpu.arch == .aarch64))
|
||||
{
|
||||
// https://github.com/ziglang/zig/issues/16844
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
try testTruncLegacy(f128, 12.0);
|
||||
try comptime testTruncLegacy(f128, 12.0);
|
||||
}
|
||||
|
@ -1360,13 +1360,6 @@ test "float remainder division using @rem" {
|
||||
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
|
||||
if (builtin.zig_backend == .stage2_llvm and
|
||||
(builtin.cpu.arch == .powerpc64le or builtin.cpu.arch == .aarch64))
|
||||
{
|
||||
// https://github.com/ziglang/zig/issues/16844
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
try comptime frem(f16);
|
||||
try comptime frem(f32);
|
||||
try comptime frem(f64);
|
||||
@ -1410,13 +1403,6 @@ test "float modulo division using @mod" {
|
||||
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
|
||||
|
||||
if (builtin.zig_backend == .stage2_llvm and
|
||||
(builtin.cpu.arch == .powerpc64le or builtin.cpu.arch == .aarch64))
|
||||
{
|
||||
// https://github.com/ziglang/zig/issues/16844
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
try comptime fmod(f16);
|
||||
try comptime fmod(f32);
|
||||
try comptime fmod(f64);
|
||||
@ -1480,13 +1466,6 @@ test "@round f80" {
|
||||
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
|
||||
if (builtin.zig_backend == .stage2_c and comptime builtin.cpu.arch.isArmOrThumb()) return error.SkipZigTest;
|
||||
|
||||
if (builtin.zig_backend == .stage2_llvm and
|
||||
(builtin.cpu.arch == .powerpc64le or builtin.cpu.arch == .aarch64))
|
||||
{
|
||||
// https://github.com/ziglang/zig/issues/16844
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
try testRound(f80, 12.0);
|
||||
try comptime testRound(f80, 12.0);
|
||||
}
|
||||
@ -1499,13 +1478,6 @@ test "@round f128" {
|
||||
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
|
||||
if (builtin.zig_backend == .stage2_c and comptime builtin.cpu.arch.isArmOrThumb()) return error.SkipZigTest;
|
||||
|
||||
if (builtin.zig_backend == .stage2_llvm and
|
||||
(builtin.cpu.arch == .powerpc64le or builtin.cpu.arch == .aarch64))
|
||||
{
|
||||
// https://github.com/ziglang/zig/issues/16844
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
try testRound(f128, 12.0);
|
||||
try comptime testRound(f128, 12.0);
|
||||
}
|
||||
|
@ -62,13 +62,6 @@ test "@mulAdd f80" {
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
if (builtin.zig_backend == .stage2_llvm and
|
||||
(builtin.cpu.arch == .powerpc64le or builtin.cpu.arch == .aarch64))
|
||||
{
|
||||
// https://github.com/ziglang/zig/issues/16844
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
try comptime testMulAdd80();
|
||||
try testMulAdd80();
|
||||
}
|
||||
@ -93,13 +86,6 @@ test "@mulAdd f128" {
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
if (builtin.zig_backend == .stage2_llvm and
|
||||
(builtin.cpu.arch == .powerpc64le or builtin.cpu.arch == .aarch64))
|
||||
{
|
||||
// https://github.com/ziglang/zig/issues/16844
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
try comptime testMulAdd128();
|
||||
try testMulAdd128();
|
||||
}
|
||||
@ -203,13 +189,6 @@ test "vector f80" {
|
||||
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
|
||||
if (builtin.zig_backend == .stage2_c and comptime builtin.cpu.arch.isArmOrThumb()) return error.SkipZigTest;
|
||||
|
||||
if (builtin.zig_backend == .stage2_llvm and
|
||||
(builtin.cpu.arch == .powerpc64le or builtin.cpu.arch == .aarch64))
|
||||
{
|
||||
// https://github.com/ziglang/zig/issues/16844
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
try comptime vector80();
|
||||
try vector80();
|
||||
}
|
||||
@ -235,13 +214,6 @@ test "vector f128" {
|
||||
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
|
||||
if (builtin.zig_backend == .stage2_c and comptime builtin.cpu.arch.isArmOrThumb()) return error.SkipZigTest;
|
||||
|
||||
if (builtin.zig_backend == .stage2_llvm and
|
||||
(builtin.cpu.arch == .powerpc64le or builtin.cpu.arch == .aarch64))
|
||||
{
|
||||
// https://github.com/ziglang/zig/issues/16844
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
try comptime vector128();
|
||||
try vector128();
|
||||
}
|
||||
|
@ -104,13 +104,6 @@ test "vector float operators" {
|
||||
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
|
||||
if (builtin.zig_backend == .stage2_c and comptime builtin.cpu.arch.isArmOrThumb()) return error.SkipZigTest;
|
||||
|
||||
if (builtin.zig_backend == .stage2_llvm and
|
||||
(builtin.cpu.arch == .powerpc64le or builtin.cpu.arch == .aarch64))
|
||||
{
|
||||
// https://github.com/ziglang/zig/issues/16844
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
inline for ([_]type{ f16, f32, f64, f80, f128 }) |T| {
|
||||
const S = struct {
|
||||
fn doTheTest() !void {
|
||||
|
Loading…
Reference in New Issue
Block a user