diff options
Diffstat (limited to 'src/mem')
-rw-r--r-- | src/mem/ruby/SConscript | 3 | ||||
-rw-r--r-- | src/mem/ruby/libruby.cc | 271 | ||||
-rw-r--r-- | src/mem/ruby/libruby_internal.hh | 41 | ||||
-rw-r--r-- | src/mem/ruby/profiler/Profiler.hh | 1 | ||||
-rw-r--r-- | src/mem/ruby/recorder/CacheRecorder.hh | 1 | ||||
-rw-r--r-- | src/mem/ruby/recorder/TraceRecord.hh | 1 | ||||
-rw-r--r-- | src/mem/ruby/recorder/Tracer.hh | 1 | ||||
-rw-r--r-- | src/mem/ruby/slicc_interface/RubyRequest.cc | 100 | ||||
-rw-r--r-- | src/mem/ruby/slicc_interface/RubyRequest.hh (renamed from src/mem/ruby/libruby.hh) | 109 | ||||
-rw-r--r-- | src/mem/ruby/slicc_interface/SConscript | 1 | ||||
-rw-r--r-- | src/mem/ruby/storebuffer/storebuffer.cc | 48 | ||||
-rw-r--r-- | src/mem/ruby/storebuffer/storebuffer.hh | 2 | ||||
-rw-r--r-- | src/mem/ruby/system/RubyPort.hh | 2 | ||||
-rw-r--r-- | src/mem/ruby/system/Sequencer.cc | 2 |
14 files changed, 120 insertions, 463 deletions
diff --git a/src/mem/ruby/SConscript b/src/mem/ruby/SConscript index 339787a22..4d8c82cf8 100644 --- a/src/mem/ruby/SConscript +++ b/src/mem/ruby/SConscript @@ -43,8 +43,6 @@ if env['TARGET_ISA'] == 'no': if not env['RUBY']: Return() -Source('libruby.cc') - def do_embed_text(target, source, env): """convert a text file into a file that can be embedded in C using an #include statement, that defines a \"const char *\" pointing @@ -95,6 +93,7 @@ MakeInclude('slicc_interface/AbstractCacheEntry.hh') MakeInclude('slicc_interface/AbstractProtocol.hh') MakeInclude('slicc_interface/Message.hh') MakeInclude('slicc_interface/NetworkMessage.hh') +MakeInclude('slicc_interface/RubyRequest.hh') # External types MakeInclude('buffers/MessageBuffer.hh') diff --git a/src/mem/ruby/libruby.cc b/src/mem/ruby/libruby.cc deleted file mode 100644 index 11700b770..000000000 --- a/src/mem/ruby/libruby.cc +++ /dev/null @@ -1,271 +0,0 @@ -/* - * Copyright (c) 2009 Mark D. Hill and David A. Wood - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution; - * neither the name of the copyright holders nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include <sys/wait.h> -#include <algorithm> - -#include "config/gems_root.hh" -#include "mem/ruby/common/Address.hh" -#include "mem/ruby/eventqueue/RubyEventQueue.hh" -#include "mem/ruby/libruby_internal.hh" -#include "mem/ruby/recorder/Tracer.hh" -#include "mem/ruby/system/MemoryVector.hh" -#include "mem/ruby/system/RubyPort.hh" -#include "mem/ruby/system/System.hh" - -using namespace std; - -string -RubyRequestType_to_string(const RubyRequestType& obj) -{ - switch(obj) { - case RubyRequestType_IFETCH: - return "IFETCH"; - case RubyRequestType_LD: - return "LD"; - case RubyRequestType_ST: - return "ST"; - case RubyRequestType_Load_Linked: - return "Load_Linked"; - case RubyRequestType_Store_Conditional: - return "Store_Conditional"; - case RubyRequestType_RMW_Read: - return "RMW_Read"; - case RubyRequestType_RMW_Write: - return "RMW_Write"; - case RubyRequestType_Locked_RMW_Read: - return "Locked_RMW_Read"; - case RubyRequestType_Locked_RMW_Write: - return "Locked_RMW_Write"; - case RubyRequestType_NULL: - default: - assert(0); - return ""; - } -} - -RubyRequestType -string_to_RubyRequestType(string str) -{ - if (str == "IFETCH") - return RubyRequestType_IFETCH; - else if (str == "LD") - return RubyRequestType_LD; - else if (str == "ST") - return RubyRequestType_ST; - else if (str == "Locked_Read") - return RubyRequestType_Load_Linked; - else if (str == "Locked_Write") - return RubyRequestType_Store_Conditional; - else if (str == "RMW_Read") - return RubyRequestType_RMW_Read; - else if (str == "RMW_Write") - return RubyRequestType_RMW_Write; - else if (str == "Locked_RMW_Read") - return RubyRequestType_Locked_RMW_Read; - else if (str == "Locked_RMW_Write") - return RubyRequestType_Locked_RMW_Write; - else - assert(0); - return RubyRequestType_NULL; -} - -ostream& -operator<<(ostream& out, const RubyRequestType& obj) -{ - out << RubyRequestType_to_string(obj); - out << flush; - return out; -} - -ostream& -operator<<(ostream& out, const RubyRequest& obj) -{ - out << hex << "0x" << obj.paddr << " data: 0x" << flush; - for (int i = 0; i < obj.len; i++) { - out << (int)obj.data[i]; - } - out << dec << " type: " << RubyRequestType_to_string(obj.type) << endl; - return out; -} - -vector<string> -tokenizeString(string str, string delims) -{ - vector<string> tokens; - char* pch; - char* tmp; - const char* c_delims = delims.c_str(); - tmp = new char[str.length()+1]; - strcpy(tmp, str.c_str()); - pch = strtok(tmp, c_delims); - while (pch != NULL) { - string tmp_str(pch); - if (tmp_str == "null") tmp_str = ""; - tokens.push_back(tmp_str); - - pch = strtok(NULL, c_delims); - } - delete [] tmp; - return tokens; -} - -/* - * The current state of M5/Ruby integration breaks the libruby - * interface. This code is ifdef'd out for now so that we can move - * forward with the integration process for non-libruby uses. We'll - * have to go back and resolve the libruby compatibility issue at a - * later date. - */ -#if 0 -void -libruby_init(const char* cfg_filename) -{ - ifstream cfg_output(cfg_filename); - - vector<RubyObjConf> * sys_conf = new vector<RubyObjConf>; - - string line; - getline(cfg_output, line) ; - while ( !cfg_output.eof() ) { - vector<string> tokens = tokenizeString(line, " "); - assert(tokens.size() >= 2); - vector<string> argv; - for (size_t i=2; i<tokens.size(); i++) { - replace(tokens[i].begin(), tokens[i].end(), '%', ' '); - replace(tokens[i].begin(), tokens[i].end(), '#', '\n'); - argv.push_back(tokens[i]); - } - sys_conf->push_back(RubyObjConf(tokens[0], tokens[1], argv)); - tokens.clear(); - argv.clear(); - getline(cfg_output, line); - } - - RubySystem::create(*sys_conf); - delete sys_conf; -} -#endif - -RubyPortHandle -libruby_get_port(const char* port_name, - void (*hit_callback)(int64_t access_id)) -{ - // - // Fix me: Hit callback is now a non-static member function pointer of - // RubyPort and cannot be set to an arbitrary global function - // - return NULL;//static_cast<RubyPortHandle>(RubySystem::getPort(port_name, hit_callback)); -} - -RubyPortHandle libruby_get_port_by_name(const char* port_name) -{ - // - // Fix me: Ports should now be initialized using the python configuration - // system - // - return NULL;//static_cast<RubyPortHandle>(RubySystem::getPortOnly(port_name)); -} - -void -libruby_write_ram(uint64_t paddr, uint8_t* data, int len) -{ - RubySystem::getMemoryVector()->write(Address(paddr), data, len); -} - -void -libruby_read_ram(uint64_t paddr, uint8_t* data, int len) -{ - RubySystem::getMemoryVector()->read(Address(paddr), data, len); -} - -int64_t -libruby_issue_request(RubyPortHandle p, struct RubyRequest request) -{ - // - // Fix me: Ports should now be accessed using the python configuration - // system - // - return 0;//return static_cast<RubyPort*>(p)->makeRequest(request); -} - -int -libruby_tick(int n) -{ - RubyEventQueue *eventq = RubySystem::getEventQueue(); - eventq->triggerEvents(eventq->getTime() + n); - return 0; -} - -void -libruby_destroy() -{ -} - -const char* -libruby_last_error() -{ - return ""; -} - -void -libruby_print_config(ostream & out) -{ - RubySystem::printConfig(out); -} - -void -libruby_print_stats(ostream & out) -{ - RubySystem::printStats(out); -} -void -libruby_playback_trace(char * trace_filename) -{ - RubySystem::getTracer()->playbackTrace(trace_filename); -} - -void -libruby_start_tracing(char * record_filename) -{ - // start the trace - RubySystem::getTracer()->startTrace(record_filename); -} - -void -libruby_stop_tracing() -{ - // start the trace - RubySystem::getTracer()->stopTrace(); -} - -uint64_t -libruby_get_time() -{ - return RubySystem::getCycleCount(0); -} diff --git a/src/mem/ruby/libruby_internal.hh b/src/mem/ruby/libruby_internal.hh deleted file mode 100644 index c64814051..000000000 --- a/src/mem/ruby/libruby_internal.hh +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2009 Mark D. Hill and David A. Wood - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution; - * neither the name of the copyright holders nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __MEM_RUBY_LIBRUBY_INTERNAL_HH__ -#define __MEM_RUBY_LIBRUBY_INTERNAL_HH__ - -#include <ostream> -#include <string> - -#include "mem/ruby/libruby.hh" - -std::string RubyRequestType_to_string(const RubyRequestType& obj); -RubyRequestType string_to_RubyRequestType(std::string); -std::ostream& operator<<(std::ostream& out, const RubyRequestType& obj); - -#endif // __MEM_RUBY_LIBRUBY_INTERNAL_HH__ diff --git a/src/mem/ruby/profiler/Profiler.hh b/src/mem/ruby/profiler/Profiler.hh index 26b5b466d..c0cee1d7d 100644 --- a/src/mem/ruby/profiler/Profiler.hh +++ b/src/mem/ruby/profiler/Profiler.hh @@ -62,7 +62,6 @@ #include "mem/ruby/common/Global.hh" #include "mem/ruby/common/Histogram.hh" #include "mem/ruby/common/Set.hh" -#include "mem/ruby/libruby.hh" #include "mem/ruby/system/MachineID.hh" #include "mem/ruby/system/MemoryControl.hh" #include "mem/ruby/system/NodeID.hh" diff --git a/src/mem/ruby/recorder/CacheRecorder.hh b/src/mem/ruby/recorder/CacheRecorder.hh index 14066c387..08a38695c 100644 --- a/src/mem/ruby/recorder/CacheRecorder.hh +++ b/src/mem/ruby/recorder/CacheRecorder.hh @@ -40,7 +40,6 @@ #include "mem/protocol/CacheRequestType.hh" #include "mem/ruby/common/Global.hh" -#include "mem/ruby/libruby_internal.hh" #include "mem/ruby/system/NodeID.hh" #include "mem/ruby/recorder/TraceRecord.hh" diff --git a/src/mem/ruby/recorder/TraceRecord.hh b/src/mem/ruby/recorder/TraceRecord.hh index ed066debb..9ec2bdb99 100644 --- a/src/mem/ruby/recorder/TraceRecord.hh +++ b/src/mem/ruby/recorder/TraceRecord.hh @@ -38,7 +38,6 @@ #include "mem/ruby/common/Address.hh" #include "mem/ruby/common/Global.hh" -#include "mem/ruby/libruby_internal.hh" #include "mem/ruby/system/NodeID.hh" #include "mem/ruby/system/Sequencer.hh" diff --git a/src/mem/ruby/recorder/Tracer.hh b/src/mem/ruby/recorder/Tracer.hh index 4b81d6121..2de4ef164 100644 --- a/src/mem/ruby/recorder/Tracer.hh +++ b/src/mem/ruby/recorder/Tracer.hh @@ -41,7 +41,6 @@ #include "mem/protocol/CacheRequestType.hh" #include "mem/ruby/common/Global.hh" -#include "mem/ruby/libruby_internal.hh" #include "mem/ruby/system/NodeID.hh" #include "params/RubyTracer.hh" #include "sim/sim_object.hh" diff --git a/src/mem/ruby/slicc_interface/RubyRequest.cc b/src/mem/ruby/slicc_interface/RubyRequest.cc new file mode 100644 index 000000000..9189bfa7a --- /dev/null +++ b/src/mem/ruby/slicc_interface/RubyRequest.cc @@ -0,0 +1,100 @@ +#include <iostream> + +#include "mem/ruby/slicc_interface/RubyRequest.hh" + +using namespace std; + +string +RubyRequestType_to_string(const RubyRequestType& obj) +{ + switch(obj) { + case RubyRequestType_IFETCH: + return "IFETCH"; + case RubyRequestType_LD: + return "LD"; + case RubyRequestType_ST: + return "ST"; + case RubyRequestType_Load_Linked: + return "Load_Linked"; + case RubyRequestType_Store_Conditional: + return "Store_Conditional"; + case RubyRequestType_RMW_Read: + return "RMW_Read"; + case RubyRequestType_RMW_Write: + return "RMW_Write"; + case RubyRequestType_Locked_RMW_Read: + return "Locked_RMW_Read"; + case RubyRequestType_Locked_RMW_Write: + return "Locked_RMW_Write"; + case RubyRequestType_NULL: + default: + assert(0); + return ""; + } +} + +RubyRequestType +string_to_RubyRequestType(string str) +{ + if (str == "IFETCH") + return RubyRequestType_IFETCH; + else if (str == "LD") + return RubyRequestType_LD; + else if (str == "ST") + return RubyRequestType_ST; + else if (str == "Locked_Read") + return RubyRequestType_Load_Linked; + else if (str == "Locked_Write") + return RubyRequestType_Store_Conditional; + else if (str == "RMW_Read") + return RubyRequestType_RMW_Read; + else if (str == "RMW_Write") + return RubyRequestType_RMW_Write; + else if (str == "Locked_RMW_Read") + return RubyRequestType_Locked_RMW_Read; + else if (str == "Locked_RMW_Write") + return RubyRequestType_Locked_RMW_Write; + else + assert(0); + return RubyRequestType_NULL; +} + +ostream& +operator<<(ostream& out, const RubyRequestType& obj) +{ + out << RubyRequestType_to_string(obj); + out << flush; + return out; +} + +ostream& +operator<<(ostream& out, const RubyRequest& obj) +{ + out << hex << "0x" << obj.paddr << " data: 0x" << flush; + for (int i = 0; i < obj.len; i++) { + out << (int)obj.data[i]; + } + out << dec << " type: " << RubyRequestType_to_string(obj.type) << endl; + return out; +} + +vector<string> +tokenizeString(string str, string delims) +{ + vector<string> tokens; + char* pch; + char* tmp; + const char* c_delims = delims.c_str(); + tmp = new char[str.length()+1]; + strcpy(tmp, str.c_str()); + pch = strtok(tmp, c_delims); + while (pch != NULL) { + string tmp_str(pch); + if (tmp_str == "null") tmp_str = ""; + tokens.push_back(tmp_str); + + pch = strtok(NULL, c_delims); + } + delete [] tmp; + return tokens; +} diff --git a/src/mem/ruby/libruby.hh b/src/mem/ruby/slicc_interface/RubyRequest.hh index 6dd301578..b97e8cbbc 100644 --- a/src/mem/ruby/libruby.hh +++ b/src/mem/ruby/slicc_interface/RubyRequest.hh @@ -26,13 +26,17 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef __MEM_RUBY_LIBRUBY_HH__ -#define __MEM_RUBY_LIBRUBY_HH__ +#ifndef __MEM_RUBY_SLICC_INTERFACE_RUBY_REQUEST_HH__ +#define __MEM_RUBY_SLICC_INTERFACE_RUBY_REQUEST_HH__ #include <ostream> -#include "base/types.hh" #include "mem/packet.hh" +#include "mem/protocol/AccessModeType.hh" +#include "mem/protocol/CacheRequestType.hh" +#include "mem/protocol/Message.hh" +#include "mem/protocol/PrefetchBit.hh" +#include "mem/ruby/common/Address.hh" typedef void* RubyPortHandle; enum RubyRequestType { @@ -55,8 +59,9 @@ enum RubyAccessMode { RubyAccessMode_Device }; -struct RubyRequest +class RubyRequest { + public: uint64_t paddr; uint8_t* data; int len; @@ -84,97 +89,13 @@ struct RubyRequest pkt(_pkt), proc_id(_proc_id) {} + + void print(std::ostream& out) const; }; -std::ostream& operator<<(std::ostream& out, const RubyRequest& obj); +std::string RubyRequestType_to_string(const RubyRequestType& obj); +RubyRequestType string_to_RubyRequestType(std::string); std::ostream& operator<<(std::ostream& out, const RubyRequestType& obj); +std::ostream& operator<<(std::ostream& out, const RubyRequest& obj); -/** - * Initialize the system. cfg_file is a Ruby-lang configuration script - */ -void libruby_init(const char* cfg_file); - -/** - * Tear down a configured system. Must be invoked after a call to - * libruby_init. - */ -void libruby_destroy(); - -/** - * Print the last error encountered by ruby. Currently unimplemented. - */ -const char* libruby_last_error(); - -/** - * Retrieve a handle to a RubyPort object, identified by name in the - * configuration. You also pass in the callback function you want - * this port to use when a request completes. Only one handle to a - * port is allowed at a time. - */ -RubyPortHandle libruby_get_port(const char* name, - void (*hit_callback)(int64_t access_id)); - -/** - * Retrieve a handle to a RubyPort object, identified by name in the - * configuration. - */ -RubyPortHandle libruby_get_port_by_name(const char* name); - -/** - * issue_request returns a unique access_id to identify the ruby - * transaction. This access_id is later returned to the caller via - * hit_callback (passed to libruby_get_port) - */ -int64_t libruby_issue_request(RubyPortHandle p, struct RubyRequest request); - -/** - * writes data directly into Ruby's data array. Note that this - * ignores caches, and should be considered incoherent after - * simulation starts. - */ -void libruby_write_ram(uint64_t paddr, uint8_t *data, int len); - -/** - * reads data directory from Ruby's data array. Note that this - * ignores caches, and should be considered incoherent after - * simulation starts - */ -void libruby_read_ram(uint64_t paddr, uint8_t *data, int len); - -/** - * tick the system n cycles. Eventually, will return the number of - * cycles until the next event, but for now it always returns 0 - */ -int libruby_tick(int n); - -/** - * self explainitory - */ -void libruby_print_config(std::ostream &out); - -/** - * self explainitory - */ -void libruby_print_stats(std::ostream &out); - -/** - * does not return until done - */ -void libruby_playback_trace(char *trace_filename); - -/* - * enables the tracer and opens the trace file - */ -void libruby_start_tracing(char *record_filename); - -/* - * closes the trace file - */ -void libruby_stop_tracing(); - -/** - * get time - */ -uint64_t libruby_get_time(); - -#endif // __MEM_RUBY_LIBRUBY_HH__ +#endif diff --git a/src/mem/ruby/slicc_interface/SConscript b/src/mem/ruby/slicc_interface/SConscript index 111859559..256f8e64e 100644 --- a/src/mem/ruby/slicc_interface/SConscript +++ b/src/mem/ruby/slicc_interface/SConscript @@ -37,5 +37,6 @@ SimObject('Controller.py') Source('AbstractEntry.cc') Source('AbstractCacheEntry.cc') +Source('RubyRequest.cc') Source('RubySlicc_Profiler_interface.cc') Source('RubySlicc_ComponentMapping.cc') diff --git a/src/mem/ruby/storebuffer/storebuffer.cc b/src/mem/ruby/storebuffer/storebuffer.cc index 0486c6510..0accf138d 100644 --- a/src/mem/ruby/storebuffer/storebuffer.cc +++ b/src/mem/ruby/storebuffer/storebuffer.cc @@ -59,7 +59,6 @@ StoreBuffer::StoreBuffer(uint32 id, uint32 block_bits, int storebuffer_size) char name [] = "Sequencer_"; char port_name [13]; sprintf(port_name, "%s%d", name, id); - m_port = libruby_get_port(port_name, hit); m_hit_callback = NULL; assert(storebuffer_size >= 0); m_storebuffer_size = storebuffer_size; @@ -67,13 +66,9 @@ StoreBuffer::StoreBuffer(uint32 id, uint32 block_bits, int storebuffer_size) m_block_size = 1 << block_bits; m_block_mask = ~(m_block_size - 1); m_buffer_size = 0; - m_use_storebuffer = false; m_storebuffer_full = false; m_storebuffer_flushing = false; m_stalled_issue = true; - if (m_storebuffer_size > 0){ - m_use_storebuffer = true; - } } StoreBuffer::~StoreBuffer() @@ -91,19 +86,6 @@ StoreBuffer::registerHitCallback(void (*hit_callback)(int64_t request_id)) void StoreBuffer::addToStoreBuffer(RubyRequest request) { - if (!m_use_storebuffer) { - // make request to libruby - uint64_t id = libruby_issue_request(m_port, request); - if (request_map.find(id) != request_map.end()) { - panic("Request ID: %d is already in the map\n", id); - } else { - request_map.insert(make_pair(id, this)); - outstanding_requests.insert(make_pair(id, request)); - } - return; - } - - buffer.push_front(SBEntry(request, NULL)); m_buffer_size++; @@ -128,28 +110,12 @@ StoreBuffer::addToStoreBuffer(RubyRequest request) int64_t StoreBuffer::handleLoad(RubyRequest request) { - if (!m_use_storebuffer) { - // make a request to ruby - return libruby_issue_request(m_port, request); - } - load_match match = checkForLoadHit(request); if (match == FULL_MATCH) { // fill data returnMatchedData(request); iseq++; return -2; - } else if (match == NO_MATCH) { - // make request to libruby and return the id - uint64_t id = libruby_issue_request(m_port, request); - if (request_map.find(id) != request_map.end()) { - panic("Request ID: %d is already in the map\n", id); - } else { - request_map.insert(make_pair(id, this)); - outstanding_requests.insert(make_pair(id, request)); - } - iseq++; - return id; } else { // partial match return -3; } @@ -159,12 +125,6 @@ StoreBuffer::handleLoad(RubyRequest request) load_match StoreBuffer::checkForLoadHit(RubyRequest request) { - if (!m_use_storebuffer) { - // this function should never be called if we are not using a - // store buffer - panic("checkForLoadHit called while write buffer is not in use\n"); - } - physical_address_t physical_address = request.paddr; int len = request.len; @@ -270,14 +230,6 @@ StoreBuffer::flushStoreBuffer() void StoreBuffer::issueNextStore() { - SBEntry request = buffer.back(); - uint64_t id = libruby_issue_request(m_port, request.m_request); - if (request_map.find(id) != request_map.end()) { - assert(0); - } else { - request_map.insert(make_pair(id, this)); - outstanding_requests.insert(make_pair(id, request.m_request)); - } } void diff --git a/src/mem/ruby/storebuffer/storebuffer.hh b/src/mem/ruby/storebuffer/storebuffer.hh index 6d476706b..b2b8483fd 100644 --- a/src/mem/ruby/storebuffer/storebuffer.hh +++ b/src/mem/ruby/storebuffer/storebuffer.hh @@ -33,7 +33,7 @@ #include <map> #include "mem/ruby/common/TypeDefines.hh" -#include "mem/ruby/libruby.hh" +#include "mem/ruby/slicc_interface/RubyRequest.hh" /** * Status for write buffer accesses. The Write buffer can hit in diff --git a/src/mem/ruby/system/RubyPort.hh b/src/mem/ruby/system/RubyPort.hh index 2125d6027..82ddc682a 100644 --- a/src/mem/ruby/system/RubyPort.hh +++ b/src/mem/ruby/system/RubyPort.hh @@ -35,7 +35,7 @@ #include "mem/mem_object.hh" #include "mem/physical.hh" #include "mem/protocol/RequestStatus.hh" -#include "mem/ruby/libruby.hh" +#include "mem/ruby/slicc_interface/RubyRequest.hh" #include "mem/ruby/system/System.hh" #include "mem/tport.hh" #include "params/RubyPort.hh" diff --git a/src/mem/ruby/system/Sequencer.cc b/src/mem/ruby/system/Sequencer.cc index 8de46e4af..800352eed 100644 --- a/src/mem/ruby/system/Sequencer.cc +++ b/src/mem/ruby/system/Sequencer.cc @@ -35,7 +35,7 @@ #include "mem/ruby/buffers/MessageBuffer.hh" #include "mem/ruby/common/Global.hh" #include "mem/ruby/common/SubBlock.hh" -#include "mem/ruby/libruby.hh" +#include "mem/ruby/slicc_interface/RubyRequest.hh" #include "mem/ruby/profiler/Profiler.hh" #include "mem/ruby/recorder/Tracer.hh" #include "mem/ruby/slicc_interface/AbstractController.hh" |