RubyRequest.cc revision 8092
18092Snilay@cs.wisc.edu#include <iostream> 28092Snilay@cs.wisc.edu 38092Snilay@cs.wisc.edu#include "mem/ruby/slicc_interface/RubyRequest.hh" 48092Snilay@cs.wisc.edu 58092Snilay@cs.wisc.eduusing namespace std; 68092Snilay@cs.wisc.edu 78092Snilay@cs.wisc.edustring 88092Snilay@cs.wisc.eduRubyRequestType_to_string(const RubyRequestType& obj) 98092Snilay@cs.wisc.edu{ 108092Snilay@cs.wisc.edu switch(obj) { 118092Snilay@cs.wisc.edu case RubyRequestType_IFETCH: 128092Snilay@cs.wisc.edu return "IFETCH"; 138092Snilay@cs.wisc.edu case RubyRequestType_LD: 148092Snilay@cs.wisc.edu return "LD"; 158092Snilay@cs.wisc.edu case RubyRequestType_ST: 168092Snilay@cs.wisc.edu return "ST"; 178092Snilay@cs.wisc.edu case RubyRequestType_Load_Linked: 188092Snilay@cs.wisc.edu return "Load_Linked"; 198092Snilay@cs.wisc.edu case RubyRequestType_Store_Conditional: 208092Snilay@cs.wisc.edu return "Store_Conditional"; 218092Snilay@cs.wisc.edu case RubyRequestType_RMW_Read: 228092Snilay@cs.wisc.edu return "RMW_Read"; 238092Snilay@cs.wisc.edu case RubyRequestType_RMW_Write: 248092Snilay@cs.wisc.edu return "RMW_Write"; 258092Snilay@cs.wisc.edu case RubyRequestType_Locked_RMW_Read: 268092Snilay@cs.wisc.edu return "Locked_RMW_Read"; 278092Snilay@cs.wisc.edu case RubyRequestType_Locked_RMW_Write: 288092Snilay@cs.wisc.edu return "Locked_RMW_Write"; 298092Snilay@cs.wisc.edu case RubyRequestType_NULL: 308092Snilay@cs.wisc.edu default: 318092Snilay@cs.wisc.edu assert(0); 328092Snilay@cs.wisc.edu return ""; 338092Snilay@cs.wisc.edu } 348092Snilay@cs.wisc.edu} 358092Snilay@cs.wisc.edu 368092Snilay@cs.wisc.eduRubyRequestType 378092Snilay@cs.wisc.edustring_to_RubyRequestType(string str) 388092Snilay@cs.wisc.edu{ 398092Snilay@cs.wisc.edu if (str == "IFETCH") 408092Snilay@cs.wisc.edu return RubyRequestType_IFETCH; 418092Snilay@cs.wisc.edu else if (str == "LD") 428092Snilay@cs.wisc.edu return RubyRequestType_LD; 438092Snilay@cs.wisc.edu else if (str == "ST") 448092Snilay@cs.wisc.edu return RubyRequestType_ST; 458092Snilay@cs.wisc.edu else if (str == "Locked_Read") 468092Snilay@cs.wisc.edu return RubyRequestType_Load_Linked; 478092Snilay@cs.wisc.edu else if (str == "Locked_Write") 488092Snilay@cs.wisc.edu return RubyRequestType_Store_Conditional; 498092Snilay@cs.wisc.edu else if (str == "RMW_Read") 508092Snilay@cs.wisc.edu return RubyRequestType_RMW_Read; 518092Snilay@cs.wisc.edu else if (str == "RMW_Write") 528092Snilay@cs.wisc.edu return RubyRequestType_RMW_Write; 538092Snilay@cs.wisc.edu else if (str == "Locked_RMW_Read") 548092Snilay@cs.wisc.edu return RubyRequestType_Locked_RMW_Read; 558092Snilay@cs.wisc.edu else if (str == "Locked_RMW_Write") 568092Snilay@cs.wisc.edu return RubyRequestType_Locked_RMW_Write; 578092Snilay@cs.wisc.edu else 588092Snilay@cs.wisc.edu assert(0); 598092Snilay@cs.wisc.edu return RubyRequestType_NULL; 608092Snilay@cs.wisc.edu} 618092Snilay@cs.wisc.edu 628092Snilay@cs.wisc.eduostream& 638092Snilay@cs.wisc.eduoperator<<(ostream& out, const RubyRequestType& obj) 648092Snilay@cs.wisc.edu{ 658092Snilay@cs.wisc.edu out << RubyRequestType_to_string(obj); 668092Snilay@cs.wisc.edu out << flush; 678092Snilay@cs.wisc.edu return out; 688092Snilay@cs.wisc.edu} 698092Snilay@cs.wisc.edu 708092Snilay@cs.wisc.eduostream& 718092Snilay@cs.wisc.eduoperator<<(ostream& out, const RubyRequest& obj) 728092Snilay@cs.wisc.edu{ 738092Snilay@cs.wisc.edu out << hex << "0x" << obj.paddr << " data: 0x" << flush; 748092Snilay@cs.wisc.edu for (int i = 0; i < obj.len; i++) { 758092Snilay@cs.wisc.edu out << (int)obj.data[i]; 768092Snilay@cs.wisc.edu } 778092Snilay@cs.wisc.edu out << dec << " type: " << RubyRequestType_to_string(obj.type) << endl; 788092Snilay@cs.wisc.edu return out; 798092Snilay@cs.wisc.edu} 808092Snilay@cs.wisc.edu 818092Snilay@cs.wisc.eduvector<string> 828092Snilay@cs.wisc.edutokenizeString(string str, string delims) 838092Snilay@cs.wisc.edu{ 848092Snilay@cs.wisc.edu vector<string> tokens; 858092Snilay@cs.wisc.edu char* pch; 868092Snilay@cs.wisc.edu char* tmp; 878092Snilay@cs.wisc.edu const char* c_delims = delims.c_str(); 888092Snilay@cs.wisc.edu tmp = new char[str.length()+1]; 898092Snilay@cs.wisc.edu strcpy(tmp, str.c_str()); 908092Snilay@cs.wisc.edu pch = strtok(tmp, c_delims); 918092Snilay@cs.wisc.edu while (pch != NULL) { 928092Snilay@cs.wisc.edu string tmp_str(pch); 938092Snilay@cs.wisc.edu if (tmp_str == "null") tmp_str = ""; 948092Snilay@cs.wisc.edu tokens.push_back(tmp_str); 958092Snilay@cs.wisc.edu 968092Snilay@cs.wisc.edu pch = strtok(NULL, c_delims); 978092Snilay@cs.wisc.edu } 988092Snilay@cs.wisc.edu delete [] tmp; 998092Snilay@cs.wisc.edu return tokens; 1008092Snilay@cs.wisc.edu} 101