This patchset adds minimal MIPS r6 host support to TCG. The first two patches are things I've noticed along the way, and are independent of the other patches.
Patches 3-6 add R6 awareness to the most important operations, such that instructions removed in R6 don't get emitted. This seems to be enough to get a MIPS Linux guest booting on a MIPSr6 host (such as QEMU or I6400). There are no doubt other improvements that could be made to better utilise new R6 instruction encodings, but that can wait until a later patchset. The R6 changes are basically: - Patch 4: Don't use the MIPSr5 JR encoding (r6 uses JALR with rd=zero). - Patch 5: Don't use LO/HI registers, instead using the new multiply/divide encodings, which map nicely to TCG ops anyway. - Patch 6: Don't use MOVN/MOVZ instructions. Instead use SELEQZ/SELNEZ. Changes in v2: - Patch 4: Turn #define into enum (Richard). - Patch 5: Use a common OPC_MUL definition. use_mips32_instructions will always be 1 for MIPS r6 builds (Richard) - Combine with patch 6 & 7 from v1, and drop functional changes to movcond implementation pre-r6. We now provide different constraints for movcond depending on presence of r6. (thanks Richard for feedback). - Add Richard's Reviewed-by to patches 1, 3, 4. James Hogan (6): tcg-opc.h: Simplify debug_insn_start def disas/mips: Add R6 jr/jr.hb to disassembler tcg/mips: Add use_mips32r6_instructions definition tcg/mips: Support r6 JR encoding tcg/mips: Support r6 multiply/divide encodings tcg/mips: Support r6 SEL{NE,EQ}Z instead of MOVN/MOVZ disas/mips.c | 2 ++ tcg/mips/tcg-target.c | 87 ++++++++++++++++++++++++++++++++++++++++++++++----- tcg/mips/tcg-target.h | 11 +++++-- tcg/tcg-opc.h | 12 +++---- 4 files changed, 94 insertions(+), 18 deletions(-) Cc: Aurelien Jarno <aurel...@aurel32.net> Cc: Richard Henderson <r...@twiddle.net> Cc: Leon Alrae <leon.al...@imgtec.com> -- 2.4.9