/******************************************************************************
** FILE: simple.fs
** Basic sparc instruction simulator (with in-order pipeline simulation).
*/

#include "sparc_v9.fs"
#include "pipeline.fs"

fun initialize()
{
    R4(14,system?start_sp);
    return (system?start_pc, system?start_pc + 4, 0?cvt(cwp_t), pipe);
}

val init = initialize();

fun main(pc, npc, cwp, _pipe : Pipe)
{
    // Copy arguments to global variables
    PC = pc; nPC = npc; CWP = cwp; pipe = _pipe;

    srcQ?clear();
    storeQ?clear();
    destQ?clear();
    address = 0;

    nPC2 = nPC + 4;	// default next nPC
    PC?exec();		// execute instruction
    instructions = instructions + 1?cvt(ullong);

    init = (nPC, nPC2, CWP, pipe);
}