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