tree 86a3f0b4155f0afb84f53581c8102bfe62c0bf88
parent 15f9e4b5ca3175616c5f98b869835ea4b679178e
author Wan-Teh Chang <wtc@google.com> 1585496593 -0700
committer Yaowu Xu <yaowu@google.com> 1585578259 +0000

Change v256_ssd_s16_sum() to return uint64_t.

Fix the Visual Studio 2015 and 2017 compiler warning:
  aom_dsp\simd/v256_intrinsics.h(93,31): warning C4244: 'return':
  conversion from 'uint64_t' to 'uint32_t', possible loss of data

Evidences that v256_ssd_s16_sum() should return uint64_t:

1. The other two implementations of this function both return uint64_t.

  aom_dsp/simd/v256_intrinsics_v128.h:
  SIMD_INLINE uint64_t v256_ssd_s16_sum(ssd256_internal_s16 s) {
    return v128_ssd_s16_sum(s.val[1]) + v128_ssd_s16_sum(s.val[0]);
  }

  aom_dsp/simd/v256_intrinsics_x86.h:
  SIMD_INLINE uint64_t v256_ssd_s16_sum(ssd256_internal_s16 s) {
    v128 t = v128_add_64(v256_high_v128(s), v256_low_v128(s));
    return v64_u64(v128_low_v64(t)) + v64_u64(v128_high_v64(t));
  }

2. The unit test apparently expects this function to return uint64_t.

  test/simd_cmp_impl.h:
  uint64_t v256_ssd_s16(v256 a, v256 b) {
    return v256_ssd_s16_sum(::v256_ssd_s16(v256_ssd_s16_init(), a, b));
  }

Change-Id: I0d2dba93cbdd95bdd61c273036086979fc6e3a96
