From f0e66ac4d0e6347bf1b5a00b309fafb5da84191b Mon Sep 17 00:00:00 2001 From: Cody Tapscott Date: Fri, 21 Oct 2022 19:20:58 -0700 Subject: [PATCH] std.Target: Remove `longDoubleIs` This function is redundant with CType.sizeInBits(), and until the previous commit they disagreed about the correct long double type for several targets. Although they're all synced up now, it's much simpler just to have a single source of truth. --- lib/std/target.zig | 86 -------------------------------------------- src/codegen/llvm.zig | 4 +-- 2 files changed, 2 insertions(+), 88 deletions(-) diff --git a/lib/std/target.zig b/lib/std/target.zig index 99a137b4b9fd5b47b527631055e3fb371d194e55..7121c1c3e269eca68b5e69df5993a7111ec4425e 100644 --- a/lib/std/target.zig +++ b/lib/std/target.zig @@ -1780,92 +1780,6 @@ pub const Target = struct { }; } - pub inline fn longDoubleIs(target: Target, comptime F: type) bool { - switch (target.os.tag) { - .windows, .uefi => switch (target.abi) { - .gnu, .gnuilp32, .cygnus => switch (target.cpu.arch) { - .i386 => return F == f80, - .x86_64 => return F == f128, - else => return F == f64, - }, - else => return F == f64, - }, - else => {}, - } - - if (target.abi == .android and target.cpu.arch == .i386) - return F == f64; - - switch (target.cpu.arch) { - .aarch64, - .aarch64_be, - .aarch64_32, - => switch (target.os.tag) { - // According to Apple's official guide: - // > The long double type is a double precision IEEE754 binary floating-point type, - // > which makes it identical to the double type. This behavior contrasts to the - // > standard specification, in which a long double is a quad-precision, IEEE754 - // > binary, floating-point type. - // https://developer.apple.com/documentation/xcode/writing-arm64-code-for-apple-platforms - .ios, .macos, .watchos, .tvos => return F == f64, - .windows, .uefi => return F == f64, - else => return F == f128, - }, - - .i386 => return F == f80, - .x86_64 => return F == f80, - - .mips64, - .mips64el, - => switch (target.os.tag) { - .freebsd => return F == f64, - else => return F == f128, - }, - - .powerpc, - .powerpcle, - => switch (target.abi) { - .musl, - .musleabi, - .musleabihf, - .muslx32, - => return F == f64, - else => switch (target.os.tag) { - .freebsd, .netbsd, .openbsd => return F == f64, - else => return F == f128, - }, - }, - - .powerpc64, - .powerpc64le, - => switch (target.abi) { - .musl, - .musleabi, - .musleabihf, - .muslx32, - => return F == f64, - else => switch (target.os.tag) { - .freebsd, .openbsd => return F == f64, - else => return F == f128, - }, - }, - - .riscv32, - .riscv64, - .s390x, - .sparc, - .sparc64, - .sparcel, - .wasm32, - .wasm64, - => return F == f128, - - .avr, .tce, .tcele => return F == f32, - - else => return F == f64, - } - } - pub inline fn maxIntAlignment(target: Target) u16 { return switch (target.cpu.arch) { .avr => 1, diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig index b0d1588007f8bcb42fb5ae11f68b981e4556cabc..68e969f9e7ab9a45dc8b7611ae6cd1fbcdd80fdf 100644 --- a/src/codegen/llvm.zig +++ b/src/codegen/llvm.zig @@ -10615,8 +10615,8 @@ fn backendSupportsF128(target: std.Target) bool { fn intrinsicsAllowed(scalar_ty: Type, target: std.Target) bool { return switch (scalar_ty.tag()) { .f16 => backendSupportsF16(target), - .f80 => target.longDoubleIs(f80) and backendSupportsF80(target), - .f128 => target.longDoubleIs(f128) and backendSupportsF128(target), + .f80 => (CType.longdouble.sizeInBits(target) == 80) and backendSupportsF80(target), + .f128 => (CType.longdouble.sizeInBits(target) == 128) and backendSupportsF128(target), else => true, }; } -- 2.54.0