[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v3] linux-user: Handle compressed ISA encodings
From: |
Maciej W. Rozycki |
Subject: |
Re: [Qemu-devel] [PATCH v3] linux-user: Handle compressed ISA encodings when processing MIPS exceptions |
Date: |
Mon, 29 Jul 2013 11:23:47 +0100 |
User-agent: |
Alpine 1.10 (DEB 962 2008-03-14) |
On Fri, 19 Jul 2013, Kwok Cheung Yeung wrote:
> Decode trap instructions during the handling of an EXCP_BREAK or EXCP_TRAP
> according to the current ISA mode.
>
> Signed-off-by: Kwok Cheung Yeung <address@hidden>
> ---
> linux-user/main.c | 46 +++++++++++++++++++++++++++++++++++++++++++---
> 1 file changed, 43 insertions(+), 3 deletions(-)
>
> v2->v3: Handle microMIPS and MIPS16e instructions when processing EXCP_BREAK.
>
> diff --git a/linux-user/main.c b/linux-user/main.c
> index 7f15d3d..b137216 100644
> --- a/linux-user/main.c
> +++ b/linux-user/main.c
> @@ -2348,7 +2348,31 @@ done_syscall:
> abi_ulong trap_instr;
> unsigned int code;
>
> - ret = get_user_ual(trap_instr, env->active_tc.PC);
> + if (env->hflags & MIPS_HFLAG_M16) {
> + if (env->insn_flags & ASE_MICROMIPS) {
> + /* microMIPS mode */
> + abi_ulong instr[2];
> +
> + ret = get_user_u16(instr[0], env->active_tc.PC) ||
> + get_user_u16(instr[1], env->active_tc.PC + 2);
> +
> + trap_instr = (instr[0] << 16) | instr[1];
You need to tell 16-bit and 32-bit microMIPS BREAK instructions apart
somehow.
Maciej