|
|
@@ -92,9 +92,23 @@ lp_build_compare(LLVMBuilderRef builder, |
|
|
|
if(func == PIPE_FUNC_ALWAYS) |
|
|
|
return ones; |
|
|
|
|
|
|
|
/* TODO: optimize the constant case */ |
|
|
|
#if defined(PIPE_ARCH_X86) || defined(PIPE_ARCH_X86_64) |
|
|
|
/* |
|
|
|
* There are no unsigned integer comparison instructions in SSE. |
|
|
|
*/ |
|
|
|
|
|
|
|
/* XXX: It is not clear if we should use the ordered or unordered operators */ |
|
|
|
if (!type.floating && !type.sign && |
|
|
|
type.width * type.length == 128 && |
|
|
|
util_cpu_caps.has_sse2 && |
|
|
|
(func == PIPE_FUNC_LESS || |
|
|
|
func == PIPE_FUNC_LEQUAL || |
|
|
|
func == PIPE_FUNC_GREATER || |
|
|
|
func == PIPE_FUNC_GEQUAL) && |
|
|
|
(gallivm_debug & GALLIVM_DEBUG_PERF)) { |
|
|
|
debug_printf("%s: inefficient <%u x i%u> unsigned comparison\n", |
|
|
|
__FUNCTION__, type.length, type.width); |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
#if HAVE_LLVM < 0x0207 |
|
|
|
#if defined(PIPE_ARCH_X86) || defined(PIPE_ARCH_X86_64) |
|
|
@@ -225,6 +239,8 @@ lp_build_compare(LLVMBuilderRef builder, |
|
|
|
#endif |
|
|
|
#endif /* HAVE_LLVM < 0x0207 */ |
|
|
|
|
|
|
|
/* XXX: It is not clear if we should use the ordered or unordered operators */ |
|
|
|
|
|
|
|
if(type.floating) { |
|
|
|
LLVMRealPredicate op; |
|
|
|
switch(func) { |