public void calculateInitialScore(ROB_entry entry) {//calculate the score based on which heuristic we use for the score function
        if(heuristic.type == HeuristicType.heuristic_LATENCY_SNR ) {//sum of sequence number and multiplier * latency
            entry.score += latencyMultiplier * entry.theUop.exec_latency;
        }
        
        else if(heurType != 3){//the latency is not the base score
            if(heuristic.type == HeuristicType.heuristic_LOADS_FIRST) {//give special score to loads (bigger than usual)
                LOAD_SCORE = PRIORITY_LOADS_SCORE;
                calculateBasicScore(entry);//on top of the basic score
            }
            
            else if(heuristic.type == HeuristicType.heuristic_LOAD_MISSED ){//special score to loads plus extra points if previous load missed
                if (entry.theUop.type == UopType.insn_LOAD && lastLoadMissed) {
                    entry.score += MISSED_LOADS_SCORE;
                }
                calculateBasicScore(entry);//on top of the basic score
            }
            
            else if(heuristic.type == HeuristicType.heuristic_LOADS_FIRST_MISSED ){//special score to loads plus extra points if previous load missed
                LOAD_SCORE = PRIORITY_LOADS_SCORE;//also assign the priority score
                if (entry.theUop.type == UopType.insn_LOAD && lastLoadMissed) {
                    entry.score += MISSED_LOADS_SCORE;
                }
                calculateBasicScore(entry);//on top of the basic score
            }
            else //default score is the instruction type score
                calculateBasicScore(entry);
        }
        else
            calculateBasicScoreSpecial(entry);//for latenccy
    }