gallivm: Add a lp_build_const_elem().
This commit is contained in:
parent
21a6bf8624
commit
952d188c3c
|
@ -279,6 +279,29 @@ lp_build_one(struct lp_type type)
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Build constant-valued element from a scalar value.
|
||||
*/
|
||||
LLVMValueRef
|
||||
lp_build_const_elem(struct lp_type type,
|
||||
double val)
|
||||
{
|
||||
LLVMTypeRef elem_type = lp_build_elem_type(type);
|
||||
LLVMValueRef elem;
|
||||
|
||||
if(type.floating) {
|
||||
elem = LLVMConstReal(elem_type, val);
|
||||
}
|
||||
else {
|
||||
double dscale = lp_const_scale(type);
|
||||
|
||||
elem = LLVMConstInt(elem_type, val*dscale + 0.5, 0);
|
||||
}
|
||||
|
||||
return elem;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Build constant-valued vector from a scalar value.
|
||||
*/
|
||||
|
@ -286,28 +309,16 @@ LLVMValueRef
|
|||
lp_build_const_vec(struct lp_type type,
|
||||
double val)
|
||||
{
|
||||
LLVMTypeRef elem_type = lp_build_elem_type(type);
|
||||
LLVMValueRef elems[LP_MAX_VECTOR_LENGTH];
|
||||
unsigned i;
|
||||
|
||||
assert(type.length <= LP_MAX_VECTOR_LENGTH);
|
||||
|
||||
if(type.floating) {
|
||||
elems[0] = LLVMConstReal(elem_type, val);
|
||||
if (type.length == 1) {
|
||||
return lp_build_const_elem(type, val);
|
||||
} else {
|
||||
LLVMValueRef elems[LP_MAX_VECTOR_LENGTH];
|
||||
unsigned i;
|
||||
elems[0] = lp_build_const_elem(type, val);
|
||||
for(i = 1; i < type.length; ++i)
|
||||
elems[i] = elems[0];
|
||||
return LLVMConstVector(elems, type.length);
|
||||
}
|
||||
else {
|
||||
double dscale = lp_const_scale(type);
|
||||
|
||||
elems[0] = LLVMConstInt(elem_type, val*dscale + 0.5, 0);
|
||||
}
|
||||
|
||||
if (type.length == 1)
|
||||
return elems[0];
|
||||
|
||||
for(i = 1; i < type.length; ++i)
|
||||
elems[i] = elems[0];
|
||||
|
||||
return LLVMConstVector(elems, type.length);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -84,6 +84,10 @@ LLVMValueRef
|
|||
lp_build_one(struct lp_type type);
|
||||
|
||||
|
||||
LLVMValueRef
|
||||
lp_build_const_elem(struct lp_type type,
|
||||
double val);
|
||||
|
||||
LLVMValueRef
|
||||
lp_build_const_vec(struct lp_type type, double val);
|
||||
|
||||
|
|
Loading…
Reference in New Issue