Skip to content

Commit aae1c07

Browse files
committed
generalize deduction of hex, bin, oct values in warl functions
1 parent c1f97ab commit aae1c07

File tree

1 file changed

+22
-33
lines changed

1 file changed

+22
-33
lines changed

riscv_config/warl.py

Lines changed: 22 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def prevsum(self, i, k):
2626

2727
def islegal(self, value, dependency_vals=[]):
2828
is_legal = False
29-
logger.debug('Checking for isLegal for WARL: \n\t' +
29+
logger.debug('Checking for isLegal for WARL: \n' +
3030
utils.pretty_print_yaml(self.warl) + '\n With following args:'\
3131
+ 'val : ' + str(value) + ' dep_vals :'+
3232
str(dependency_vals))
@@ -46,21 +46,15 @@ def islegal(self, value, dependency_vals=[]):
4646
if not bitmask: # if its not a bitmask
4747
if ":" in csr_vals: # range is specified
4848
[base, bound] = csr_vals.split(':')
49-
if 'x' in base:
50-
base = int(base,16)
51-
else:
52-
base = int(base,10)
53-
if 'x' in bound:
54-
bound = int(bound,16)
55-
else:
56-
bound = int(bound,10)
49+
base = int(base, 0)
50+
bound = int(bound, 0)
5751
if value >= base and value <= bound: # check legal range
5852
part_legal = True
5953
else:
6054
l_vals = csr_vals.split(',')
6155
legal_vals = []
6256
for i in l_vals :
63-
legal_vals.append(int(i,16))
57+
legal_vals.append(int(i,0))
6458
if value in legal_vals:
6559
part_legal = True
6660
else: # in case of bitmask there are no illegal values
@@ -100,17 +94,15 @@ def islegal(self, value, dependency_vals=[]):
10094
# check if the dependency value is satisfied.
10195
if ":" in dep_vals: # range is specified
10296
[base, bound] = dep_vals.split(':')
103-
if 'x' in base:
104-
base = int(base,16)
105-
if 'x' in bound:
106-
bound = int(bound,16)
97+
base = int(base, 0)
98+
bound = int(bound, 0)
10799
if recvd_val >= base and recvd_val <= bound: # check legal range
108100
dep_satified = True
109101
else:
110102
l_vals = dep_vals.split(',')
111103
legal_vals = []
112104
for i in l_vals :
113-
legal_vals.append(int(i,16))
105+
legal_vals.append(int(i,0))
114106
if recvd_val in legal_vals:
115107
dep_satified = True
116108

@@ -125,17 +117,15 @@ def islegal(self, value, dependency_vals=[]):
125117
if not bitmask: # if its not a bitmask
126118
if ":" in csr_vals: # range is specified
127119
[base, bound] = csr_vals.split(':')
128-
if 'x' in base:
129-
base = int(base,16)
130-
if 'x' in bound:
131-
bound = int(bound,16)
120+
base = int(base, 0)
121+
bound = int(bound, 0)
132122
if trunc_val >= base and trunc_val <= bound: # check legal range
133123
part_legal = True
134124
else:
135125
l_vals = csr_vals.split(',')
136126
legal_vals = []
137127
for i in l_vals :
138-
legal_vals.append(int(i,16))
128+
legal_vals.append(int(i,0))
139129
if trunc_val in legal_vals:
140130
part_legal = True
141131
else: # in case of bitmask there are no illegal values
@@ -196,9 +186,8 @@ def update(self, curr_val, wr_val, dependency_vals=[]):
196186
for i1 in range(len(dependency_vals)):
197187
if dependency_vals[i1] == int(mode[i1]):
198188
if op != []:
199-
if int(wr_val,
200-
16) in range(int(z[0], 16),
201-
int(z[1], 16)):
189+
if int(wr_val, 0) in range(int(z[0], 0),
190+
int(z[1], 0)):
202191
j = i
203192
flag1 = 1
204193
break
@@ -220,7 +209,7 @@ def update(self, curr_val, wr_val, dependency_vals=[]):
220209
self.warl['wr_illegal'][i])
221210
if op != []:
222211
z = re.split("\:", op[0])
223-
if int(wr_val, 16) in range(int(z[0], 16), int(z[1], 16)):
212+
if int(wr_val, 0) in range(int(z[0], 0), int(z[1], 0)):
224213
j = i
225214
flag1 = 1
226215
break
@@ -260,7 +249,7 @@ def update(self, curr_val, wr_val, dependency_vals=[]):
260249
l = self.legal(dependency_vals)
261250
for i in range(len(l)):
262251
if len(l[i]) == 1:
263-
a.append(abs(int(wr_val, 16) - int(l[i][0], 16)))
252+
a.append(abs(int(wr_val, 0) - int(l[i][0], 0)))
264253
for i in range(len(a) - 1, -1, -1):
265254
if a[i] == min(a):
266255
j = i
@@ -274,7 +263,7 @@ def update(self, curr_val, wr_val, dependency_vals=[]):
274263
l = self.legal(dependency_vals)
275264
for i in range(len(l)):
276265
if len(l[i]) == 1:
277-
a.append(abs(int(wr_val, 16) - int(l[i][0], 16)))
266+
a.append(abs(int(wr_val, 0) - int(l[i][0], 0)))
278267
for i in range(len(a)):
279268
if a[i] == min(a):
280269
j = i
@@ -286,7 +275,7 @@ def update(self, curr_val, wr_val, dependency_vals=[]):
286275
elif wr.lower().strip() == "nextup":
287276
l = self.legal(dependency_vals)
288277
for i in range(len(l)):
289-
if int(l[i][0], 16) > int(wr_val, 16) and len(l[i]) == 1:
278+
if int(l[i][0], 0) > int(wr_val, 0) and len(l[i]) == 1:
290279
j = i
291280
flag2 = 1
292281
break
@@ -298,7 +287,7 @@ def update(self, curr_val, wr_val, dependency_vals=[]):
298287
elif wr.lower().strip() == "nextdown":
299288
l = self.legal(dependency_vals)
300289
for i in range(len(l)):
301-
if int(l[i][0], 16) > int(wr_val, 16) and len(l[i]) == 1:
290+
if int(l[i][0], 0) > int(wr_val, 0) and len(l[i]) == 1:
302291
j = i
303292
flag2 = 1
304293
break
@@ -338,7 +327,7 @@ def update(self, curr_val, wr_val, dependency_vals=[]):
338327
return y[0]
339328

340329
elif wr.lower().strip() == "addr":
341-
wr = format(int(wr_val, 16),
330+
wr = format(int(wr_val, 0),
342331
'#0{}b'.format(4 * self.bitsum + 2))
343332
wr = wr[2:]
344333
if wr[0:1] == '0':
@@ -347,7 +336,7 @@ def update(self, curr_val, wr_val, dependency_vals=[]):
347336
wr_final = '0' + wr[1:]
348337
else:
349338
print("Invalid binary bit")
350-
return hex(int(wr_final, 2))
339+
return hex(int(wr_final, 0))
351340

352341
else:
353342
return "Invalid update mode"
@@ -358,9 +347,9 @@ def update(self, curr_val, wr_val, dependency_vals=[]):
358347
z = re.findall(
359348
r'\s*.*\s*\[(.*)\]\s*{}\s*\[.*?,.*?\]'.format("bitmask"), inp1)
360349
y = re.split("\,", x[0])
361-
bitmask = int(y[0], 16)
362-
fixedval = int(y[1], 16)
363-
currval = int(wr_val, 16)
350+
bitmask = int(y[0], 0)
351+
fixedval = int(y[1], 0)
352+
currval = int(wr_val, 0)
364353
legal = ((currval & bitmask) | fixedval)
365354
return hex(legal)
366355

0 commit comments

Comments
 (0)