diff options
author | Richard Henderson <richard.henderson@linaro.org> | 2018-06-15 14:57:15 +0100 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2018-06-15 15:23:34 +0100 |
commit | 9ee3a611de28b8d0862fa687215b04b5aad20747 (patch) | |
tree | e3fa78bf6a97c9dc1344e500ca743bff076da749 /target/arm/sve_helper.c | |
parent | 35da316f5e847292ffbe7b6d16cd3988043dfe22 (diff) | |
download | qemu-9ee3a611de28b8d0862fa687215b04b5aad20747.zip qemu-9ee3a611de28b8d0862fa687215b04b5aad20747.tar.gz qemu-9ee3a611de28b8d0862fa687215b04b5aad20747.tar.bz2 |
target/arm: Implement SVE Predicate Count Group
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20180613015641.5667-15-richard.henderson@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'target/arm/sve_helper.c')
-rw-r--r-- | target/arm/sve_helper.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/target/arm/sve_helper.c b/target/arm/sve_helper.c index b27b502..a4ecd65 100644 --- a/target/arm/sve_helper.c +++ b/target/arm/sve_helper.c @@ -2724,3 +2724,17 @@ uint32_t HELPER(sve_brkns)(void *vd, void *vn, void *vg, uint32_t pred_desc) return do_zero(vd, oprsz); } } + +uint64_t HELPER(sve_cntp)(void *vn, void *vg, uint32_t pred_desc) +{ + intptr_t oprsz = extract32(pred_desc, 0, SIMD_OPRSZ_BITS) + 2; + intptr_t esz = extract32(pred_desc, SIMD_DATA_SHIFT, 2); + uint64_t *n = vn, *g = vg, sum = 0, mask = pred_esz_masks[esz]; + intptr_t i; + + for (i = 0; i < DIV_ROUND_UP(oprsz, 8); ++i) { + uint64_t t = n[i] & g[i] & mask; + sum += ctpop64(t); + } + return sum; +} |