summaryrefslogtreecommitdiff
path: root/indra/llmath/llv4math.h
diff options
context:
space:
mode:
authorJames Cook <james@lindenlab.com>2007-07-02 23:52:40 +0000
committerJames Cook <james@lindenlab.com>2007-07-02 23:52:40 +0000
commit1a33bc19b4ce94ab210749911dff14409b4454dd (patch)
treeb674d97d37240a29c0a6671adfe950a506ef0ea4 /indra/llmath/llv4math.h
parente5124431b54d4342d4677371fccca5bc7250c079 (diff)
svn merge -r 62595:62596 and 62598:63308 sse-skinning-3 for faster software avatar rendering. Visual Studio 2005 project file fixed pending.
Diffstat (limited to 'indra/llmath/llv4math.h')
-rw-r--r--indra/llmath/llv4math.h101
1 files changed, 101 insertions, 0 deletions
diff --git a/indra/llmath/llv4math.h b/indra/llmath/llv4math.h
new file mode 100644
index 0000000000..4a299716b1
--- /dev/null
+++ b/indra/llmath/llv4math.h
@@ -0,0 +1,101 @@
+/**
+ * @file llviewerjointmesh.cpp
+ * @brief LLV4* class header file - vector processor enabled math
+ *
+ * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc.
+ * $License$
+ */
+
+#ifndef LL_LLV4MATH_H
+#define LL_LLV4MATH_H
+
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+// LLV4MATH - GNUC
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+
+#if LL_GNUC && __GNUC__ >= 4 && __SSE__
+
+#define LL_VECTORIZE 1
+
+#if LL_DARWIN
+
+#include <Accelerate/Accelerate.h>
+#include <xmmintrin.h>
+typedef vFloat V4F32;
+
+#else
+
+#include <xmmintrin.h>
+typedef float V4F32 __attribute__((vector_size(16)));
+
+#endif
+
+#endif
+#if LL_GNUC
+
+#define LL_LLV4MATH_ALIGN_PREFIX
+#define LL_LLV4MATH_ALIGN_POSTFIX __attribute__((aligned(16)))
+
+#endif
+
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+// LLV4MATH - MSVC
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+
+#if LL_MSVC && _M_IX86_FP
+
+#define LL_VECTORIZE 1
+
+#include <xmmintrin.h>
+
+typedef __m128 V4F32;
+
+#endif
+#if LL_MSVC
+
+#define LL_LLV4MATH_ALIGN_PREFIX __declspec(align(16))
+#define LL_LLV4MATH_ALIGN_POSTFIX
+
+#endif
+
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+// LLV4MATH - default - no vectorization
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+
+#if !LL_VECTORIZE
+
+#define LL_VECTORIZE 0
+
+struct V4F32 { F32 __pad__[4]; };
+
+inline F32 llv4lerp(F32 a, F32 b, F32 w) { return ( b - a ) * w + a; }
+
+#endif
+
+#ifndef LL_LLV4MATH_ALIGN_PREFIX
+# define LL_LLV4MATH_ALIGN_PREFIX
+#endif
+#ifndef LL_LLV4MATH_ALIGN_POSTFIX
+# define LL_LLV4MATH_ALIGN_POSTFIX
+#endif
+
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+// LLV4MATH
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+
+
+#define LLV4_NUM_AXIS 4
+
+class LLV4Vector3;
+class LLV4Matrix3;
+class LLV4Matrix4;
+
+#endif