summaryrefslogtreecommitdiffstats
path: root/src/mesa/main/sse_minmax.c
diff options
context:
space:
mode:
authorJosé Fonseca <jfonseca@vmware.com>2014-12-02 20:20:43 +0000
committerJosé Fonseca <jfonseca@vmware.com>2014-12-05 15:17:37 +0000
commita1fc6a91e5c6ab098fa8576e63b3a070852aa2a7 (patch)
tree5811917989af69511591d995515145317135356b /src/mesa/main/sse_minmax.c
parentf9098f09720d9b751e8529b2648971ee7d576b37 (diff)
downloadexternal_mesa3d-a1fc6a91e5c6ab098fa8576e63b3a070852aa2a7.zip
external_mesa3d-a1fc6a91e5c6ab098fa8576e63b3a070852aa2a7.tar.gz
external_mesa3d-a1fc6a91e5c6ab098fa8576e63b3a070852aa2a7.tar.bz2
mesa: Ensure stack is realigned on x86.
Nowadays GCC assumes stack pointer is 16-byte aligned even on 32-bits, but that is an assumption OpenGL drivers (or any dynamic library for that matter) can't afford to make as there are many closed- and open- source application binaries out there that only assume 4-byte stack alignment. This fix uses force_align_arg_pointer GCC attribute, and is only a stop-gap measure. The right fix would be to pass -mstackrealign or -mincoming-stack-boundary=2 to all source fails that use any -msse* option, as there is no way to guarantee if/when GCC will decide to spill SSE registers to the stack. https://bugs.freedesktop.org/show_bug.cgi?id=86788 Reviewed-by: Brian Paul <brianp@vmware.com>
Diffstat (limited to 'src/mesa/main/sse_minmax.c')
-rw-r--r--src/mesa/main/sse_minmax.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/mesa/main/sse_minmax.c b/src/mesa/main/sse_minmax.c
index 222ac14..93cf2a6 100644
--- a/src/mesa/main/sse_minmax.c
+++ b/src/mesa/main/sse_minmax.c
@@ -31,6 +31,9 @@
#include <stdint.h>
void
+#if !defined(__x86_64__)
+ __attribute__((force_align_arg_pointer))
+#endif
_mesa_uint_array_min_max(const unsigned *ui_indices, unsigned *min_index,
unsigned *max_index, const unsigned count)
{