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