[Softpear-cvs] softpear/src/cpu/cpu_generic ppc_cpu.cc,1.13,1.14
Status: Pre-Alpha
Brought to you by:
mist
|
From: <mas...@us...> - 2005-03-17 09:32:22
|
Update of /cvsroot/softpear/softpear/src/cpu/cpu_generic In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7141/src/cpu/cpu_generic Modified Files: ppc_cpu.cc Log Message: Little changes to the threading concept: CPU can now be started by either calling "ppc_cpu_run_threaded" or "ppc_cpu_run_unthreaded". In the first case, the memory allocated by "ppc_cpu_init" is free'ed automatically, in the latter case, it is not so that the caller has access to the register contents after the CPU has finished. Added qsort.c example. Index: ppc_cpu.cc =================================================================== RCS file: /cvsroot/softpear/softpear/src/cpu/cpu_generic/ppc_cpu.cc,v retrieving revision 1.13 retrieving revision 1.14 diff -u -d -r1.13 -r1.14 --- ppc_cpu.cc 16 Mar 2005 18:03:47 -0000 1.13 +++ ppc_cpu.cc 17 Mar 2005 09:32:12 -0000 1.14 @@ -104,10 +104,9 @@ { } -void *ppc_cpu_run(void *p) +void ppc_cpu_run(PPC_CPU_State *gCPU) { - PPC_CPU_State *gCPU = (PPC_CPU_State*)p; #ifdef PEARPC gDebugger = new Debugger(); @@ -159,10 +158,8 @@ // printf("Executing...\n"); //MIST ppc_exec_opc(gCPU); #ifndef PEARPC - if (gCPU->npc == 0xdeadbeec) { - ppc_cpu_deinit(gCPU); - return NULL; - } + if (gCPU->npc == 0xdeadbeec) + return; #endif ops++; gCPU->ptb++; @@ -250,13 +247,24 @@ #endif } - ppc_cpu_deinit(gCPU); + return; +} + +void *ppc_cpu_thread_starter(void *p) +{ + ppc_cpu_run((PPC_CPU_State*)p); + ppc_cpu_deinit((PPC_CPU_State*)p); return NULL; } -void ppc_cpu_run_threaded(PPC_CPU_State *gCPU) +int ppc_cpu_run_threaded(PPC_CPU_State *gCPU, const pthread_attr_t *attr) { - pthread_create(&gCPU->thread, NULL, ppc_cpu_run, (void*)gCPU); + return pthread_create(&gCPU->thread, attr, ppc_cpu_thread_starter, (void*)gCPU); +} + +void ppc_cpu_run_unthreaded(PPC_CPU_State *gCPU) +{ + ppc_cpu_run(gCPU); } void ppc_cpu_stop(PPC_CPU_State *gCPU) |