102 lines
2.1 KiB
C
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
|