isaspec: Extend split_bits(..) to accept a bitsize

Make split_bits(..) more generic.

Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com>
Reviewed-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16996>
This commit is contained in:
Christian Gmeiner 2022-06-07 17:38:50 +02:00 committed by Marge Bot
parent 96f0944a69
commit 119d8488dd
2 changed files with 9 additions and 9 deletions

View File

@ -145,7 +145,7 @@ static const struct isa_case ${case.get_c_name()}_gen_${bitset.gen_min} = {
.enums = &${isa.enums[field.type].get_c_name()},
% endif
% if field.get_c_typename() == 'TYPE_ASSERT':
.val.bitset = { ${', '.join(isa.split_bits(field.val))} },
.val.bitset = { ${', '.join(isa.split_bits(field.val, 32))} },
% endif
},
% endfor
@ -162,9 +162,9 @@ static const struct isa_bitset bitset_${bitset.get_c_name()}_gen_${bitset.gen_mi
.min = ${bitset.get_gen_min()},
.max = ${bitset.get_gen_max()},
},
.match.bitset = { ${', '.join(isa.split_bits(pattern.match))} },
.dontcare.bitset = { ${', '.join(isa.split_bits(pattern.dontcare))} },
.mask.bitset = { ${', '.join(isa.split_bits(pattern.mask))} },
.match.bitset = { ${', '.join(isa.split_bits(pattern.match, 32))} },
.dontcare.bitset = { ${', '.join(isa.split_bits(pattern.dontcare, 32))} },
.mask.bitset = { ${', '.join(isa.split_bits(pattern.mask, 32))} },
.num_cases = ${len(bitset.cases)},
.cases = {
% for case in bitset.cases:

View File

@ -551,14 +551,14 @@ class ISA(object):
return ', '.join(parts)
def split_bits(self, value):
''' Split `value` into a list of 32-bit integers '''
mask, parts = (1 << 32) - 1, []
words = self.bitsize / 32
def split_bits(self, value, bitsize):
''' Split `value` into a list of bitsize-bit integers '''
mask, parts = (1 << bitsize) - 1, []
words = self.bitsize / bitsize
while value:
parts.append(hex(value & mask))
value >>= 32
value >>= bitsize
# Add 'missing' words
while len(parts) < words: