public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
From: "tmgross at umich dot edu" <gcc-bugzilla@gcc.gnu.org> To: gcc-bugs@gcc.gnu.org Subject: [Bug target/115054] New: __float128 and _Float16 use incorrect ABI on x86-64 MinGW Date: Sun, 12 May 2024 21:28:49 +0000 [thread overview] Message-ID: <bug-115054-4@http.gcc.gnu.org/bugzilla/> (raw) https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115054 Bug ID: 115054 Summary: __float128 and _Float16 use incorrect ABI on x86-64 MinGW Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: tmgross at umich dot edu Target Milestone: --- GCC appears to try to pass half and quad-precision floating point numbers (_Float16 and __float128) using the integer calling convention on x86-64 MinGW. They should get passed with the floating point CC in SSE registers, like other floats, as is done by GCC x86-64 linux, Clang x86-64 linux, and Clang x86-64 MinGW. Sample: void f16_ext(_Float16); void f16_entry(float _, _Float16 a) { asm("nop # marker"); f16_ext(a); } void f32_ext(float); void f32_entry(float _, float a) { asm("nop # marker"); f32_ext(a); } void f64_ext(double); void f64_entry(float _, double a) { asm("nop # marker"); f64_ext(a); } void f128_ext(__float128); void f128_entry(float _, __float128 a) { asm("nop # marker"); f128_ext(a); } Incorrect output from GCC on x64 MinGW (O2): f16_entry: mov ecx, edx nop # marker jmp f16_ext f32_entry: movaps xmm0, xmm1 nop # marker jmp f32_ext f64_entry: movapd xmm0, xmm1 nop # marker jmp f64_ext f128_entry: sub rsp, 56 movdqa xmm0, XMMWORD PTR [rdx] nop # marker lea rcx, 32[rsp] movaps XMMWORD PTR 32[rsp], xmm0 call f128_ext nop add rsp, 56 ret Correct output from GCC on x64 Linux (O2): f16_entry: movaps xmm0, xmm1 nop # marker jmp f16_ext f32_entry: movaps xmm0, xmm1 nop # marker jmp f32_ext f64_entry: movapd xmm0, xmm1 nop # marker jmp f64_ext f128_entry: movdqa xmm0, xmm1 nop # marker jmp f128_ext Correct output from Clang on both x64 Linux and x64 MinGW: f16_entry: # @f16_entry movaps xmm0, xmm1 nop # marker jmp f16_ext # TAILCALL f32_entry: # @f32_entry movaps xmm0, xmm1 nop # marker jmp f32_ext # TAILCALL f64_entry: # @f64_entry movaps xmm0, xmm1 nop # marker jmp f64_ext # TAILCALL f128_entry: # @f128_entry movaps xmm0, xmm1 nop # marker jmp f128_ext # TAILCALL Tested with GCC 13.1. Link: https://gcc.godbolt.org/z/hdojahes5
next reply other threads:[~2024-05-12 21:28 UTC|newest] Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top 2024-05-12 21:28 tmgross at umich dot edu [this message] 2024-05-12 21:35 ` [Bug target/115054] " pinskia at gcc dot gnu.org 2024-05-12 21:37 ` pinskia at gcc dot gnu.org 2024-05-12 21:42 ` pinskia at gcc dot gnu.org 2024-05-12 22:37 ` tmgross at umich dot edu 2024-05-12 22:43 ` tmgross at umich dot edu
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=bug-115054-4@http.gcc.gnu.org/bugzilla/ \ --to=gcc-bugzilla@gcc.gnu.org \ --cc=gcc-bugs@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).