RubyRequest.cc revision 8092:6782b51ae8a8
1#include <iostream> 2 3#include "mem/ruby/slicc_interface/RubyRequest.hh" 4 5using namespace std; 6 7string 8RubyRequestType_to_string(const RubyRequestType& obj) 9{ 10 switch(obj) { 11 case RubyRequestType_IFETCH: 12 return "IFETCH"; 13 case RubyRequestType_LD: 14 return "LD"; 15 case RubyRequestType_ST: 16 return "ST"; 17 case RubyRequestType_Load_Linked: 18 return "Load_Linked"; 19 case RubyRequestType_Store_Conditional: 20 return "Store_Conditional"; 21 case RubyRequestType_RMW_Read: 22 return "RMW_Read"; 23 case RubyRequestType_RMW_Write: 24 return "RMW_Write"; 25 case RubyRequestType_Locked_RMW_Read: 26 return "Locked_RMW_Read"; 27 case RubyRequestType_Locked_RMW_Write: 28 return "Locked_RMW_Write"; 29 case RubyRequestType_NULL: 30 default: 31 assert(0); 32 return ""; 33 } 34} 35 36RubyRequestType 37string_to_RubyRequestType(string str) 38{ 39 if (str == "IFETCH") 40 return RubyRequestType_IFETCH; 41 else if (str == "LD") 42 return RubyRequestType_LD; 43 else if (str == "ST") 44 return RubyRequestType_ST; 45 else if (str == "Locked_Read") 46 return RubyRequestType_Load_Linked; 47 else if (str == "Locked_Write") 48 return RubyRequestType_Store_Conditional; 49 else if (str == "RMW_Read") 50 return RubyRequestType_RMW_Read; 51 else if (str == "RMW_Write") 52 return RubyRequestType_RMW_Write; 53 else if (str == "Locked_RMW_Read") 54 return RubyRequestType_Locked_RMW_Read; 55 else if (str == "Locked_RMW_Write") 56 return RubyRequestType_Locked_RMW_Write; 57 else 58 assert(0); 59 return RubyRequestType_NULL; 60} 61 62ostream& 63operator<<(ostream& out, const RubyRequestType& obj) 64{ 65 out << RubyRequestType_to_string(obj); 66 out << flush; 67 return out; 68} 69 70ostream& 71operator<<(ostream& out, const RubyRequest& obj) 72{ 73 out << hex << "0x" << obj.paddr << " data: 0x" << flush; 74 for (int i = 0; i < obj.len; i++) { 75 out << (int)obj.data[i]; 76 } 77 out << dec << " type: " << RubyRequestType_to_string(obj.type) << endl; 78 return out; 79} 80 81vector<string> 82tokenizeString(string str, string delims) 83{ 84 vector<string> tokens; 85 char* pch; 86 char* tmp; 87 const char* c_delims = delims.c_str(); 88 tmp = new char[str.length()+1]; 89 strcpy(tmp, str.c_str()); 90 pch = strtok(tmp, c_delims); 91 while (pch != NULL) { 92 string tmp_str(pch); 93 if (tmp_str == "null") tmp_str = ""; 94 tokens.push_back(tmp_str); 95 96 pch = strtok(NULL, c_delims); 97 } 98 delete [] tmp; 99 return tokens; 100} 101