rbdlsim/3rdparty/vectorial/include/vectorial/config.h

102 lines
2.1 KiB
C

/*
Vectorial
Copyright (c) 2010 Mikko Lehtonen
Licensed under the terms of the two-clause BSD License (see LICENSE)
*/
#ifndef VECTORIAL_CONFIG_H
#define VECTORIAL_CONFIG_H
#ifndef VECTORIAL_FORCED
#if defined(__SSE__) || (_M_IX86_FP > 0) || (_M_X64 > 0)
#define VECTORIAL_SSE
// __ARM_NEON is used instead of __ARM_NEON__ on armv8.
#elif defined(__ARM_NEON__) || defined(__ARM_NEON)
#define VECTORIAL_NEON
// Don't use gnu extension for arm, buggy with some gccs with armv6 and -Os,
// Also doesn't seem perform as well
#elif defined(__GNUC__) && !defined(__arm__)
#define VECTORIAL_GNU
#else
#define VECTORIAL_SCALAR
#endif
#endif
#ifdef VECTORIAL_SCALAR
#define VECTORIAL_SIMD_TYPE "scalar"
#endif
#ifdef VECTORIAL_SSE
#define VECTORIAL_SIMD_TYPE "sse"
#endif
#ifdef VECTORIAL_NEON
#define VECTORIAL_SIMD_TYPE "neon"
#define VECTORIAL_HAVE_SIMD2F
#endif
#ifdef VECTORIAL_GNU
#define VECTORIAL_SIMD_TYPE "gnu"
#endif
#if defined(VECTORIAL_FORCED) && !defined(VECTORIAL_SIMD_TYPE)
#error VECTORIAL_FORCED set but no simd-type found, try f.ex. VECTORIAL_SCALAR
#endif
#define vectorial_inline static inline
#if defined(__GNUC__)
#if defined(__cplusplus)
#define vectorial_restrict __restrict
#endif
#define simd4f_aligned16 __attribute__ ((aligned (16)))
#elif defined(_WIN32)
#define vectorial_restrict
#define simd4f_aligned16 __declspec(align(16))
#else
#define vectorial_restrict restrict
#define simd4f_aligned16
#endif
// #define vectorial_restrict
#ifdef __GNUC__
#define vectorial_pure __attribute__((pure))
#else
#define vectorial_pure
#endif
#ifdef _WIN32
#if defined(min) || defined(max)
#pragma message ( "set NOMINMAX as preprocessor macro, undefining min/max " )
#undef min
#undef max
#endif
#endif
#ifdef __cplusplus
// Hack around msvc badness
#define SIMD_PARAM(t, p) const t& p
#else
#define SIMD_PARAM(t, p) t p
#endif
#define VECTORIAL_PI 3.14159265f
#define VECTORIAL_HALFPI 1.57079633f
#endif