On Sat, Jul 11, 2020 at 5:53 AM Alistair Francis <alistai...@gmail.com>
wrote:

> On Fri, Jul 10, 2020 at 5:59 AM <frank.ch...@sifive.com> wrote:
> >
> > From: Frank Chang <frank.ch...@sifive.com>
> >
> > This patchset implements the vector extension v0.9 for RISC-V on QEMU.
> >
> > This patchset is sent as RFC because RVV v0.9 is still in draft state.
> > However, as RVV v1.0 should be ratified soon and there shouldn't be
> > critical changes between RVV v1.0 and RVV v0.9. We would like to have
> > the community to review RVV v0.9 implementations. Once RVV v1.0 is
> > ratified, we will then upgrade to RVV v1.0.
> >
> > You can change the cpu argument: vext_spec to v0.9 (i.e. vext_spec=v0.9)
> > to run with RVV v0.9 instructions.
>
> Hello,
>
> First off thanks for the patches!
>
> QEMU has a policy of accepting draft specs as experimental. We
> currently support the v0.7.1 Vector extension for example, so this
> does not need to be an RFC and can be a full patch series that can be
> merged into master.
>
> I have applied the first few patches (PR should be out next week) and
> they should be in the QEMU 5.1 release. QEMU is currently in a freeze
> so I won't be able to merge this series for 5.1. In saying that please
> feel free to continue to send patches to the list, they can still be
> reviewed.
>
> In general we would need to gracefully handle extension upgrades and
> maintain backwards compatibility. This same principle doesn't apply to
> experimental features though (such as the vector extension) so you are
> free to remove support for the v0.7.1. For users who want v0.7.1
> support they can always use the QEMU 5.1. release. Just make sure that
> your series does not break bisectability.
>
> Thanks again for the patches!
>
> Alistair
>

Hi Alistair,

Thanks for the review.

Currently I would prefer to drop 0.7.1 support because I don't know if
there's
a good way to keep both 0.7.1 and 0.9 opcodes. I'm afraid it would cause the
encoding overlap while compiling with decodetree.

Does decodetree support any feature for multi-version opcodes?
Or if it can use something like C macros to compile with the opcodes by the
vspec
user assigned? If there's any good way to keep both versions, then I can
try to rearrange
my codes to support both vspecs.

Otherwise, I'll keep on my current approach to drop the support of v0.7.1
as the way
Richard has mentioned:
*If you don't want to simultaneously support 0.7.1 and 0.9/1.0, then you
should*
*simply remove 0.7.1 in the first patch, so that there's no confusion.*

Any suggestion would be appreciated.

Thanks
--
Frank Chang


> >
> > Chih-Min Chao (2):
> >   fpu: fix float16 nan check
> >   fpu: add api to handle alternative sNaN propagation
> >
> > Frank Chang (58):
> >   target/riscv: fix rsub gvec tcg_assert_listed_vecop assertion
> >   target/riscv: correct the gvec IR called in gen_vec_rsub16_i64()
> >   target/riscv: fix return value of do_opivx_widen()
> >   target/riscv: fix vill bit index in vtype register
> >   target/riscv: remove vsll.vi, vsrl.vi, vsra.vi insns from using gvec
> >   target/riscv: rvv-0.9: remove MLEN calculations
> >   target/riscv: rvv-0.9: add fractional LMUL, VTA and VMA
> >   target/riscv: rvv-0.9: update check functions
> >   target/riscv: rvv-0.9: configure instructions
> >   target/riscv: rvv-0.9: stride load and store instructions
> >   target/riscv: rvv-0.9: index load and store instructions
> >   target/riscv: rvv-0.9: fix address index overflow bug of indexed
> >     load/store insns
> >   target/riscv: rvv-0.9: fault-only-first unit stride load
> >   target/riscv: rvv-0.9: amo operations
> >   target/riscv: rvv-0.9: load/store whole register instructions
> >   target/riscv: rvv-0.9: update vext_max_elems() for load/store insns
> >   target/riscv: rvv-0.9: take fractional LMUL into vector max elements
> >     calculation
> >   target/riscv: rvv-0.9: floating-point square-root instruction
> >   target/riscv: rvv-0.9: floating-point classify instructions
> >   target/riscv: rvv-0.9: mask population count instruction
> >   target/riscv: rvv-0.9: find-first-set mask bit instruction
> >   target/riscv: rvv-0.9: set-X-first mask bit instructions
> >   target/riscv: rvv-0.9: iota instruction
> >   target/riscv: rvv-0.9: element index instruction
> >   target/riscv: rvv-0.9: integer scalar move instructions
> >   target/riscv: rvv-0.9: floating-point scalar move instructions
> >   target/riscv: rvv-0.9: whole register move instructions
> >   target/riscv: rvv-0.9: integer extension instructions
> >   target/riscv: rvv-0.9: single-width averaging add and subtract
> >     instructions
> >   target/riscv: rvv-0.9: integer add-with-carry/subtract-with-borrow
> >   target/riscv: rvv-0.9: narrowing integer right shift instructions
> >   target/riscv: rvv-0.9: widening integer multiply-add instructions
> >   target/riscv: rvv-0.9: quad-widening integer multiply-add instructions
> >   target/riscv: rvv-0.9: integer merge and move instructions
> >   target/riscv: rvv-0.9: single-width saturating add and subtract
> >     instructions
> >   target/riscv: rvv-0.9: integer comparison instructions
> >   target/riscv: rvv-0.9: floating-point compare instructions
> >   target/riscv: rvv-0.9: single-width integer reduction instructions
> >   target/riscv: rvv-0.9: widening integer reduction instructions
> >   target/riscv: rvv-0.9: mask-register logical instructions
> >   target/riscv: rvv-0.9: register gather instructions
> >   target/riscv: rvv-0.9: slide instructions
> >   target/riscv: rvv-0.9: floating-point slide instructions
> >   target/riscv: rvv-0.9: narrowing fixed-point clip instructions
> >   target/riscv: rvv-0.9: floating-point move instructions
> >   target/riscv: rvv-0.9: floating-point/integer type-convert
> >     instructions
> >   target/riscv: rvv-0.9: single-width floating-point reduction
> >   target/riscv: rvv-0.9: widening floating-point reduction instructions
> >   target/riscv: rvv-0.9: single-width scaling shift instructions
> >   target/riscv: rvv-0.9: remove widening saturating scaled multiply-add
> >   target/riscv: rvv-0.9: remove vmford.vv and vmford.vf
> >   target/riscv: rvv-0.9: remove integer extract instruction
> >   target/riscv: rvv-0.9: floating-point min/max instructions
> >   target/riscv: rvv-0.9: widening floating-point/integer type-convert
> >   target/riscv: rvv-0.9: narrowing floating-point/integer type-convert
> >   softfloat: add fp16 and uint8/int8 interconvert functions
> >   target/riscv: use softfloat lib float16 comparison functions
> >   target/riscv: bump to RVV 0.9
> >
> > Kito Cheng (1):
> >   fpu: implement full set compare for fp16
> >
> > LIU Zhiwei (4):
> >   target/riscv: rvv-0.9: add vcsr register
> >   target/riscv: rvv-0.9: add vector context status
> >   target/riscv: rvv-0.9: update mstatus_vs by tb_flags
> >   target/riscv: rvv-0.9: add vlenb register
> >
> >  fpu/softfloat-specialize.inc.c          |    4 +-
> >  fpu/softfloat.c                         |  342 +++-
> >  include/fpu/softfloat.h                 |   22 +
> >  target/riscv/cpu.c                      |    9 +-
> >  target/riscv/cpu.h                      |   68 +-
> >  target/riscv/cpu_bits.h                 |    9 +
> >  target/riscv/cpu_helper.c               |   13 +
> >  target/riscv/csr.c                      |   53 +-
> >  target/riscv/helper.h                   |  507 +++--
> >  target/riscv/insn32-64.decode           |   18 +-
> >  target/riscv/insn32.decode              |  282 +--
> >  target/riscv/insn_trans/trans_rvv.inc.c | 2468 ++++++++++++++---------
> >  target/riscv/internals.h                |   18 +-
> >  target/riscv/translate.c                |   43 +-
> >  target/riscv/vector_helper.c            | 2349 +++++++++++----------
> >  15 files changed, 3833 insertions(+), 2372 deletions(-)
> >
> > --
> > 2.17.1
> >
> >
>

Reply via email to