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