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