1sed 's/|/ /g' | awk --bignum ' 2 3func chnstr(chn) { 4 if(chn == 1){ 5 return "A" 6 } else if(chn == 2){ 7 return "B" 8 } else if(chn == 4){ 9 return "C" 10 } 11 return "Unknown Channel" 12} 13 14func opstr(chn, op, msTask) { 15 a_op[1] = "PutFullData" 16 a_op[2] = "PutPartialData" 17 a_op[3] = "ArithmeticData" 18 a_op[4] = "LogicalData" 19 a_op[5] = "Get" 20 a_op[6] = "Hint" 21 a_op[7] = "AcquireBlock" 22 a_op[8] = "AcquirePerm" 23 24 b_op[1] = "PutFullData" 25 b_op[2] = "PutPartialData" 26 b_op[3] = "ArithmeticData" 27 b_op[4] = "LogicalData" 28 b_op[5] = "Get" 29 b_op[6] = "Hint" 30 b_op[7] = "Probe" 31 32 c_op[1] = "AccessAck" 33 c_op[2] = "AccessAckData" 34 c_op[3] = "HintAck" 35 c_op[4] = "Invalid Opcode" 36 c_op[5] = "ProbeAck" 37 c_op[6] = "ProbeAckData" 38 c_op[7] = "Release" 39 c_op[8] = "ReleaseData" 40 41 d_op[1] = "AccessAck" 42 d_op[2] = "AccessAckData" 43 d_op[3] = "HintAck" 44 d_op[4] = "Invalid Opcode" 45 d_op[5] = "Grant" 46 d_op[6] = "GrantData" 47 d_op[7] = "ReleaseAck" 48 49 msa_op[2] = "AccessAckData" 50 msa_op[3] = "HintAck" 51 msa_op[5] = "Grant" 52 msa_op[6] = "GrantData" 53 msa_op[7] = "Release" 54 msa_op[8] = "ReleaseData" 55 56 ret = "Unknown OP" 57 58 if(msTask == 0){ 59 switch(chn) { 60 case 1: 61 ret = a_op[op+1] 62 break; 63 case 2: 64 ret = b_op[op+1] 65 break; 66 case 4: 67 ret = c_op[op+1] 68 break; 69 } 70 } else { 71 switch(chn) { 72 case 1: 73 ret = msa_op[op+1] 74 break; 75 case 2: 76 ret = c_op[op+1] 77 break; 78 } 79 } 80 return ret 81} 82func paramstr(op, param) { 83 split("Grow NtoB_Grow NtoT_Grow BtoT", grow, "_") 84 split("Cap toT_Cap toB_Cap toN", cap, "_") 85 split("Shrink TtoB_Shrink TtoN_Shrink BtoN_Report TotT_Report BtoB_Report NtoN", report, "_") 86 87 ret = "Reserved" 88 if(op == 'AcquireBlock' || op == 'AcquirePerm'){ 89 ret = grow[param+1] 90 } else if(op == 'Probe'){ 91 ret = cap[param+1] 92 } else if(op == 'Release' || op == 'ReleaseData' || op == 'ProbeAck' || op == 'ProbeAckData'){ 93 ret = report[param+1] 94 } else if(op == 'Grant' || op == 'GrantData'){ 95 ret = cap[param+1] 96 } 97 return ret 98} 99func taskstr(msTask) { 100 if(msTask == 0){ 101 return "Chn " 102 } else { 103 return "Mshr" 104 } 105} 106func fulladdr_tltest(tag, set, bank) { 107 tagbits = 3; 108 setbits = 7; 109 bankbits = 0; 110 return (tag * (2^(bankbits + setbits)) + (set * (2^bankbits)) + bank) * 64; 111} 112func fulladdr_xs(tag, set, bank) { 113 tagbits = 19; 114 setbits = 9; 115 bankbits = 2; 116 return (tag * (2^(bankbits + setbits)) + (set * (2^bankbits)) + bank) * 64; 117} 118 119# TODO: add param 120{ 121 METAWWAY = $2; 122 METAWVALID = $3; 123 MSHRID = $4; 124 ALLOCPTR = $5; 125 ALLOCVALID = $6; 126 DIRWAY= $7; 127 DIRHIT = $8; 128 SSET = $9; 129 TAG = $10; 130 OPCODE = $11; 131 CHANNEL = $12; 132 MSHRTASK = $13; 133 STAMP = $14; 134 SITE = $15; 135 136 match(SITE, /[0-9]+$/) 137 BANK = substr(SITE, RSTART, RLENGTH) 138 ADDR = fulladdr_xs(TAG, SSET, BANK) 139 140 $1 = STAMP; 141 $2 = SITE; 142 $3 = taskstr(MSHRTASK); 143 $4 = chnstr(CHANNEL); 144 $5 = sprintf("%14s |", opstr(CHANNEL, OPCODE, MSHRTASK)); 145 $6 = sprintf("%lx(%d)", TAG, TAG); 146 $7 = sprintf("%lx(%d)\t", SSET, SSET); 147 $8 = sprintf("%lx(%d)\t", ADDR, ADDR); 148 149 $9 = sprintf("|DIR %d %d", DIRHIT, DIRWAY); 150 $10 = sprintf("|ALLOC %d %2d", ALLOCVALID, ALLOCPTR); 151 $11 = sprintf("|MSHRID %2d", MSHRID); 152 $12 = sprintf("|METAW %d %d", METAWVALID, METAWWAY); 153 154 $13 = ""; 155 $14 = ""; 156 $15 = ""; 157} 158 1591 # print every line 160' 161