Esempio n. 1
0
/* copy a context structure according to the flags */
void copy_context( CONTEXT *to, const CONTEXT *from, unsigned int flags )
{
    if (flags & CONTEXT_CONTROL)
    {
    	CREG(Msr);
    	CREG(Ctr);
    	CREG(Iar);
        to->ContextFlags |= CONTEXT_CONTROL;
    }
    if (flags & CONTEXT_INTEGER)
    {
	IREG(0); IREG(1); IREG(2); IREG(3); IREG(4); IREG(5); IREG(6);
	IREG(7); IREG(8); IREG(9); IREG(10); IREG(11); IREG(12); IREG(13);
	IREG(14); IREG(15); IREG(16); IREG(17); IREG(18); IREG(19);
	IREG(20); IREG(21); IREG(22); IREG(23); IREG(24); IREG(25);
	IREG(26); IREG(27); IREG(28); IREG(29); IREG(30); IREG(31);
	CREG(Xer);
	CREG(Cr);
        to->ContextFlags |= CONTEXT_INTEGER;
    }
    if (flags & CONTEXT_FLOATING_POINT)
    {
	FREG(0);
	FREG(1);
	FREG(2);
	FREG(3);
	FREG(4);
	FREG(5);
	FREG(6);
	FREG(7);
	FREG(8);
	FREG(9);
	FREG(10);
	FREG(11);
	FREG(12);
	FREG(13);
	FREG(14);
	FREG(15);
	FREG(16);
	FREG(17);
	FREG(18);
	FREG(19);
	FREG(20);
	FREG(21);
	FREG(22);
	FREG(23);
	FREG(24);
	FREG(25);
	FREG(26);
	FREG(27);
	FREG(28);
	FREG(29);
	FREG(30);
	FREG(31);
	CREG(Fpscr);
        to->ContextFlags |= CONTEXT_FLOATING_POINT;
    }
}
Esempio n. 2
0
/* Executa o programa */
int Mepa::exec(){

	int op;

    if(detalha)
	{
         p->imprime(); /* Imprime o programa */
    }

    op = p->next();
    while( op != PARA )
	{
        if(detalha) 
		{	
			debug();
		}
        switch(op)
		{
            /* Funcoes MEPA */
            case 0: { AMEM(); break; } 
            case 1: { ARMI(); break; } 
            case 2: { ARMP(); break; }
            case 3: { ARMZ(); break; } 
            case 4: { CHPP(); break; } 
            case 5: { CHPR(); break; }
            case 6: { CMAF(); break; } 
            case 7: { CMAG(); break; } 
            case 8: { CMDF(); break; }
            case 9: { CMDG(); break; } 
            case 10: { CMEF(); break; } 
            case 11: { CMEG(); break; }
            case 12: { CMIF(); break; } 
            case 13: { CMIG(); break; } 
            case 14: { CMMA(); break; } 
            case 15: { CMMF(); break; } 
            case 16: { CMME(); break; } 
            case 17: { CMNF(); break; } 
            case 18: { CONJ(); break; } 
            case 19: { CRCT(); break; } 
            case 20: { CRCF(); break; } 
            case 21: { CREG(); break; }
            case 22: { CREN(); break; }
            case 23: { CRVI(); break; } 
            case 24: { CRVL(); break; }
            case 25: { CRVP(); break; }
            case 26: { DISJ(); break; }
            case 27: { DIVF(); break; } 
            case 28: { DIVI(); break; }
            case 29: { DMEM(); break; } 
            case 30: { DSVF(); break; } 
            case 31: { DSVS(); break; } 
            case 32: { ENTR(); break; } 
            case 33: { IMPC(); break; }
            case 34: { IMPF(); break; }
            case 35: { IMPR(); break; }
            case 36: { INPP(); break; }
            case 37: { INVF(); break; } 
            case 38: { INVR(); break; }
            case 39: { LEIT(); break; }
            case 40: { LEIF(); break; }
            case 41: { MULF(); break; }
            case 42: { MULT(); break; }
            case 43: { NEGA(); break; }
            case 44: { RTPR(); break; }
            case 45: { SOMA(); break; }
            case 46: { SOMF(); break; }
            case 47: { SUBT(); break; }
            case 48: { SUBF(); break; }
            default:{
               cerr << "O programa executou uma operacao invalida." << endl;
               cerr << "i = " << p->getI() << endl; 
               abort();
            }
        }
        op = p->next();
    }
    return 0;
}