0057-target-riscv-rvv-1.0-slide-instructions.patch 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. From 1e7c859fbc49a3fa4e2b9057b576abde7611ef0a Mon Sep 17 00:00:00 2001
  2. From: Frank Chang <frank.chang@sifive.com>
  3. Date: Mon, 17 Aug 2020 14:45:17 +0800
  4. Subject: [PATCH 057/107] target/riscv: rvv-1.0: slide instructions
  5. * Remove clear function from helper functions as the tail elements
  6. are unchanged in RVV 1.0.
  7. Signed-off-by: Frank Chang <frank.chang@sifive.com>
  8. Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
  9. ---
  10. target/riscv/vector_helper.c | 19 ++++++++++++-------
  11. 1 file changed, 12 insertions(+), 7 deletions(-)
  12. diff --git a/target/riscv/vector_helper.c b/target/riscv/vector_helper.c
  13. index 6af15eb8f2..745fb01aa1 100644
  14. --- a/target/riscv/vector_helper.c
  15. +++ b/target/riscv/vector_helper.c
  16. @@ -4639,17 +4639,22 @@ GEN_VEXT_VSLIDEUP_VX(vslideup_vx_d, uint64_t, H8)
  17. void HELPER(NAME)(void *vd, void *v0, target_ulong s1, void *vs2, \
  18. CPURISCVState *env, uint32_t desc) \
  19. { \
  20. - uint32_t vlmax = env_archcpu(env)->cfg.vlen; \
  21. + uint32_t vlmax = vext_max_elems(desc, ctzl(sizeof(ETYPE))); \
  22. uint32_t vm = vext_vm(desc); \
  23. uint32_t vl = env->vl; \
  24. - target_ulong offset = s1, i; \
  25. + target_ulong i_max, i; \
  26. \
  27. - for (i = 0; i < vl; ++i) { \
  28. - target_ulong j = i + offset; \
  29. - if (!vm && !vext_elem_mask(v0, i)) { \
  30. - continue; \
  31. + i_max = MIN(s1 < vlmax ? vlmax - s1 : 0, vl); \
  32. + for (i = 0; i < i_max; ++i) { \
  33. + if (vm || vext_elem_mask(v0, i)) { \
  34. + *((ETYPE *)vd + H(i)) = *((ETYPE *)vs2 + H(i + s1)); \
  35. + } \
  36. + } \
  37. + \
  38. + for (i = i_max; i < vl; ++i) { \
  39. + if (vm || vext_elem_mask(v0, i)) { \
  40. + *((ETYPE *)vd + H(i)) = 0; \
  41. } \
  42. - *((ETYPE *)vd + H(i)) = j >= vlmax ? 0 : *((ETYPE *)vs2 + H(j)); \
  43. } \
  44. }
  45. --
  46. 2.33.1