target/arm: Move do_urshr, do_srshr to vec_internal.h
Unify two copies of these inline functions. Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20250704142112.1018902-64-richard.henderson@linaro.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
a3a019c0ef
commit
9a7d445c09
3 changed files with 21 additions and 42 deletions
|
|
@ -2204,27 +2204,6 @@ DO_VSHLL_ALL(vshllt, true)
|
|||
DO_VSHRN(OP##tb, true, 1, uint8_t, 2, uint16_t, FN) \
|
||||
DO_VSHRN(OP##th, true, 2, uint16_t, 4, uint32_t, FN)
|
||||
|
||||
static inline uint64_t do_urshr(uint64_t x, unsigned sh)
|
||||
{
|
||||
if (likely(sh < 64)) {
|
||||
return (x >> sh) + ((x >> (sh - 1)) & 1);
|
||||
} else if (sh == 64) {
|
||||
return x >> 63;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static inline int64_t do_srshr(int64_t x, unsigned sh)
|
||||
{
|
||||
if (likely(sh < 64)) {
|
||||
return (x >> sh) + ((x >> (sh - 1)) & 1);
|
||||
} else {
|
||||
/* Rounding the sign bit always produces 0. */
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
DO_VSHRN_ALL(vshrn, DO_SHR)
|
||||
DO_VSHRN_ALL(vrshrn, do_urshr)
|
||||
|
||||
|
|
|
|||
|
|
@ -2050,27 +2050,6 @@ void HELPER(NAME)(void *vd, void *vn, void *vg, uint32_t desc) \
|
|||
when N is negative, add 2**M-1. */
|
||||
#define DO_ASRD(N, M) ((N + (N < 0 ? ((__typeof(N))1 << M) - 1 : 0)) >> M)
|
||||
|
||||
static inline uint64_t do_urshr(uint64_t x, unsigned sh)
|
||||
{
|
||||
if (likely(sh < 64)) {
|
||||
return (x >> sh) + ((x >> (sh - 1)) & 1);
|
||||
} else if (sh == 64) {
|
||||
return x >> 63;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static inline int64_t do_srshr(int64_t x, unsigned sh)
|
||||
{
|
||||
if (likely(sh < 64)) {
|
||||
return (x >> sh) + ((x >> (sh - 1)) & 1);
|
||||
} else {
|
||||
/* Rounding the sign bit always produces 0. */
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
DO_ZPZI(sve_asr_zpzi_b, int8_t, H1, DO_SHR)
|
||||
DO_ZPZI(sve_asr_zpzi_h, int16_t, H1_2, DO_SHR)
|
||||
DO_ZPZI(sve_asr_zpzi_s, int32_t, H1_4, DO_SHR)
|
||||
|
|
|
|||
|
|
@ -230,6 +230,27 @@ int64_t do_sqrdmlah_d(int64_t, int64_t, int64_t, bool, bool);
|
|||
#define do_usat_h(val) MIN(MAX(val, 0), UINT16_MAX)
|
||||
#define do_usat_s(val) MIN(MAX(val, 0), UINT32_MAX)
|
||||
|
||||
static inline uint64_t do_urshr(uint64_t x, unsigned sh)
|
||||
{
|
||||
if (likely(sh < 64)) {
|
||||
return (x >> sh) + ((x >> (sh - 1)) & 1);
|
||||
} else if (sh == 64) {
|
||||
return x >> 63;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static inline int64_t do_srshr(int64_t x, unsigned sh)
|
||||
{
|
||||
if (likely(sh < 64)) {
|
||||
return (x >> sh) + ((x >> (sh - 1)) & 1);
|
||||
} else {
|
||||
/* Rounding the sign bit always produces 0. */
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* bfdotadd:
|
||||
* @sum: addend
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue