llvmpipe: Debug function to check stack alignment.
Doing alignment check in locus is redundant, as gcc alignment assumptions will optimize away the check.
This commit is contained in:
@@ -30,10 +30,27 @@
|
||||
#include <udis86.h>
|
||||
#endif
|
||||
|
||||
#include "util/u_math.h"
|
||||
#include "util/u_debug.h"
|
||||
#include "lp_bld_debug.h"
|
||||
|
||||
|
||||
/**
|
||||
* Check alignment.
|
||||
*
|
||||
* It is important that this check is not implemented as a macro or inlined
|
||||
* function, as the compiler assumptions in respect to alignment of global
|
||||
* and stack variables would often make the check a no op, defeating the
|
||||
* whole purpose of the exercise.
|
||||
*/
|
||||
boolean
|
||||
lp_check_alignment(const void *ptr, unsigned alignment)
|
||||
{
|
||||
assert(util_is_pot(alignment));
|
||||
return ((uintptr_t)ptr & (alignment - 1)) == 0;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
lp_disassemble(const void* func)
|
||||
{
|
||||
|
@@ -53,6 +53,10 @@ lp_build_name(LLVMValueRef val, const char *format, ...)
|
||||
}
|
||||
|
||||
|
||||
boolean
|
||||
lp_check_alignment(const void *ptr, unsigned alignment);
|
||||
|
||||
|
||||
void
|
||||
lp_disassemble(const void* func);
|
||||
|
||||
|
@@ -44,6 +44,7 @@
|
||||
#include "pipe/p_thread.h"
|
||||
#include "util/u_math.h"
|
||||
#include "util/u_memory.h"
|
||||
#include "lp_bld_debug.h"
|
||||
#include "lp_tile_cache.h"
|
||||
#include "lp_tile_soa.h"
|
||||
|
||||
@@ -164,10 +165,12 @@ shade_quads(struct llvmpipe_context *llvmpipe,
|
||||
|
||||
/* TODO: blend color */
|
||||
|
||||
assert((((uintptr_t)mask) & 0xf) == 0);
|
||||
assert((((uintptr_t)depth) & 0xf) == 0);
|
||||
assert((((uintptr_t)color) & 0xf) == 0);
|
||||
assert((((uintptr_t)llvmpipe->jit_context.blend_color) & 0xf) == 0);
|
||||
/* XXX: This will most likely fail on 32bit x86 without -mstackrealign */
|
||||
assert(lp_check_alignment(mask, 16));
|
||||
|
||||
assert(lp_check_alignment(depth, 16));
|
||||
assert(lp_check_alignment(color, 16));
|
||||
assert(lp_check_alignment(llvmpipe->jit_context.blend_color, 16));
|
||||
|
||||
/* run shader */
|
||||
fs->current->jit_function( &llvmpipe->jit_context,
|
||||
|
Reference in New Issue
Block a user