Exemple #1
0
void
lp_build_context_init(struct lp_build_context *bld,
                      struct gallivm_state *gallivm,
                      struct lp_type type)
{
   bld->gallivm = gallivm;
   bld->type = type;

   bld->int_elem_type = lp_build_int_elem_type(gallivm, type);
   if (type.floating)
      bld->elem_type = lp_build_elem_type(gallivm, type);
   else
      bld->elem_type = bld->int_elem_type;

   if (type.length == 1) {
      bld->int_vec_type = bld->int_elem_type;
      bld->vec_type = bld->elem_type;
   }
   else {
      bld->int_vec_type = LLVMVectorType(bld->int_elem_type, type.length);
      bld->vec_type = LLVMVectorType(bld->elem_type, type.length);
   }

   bld->undef = LLVMGetUndef(bld->vec_type);
   bld->zero = LLVMConstNull(bld->vec_type);
   bld->one = lp_build_one(gallivm, type);
}
Exemple #2
0
LLVMTypeRef
lp_build_int_vec_type(struct gallivm_state *gallivm, struct lp_type type)
{
   LLVMTypeRef elem_type = lp_build_int_elem_type(gallivm, type);
   if (type.length == 1)
      return elem_type;
   else
      return LLVMVectorType(elem_type, type.length);
}
Exemple #3
0
/**
 * Build int32[4] vector type
 */
LLVMTypeRef
lp_build_int32_vec4_type(struct gallivm_state *gallivm)
{
   struct lp_type t;
   LLVMTypeRef type;

   memset(&t, 0, sizeof(t));
   t.floating = FALSE; /* floating point values */
   t.sign = TRUE;      /* values are signed */
   t.norm = FALSE;     /* values are not limited to [0,1] or [-1,1] */
   t.width = 32;       /* 32-bit int */
   t.length = 4;       /* 4 elements per vector */

   type = lp_build_int_elem_type(gallivm, t);
   return LLVMVectorType(type, t.length);
}
LLVMValueRef
lp_build_const_int_vec(struct lp_type type,
                          long long val)
{
   LLVMTypeRef elem_type = lp_build_int_elem_type(type);
   LLVMValueRef elems[LP_MAX_VECTOR_LENGTH];
   unsigned i;

   assert(type.length <= LP_MAX_VECTOR_LENGTH);

   for(i = 0; i < type.length; ++i)
      elems[i] = LLVMConstInt(elem_type, val, type.sign ? 1 : 0);

   if (type.length == 1)
      return elems[0];

   return LLVMConstVector(elems, type.length);
}