diff options
| author | Oleg Ranevskyy <oranevskyy@accesssoftek.com> | 2017-08-23 14:26:31 +0000 | 
|---|---|---|
| committer | Oleg Ranevskyy <oranevskyy@accesssoftek.com> | 2017-08-23 14:26:31 +0000 | 
| commit | 6c75b51bb57fc329fbaea61fe8f37d50fd81829f (patch) | |
| tree | 723005671953d3a49d8c7af1ed15e1a1fd2df44a /compiler-rt/lib/builtins | |
| parent | 8db41e9dbd141d9904da6e29d098a49eed933400 (diff) | |
| download | bcm5719-llvm-6c75b51bb57fc329fbaea61fe8f37d50fd81829f.tar.gz bcm5719-llvm-6c75b51bb57fc329fbaea61fe8f37d50fd81829f.zip | |
[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: 311555
Diffstat (limited to 'compiler-rt/lib/builtins')
| -rw-r--r-- | compiler-rt/lib/builtins/arm/aeabi_dcmp.S | 9 | ||||
| -rw-r--r-- | compiler-rt/lib/builtins/arm/aeabi_fcmp.S | 9 | 
2 files changed, 18 insertions, 0 deletions
| diff --git a/compiler-rt/lib/builtins/arm/aeabi_dcmp.S b/compiler-rt/lib/builtins/arm/aeabi_dcmp.S index 51539c0ac81..9fa78b46124 100644 --- a/compiler-rt/lib/builtins/arm/aeabi_dcmp.S +++ b/compiler-rt/lib/builtins/arm/aeabi_dcmp.S @@ -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 \ diff --git a/compiler-rt/lib/builtins/arm/aeabi_fcmp.S b/compiler-rt/lib/builtins/arm/aeabi_fcmp.S index 8e7774b5897..ea5b96c21d5 100644 --- a/compiler-rt/lib/builtins/arm/aeabi_fcmp.S +++ b/compiler-rt/lib/builtins/arm/aeabi_fcmp.S @@ -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 \ | 

