[LLVMdev] [Compiler-RT] [ARM] Where __aeabi_[il]div0 builtins should be implemented?

Jonathan Roelofs
Fri, 05 Sep 2014 18:32:30 -0000

Sergey,

Not that it'll save you much hassle, but here's an implementation of
__aeabi_idiv0 and __aeabi_ldiv0 that I've been sitting on for a while.

I vaguely remember compnerd suggesting that I don't commit them to
compiler_rt,
but I don't remember why.


Cheers,

Jon

On 9/5/14, 12:10 PM, Sergey Dmitrouk wrote:
> Hi,
>
> There are several places in compiler-rt which refer to __aeabi_idiv0.
> For example, in lib/builtins/arm/udivsi3.S:
>
> #ifdef __ARM_EABI__
>      b __aeabi_idiv0
> #else
>      JMP(lr)
> #endif
>
> At the same time there is no definition of it.  It looks as if it was
> done intentionally so that third-party could provide custom handler for
> division by zero.
>
> IMHO It's not very consistent and looks odd as all other __aebi_*
> functions are provided by compiler-rt.
>
> Did I get it all right or maybe I'm missing something?
>
> libgcc provides both __aeabi_idiv0 and __aeabi_ldiv0 as weak symbols,
> any reasons not to do the same in compiler-rt?  Or, to put it
> differently, why force external implementation of these functions?
>
> Thanks,
> Sergey
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>

--
Jon Roelofs
jonathan at codesourcery.com
CodeSourcery / Mentor Embedded
-------------- next part --------------
//===-- aeabi_idiv0.c - EABI idiv0 implementation -------------------------===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is dual licensed under the MIT and the University of Illinois Open
// Source Licenses. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//


#ifdef __ARM_EABI__

extern void __aeabi_idiv0() __attribute__((weak));

void __aeabi_idiv0() {

}

#endif

-------------- next part --------------
//===-- aeabi_ldiv0.c - EABI ldiv0 implementation -------------------------===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is dual licensed under the MIT and the University of Illinois Open
// Source Licenses. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//


#ifdef __ARM_EABI__

extern void __aeabi_ldiv0() __attribute__((weak));

void __aeabi_ldiv0() {

}

#endif