This is the mail archive of the sid@sourceware.org mailing list for the SID project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Problem Halting Execution


I'm writing a SID port, and I can't get it to halt properly.? What is
the functionality of yield()?? It does not seem to stop instruction
flow.? When yield() is called step_insns() will return after the break
at the end of the loop but then it gets called again.? Included is
pseudocode for my step_insns() function.? Any help would be
appreciated.

Thanks!
Joseph Altmaier

void
*processor*_cpu::step_insns ()
{
? bool found;

? while (true)
??? {
????? get next PC

????? for(int u = 0; u < 2; u++) {//Two execution units

??????? Get next instruction for current execution unit

???? ?? if (the instruction is not found)
? ?? ?? {
??? ?? ?? Get the instruction manually
?? ? ?? }

??? ? ? Instruction disassembley...

??? ? ? try//Execute the instruction and cope with it if the instruction fails.
??? ? ? {
??? ?? ?? Execute the current instruction for the current execution unit
?? ?? ? }
??? ? ? catch (cpu_memory_fault& t)
?? ?? ? {
?? ?? ??? this->memory_trap (t);
? ? ? ??? this->yield ();
? ? ? ? }
??????? catch (cpu_exception& t)
? ? ? ? {
??? ?? ?? this->yield ();//A halt instruction will cause a
cpu_exception and a yeild()
?? ?? ? }

?? ???? try {
? ? ? ??? if(Second execution unit){
??? ??????? Execute a writeback on a pair of write stacks
?? ?? ??? }
? ?? ?? }
?? ?? ? catch (cpu_memory_fault& t)
?? ?? ? {
?? ?? ??? this->memory_trap (t);
?? ?? ??? this->yield();
? ?? ?? }
?? ?? ? catch (cpu_exception& t)
? ?? ?? {
? ?? ???? this->yield ();
? ?? ?? }

?? ???? move ahead through circular pipeline

??????? Do post-instruction processing
? ??? }

????? if (stop_after_insns_p (1))
? ????? break;
??? }
}


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]