gallivm: handle scalar floats in lp_build_floor() and lp_build_iround()

This commit is contained in:
Brian Paul
2010-03-10 18:07:13 -07:00
parent 22bb7ffd04
commit a599f552f2
@@ -883,6 +883,10 @@ lp_build_floor(struct lp_build_context *bld,
assert(type.floating);
if (type.length == 1) {
return LLVMBuildFPTrunc(bld->builder, a, LLVMFloatType(), "");
}
if(util_cpu_caps.has_sse4_1)
return lp_build_round_sse41(bld, a, LP_BUILD_ROUND_SSE41_FLOOR);
else {
@@ -953,6 +957,9 @@ lp_build_itrunc(struct lp_build_context *bld,
}
/**
* Convert float[] to int[] with round().
*/
LLVMValueRef
lp_build_iround(struct lp_build_context *bld,
LLVMValueRef a)
@@ -1013,6 +1020,14 @@ lp_build_ifloor(struct lp_build_context *bld,
LLVMValueRef res;
assert(type.floating);
if (type.length == 1) {
/* scalar float to int */
LLVMTypeRef int_type = LLVMIntType(type.width);
res = LLVMBuildFPToSI(bld->builder, a, int_type, "");
return res;
}
assert(lp_check_value(type, a));
if(util_cpu_caps.has_sse4_1) {