@@ -195,11 +195,34 @@ func baseFrequencyFromOutput(outputs map[string]script.ScriptOutput) string {
195
195
return ""
196
196
}
197
197
198
- func convertMsrToDecimals (msr string ) (decVals []int , err error ) {
198
+ // convertHexStringToDecimals converts a hex string to a slice of decimal values.
199
+ //
200
+ // formats:
201
+ // - "0x1212121212121212"
202
+ // - "1212121212121212"
203
+ // we need two hex characters for each decimal value
204
+ // some input strings may need to be padded with a leading zero
205
+ // always return a slice of 8 decimal values
206
+ func convertHexStringToDecimals (hexStr string ) (decVals []int , err error ) {
207
+ hexStr = strings .TrimPrefix (hexStr , "0x" )
208
+ hexStr = strings .TrimSpace (hexStr )
209
+ // no more than 16 characters
210
+ if len (hexStr ) > 16 {
211
+ err = fmt .Errorf ("hex string too long: %s" , hexStr )
212
+ return
213
+ }
214
+ // pad up to 16 characters
215
+ for range 16 - len (hexStr ) {
216
+ hexStr = "0" + hexStr
217
+ }
199
218
re := regexp .MustCompile (`[0-9a-fA-F][0-9a-fA-F]` )
200
- hexVals := re .FindAll ([]byte (msr ), - 1 )
219
+ hexVals := re .FindAll ([]byte (hexStr ), - 1 )
201
220
if hexVals == nil {
202
- err = fmt .Errorf ("no hex values found in msr" )
221
+ err = fmt .Errorf ("no hex values found in hex string" )
222
+ return
223
+ }
224
+ if len (hexVals ) != 8 {
225
+ err = fmt .Errorf ("expected 8 hex values, got %d" , len (hexVals ))
203
226
return
204
227
}
205
228
decVals = make ([]int , len (hexVals ))
@@ -251,7 +274,7 @@ func getSpecFrequencyBuckets(outputs map[string]script.ScriptOutput) ([][]string
251
274
return nil , fmt .Errorf ("unexpected output format" )
252
275
}
253
276
// get list of buckets
254
- bucketCoreCounts , _ := convertMsrToDecimals (values [0 ])
277
+ bucketCoreCounts , _ := convertHexStringToDecimals (values [0 ])
255
278
// create buckets
256
279
var totalCoreBuckets []string // only for multi-die architectures
257
280
var dieCoreBuckets []string
@@ -286,7 +309,7 @@ func getSpecFrequencyBuckets(outputs map[string]script.ScriptOutput) ([][]string
286
309
var freqs []int
287
310
if isaHex != "0" {
288
311
var err error
289
- freqs , err = convertMsrToDecimals (isaHex )
312
+ freqs , err = convertHexStringToDecimals (isaHex )
290
313
if err != nil {
291
314
return nil , err
292
315
}
0 commit comments