From 9e82494344c6bbd50ea9278384b23c07ed2bceb4 Mon Sep 17 00:00:00 2001 From: Yongbok Kim Date: Mon, 27 Aug 2018 04:31:33 -0400 Subject: [PATCH] target/mips: Add emulation of nanoMIPS 16-bit misc instructions Add emulation of misc nanoMIPS 16-bit instructions. Backports commit 8869ad02bfd9737f6a8fceab5ca286eaa899b790 from qemu --- qemu/target/mips/translate.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/qemu/target/mips/translate.c b/qemu/target/mips/translate.c index 1d39808e..fe4b888f 100644 --- a/qemu/target/mips/translate.c +++ b/qemu/target/mips/translate.c @@ -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: {