;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
;;
;; This file is part of LIBF7, which is part of GCC.
;;
;; GCC is free software; you can redistribute it and/or modify it under
;; the terms of the GNU General Public License as published by the Free
;; Software Foundation; either version 3, or (at your option) any later
;; version.
;;
;; GCC is distributed in the hope that it will be useful, but WITHOUT ANY
;; WARRANTY; without even the implied warranty of MERCHANTABILITY or
;; FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
;; for more details.
;;
;; Under Section 7 of GPL version 3, you are granted additional
;; permissions described in the GCC Runtime Library Exception, version
;; 3.1, as published by the Free Software Foundation.
;;
;; You should have received a copy of the GNU General Public License and
;; a copy of the GCC Runtime Library Exception along with this program;
;; see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
;; <http://www.gnu.org/licenses/>.  */

;; Auto-generated file, do not change by hand.
;;
;; Wrappers for double and long double functions to use functions that
;; operate on f7_t, and get f7_t* and const f7_t*.
;;
;; Generated by: f7wraps.sh
;; Included by : libf7-asm.sx
;; WITH_LIBF7_MATH_FUNCTIONS=1
;; WITH_LIBF7_MATH_SYMBOLS=1

;; Functions that usually live in libgcc: __<name>df3 for <name> in:
;; add sub mul div

;; double __adddf3 (double, double)  ; add
#ifdef F7MOD_D_add_
_DEFUN __adddf3
    ALIAS __add
    .global F7_NAME(add)
    ldi     ZH,     hi8(gs(F7_NAME(add)))
    ldi     ZL,     lo8(gs(F7_NAME(add)))
    F7jmp   call_ddd
_ENDF __adddf3
#endif /* F7MOD_D_add_ */

;; double __subdf3 (double, double)  ; sub
#ifdef F7MOD_D_sub_
_DEFUN __subdf3
    ALIAS __sub
    .global F7_NAME(sub)
    ldi     ZH,     hi8(gs(F7_NAME(sub)))
    ldi     ZL,     lo8(gs(F7_NAME(sub)))
    F7jmp   call_ddd
_ENDF __subdf3
#endif /* F7MOD_D_sub_ */

;; double __muldf3 (double, double)  ; mul
#ifdef F7MOD_D_mul_
_DEFUN __muldf3
    ALIAS __mul
    .global F7_NAME(mul)
    ldi     ZH,     hi8(gs(F7_NAME(mul)))
    ldi     ZL,     lo8(gs(F7_NAME(mul)))
    F7jmp   call_ddd
_ENDF __muldf3
#endif /* F7MOD_D_mul_ */

;; double __divdf3 (double, double)  ; div
#ifdef F7MOD_D_div_
_DEFUN __divdf3
    ALIAS __div
    .global F7_NAME(div)
    ldi     ZH,     hi8(gs(F7_NAME(div)))
    ldi     ZL,     lo8(gs(F7_NAME(div)))
    F7jmp   call_ddd
_ENDF __divdf3
#endif /* F7MOD_D_div_ */

;; Functions that usually live in libgcc: __<name>df2 for <name> in:
;; le lt ge gt ne eq unord

;; bool __ledf2 (double, double)  ; le
#ifdef F7MOD_D_le_
_DEFUN __ledf2
    .global F7_NAME(le_impl)
    ldi     ZH,     hi8(gs(F7_NAME(le_impl)))
    ldi     ZL,     lo8(gs(F7_NAME(le_impl)))
    F7jmp   call_xdd
_ENDF __ledf2
#endif /* F7MOD_D_le_ */

;; bool __ltdf2 (double, double)  ; lt
#ifdef F7MOD_D_lt_
_DEFUN __ltdf2
    .global F7_NAME(lt_impl)
    ldi     ZH,     hi8(gs(F7_NAME(lt_impl)))
    ldi     ZL,     lo8(gs(F7_NAME(lt_impl)))
    F7jmp   call_xdd
_ENDF __ltdf2
#endif /* F7MOD_D_lt_ */

;; bool __gedf2 (double, double)  ; ge
#ifdef F7MOD_D_ge_
_DEFUN __gedf2
    .global F7_NAME(ge_impl)
    ldi     ZH,     hi8(gs(F7_NAME(ge_impl)))
    ldi     ZL,     lo8(gs(F7_NAME(ge_impl)))
    F7jmp   call_xdd
_ENDF __gedf2
#endif /* F7MOD_D_ge_ */

;; bool __gtdf2 (double, double)  ; gt
#ifdef F7MOD_D_gt_
_DEFUN __gtdf2
    .global F7_NAME(gt_impl)
    ldi     ZH,     hi8(gs(F7_NAME(gt_impl)))
    ldi     ZL,     lo8(gs(F7_NAME(gt_impl)))
    F7jmp   call_xdd
_ENDF __gtdf2
#endif /* F7MOD_D_gt_ */

;; bool __nedf2 (double, double)  ; ne
#ifdef F7MOD_D_ne_
_DEFUN __nedf2
    .global F7_NAME(ne_impl)
    ldi     ZH,     hi8(gs(F7_NAME(ne_impl)))
    ldi     ZL,     lo8(gs(F7_NAME(ne_impl)))
    F7jmp   call_xdd
_ENDF __nedf2
#endif /* F7MOD_D_ne_ */

;; bool __eqdf2 (double, double)  ; eq
#ifdef F7MOD_D_eq_
_DEFUN __eqdf2
    .global F7_NAME(eq_impl)
    ldi     ZH,     hi8(gs(F7_NAME(eq_impl)))
    ldi     ZL,     lo8(gs(F7_NAME(eq_impl)))
    F7jmp   call_xdd
_ENDF __eqdf2
#endif /* F7MOD_D_eq_ */

;; bool __unorddf2 (double, double)  ; unord
#ifdef F7MOD_D_unord_
_DEFUN __unorddf2
    .global F7_NAME(unord_impl)
    ldi     ZH,     hi8(gs(F7_NAME(unord_impl)))
    ldi     ZL,     lo8(gs(F7_NAME(unord_impl)))
    F7jmp   call_xdd
_ENDF __unorddf2
#endif /* F7MOD_D_unord_ */

;; Functions that usually live in libgcc: __<name> for <name> in:
;; fixdfsi fixdfdi fixunsdfdi fixunsdfsi truncdfsf2

;; type_t __fixdfsi (double)  ; fixdfsi
#ifdef F7MOD_D_fixdfsi_
_DEFUN __fixdfsi
    .global F7_NAME(fixdfsi)
    ldi     ZH,     hi8(gs(F7_NAME(fixdfsi)))
    ldi     ZL,     lo8(gs(F7_NAME(fixdfsi)))
    F7jmp   call_xd
_ENDF __fixdfsi
#endif /* F7MOD_D_fixdfsi_ */

;; type_t __fixdfdi (double)  ; fixdfdi
#ifdef F7MOD_D_fixdfdi_
_DEFUN __fixdfdi
    .global F7_NAME(fixdfdi)
    ldi     ZH,     hi8(gs(F7_NAME(fixdfdi)))
    ldi     ZL,     lo8(gs(F7_NAME(fixdfdi)))
    F7jmp   call_xd
_ENDF __fixdfdi
#endif /* F7MOD_D_fixdfdi_ */

;; type_t __fixunsdfdi (double)  ; fixunsdfdi
#ifdef F7MOD_D_fixunsdfdi_
_DEFUN __fixunsdfdi
    .global F7_NAME(fixunsdfdi)
    ldi     ZH,     hi8(gs(F7_NAME(fixunsdfdi)))
    ldi     ZL,     lo8(gs(F7_NAME(fixunsdfdi)))
    F7jmp   call_xd
_ENDF __fixunsdfdi
#endif /* F7MOD_D_fixunsdfdi_ */

;; type_t __fixunsdfsi (double)  ; fixunsdfsi
#ifdef F7MOD_D_fixunsdfsi_
_DEFUN __fixunsdfsi
    .global F7_NAME(fixunsdfsi)
    ldi     ZH,     hi8(gs(F7_NAME(fixunsdfsi)))
    ldi     ZL,     lo8(gs(F7_NAME(fixunsdfsi)))
    F7jmp   call_xd
_ENDF __fixunsdfsi
#endif /* F7MOD_D_fixunsdfsi_ */

;; type_t __truncdfsf2 (double)  ; truncdfsf2
#ifdef F7MOD_D_truncdfsf2_
_DEFUN __truncdfsf2
    .global F7_NAME(truncdfsf2)
    ldi     ZH,     hi8(gs(F7_NAME(truncdfsf2)))
    ldi     ZL,     lo8(gs(F7_NAME(truncdfsf2)))
    F7jmp   call_xd
_ENDF __truncdfsf2
#endif /* F7MOD_D_truncdfsf2_ */

;; Functions that usually live in libgcc: __<name> for <name> in:
;; floatunsidf floatsidf extendsfdf2

;; double __floatunsidf (type_t)  ; floatunsidf
#ifdef F7MOD_D_floatunsidf_
_DEFUN __floatunsidf
    .global F7_NAME(floatunsidf)
    ldi     ZH,     hi8(gs(F7_NAME(floatunsidf)))
    ldi     ZL,     lo8(gs(F7_NAME(floatunsidf)))
    F7jmp   call_dx
_ENDF __floatunsidf
#endif /* F7MOD_D_floatunsidf_ */

;; double __floatsidf (type_t)  ; floatsidf
#ifdef F7MOD_D_floatsidf_
_DEFUN __floatsidf
    .global F7_NAME(floatsidf)
    ldi     ZH,     hi8(gs(F7_NAME(floatsidf)))
    ldi     ZL,     lo8(gs(F7_NAME(floatsidf)))
    F7jmp   call_dx
_ENDF __floatsidf
#endif /* F7MOD_D_floatsidf_ */

;; double __extendsfdf2 (type_t)  ; extendsfdf2
#ifdef F7MOD_D_extendsfdf2_
_DEFUN __extendsfdf2
    .global F7_NAME(extendsfdf2)
    ldi     ZH,     hi8(gs(F7_NAME(extendsfdf2)))
    ldi     ZL,     lo8(gs(F7_NAME(extendsfdf2)))
    F7jmp   call_dx
_ENDF __extendsfdf2
#endif /* F7MOD_D_extendsfdf2_ */

;; Functions that usually live in libm:  Depending on [long] double layout,
;; define <name> and <name>l as weak alias(es) of __<name> for <name> in:
;; pow fmin fmax fmod hypot atan2

;; double __pow (double, double)
#ifdef F7MOD_D_pow_
_DEFUN __pow
    DALIAS pow
    LALIAS powl
    .global F7_NAME(pow)
    ldi     ZH,     hi8(gs(F7_NAME(pow)))
    ldi     ZL,     lo8(gs(F7_NAME(pow)))
    F7jmp   call_ddd
_ENDF __pow
#endif /* F7MOD_D_pow_ */

;; double __fmin (double, double)
#ifdef F7MOD_D_fmin_
_DEFUN __fmin
    DALIAS fmin
    LALIAS fminl
    .global F7_NAME(fmin)
    ldi     ZH,     hi8(gs(F7_NAME(fmin)))
    ldi     ZL,     lo8(gs(F7_NAME(fmin)))
    F7jmp   call_ddd
_ENDF __fmin
#endif /* F7MOD_D_fmin_ */

;; double __fmax (double, double)
#ifdef F7MOD_D_fmax_
_DEFUN __fmax
    DALIAS fmax
    LALIAS fmaxl
    .global F7_NAME(fmax)
    ldi     ZH,     hi8(gs(F7_NAME(fmax)))
    ldi     ZL,     lo8(gs(F7_NAME(fmax)))
    F7jmp   call_ddd
_ENDF __fmax
#endif /* F7MOD_D_fmax_ */

;; double __fmod (double, double)
#ifdef F7MOD_D_fmod_
_DEFUN __fmod
    DALIAS fmod
    LALIAS fmodl
    .global F7_NAME(fmod)
    ldi     ZH,     hi8(gs(F7_NAME(fmod)))
    ldi     ZL,     lo8(gs(F7_NAME(fmod)))
    F7jmp   call_ddd
_ENDF __fmod
#endif /* F7MOD_D_fmod_ */

;; double __hypot (double, double)
#ifdef F7MOD_D_hypot_
_DEFUN __hypot
    DALIAS hypot
    LALIAS hypotl
    .global F7_NAME(hypot)
    ldi     ZH,     hi8(gs(F7_NAME(hypot)))
    ldi     ZL,     lo8(gs(F7_NAME(hypot)))
    F7jmp   call_ddd
_ENDF __hypot
#endif /* F7MOD_D_hypot_ */

;; double __atan2 (double, double)
#ifdef F7MOD_D_atan2_
_DEFUN __atan2
    DALIAS atan2
    LALIAS atan2l
    .global F7_NAME(atan2)
    ldi     ZH,     hi8(gs(F7_NAME(atan2)))
    ldi     ZL,     lo8(gs(F7_NAME(atan2)))
    F7jmp   call_ddd
_ENDF __atan2
#endif /* F7MOD_D_atan2_ */

;; Functions that usually live in libm:  Depending on [long] double layout,
;; define <name> and <name>l as weak alias(es) of __<name> for <name> in:
;; ldexp frexp

;; double __ldexp (double, word_t)
#ifdef F7MOD_D_ldexp_
_DEFUN __ldexp
    DALIAS ldexp
    LALIAS ldexpl
    .global F7_NAME(ldexp)
    ldi     ZH,     hi8(gs(F7_NAME(ldexp)))
    ldi     ZL,     lo8(gs(F7_NAME(ldexp)))
    F7jmp   call_ddx
_ENDF __ldexp
#endif /* F7MOD_D_ldexp_ */

;; double __frexp (double, word_t)
#ifdef F7MOD_D_frexp_
_DEFUN __frexp
    DALIAS frexp
    LALIAS frexpl
    .global F7_NAME(frexp)
    ldi     ZH,     hi8(gs(F7_NAME(frexp)))
    ldi     ZL,     lo8(gs(F7_NAME(frexp)))
    F7jmp   call_ddx
_ENDF __frexp
#endif /* F7MOD_D_frexp_ */

;; Functions that usually live in libm:  Depending on [long] double layout,
;; define <name> and <name>l as weak alias(es) of __<name> for <name> in:
;; sqrt cbrt exp exp10 pow10 log log10 log2 sin cos tan cotan asin acos atan ceil floor trunc round sinh cosh tanh

;; double __sqrt (double)
#ifdef F7MOD_D_sqrt_
_DEFUN __sqrt
    DALIAS sqrt
    LALIAS sqrtl
    .global F7_NAME(sqrt)
    ldi     ZH,     hi8(gs(F7_NAME(sqrt)))
    ldi     ZL,     lo8(gs(F7_NAME(sqrt)))
    F7jmp   call_dd
_ENDF __sqrt
#endif /* F7MOD_D_sqrt_ */

;; double __cbrt (double)
#ifdef F7MOD_D_cbrt_
_DEFUN __cbrt
    DALIAS cbrt
    LALIAS cbrtl
    .global F7_NAME(cbrt)
    ldi     ZH,     hi8(gs(F7_NAME(cbrt)))
    ldi     ZL,     lo8(gs(F7_NAME(cbrt)))
    F7jmp   call_dd
_ENDF __cbrt
#endif /* F7MOD_D_cbrt_ */

;; double __exp (double)
#ifdef F7MOD_D_exp_
_DEFUN __exp
    DALIAS exp
    LALIAS expl
    .global F7_NAME(exp)
    ldi     ZH,     hi8(gs(F7_NAME(exp)))
    ldi     ZL,     lo8(gs(F7_NAME(exp)))
    F7jmp   call_dd
_ENDF __exp
#endif /* F7MOD_D_exp_ */

;; double __exp10 (double)
#ifdef F7MOD_D_exp10_
_DEFUN __exp10
    DALIAS exp10
    LALIAS exp10l
    .global F7_NAME(exp10)
    ldi     ZH,     hi8(gs(F7_NAME(exp10)))
    ldi     ZL,     lo8(gs(F7_NAME(exp10)))
    F7jmp   call_dd
_ENDF __exp10
#endif /* F7MOD_D_exp10_ */

;; double __pow10 (double)
#ifdef F7MOD_D_pow10_
_DEFUN __pow10
    DALIAS pow10
    LALIAS pow10l
    .global F7_NAME(pow10)
    ldi     ZH,     hi8(gs(F7_NAME(pow10)))
    ldi     ZL,     lo8(gs(F7_NAME(pow10)))
    F7jmp   call_dd
_ENDF __pow10
#endif /* F7MOD_D_pow10_ */

;; double __log (double)
#ifdef F7MOD_D_log_
_DEFUN __log
    DALIAS log
    LALIAS logl
    .global F7_NAME(log)
    ldi     ZH,     hi8(gs(F7_NAME(log)))
    ldi     ZL,     lo8(gs(F7_NAME(log)))
    F7jmp   call_dd
_ENDF __log
#endif /* F7MOD_D_log_ */

;; double __log10 (double)
#ifdef F7MOD_D_log10_
_DEFUN __log10
    DALIAS log10
    LALIAS log10l
    .global F7_NAME(log10)
    ldi     ZH,     hi8(gs(F7_NAME(log10)))
    ldi     ZL,     lo8(gs(F7_NAME(log10)))
    F7jmp   call_dd
_ENDF __log10
#endif /* F7MOD_D_log10_ */

;; double __log2 (double)
#ifdef F7MOD_D_log2_
_DEFUN __log2
    DALIAS log2
    LALIAS log2l
    .global F7_NAME(log2)
    ldi     ZH,     hi8(gs(F7_NAME(log2)))
    ldi     ZL,     lo8(gs(F7_NAME(log2)))
    F7jmp   call_dd
_ENDF __log2
#endif /* F7MOD_D_log2_ */

;; double __sin (double)
#ifdef F7MOD_D_sin_
_DEFUN __sin
    DALIAS sin
    LALIAS sinl
    .global F7_NAME(sin)
    ldi     ZH,     hi8(gs(F7_NAME(sin)))
    ldi     ZL,     lo8(gs(F7_NAME(sin)))
    F7jmp   call_dd
_ENDF __sin
#endif /* F7MOD_D_sin_ */

;; double __cos (double)
#ifdef F7MOD_D_cos_
_DEFUN __cos
    DALIAS cos
    LALIAS cosl
    .global F7_NAME(cos)
    ldi     ZH,     hi8(gs(F7_NAME(cos)))
    ldi     ZL,     lo8(gs(F7_NAME(cos)))
    F7jmp   call_dd
_ENDF __cos
#endif /* F7MOD_D_cos_ */

;; double __tan (double)
#ifdef F7MOD_D_tan_
_DEFUN __tan
    DALIAS tan
    LALIAS tanl
    .global F7_NAME(tan)
    ldi     ZH,     hi8(gs(F7_NAME(tan)))
    ldi     ZL,     lo8(gs(F7_NAME(tan)))
    F7jmp   call_dd
_ENDF __tan
#endif /* F7MOD_D_tan_ */

;; double __cotan (double)
#ifdef F7MOD_D_cotan_
_DEFUN __cotan
    DALIAS cotan
    LALIAS cotanl
    .global F7_NAME(cotan)
    ldi     ZH,     hi8(gs(F7_NAME(cotan)))
    ldi     ZL,     lo8(gs(F7_NAME(cotan)))
    F7jmp   call_dd
_ENDF __cotan
#endif /* F7MOD_D_cotan_ */

;; double __asin (double)
#ifdef F7MOD_D_asin_
_DEFUN __asin
    DALIAS asin
    LALIAS asinl
    .global F7_NAME(asin)
    ldi     ZH,     hi8(gs(F7_NAME(asin)))
    ldi     ZL,     lo8(gs(F7_NAME(asin)))
    F7jmp   call_dd
_ENDF __asin
#endif /* F7MOD_D_asin_ */

;; double __acos (double)
#ifdef F7MOD_D_acos_
_DEFUN __acos
    DALIAS acos
    LALIAS acosl
    .global F7_NAME(acos)
    ldi     ZH,     hi8(gs(F7_NAME(acos)))
    ldi     ZL,     lo8(gs(F7_NAME(acos)))
    F7jmp   call_dd
_ENDF __acos
#endif /* F7MOD_D_acos_ */

;; double __atan (double)
#ifdef F7MOD_D_atan_
_DEFUN __atan
    DALIAS atan
    LALIAS atanl
    .global F7_NAME(atan)
    ldi     ZH,     hi8(gs(F7_NAME(atan)))
    ldi     ZL,     lo8(gs(F7_NAME(atan)))
    F7jmp   call_dd
_ENDF __atan
#endif /* F7MOD_D_atan_ */

;; double __ceil (double)
#ifdef F7MOD_D_ceil_
_DEFUN __ceil
    DALIAS ceil
    LALIAS ceill
    .global F7_NAME(ceil)
    ldi     ZH,     hi8(gs(F7_NAME(ceil)))
    ldi     ZL,     lo8(gs(F7_NAME(ceil)))
    F7jmp   call_dd
_ENDF __ceil
#endif /* F7MOD_D_ceil_ */

;; double __floor (double)
#ifdef F7MOD_D_floor_
_DEFUN __floor
    DALIAS floor
    LALIAS floorl
    .global F7_NAME(floor)
    ldi     ZH,     hi8(gs(F7_NAME(floor)))
    ldi     ZL,     lo8(gs(F7_NAME(floor)))
    F7jmp   call_dd
_ENDF __floor
#endif /* F7MOD_D_floor_ */

;; double __trunc (double)
#ifdef F7MOD_D_trunc_
_DEFUN __trunc
    DALIAS trunc
    LALIAS truncl
    .global F7_NAME(trunc)
    ldi     ZH,     hi8(gs(F7_NAME(trunc)))
    ldi     ZL,     lo8(gs(F7_NAME(trunc)))
    F7jmp   call_dd
_ENDF __trunc
#endif /* F7MOD_D_trunc_ */

;; double __round (double)
#ifdef F7MOD_D_round_
_DEFUN __round
    DALIAS round
    LALIAS roundl
    .global F7_NAME(round)
    ldi     ZH,     hi8(gs(F7_NAME(round)))
    ldi     ZL,     lo8(gs(F7_NAME(round)))
    F7jmp   call_dd
_ENDF __round
#endif /* F7MOD_D_round_ */

;; double __sinh (double)
#ifdef F7MOD_D_sinh_
_DEFUN __sinh
    DALIAS sinh
    LALIAS sinhl
    .global F7_NAME(sinh)
    ldi     ZH,     hi8(gs(F7_NAME(sinh)))
    ldi     ZL,     lo8(gs(F7_NAME(sinh)))
    F7jmp   call_dd
_ENDF __sinh
#endif /* F7MOD_D_sinh_ */

;; double __cosh (double)
#ifdef F7MOD_D_cosh_
_DEFUN __cosh
    DALIAS cosh
    LALIAS coshl
    .global F7_NAME(cosh)
    ldi     ZH,     hi8(gs(F7_NAME(cosh)))
    ldi     ZL,     lo8(gs(F7_NAME(cosh)))
    F7jmp   call_dd
_ENDF __cosh
#endif /* F7MOD_D_cosh_ */

;; double __tanh (double)
#ifdef F7MOD_D_tanh_
_DEFUN __tanh
    DALIAS tanh
    LALIAS tanhl
    .global F7_NAME(tanh)
    ldi     ZH,     hi8(gs(F7_NAME(tanh)))
    ldi     ZL,     lo8(gs(F7_NAME(tanh)))
    F7jmp   call_dd
_ENDF __tanh
#endif /* F7MOD_D_tanh_ */

;; Functions that usually live in libm:  Depending on [long] double layout,
;; define <name> and <name>l as weak alias(es) of __<name> for <name> in:
;; lrint lround

;; type_t __lrint (double)
#ifdef F7MOD_D_lrint_
_DEFUN __lrint
    DALIAS lrint
    LALIAS lrintl
    .global F7_NAME(lrint)
    ldi     ZH,     hi8(gs(F7_NAME(lrint)))
    ldi     ZL,     lo8(gs(F7_NAME(lrint)))
    F7jmp   call_xd
_ENDF __lrint
#endif /* F7MOD_D_lrint_ */

;; type_t __lround (double)
#ifdef F7MOD_D_lround_
_DEFUN __lround
    DALIAS lround
    LALIAS lroundl
    .global F7_NAME(lround)
    ldi     ZH,     hi8(gs(F7_NAME(lround)))
    ldi     ZL,     lo8(gs(F7_NAME(lround)))
    F7jmp   call_xd
_ENDF __lround
#endif /* F7MOD_D_lround_ */
