]> git.proxmox.com Git - qemu.git/commitdiff
CRIS: Support RFN insn.
authoredgar_igl <edgar_igl@c046a42c-6fe2-441c-8c8c-71466251a162>
Mon, 9 Jun 2008 23:07:50 +0000 (23:07 +0000)
committeredgar_igl <edgar_igl@c046a42c-6fe2-441c-8c8c-71466251a162>
Mon, 9 Jun 2008 23:07:50 +0000 (23:07 +0000)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4718 c046a42c-6fe2-441c-8c8c-71466251a162

target-cris/helper.h
target-cris/op_helper.c

index 34f6831f4e56106fdec9927b17cb0f6eb92f632e..4c96f0487b5294397d6fc2230651589e07e53b4a 100644 (file)
@@ -5,6 +5,7 @@ void TCG_HELPER_PROTO helper_tlb_flush_pid(uint32_t pid);
 void TCG_HELPER_PROTO helper_dump(uint32_t a0, uint32_t a1, uint32_t a2);
 void TCG_HELPER_PROTO helper_dummy(void);
 void TCG_HELPER_PROTO helper_rfe(void);
+void TCG_HELPER_PROTO helper_rfn(void);
 void TCG_HELPER_PROTO helper_store(uint32_t a0);
 
 void TCG_HELPER_PROTO helper_movl_sreg_reg (uint32_t sreg, uint32_t reg);
index f5c0ed191f82af143f336fa3d4f7bb481d5737a9..0e7d3c37ff1bc6e18beb32f4ea4ebca3fbfd5c45 100644 (file)
@@ -220,6 +220,25 @@ void helper_rfe(void)
                env->pregs[PR_CCS] |= P_FLAG;
 }
 
+void helper_rfn(void)
+{
+       int rflag = env->pregs[PR_CCS] & R_FLAG;
+
+       D(fprintf(logfile, "rfn: erp=%x pid=%x ccs=%x btarget=%x\n", 
+                env->pregs[PR_ERP], env->pregs[PR_PID],
+                env->pregs[PR_CCS],
+                env->btarget));
+
+       cris_ccs_rshift(env);
+
+       /* Set the P_FLAG only if the R_FLAG is not set.  */
+       if (!rflag)
+               env->pregs[PR_CCS] |= P_FLAG;
+
+    /* Always set the M flag.  */
+    env->pregs[PR_CCS] |= M_FLAG;
+}
+
 void helper_store(uint32_t a0)
 {
        if (env->pregs[PR_CCS] & P_FLAG )