]> xenbits.xensource.com Git - people/liuw/qemu.git/commitdiff
target-tricore: add SYS_RESTORE instruction of the v1.6 ISA
authorBastian Koppelmann <kbastian@mail.uni-paderborn.de>
Thu, 7 May 2015 19:25:42 +0000 (21:25 +0200)
committerBastian Koppelmann <kbastian@mail.uni-paderborn.de>
Fri, 22 May 2015 15:02:34 +0000 (17:02 +0200)
Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de>
Reviewed-by: Richard Henderson <rth@twiddle.net>
target-tricore/translate.c
target-tricore/tricore-opcodes.h

index 52f474ba9f268e5ff173cc53a70aab0eee52275d..4aea0c632a3a15f81c24d98acf609ae6169d160d 100644 (file)
@@ -7792,10 +7792,12 @@ static void decode_rrrw_extract_insert(CPUTriCoreState *env, DisasContext *ctx)
 static void decode_sys_interrupts(CPUTriCoreState *env, DisasContext *ctx)
 {
     uint32_t op2;
+    uint32_t r1;
     TCGLabel *l1;
     TCGv tmp;
 
     op2 = MASK_OP_SYS_OP2(ctx->opcode);
+    r1  = MASK_OP_SYS_S1D(ctx->opcode);
 
     switch (op2) {
     case OPC2_32_SYS_DEBUG:
@@ -7844,6 +7846,14 @@ static void decode_sys_interrupts(CPUTriCoreState *env, DisasContext *ctx)
     case OPC2_32_SYS_SVLCX:
         gen_helper_svlcx(cpu_env);
         break;
+    case OPC2_32_SYS_RESTORE:
+        if (tricore_feature(env, TRICORE_FEATURE_16)) {
+            if ((ctx->hflags & TRICORE_HFLAG_KUU) == TRICORE_HFLAG_SM ||
+                (ctx->hflags & TRICORE_HFLAG_KUU) == TRICORE_HFLAG_UM1) {
+                tcg_gen_deposit_tl(cpu_ICR, cpu_ICR, cpu_gpr_d[r1], 8, 1);
+            } /* else raise privilege trap */
+        } /* else raise illegal opcode trap */
+        break;
     case OPC2_32_SYS_TRAPSV:
         /* TODO: raise sticky overflow trap */
         break;
index 440c7fefed6c059ab6844f669db4f308807f25e4..d1506a9429419453fa5eefd3ccef2087d0e04943 100644 (file)
@@ -1434,4 +1434,5 @@ enum {
     OPC2_32_SYS_SVLCX                            = 0x08,
     OPC2_32_SYS_TRAPSV                           = 0x15,
     OPC2_32_SYS_TRAPV                            = 0x14,
+    OPC2_32_SYS_RESTORE                          = 0x0e,
 };