class Instruction
{
int history;
Instruction()
{
history=0; // Assume Strongly Taken
}
}
class BranchPredictionLogic
{
{
int d,ch;
Instruction i1;
String HistoryArray
[]={"Strongly Taken",
"Weakly Taken",
"Weakly Not Taken",
"Strongly Not Taken"}; System.
out.
println("Active Prefetch Queue A");
i1=new Instruction();
System.
out.
println("Enter instructions:"); while(true)
{
i1.inst=br.readLine();
if(isBranchInst(i1.inst)==true)
break;
}
System.
out.
println(i1.
inst+" is a Branch Instruction");
System.
out.
println("\n\n***DECODE1 STAGE***"); System.
out.
println("*****Branch Target Buffer*****");
System.
out.
println("Source:----\nTarget:-----\nHistory: Strongly Taken"); do{
System.
out.
println("\n\n\n*****EXECUTE STAGE*****"); System.
out.
println("Does branch take place?? Enter 1 or 0 : ");
updateLogic(i1,d);
System.
out.
println("***New Branch Target Buffer***"); his=HistoryArray[i1.history];
System.
out.
println("Source:----\nTarget:----\nHistory: "+his
);
System.
out.
println("Do you want to continue:(1/0): "); ch
=Integer.
parseInt(br.
readLine());
}while(ch!=0);
}
public static boolean isBranchInst
(String x
) {
String jumpInstructions
[]={"JC",
"JMP"};
for(int i=0;i<jumpInstructions.length;i++)
if(x.equals(jumpInstructions[i])==true)
return true;
return false;
}
public static void updateLogic(Instruction i,int n)
{
int history[]={0,1,2,3};
int historyAfterTaken[]={0,0,1,2};
int historyNotTaken[]={1,2,3,3};
if(n==1)
{
System.
out.
println("\nContents of B queue are valid!!!!!"); i.history=historyAfterTaken[i.history];
}
else if(n==0)
{
System.
out.
println("Contents of B queue not valid\nActive PrefetchQueue is A"); i.history=historyNotTaken[i.history];
}
}
}
CgoKY2xhc3MgSW5zdHJ1Y3Rpb24KewogU3RyaW5nIGluc3Q7CiBpbnQgaGlzdG9yeTsKIEluc3RydWN0aW9uKCkKIHsKICBoaXN0b3J5PTA7IC8vIEFzc3VtZSBTdHJvbmdseSBUYWtlbgogfQp9CgoKCmNsYXNzIEJyYW5jaFByZWRpY3Rpb25Mb2dpYwp7CiBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB0aHJvd3MgRXhjZXB0aW9uCiB7CiAgaW50IGQsY2g7CiAgU3RyaW5nIGhpcz0iU3Ryb25nbHkgVGFrZW4iOwogIEluc3RydWN0aW9uIGkxOwogIFN0cmluZyBIaXN0b3J5QXJyYXlbXT17IlN0cm9uZ2x5IFRha2VuIiwiV2Vha2x5IFRha2VuIiwiV2Vha2x5IE5vdCBUYWtlbiIsIlN0cm9uZ2x5IE5vdCBUYWtlbiJ9OwogIEJ1ZmZlcmVkUmVhZGVyIGJyPW5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoU3lzdGVtLmluKSk7CiAgU3lzdGVtLm91dC5wcmludGxuKCJBY3RpdmUgUHJlZmV0Y2ggUXVldWUgQSIpOwoKICBpMT1uZXcgSW5zdHJ1Y3Rpb24oKTsKICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIGluc3RydWN0aW9uczoiKTsKICB3aGlsZSh0cnVlKQogIHsKICAgaTEuaW5zdD1ici5yZWFkTGluZSgpOwogICBpZihpc0JyYW5jaEluc3QoaTEuaW5zdCk9PXRydWUpCiAgIGJyZWFrOwogIH0KCiAgU3lzdGVtLm91dC5wcmludGxuKGkxLmluc3QrIiBpcyBhIEJyYW5jaCBJbnN0cnVjdGlvbiIpOwoKICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuXG4qKipERUNPREUxIFNUQUdFKioqIik7CiAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKkJyYW5jaCBUYXJnZXQgQnVmZmVyKioqKioiKTsKCiAgU3lzdGVtLm91dC5wcmludGxuKCJTb3VyY2U6LS0tLVxuVGFyZ2V0Oi0tLS0tXG5IaXN0b3J5OiBTdHJvbmdseSBUYWtlbiIpOwogIGRvewogIFN5c3RlbS5vdXQucHJpbnRsbigiXG5cblxuKioqKipFWEVDVVRFIFNUQUdFKioqKioiKTsKICBTeXN0ZW0ub3V0LnByaW50bG4oIkRvZXMgYnJhbmNoIHRha2UgcGxhY2U/PyBFbnRlciAxIG9yIDAgOiAiKTsKICBkPUludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgogIHVwZGF0ZUxvZ2ljKGkxLGQpOwoKICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKk5ldyBCcmFuY2ggVGFyZ2V0IEJ1ZmZlcioqKiIpOwogIGhpcz1IaXN0b3J5QXJyYXlbaTEuaGlzdG9yeV07CiAgU3lzdGVtLm91dC5wcmludGxuKCJTb3VyY2U6LS0tLVxuVGFyZ2V0Oi0tLS1cbkhpc3Rvcnk6ICIraGlzKTsKCiAgU3lzdGVtLm91dC5wcmludGxuKCJEbyB5b3Ugd2FudCB0byBjb250aW51ZTooMS8wKTogIik7CiAgY2g9SW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCiAgfXdoaWxlKGNoIT0wKTsKCiB9CgogcHVibGljIHN0YXRpYyBib29sZWFuIGlzQnJhbmNoSW5zdChTdHJpbmcgeCkKIHsKICBTdHJpbmcganVtcEluc3RydWN0aW9uc1tdPXsiSkMiLCJKTVAifTsKCiAgZm9yKGludCBpPTA7aTxqdW1wSW5zdHJ1Y3Rpb25zLmxlbmd0aDtpKyspCiAgIGlmKHguZXF1YWxzKGp1bXBJbnN0cnVjdGlvbnNbaV0pPT10cnVlKQogICByZXR1cm4gdHJ1ZTsKCiAgcmV0dXJuIGZhbHNlOwogfQoKIHB1YmxpYyBzdGF0aWMgdm9pZCB1cGRhdGVMb2dpYyhJbnN0cnVjdGlvbiBpLGludCBuKQogewogIGludCBoaXN0b3J5W109ezAsMSwyLDN9OwogIGludCBoaXN0b3J5QWZ0ZXJUYWtlbltdPXswLDAsMSwyfTsKICBpbnQgaGlzdG9yeU5vdFRha2VuW109ezEsMiwzLDN9OwoKICBpZihuPT0xKQogIHsKICAgU3lzdGVtLm91dC5wcmludGxuKCJcbkNvbnRlbnRzIG9mIEIgcXVldWUgYXJlIHZhbGlkISEhISEiKTsKICAgaS5oaXN0b3J5PWhpc3RvcnlBZnRlclRha2VuW2kuaGlzdG9yeV07CiAgfQogIGVsc2UgaWYobj09MCkKICB7CiAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29udGVudHMgb2YgQiBxdWV1ZSBub3QgdmFsaWRcbkFjdGl2ZSBQcmVmZXRjaFF1ZXVlIGlzIEEiKTsKICAgaS5oaXN0b3J5PWhpc3RvcnlOb3RUYWtlbltpLmhpc3RvcnldOwogIH0KIH0KfQo=