/* * $Id$ * * $Date$ * $Revision$ * * Written in 2018 by Daniel "Daytona675x" Müßener * * This file is part of the MiniGL library project * See the file Licence.txt for more details * */ #ifndef _MGL_TABOR_H_ #define _MGL_TABOR_H_ #if defined(MGL_TABOR) #ifdef MGL_HAS_NO_SPE_NEWLIB #include #include #define cosf spe_cos #define cos spe_cos #define fcos spe_cos #define sinf spe_sin #define sin spe_sin #define fsin spe_cos #define tanf spe_tan #define tan spe_tan #define sqrtf spe_sqrt #define sqrt spe_sqrt #define fsqrt spe_sqrt #define pow spe_pow #define powf spe_pow #define expf spe_exp #define exp spe_exp #define logf spe_log #define log spe_log #define fabsf spe_fabs #define absf spe_fabs #define fabs spe_fabs #define floorf spe_floor #define floor spe_floor #define ceilf spe_ceil #define ceil spe_ceil #define atof spe_atof #define atan spe_atan #define atanf spe_atan #ifdef __cplusplus extern "C" { #endif double spe_cos(double v); double spe_sin(double v); double spe_sqrt(double v); float spe_exp(float v); float spe_log(float v); float spe_pow(float x,float y); static inline float spe_fabs(float v) {return v>=0.0f ? v : -v;} float spe_floor(float v); float spe_ceil(float v); float spe_atof(const char *s); float spe_atan(float x); #ifdef __cplusplus } #endif #endif #ifdef MGL_TABOR_NO_ABI_BRIDGE #define TABORIZE(f) f #else #define TABORIZE(f) TABOR##f #define TABORIZE_GLUE(f) TABORGLUE##f #define TB_GET_CONTEXT GLcontext context=(GLcontext)GET_INSTANCE(self) #define TB_FLT_0 context->tabor_floats[0] #define TB_FLT_1 context->tabor_floats[1] #define TB_FLT_2 context->tabor_floats[2] #define TB_FLT_3 context->tabor_floats[3] #define TB_FLT_4 context->tabor_floats[4] #define TB_DBL_0 context->tabor_doubles[0] #define TB_DBL_1 context->tabor_doubles[1] #define TB_DBL_2 context->tabor_doubles[2] #define TB_DBL_3 context->tabor_doubles[3] #define TB_DBL_4 context->tabor_doubles[4] #define TB_DBL_5 context->tabor_doubles[5] #define TB_DBL_6 context->tabor_doubles[6] #define TB_DBL_7 context->tabor_doubles[7] #define TB_DBL_8 context->tabor_doubles[8] #endif #else #define TABORIZE(f) f #endif #define TABOR_TEST_ERROR_IF_SPE float TestSPE(float x){float y; __asm volatile ("frsqrte %0,%1" : "=f" (y) : "f" (x)); return y;} #endif