https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85667
--- Comment #5 from Lokesh Janghel <lokeshjanghel91 at gmail dot com> --- >>I think we should check if type is aggregate before we return in eax and >>>>leave xmm0 for float and double. >> break; >>+ case 8: >>+ case 4: >>+ if (valtype != NULL_TREE && AGGREGATE_TYPE_P (valtype)) >>+ break; >>+ if (mode == SFmode || mode == DFmode) >>+ regno = FIRST_SSE_REG; >>+ break; It is working in both targets (x86_64 & mingw-w64). I tested in both targets.