Beispiel #1
0
	Byte Processor::execInstruction() {
#ifdef R_UM_OPT_ENABLE_LOGGING
#ifdef R_UM_OPT_PRC_DEBUG
		ic_ ++;
#endif
#endif
		Word instr = (*mm_)(0, pc_ ++);
		switch (decodeInstruction(instr)) {
			case IC_CNDMOV:
				return CNDMOV(decodeAreg(instr), decodeBreg(instr),
						decodeCreg(instr));
			case IC_ARRIDX:
				return ARRIDX(decodeAreg(instr), decodeBreg(instr),
						decodeCreg(instr));
			case IC_ARRAMD:
				return ARRAMD(decodeAreg(instr), decodeBreg(instr),
						decodeCreg(instr));
			case IC_ADD:
				return ADD(decodeAreg(instr), decodeBreg(instr),
						decodeCreg(instr));
			case IC_MUL:
				return MUL(decodeAreg(instr), decodeBreg(instr),
						decodeCreg(instr));
			case IC_DIV:
				return DIV(decodeAreg(instr), decodeBreg(instr),
						decodeCreg(instr));
			case IC_NOTAND:
				return NOTAND(decodeAreg(instr), decodeBreg(instr),
						decodeCreg(instr));

			case IC_HLT:
				return HLT();
			case IC_ALLOC:
				return ALLOC(decodeBreg(instr), decodeCreg(instr));
			case IC_ABAND:
				return ABAND(decodeCreg(instr));
			case IC_OUTP:
				return OUTP(decodeCreg(instr));
			case IC_INP:
				return INP(decodeCreg(instr));
			case IC_LDPRG:
				return LDPRG(decodeBreg(instr), decodeCreg(instr));

			case IC_ORTHO:
				return ORTHO(decodeOreg(instr), decodeVal(instr));

			default:
				assert(false);
				return HLT();
		}
	}
int main() {

    char *line = NULL;
    size_t size;
    
    initSegIndex();
    initSegCounter();

    while(getline(&line, &size, stdin) != -1) {
   
        char *key = NULL;
        char *val = NULL;
        parseEntry(line, size, &key, &val);   
        if(key==NULL) continue;
        decodeKey(key);
        decodeVal(val);   
        
        // hash_set(index, key, val);
    }
    // readline - mallocs space
    free(line);

    // fprintf(stderr, "Hash values: %d\n", hash_size(index));
    // hash_each(index, {
    //   printf("%s: %s\n", key, (char *) val);

    //   // release key/val - parseEntry strdup key/val on heap
    //   free((char *)key);
    //   free((char *)val);
    // });
    // hash_free(index);
    
    printSegCounter();

    clearSegCounter();
    clearSegIndex();

    return 0;
}