/* This file is part of JOP, the Java Optimized Processor see <http://www.jopdesign.com/> Copyright (C) 2001-2008, Martin Schoeberl (martin@jopdesign.com) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ /** * * Simulation of instruction buffer * */ package com.jopdesign.tools; public class PrefetchBuffer extends Cache { int buf1, buf2; int bufAddr1 = -1; int bufAddr2 = -1; PrefetchBuffer(int[] main, JopSim js) { mem = main; sim = js; } int ret(int start, int len, int pc) { return pc; } int corrPc(int pc) { return pc; } int invoke(int start, int len) { return start*4; } byte bc(int addr) { int word = addr>>2; ++cacheRead; if (bufAddr1 != word) { // perhaps in second buffer? if (bufAddr2==word) { buf1 = buf2; bufAddr1 = bufAddr2; } else { buf1 = sim.readInstrMem(word); memRead += 4; memTrans++; bufAddr1 = word; } } if ((addr&0x03)>1 && bufAddr2!=word+1) { // read another word for the operands buf2 = sim.readInstrMem(word+1); memRead += 4; memTrans++; bufAddr2 = word+1; } return (byte) (buf1>>>(8*(3-(addr&0x03)))); } }