On 3/4/19 1:52 PM, Bastian Koppelmann wrote:

On 3/4/19 12:02 PM, Peter Maydell wrote:
On Fri, 1 Mar 2019 at 21:49, Palmer Dabbelt <pal...@sifive.com> wrote:
merged tag 'i2c-for-release-20190228'
Primary key fingerprint: FD0D 5CE6 7CE0 F59A 6688  2686 61F3 8C90 919B FF81 The following changes since commit 20b084c4b1401b7f8fbc385649d48c67b6f43d44:

   Merge remote-tracking branch 'remotes/cminyard/tags/i2c-for-release-20190228' into staging (2019-03-01 11:20:49 +0000)

are available in the Git repository at:

   git://github.com/palmer-dabbelt/qemu.git tags/riscv-for-master-4.0-sf2

for you to fetch changes up to 0bcba29464ea9969fc69cd729e4c8bddfb2e18e3:

   target/riscv: Remaining rvc insn reuse 32 bit translators (2019-03-01 13:16:18 -0800)

----------------------------------------------------------------
target/riscv: Convert to decodetree

Bastian: this patchset converts the RISC-V decoder to decodetree in four major steps:

1) Convert 32-bit instructions to decodetree [Patch 1-15]:
     Many of the gen_* functions are called by the decode functions for 16-bit
     and 32-bit functions. If we move translation code from the gen_*
     functions to the generated trans_* functions of decode-tree, we get a lot of      duplication. Therefore, we mostly generate calls to the old gen_* function
     which are properly replaced after step 2).

     Each of the trans_ functions are grouped into files corresponding to their      ISA extension, e.g. addi which is in RV32I is translated in the file
     'trans_rvi.inc.c'.

2) Convert 16-bit instructions to decodetree [Patch 16-18]:
     All 16 bit instructions have a direct mapping to a 32 bit instruction. Thus,      we convert the arguments in the 16 bit trans_ function to the arguments of      the corresponding 32 bit instruction and call the 32 bit trans_ function.

3) Remove old manual decoding in gen_* function [Patch 19-29]:
     this move all manual translation code into the trans_* instructions of
     decode tree, such that we can remove the old decode_* functions.

4) Simplify RVC by reusing as much as possible from the RVG decoder as suggested
    by Richard. [Patch 30-34]

Palmer: This passed Alistar's testing on rv32 and rv64 as well as my
testing on rv64, so I think it's good to go.  Thanks for the cleanup!

Hi; I'm afraid this has compile errors on the OSX build:


In file included from
/Users/pm215/src/qemu-for-merges/target/riscv/translate.c:377:
target/riscv/decode_insn16.inc.c:37:15: error: redefinition of typedef
'arg_fld' is a C11 feature [-Werror,-Wtypedef-redefinition]
typedef arg_i arg_fld;
               ^
target/riscv/decode_insn32.inc.c:293:15: note: previous definition is here
typedef arg_i arg_fld;


This looks like an unforeseen decodetree problem (CC' Richard). As these 16/32 instructions share the same trans_* function, we emit the same typedef once for 16 bit and once for 32 bit. I don't see an easy fix in decodetree other than annotating one of the instructions with something like !shared , since both insn are parsed in two runs of decodetree and later included together into one file. I'll try to prepare a patch.

This is something we can figure out after this PR. @Palmer I think you can drop patches 30-34 for now as these are the offenders and the rest of the PR is fine.

Cheers,

Bastian


Reply via email to