/* * Copyright (c) 2019, Alliance for Open Media. All rights reserved. * * This source code is subject to the terms of the BSD 2 Clause License and * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License * was not distributed with this source code in the LICENSE file, you can * obtain it at www.aomedia.org/license/software. If the Alliance for Open * Media Patent License 1.0 was not distributed with this source code in the * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
*/
// By operating on unsigned integers we can store up to 4 squared diff in a // 32-bit element before having to widen to 64 bits.
uint32x4_t err = vmull_u16(vget_low_u16(diff0), vget_low_u16(diff0));
err = vmlal_u16(err, vget_high_u16(diff0), vget_high_u16(diff0));
err = vmlal_u16(err, vget_low_u16(diff1), vget_low_u16(diff1));
err = vmlal_u16(err, vget_high_u16(diff1), vget_high_u16(diff1));
err_u64 = vpadalq_u32(err_u64, err);
// We can't do the same here as we're operating on signed integers, so we // can only accumulate 2 squares.
int32x4_t ssz0 = vmull_s16(vget_low_s16(c0), vget_low_s16(c0));
ssz0 = vmlal_s16(ssz0, vget_high_s16(c0), vget_high_s16(c0));
ssz_s64 = vpadalq_s32(ssz_s64, ssz0);
// By operating on unsigned integers we can store up to 4 squared diff in a // 32-bit element before having to widen to 64 bits.
uint32x4_t err = vmull_u16(vget_low_u16(diff0), vget_low_u16(diff0));
err = vmlal_u16(err, vget_high_u16(diff0), vget_high_u16(diff0));
err = vmlal_u16(err, vget_low_u16(diff1), vget_low_u16(diff1));
err = vmlal_u16(err, vget_high_u16(diff1), vget_high_u16(diff1));
err_u64 = vpadalq_u32(err_u64, err);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.