target/mips: Implement Loongson CSR instructions
authorJiaxun Yang <jiaxun.yang@flygoat.com>
Sun, 21 May 2023 18:01:46 +0000 (19:01 +0100)
committerPhilippe Mathieu-Daudé <philmd@linaro.org>
Mon, 10 Jul 2023 21:33:37 +0000 (23:33 +0200)
commit03afdc28b3ffb9315f9612052b2b1c250370c344
treeee249151653cd27e74de274c92e23b31d4e10adb
parentb263688d236bc07266ce393fdce8c9b6bfd9d8d8
target/mips: Implement Loongson CSR instructions

Loongson introduced CSR instructions since 3A4000, which looks
similar to IOCSR and CPUCFG instructions we seen in LoongArch.

Unfortunately we don't have much document about those instructions,
bit fields of CPUCFG instructions and IOCSR registers can be found
at 3A4000's user manual, while instruction encodings can be found
at arch/mips/include/asm/mach-loongson64/loongson_regs.h from
Linux Kernel.

Our predefined CPUCFG bits are differ from actual 3A4000, since
we can't emulate all CPUCFG features present in 3A4000 for now,
we just enable bits for what we have in TCG.

Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Message-Id: <20230521214832.20145-2-jiaxun.yang@flygoat.com>
[JY:  Fixed typo in ase_lcsr_available(),
      retrict GEN_FALSE_TRANS]
[PMD: Fix meson's mips_softmmu_ss -> mips_system_ss,
      restrict AddressSpace/MemoryRegion to SysEmu]
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
14 files changed:
target/mips/cpu-defs.c.inc
target/mips/cpu.c
target/mips/cpu.h
target/mips/helper.h
target/mips/internal.h
target/mips/tcg/lcsr.decode [new file with mode: 0644]
target/mips/tcg/lcsr_translate.c [new file with mode: 0644]
target/mips/tcg/meson.build
target/mips/tcg/op_helper.c
target/mips/tcg/sysemu/lcsr_helper.c [new file with mode: 0644]
target/mips/tcg/sysemu/meson.build
target/mips/tcg/sysemu_helper.h.inc
target/mips/tcg/translate.c
target/mips/tcg/translate.h