From: edgar_igl Date: Mon, 9 Jun 2008 23:07:50 +0000 (+0000) Subject: CRIS: Support RFN insn. X-Git-Tag: stefano.display-merge-start~1071 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=5bf8f1aba1ab727713edf4084e7bc841dd1e6732;p=qemu-xen-4.0-testing.git CRIS: Support RFN insn. git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4718 c046a42c-6fe2-441c-8c8c-71466251a162 --- diff --git a/target-cris/helper.h b/target-cris/helper.h index 34f6831f..4c96f048 100644 --- a/target-cris/helper.h +++ b/target-cris/helper.h @@ -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); diff --git a/target-cris/op_helper.c b/target-cris/op_helper.c index f5c0ed19..0e7d3c37 100644 --- a/target-cris/op_helper.c +++ b/target-cris/op_helper.c @@ -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 )