On 10/15/20 8:21 AM, Alexey Baturo wrote:
> Signed-off-by: Alexey Baturo <space.monkey.delivers@gmail.com>
> ---
> target/riscv/insn_trans/trans_rva.c.inc | 3 +++
> target/riscv/insn_trans/trans_rvd.c.inc | 2 ++
> target/riscv/insn_trans/trans_rvf.c.inc | 2 ++
> target/riscv/insn_trans/trans_rvi.c.inc | 2 ++
> target/riscv/translate.c | 14 ++++++++++++++
> 5 files changed, 23 insertions(+)
Looks ok.
It does occur to me to wonder how this is intended to work with unaligned
addresses, or large memory operations such as with RVV.
Without changes in the generic tcg code, an unaligned memory op that crosses
the mask will not wrap the second half. E.g.
upmbase = 0
upmmask = 0xffff
address = 0xfffe
size = 8
will read [0x10005 : 0xfffe] and not
[0x0005 : 0x0000] | [0xffff : 0xfffe] as a true wrapping would lead you do believe.
r~