コード例 #1
0
ファイル: Register-Cache.c プロジェクト: Mystro256/Not64
void flushFPR(int fpr){
	if(fprMap[fpr].map >= 0){
		if(fprMap[fpr].dirty) _flushFPR(fpr);
		availableFPRs[ fprMap[fpr].map ] = 1;
	}
	fprMap[fpr].map = -1;
}
コード例 #2
0
// Unmapping registers
int flushRegisters(void){
	int i, flushed = 0;
	// Flush GPRs
	for(i=1; i<34; ++i){
		if(regMap[i].map.lo >= 0 && regMap[i].dirty){
			_flushRegister(i);
			++flushed;
		}
		// Mark unmapped
		regMap[i].map.hi = regMap[i].map.lo = -1;
	}
	memcpy(availableRegs, availableRegsDefault, 32*sizeof(int));
	nextLRUVal = 0;
	// Flush FPRs
	for(i=0; i<32; ++i){
		if(fprMap[i].map >= 0 && fprMap[i].dirty){
			_flushFPR(i);
			++flushed;
		}
		// Mark unmapped
		fprMap[i].map = -1;
	}
	memcpy(availableFPRs, availableFPRsDefault, 32*sizeof(int));
	nextLRUValFPR = 0;
	
	return flushed;
}
コード例 #3
0
ファイル: Register-Cache.c プロジェクト: Mystro256/Not64
static int flushLRUFPR(void){
	int i, lru_i = 0, lru_v = 0x7fffffff;
	for(i=0; i<32; ++i){
		if(fprMap[i].map >= 0 && fprMap[i].lru < lru_v){
			lru_i = i; lru_v = fprMap[i].lru;
		}
	}
	int map = fprMap[lru_i].map;
	// Flush the register if its dirty
	if(fprMap[lru_i].dirty) _flushFPR(lru_i);
	// Mark unmapped
	fprMap[lru_i].map = -1;
	return map;
}