Commit ab640dfb authored by Hans Wennborg's avatar Hans Wennborg
Browse files

Merging r311555:

------------------------------------------------------------------------
r311555 | oleg | 2017-08-23 07:26:31 -0700 (Wed, 23 Aug 2017) | 14 lines

[ARM][Compiler-rt] Fix AEABI builtins to correctly pass arguments to non-AEABI functions on HF targets

Summary:
This is a patch for PR34167.

On HF targets functions like `__{eq,lt,le,ge,gt}df2` and `__{eq,lt,le,ge,gt}sf2` expect their arguments to be passed in d/s registers, while some of the AEABI builtins pass them in r registers.

Reviewers: compnerd, peter.smith, asl

Reviewed By: peter.smith, asl

Subscribers: peter.smith, aemerson, dberris, javed.absar, llvm-commits, asl, kristof.beyls

Differential Revision: https://reviews.llvm.org/D36675
------------------------------------------------------------------------

llvm-svn: 311606
parent 5f78a79e
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -18,11 +18,20 @@
//   }
// }

#if defined(COMPILER_RT_ARMHF_TARGET)
#  define CONVERT_DCMP_ARGS_TO_DF2_ARGS                    \
        vmov      d0, r0, r1                     SEPARATOR \
        vmov      d1, r2, r3
#else
#  define CONVERT_DCMP_ARGS_TO_DF2_ARGS
#endif

#define DEFINE_AEABI_DCMP(cond)                            \
        .syntax unified                          SEPARATOR \
        .p2align 2                               SEPARATOR \
DEFINE_COMPILERRT_FUNCTION(__aeabi_dcmp ## cond)           \
        push      { r4, lr }                     SEPARATOR \
        CONVERT_DCMP_ARGS_TO_DF2_ARGS            SEPARATOR \
        bl        SYMBOL_NAME(__ ## cond ## df2) SEPARATOR \
        cmp       r0, #0                         SEPARATOR \
        b ## cond 1f                             SEPARATOR \
+9 −0
Original line number Diff line number Diff line
@@ -18,11 +18,20 @@
//   }
// }

#if defined(COMPILER_RT_ARMHF_TARGET)
#  define CONVERT_FCMP_ARGS_TO_SF2_ARGS                    \
        vmov      s0, r0                         SEPARATOR \
        vmov      s1, r1
#else
#  define CONVERT_FCMP_ARGS_TO_SF2_ARGS
#endif

#define DEFINE_AEABI_FCMP(cond)                            \
        .syntax unified                          SEPARATOR \
        .p2align 2                               SEPARATOR \
DEFINE_COMPILERRT_FUNCTION(__aeabi_fcmp ## cond)           \
        push      { r4, lr }                     SEPARATOR \
        CONVERT_FCMP_ARGS_TO_SF2_ARGS            SEPARATOR \
        bl        SYMBOL_NAME(__ ## cond ## sf2) SEPARATOR \
        cmp       r0, #0                         SEPARATOR \
        b ## cond 1f                             SEPARATOR \