mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2024-12-23 05:45:36 +00:00
target/mips: Add emulation of nanoMIPS 16-bit misc instructions
Add emulation of misc nanoMIPS 16-bit instructions. Backports commit 8869ad02bfd9737f6a8fceab5ca286eaa899b790 from qemu
This commit is contained in:
parent
25d95b6971
commit
9e82494344
|
@ -16875,6 +16875,41 @@ static int decode_nanomips_opc(CPUMIPSState *env, DisasContext *ctx)
|
|||
op = extract32(ctx->opcode, 10, 6);
|
||||
switch (op) {
|
||||
case NM_P16_MV:
|
||||
rt = NANOMIPS_EXTRACT_RD5(ctx->opcode);
|
||||
if (rt != 0) {
|
||||
/* MOVE */
|
||||
rs = NANOMIPS_EXTRACT_RS5(ctx->opcode);
|
||||
gen_arith(ctx, OPC_ADDU, rt, rs, 0);
|
||||
} else {
|
||||
/* P16.RI */
|
||||
switch (extract32(ctx->opcode, 3, 2)) {
|
||||
case NM_P16_SYSCALL:
|
||||
if (extract32(ctx->opcode, 2, 1) == 0) {
|
||||
generate_exception_end(ctx, EXCP_SYSCALL);
|
||||
} else {
|
||||
generate_exception_end(ctx, EXCP_RI);
|
||||
}
|
||||
break;
|
||||
case NM_BREAK16:
|
||||
generate_exception_end(ctx, EXCP_BREAK);
|
||||
break;
|
||||
case NM_SDBBP16:
|
||||
// Unicorn: commented out
|
||||
/* if (is_uhi(extract32(ctx->opcode, 0, 3))) {
|
||||
gen_helper_do_semihosting(cpu_env);
|
||||
} else */ {
|
||||
if (ctx->hflags & MIPS_HFLAG_SBRI) {
|
||||
generate_exception_end(ctx, EXCP_RI);
|
||||
} else {
|
||||
generate_exception_end(ctx, EXCP_DBp);
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
generate_exception_end(ctx, EXCP_RI);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case NM_P16_SHIFT:
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue