mirror of https://github.com/xemu-project/xemu.git
target-arm: A64: implement SVC, BRK
Add decoding for the exception generating instructions, and implement SVC (syscalls) and BRK (software breakpoint). Signed-off-by: Alexander Graf <agraf@suse.de> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Richard Henderson <rth@twiddle.net>
This commit is contained in:
parent
52c8b9afcd
commit
9618e80938
|
@ -808,10 +808,57 @@ static void disas_system(DisasContext *s, uint32_t insn)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Exception generation */
|
/* C3.2.3 Exception generation
|
||||||
|
*
|
||||||
|
* 31 24 23 21 20 5 4 2 1 0
|
||||||
|
* +-----------------+-----+------------------------+-----+----+
|
||||||
|
* | 1 1 0 1 0 1 0 0 | opc | imm16 | op2 | LL |
|
||||||
|
* +-----------------------+------------------------+----------+
|
||||||
|
*/
|
||||||
static void disas_exc(DisasContext *s, uint32_t insn)
|
static void disas_exc(DisasContext *s, uint32_t insn)
|
||||||
{
|
{
|
||||||
|
int opc = extract32(insn, 21, 3);
|
||||||
|
int op2_ll = extract32(insn, 0, 5);
|
||||||
|
|
||||||
|
switch (opc) {
|
||||||
|
case 0:
|
||||||
|
/* SVC, HVC, SMC; since we don't support the Virtualization
|
||||||
|
* or TrustZone extensions these all UNDEF except SVC.
|
||||||
|
*/
|
||||||
|
if (op2_ll != 1) {
|
||||||
|
unallocated_encoding(s);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
gen_exception_insn(s, 0, EXCP_SWI);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
if (op2_ll != 0) {
|
||||||
|
unallocated_encoding(s);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
/* BRK */
|
||||||
|
gen_exception_insn(s, 0, EXCP_BKPT);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
if (op2_ll != 0) {
|
||||||
|
unallocated_encoding(s);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
/* HLT */
|
||||||
unsupported_encoding(s, insn);
|
unsupported_encoding(s, insn);
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
if (op2_ll < 1 || op2_ll > 3) {
|
||||||
|
unallocated_encoding(s);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
/* DCPS1, DCPS2, DCPS3 */
|
||||||
|
unsupported_encoding(s, insn);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
unallocated_encoding(s);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* C3.2.7 Unconditional branch (register)
|
/* C3.2.7 Unconditional branch (register)
|
||||||
|
|
Loading…
Reference in New Issue