Ho una libreria matematica multipiattaforma su cui sto lavorando e voglio assicurarmi che alcune operazioni comuni vengano eseguite in modo ottimizzato, quindi desidero utilizzare alcune funzioni intrinseche racchiuse in funzioni inline per calcolare cose come sqrt (float / double). Devo dire che a questo punto ho intenzione di indirizzare solo alcune piattaforme selezionate che sono menzionate nella fonte qui sotto.
Ho avviato un singolo prototipo della funzione sqrt () ma prima di procedere ulteriormente desidero sapere se sto facendo qualcosa di assolutamente sbagliato.
Sto seguendo la documentazione a:
link
link
Inoltre, noterai che ho una riga vuota sotto la libbra definita per macintosh. So che le versioni più recenti stanno usando clang / llvm. Come si ottiene l'accesso alle funzioni intrinseche nelle versioni più recenti di mac os e dei relativi compilatori?
#ifndef INTRINSICS_H_INCLUDED
#define INTRINSICS_H_INCLUDED
#if defined(_WIN32)
#elif defined(__gnu_linux__) || defined(__linux__)
#elif defined(__ANDROID__)
#elif defined(__CYGWIN__)
#elif defined(macintosh)
#else
#include <cmath>
#endif
#if defined(_WIN32)
#pragma function( sqrt )
#endif
template<typename T>
inline float sqrt(T &val)
{
#if defined(_WIN32)
return sqrt(val);
#elif defined(__gnu_linux__) || defined(__linux__)
return __builtin_sqrt(val);
#elif defined(__ANDROID__)
return __builtin_sqrt(val);
#elif defined(__CYGWIN__)
return __builtin_sqrt(val);
#elif defined(macintosh)
// How do I do this
#else
return std::sqrt(val);
#endif
}
#if defined(_WIN32)
#pragma function( sqrt )
#endif
#endif