/* GPL, etc -- based loosely on mathinline.h */
#ifndef __LINUXCNC_RTAPI_MATH_I386_H
#define __LINUXCNC_RTAPI_MATH_I386_H

#define MATHOP(f,i) extern __inline double f(double __x) { \
    register double __result; \
    __asm __volatile__ (i : "=t" (__result) : "0" (__x)); \
    return __result; \
}

MATHOP(sin, "fsin")
MATHOP(cos, "fcos")
MATHOP(fabs, "fabs")
MATHOP(sqrt, "fsqrt")

extern __inline double tan (double __x) {
    register long double __value;
    register long double __value2 __attribute__ ((__unused__));
    __asm __volatile__ ("fptan" : "=t" (__value2), "=u" (__value) : "0" (__x));
    return __value;
}

extern __inline double atan2 (double __y, double __x) {
    register long double __value;
    __asm __volatile__ ("fpatan" : "=t" (__value) : "0" (__x), "u" (__y) : "st(1)");
    return __value;
}
#endif /* RTAPI_MATH_I386_H */
