소스 검색

gallivm: Return true from arch_rounding_available() if NEON is available

LLVM uses the single instruction "FRINTI" to implement llvm.nearbyint.
Fixes the rounding tests of lp_test_arit.

Bug: https://bugs.gentoo.org/665570
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
tags/19.0-branchpoint
Matt Turner 6 년 전
부모
커밋
70a7ece035
2개의 변경된 파일5개의 추가작업 그리고 2개의 파일을 삭제
  1. 3
    1
      src/gallium/auxiliary/gallivm/lp_bld_arit.c
  2. 2
    1
      src/gallium/drivers/llvmpipe/lp_test_arit.c

+ 3
- 1
src/gallium/auxiliary/gallivm/lp_bld_arit.c 파일 보기

@@ -1992,6 +1992,8 @@ arch_rounding_available(const struct lp_type type)
else if ((util_cpu_caps.has_altivec &&
(type.width == 32 && type.length == 4)))
return TRUE;
else if (util_cpu_caps.has_neon)
return TRUE;

return FALSE;
}
@@ -2099,7 +2101,7 @@ lp_build_round_arch(struct lp_build_context *bld,
LLVMValueRef a,
enum lp_build_round_mode mode)
{
if (util_cpu_caps.has_sse4_1) {
if (util_cpu_caps.has_sse4_1 || util_cpu_caps.has_neon) {
LLVMBuilderRef builder = bld->gallivm->builder;
const struct lp_type type = bld->type;
const char *intrinsic_root;

+ 2
- 1
src/gallium/drivers/llvmpipe/lp_test_arit.c 파일 보기

@@ -458,7 +458,8 @@ test_unary(unsigned verbose, FILE *fp, const struct unary_test_t *test, unsigned
continue;
}

if (test->ref == &nearbyintf && length == 2 &&
if (!util_cpu_caps.has_neon &&
test->ref == &nearbyintf && length == 2 &&
ref != roundf(testval)) {
/* FIXME: The generic (non SSE) path in lp_build_iround, which is
* always taken for length==2 regardless of native round support,

Loading…
취소
저장