xref: /XiangShan/scripts/cache/convert_dir.sh (revision 1b46b9591920008655d659ac88cd0250db769664)
1sed 's/|/ /g' | awk '
2
3func get_state(code){
4
5  ret = "Unknown State"
6  switch(code){
7    case 0:
8      ret = "INVALID"
9      break;
10    case 1:
11      ret = "BRANCH"
12      break;
13    case 2:
14      ret = "TRUNK"
15      break;
16    case 3:
17      ret = "TIP"
18      break;
19  }
20  return ret
21}
22
23func get_self_dir(code){
24  prefetch = 0
25  num_clients = 1
26
27  str = "clients: ["
28  for(i = 0; i < num_clients; i++){
29    client_state = and( rshift(code, i * 2 + prefetch), 0x03)
30    str = sprintf("%s %s", str, get_state(client_state))
31  }
32  str = sprintf("%s ]", str)
33
34  self_state_code = and( rshift(code, num_clients * 2 + prefetch), 0x03)
35  self_dirty = and( rshift(code, 2 + num_clients * 2 + prefetch), 1)
36
37  str = sprintf("%s self: [%s] dirty: %d", str, get_state(self_state_code), self_dirty)
38
39  return str
40}
41
42func get_client_dir(dir){
43  return dir
44}
45
46func get_dir(typeId, dir){
47  if(typeId > 1){
48    return get_client_dir(dir)
49  } else {
50    return get_self_dir(dir)
51  }
52}
53
54func get_type(tpe){
55  ret = "Unknown Type"
56  switch(tpe){
57    case 0:
58      ret = "self_dir"
59      break;
60    case 1:
61      ret = "self_tag"
62      break;
63    case 2:
64      ret = "client_dir"
65      break;
66    case 3:
67      ret = "client_tag"
68      break;
69  }
70  return ret
71}
72
73{
74  $1 = $NF;                         # timestamp
75  $NF = "";                         # remove log id
76  if ($7 == 0 || $7 == 2) {
77    $3 = ""
78    $5 = sprintf("dir: %s", get_dir($7, $5))
79  } else {
80    $3 = sprintf("tag: %lx", $3)
81    $5 = ""
82  }
83  $4 = sprintf("set: %lx", $4)
84  $6 = sprintf("way: %d", $6)
85  $7 = get_type($7)                 # type id
86}
87
881                                   # print every line
89'
90