/*
 * Copyright (C) 2012 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.
 */

// NOTE: COMPILER_RUNTIME_FUNC_LIST should be sorted!

#if defined(__i386__) || defined(__mips__)

#define COMPILER_RUNTIME_FUNC_LIST(V) \
  V(__ashldi3) \
  V(__ashrdi3) \
  V(__divdi3) \
  V(__fixdfdi) \
  V(__fixsfdi) \
  V(__fixtfdi) \
  V(__fixtfsi) \
  V(__fixunsdfdi) \
  V(__fixunsdfsi) \
  V(__fixunssfdi) \
  V(__fixunssfsi) \
  V(__fixunstfdi) \
  V(__fixunstfsi) \
  V(__fixunsxfdi) \
  V(__fixunsxfsi) \
  V(__fixxfdi) \
  V(__floatdidf) \
  V(__floatdisf) \
  V(__floatditf) \
  V(__floatdixf) \
  V(__floatsitf) \
  V(__floatundidf) \
  V(__floatundisf) \
  V(__floatunditf) \
  V(__floatundixf) \
  V(__floatunsitf) \
  V(__lshrdi3) \
  V(__moddi3) \
  V(__muldi3) \
  V(__negdi2) \
  V(__powidf2) \
  V(__powisf2) \
  V(__powitf2) \
  V(__powixf2) \
  V(__trunctfdf2) \
  V(__trunctfsf2) \
  V(__udivdi3) \
  V(__umoddi3) \
  V(ceil) \
  V(ceilf) \
  V(ceill) \
  V(copysign) \
  V(copysignf) \
  V(copysignl) \
  V(cos) \
  V(cosf) \
  V(exp) \
  V(exp2) \
  V(exp2f) \
  V(expf) \
  V(floor) \
  V(floorf) \
  V(floorl) \
  V(fma) \
  V(fmaf) \
  V(fmod) \
  V(fmodf) \
  V(log) \
  V(log10) \
  V(log10f) \
  V(logf) \
  V(memcpy) \
  V(memmove) \
  V(memset) \
  V(nearbyint) \
  V(nearbyintf) \
  V(pow) \
  V(powf) \
  V(rint) \
  V(rintf) \
  V(sin) \
  V(sinf) \
  V(sqrt) \
  V(sqrtf) \
  V(trunc) \
  V(truncf) \
  V(truncl)

#elif defined(__arm__)

#define COMPILER_RUNTIME_FUNC_LIST(V) \
  V(__aeabi_d2f) \
  V(__aeabi_d2iz) \
  V(__aeabi_d2lz) \
  V(__aeabi_d2uiz) \
  V(__aeabi_d2ulz) \
  V(__aeabi_dadd) \
  V(__aeabi_dcmpeq) \
  V(__aeabi_dcmpeq) \
  V(__aeabi_dcmpge) \
  V(__aeabi_dcmpgt) \
  V(__aeabi_dcmple) \
  V(__aeabi_dcmplt) \
  V(__aeabi_dcmpun) \
  V(__aeabi_dcmpun) \
  V(__aeabi_ddiv) \
  V(__aeabi_dmul) \
  V(__aeabi_dsub) \
  V(__aeabi_f2d) \
  V(__aeabi_f2iz) \
  V(__aeabi_f2lz) \
  V(__aeabi_f2uiz) \
  V(__aeabi_f2ulz) \
  V(__aeabi_fadd) \
  V(__aeabi_fcmpeq) \
  V(__aeabi_fcmpeq) \
  V(__aeabi_fcmpge) \
  V(__aeabi_fcmpgt) \
  V(__aeabi_fcmple) \
  V(__aeabi_fcmplt) \
  V(__aeabi_fcmpun) \
  V(__aeabi_fcmpun) \
  V(__aeabi_fdiv) \
  V(__aeabi_fmul) \
  V(__aeabi_fsub) \
  V(__aeabi_i2d) \
  V(__aeabi_i2f) \
  V(__aeabi_idiv) \
  V(__aeabi_idiv) \
  V(__aeabi_idiv) \
  V(__aeabi_l2d) \
  V(__aeabi_l2f) \
  V(__aeabi_lasr) \
  V(__aeabi_ldivmod) \
  V(__aeabi_llsl) \
  V(__aeabi_llsr) \
  V(__aeabi_lmul) \
  V(__aeabi_memcpy) \
  V(__aeabi_memmove) \
  V(__aeabi_memset) \
  V(__aeabi_ui2d) \
  V(__aeabi_ui2f) \
  V(__aeabi_uidiv) \
  V(__aeabi_uidiv) \
  V(__aeabi_uidiv) \
  V(__aeabi_ul2d) \
  V(__aeabi_ul2f) \
  V(__aeabi_uldivmod) \
  V(__moddi3) \
  V(__modsi3) \
  V(__umoddi3) \
  V(__umodsi3) \
  V(fmod) \
  V(fmodf) \
  V(memcpy) \
  V(memmove) \
  V(memset)

#else

#error "Unknown target platform"

#endif
