From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1K5r2E-0001A5-AH for qemu-devel@nongnu.org; Mon, 09 Jun 2008 19:44:22 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1K5r2D-00019N-Nj for qemu-devel@nongnu.org; Mon, 09 Jun 2008 19:44:21 -0400 Received: from [199.232.76.173] (port=41486 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1K5r2D-00018w-Ei for qemu-devel@nongnu.org; Mon, 09 Jun 2008 19:44:21 -0400 Received: from savannah.gnu.org ([199.232.41.3]:50694 helo=sv.gnu.org) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1K5r2C-0002fc-Pt for qemu-devel@nongnu.org; Mon, 09 Jun 2008 19:44:20 -0400 Received: from cvs.savannah.gnu.org ([199.232.41.69]) by sv.gnu.org with esmtp (Exim 4.63) (envelope-from ) id 1K5r2C-0006LR-DB for qemu-devel@nongnu.org; Mon, 09 Jun 2008 23:44:20 +0000 Received: from edgar_igl by cvs.savannah.gnu.org with local (Exim 4.63) (envelope-from ) id 1K5r2C-0006LN-86 for qemu-devel@nongnu.org; Mon, 09 Jun 2008 23:44:20 +0000 MIME-Version: 1.0 Errors-To: edgar_igl Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: "Edgar E. Iglesias" Message-Id: Date: Mon, 09 Jun 2008 23:44:20 +0000 Subject: [Qemu-devel] [4721] CRIS: Add (untested) cpu-state save/load. Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Revision: 4721 http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=4721 Author: edgar_igl Date: 2008-06-09 23:44:20 +0000 (Mon, 09 Jun 2008) Log Message: ----------- CRIS: Add (untested) cpu-state save/load. Modified Paths: -------------- trunk/hw/etraxfs.c trunk/target-cris/machine.c Modified: trunk/hw/etraxfs.c =================================================================== --- trunk/hw/etraxfs.c 2008-06-09 23:33:30 UTC (rev 4720) +++ trunk/hw/etraxfs.c 2008-06-09 23:44:20 UTC (rev 4721) @@ -67,7 +67,7 @@ cpu_model = "crisv32"; } env = cpu_init(cpu_model); -/* register_savevm("cpu", 0, 3, cpu_save, cpu_load, env); */ + register_savevm("cpu", 0, 1, cpu_save, cpu_load, env); qemu_register_reset(main_cpu_reset, env); /* allocate RAM */ Modified: trunk/target-cris/machine.c =================================================================== --- trunk/target-cris/machine.c 2008-06-09 23:33:30 UTC (rev 4720) +++ trunk/target-cris/machine.c 2008-06-09 23:44:20 UTC (rev 4721) @@ -5,3 +5,91 @@ { qemu_register_machine(&bareetraxfs_machine); } + +void cpu_save(QEMUFile *f, void *opaque) +{ + CPUCRISState *env = opaque; + int i; + int s; + int mmu; + + for (i = 0; i < 16; i++) + qemu_put_be32(f, env->regs[i]); + for (i = 0; i < 16; i++) + qemu_put_be32(f, env->pregs[i]); + + qemu_put_be32(f, env->pc); + qemu_put_be32(f, env->ksp); + + qemu_put_be32(f, env->dslot); + qemu_put_be32(f, env->btaken); + qemu_put_be32(f, env->btarget); + + qemu_put_be32(f, env->cc_op); + qemu_put_be32(f, env->cc_mask); + qemu_put_be32(f, env->cc_dest); + qemu_put_be32(f, env->cc_src); + qemu_put_be32(f, env->cc_result); + qemu_put_be32(f, env->cc_size); + qemu_put_be32(f, env->cc_x); + + for (s = 0; s < 4; i++) { + for (i = 0; i < 16; i++) + qemu_put_be32(f, env->sregs[s][i]); + } + + qemu_put_be32(f, env->mmu_rand_lfsr); + for (mmu = 0; mmu < 2; mmu++) { + for (s = 0; s < 4; i++) { + for (i = 0; i < 16; i++) { + qemu_put_be32(f, env->tlbsets[mmu][s][i].lo); + qemu_put_be32(f, env->tlbsets[mmu][s][i].hi); + } + } + } +} + +int cpu_load(QEMUFile *f, void *opaque, int version_id) +{ + CPUCRISState *env = opaque; + int i; + int s; + int mmu; + + for (i = 0; i < 16; i++) + env->regs[i] = qemu_get_be32(f); + for (i = 0; i < 16; i++) + env->pregs[i] = qemu_get_be32(f); + + env->pc = qemu_get_be32(f); + env->ksp = qemu_get_be32(f); + + env->dslot = qemu_get_be32(f); + env->btaken = qemu_get_be32(f); + env->btarget = qemu_get_be32(f); + + env->cc_op = qemu_get_be32(f); + env->cc_mask = qemu_get_be32(f); + env->cc_dest = qemu_get_be32(f); + env->cc_src = qemu_get_be32(f); + env->cc_result = qemu_get_be32(f); + env->cc_size = qemu_get_be32(f); + env->cc_x = qemu_get_be32(f); + + for (s = 0; s < 4; i++) { + for (i = 0; i < 16; i++) + env->sregs[s][i] = qemu_get_be32(f); + } + + env->mmu_rand_lfsr = qemu_get_be32(f); + for (mmu = 0; mmu < 2; mmu++) { + for (s = 0; s < 4; i++) { + for (i = 0; i < 16; i++) { + env->tlbsets[mmu][s][i].lo = qemu_get_be32(f); + env->tlbsets[mmu][s][i].hi = qemu_get_be32(f); + } + } + } + + return 0; +}