/*
 * Copyright 2010, The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifdef USE_VFP_RUNTIME
#   define DEF_GENERIC_OR_VFP_RUNTIME(func) DEF_VFP_RUNTIME(func)
#   define DEF_LLVM_OR_VFP_RUNTIME(func) DEF_VFP_RUNTIME(func)
#else
#   undef DEF_VFP_RUNTIME
#   define DEF_VFP_RUNTIME(func)
#   define DEF_GENERIC_OR_VFP_RUNTIME(func) DEF_GENERIC_RUNTIME(func)
#   define DEF_LLVM_OR_VFP_RUNTIME(func) DEF_LLVM_RUNTIME(func)
#endif

// Sorted
DEF_LLVM_RUNTIME(__absvdi2)
DEF_LLVM_RUNTIME(__absvsi2)

DEF_GENERIC_OR_VFP_RUNTIME(__adddf3)
DEF_GENERIC_OR_VFP_RUNTIME(__addsf3)

DEF_LLVM_RUNTIME(__addvdi3)
DEF_LLVM_RUNTIME(__addvsi3)

#if defined(__arm__)
  // ARM Runtime ABI:
  // http://infocenter.arm.com/help/topic/com.arm.doc.ihi0043c/IHI0043C_rtabi.pdf
  // See also: external/llvm/lib/Target/ARM/ARMISelLowering.cpp

  DEF_GENERIC_RUNTIME(__aeabi_d2f)
  DEF_GENERIC_RUNTIME(__aeabi_d2iz)
  DEF_GENERIC_RUNTIME(__aeabi_d2lz)
  DEF_GENERIC_RUNTIME(__aeabi_d2uiz)
  DEF_GENERIC_RUNTIME(__aeabi_d2ulz)
  DEF_GENERIC_RUNTIME(__aeabi_dadd)
  DEF_GENERIC_RUNTIME(__aeabi_dcmpeq)
  DEF_GENERIC_RUNTIME(__aeabi_dcmpge)
  DEF_GENERIC_RUNTIME(__aeabi_dcmpgt)
  DEF_GENERIC_RUNTIME(__aeabi_dcmple)
  DEF_GENERIC_RUNTIME(__aeabi_dcmplt)
  DEF_GENERIC_RUNTIME(__aeabi_dcmpun)
  DEF_GENERIC_RUNTIME(__aeabi_ddiv)
  DEF_GENERIC_RUNTIME(__aeabi_dmul)
  DEF_GENERIC_RUNTIME(__aeabi_dsub)
  DEF_GENERIC_RUNTIME(__aeabi_f2d)
  DEF_GENERIC_RUNTIME(__aeabi_f2iz)
  DEF_GENERIC_RUNTIME(__aeabi_f2lz)
  DEF_GENERIC_RUNTIME(__aeabi_f2uiz)
  DEF_GENERIC_RUNTIME(__aeabi_f2ulz)
  DEF_GENERIC_RUNTIME(__aeabi_fadd)
  DEF_GENERIC_RUNTIME(__aeabi_fcmpeq)
  DEF_GENERIC_RUNTIME(__aeabi_fcmpge)
  DEF_GENERIC_RUNTIME(__aeabi_fcmpgt)
  DEF_GENERIC_RUNTIME(__aeabi_fcmple)
  DEF_GENERIC_RUNTIME(__aeabi_fcmplt)
  DEF_GENERIC_RUNTIME(__aeabi_fcmpun)
  DEF_GENERIC_RUNTIME(__aeabi_fdiv)
  DEF_GENERIC_RUNTIME(__aeabi_fmul)
  DEF_GENERIC_RUNTIME(__aeabi_fsub)
  DEF_GENERIC_RUNTIME(__aeabi_i2d)
  DEF_GENERIC_RUNTIME(__aeabi_i2f)
  DEF_GENERIC_RUNTIME(__aeabi_idiv)
  DEF_GENERIC_RUNTIME(__aeabi_l2d)
  DEF_GENERIC_RUNTIME(__aeabi_l2f)
  DEF_GENERIC_RUNTIME(__aeabi_lasr)
  DEF_GENERIC_RUNTIME(__aeabi_ldivmod)
  DEF_GENERIC_RUNTIME(__aeabi_llsl)
  DEF_GENERIC_RUNTIME(__aeabi_llsr)
  DEF_GENERIC_RUNTIME(__aeabi_lmul)
  DEF_GENERIC_RUNTIME(__aeabi_memcpy)
  DEF_GENERIC_RUNTIME(__aeabi_memmove)
  DEF_GENERIC_RUNTIME(__aeabi_memset)
  DEF_GENERIC_RUNTIME(__aeabi_ui2d)
  DEF_GENERIC_RUNTIME(__aeabi_ui2f)
  DEF_GENERIC_RUNTIME(__aeabi_uidiv)
  DEF_GENERIC_RUNTIME(__aeabi_ul2d)
  DEF_GENERIC_RUNTIME(__aeabi_ul2f)
  DEF_GENERIC_RUNTIME(__aeabi_uldivmod)
#endif // defined(__arm__)

#if !defined(__i386__) && !defined(__SSE2__)
    DEF_LLVM_RUNTIME(__ashldi3)
#endif
#if !defined(ANDROID) /* has one in bionic */
    DEF_LLVM_RUNTIME(__ashrdi3)
#endif
#if defined(__mips__)
    DEF_GENERIC_RUNTIME(__ashrdi3)
#endif

#ifdef USE_VFP_RUNTIME
//    DEF_GENERIC_RUNTIME(__bswapdi2)
//    DEF_GENERIC_RUNTIME(__bswapsi2)
#endif

DEF_LLVM_RUNTIME(__clzdi2)
DEF_LLVM_RUNTIME(__clzsi2)
DEF_LLVM_RUNTIME(__cmpdi2)
DEF_LLVM_RUNTIME(__ctzdi2)
DEF_LLVM_RUNTIME(__ctzsi2)

#if !defined(ANDROID) /* no complex extension */
    DEF_LLVM_RUNTIME(__divdc3)
#endif

DEF_GENERIC_OR_VFP_RUNTIME(__divdf3)

#if !defined(__i386__)
    DEF_LLVM_RUNTIME(__divdi3)
#endif
DEF_LLVM_RUNTIME(__divsi3)

#if !defined(ANDROID) /* no complex extension */
    DEF_LLVM_RUNTIME(__divsc3)
#endif

DEF_GENERIC_OR_VFP_RUNTIME(__divsf3)

DEF_LLVM_RUNTIME(__eprintf)

DEF_GENERIC_OR_VFP_RUNTIME(__eqdf2)
DEF_GENERIC_OR_VFP_RUNTIME(__eqsf2)
DEF_GENERIC_OR_VFP_RUNTIME(__extendsfdf2)

DEF_LLVM_RUNTIME(__ffsdi2)
DEF_LLVM_RUNTIME(__fixdfdi)

DEF_GENERIC_OR_VFP_RUNTIME(__fixdfsi)

DEF_LLVM_RUNTIME(__fixsfdi)

DEF_GENERIC_OR_VFP_RUNTIME(__fixsfsi)

DEF_LLVM_RUNTIME(__fixunsdfdi)
DEF_LLVM_OR_VFP_RUNTIME(__fixunsdfsi)
DEF_LLVM_RUNTIME(__fixunssfdi)

DEF_LLVM_OR_VFP_RUNTIME(__fixunssfsi)

#if !defined(__i386__)
    DEF_LLVM_RUNTIME(__floatdidf)
    DEF_LLVM_RUNTIME(__floatdisf)
#endif

DEF_GENERIC_OR_VFP_RUNTIME(__floatsidf)
DEF_GENERIC_OR_VFP_RUNTIME(__floatsisf)

#if !defined(__i386__)
    DEF_LLVM_RUNTIME(__floatundidf)
    DEF_LLVM_RUNTIME(__floatundisf)
#endif

DEF_GENERIC_RUNTIME(__floatunsidf)
DEF_GENERIC_RUNTIME(__floatunsisf)

DEF_VFP_RUNTIME(__floatunssidf)
DEF_VFP_RUNTIME(__floatunssisf)

DEF_GENERIC_OR_VFP_RUNTIME(__gedf2)
DEF_GENERIC_OR_VFP_RUNTIME(__gesf2)
DEF_VFP_RUNTIME(__gtdf2)
DEF_VFP_RUNTIME(__gtsf2)

DEF_GENERIC_OR_VFP_RUNTIME(__ledf2)
DEF_GENERIC_OR_VFP_RUNTIME(__lesf2)

#if !defined(__i386__) && !defined(__SSE2__)
    DEF_LLVM_RUNTIME(__lshrdi3)
#endif

DEF_VFP_RUNTIME(__ltdf2)
DEF_VFP_RUNTIME(__ltsf2)

#if !defined(__i386__)
    DEF_LLVM_RUNTIME(__moddi3)
#endif
DEF_LLVM_RUNTIME(__modsi3)

#ifndef ANDROID // no complex extension
    DEF_LLVM_RUNTIME(__muldc3)
#endif

DEF_GENERIC_OR_VFP_RUNTIME(__muldf3)
#if !defined(__i386__)
    DEF_LLVM_RUNTIME(__muldi3)
#endif

#ifndef ANDROID // no complex extension
    DEF_LLVM_RUNTIME(__mulsc3)
#endif

DEF_GENERIC_OR_VFP_RUNTIME(__mulsf3)

DEF_LLVM_RUNTIME(__mulvdi3)
DEF_LLVM_RUNTIME(__mulvsi3)

DEF_VFP_RUNTIME(__nedf2)

DEF_GENERIC_OR_VFP_RUNTIME(__negdf2)

DEF_LLVM_RUNTIME(__negdi2)

DEF_GENERIC_OR_VFP_RUNTIME(__negsf2)

DEF_LLVM_RUNTIME(__negvdi2)
DEF_LLVM_RUNTIME(__negvsi2)

DEF_VFP_RUNTIME(__nesf2)

DEF_LLVM_RUNTIME(__paritydi2)
DEF_LLVM_RUNTIME(__paritysi2)
DEF_LLVM_RUNTIME(__popcountdi2)
DEF_LLVM_RUNTIME(__popcountsi2)
DEF_LLVM_RUNTIME(__powidf2)
DEF_LLVM_RUNTIME(__powisf2)

DEF_GENERIC_OR_VFP_RUNTIME(__subdf3)
DEF_GENERIC_OR_VFP_RUNTIME(__subsf3)

DEF_LLVM_RUNTIME(__subvdi3)
DEF_LLVM_RUNTIME(__subvsi3)

DEF_GENERIC_OR_VFP_RUNTIME(__truncdfsf2)

DEF_LLVM_RUNTIME(__ucmpdi2)
#if !defined(__i386__)
    DEF_LLVM_RUNTIME(__udivdi3)
#endif
DEF_LLVM_RUNTIME(__udivmoddi4)
DEF_LLVM_RUNTIME(__udivsi3)
#if !defined(__i386__)
    DEF_LLVM_RUNTIME(__umoddi3)
#endif
DEF_LLVM_RUNTIME(__umodsi3)

DEF_GENERIC_OR_VFP_RUNTIME(__unorddf2)
DEF_GENERIC_OR_VFP_RUNTIME(__unordsf2)

#undef DEF_GENERIC_RUNTIME
#undef DEF_LLVM_RUNTIME
#undef DEF_VFP_RUNTIME
#undef DEF_BCC_RUNTIME
