summaryrefslogtreecommitdiffstats
path: root/src/gallium/auxiliary/gallivm/lp_bld_arit.c
diff options
context:
space:
mode:
authorJose Fonseca <jfonseca@vmware.com>2016-04-03 22:52:53 +0100
committerJose Fonseca <jfonseca@vmware.com>2016-04-04 00:06:09 +0100
commit7ad49daca61a638f5029fedacd98357943c67ea8 (patch)
tree708db1f0e1874cfce8928ad668f99a4c7a09139c /src/gallium/auxiliary/gallivm/lp_bld_arit.c
parent7af12a8dc6c96b8b0da802b3b25fbd6a197b2d62 (diff)
downloadexternal_mesa3d-7ad49daca61a638f5029fedacd98357943c67ea8.zip
external_mesa3d-7ad49daca61a638f5029fedacd98357943c67ea8.tar.gz
external_mesa3d-7ad49daca61a638f5029fedacd98357943c67ea8.tar.bz2
gallivm: Introduce lp_format_intrinsic.
For adding .v4f32 like suffixes to intrinsics, taking special care for scalar case, which was being often neglected. This fixes invalid IR when doing mipmap filtering on SSE2 (the only case where we'd use intrinsics with scalars.) Reviewed-by: Roland Scheidegger <sroland@vmware.com>
Diffstat (limited to 'src/gallium/auxiliary/gallivm/lp_bld_arit.c')
-rw-r--r--src/gallium/auxiliary/gallivm/lp_bld_arit.c19
1 files changed, 5 insertions, 14 deletions
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_arit.c b/src/gallium/auxiliary/gallivm/lp_bld_arit.c
index 587c83a..0c43617 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_arit.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_arit.c
@@ -1493,7 +1493,7 @@ lp_build_abs(struct lp_build_context *bld,
if(type.floating) {
char intrinsic[32];
- util_snprintf(intrinsic, sizeof intrinsic, "llvm.fabs.v%uf%u", type.length, type.width);
+ lp_format_intrinsic(intrinsic, sizeof intrinsic, "llvm.fabs", vec_type);
return lp_build_intrinsic_unary(builder, intrinsic, vec_type, a);
}
@@ -1880,9 +1880,7 @@ lp_build_round_arch(struct lp_build_context *bld,
break;
}
- util_snprintf(intrinsic, sizeof intrinsic, "%s.v%uf%u",
- intrinsic_root, type.length, type.width);
-
+ lp_format_intrinsic(intrinsic, sizeof intrinsic, intrinsic_root, bld->vec_type);
return lp_build_intrinsic_unary(builder, intrinsic, bld->vec_type, a);
}
else /* (util_cpu_caps.has_altivec) */
@@ -2026,7 +2024,7 @@ lp_build_floor(struct lp_build_context *bld,
if (type.width != 32) {
char intrinsic[32];
- util_snprintf(intrinsic, sizeof intrinsic, "llvm.floor.v%uf%u", type.length, type.width);
+ lp_format_intrinsic(intrinsic, sizeof intrinsic, "llvm.floor", vec_type);
return lp_build_intrinsic_unary(builder, intrinsic, vec_type, a);
}
@@ -2101,7 +2099,7 @@ lp_build_ceil(struct lp_build_context *bld,
if (type.width != 32) {
char intrinsic[32];
- util_snprintf(intrinsic, sizeof intrinsic, "llvm.ceil.v%uf%u", type.length, type.width);
+ lp_format_intrinsic(intrinsic, sizeof intrinsic, "llvm.ceil", vec_type);
return lp_build_intrinsic_unary(builder, intrinsic, vec_type, a);
}
@@ -2438,15 +2436,8 @@ lp_build_sqrt(struct lp_build_context *bld,
assert(lp_check_value(type, a));
- /* TODO: optimize the constant case */
-
assert(type.floating);
- if (type.length == 1) {
- util_snprintf(intrinsic, sizeof intrinsic, "llvm.sqrt.f%u", type.width);
- }
- else {
- util_snprintf(intrinsic, sizeof intrinsic, "llvm.sqrt.v%uf%u", type.length, type.width);
- }
+ lp_format_intrinsic(intrinsic, sizeof intrinsic, "llvm.sqrt", vec_type);
return lp_build_intrinsic_unary(builder, intrinsic, vec_type, a);
}