aboutsummaryrefslogtreecommitdiffstats
path: root/Alc/backends
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2013-03-15 04:32:46 -0700
committerChris Robinson <[email protected]>2013-03-15 04:32:46 -0700
commiteb1080910e8319fcba580139a3a7a2f3c5e7761c (patch)
treec2d74bb0ae16cd42dab775bb028b0974d8be45ee /Alc/backends
parentd237410d1d40d65664381d5dbbe3a66e3291d1fa (diff)
Use force_align_arg_pointer for QSA
Diffstat (limited to 'Alc/backends')
-rw-r--r--Alc/backends/qsa.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/Alc/backends/qsa.c b/Alc/backends/qsa.c
index c659ce2f..933af5b4 100644
--- a/Alc/backends/qsa.c
+++ b/Alc/backends/qsa.c
@@ -175,6 +175,14 @@ static DevMap* deviceList(int type, ALuint* count)
return dev_list;
}
+/* force_align_arg_pointer is required for proper function arguments */
+/* aligning, when SSE mixer is used. QNX has a bug in pthread_create */
+/* function regarding thread stack alignment, it uses 64 bit align */
+/* instead of 128 bit, like main thread. */
+#if defined(__GNUC__) && (_NTO_VERSION <= 650) && \
+ defined(__i386__) && defined(HAVE_SSE)
+__attribute__((force_align_arg_pointer))
+#endif /* __GNUC__ && QNX version < 6.5.0 on x86 platform with SSE support */
static ALuint qsa_proc_playback(ALvoid* ptr)
{
ALCdevice* device=(ALCdevice*)ptr;