tdf#143450: Fix special fp+integer struct return case for gcc_*_x86-64
commitca344be7aabf88dddde38841e6af6292ece6829b
authorStephan Bergmann <sbergman@redhat.com>
Tue, 27 Jul 2021 21:45:19 +0000 (27 23:45 +0200)
committerStephan Bergmann <sbergman@redhat.com>
Wed, 28 Jul 2021 11:08:07 +0000 (28 13:08 +0200)
tree18e553d2b9958507e1cd9e5891006a473764a09d
parentf7709a6594753b99973258d33ce3b901ed24df85
tdf#143450: Fix special fp+integer struct return case for gcc_*_x86-64

For one, the loop in x86_64::fill_struct was backwards.

And for another, privateSnippedExecutor does not need special handling of FLOAT
and DOUBLE return values (they can simply be moved to %xmm0, as covered by the
general case), but rather for those small structs where floating-point member(s)
in a first eightbyte (targeting %xmm0) are followed by integer member(s) in a
second eightbyte (targeting %rax).  Extended testtools to cover two such cases.

Change-Id: I8e775a1d1ce2312610f265bcc8e40b09bdac56df
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/119576
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
15 files changed:
bridges/source/cpp_uno/gcc3_linux_x86-64/abi.cxx
bridges/source/cpp_uno/gcc3_linux_x86-64/abi.hxx
bridges/source/cpp_uno/gcc3_linux_x86-64/call.hxx
bridges/source/cpp_uno/gcc3_linux_x86-64/call.s
bridges/source/cpp_uno/gcc3_linux_x86-64/cpp2uno.cxx
bridges/source/cpp_uno/gcc3_macosx_x86-64/abi.cxx
bridges/source/cpp_uno/gcc3_macosx_x86-64/abi.hxx
bridges/source/cpp_uno/gcc3_macosx_x86-64/call.cxx
bridges/source/cpp_uno/gcc3_macosx_x86-64/call.hxx
bridges/source/cpp_uno/gcc3_macosx_x86-64/cpp2uno.cxx
testtools/com/sun/star/comp/bridge/TestComponent.java
testtools/source/bridgetest/bridgetest.cxx
testtools/source/bridgetest/cli/cli_cs_testobj.cs
testtools/source/bridgetest/cppobj.cxx
testtools/source/bridgetest/idl/bridgetest.idl