Resend for review. All modifications have been made according to Henderson's review comments, and all tests passed.
Changes in v6: * Update against master(v2.8.0-rc3) * Fix two bugs according to Richard Henderson's review comments (1) mask: extend TARGET_PAGE_MASK to the proper type (2) zero-extend the guest address, not the address loaded from CMP_OFF * MIPS R6: tested successfully on a qemu mipsel64r6 host (emulating I6400) - Debian amd64 with qemu-system-x86_64 Changes in v5: * Update against master(v2.8.0-rc2) * Fix a bug: 64-bit big-endian guests hang on mips64 little-endian hosts, and vice versa. This bug was first introduced in v2 patch, due to obvious misuse of ret/arg registers in tcg_out_bswap64(). tcg_out_opc_reg(s, OPC_DSBH, ret, 0, arg); - tcg_out_opc_reg(s, OPC_DSHD, ret, 0, arg); + tcg_out_opc_reg(s, OPC_DSHD, ret, 0, ret); * Fix a style problem: checkpatch.pl forbids 'extern' to be used in .c. ERROR: externs should be avoided in .c files #28: FILE: tcg/mips/tcg-target.inc.c:39: +extern int link_error(void); Simply comment the type identifier to pass the check. * Tested successfully on following machines: | HOST | qemu-system | Debian ISO | |-----------------------------------------| | mips 32 le | i386 | i386 | | mips 32 le | x86_64 | i386 | | mips 32 le | x86_64 | amd64 | | mips 64 le | i386 | i386 | | mips 64 le | x86_64 | i386 | | mips 64 le | x86_64 | amd64 | | mips 64 le | mips 64 be | mips 64 be | |-----------------------------------------| | mips 32 be | i386 | i386 | | mips 32 be | x86_64 | i386 | | mips 32 be | x86_64 | amd64 | | mips 64 be | i386 | i386 | | mips 64 be | x86_64 | i386 | | mips 64 be | x86_64 | amd64 | | mips n32 be | 386 | i386 | | mips n32 be | x86_64 | i386 | | mips n32 be | x86_64 | amd64 | (No plan to test MIPS R6 in this patch.) Summary of changes from v4: | tcg-mips: Support 64-bit opcodes | Fix tcg_out_bswap64() | | tcg-mips: Adjust qemu_ld/st for mips64 | Fix a style problem | Changes in v4: * tcg_out_qemu_ld_slow_path: always sign-extend 32-bit loads. Provide a better solution than patch11 in v3. Fix the blocking bug when emulating i386 kernel on mips64el. * Redefine LO_OFF/HI_OFF as v2. On mips64 host, they are defined as link_error, to ensure that all paths that lead to the use of the symbol are eliminated by the compiler. Changes in v3: * Update against master(v2.8.0-rc1) * Tested on Loongson as mips32r2(el) and mips64r2(el) hosts. Loongson only implements little-endian mips32/mips64 ISA. * Fully work for 32-bit and 64-bit guests. Fix two bugs:segmentation fault on mips64el with 32-bit guests, blocking when emulating i386 kernel on mips64el. * Fix some minor style problems. * PATCH v2 12~16 are not examined due to the lack of R6 machine. Tested-by: Aurelien Jarno <aurel...@aurel32.net> Tested-by: James Hogan <james.ho...@imgtec.com> Tested-by: YunQiang Su <wzss...@gmail.com> Signed-off-by: Richard Henderson <r...@twiddle.net> Signed-off-by: Jin Guojie <jinguo...@loongson.cn> Jin Guojie (10): tcg-mips: Move bswap code to a subroutine tcg-mips: Add mips64 opcodes tcg-mips: Support 64-bit opcodes tcg-mips: Add bswap32u and bswap64 tcg-mips: Adjust move functions for mips64 tcg-mips: Adjust load/store functions for mips64 tcg-mips: Adjust prologue for mips64 tcg-mips: Add tcg unwind info tcg-mips: Adjust calling conventions for mips64 tcg-mips: Adjust qemu_ld/st for mips64 tcg/mips/tcg-target.h | 60 ++- tcg/mips/tcg-target.inc.c | 1170 +++++++++++++++++++++++++++++++++++---------- 2 files changed, 977 insertions(+), 253 deletions(-) -- 2.1.0