mirror of https://github.com/xemu-project/xemu.git
target/arm: Convert SVC
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20190904193059.26202-34-richard.henderson@linaro.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
360144f3b9
commit
542f5188a1
|
@ -528,3 +528,7 @@ LDM_a32 ---- 100 b:1 i:1 u:1 w:1 1 rn:4 list:16 &ldst_block
|
||||||
|
|
||||||
B .... 1010 ........................ @branch
|
B .... 1010 ........................ @branch
|
||||||
BL .... 1011 ........................ @branch
|
BL .... 1011 ........................ @branch
|
||||||
|
|
||||||
|
# Supervisor call
|
||||||
|
|
||||||
|
SVC ---- 1111 imm:24 &i
|
||||||
|
|
|
@ -10081,6 +10081,18 @@ static bool trans_BLX_i(DisasContext *s, arg_BLX_i *a)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Supervisor call
|
||||||
|
*/
|
||||||
|
|
||||||
|
static bool trans_SVC(DisasContext *s, arg_SVC *a)
|
||||||
|
{
|
||||||
|
gen_set_pc_im(s, s->base.pc_next);
|
||||||
|
s->svc_imm = a->imm;
|
||||||
|
s->base.is_jmp = DISAS_SWI;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Legacy decoder.
|
* Legacy decoder.
|
||||||
*/
|
*/
|
||||||
|
@ -10348,6 +10360,7 @@ static void disas_arm_insn(DisasContext *s, unsigned int insn)
|
||||||
case 0x09:
|
case 0x09:
|
||||||
case 0xa:
|
case 0xa:
|
||||||
case 0xb:
|
case 0xb:
|
||||||
|
case 0xf:
|
||||||
/* All done in decodetree. Reach here for illegal ops. */
|
/* All done in decodetree. Reach here for illegal ops. */
|
||||||
goto illegal_op;
|
goto illegal_op;
|
||||||
case 0xc:
|
case 0xc:
|
||||||
|
@ -10363,12 +10376,6 @@ static void disas_arm_insn(DisasContext *s, unsigned int insn)
|
||||||
goto illegal_op;
|
goto illegal_op;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0xf:
|
|
||||||
/* swi */
|
|
||||||
gen_set_pc_im(s, s->base.pc_next);
|
|
||||||
s->svc_imm = extract32(insn, 0, 24);
|
|
||||||
s->base.is_jmp = DISAS_SWI;
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
illegal_op:
|
illegal_op:
|
||||||
unallocated_encoding(s);
|
unallocated_encoding(s);
|
||||||
|
|
Loading…
Reference in New Issue