pcm/Neon: explicit rounding
Convert to 31 bit first, then right-shift with rounding to 16 bit.
This commit is contained in:
parent
a68acf5c66
commit
74a05a7f53
|
@ -76,11 +76,13 @@ struct NeonFloatTo16 {
|
||||||
/* convert to 32 bit integer */
|
/* convert to 32 bit integer */
|
||||||
int32x4x4_t ivalue;
|
int32x4x4_t ivalue;
|
||||||
neon_x4_b(vcvtq_n_s32_f32, ivalue, value,
|
neon_x4_b(vcvtq_n_s32_f32, ivalue, value,
|
||||||
DstTraits::BITS - 1);
|
30);
|
||||||
|
|
||||||
/* convert to 16 bit integer with saturation */
|
/* convert to 16 bit integer with saturation
|
||||||
|
and rounding */
|
||||||
int16x4x4_t nvalue;
|
int16x4x4_t nvalue;
|
||||||
neon_x4_u(vqmovn_s32, nvalue, ivalue);
|
neon_x4_b(vqrshrn_n_s32, nvalue, ivalue,
|
||||||
|
30 - DstTraits::BITS + 1);
|
||||||
|
|
||||||
/* store result */
|
/* store result */
|
||||||
vst4_s16(dst, nvalue);
|
vst4_s16(dst, nvalue);
|
||||||
|
|
Loading…
Reference in New Issue