llvmpipe: Fix one const generation for some signed integers.
authorJosé Fonseca <jfonseca@vmware.com>
Sat, 8 Aug 2009 21:56:22 +0000 (22:56 +0100)
committerJosé Fonseca <jfonseca@vmware.com>
Sat, 29 Aug 2009 08:21:26 +0000 (09:21 +0100)
src/gallium/drivers/llvmpipe/lp_bld_const.c

index 2109a85ceb86a9906f5d5991fe435b42dac246db..20f0d3c40bb3780e98e8f2d71d9c19ecee2c914e 100644 (file)
@@ -125,14 +125,20 @@ lp_build_one(union lp_type type)
       elems[0] = LLVMConstInt(elem_type, 1LL << (type.width/2), 0);
    else if(!type.norm)
       elems[0] = LLVMConstInt(elem_type, 1, 0);
+   else if(type.sign)
+      elems[0] = LLVMConstInt(elem_type, (1LL << (type.width - 1)) - 1, 0);
    else {
       /* special case' -- 1.0 for normalized types is more easily attained if
        * we start with a vector consisting of all bits set */
       LLVMTypeRef vec_type = LLVMVectorType(elem_type, type.length);
       LLVMValueRef vec = LLVMConstAllOnes(vec_type);
 
+#if 0
       if(type.sign)
-         vec = LLVMConstLShr(vec, LLVMConstInt(LLVMInt32Type(), 1, 0));
+         /* TODO: Unfortunately this caused "Tried to create a shift operation
+          * on a non-integer type!" */
+         vec = LLVMConstLShr(vec, lp_build_int_const_uni(type, 1));
+#endif
 
       return vec;
    }